diff --git a/components/zoom/actions/add-meeting-registrant/add-meeting-registrant.mjs b/components/zoom/actions/add-meeting-registrant/add-meeting-registrant.mjs
index 7dcf8652c73cc..e4834f778b8cf 100644
--- a/components/zoom/actions/add-meeting-registrant/add-meeting-registrant.mjs
+++ b/components/zoom/actions/add-meeting-registrant/add-meeting-registrant.mjs
@@ -1,24 +1,26 @@
import app from "../../zoom.app.mjs";
+import utils from "../../common/utils.mjs";
export default {
key: "zoom-add-meeting-registrant",
name: "Add Meeting Registrant",
- description: "Registers a participant for a meeting. [See the docs here](https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/meetingRegistrantCreate)",
- version: "0.3.3",
+ description: "Registers a participant for a meeting. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/meetings/POST/meetings/{meetingId}/registrants)",
+ version: "0.3.4",
type: "action",
props: {
app,
- meetingId: {
+ paidAccountAlert: {
propDefinition: [
app,
- "meetingId",
+ "paidAccountAlert",
],
},
- occurrenceIds: {
+ meetingId: {
propDefinition: [
app,
- "occurrenceIds",
+ "meetingId",
],
+ description: "The Meeting ID to add the registrant to",
},
email: {
propDefinition: [
@@ -38,6 +40,15 @@ export default {
"lastName",
],
},
+ occurrenceIds: {
+ propDefinition: [
+ app,
+ "occurrenceIds",
+ (c) => ({
+ meetingId: c.meetingId,
+ }),
+ ],
+ },
address: {
propDefinition: [
app,
@@ -160,7 +171,7 @@ export default {
step,
meetingId,
params: {
- occurrence_ids: occurrenceIds,
+ occurrence_ids: occurrenceIds && occurrenceIds.join(","),
},
data: {
email,
@@ -179,9 +190,7 @@ export default {
role_in_purchase_process: roleInPurchaseProcess,
no_of_employees: noOfEmployees,
comments,
- custom_questions: typeof(customQuestions) === "undefined"
- ? customQuestions
- : JSON.parse(customQuestions),
+ custom_questions: utils.parseObj(customQuestions),
},
});
diff --git a/components/zoom/actions/add-webinar-registrant/add-webinar-registrant.mjs b/components/zoom/actions/add-webinar-registrant/add-webinar-registrant.mjs
index 795954d9082ef..3315b69df61d4 100644
--- a/components/zoom/actions/add-webinar-registrant/add-webinar-registrant.mjs
+++ b/components/zoom/actions/add-webinar-registrant/add-webinar-registrant.mjs
@@ -1,24 +1,26 @@
import app from "../../zoom.app.mjs";
+import utils from "../../common/utils.mjs";
export default {
key: "zoom-add-webinar-registrant",
name: "Add Webinar Registrant",
- description: "Registers a participant for a webinar. [See the docs here](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarregistrantcreate).",
- version: "0.3.3",
+ description: "Registers a participant for a webinar. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/webinars/POST/webinars/{webinarId}/registrants)",
+ version: "0.3.4",
type: "action",
props: {
app,
- webinarId: {
+ paidAccountAlert: {
propDefinition: [
app,
- "webinarId",
+ "paidAccountAlert",
],
},
- occurrenceIds: {
+ webinarId: {
propDefinition: [
app,
- "occurrenceIds",
+ "webinarId",
],
+ description: "The Webinar ID to add the registrant to",
},
email: {
propDefinition: [
@@ -38,6 +40,15 @@ export default {
"lastName",
],
},
+ occurrenceIds: {
+ propDefinition: [
+ app,
+ "occurrenceIds",
+ (c) => ({
+ webinarId: c.webinarId,
+ }),
+ ],
+ },
address: {
propDefinition: [
app,
@@ -50,10 +61,10 @@ export default {
"city",
],
},
- country: {
+ state: {
propDefinition: [
app,
- "country",
+ "state",
],
},
zip: {
@@ -62,10 +73,10 @@ export default {
"zip",
],
},
- state: {
+ country: {
propDefinition: [
app,
- "state",
+ "country",
],
},
phone: {
@@ -160,7 +171,7 @@ export default {
step,
webinarId,
params: {
- occurrence_ids: occurrenceIds,
+ occurrence_ids: occurrenceIds && occurrenceIds.join(","),
},
data: {
email,
@@ -179,9 +190,7 @@ export default {
role_in_purchase_process: roleInPurchaseProcess,
no_of_employees: noOfEmployees,
comments,
- custom_questions: typeof(customQuestions) === "undefined"
- ? customQuestions
- : JSON.parse(customQuestions),
+ custom_questions: utils.parseObj(customQuestions),
},
});
diff --git a/components/zoom/actions/create-meeting/create-meeting.mjs b/components/zoom/actions/create-meeting/create-meeting.mjs
index 9b7c916de2810..f4526f8b037f8 100644
--- a/components/zoom/actions/create-meeting/create-meeting.mjs
+++ b/components/zoom/actions/create-meeting/create-meeting.mjs
@@ -1,96 +1,109 @@
-// legacy_hash_id: a_l0i2Mn
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
+import utils from "../../common/utils.mjs";
export default {
key: "zoom-create-meeting",
name: "Create Meeting",
- description: "Creates a meeting for a user. A maximum of 100 meetings can be created for a user in a day.",
- version: "0.1.4",
+ description: "Creates a meeting for a user. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/meetings/POST/users/{userId}/meetings)",
+ version: "0.1.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
+ zoom,
+ userId: {
+ propDefinition: [
+ zoom,
+ "userId",
+ ],
},
topic: {
- type: "string",
- description: "Meeting topic",
- optional: true,
+ propDefinition: [
+ zoom,
+ "topic",
+ ],
},
type: {
- type: "integer",
- description: "Meeting type:\n1 - Instant meeting.\n2 - Scheduled meeting.\n3 - Recurring meeting with no fixed time.\n8 - Recurring meeting with fixed time.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "type",
+ ],
},
- start_time: {
- type: "string",
- description: "Meeting start time. We support two formats for start_time - local time and GMT.\nTo set time as GMT the format should be yyyy-MM-ddTHH:mm:ssZ.\nTo set time using a specific timezone, use yyyy-MM-ddTHH:mm:ss format and specify the timezone ID in the timezone field OR leave it blank and the timezone set on your Zoom account will be used. You can also set the time as UTC as the timezone field.\nThe start_time should only be used for scheduled and / or recurring webinars with fixed time.",
- optional: true,
+ startTime: {
+ propDefinition: [
+ zoom,
+ "startTime",
+ ],
},
duration: {
- type: "integer",
- description: "Meeting duration (minutes). Used for scheduled meetings only.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "duration",
+ ],
},
timezone: {
- type: "string",
- description: "Time zone to format start_time. For example, America/Los_Angeles. For scheduled meetings only. Please reference our time [zone list](https://marketplace.zoom.us/docs/api-reference/other-references/abbreviation-lists#timezones) for supported time zones and their formats.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "timezone",
+ ],
},
password: {
- type: "string",
- description: "Password to join the meeting. Password may only contain the following characters: [a-z A-Z 0-9 @ - _ *]. Max of 10 characters.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "password",
+ ],
},
agenda: {
- type: "string",
- description: "Meeting description.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "agenda",
+ ],
},
- tracking_fields: {
- type: "any",
- description: "Tracking fields.",
- optional: true,
+ trackingFields: {
+ propDefinition: [
+ zoom,
+ "trackingFields",
+ ],
},
recurrence: {
- type: "object",
- description: "Recurrence object",
- optional: true,
+ propDefinition: [
+ zoom,
+ "recurrence",
+ ],
},
settings: {
- type: "string",
- description: "Meeting settings.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "settings",
+ ],
+ },
+ },
+ methods: {
+ createMeeting({
+ userId, ...args
+ }) {
+ return this.zoom.create({
+ path: `/users/${userId}/meetings`,
+ ...args,
+ });
},
},
async run({ $ }) {
- //See the API docs here: https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingcreate
- const config = {
- method: "post",
- url: "https://api.zoom.us/v2/users/me/meetings",
+ const response = await this.createMeeting({
+ $,
+ userId: this.userId,
data: {
topic: this.topic,
type: this.type,
- start_time: this.start_time,
+ start_time: this.startTime,
duration: this.duration,
timezone: this.timezone,
password: this.password,
agenda: this.agenda,
- tracking_fields: typeof this.tracking_fields == "undefined"
- ? this.tracking_fields
- : JSON.parse(this.tracking_fields),
- recurrence: typeof this.recurrence == "undefined"
- ? this.recurrence
- : JSON.parse(this.recurrence),
- settings: typeof this.settings == "undefined"
- ? this.settings
- : JSON.parse(this.settings),
- },
- headers: {
- "Authorization": `Bearer ${this.zoom.$auth.oauth_access_token}`,
- "Content-Type": "application/json",
+ tracking_fields: utils.parseObj(this.trackingFields),
+ recurrence: utils.parseObj(this.recurrence),
+ settings: utils.parseObj(this.settings),
},
- };
- return await axios($, config);
+ });
+ $.export("$summary", `Successfully created meeting with ID \`${response.id}\``);
+ return response;
},
};
diff --git a/components/zoom/actions/create-user/create-user.mjs b/components/zoom/actions/create-user/create-user.mjs
index 51589d52c94a1..488b888a19300 100644
--- a/components/zoom/actions/create-user/create-user.mjs
+++ b/components/zoom/actions/create-user/create-user.mjs
@@ -1,19 +1,22 @@
-// legacy_hash_id: a_poikQ1
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
export default {
key: "zoom-create-user",
name: "Create User",
- description: "Creates a new user in your account.",
- version: "0.2.4",
+ description: "Creates a new user in your account. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/api/users/#tag/users/POST/users)",
+ version: "0.2.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
+ zoom,
+ paidAccountAlert: {
+ propDefinition: [
+ zoom,
+ "paidAccountAlert",
+ ],
},
action: {
type: "string",
+ label: "Action",
description: "Specify how to create the new user:
`create` - User will get an email sent from Zoom. There is a confirmation link in this email. The user will then need to use the link to activate their Zoom account. The user can then set or change their password.
`autoCreate` - This action is provided for the enterprise customer who has a managed domain. This feature is disabled by default because of the security risk involved in creating a user who does not belong to your domain.
`custCreate` - Users created via this option do not have passwords and will not have the ability to log into the Zoom Web Portal or the Zoom Client. To use this option, you must contact the ISV Platform Sales team at isv@zoom.us.
`ssoCreate` - This action is provided for the enabled Pre-provisioning SSO User option. A user created in this way has no password. If not a basic user, a personal vanity URL using the user name (no domain) of the provisioning email will be generated. If the user name or PMI is invalid or occupied, it will use a random number or random personal vanity URL.",
options: [
"create",
@@ -22,27 +25,80 @@ export default {
"ssoCreate",
],
},
- user_info: {
- type: "object",
- description: "Object with the user information. It has the following properties:\nemail: User email address\ntype: User type:
`1` - Basic.
`2` - Licensed.
`3` - On-prem.\nfirst_name: User's first name: cannot contain more than 5 Chinese words.\nlast_name: User's last name: cannot contain more than 5 Chinese words.\npassword: User password. Only used for the \\\"autoCreate\\\" function. The password has to have a minimum of 8 characters and maximum of 32 characters. It must have at least one letter (a, b, c..), at least one number (1, 2, 3...) and include both uppercase and lowercase letters. It should not contain only one identical character repeatedly ('11111111' or 'aaaaaaaa') and it cannot contain consecutive characters ('12345678' or 'abcdefgh').",
+ email: {
+ type: "string",
+ label: "Email",
+ description: "The user's email address",
+ },
+ type: {
+ type: "integer",
+ label: "Type",
+ description: "The type of user",
+ options: [
+ {
+ label: "Basic",
+ value: 1,
+ },
+ {
+ label: "Licensed",
+ value: 2,
+ },
+ {
+ label: "Unassigned without Meetings Basic",
+ value: 4,
+ },
+ {
+ label: "None. this can only be set with ssoCreate",
+ value: 99,
+ },
+ ],
+ },
+ firstName: {
+ propDefinition: [
+ zoom,
+ "firstName",
+ ],
+ description: "The user's first name",
+ optional: true,
+ },
+ lastName: {
+ propDefinition: [
+ zoom,
+ "lastName",
+ ],
+ description: "The user's last name",
+ optional: true,
+ },
+ password: {
+ type: "string",
+ label: "Password",
+ description: "User password. Only used for the \"autoCreate\" function. The password has to have a minimum of 8 characters and maximum of 32 characters. By default (basic requirement), password must have at least one letter (a, b, c..), at least one number (1, 2, 3...) and include both uppercase and lowercase letters. It should not contain only one identical character repeatedly ('11111111' or 'aaaaaaaa') and it cannot contain consecutive characters ('12345678' or 'abcdefgh').",
+ optional: true,
+ },
+ },
+ methods: {
+ createUser(args = {}) {
+ return this.zoom.create({
+ path: "/users",
+ ...args,
+ });
},
},
async run({ $ }) {
- //See the API docs here: https://marketplace.zoom.us/docs/api-reference/zoom-api/users/usercreate
- const config = {
- method: "post",
- url: "https://api.zoom.us/v2/users",
+ const response = await this.createUser({
+ $,
data: {
action: this.action,
- user_info: typeof this.user_info == "undefined"
- ? this.user_info
- : JSON.parse(this.user_info),
- },
- headers: {
- "Authorization": `Bearer ${this.zoom.$auth.oauth_access_token}`,
- "Content-Type": "application/json",
+ user_info: {
+ email: this.email,
+ first_name: this.firstName,
+ last_name: this.lastName,
+ password: this.password,
+ type: this.type,
+ },
},
- };
- return await axios($, config);
+ });
+ $.export("$summary", `Successfully created user with ID \`${response.id}\``);
+ return response;
},
};
diff --git a/components/zoom/actions/delete-user/delete-user.mjs b/components/zoom/actions/delete-user/delete-user.mjs
index 6c2c02865cb9b..188c1527e9999 100644
--- a/components/zoom/actions/delete-user/delete-user.mjs
+++ b/components/zoom/actions/delete-user/delete-user.mjs
@@ -1,68 +1,83 @@
-// legacy_hash_id: a_a4iKYo
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
export default {
key: "zoom-delete-user",
name: "Delete User",
- description: "Disassociates (unlinks) a user from the associated account or permanently deletes a user.",
- version: "0.2.4",
+ description: "Disassociates (unlinks) a user from the associated account or permanently deletes a user. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/api/users/#tag/users/DELETE/users/{userId})",
+ version: "0.2.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
+ zoom,
+ paidAccountAlert: {
+ propDefinition: [
+ zoom,
+ "paidAccountAlert",
+ ],
},
- user_id: {
- type: "string",
- description: "The user ID or email address of the user.",
+ userId: {
+ propDefinition: [
+ zoom,
+ "userId",
+ ],
},
action: {
type: "string",
- description: "Delete action options:
`disassociate` - Disassociate a user.
`delete`- Permanently delete a user.
Note: To delete pending user in the account, use `disassociate",
+ label: "Action",
+ description: "Delete action options:
`disassociate` - Disassociate a user.
`delete`- Permanently delete a user.
Note: To delete pending user in the account, use `disassociate`",
optional: true,
options: [
"disassociate",
"delete",
],
},
- transfer_email: {
+ transferEmail: {
type: "string",
- description: "Transfer email.",
+ label: "Transfer Email",
+ description: "Transfer email. This field is required if the user has Zoom Events/Sessions feature. After you delete or disassociate the user, the user's hub assets on Zoom Events site will be transferred to the target user.",
optional: true,
},
- transfer_meeting: {
+ transferMeeting: {
type: "boolean",
+ label: "Transfer Meeting",
description: "Transfer meeting.",
optional: true,
},
- transfer_webinar: {
+ transferWebinar: {
type: "boolean",
+ label: "Transfer Webinar",
description: "Transfer webinar.",
optional: true,
},
- transfer_recording: {
+ transferRecording: {
type: "boolean",
+ label: "Transfer Recording",
description: "Transfer recording.",
optional: true,
},
},
+ methods: {
+ deleteUser({
+ userId, ...args
+ }) {
+ return this.zoom.delete({
+ path: `/users/${userId}`,
+ ...args,
+ });
+ },
+ },
async run({ $ }) {
- //See the API docs here: https://marketplace.zoom.us/docs/api-reference/zoom-api/users/userdelete
- const config = {
- method: "delete",
- url: `https://api.zoom.us/v2/users/${this.user_id}`,
- params: {
+ const response = await this.deleteUser({
+ $,
+ userId: this.userId,
+ data: {
action: this.action,
- transfer_email: this.transfer_email,
- transfer_meeting: this.transfer_meeting,
- transfer_webinar: this.transfer_webinar,
- transfer_recording: this.transfer_recording,
- },
- headers: {
- "Authorization": `Bearer ${this.zoom.$auth.oauth_access_token}`,
- "Content-Type": "application/json",
+ transfer_email: this.transferEmail,
+ transfer_meeting: this.transferMeeting,
+ transfer_webinar: this.transferWebinar,
+ transfer_recording: this.transferRecording,
},
- };
- return await axios($, config);
+ });
+ $.export("$summary", `Successfully deleted user: \`${this.userId}\``);
+ return response;
},
};
diff --git a/components/zoom/actions/get-meeting-details/get-meeting-details.mjs b/components/zoom/actions/get-meeting-details/get-meeting-details.mjs
index 43c90ac28435b..3f002c55b5ead 100644
--- a/components/zoom/actions/get-meeting-details/get-meeting-details.mjs
+++ b/components/zoom/actions/get-meeting-details/get-meeting-details.mjs
@@ -1,38 +1,49 @@
-// legacy_hash_id: a_Xzi12a
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
export default {
key: "zoom-get-meeting-details",
name: "Get Meeting Details",
- description: "Retrieves the details of a meeting.",
- version: "0.3.4",
+ description: "Retrieves the details of a meeting. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/meetings/GET/meetings/{meetingId})",
+ version: "0.3.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
+ zoom,
+ meetingId: {
+ propDefinition: [
+ zoom,
+ "meetingId",
+ ],
},
- meeting_id: {
- type: "integer",
- description: "The meeting ID.",
- },
- occurrence_id: {
+ occurrenceId: {
+ propDefinition: [
+ zoom,
+ "occurrenceIds",
+ (c) => ({
+ meetingId: c.meetingId,
+ }),
+ ],
type: "string",
- description: "Meeting occurrence ID.",
+ label: "Occurence ID",
+ description: "Meeting occurrence ID. Provide this field to view meeting details of a particular occurrence of the recurring meeting.",
+ optional: true,
+ },
+ showPreviousOccurrences: {
+ type: "boolean",
+ label: "Show Previous Occurrences",
+ description: "Set this field's value to true to view meeting details of all previous occurrences of a recurring meeting.",
optional: true,
},
},
async run({ $ }) {
- //See the API docs here: https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meeting
- const config = {
- url: `https://api.zoom.us/v2/meetings/${this.meeting_id}`,
+ const response = await this.zoom.getMeeting({
+ $,
+ meetingId: this.meetingId,
params: {
- occurrence_id: this.occurrence_id,
- },
- headers: {
- Authorization: `Bearer ${this.zoom.$auth.oauth_access_token}`,
+ occurrence_id: this.occurrenceId,
+ show_previous_occurrences: this.showPreviousOccurrences,
},
- };
- return await axios($, config);
+ });
+ $.export("$summary", `Successfully retreived details for meeting with ID: \`${this.meetingId}\``);
+ return response;
},
};
diff --git a/components/zoom/actions/get-webinar-details/get-webinar-details.mjs b/components/zoom/actions/get-webinar-details/get-webinar-details.mjs
index 7a1bb41da51f0..9ff39d80417c5 100644
--- a/components/zoom/actions/get-webinar-details/get-webinar-details.mjs
+++ b/components/zoom/actions/get-webinar-details/get-webinar-details.mjs
@@ -3,11 +3,17 @@ import app from "../../zoom.app.mjs";
export default {
key: "zoom-get-webinar-details",
name: "Get Webinar Details",
- description: "Gets details of a scheduled webinar. [See the docs here](https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/webinar).",
- version: "0.3.3",
+ description: "Gets details of a scheduled webinar. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/webinars/GET/webinars/{webinarId}).",
+ version: "0.3.4",
type: "action",
props: {
app,
+ paidAccountAlert: {
+ propDefinition: [
+ app,
+ "paidAccountAlert",
+ ],
+ },
webinarId: {
propDefinition: [
app,
@@ -15,9 +21,22 @@ export default {
],
},
occurrenceId: {
+ propDefinition: [
+ app,
+ "occurrenceIds",
+ (c) => ({
+ webinarId: c.webinarId,
+ }),
+ ],
type: "string",
- label: "Occurrence ID",
- description: "Unique Identifier that identifies an occurrence of a recurring webinar. Recurring webinars can have a maximum of 50 occurrences.",
+ label: "Occurence ID",
+ description: "Unique Identifier that identifies an occurrence of a recurring webinar",
+ optional: true,
+ },
+ showPreviousOccurrences: {
+ type: "boolean",
+ label: "Show Previous Occurrences",
+ description: "Set the value of this field to true if you would like to view Webinar details of all previous occurrences of a recurring Webinar.",
optional: true,
},
},
@@ -35,6 +54,7 @@ export default {
const {
webinarId,
occurrenceId,
+ showPreviousOccurrences,
} = this;
const response = await this.getWebinarDetails({
@@ -42,6 +62,7 @@ export default {
webinarId,
params: {
occurrence_id: occurrenceId,
+ show_previous_occurrences: showPreviousOccurrences,
},
});
diff --git a/components/zoom/actions/list-call-recordings/list-call-recordings.mjs b/components/zoom/actions/list-call-recordings/list-call-recordings.mjs
index 33ed8a47ef7b9..e9f0ed344aab5 100644
--- a/components/zoom/actions/list-call-recordings/list-call-recordings.mjs
+++ b/components/zoom/actions/list-call-recordings/list-call-recordings.mjs
@@ -2,12 +2,18 @@ import zoom from "../../zoom.app.mjs";
export default {
name: "List Call Recordings",
- description: "Get your account's call recordings. [See the documentation](https://developers.zoom.us/docs/api/rest/reference/phone/methods/#operation/getPhoneRecordings)",
+ description: "Get your account's call recordings. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/api/rest/reference/phone/methods/#operation/getPhoneRecordings)",
key: "zoom-list-call-recordings",
- version: "0.0.1",
+ version: "0.0.2",
type: "action",
props: {
zoom,
+ paidAccountAlert: {
+ propDefinition: [
+ zoom,
+ "paidAccountAlert",
+ ],
+ },
infoBox: {
type: "alert",
alertType: "info",
diff --git a/components/zoom/actions/list-channels/list-channels.mjs b/components/zoom/actions/list-channels/list-channels.mjs
index 3b4fd19ca3caa..e9bbbb2dc00b1 100644
--- a/components/zoom/actions/list-channels/list-channels.mjs
+++ b/components/zoom/actions/list-channels/list-channels.mjs
@@ -1,43 +1,39 @@
-// legacy_hash_id: a_vgi47v
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
export default {
key: "zoom-list-channels",
name: "List Channels",
- description: "List a user's chat channels.",
- version: "0.1.4",
+ description: "List a user's chat channels. [See the documentation](https://developers.zoom.us/docs/api/team-chat/#tag/chat-channels/GET/chat/users/{userId}/channels)",
+ version: "0.1.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
+ zoom,
+ max: {
+ propDefinition: [
+ zoom,
+ "max",
+ ],
},
- page_size: {
- type: "integer",
- description: "The number of records returned from a single API call.",
- optional: true,
- },
- next_page_token: {
- type: "string",
- description: "The next page token is used to paginate through large result sets. The expiration period for this token is 15 minutes.",
- optional: true,
+ nextPageToken: {
+ propDefinition: [
+ zoom,
+ "nextPageToken",
+ ],
},
},
async run({ $ }) {
- // See the API docs here: https://marketplace.zoom.us/docs/api-reference/zoom-api/chat-channels/getchannels
-
- const config = {
- method: "get",
- url: "https://api.zoom.us/v2/chat/users/me/channels",
- headers: {
- Authorization: `Bearer ${this.zoom.$auth.oauth_access_token}`,
- },
+ const response = await this.zoom.listChannels({
+ $,
params: {
- page_size: this.page_size,
- next_page_token: this.next_page_token,
+ page_size: this.max,
+ next_page_token: this.nextPageToken,
},
- };
-
- return await axios($, config);
+ });
+ if (response.channels?.length) {
+ $.export("$summary", `Successfully retreived ${response.channels.length} channel${response.channels.length === 1
+ ? ""
+ : "s"} `);
+ }
+ return response;
},
};
diff --git a/components/zoom/actions/list-past-meeting-participants/list-past-meeting-participants.mjs b/components/zoom/actions/list-past-meeting-participants/list-past-meeting-participants.mjs
index 0ce260757b655..42109b3b2cca0 100644
--- a/components/zoom/actions/list-past-meeting-participants/list-past-meeting-participants.mjs
+++ b/components/zoom/actions/list-past-meeting-participants/list-past-meeting-participants.mjs
@@ -3,11 +3,17 @@ import app from "../../zoom.app.mjs";
export default {
key: "zoom-list-past-meeting-participants",
name: "List Past Meeting Participants",
- description: "Retrieve information on participants from a past meeting. [See the docs here](https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/pastMeetingParticipants).",
- version: "0.2.3",
+ description: "Retrieve information on participants from a past meeting. Requires a paid Zoom account. [See the documentation](https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/pastMeetingParticipants).",
+ version: "0.2.4",
type: "action",
props: {
app,
+ paidAccountAlert: {
+ propDefinition: [
+ app,
+ "paidAccountAlert",
+ ],
+ },
meetingId: {
propDefinition: [
app,
diff --git a/components/zoom/actions/list-past-webinar-qa/list-past-webinar-qa.mjs b/components/zoom/actions/list-past-webinar-qa/list-past-webinar-qa.mjs
index e68c2835bc92b..9083d5f955805 100644
--- a/components/zoom/actions/list-past-webinar-qa/list-past-webinar-qa.mjs
+++ b/components/zoom/actions/list-past-webinar-qa/list-past-webinar-qa.mjs
@@ -1,31 +1,34 @@
-// legacy_hash_id: a_67iQp1
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
export default {
key: "zoom-list-past-webinar-qa",
name: "List Past Webinar Q&A",
- description: "The feature for Webinars allows attendees to ask questions during the Webinar and for the panelists, co-hosts and host to answer their questions. Use this API to list Q&A of a specific Webinar.",
- version: "0.1.4",
+ description: "List Q&A of a specific Webinar. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/webinars/GET/past_webinars/{webinarId}/qa)",
+ version: "0.1.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
+ zoom,
+ paidAccountAlert: {
+ propDefinition: [
+ zoom,
+ "paidAccountAlert",
+ ],
},
- webinarID: {
- type: "string",
- label: "Webinar ID",
- description: "The Zoom Webinar ID of the webinar you'd like to update.",
+ webinarId: {
+ propDefinition: [
+ zoom,
+ "webinarId",
+ ],
},
},
async run({ $ }) {
- const config = {
- url: `https://api.zoom.us/v2/past_webinars/${this.webinarID}/qa`,
- headers: {
- Authorization: `Bearer ${this.zoom.$auth.oauth_access_token}`,
- },
- };
+ const response = await this.listPastWebinarQA({
+ $,
+ webinarId: this.webinarId,
+ });
- return await axios($, config);
+ $.export("$summary", `Successfully retrieved Q&A for webinar with ID: ${this.webinarId}`);
+
+ return response;
},
};
diff --git a/components/zoom/actions/list-user-call-logs/list-user-call-logs.mjs b/components/zoom/actions/list-user-call-logs/list-user-call-logs.mjs
index ed1e019071576..dbd392c96c942 100644
--- a/components/zoom/actions/list-user-call-logs/list-user-call-logs.mjs
+++ b/components/zoom/actions/list-user-call-logs/list-user-call-logs.mjs
@@ -2,16 +2,22 @@ import zoom from "../../zoom.app.mjs";
export default {
name: "List User's Call Logs",
- description: "Gets a user's Zoom phone call logs. [See the documentation](https://developers.zoom.us/docs/zoom-phone/apis/#operation/phoneUserCallLogs)",
+ description: "Gets a user's Zoom phone call logs. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/zoom-phone/apis/#operation/phoneUserCallLogs)",
key: "zoom-list-user-call-logs",
- version: "0.0.3",
+ version: "0.0.4",
type: "action",
props: {
zoom,
+ paidAccountAlert: {
+ propDefinition: [
+ zoom,
+ "paidAccountAlert",
+ ],
+ },
userId: {
propDefinition: [
zoom,
- "userId",
+ "phoneUserId",
],
},
},
diff --git a/components/zoom/actions/list-webinar-participants-report/list-webinar-participants-report.mjs b/components/zoom/actions/list-webinar-participants-report/list-webinar-participants-report.mjs
index c2c45609732c3..a0c9ec5b34162 100644
--- a/components/zoom/actions/list-webinar-participants-report/list-webinar-participants-report.mjs
+++ b/components/zoom/actions/list-webinar-participants-report/list-webinar-participants-report.mjs
@@ -1,14 +1,20 @@
-import utils from "../../common/utils.mjs";
import app from "../../zoom.app.mjs";
+import utils from "../../common/utils.mjs";
export default {
key: "zoom-list-webinar-participants-report",
name: "List Webinar Participants Report",
- description: "Retrieves detailed report on each webinar attendee. You can get webinar participant reports for the last 6 months. [See the docs here](https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/reportWebinarParticipants).",
- version: "0.0.4",
+ description: "Retrieves detailed report on each webinar attendee. Requires a paid Zoom account. [See the documentation](https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/reportWebinarParticipants).",
+ version: "0.0.5",
type: "action",
props: {
app,
+ paidAccountAlert: {
+ propDefinition: [
+ app,
+ "paidAccountAlert",
+ ],
+ },
webinarId: {
propDefinition: [
app,
diff --git a/components/zoom/actions/send-chat-message/send-chat-message.mjs b/components/zoom/actions/send-chat-message/send-chat-message.mjs
index ea0b793c900d7..cb7ca89169e70 100644
--- a/components/zoom/actions/send-chat-message/send-chat-message.mjs
+++ b/components/zoom/actions/send-chat-message/send-chat-message.mjs
@@ -1,46 +1,58 @@
-// legacy_hash_id: a_k6iKgR
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
+import { ConfigurationError } from "@pipedream/platform";
export default {
key: "zoom-send-chat-message",
name: "Send Chat Message",
- description: "Send chat messages on Zoom to either an individual user who is in your contact list or to a of which you are a member.",
- version: "0.1.4",
+ description: "Send chat messages on Zoom to either an individual user who is in your contact list or to a channel of which you are a member. [See the documentation](https://developers.zoom.us/docs/api/team-chat/#tag/chat-messages/POST/chat/users/{userId}/messages)",
+ version: "0.1.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
- },
+ zoom,
message: {
type: "string",
- description: "The message to be sent.",
+ label: "Message",
+ description: "The message to be sent",
},
- to_contact: {
- type: "string",
+ toContact: {
+ propDefinition: [
+ zoom,
+ "email",
+ ],
description: "The email address of the contact to whom you would like to send the message.",
optional: true,
},
- to_channel: {
- type: "string",
- description: "The Channel Id of the channel where you would like to send a message.",
- optional: true,
+ toChannel: {
+ propDefinition: [
+ zoom,
+ "channelId",
+ ],
+ },
+ },
+ methods: {
+ sendChatMessage(args = {}) {
+ return this.zoom.create({
+ path: "/chat/users/me/messages",
+ ...args,
+ });
},
},
async run({ $ }) {
- // See the API docs here: https://marketplace.zoom.us/docs/api-reference/zoom-api/chat-messages/sendachatmessage
- const config = {
- method: "post",
- url: "https://api.zoom.us/v2/chat/users/me/messages",
+ if (!this.toContact && !this.toChannel) {
+ throw new ConfigurationError("Must specify either \"To Contact\" or \"To Channel\"");
+ }
+
+ const response = await this.sendChatMessage({
+ $,
data: {
message: this.message,
- to_contact: this.to_contact,
- to_channel: this.to_channel,
- },
- headers: {
- Authorization: `Bearer ${this.zoom.$auth.oauth_access_token}`,
+ to_contact: this.toContact,
+ to_channel: this.toChannel,
},
- };
- return await axios($, config);
+ });
+
+ $.export("$summary", `Successfully sent message to ${this.toContact || this.toChannel}`);
+
+ return response;
},
};
diff --git a/components/zoom/actions/update-meeting/update-meeting.mjs b/components/zoom/actions/update-meeting/update-meeting.mjs
index 2cb8d6cfc1d00..9a1331708a701 100644
--- a/components/zoom/actions/update-meeting/update-meeting.mjs
+++ b/components/zoom/actions/update-meeting/update-meeting.mjs
@@ -1,101 +1,110 @@
-// legacy_hash_id: a_52iXNQ
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
+import utils from "../../common/utils.mjs";
export default {
key: "zoom-update-meeting",
name: "Update Meeting",
- description: "Updates an existing Zoom meeting",
- version: "0.1.4",
+ description: "Updates an existing Zoom meeting. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/meetings/PATCH/meetings/{meetingId})",
+ version: "0.1.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
- },
+ zoom,
meetingId: {
- type: "string",
- label: "Meeting ID",
+ propDefinition: [
+ zoom,
+ "meetingId",
+ ],
description: "The Zoom Meeting ID of the meeting you'd like to update.",
},
topic: {
- type: "string",
- description: "Meeting topic",
- optional: true,
+ propDefinition: [
+ zoom,
+ "topic",
+ ],
},
type: {
- type: "integer",
- description: "Meeting type:\n1 - Instant meeting.\n2 - Scheduled meeting.\n3 - Recurring meeting with no fixed time.\n8 - Recurring meeting with fixed time.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "type",
+ ],
},
- start_time: {
- type: "string",
- description: "Meeting start time. We support two formats for start_time - local time and GMT.\nTo set time as GMT the format should be yyyy-MM-ddTHH:mm:ssZ.\nTo set time using a specific timezone, use yyyy-MM-ddTHH:mm:ss format and specify the timezone ID in the timezone field OR leave it blank and the timezone set on your Zoom account will be used. You can also set the time as UTC as the timezone field.\nThe start_time should only be used for scheduled and / or recurring webinars with fixed time.",
- optional: true,
+ startTime: {
+ propDefinition: [
+ zoom,
+ "startTime",
+ ],
},
duration: {
- type: "integer",
- description: "Meeting duration (minutes). Used for scheduled meetings only.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "duration",
+ ],
},
timezone: {
- type: "string",
- description: "Time zone to format start_time. For example, America/Los_Angeles. For scheduled meetings only. Please reference our time [zone list](https://marketplace.zoom.us/docs/api-reference/other-references/abbreviation-lists#timezones) for supported time zones and their formats.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "timezone",
+ ],
},
password: {
- type: "string",
- description: "Password to join the meeting. Password may only contain the following characters: [a-z A-Z 0-9 @ - _ *]. Max of 10 characters.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "password",
+ ],
},
agenda: {
- type: "string",
- description: "Meeting description.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "agenda",
+ ],
},
- tracking_fields: {
- type: "any",
- description: "Tracking fields.",
- optional: true,
+ trackingFields: {
+ propDefinition: [
+ zoom,
+ "trackingFields",
+ ],
},
recurrence: {
- type: "object",
- description: "Recurrence object",
- optional: true,
+ propDefinition: [
+ zoom,
+ "recurrence",
+ ],
},
settings: {
- type: "string",
- description: "Meeting settings.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "settings",
+ ],
+ },
+ },
+ methods: {
+ updateMeeting({
+ meetingId, ...args
+ }) {
+ return this.zoom.update({
+ path: `/meetings/${meetingId}`,
+ ...args,
+ });
},
},
async run({ $ }) {
- // API docs: https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingupdate
- const config = {
- method: "PATCH",
- url: `https://api.zoom.us/v2/meetings/${this.meetingId}`,
+ const response = await this.updateMeeting({
+ $,
+ meetingId: this.meetingId,
data: {
topic: this.topic,
type: this.type,
- start_time: this.start_time,
+ start_time: this.startTime,
duration: this.duration,
timezone: this.timezone,
password: this.password,
agenda: this.agenda,
- tracking_fields: typeof this.tracking_fields == "undefined"
- ? this.tracking_fields
- : JSON.parse(this.tracking_fields),
- recurrence: typeof this.recurrence == "undefined"
- ? this.recurrence
- : JSON.parse(this.recurrence),
- settings: typeof this.settings == "undefined"
- ? this.settings
- : JSON.parse(this.settings),
- },
- headers: {
- "Authorization": `Bearer ${this.zoom.$auth.oauth_access_token}`,
- "Content-Type": "application/json",
+ tracking_fields: utils.parseObj(this.trackingFields),
+ recurrence: utils.parseObj(this.recurrence),
+ settings: utils.parseObj(this.settings),
},
- };
- return await axios($, config);
+ });
+ $.export("$summary", `Successfully updated meeting with ID \`${this.meetingId}\``);
+ return response;
},
};
diff --git a/components/zoom/actions/update-webinar/update-webinar.mjs b/components/zoom/actions/update-webinar/update-webinar.mjs
index a9f99f4dd39a2..fe24f5ee2aa5c 100644
--- a/components/zoom/actions/update-webinar/update-webinar.mjs
+++ b/components/zoom/actions/update-webinar/update-webinar.mjs
@@ -1,101 +1,134 @@
-// legacy_hash_id: a_Q3irlY
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
+import utils from "../../common/utils.mjs";
export default {
key: "zoom-update-webinar",
name: "Update Webinar",
- description: "Update a webinar's topic, start time, or other settings",
- version: "0.1.4",
+ description: "Update a webinar's topic, start time, or other settings. Requires a paid Zoom account. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/webinars/PATCH/webinars/{webinarId})",
+ version: "0.1.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
+ zoom,
+ paidAccountAlert: {
+ propDefinition: [
+ zoom,
+ "paidAccountAlert",
+ ],
},
- webinarID: {
- type: "string",
- label: "Webinar ID",
+ webinarId: {
+ propDefinition: [
+ zoom,
+ "webinarId",
+ ],
description: "The Zoom Webinar ID of the webinar you'd like to update.",
},
topic: {
type: "string",
+ label: "Topic",
description: "Webinar topic",
optional: true,
},
type: {
type: "integer",
+ label: "Type",
description: "Webinar type:\n1 - Instant webinar.\n2 - Scheduled webinar.\n3 - Recurring webinar with no fixed time.\n8 - Recurring webinar with fixed time.",
+ options: [
+ {
+ label: "An instant webinar",
+ value: 1,
+ },
+ {
+ label: "A scheduled webinar",
+ value: 2,
+ },
+ {
+ label: "A recurring webinar with no fixed time",
+ value: 3,
+ },
+ {
+ label: "A recurring webinar with fixed time",
+ value: 8,
+ },
+ ],
optional: true,
},
- start_time: {
+ startTime: {
type: "string",
+ label: "Start Time",
description: "Webinar start time. We support two formats for start_time - local time and GMT.\nTo set time as GMT the format should be yyyy-MM-ddTHH:mm:ssZ.\nTo set time using a specific timezone, use yyyy-MM-ddTHH:mm:ss format and specify the timezone ID in the timezone field OR leave it blank and the timezone set on your Zoom account will be used. You can also set the time as UTC as the timezone field.\nThe start_time should only be used for scheduled and / or recurring webinars with fixed time.",
optional: true,
},
duration: {
type: "integer",
+ label: "Duration",
description: "Webinar duration (minutes). Used for scheduled webinars only.",
optional: true,
},
timezone: {
type: "string",
+ label: "Timezone",
description: "Time zone to format start_time. For example, America/Los_Angeles. For scheduled webinars only. Please reference our time [zone list](https://marketplace.zoom.us/docs/api-reference/other-references/abbreviation-lists#timezones) for supported time zones and their formats.",
optional: true,
},
password: {
type: "string",
+ label: "Password",
description: "Password to join the webinar. Password may only contain the following characters: [a-z A-Z 0-9 @ - _ *]. Max of 10 characters.",
optional: true,
},
agenda: {
type: "string",
- description: "Webinar description.",
+ label: "Agenda",
+ description: "Webinar description",
optional: true,
},
tracking_fields: {
- type: "any",
- description: "Tracking fields.",
- optional: true,
+ propDefinition: [
+ zoom,
+ "trackingFields",
+ ],
},
recurrence: {
- type: "object",
- description: "Recurrence object",
- optional: true,
+ propDefinition: [
+ zoom,
+ "recurrence",
+ ],
},
settings: {
- type: "string",
- description: "Webinar settings.",
+ type: "object",
+ label: "Settings",
+ description: "Information about the webinar's settings. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/webinars/PATCH/webinars/{webinarId}) for more information. Example: `{ \"allow_multiple_devices\": true, \"alternative_hosts\": \"jchill@example.com\", \"alternative_host_update_polls\": true, \"approval_type\": 0, \"attendees_and_panelists_reminder_email_notification\": { \"enable\": true, \"type\": 0 } }`",
optional: true,
},
},
+ methods: {
+ updateWebinar({
+ webinarId, ...args
+ }) {
+ return this.zoom.update({
+ path: `/webinars/${webinarId}`,
+ ...args,
+ });
+ },
+ },
async run({ $ }) {
- // API docs: https://marketplace.zoom.us/docs/api-reference/zoom-api/meetings/meetingupdate
- const config = {
- method: "PATCH",
- url: `https://api.zoom.us/v2/webinars/${this.webinarID}`,
+ const response = await this.updateWebinar({
+ $,
+ webinarId: this.webinarId,
data: {
topic: this.topic,
type: this.type,
- start_time: this.start_time,
+ start_time: this.startTime,
duration: this.duration,
timezone: this.timezone,
password: this.password,
agenda: this.agenda,
- tracking_fields: typeof this.tracking_fields == "undefined"
- ? this.tracking_fields
- : JSON.parse(this.tracking_fields),
- recurrence: typeof this.recurrence == "undefined"
- ? this.recurrence
- : JSON.parse(this.recurrence),
- settings: typeof this.settings == "undefined"
- ? this.settings
- : JSON.parse(this.settings),
- },
- headers: {
- "Authorization": `Bearer ${this.zoom.$auth.oauth_access_token}`,
- "Content-Type": "application/json",
+ tracking_fields: utils.parseObj(this.trackingFields),
+ recurrence: utils.parseObj(this.recurrence),
+ settings: utils.parseObj(this.settings),
},
- };
- return await axios($, config);
+ });
+ $.export("$summary", `Successfully updated webinar with ID \`${this.webinarId}\``);
+ return response;
},
};
diff --git a/components/zoom/actions/view-user/view-user.mjs b/components/zoom/actions/view-user/view-user.mjs
index ef5c829ffdf7a..fd986c2269e41 100644
--- a/components/zoom/actions/view-user/view-user.mjs
+++ b/components/zoom/actions/view-user/view-user.mjs
@@ -1,24 +1,27 @@
-// legacy_hash_id: a_Q3iw4N
-import { axios } from "@pipedream/platform";
+import zoom from "../../zoom.app.mjs";
export default {
key: "zoom-view-user",
name: "View User",
- description: "View your user information",
- version: "0.1.4",
+ description: "View your user information. [See the documentation](https://developers.zoom.us/docs/api/users/#tag/users/GET/users/{userId})",
+ version: "0.1.5",
type: "action",
props: {
- zoom: {
- type: "app",
- app: "zoom",
+ zoom,
+ },
+ methods: {
+ getUser(args = {}) {
+ return this.zoom._makeRequest({
+ path: "/users/me",
+ ...args,
+ });
},
},
async run({ $ }) {
- return await axios($, {
- url: "https://api.zoom.us/v2/users/me",
- headers: {
- Authorization: `Bearer ${this.zoom.$auth.oauth_access_token}`,
- },
+ const response = await this.getUser({
+ $,
});
+ $.export("$summary", `Successfully retrieved user with ID: ${response.id}`);
+ return response;
},
};
diff --git a/components/zoom/common/utils.mjs b/components/zoom/common/utils.mjs
index 54b4220598a13..7d362da3788ff 100644
--- a/components/zoom/common/utils.mjs
+++ b/components/zoom/common/utils.mjs
@@ -14,7 +14,40 @@ function summaryEnd(count, singular, plural) {
return `${count} ${noun}`;
}
+function parseObj(obj) {
+ if (!obj) {
+ return undefined;
+ }
+
+ if (typeof obj === "string") {
+ try {
+ return JSON.parse(obj);
+ } catch {
+ return obj;
+ }
+ }
+
+ if (Array.isArray(obj)) {
+ const values = [];
+ for (const item of obj) {
+ if (typeof item === "string") {
+ try {
+ values.push(JSON.parse(item));
+ } catch {
+ values.push(item);
+ }
+ } else {
+ values.push(item);
+ }
+ }
+ return values;
+ }
+
+ return obj;
+}
+
export default {
streamIterator,
summaryEnd,
+ parseObj,
};
diff --git a/components/zoom/package.json b/components/zoom/package.json
index 5b926e64ad543..13afdd0f86796 100644
--- a/components/zoom/package.json
+++ b/components/zoom/package.json
@@ -1,6 +1,6 @@
{
"name": "@pipedream/zoom",
- "version": "0.6.0",
+ "version": "0.6.1",
"description": "Pipedream Zoom Components",
"main": "zoom.app.mjs",
"keywords": [
@@ -14,6 +14,6 @@
"access": "public"
},
"dependencies": {
- "@pipedream/platform": "^1.3.0"
+ "@pipedream/platform": "^3.0.3"
}
}
diff --git a/components/zoom/sources/custom-event/custom-event.mjs b/components/zoom/sources/custom-event/custom-event.mjs
index 4e49a9de0a773..bf095210cf65c 100644
--- a/components/zoom/sources/custom-event/custom-event.mjs
+++ b/components/zoom/sources/custom-event/custom-event.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-custom-event",
name: "Custom Events (Instant)",
description: "Emit new events tied to your Zoom user or resources you own",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/meeting-created/meeting-created.mjs b/components/zoom/sources/meeting-created/meeting-created.mjs
index 01ad09d3271a5..472bf760a3153 100644
--- a/components/zoom/sources/meeting-created/meeting-created.mjs
+++ b/components/zoom/sources/meeting-created/meeting-created.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-meeting-created",
name: "Meeting Created (Instant)",
description: "Emit new event each time a meeting is created where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/meeting-deleted/meeting-deleted.mjs b/components/zoom/sources/meeting-deleted/meeting-deleted.mjs
index 05a0964752c14..cf003d77a71fb 100644
--- a/components/zoom/sources/meeting-deleted/meeting-deleted.mjs
+++ b/components/zoom/sources/meeting-deleted/meeting-deleted.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-meeting-deleted",
name: "Meeting Deleted (Instant)",
description: "Emit new event each time a meeting is deleted where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/meeting-ended/meeting-ended.mjs b/components/zoom/sources/meeting-ended/meeting-ended.mjs
index 9b81ad8009810..93a8b4f578c8c 100644
--- a/components/zoom/sources/meeting-ended/meeting-ended.mjs
+++ b/components/zoom/sources/meeting-ended/meeting-ended.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-meeting-ended",
name: "Meeting Ended (Instant)",
description: "Emit new event each time a meeting ends where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/meeting-started/meeting-started.mjs b/components/zoom/sources/meeting-started/meeting-started.mjs
index 2b6d807d212e9..95f0cedebc288 100644
--- a/components/zoom/sources/meeting-started/meeting-started.mjs
+++ b/components/zoom/sources/meeting-started/meeting-started.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-meeting-started",
name: "Meeting Started (Instant)",
description: "Emit new event each time a meeting starts where you're the host",
- version: "0.1.4",
+ version: "0.1.5",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/meeting-updated/meeting-updated.mjs b/components/zoom/sources/meeting-updated/meeting-updated.mjs
index 435b805ea8876..8f18e092b9113 100644
--- a/components/zoom/sources/meeting-updated/meeting-updated.mjs
+++ b/components/zoom/sources/meeting-updated/meeting-updated.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-meeting-updated",
name: "Meeting Updated (Instant)",
description: "Emit new event each time a meeting is updated where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/phone-event/phone-event.mjs b/components/zoom/sources/phone-event/phone-event.mjs
index 110dcedaa94f2..556148a276684 100644
--- a/components/zoom/sources/phone-event/phone-event.mjs
+++ b/components/zoom/sources/phone-event/phone-event.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-phone-event",
name: "Zoom Phone Events (Instant)",
description: "Emit new Zoom Phone event tied to your Zoom user or resources you own",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
props: {
...common.props,
diff --git a/components/zoom/sources/recording-completed/recording-completed.mjs b/components/zoom/sources/recording-completed/recording-completed.mjs
index b69fcfa413961..39fdea1d02a72 100644
--- a/components/zoom/sources/recording-completed/recording-completed.mjs
+++ b/components/zoom/sources/recording-completed/recording-completed.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-recording-completed",
name: "Recording Completed (Instant)",
description: "Emit new event each time a new recording completes for a meeting or webinar where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/webinar-created/webinar-created.mjs b/components/zoom/sources/webinar-created/webinar-created.mjs
index 10a3acecaadd3..d3635ffe361e8 100644
--- a/components/zoom/sources/webinar-created/webinar-created.mjs
+++ b/components/zoom/sources/webinar-created/webinar-created.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-webinar-created",
name: "Webinar Created (Instant)",
description: "Emit new event each time a webinar is created where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/webinar-deleted/webinar-deleted.mjs b/components/zoom/sources/webinar-deleted/webinar-deleted.mjs
index 4cc07aa90a641..b7f2a40b4d8bc 100644
--- a/components/zoom/sources/webinar-deleted/webinar-deleted.mjs
+++ b/components/zoom/sources/webinar-deleted/webinar-deleted.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-webinar-deleted",
name: "Webinar Deleted (Instant)",
description: "Emit new event each time a webinar is deleted where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/webinar-ended/webinar-ended.mjs b/components/zoom/sources/webinar-ended/webinar-ended.mjs
index 396ebbbf2c0fe..a636c87915454 100644
--- a/components/zoom/sources/webinar-ended/webinar-ended.mjs
+++ b/components/zoom/sources/webinar-ended/webinar-ended.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-webinar-ended",
name: "Webinar Ended (Instant)",
description: "Emit new event each time a webinar ends where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/webinar-started/webinar-started.mjs b/components/zoom/sources/webinar-started/webinar-started.mjs
index 70de57c9b206b..e2b4ab4589a1a 100644
--- a/components/zoom/sources/webinar-started/webinar-started.mjs
+++ b/components/zoom/sources/webinar-started/webinar-started.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-webinar-started",
name: "Webinar Started (Instant)",
description: "Emit new event each time a webinar starts where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/sources/webinar-updated/webinar-updated.mjs b/components/zoom/sources/webinar-updated/webinar-updated.mjs
index ed97346a4c062..880207fd748e3 100644
--- a/components/zoom/sources/webinar-updated/webinar-updated.mjs
+++ b/components/zoom/sources/webinar-updated/webinar-updated.mjs
@@ -6,7 +6,7 @@ export default {
key: "zoom-webinar-updated",
name: "Webinar Updated (Instant)",
description: "Emit new event each time a webinar is updated where you're the host",
- version: "0.1.3",
+ version: "0.1.4",
type: "source",
dedupe: "unique",
props: {
diff --git a/components/zoom/zoom.app.mjs b/components/zoom/zoom.app.mjs
index b31436af7c60c..70516ed4d06e2 100644
--- a/components/zoom/zoom.app.mjs
+++ b/components/zoom/zoom.app.mjs
@@ -33,7 +33,7 @@ export default {
meetingId: {
type: "integer",
label: "Meeting ID",
- description: "The meeting ID to get details for.",
+ description: "The meeting ID to get details for",
async options({ prevContext }) {
const { nextPageToken } = prevContext;
const response = await this.listMeetings({
@@ -52,12 +52,11 @@ export default {
},
};
},
- optional: true,
},
userId: {
type: "string",
label: "User Id",
- description: "The user ID or email address of the user.",
+ description: "The user ID or email address of the user",
async options({ prevContext }) {
const { nextPageToken } = prevContext;
const response = await this.listUsers({
@@ -66,6 +65,31 @@ export default {
},
});
+ return {
+ options: response.users.map(({
+ display_name: name, email, id: value,
+ }) => ({
+ label: `${name} - ${email}`,
+ value,
+ })),
+ context: {
+ nextPageToken: response.next_page_token,
+ },
+ };
+ },
+ },
+ phoneUserId: {
+ type: "string",
+ label: "User Id",
+ description: "The user ID or email address of the user",
+ async options({ prevContext }) {
+ const { nextPageToken } = prevContext;
+ const response = await this.listPhoneUsers({
+ params: {
+ next_page_token: nextPageToken,
+ },
+ });
+
return {
options: response.users.map(({
name, email, id: value,
@@ -82,122 +106,196 @@ export default {
includeAudioRecordings: {
type: "boolean",
label: "Include Audio Recordings",
- description:
- "This source emits video (MP4) recordings only by default. Set this prop to true to include audio recordings",
+ description: "This source emits video (MP4) recordings only by default. Set this prop to true to include audio recordings",
optional: true,
default: false,
},
includeChatTranscripts: {
type: "boolean",
label: "Include Chat Transcripts",
- description:
- "This source emits video (MP4) recordings only by default. Set this prop to `true` to include chat transcripts",
+ description: "This source emits video (MP4) recordings only by default. Set this prop to `true` to include chat transcripts",
optional: true,
default: false,
},
occurrenceIds: {
- type: "string",
+ type: "string[]",
label: "Occurrence IDs",
- description: "Occurrence IDs. You can find these with the meeting get API. Multiple values separated by comma.",
+ description: "An array of meeting occurance IDs to register for",
optional: true,
+ async options({
+ meetingId, webinarId,
+ }) {
+ const { occurrences } = meetingId
+ ? await this.getMeeting({
+ meetingId,
+ })
+ : await this.getWebinar({
+ webinarId,
+ });
+ return occurrences?.map(({
+ occurrence_id: value, start_time: label,
+ }) => ({
+ value,
+ label,
+ })) || [];
+ },
},
email: {
type: "string",
label: "Email",
- description: "A valid email address of the registrant.",
+ description: "A valid email address of the registrant",
+ async options({ prevContext }) {
+ const { nextPageToken } = prevContext;
+ const response = await this.listUsers({
+ params: {
+ next_page_token: nextPageToken,
+ },
+ });
+
+ return {
+ options: response.users.map(({
+ display_name: name, email,
+ }) => ({
+ label: `${name} - ${email}`,
+ value: email,
+ })),
+ context: {
+ nextPageToken: response.next_page_token,
+ },
+ };
+ },
+ },
+ channelId: {
+ type: "string",
+ label: "Channel ID",
+ description: "The Channel Id of the channel where you would like to send a message",
+ optional: true,
+ async options({ prevContext }) {
+ const { nextPageToken } = prevContext;
+ const response = await this.listChannels({
+ params: {
+ next_page_token: nextPageToken,
+ },
+ });
+
+ return {
+ options: response.channels?.map(({
+ name: label, id: value,
+ }) => ({
+ label,
+ value,
+ })) || [],
+ context: {
+ nextPageToken: response.next_page_token,
+ },
+ };
+ },
},
firstName: {
type: "string",
label: "First Name",
- description: "Registrant's first name.",
+ description: "Registrant's first name",
},
lastName: {
type: "string",
label: "Last Name",
- description: "Registrant's last name.",
+ description: "Registrant's last name",
},
address: {
type: "string",
label: "Address",
- description: "Registrant's address.",
+ description: "Registrant's address",
optional: true,
},
city: {
type: "string",
label: "City",
- description: "Registrant's city.",
+ description: "Registrant's city",
optional: true,
},
- country: {
+ state: {
type: "string",
- label: "Country",
- description: "Registrant's country.",
+ label: "State/Province",
+ description: "Registrant's State/Province",
optional: true,
},
zip: {
type: "string",
label: "Zip/Postal Code",
- description: "Registrant's Zip/Postal code.",
+ description: "Registrant's Zip/Postal code",
optional: true,
},
- state: {
+ country: {
type: "string",
- label: "State/Province",
- description: "Registrant's State/Province.",
+ label: "Country",
+ description: "Registrant's country",
optional: true,
},
phone: {
type: "string",
label: "Phone",
- description: "Registrant's Phone number.",
+ description: "Registrant's Phone number",
optional: true,
},
industry: {
type: "string",
label: "Industry",
- description: "Registrant's industry.",
+ description: "Registrant's industry",
optional: true,
},
org: {
type: "string",
label: "Organization",
- description: "Registrant's Organization.",
+ description: "Registrant's Organization",
optional: true,
},
jobTitle: {
type: "string",
label: "Job Title",
- description: "Registrant's job title.",
+ description: "Registrant's job title",
optional: true,
},
purchasingTimeFrame: {
type: "string",
label: "Purchasing Time Frame",
description: "This field can be included to gauge interest of webinar attendees towards buying your product or service.",
+ options: [
+ "Within a month",
+ "1-3 months",
+ "4-6 months",
+ "More than 6 months",
+ "No timeframe",
+ ],
optional: true,
},
roleInPurchaseProcess: {
type: "string",
label: "Role in Purchase Process",
- description: "Role in Purchase Process.",
+ description: "Role in Purchase Process",
+ options: [
+ "Decision Maker",
+ "Evaluator/Recommender",
+ "Influencer",
+ "Not involved",
+ ],
optional: true,
},
noOfEmployees: {
type: "string",
label: "Number of Employees",
- description: "Number of Employees.",
+ description: "The registrant's number of employees",
optional: true,
},
comments: {
type: "string",
label: "Comments",
- description: "A field that allows registrants to provide any questions or comments that they might have.",
+ description: "The registrant's questions and comments",
optional: true,
},
customQuestions: {
type: "string",
label: "Custom Questions",
- description: "Custom questions.",
+ description: "An array of objects containing the keys **title** (the title of the question) and **value** (the question's response value). Example: `[{ \"title\": \"What do you hope to learn from this?\", \"value\": \"Look forward to learning how you come up with new recipes and what other services you offer.\" }]`",
optional: true,
},
nextPageToken: {
@@ -209,11 +307,98 @@ export default {
max: {
type: "integer",
label: "Max Resources",
- description: "The maximum number of resources to retrieve.",
+ description: "The maximum number of resources to retrieve",
optional: true,
default: constants.MAX_RESOURCES,
min: 1,
},
+ topic: {
+ type: "string",
+ label: "Topic",
+ description: "The meeting's topic",
+ optional: true,
+ },
+ type: {
+ type: "integer",
+ label: "Type",
+ description: "The type of meeting",
+ options: [
+ {
+ label: "An instant meeting",
+ value: 1,
+ },
+ {
+ label: "A scheduled meeting",
+ value: 2,
+ },
+ {
+ label: "A recurring meeting with no fixed time",
+ value: 3,
+ },
+ {
+ label: "A recurring meeting with fixed time",
+ value: 8,
+ },
+ {
+ label: "A screen share only meeting",
+ value: 10,
+ },
+ ],
+ optional: true,
+ },
+ startTime: {
+ type: "string",
+ label: "Start Time",
+ description: "Meeting start time. We support two formats for start_time - local time and GMT.\nTo set time as GMT the format should be yyyy-MM-ddTHH:mm:ssZ.\nTo set time using a specific timezone, use yyyy-MM-ddTHH:mm:ss format and specify the timezone ID in the timezone field OR leave it blank and the timezone set on your Zoom account will be used. You can also set the time as UTC as the timezone field.\nThe start_time should only be used for scheduled and / or recurring webinars with fixed time.",
+ optional: true,
+ },
+ duration: {
+ type: "integer",
+ label: "Duration",
+ description: "Meeting duration (minutes). Used for scheduled meetings only.",
+ optional: true,
+ },
+ timezone: {
+ type: "string",
+ label: "Timezone",
+ description: "Time zone to format start_time. For example, America/Los_Angeles. For scheduled meetings only. Please reference our time [zone list](https://marketplace.zoom.us/docs/api-reference/other-references/abbreviation-lists#timezones) for supported time zones and their formats.",
+ optional: true,
+ },
+ password: {
+ type: "string",
+ label: "Password",
+ description: "Password to join the meeting. Password may only contain the following characters: [a-z A-Z 0-9 @ - _ *]. Max of 10 characters.",
+ optional: true,
+ },
+ agenda: {
+ type: "string",
+ label: "Agenda",
+ description: "The meeting's agenda",
+ optional: true,
+ },
+ trackingFields: {
+ type: "string",
+ label: "Tracking Fields",
+ description: "An array of objects containing the keys **field** and **value**. Example `[{ \"field\": \"field\", \"value\": \"value1\" }]`",
+ optional: true,
+ },
+ recurrence: {
+ type: "object",
+ label: "Recurrence",
+ description: "Recurrence object. Use this object only for a meeting with type 8, a recurring meeting with a fixed time. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/meetings/POST/users/{userId}/meetings) for more information. Example: `{ \"end_date_time\": \"2022-04-02T15:59:00Z\", \"end_times\": 7, \"monthly_day\": 1, \"monthly_week\": 1, \"monthly_week_day\": 1, \"repeat_interval\": 1, \"type\": 1, \"weekly_days\": \"1\" }`",
+ optional: true,
+ },
+ settings: {
+ type: "object",
+ label: "Settings",
+ description: "Information about the meeting's settings. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/meetings/POST/users/{userId}/meetings) for more information. Example: `{ \"additional_data_center_regions\": [ \"TY\" ], \"allow_multiple_devices\": true, \"alternative_hosts\": \"jchill@example.com;thill@example.com\", \"alternative_hosts_email_notification\": true, \"approval_type\": 2, \"approved_or_denied_countries_or_regions\": { \"approved_list\": [ \"CX\" ], \"denied_list\": [ \"CA\" ], \"enable\": true, \"method\": \"approve\" } }`",
+ optional: true,
+ },
+ paidAccountAlert: {
+ type: "alert",
+ alertType: "info",
+ content: "This action requires a paid Zoom account.",
+ },
},
methods: {
_getUrl(path) {
@@ -242,6 +427,18 @@ export default {
...args,
});
},
+ update(args = {}) {
+ return this._makeRequest({
+ method: "patch",
+ ...args,
+ });
+ },
+ delete(args = {}) {
+ return this._makeRequest({
+ method: "delete",
+ ...args,
+ });
+ },
getPastMeetingDetails({
meetingId, ...args
} = {}) {
@@ -250,6 +447,22 @@ export default {
...args,
});
},
+ getMeeting({
+ meetingId, ...args
+ } = {}) {
+ return this._makeRequest({
+ path: `/meetings/${meetingId}`,
+ ...args,
+ });
+ },
+ getWebinar({
+ webinarId, ...args
+ } = {}) {
+ return this._makeRequest({
+ path: `/webinars/${webinarId}`,
+ ...args,
+ });
+ },
listMeetings(args = {}) {
return this._makeRequest({
path: "/users/me/meetings",
@@ -277,6 +490,12 @@ export default {
});
},
listUsers(opts = {}) {
+ return this._makeRequest({
+ path: "/users",
+ ...opts,
+ });
+ },
+ listPhoneUsers(opts = {}) {
return this._makeRequest({
path: "/phone/users",
...opts,
@@ -296,6 +515,20 @@ export default {
...args,
});
},
+ listChannels(args = {}) {
+ return this._makeRequest({
+ path: "/chat/users/me/channels",
+ ...args,
+ });
+ },
+ listPastWebinarQA({
+ webinarId, ...args
+ }) {
+ return this._makeRequest({
+ path: `/past_webinars/${webinarId}/qa`,
+ ...args,
+ });
+ },
async *getResourcesStream({
resourceFn,
resourceFnArgs,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ec31791494b8e..d41ac49a61ea1 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8427,8 +8427,7 @@ importers:
specifier: ^1.5.1
version: 1.6.6
- components/recruiterflow:
- specifiers: {}
+ components/recruiterflow: {}
components/recruitis:
dependencies:
@@ -12235,8 +12234,8 @@ importers:
components/zoom:
dependencies:
'@pipedream/platform':
- specifier: ^1.3.0
- version: 1.6.6
+ specifier: ^3.0.3
+ version: 3.0.3
components/zoom_admin:
dependencies:
@@ -30862,6 +30861,8 @@ snapshots:
'@putout/operator-filesystem': 5.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3))
'@putout/operator-json': 2.2.0
putout: 36.13.1(eslint@8.57.1)(typescript@5.6.3)
+ transitivePeerDependencies:
+ - supports-color
'@putout/operator-regexp@1.0.0(putout@36.13.1(eslint@8.57.1)(typescript@5.6.3))':
dependencies: