@@ -8,11 +8,22 @@ import { tryCatch } from "@trigger.dev/core";
88import { $replica } from "~/db.server" ;
99import { requireUser } from "~/services/session.server" ;
1010
11- const QuerySchema = z . object ( {
12- installation_id : z . coerce . number ( ) ,
13- setup_action : z . enum ( [ "install" , "update" , "request" ] ) ,
14- state : z . string ( ) ,
15- } ) ;
11+ const QuerySchema = z . discriminatedUnion ( "setup_action" , [
12+ z . object ( {
13+ setup_action : z . literal ( "install" ) ,
14+ installation_id : z . coerce . number ( ) ,
15+ state : z . string ( ) ,
16+ } ) ,
17+ z . object ( {
18+ setup_action : z . literal ( "update" ) ,
19+ installation_id : z . coerce . number ( ) ,
20+ state : z . string ( ) ,
21+ } ) ,
22+ z . object ( {
23+ setup_action : z . literal ( "request" ) ,
24+ state : z . string ( ) ,
25+ } ) ,
26+ ] ) ;
1627
1728export async function loader ( { request } : LoaderFunctionArgs ) {
1829 const url = new URL ( request . url ) ;
@@ -28,14 +39,13 @@ export async function loader({ request }: LoaderFunctionArgs) {
2839 return redirectWithErrorMessage ( "/" , request , "Failed to install GitHub App" ) ;
2940 }
3041
31- const { installation_id , setup_action , state } = result . data ;
42+ const callbackData = result . data ;
3243
33- const sessionResult = await validateGitHubAppInstallSession ( cookieHeader , state ) ;
44+ const sessionResult = await validateGitHubAppInstallSession ( cookieHeader , callbackData . state ) ;
3445
3546 if ( ! sessionResult . valid ) {
3647 logger . error ( "GitHub App callback with invalid session" , {
37- state,
38- installation_id,
48+ callbackData,
3949 error : sessionResult . error ,
4050 } ) ;
4151
@@ -63,10 +73,12 @@ export async function loader({ request }: LoaderFunctionArgs) {
6373 return redirectWithErrorMessage ( redirectTo , request , "Failed to install GitHub App" ) ;
6474 }
6575
66- switch ( setup_action ) {
76+ switch ( callbackData . setup_action ) {
6777 case "install" :
6878 case "update" : {
69- const [ error ] = await tryCatch ( linkGitHubAppInstallation ( installation_id , organizationId ) ) ;
79+ const [ error ] = await tryCatch (
80+ linkGitHubAppInstallation ( callbackData . installation_id , organizationId )
81+ ) ;
7082
7183 if ( error ) {
7284 logger . error ( "Failed to link GitHub App installation" , {
@@ -82,14 +94,14 @@ export async function loader({ request }: LoaderFunctionArgs) {
8294 // This happens when a non-admin user requests installation
8395 // The installation_id won't be available until an admin approves
8496 logger . info ( "GitHub App installation requested, awaiting approval" , {
85- state ,
97+ callbackData ,
8698 } ) ;
8799
88100 return redirectWithSuccessMessage ( redirectTo , request , "GitHub App installation requested" ) ;
89101 }
90102
91103 default :
92- setup_action satisfies never ;
104+ callbackData satisfies never ;
93105 return redirectWithErrorMessage ( redirectTo , request , "Failed to install GitHub App" ) ;
94106 }
95107}
0 commit comments