11#!/usr/bin/env node
22
3- import { createServer , IncomingMessage } from 'http' ;
3+ import { createServer , IncomingHttpHeaders , IncomingMessage } from 'http' ;
44import { WebSocketServer , WebSocket } from 'ws' ;
55import { Octokit } from '@octokit/rest' ;
66import { createAppAuth } from '@octokit/auth-app' ;
@@ -14,13 +14,22 @@ interface AccessTokenAndRevocation {
1414 revokeToken: ( ) => void ;
1515}
1616
17+ interface RequestParameterHeaders extends IncomingHttpHeaders {
18+ ng_repo_name: string ;
19+ ng_repo_owner: string ;
20+ }
21+
1722/** Regex for matching authorization header uses. */
1823const authorizationRegex = new RegExp ( / B e a r e r ( .* ) / ) ;
19- /** The length of time in ms between heartbeat checks. */
20- const heartBeatIntervalLength = 5000 ;
24+ /**
25+ * The length of time in ms between heartbeat checks.
26+ *
27+ * 10 seconds is used as during the local PR validation process, the javascript thread
28+ * becomes blocked, and can cause a timeout.
29+ */
30+ const heartBeatIntervalLength = 10000 ;
2131/** The port to bind the server to */
22- assert ( process . env . PORT , 'PORT is not defined in the environment' ) ;
23- const PORT = process . env . PORT ;
32+ const PORT = 8080 ;
2433/** The ID of the Github app used to generating tokens. */
2534assert ( process . env . GITHUB_APP_ID , 'GITHUB_APP_ID is not defined in the environment' ) ;
2635const GITHUB_APP_ID = process . env . GITHUB_APP_ID ;
@@ -51,7 +60,7 @@ export async function generateAccessToken(
5160
5261 return {
5362 token,
54- revokeToken : async ( ) => await github . apps . revokeInstallationAccessToken ( ) ,
63+ revokeToken : async ( ) => await new Octokit ( { auth : token } ) . apps . revokeInstallationAccessToken ( ) ,
5564 } ;
5665}
5766
@@ -70,10 +79,7 @@ async function wsHandler(ws: WebSocket, req: IncomingMessage) {
7079 * Note: We safely case the header type as having these fields because they are checked prior
7180 * to the WebSocket handler function being invoked.
7281 */
73- const { NgDevTargetRepoOwner : owner , NgDevTargetRepoName : repo } = req . headers as {
74- NgDevTargetRepoName : string ;
75- NgDevTargetRepoOwner: string ;
76- } ;
82+ const { ng_repo_owner : owner , ng_repo_name : repo } = req . headers as RequestParameterHeaders ;
7783
7884 /** The temporary Github access token and function to revoke the token.. */
7985 const { token, revokeToken} = await generateAccessToken ( owner , repo ) ;
@@ -136,10 +142,7 @@ async function upgradeHandler(req: IncomingMessage, socket: Duplex, head: Buffer
136142 }
137143
138144 /** The repository name and owner for the request. */
139- const { NgDevTargetRepoName : repo , NgDevTargetRepoOwner : owner } = req . headers as {
140- NgDevTargetRepoName : string ;
141- NgDevTargetRepoOwner: string ;
142- } ;
145+ const { ng_repo_name : repo , ng_repo_owner : owner } = req . headers as RequestParameterHeaders ;
143146
144147 if ( ! repo || ! owner ) {
145148 console . error ( 'Missing a repo or owner parameter' ) ;
@@ -161,4 +164,4 @@ const wss = new WebSocketServer({noServer: true});
161164wss . on ( 'connection' , wsHandler ) ;
162165server . on ( 'upgrade' , upgradeHandler ) ;
163166server . on ( 'listening' , ( ) => console . log ( 'Credential Service startup complete, listening' ) ) ;
164- server . listen ( Number ( PORT ) ) ;
167+ server . listen ( PORT ) ;
0 commit comments