-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #26 from gitautoai/wes
Listen forge app installation event (not uninstallation)
- Loading branch information
Showing
2 changed files
with
83 additions
and
39 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,23 +1,66 @@ | ||
// Handle only webhook events | ||
import forge, { route } from "@forge/api"; | ||
|
||
export const handler = async (event, context) => { | ||
console.log("Event: ", event); | ||
console.log("Context: ", context); | ||
const { changelog } = event; | ||
console.log("Changelog: ", changelog); | ||
// https://developer.atlassian.com/platform/forge/events-reference/life-cycle/ | ||
console.log("Installation event payload:", event); | ||
console.log("Context:", context); | ||
|
||
if (event.type === "avi:jira:created:issue") { | ||
return handleIssueCreated(event); | ||
} | ||
if (event.eventType === "avi:forge:installed:app") { | ||
console.log("App was installed!"); | ||
|
||
if (event.type === "avi:jira:updated:issue") { | ||
return handleIssueUpdated(event); | ||
} | ||
}; | ||
// Extract cloudId and contextToken | ||
const cloudId = event.context.cloudId; | ||
const contextToken = event.contextToken; | ||
|
||
const handleIssueCreated = async (event) => { | ||
console.log("Issue created"); | ||
}; | ||
try { | ||
let startAt = 0; | ||
const maxResults = 50; // Number of results per page | ||
let allProjects = []; | ||
let isLastPage = false; | ||
|
||
while (!isLastPage) { | ||
// https://developer.atlassian.com/cloud/jira/platform/rest/v3/api-group-projects/#api-rest-api-3-project-search-get | ||
const url = route`/rest/api/3/project/search?startAt=${startAt}&maxResults=${maxResults}`; | ||
const response = await forge | ||
.asApp() | ||
.requestJira(url, { headers: { Accept: "application/json" } }); | ||
|
||
// Add status code checking and response logging | ||
if (!response.ok) { | ||
console.error("API request failed:", { | ||
status: response.status, | ||
statusText: response.statusText, | ||
body: await response.text(), | ||
}); | ||
throw new Error(`API request failed with status ${response.status}`); | ||
} | ||
|
||
const result = await response.json(); | ||
// console.log("Raw API response:", JSON.stringify(result, null, 2)); | ||
const { values, total, isLast } = result; | ||
|
||
allProjects = [...allProjects, ...values]; | ||
isLastPage = isLast; | ||
startAt += maxResults; | ||
|
||
console.log(`Fetched ${values.length} projects. Total: ${total}. Page complete: ${isLast}`); | ||
} | ||
|
||
console.log( | ||
"All projects found:", | ||
allProjects.map((p) => ({ | ||
id: p.id, | ||
key: p.key, | ||
name: p.name, | ||
})) | ||
); | ||
} catch (error) { | ||
console.error("Error fetching projects:", error); | ||
} | ||
} else if (event.eventType === "avi:forge:upgraded:app") { | ||
console.log("App was upgraded!"); | ||
// Handle upgrade logic here | ||
} | ||
|
||
const handleIssueUpdated = async (event) => { | ||
console.log("Issue updated"); | ||
return { status: 200, body: "Installation event processed" }; | ||
}; |