@pipedream/zoom 0.10.0 → 0.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (26) hide show
  1. package/actions/add-meeting-registrant/add-meeting-registrant.mjs +2 -2
  2. package/actions/add-webinar-registrant/add-webinar-registrant.mjs +1 -1
  3. package/actions/delete-meeting/delete-meeting.mjs +1 -1
  4. package/actions/get-meeting-recordings/get-meeting-recordings.mjs +1 -1
  5. package/actions/get-meeting-transcript/get-meeting-transcript.mjs +113 -8
  6. package/actions/get-webinar-details/get-webinar-details.mjs +1 -1
  7. package/actions/list-call-recordings/list-call-recordings.mjs +1 -1
  8. package/actions/list-meetings/list-meetings.mjs +2 -2
  9. package/actions/list-past-meeting-participants/list-past-meeting-participants.mjs +1 -1
  10. package/actions/list-user-call-logs/list-user-call-logs.mjs +1 -1
  11. package/actions/list-webinar-participants-report/list-webinar-participants-report.mjs +1 -1
  12. package/package.json +2 -2
  13. package/sources/custom-event/custom-event.mjs +1 -1
  14. package/sources/meeting-created/meeting-created.mjs +1 -1
  15. package/sources/meeting-deleted/meeting-deleted.mjs +1 -1
  16. package/sources/meeting-ended/meeting-ended.mjs +1 -1
  17. package/sources/meeting-started/meeting-started.mjs +1 -1
  18. package/sources/meeting-updated/meeting-updated.mjs +1 -1
  19. package/sources/new-recording-transcript-completed/new-recording-transcript-completed.mjs +1 -1
  20. package/sources/phone-event/phone-event.mjs +1 -1
  21. package/sources/recording-completed/recording-completed.mjs +1 -1
  22. package/sources/webinar-created/webinar-created.mjs +1 -1
  23. package/sources/webinar-deleted/webinar-deleted.mjs +1 -1
  24. package/sources/webinar-ended/webinar-ended.mjs +1 -1
  25. package/sources/webinar-started/webinar-started.mjs +1 -1
  26. package/sources/webinar-updated/webinar-updated.mjs +1 -1
@@ -1,12 +1,12 @@
1
- import app from "../../zoom.app.mjs";
2
1
  import { ConfigurationError } from "@pipedream/platform";
3
2
  import constants from "../../common/utils.mjs";
3
+ import app from "../../zoom.app.mjs";
4
4
 
5
5
  export default {
6
6
  key: "zoom-add-meeting-registrant",
7
7
  name: "Add Meeting Registrant",
8
8
  description: "Registers a participant or multiple participants for a meeting. [See the documentation](https://developers.zoom.us/docs/api/rest/reference/zoom-api/methods/#operation/meetingRegistrantCreate)",
9
- version: "0.3.10",
9
+ version: "0.3.11",
10
10
  annotations: {
11
11
  destructiveHint: false,
12
12
  openWorldHint: true,
@@ -4,7 +4,7 @@ export default {
4
4
  key: "zoom-add-webinar-registrant",
5
5
  name: "Add Webinar Registrant",
6
6
  description: "Registers a participant for a webinar. [See the docs here](https://marketplace.zoom.us/docs/api-reference/zoom-api/webinars/webinarregistrantcreate).",
7
- version: "0.3.10",
7
+ version: "0.3.11",
8
8
  annotations: {
9
9
  destructiveHint: false,
10
10
  openWorldHint: true,
@@ -4,7 +4,7 @@ export default {
4
4
  key: "zoom-delete-meeting",
5
5
  name: "Delete Meeting",
6
6
  description: "Delete a meeting. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/meetings/delete/meetings/{meetingId})",
7
- version: "0.0.5",
7
+ version: "0.0.6",
8
8
  type: "action",
9
9
  annotations: {
10
10
  destructiveHint: true,
@@ -4,7 +4,7 @@ export default {
4
4
  key: "zoom-get-meeting-recordings",
5
5
  name: "Get Meeting Recordings",
6
6
  description: "Get the recordings of a meeting. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/cloud-recording/get/meetings/{meetingId}/recordings)",
7
- version: "0.0.1",
7
+ version: "0.0.2",
8
8
  annotations: {
9
9
  destructiveHint: false,
10
10
  openWorldHint: true,
@@ -1,10 +1,13 @@
1
+ import {
2
+ axios, ConfigurationError,
3
+ } from "@pipedream/platform";
1
4
  import zoom from "../../zoom.app.mjs";
2
5
 
3
6
  export default {
4
7
  key: "zoom-get-meeting-transcript",
5
8
  name: "Get Meeting Transcript",
6
- description: "Get the transcript of a meeting. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/cloud-recording/get/meetings/{meetingId}/transcript)",
7
- version: "0.0.8",
9
+ description: "Get the transcript of a past meeting. Fetches the VTT file server-side using your OAuth token and returns speaker-attributed plain text alongside the original authenticated URL. [See the documentation](https://developers.zoom.us/docs/api/meetings/#tag/cloud-recording/get/meetings/{meetingId}/transcript)",
10
+ version: "0.1.0",
8
11
  annotations: {
9
12
  destructiveHint: false,
10
13
  openWorldHint: true,
@@ -21,17 +24,119 @@ export default {
21
24
  type: "previous_meetings",
22
25
  }),
23
26
  ],
24
- description: "The meeting ID to get the transcript for",
27
+ description: "The ID of a past meeting to retrieve the transcript for. Only meetings with cloud recording and audio transcription enabled will have transcripts available.",
25
28
  optional: false,
26
29
  },
27
30
  },
31
+ methods: {
32
+ fetchTranscriptContent({
33
+ step, url,
34
+ }) {
35
+ return axios(step, {
36
+ url,
37
+ headers: this.zoom._getHeaders(),
38
+ responseType: "text",
39
+ });
40
+ },
41
+ parseVtt(vttContent) {
42
+ const normalized = vttContent
43
+ .replace(/\r\n/g, "\n")
44
+ .replace(/\r/g, "\n")
45
+ .trim();
46
+ const blocks = normalized.split(/\n{2,}/);
47
+ const result = [];
48
+ for (const block of blocks) {
49
+ const lines = block.trim().split("\n");
50
+ if (lines[0]?.trim().startsWith("WEBVTT")) continue;
51
+
52
+ const timestampIdx = lines.findIndex((l) => l.includes(" --> "));
53
+ if (timestampIdx === -1) continue;
54
+
55
+ const textLines = lines.slice(timestampIdx + 1);
56
+ if (!textLines.length) continue;
57
+
58
+ let currentSpeaker = null;
59
+ const textParts = textLines
60
+ .map((line) => {
61
+ const speakerMatch = line.match(/<v\s+([^>]+)>/);
62
+ if (speakerMatch) {
63
+ currentSpeaker = speakerMatch[1].trim();
64
+ }
65
+ const cleanText = line.replace(/<[^>]+>/g, "").trim();
66
+ if (!cleanText) {
67
+ return null;
68
+ }
69
+ return currentSpeaker
70
+ ? `${currentSpeaker}: ${cleanText}`
71
+ : cleanText;
72
+ })
73
+ .filter((t) => t);
74
+
75
+ if (!textParts.length) continue;
76
+
77
+ result.push(...textParts);
78
+ }
79
+ return result.join("\n");
80
+ },
81
+ },
28
82
  async run({ $: step }) {
29
- const transcript = await this.zoom.getMeetingTranscript({
30
- step,
31
- meetingId: this.meetingId,
32
- });
83
+ let transcriptResponse;
84
+ try {
85
+ transcriptResponse = await this.zoom.getMeetingTranscript({
86
+ step,
87
+ meetingId: this.meetingId,
88
+ });
89
+ } catch (error) {
90
+ if (error?.response?.status === 404 || error?.status === 404) {
91
+ throw new ConfigurationError(
92
+ "No recording found for this meeting. Ensure cloud recording was enabled before the meeting started.",
93
+ );
94
+ }
95
+ throw error;
96
+ }
97
+
98
+ const transcriptUrl = transcriptResponse?.download_url;
99
+ if (!transcriptUrl) {
100
+ throw new ConfigurationError(
101
+ "No transcript found for this meeting. Ensure audio transcription is enabled in the host's Zoom account settings before the meeting starts.",
102
+ );
103
+ }
104
+
105
+ let vttContent;
106
+ try {
107
+ vttContent = await this.fetchTranscriptContent({
108
+ step,
109
+ url: transcriptUrl,
110
+ });
111
+ } catch (error) {
112
+ if (error?.response?.status === 404 || error?.status === 404) {
113
+ throw new ConfigurationError(
114
+ transcriptUrl
115
+ ? "Transcript is still being processed. Please try again shortly."
116
+ : "Transcript file could not be retrieved. It may have expired or been deleted.",
117
+ );
118
+ }
119
+ throw error;
120
+ }
121
+
122
+ const trimmed = vttContent?.trim() ?? "";
123
+ if (!trimmed || trimmed === "WEBVTT") {
124
+ throw new ConfigurationError(
125
+ "Transcript is still being processed. Please try again shortly.",
126
+ );
127
+ }
128
+
129
+ const transcriptText = this.parseVtt(vttContent);
130
+ if (!transcriptText) {
131
+ throw new ConfigurationError(
132
+ "Transcript is still being processed. Please try again shortly.",
133
+ );
134
+ }
33
135
 
34
136
  step.export("$summary", `Retrieved transcript for meeting ${this.meetingId}`);
35
- return transcript;
137
+ return {
138
+ transcript_url: transcriptUrl,
139
+ transcript_text: transcriptText,
140
+ };
36
141
  },
37
142
  };
@@ -4,7 +4,7 @@ export default {
4
4
  key: "zoom-get-webinar-details",
5
5
  name: "Get Webinar Details",
6
6
  description: "Gets details of a scheduled webinar. [See the docs here](https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/webinar).",
7
- version: "0.3.10",
7
+ version: "0.3.11",
8
8
  annotations: {
9
9
  destructiveHint: false,
10
10
  openWorldHint: true,
@@ -4,7 +4,7 @@ export default {
4
4
  name: "List Call Recordings",
5
5
  description: "Get your account's call recordings. [See the documentation](https://developers.zoom.us/docs/api/rest/reference/phone/methods/#operation/getPhoneRecordings)",
6
6
  key: "zoom-list-call-recordings",
7
- version: "0.0.8",
7
+ version: "0.0.9",
8
8
  annotations: {
9
9
  destructiveHint: false,
10
10
  openWorldHint: true,
@@ -1,11 +1,11 @@
1
- import zoom from "../../zoom.app.mjs";
2
1
  import constants from "../../common/constants.mjs";
2
+ import zoom from "../../zoom.app.mjs";
3
3
 
4
4
  export default {
5
5
  name: "List Meetings",
6
6
  description: "List meetings for a user. [See the documentation](https://developers.zoom.us/docs/api/rest/reference/zoom-api/methods/#operation/meetings)",
7
7
  key: "zoom-list-meetings",
8
- version: "0.0.4",
8
+ version: "0.0.5",
9
9
  type: "action",
10
10
  annotations: {
11
11
  destructiveHint: false,
@@ -5,7 +5,7 @@ export default {
5
5
  key: "zoom-list-past-meeting-participants",
6
6
  name: "List Past Meeting Participants",
7
7
  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).",
8
- version: "0.2.10",
8
+ version: "0.2.11",
9
9
  annotations: {
10
10
  destructiveHint: false,
11
11
  openWorldHint: true,
@@ -4,7 +4,7 @@ export default {
4
4
  name: "List User's Call Logs",
5
5
  description: "Gets a user's Zoom phone call logs. [See the documentation](https://developers.zoom.us/docs/zoom-phone/apis/#operation/phoneUserCallLogs)",
6
6
  key: "zoom-list-user-call-logs",
7
- version: "0.0.10",
7
+ version: "0.0.11",
8
8
  annotations: {
9
9
  destructiveHint: false,
10
10
  openWorldHint: true,
@@ -5,7 +5,7 @@ export default {
5
5
  key: "zoom-list-webinar-participants-report",
6
6
  name: "List Webinar Participants Report",
7
7
  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).",
8
- version: "0.0.11",
8
+ version: "0.0.12",
9
9
  annotations: {
10
10
  destructiveHint: false,
11
11
  openWorldHint: true,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pipedream/zoom",
3
- "version": "0.10.0",
3
+ "version": "0.10.2",
4
4
  "description": "Pipedream Zoom Components",
5
5
  "main": "zoom.app.mjs",
6
6
  "keywords": [
@@ -14,6 +14,6 @@
14
14
  "access": "public"
15
15
  },
16
16
  "dependencies": {
17
- "@pipedream/platform": "^3.1.1"
17
+ "@pipedream/platform": "^3.2.5"
18
18
  }
19
19
  }
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-custom-event",
7
7
  name: "Custom Events (Instant)",
8
8
  description: "Emit new events tied to your Zoom user or resources you own",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-meeting-created",
7
7
  name: "Meeting Created (Instant)",
8
8
  description: "Emit new event each time a meeting is created where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-meeting-deleted",
7
7
  name: "Meeting Deleted (Instant)",
8
8
  description: "Emit new event each time a meeting is deleted where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-meeting-ended",
7
7
  name: "Meeting Ended (Instant)",
8
8
  description: "Emit new event each time a meeting ends where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-meeting-started",
7
7
  name: "Meeting Started (Instant)",
8
8
  description: "Emit new event each time a meeting starts where you're the host",
9
- version: "0.1.10",
9
+ version: "0.1.11",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-meeting-updated",
7
7
  name: "Meeting Updated (Instant)",
8
8
  description: "Emit new event each time a meeting is updated where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-new-recording-transcript-completed",
7
7
  name: "New Recording Transcript Completed (Instant)",
8
8
  description: "Emit new event each time a recording transcript is completed",
9
- version: "0.0.7",
9
+ version: "0.0.8",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-phone-event",
7
7
  name: "Zoom Phone Events (Instant)",
8
8
  description: "Emit new Zoom Phone event tied to your Zoom user or resources you own",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  props: {
12
12
  ...common.props,
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-recording-completed",
7
7
  name: "Recording Completed (Instant)",
8
8
  description: "Emit new event each time a new recording completes for a meeting or webinar where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-webinar-created",
7
7
  name: "Webinar Created (Instant)",
8
8
  description: "Emit new event each time a webinar is created where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-webinar-deleted",
7
7
  name: "Webinar Deleted (Instant)",
8
8
  description: "Emit new event each time a webinar is deleted where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-webinar-ended",
7
7
  name: "Webinar Ended (Instant)",
8
8
  description: "Emit new event each time a webinar ends where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-webinar-started",
7
7
  name: "Webinar Started (Instant)",
8
8
  description: "Emit new event each time a webinar starts where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {
@@ -6,7 +6,7 @@ export default {
6
6
  key: "zoom-webinar-updated",
7
7
  name: "Webinar Updated (Instant)",
8
8
  description: "Emit new event each time a webinar is updated where you're the host",
9
- version: "0.1.9",
9
+ version: "0.1.10",
10
10
  type: "source",
11
11
  dedupe: "unique",
12
12
  props: {