Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion components/zoom/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@pipedream/zoom",
"version": "0.3.3",
"version": "0.3.4",
"description": "Pipedream Zoom Components",
"main": "zoom.app.js",
"keywords": [
Expand All @@ -13,5 +13,8 @@
"gitHead": "e12480b94cc03bed4808ebc6b13e7fdb3a1ba535",
"publishConfig": {
"access": "public"
},
"dependencies": {
"@pipedream/platform": "^1.1.0"
}
}
25 changes: 25 additions & 0 deletions components/zoom/sources/common/common.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import zoom from "../../zoom.app.mjs";

export default {
props: {
zoom,
},
methods: {
sortByDate(objects, field) {
return objects.sort((a, b) => (Date.parse(a[field]) > Date.parse(b[field]))
? 1
: -1);
},
monthAgo() {
const now = new Date();
const monthAgo = new Date(now.getTime());
monthAgo.setMonth(monthAgo.getMonth() - 1);
return monthAgo.toISOString().slice(0, 10);
},
},
async run(event) {
const { payload } = event;
const { object } = payload;
this.emitEvent(payload, object);
},
};
4 changes: 2 additions & 2 deletions components/zoom/sources/custom-event/custom-event.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ import constants from "../common/constants.mjs";

export default {
key: "zoom-custom-event",
name: "Custom Events",
name: "Custom Events (Instant)",
description: "Listen for any events tied to your Zoom user or resources you own",
version: "0.0.5",
version: "0.0.6",
type: "source",
props: {
zoom,
Expand Down
51 changes: 35 additions & 16 deletions components/zoom/sources/meeting-created/meeting-created.mjs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import zoom from "../../zoom.app.mjs";
import common from "../common/common.mjs";

export default {
...common,
key: "zoom-meeting-created",
name: "Meeting Created",
description:
"Emits an event each time a meeting is created where you're the host",
version: "0.0.3",
name: "Meeting Created (Instant)",
description: "Emit new event each time a meeting is created where you're the host",
version: "0.0.4",
type: "source",
dedupe: "unique", // Dedupe based on meeting ID
props: {
zoom,
...common.props,
zoomApphook: {
type: "$.interface.apphook",
appProp: "zoom",
Expand All @@ -18,19 +19,37 @@ export default {
],
},
},
async run(event) {
const { payload } = event;
const { object } = payload;
this.$emit(
{
hooks: {
async deploy() {
const { meetings } = await this.zoom.listMeetings({
page_size: 25,
});
if (!meetings || meetings.length === 0) {
return;
}
const objects = this.sortByDate(meetings, "created_at");
for (const object of objects) {
this.emitEvent({
object,
}, object);
}
},
},
methods: {
...common.methods,
emitEvent(payload, object) {
const meta = this.generateMeta(object);
this.$emit({
event: "meeting.created",
payload,
},
{
summary: `Meeting ${object.topic} created`,
}, meta);
},
generateMeta(object) {
return {
id: object.uuid,
summary: `Meeting ${object.topic} created`,
ts: +new Date(object.start_time),
},
);
};
},
},
};
34 changes: 18 additions & 16 deletions components/zoom/sources/meeting-deleted/meeting-deleted.mjs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import zoom from "../../zoom.app.mjs";
import common from "../common/common.mjs";

export default {
...common,
key: "zoom-meeting-deleted",
name: "Meeting Deleted",
description:
"Emits an event each time a meeting is deleted where you're the host",
version: "0.0.3",
name: "Meeting Deleted (Instant)",
description: "Emit new event each time a meeting is deleted where you're the host",
version: "0.0.4",
type: "source",
dedupe: "unique", // Dedupe based on meeting ID
props: {
zoom,
...common.props,
zoomApphook: {
type: "$.interface.apphook",
appProp: "zoom",
Expand All @@ -18,19 +19,20 @@ export default {
],
},
},
async run(event) {
const { payload } = event;
const { object } = payload;
this.$emit(
{
methods: {
emitEvent(payload, object) {
const meta = this.generateMeta(object);
this.$emit({
event: "meeting.deleted",
payload,
},
{
summary: `Meeting ${object.topic} deleted`,
}, meta);
},
generateMeta(object) {
return {
id: object.uuid,
summary: `Meeting ${object.topic} deleted`,
ts: +new Date(object.start_time),
},
);
};
},
},
};
63 changes: 50 additions & 13 deletions components/zoom/sources/meeting-ended/meeting-ended.mjs
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
import zoom from "../../zoom.app.mjs";
import common from "../common/common.mjs";

export default {
...common,
key: "zoom-meeting-ended",
name: "Meeting Ended",
description: "Emits an event each time a meeting ends where you're the host",
version: "0.0.3",
name: "Meeting Ended (Instant)",
description: "Emit new event each time a meeting ends where you're the host",
version: "0.0.4",
type: "source",
dedupe: "unique", // Dedupe based on meeting ID
props: {
zoom,
...common.props,
zoomApphook: {
type: "$.interface.apphook",
appProp: "zoom",
Expand All @@ -16,13 +18,48 @@ export default {
],
},
},
async run(event) {
const { payload } = event;
const { object } = payload;
this.$emit(event, {
summary: `Meeting ${object.topic} ended`,
id: object.uuid,
ts: +new Date(object.end_time),
});
hooks: {
async deploy() {
const { meetings } = await this.zoom.listMeetings({
page_size: 25,
type: "previous_meetings",
});
if (!meetings || meetings.length === 0) {
return;
}
const detailedMeetings = [];
for (const meeting of meetings) {
try {
const details = await this.zoom.getPastMeetingDetails(meeting.id);
detailedMeetings.push(details);
} catch {
// catch error thrown by getPastMeetingDetails if meeting has not ended
continue;
}
}
const objects = this.sortByDate(detailedMeetings, "end_time");
for (const object of objects) {
this.emitEvent({
object,
}, object);
}
},
},
methods: {
...common.methods,
emitEvent(payload, object) {
const meta = this.generateMeta(object);
this.$emit({
event: "meeting.ended",
payload,
}, meta);
},
generateMeta(object) {
return {
id: object.uuid,
summary: `Meeting ${object.topic} ended`,
ts: +new Date(object.end_time),
};
},
},
};
58 changes: 44 additions & 14 deletions components/zoom/sources/meeting-started/meeting-started.mjs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import zoom from "../../zoom.app.mjs";
import common from "../common/common.mjs";

export default {
...common,
key: "zoom-meeting-started",
name: "Meeting Started",
description:
"Emits an event each time a meeting starts where you're the host",
version: "0.0.3",
name: "Meeting Started (Instant)",
description: "Emit new event each time a meeting starts where you're the host",
version: "0.0.4",
type: "source",
dedupe: "unique", // Dedupe based on meeting ID
props: {
zoom,
...common.props,
zoomApphook: {
type: "$.interface.apphook",
appProp: "zoom",
Expand All @@ -17,13 +18,42 @@ export default {
],
},
},
async run(event) {
const { payload } = event;
const { object } = payload;
this.$emit(event, {
summary: `Meeting ${object.topic} started`,
id: object.uuid,
ts: +new Date(object.start_time),
});
hooks: {
async deploy() {
const { meetings } = await this.zoom.listMeetings({
page_size: 25,
type: "previous_meetings",
});
if (!meetings || meetings.length === 0) {
return;
}
const objects = this.sortByDate(meetings, "start_time");
for (const object of objects) {
const startTime = Date.parse(object.start_time);
if (startTime < Date.now()) {
this.emitEvent({
object,
time_stamp: Date.now(),
}, object);
}
}
},
},
methods: {
...common.methods,
emitEvent(payload, object) {
const meta = this.generateMeta(object);
this.$emit({
event: "meeting.started",
payload,
}, meta);
},
generateMeta(object) {
return {
id: object.uuid,
summary: `Meeting ${object.topic} started`,
ts: +new Date(object.start_time),
};
},
},
};
53 changes: 40 additions & 13 deletions components/zoom/sources/meeting-updated/meeting-updated.mjs
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
import zoom from "../../zoom.app.mjs";
import common from "../common/common.mjs";

export default {
...common,
key: "zoom-meeting-updated",
name: "Meeting Updated",
description:
"Emits an event each time a meeting is updated where you're the host",
version: "0.0.3",
name: "Meeting Updated (Instant)",
description: "Emit new event each time a meeting is updated where you're the host",
version: "0.0.4",
type: "source",
dedupe: "unique", // dedupe on the meeting ID + timestamp
props: {
zoom,
...common.props,
zoomApphook: {
type: "$.interface.apphook",
appProp: "zoom",
Expand All @@ -17,12 +18,38 @@ export default {
],
},
},
async run(event) {
const { payload } = event;
const { object } = payload;
this.$emit(event, {
summary: `Meeting ${object.id} updated`,
id: `${object.id}-${payload.time_stamp}`,
});
hooks: {
async deploy() {
const { meetings } = await this.zoom.listMeetings({
page_size: 25,
});
if (!meetings || meetings.length === 0) {
return;
}
const objects = this.sortByDate(meetings, "created_at");
for (const object of objects) {
this.emitEvent({
object,
time_stamp: +new Date(object.start_time),
}, object);
}
},
},
methods: {
...common.methods,
emitEvent(payload, object) {
const meta = this.generateMeta(payload, object);
this.$emit({
event: "meeting.updated",
payload,
}, meta);
},
generateMeta(payload, object) {
return {
id: `${object.id}-${payload.time_stamp}`,
summary: `Meeting ${object.id} updated`,
ts: +new Date(object.start_time),
};
},
},
};
Loading