@@ -611,22 +611,31 @@ const resolveRequestOrigin = (request: HttpServerRequest.HttpServerRequest): str
611611const resolveSkillerBackendUrl = ( request : HttpServerRequest . HttpServerRequest ) : string =>
612612 resolveDockerGitSkillerBackendUrl ( process . env , resolveRequestOrigin ( request ) )
613613
614+ const isPrivateNetworkCorsRequest = (
615+ request : HttpServerRequest . HttpServerRequest
616+ ) : boolean =>
617+ readHeader ( request , "access-control-request-private-network" ) ?. toLowerCase ( ) === "true"
618+
614619const skillerCorsHeaders = (
615620 request : HttpServerRequest . HttpServerRequest
616621) : Record < string , string > => {
617622 const origin = readHeader ( request , "origin" )
618623 if ( origin === undefined || ! isSkillerWebCorsOriginAllowed ( origin , process . env ) ) {
619624 return { }
620625 }
626+ const privateNetworkHeaders = isPrivateNetworkCorsRequest ( request )
627+ ? { "access-control-allow-private-network" : "true" }
628+ : { }
621629 return {
630+ ...privateNetworkHeaders ,
622631 "access-control-allow-credentials" : "true" ,
623632 "access-control-allow-headers" : readHeader ( request , "access-control-request-headers" ) ??
624633 "content-type,trpc-accept,x-trpc-source" ,
625634 "access-control-allow-methods" : "GET,POST,OPTIONS" ,
626635 "access-control-allow-origin" : origin ,
627636 "access-control-max-age" : "600" ,
628637 "access-control-expose-headers" : "content-type" ,
629- vary : "origin"
638+ vary : "origin, access-control-request-private-network "
630639 }
631640}
632641
@@ -657,7 +666,9 @@ const skillerErrorResponse = (
657666
658667const isSkillerCorsPath = ( pathname : string ) : boolean => {
659668 const normalized = pathname . startsWith ( "/api/" ) ? pathname . slice ( "/api" . length ) : pathname
660- return normalized === "/skiller/connect" || parseSkillerRoute ( pathname ) !== null
669+ return normalized === "/skiller/connect" ||
670+ / ^ \/ p r o j e c t s \/ b y - k e y \/ [ ^ / ] + (?: \/ t e r m i n a l - s e s s i o n s \/ [ ^ / ] + ) ? \/ s k i l l e r \/ c o n t e x t $ / u. test ( normalized ) ||
671+ parseSkillerRoute ( pathname ) !== null
661672}
662673
663674const skillerCorsPreflightResponse = (
@@ -987,19 +998,29 @@ export const makeRouter = () => {
987998 ) ,
988999 HttpRouter . get (
9891000 "/projects/by-key/:projectKey/skiller/context" ,
990- projectKeyParams . pipe (
991- Effect . flatMap ( ( { projectKey } ) => readSkillerProjectContext ( projectKey , null ) ) ,
992- Effect . flatMap ( ( context ) => jsonResponse ( { ok : true , ...context } , 200 ) ) ,
993- Effect . catchAll ( errorResponse )
994- )
1001+ Effect . gen ( function * ( _ ) {
1002+ const request = yield * _ ( HttpServerRequest . HttpServerRequest )
1003+ return yield * _ (
1004+ projectKeyParams . pipe (
1005+ Effect . flatMap ( ( { projectKey } ) => readSkillerProjectContext ( projectKey , null ) ) ,
1006+ Effect . flatMap ( ( context ) => skillerJsonResponse ( request , { ok : true , ...context } , 200 ) ) ,
1007+ Effect . catchAll ( ( error ) => skillerErrorResponse ( request , error ) )
1008+ )
1009+ )
1010+ } )
9951011 ) ,
9961012 HttpRouter . get (
9971013 "/projects/by-key/:projectKey/terminal-sessions/:sessionId/skiller/context" ,
998- terminalSessionByProjectKeyParams . pipe (
999- Effect . flatMap ( ( { projectKey, sessionId } ) => readSkillerProjectContext ( projectKey , sessionId ) ) ,
1000- Effect . flatMap ( ( context ) => jsonResponse ( { ok : true , ...context } , 200 ) ) ,
1001- Effect . catchAll ( errorResponse )
1002- )
1014+ Effect . gen ( function * ( _ ) {
1015+ const request = yield * _ ( HttpServerRequest . HttpServerRequest )
1016+ return yield * _ (
1017+ terminalSessionByProjectKeyParams . pipe (
1018+ Effect . flatMap ( ( { projectKey, sessionId } ) => readSkillerProjectContext ( projectKey , sessionId ) ) ,
1019+ Effect . flatMap ( ( context ) => skillerJsonResponse ( request , { ok : true , ...context } , 200 ) ) ,
1020+ Effect . catchAll ( ( error ) => skillerErrorResponse ( request , error ) )
1021+ )
1022+ )
1023+ } )
10031024 ) ,
10041025 HttpRouter . get (
10051026 "/cloudflare-tunnels/panel" ,
0 commit comments