豆豆友情提示:这是一个非官方 GitHub 代理镜像,主要用于网络测试或访问加速。请勿在此进行登录、注册或处理任何敏感信息。进行这些操作请务必访问官方网站 github.com。 Raw 内容也通过此代理提供。
Skip to content

Commit 8fa6149

Browse files
committed
fix(apps): misc fixes from testing (#752)
Properly revoke the installation token, use a static port of 8080, extend the heartbeat interval length to 10 seconds, improve request header names. PR Close #752
1 parent 61230ff commit 8fa6149

File tree

1 file changed

+18
-15
lines changed

1 file changed

+18
-15
lines changed

apps/credential-service/lib/server.ts

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/usr/bin/env node
22

3-
import {createServer, IncomingMessage} from 'http';
3+
import {createServer, IncomingHttpHeaders, IncomingMessage} from 'http';
44
import {WebSocketServer, WebSocket} from 'ws';
55
import {Octokit} from '@octokit/rest';
66
import {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. */
1823
const authorizationRegex = new RegExp(/Bearer (.*)/);
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. */
2534
assert(process.env.GITHUB_APP_ID, 'GITHUB_APP_ID is not defined in the environment');
2635
const 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});
161164
wss.on('connection', wsHandler);
162165
server.on('upgrade', upgradeHandler);
163166
server.on('listening', () => console.log('Credential Service startup complete, listening'));
164-
server.listen(Number(PORT));
167+
server.listen(PORT);

0 commit comments

Comments
 (0)