Hello Experts,
I have a use case to hit a particular api ( Consider this is like a mail server here i have pre - defined email templates ) when a jira event occurs . I have already configured some trigger conditions in forge app and stored it in storage . here the email recepient is a jira user . so i used /users/search api to get all the users . in this api Im getting emailAddress that is masked with atlassian proxy . so the email cannot be sent . how can i get the actual email address of the users
FYI this app will be only visible on Jira admins . No one can configure trigger in this app
Resolver :
resolver.define('getAllJiraUsers', async () => {
try {
const response = await api.asApp().requestJira(route`/rest/api/3/users/search`, {
headers: {
'Accept': 'application/json'
}
});
const users = await response.json();
return users
.filter(user => user.emailAddress)
.map(user => ({
label: user.displayName,
value: user.emailAddress
}));
} catch (error) {
console.error('Error fetching Jira users:', error);
throw error;
}
});
Event Handler function
// src/eventHandler.js
import api, { route, storage } from '@forge/api';
import axios from 'axios';
const handleEvent = async (req, type) => {
try {
const triggers = await storage.get('Trigger') || [];
let isConfigured = null;
if (!triggers || triggers.length === 0) {
console.log('No triggers found');
return {
success: false,
message: 'No Triggers Found'
};
}
for (const trigger of triggers) {
if (!trigger.events) continue;
const matchedEvent = await Promise.resolve(trigger.events.find((event) => {
console.log('event', event);
console.log('type', type);
return event.value.toLowerCase() === type.toLowerCase();
}));
if (matchedEvent) {
isConfigured = trigger;
break;
}
}
console.log('isConfigured', isConfigured);
if (isConfigured) {
const token = await storage.get('Token');
if (!token) {
return {
success: false,
message: 'Authentication token not found'
};
}
const baseConfig = {
method: 'put',
maxBodyLength: Infinity,
url: `https://api.surveysparrow.com/v3/channels/${isConfigured.shareChannel.value}`,
body: JSON.stringify(isConfigured.shareRecipient),
headers: {
'Authorization': token,
'Content-Type': 'application/json'
}
};
const shareData = {
survey_id: isConfigured.survey.value,
}
const config = {
...baseConfig,
data: JSON.stringify(shareData)
};
const response = await axios.request(config);
console.log(response, "response");
return {
success: true,
message: 'Survey Shared Successfully',
};
}
else {
return {
success: false,
message: 'No Matching Trigger Found'
};
}
} catch (error) {
console.error('Trigger Event Error', error);
throw error;
}
}
export async function handler(event, context) {
const { eventType, issue } = event;
switch (eventType) {
case 'avi:jira:created:issue':
const response = await handleEvent(event, "issue_created");
return response;
case 'avi:jira:updated:issue':
return await handleEvent(event, "issue_updated");
case 'avi:jira:deleted:issue':
return await handleEvent(event, "issue_deleted");
case 'avi:jira:created:task':
return await handleEvent(event, "task_created" );
case 'avi:jira:updated:task':
return await handleEvent(event, "task_updated");
case 'avi:jira:created:story':
return await handleEvent(event, "story_created" );
case 'avi:jira:updated:story':
return await handleEvent(event, "story_updated");
case 'avi:jira:deleted:story':
return await handleEvent(event, "story_deleted");
case 'avi:jira:created:epic':
return await handleEvent(event, "epic_created");
case 'avi:jira:updated:epic':
return await handleEvent(event, "epic_updated");
case 'avi:jira:deleted:epic':
return await handleEvent(event, "epic_deleted");
default:
console.log(`Unhandled event type: ${type}`);
}
}
Can anyone please help on this case . Thanks in advance