Skip to content

Commit eb26faf

Browse files
authored
Merge pull request #14 from Traction-Rec/feature/support-webhook-node
Accept CUSTOM.zoomTrigger node type for custom-extension installs.
2 parents 2a950cd + 5270733 commit eb26faf

2 files changed

Lines changed: 45 additions & 7 deletions

File tree

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "n8n-unihook"
3-
version = "0.5.0"
3+
version = "0.5.1"
44
edition = "2024"
55
description = "A Slack event router for n8n that enables multiple workflows to share a single Slack app webhook"
66
license = "MIT"

src/zoom/triggers.rs

Lines changed: 44 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,19 @@ pub struct ZoomTriggerConfig {
1919
pub events: Vec<String>,
2020
}
2121

22+
/// n8n node type when installed as a community package (`nodes/node_modules/...`).
23+
pub const ZOOM_TRIGGER_NODE_TYPE: &str = "n8n-nodes-unihook-zoom-trigger.zoomTrigger";
24+
25+
/// n8n node type when loaded via custom extensions (`.n8n/custom` / `N8N_CUSTOM_EXTENSIONS`).
26+
pub const ZOOM_TRIGGER_CUSTOM_NODE_TYPE: &str = "CUSTOM.zoomTrigger";
27+
28+
fn is_zoom_trigger_node(node_type: &str) -> bool {
29+
node_type == ZOOM_TRIGGER_NODE_TYPE || node_type == ZOOM_TRIGGER_CUSTOM_NODE_TYPE
30+
}
31+
2232
/// Parse Zoom Trigger configuration from a workflow node
2333
pub fn parse_zoom_trigger(workflow: &Workflow, node: &WorkflowNode) -> Option<ZoomTriggerConfig> {
24-
if node.node_type != "n8n-nodes-unihook-zoom-trigger.zoomTrigger" {
34+
if !is_zoom_trigger_node(&node.node_type) {
2535
return None;
2636
}
2737

@@ -64,11 +74,12 @@ mod tests {
6474
}
6575

6676
fn create_zoom_trigger_node(
77+
node_type: &str,
6778
webhook_id: Option<&str>,
6879
params: serde_json::Value,
6980
) -> WorkflowNode {
7081
WorkflowNode {
71-
node_type: "n8n-nodes-unihook-zoom-trigger.zoomTrigger".to_string(),
82+
node_type: node_type.to_string(),
7283
name: "Zoom Trigger".to_string(),
7384
parameters: params,
7485
webhook_id: webhook_id.map(|s| s.to_string()),
@@ -77,8 +88,11 @@ mod tests {
7788

7889
#[test]
7990
fn test_parse_zoom_trigger_basic() {
80-
let node =
81-
create_zoom_trigger_node(Some("webhook-z1"), json!({ "event": ["meeting.started"] }));
91+
let node = create_zoom_trigger_node(
92+
ZOOM_TRIGGER_NODE_TYPE,
93+
Some("webhook-z1"),
94+
json!({ "event": ["meeting.started"] }),
95+
);
8296
let workflow = create_workflow("wf1", "Zoom Workflow", vec![node.clone()]);
8397

8498
let config = parse_zoom_trigger(&workflow, &node).unwrap();
@@ -90,6 +104,7 @@ mod tests {
90104
#[test]
91105
fn test_parse_zoom_trigger_multiple_events() {
92106
let node = create_zoom_trigger_node(
107+
ZOOM_TRIGGER_NODE_TYPE,
93108
Some("webhook-z2"),
94109
json!({ "event": ["meeting.started", "meeting.ended"] }),
95110
);
@@ -102,14 +117,33 @@ mod tests {
102117

103118
#[test]
104119
fn test_parse_zoom_trigger_wildcard() {
105-
let node = create_zoom_trigger_node(Some("webhook-z3"), json!({ "event": ["*"] }));
120+
let node = create_zoom_trigger_node(
121+
ZOOM_TRIGGER_NODE_TYPE,
122+
Some("webhook-z3"),
123+
json!({ "event": ["*"] }),
124+
);
106125
let workflow = create_workflow("wf3", "Wildcard", vec![node.clone()]);
107126

108127
let config = parse_zoom_trigger(&workflow, &node).unwrap();
109128

110129
assert_eq!(config.events, vec!["*"]);
111130
}
112131

132+
#[test]
133+
fn test_parse_zoom_trigger_custom_node_type() {
134+
let node = create_zoom_trigger_node(
135+
ZOOM_TRIGGER_CUSTOM_NODE_TYPE,
136+
Some("webhook-z4"),
137+
json!({ "event": ["meeting.started", "meeting.ended"] }),
138+
);
139+
let workflow = create_workflow("wf4", "Custom Loader", vec![node.clone()]);
140+
141+
let config = parse_zoom_trigger(&workflow, &node).unwrap();
142+
143+
assert_eq!(config.webhook_id, "webhook-z4");
144+
assert_eq!(config.events, vec!["meeting.started", "meeting.ended"]);
145+
}
146+
113147
#[test]
114148
fn test_parse_non_zoom_node_returns_none() {
115149
let node = WorkflowNode {
@@ -125,7 +159,11 @@ mod tests {
125159

126160
#[test]
127161
fn test_parse_node_without_webhook_id() {
128-
let node = create_zoom_trigger_node(None, json!({ "event": ["meeting.started"] }));
162+
let node = create_zoom_trigger_node(
163+
ZOOM_TRIGGER_NODE_TYPE,
164+
None,
165+
json!({ "event": ["meeting.started"] }),
166+
);
129167
let workflow = create_workflow("wf1", "Workflow", vec![node.clone()]);
130168

131169
assert!(parse_zoom_trigger(&workflow, &node).is_none());

0 commit comments

Comments
 (0)