feat: github 开放平台机器人增加监听消息回调到github issue comment

pull/70/head
moonrailgun 2 years ago
parent d120772257
commit 2590242bd8

@ -10,6 +10,7 @@ LOG_LEVEL=debug
WEBHOOK_PROXY_URL=
# Tailchat
TAILCHAT_API_URL=https://paw-server-nightly.moonrailgun.com
TAILCHAT_WEB_URL=https://nightly.paw.msgbyte.com
TAILCHAT_API_URL=https://tailchat-nightly.moonrailgun.com
TAILCHAT_APP_ID=
TAILCHAT_APP_SECRET=

@ -2,9 +2,9 @@
// Reference: https://probot.github.io/docs/deployment/#vercel
const { createNodeMiddleware, createProbot } = require('probot');
const app = require('../../../src/app').app;
const appFn = require('../../../src/app').appFn;
module.exports = createNodeMiddleware(app, {
module.exports = createNodeMiddleware(appFn, {
probot: createProbot(),
webhooksPath: '/api/github/webhooks',
});

@ -19,12 +19,16 @@
},
"dependencies": {
"axios": "^0.21.1",
"body-parser": "^1.20.1",
"dotenv": "^16.0.3",
"probot": "^12.2.4",
"lodash": "^4.17.21",
"probot": "^12.3.0",
"probot-metadata": "^2.1.0"
},
"devDependencies": {
"@types/body-parser": "^1.19.2",
"@types/jest": "^28.1.0",
"@types/lodash": "^4.14.191",
"@types/node": "^18.0.0",
"jest": "27.5.1",
"nock": "^13.0.5",

@ -1,7 +1,14 @@
import { Probot } from 'probot';
import { ApplicationFunction, Probot } from 'probot';
import metadata from 'probot-metadata';
import { TailchatClient } from './client';
import { configPath, generateErrorBlock } from './utils';
import {
configPath,
generateErrorBlock,
generateTopicCommentCreateContent,
generateTopicCreateContent,
} from './utils';
import bodyParser from 'body-parser';
import _ from 'lodash';
import * as dotenv from 'dotenv'; // see https://github.com/motdotla/dotenv#how-do-i-use-dotenv-with-import
dotenv.config();
@ -24,7 +31,7 @@ const tailchatAppSecret = process.env.TAILCHAT_APP_SECRET;
const tailchatWebUrl =
process.env.TAILCHAT_WEB_URL || process.env.TAILCHAT_API_URL;
export function app(app: Probot) {
export const appFn: ApplicationFunction = (app, { getRouter }) => {
app.on('issues.opened', async (ctx) => {
if (ctx.isBot) {
return;
@ -54,12 +61,15 @@ export function app(app: Probot) {
{
groupId,
panelId,
content: `[b]${
ctx.payload.issue.user.login
}[/b] create Issue:\n\nTitle: ${ctx.payload.issue.title}\n[markdown]${
ctx.payload.issue.body ?? ''
}[/markdown]\n\nWebsite: ${ctx.payload.issue.html_url}`,
content: generateTopicCreateContent(
ctx.payload.issue.user.login,
ctx.payload.issue.title,
ctx.payload.issue.body ?? '',
ctx.payload.issue.html_url
),
meta: {
tailchatHost: tailchatClient.url,
installationId: ctx.payload.installation?.id,
githubRepoOwner: ctx.payload.repository.owner.login,
githubRepoName: ctx.payload.repository.name,
githubIssueNumber: ctx.payload.issue.number,
@ -130,11 +140,11 @@ export function app(app: Probot) {
groupId,
panelId,
topicId,
content: `[b]${
ctx.payload.comment.user.login
}[/b] reply Issue:\n\n[markdown]${
ctx.payload.comment.body ?? ''
}[/markdown]\n\nWebsite: ${ctx.payload.comment.html_url}`,
content: generateTopicCommentCreateContent(
ctx.payload.comment.user.login,
ctx.payload.comment.body ?? '',
ctx.payload.comment.html_url
),
});
} catch (err) {
console.error(err);
@ -158,7 +168,9 @@ export function app(app: Probot) {
// installationTargetRepositories,
// });
// });
}
buildRouter(app, getRouter);
};
/**
*
@ -168,7 +180,7 @@ export function app(app: Probot) {
function createTailchatContextWithConfig(githubRaw: string) {
const content = Buffer.from(githubRaw, 'base64').toString();
const json = JSON.parse(content);
const tailchatHost = json['tailchatHost'];
const tailchatHost = json['tailchatHost'] ?? defaultTailchatApiUrl;
const groupId = json['groupId'];
const panelId = json['panelId'];
@ -176,11 +188,7 @@ function createTailchatContextWithConfig(githubRaw: string) {
throw new Error('config format error');
}
const tailchatClient = new TailchatClient(
tailchatHost ?? defaultTailchatApiUrl,
tailchatAppId,
tailchatAppSecret
);
const tailchatClient = createTailchatClient(tailchatHost);
return {
tailchatClient,
@ -188,3 +196,83 @@ function createTailchatContextWithConfig(githubRaw: string) {
panelId,
};
}
function createTailchatClient(tailchatHost = defaultTailchatApiUrl) {
const tailchatClient = new TailchatClient(
tailchatHost,
tailchatAppId,
tailchatAppSecret
);
return tailchatClient;
}
function buildRouter(
app: Probot,
getRouter: Parameters<ApplicationFunction>[1]['getRouter']
) {
if (getRouter) {
getRouter('/')
.get('/', (_req, res) => {
res.send('Hello World! Github app server is working!');
})
.post('/message/webhook', bodyParser.json(), (req, res) => {
(async () => {
try {
// 根据收件箱内容向 Github Issue 创建话题
const inboxItem = req.body ?? {};
if (inboxItem.type !== 'plugin:com.msgbyte.topic.comment') {
// 如果不是回复消息,则跳过
return;
}
const newComment: any =
_.last(_.get(inboxItem, ['payload', 'comments'])) ?? {};
const meta = _.get(inboxItem, ['payload', 'meta']) ?? {};
if (
!meta.installationId ||
!meta.githubRepoOwner ||
!meta.githubRepoName ||
!meta.githubIssueNumber
) {
console.warn('Cannot pass meta info check:', { meta });
return;
}
if (!newComment.author || !newComment.content) {
console.warn(
'Cannot get "newComment.author" or "newComment.content"'
);
return;
}
// 发送到github comment
const octokit = await app.auth(Number(meta.installationId));
const tailchatClient = createTailchatClient(meta.tailchatHost);
const userInfo = await tailchatClient.call('user.getUserInfo', {
userId: newComment.author,
});
const payload = {
owner: meta.githubRepoOwner,
repo: meta.githubRepoName,
issue_number: meta.githubIssueNumber,
body: `[${_.get(userInfo, [
'data',
'nickname',
])}] Tailchat :\n\`\`\`\n${
newComment.content ?? ''
}\n\`\`\``,
};
console.log('正在向Github Issue创建回复:', payload);
await octokit.issues.createComment(payload);
} catch (err) {
console.error(err);
}
})();
res.send('Success!');
});
}
}

@ -51,7 +51,7 @@ export class TailchatClient {
console.log('tailchat openapp login success!');
// 尝试调用函数
this.whoami().then(console.log);
// this.whoami().then(console.log);
} catch (err) {
console.error(err);
throw new Error('登录失败, 请检查应用凭证');

@ -1,8 +1,4 @@
import { run } from 'probot';
import { app } from './app';
import { appFn } from './app';
run(app).then((server) => {
server.router('/').get('/', (_req, res) => {
res.send('Hello World! Github app server is working!');
});
});
run(appFn);

@ -11,3 +11,33 @@ export function generateErrorBlock(err: unknown) {
return `Tailchat occur error, please checkout your config in \`${configPath}\`! \n${errorBlock}`;
}
/**
*
*/
export function generateTopicCreateContent(
user: string,
title: string,
body: string,
url: string
) {
return `[b]${user}[/b] create Issue:
[b]Title: ${title}[/b]
[markdown]${body}[/markdown]
Website: ${url}`;
}
/**
*
*/
export function generateTopicCommentCreateContent(
user: string,
body: string,
url: string
) {
return `[b]${user}[/b] reply Issue:
[markdown]${body}[/markdown]
Website: ${url}`;
}

@ -147,14 +147,18 @@ importers:
apps/github-app:
specifiers:
'@types/body-parser': ^1.19.2
'@types/jest': ^28.1.0
'@types/lodash': ^4.14.191
'@types/node': ^18.0.0
axios: ^0.21.1
body-parser: ^1.20.1
dotenv: ^16.0.3
jest: 27.5.1
lodash: ^4.17.21
nock: ^13.0.5
nodemon: ^2.0.18
probot: ^12.2.4
probot: ^12.3.0
probot-metadata: ^2.1.0
smee-client: ^1.2.2
ts-jest: 27.1.4
@ -162,11 +166,15 @@ importers:
typescript: ^4.1.3
dependencies:
axios: 0.21.4
body-parser: 1.20.1
dotenv: 16.0.3
probot: 12.2.8
probot-metadata: 2.1.0_probot@12.2.8
lodash: 4.17.21
probot: 12.3.0
probot-metadata: 2.1.0_probot@12.3.0
devDependencies:
'@types/body-parser': 1.19.2
'@types/jest': 28.1.8
'@types/lodash': 4.14.191
'@types/node': 18.7.11
jest: 27.5.1_ts-node@10.9.1
nock: 13.2.9
@ -5499,10 +5507,10 @@ packages:
'@commitlint/execute-rule': 17.0.0
'@commitlint/resolve-extends': 17.0.3
'@commitlint/types': 17.0.0
'@types/node': 18.11.16
'@types/node': 18.11.18
chalk: 4.1.2
cosmiconfig: 7.1.0
cosmiconfig-typescript-loader: 2.0.2_rmyookn2hbqnnqjamditnjqvjq
cosmiconfig-typescript-loader: 2.0.2_awa2wsr5thmg3i7jqycphctjfq
lodash: 4.17.21
resolve-from: 5.0.0
typescript: 4.9.4
@ -7302,7 +7310,7 @@ packages:
dependencies:
'@jest/fake-timers': 27.5.1
'@jest/types': 27.5.1
'@types/node': 18.11.16
'@types/node': 18.11.18
jest-mock: 27.5.1
dev: true
@ -7326,7 +7334,7 @@ packages:
dependencies:
'@jest/types': 27.5.1
'@sinonjs/fake-timers': 8.1.0
'@types/node': 18.11.16
'@types/node': 18.11.18
jest-message-util: 27.5.1
jest-mock: 27.5.1
jest-util: 27.5.1
@ -7475,7 +7483,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/yargs': 15.0.14
chalk: 4.1.2
dev: true
@ -7486,7 +7494,7 @@ packages:
dependencies:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/yargs': 16.0.4
chalk: 4.1.2
dev: true
@ -7498,7 +7506,7 @@ packages:
'@jest/schemas': 28.1.3
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/yargs': 17.0.12
chalk: 4.1.2
dev: true
@ -7510,7 +7518,7 @@ packages:
'@jest/schemas': 29.0.0
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/yargs': 17.0.12
chalk: 4.1.2
dev: false
@ -8322,7 +8330,6 @@ packages:
/@octokit/openapi-types/14.0.0:
resolution: {integrity: sha512-HNWisMYlR8VCnNurDU6os2ikx0s0VyEjDYHNS/h4cgb8DeOxQ0n72HyinUtdDVxJhFy3FWLGl0DJhfEWk3P5Iw==}
dev: true
/@octokit/plugin-enterprise-compatibility/1.3.0:
resolution: {integrity: sha512-h34sMGdEOER/OKrZJ55v26ntdHb9OPfR1fwOx6Q4qYyyhWA104o11h9tFxnS/l41gED6WEI41Vu2G2zHDVC5lQ==}
@ -8465,7 +8472,6 @@ packages:
resolution: {integrity: sha512-65/TPpOJP1i3K4lBJMnWqPUJ6zuOtzhtagDvydAWbEXpbFYA0oMKKyLb95NFZZP0lSh/4b6K+DQlzvYQJQQePg==}
dependencies:
'@octokit/openapi-types': 14.0.0
dev: true
/@octokit/webhooks-methods/2.0.0:
resolution: {integrity: sha512-35cfQ4YWlnZnmZKmIxlGPUPLtbkF8lr/A/1Sk1eC0ddLMwQN06dOuLc+dI3YLQS+T+MoNt3DIQ0NynwgKPilig==}
@ -12737,7 +12743,7 @@ packages:
dependencies:
'@types/http-cache-semantics': 4.0.1
'@types/keyv': 3.1.4
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/responselike': 1.0.0
/@types/codemirror/5.60.5:
@ -12783,7 +12789,7 @@ packages:
'@types/connect': 3.4.35
'@types/express': 4.17.15
'@types/keygrip': 1.0.2
'@types/node': 18.11.16
'@types/node': 18.11.18
/@types/copy-webpack-plugin/8.0.1_webpack-cli@4.10.0:
resolution: {integrity: sha512-TwEeGse0/wq+t3SFW0DEwroMS/cDkwVZT+vj7tMAYTp7llt/yz6NuW2n04X2M5P/kSfBQOORhrHAN2mqZdmybg==}
@ -12855,7 +12861,7 @@ packages:
/@types/docker-modem/3.0.2:
resolution: {integrity: sha512-qC7prjoEYR2QEe6SmCVfB1x3rfcQtUr1n4x89+3e0wSTMQ/KYCyf+/RAA9n2tllkkNc6//JMUZePdFRiGIWfaQ==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/ssh2': 1.11.6
dev: false
@ -12914,14 +12920,6 @@ packages:
resolution: {integrity: sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==}
dev: false
/@types/express-serve-static-core/4.17.30:
resolution: {integrity: sha512-gstzbTWro2/nFed1WXtf+TtrpwxH7Ggs4RLYTLbeVgIkUQOI3WG/JKjgeOU1zXDvezllupjrf8OPIdvTbIaVOQ==}
dependencies:
'@types/node': 18.11.16
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
dev: false
/@types/express-serve-static-core/4.17.31:
resolution: {integrity: sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==}
dependencies:
@ -12929,15 +12927,6 @@ packages:
'@types/qs': 6.9.7
'@types/range-parser': 1.2.4
/@types/express/4.17.13:
resolution: {integrity: sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==}
dependencies:
'@types/body-parser': 1.19.2
'@types/express-serve-static-core': 4.17.30
'@types/qs': 6.9.7
'@types/serve-static': 1.15.0
dev: false
/@types/express/4.17.15:
resolution: {integrity: sha512-Yv0k4bXGOH+8a+7bELd2PqHQsuiANB+A8a4gnQrkRWzrkKlb6KHaVvyXhqs04sVW/OWlbPyYxRgYlIXLfrufMQ==}
dependencies:
@ -12957,7 +12946,7 @@ packages:
/@types/fs-extra/8.1.2:
resolution: {integrity: sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
dev: true
/@types/fs-extra/9.0.13:
@ -13112,7 +13101,7 @@ packages:
/@types/jsonwebtoken/8.5.9:
resolution: {integrity: sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
/@types/keygrip/1.0.2:
resolution: {integrity: sha512-GJhpTepz2udxGexqos8wgaBx4I/zWIDPh/KOGEwAqtuGDkOUJu5eFvwmdBX4AmB8Odsr+9pHCQqiAqDL/yKMKw==}
@ -13120,7 +13109,7 @@ packages:
/@types/keyv/3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
/@types/koa-bodyparser/4.3.8:
resolution: {integrity: sha512-/Tk3xdaj/3y9VZ6K8z9fQ8myZOR2EEfwrlkbO4SjzLizRZaDFARSA8OGAC3B9lhC1R4wG0nCrTdd6o0NL2jrEQ==}
@ -13180,7 +13169,7 @@ packages:
resolution: {integrity: sha512-Ny/PJkO6nxWAQnaet8q/oWz15lrfwvdvBpuY4treB0CSsBO1CG0fVuNLngR3m3bepQLd+E4c3Y3DlC2okpUvPw==}
dependencies:
'@types/fined': 1.1.3
'@types/node': 18.11.16
'@types/node': 18.11.18
dev: false
/@types/loadable__component/5.13.4:
@ -13285,7 +13274,7 @@ packages:
/@types/node-fetch/2.6.2:
resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
form-data: 3.0.1
dev: true
@ -13380,20 +13369,20 @@ packages:
/@types/pino-pretty/4.7.5:
resolution: {integrity: sha512-rfHe6VIknk14DymxGqc9maGsRe8/HQSvM2u46EAz2XrS92qsAJnW16dpdFejBuZKD8cRJX6Aw6uVZqIQctMpAg==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/pino': 6.3.12
dev: false
/@types/pino-std-serializers/2.4.1:
resolution: {integrity: sha512-17XcksO47M24IVTVKPeAByWUd3Oez7EbIjXpSbzMPhXVzgjGtrOa49gKBwxH9hb8dKv58OelsWQ+A1G1l9S3wQ==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
dev: false
/@types/pino/6.3.12:
resolution: {integrity: sha512-dsLRTq8/4UtVSpJgl9aeqHvbh6pzdmjYD3C092SYgLD2TyoCqHpTJk6vp8DvCTGGc7iowZ2MoiYiVUUCcu7muw==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/pino-pretty': 4.7.5
'@types/pino-std-serializers': 2.4.1
sonic-boom: 2.8.0
@ -13582,7 +13571,7 @@ packages:
/@types/responselike/1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
/@types/retry/0.12.0:
resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
@ -13590,7 +13579,7 @@ packages:
/@types/sax/1.2.4:
resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
dev: false
/@types/scheduler/0.16.2:
@ -13630,7 +13619,7 @@ packages:
/@types/ssh2/1.11.6:
resolution: {integrity: sha512-8Mf6bhzYYBLEB/G6COux7DS/F5bCWwojv/qFo2yH/e4cLzAavJnxvFXrYW59iKfXdhG6OmzJcXDasgOb/s0rxw==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
dev: false
/@types/stack-utils/2.0.1:
@ -13672,7 +13661,7 @@ packages:
/@types/through/0.0.30:
resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
/@types/tinycon/0.6.3:
resolution: {integrity: sha512-TC42m8KAyp3AqyZKRXVkk5Qy+oIU8zo2U3362i16Qan0JgZNzLawO7oYnin4BJOy8FSZfOadYYvUWQnpaXoZwg==}
@ -13775,7 +13764,7 @@ packages:
/@types/whatwg-url/8.2.2:
resolution: {integrity: sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
'@types/webidl-conversions': 6.1.1
/@types/ws/8.5.3:
@ -15713,7 +15702,7 @@ packages:
babel-plugin-syntax-jsx: 6.18.0
lodash: 4.17.21
picomatch: 2.3.1
styled-components: 5.3.6_7i5myeigehqah43i5u7wbekgba
styled-components: 5.3.6_react@18.2.0
/babel-plugin-syntax-jsx/6.18.0:
resolution: {integrity: sha512-qrPaCSo9c8RHNRHIotaufGbuOBN8rtdC4QrrFFc43vyWCCz7Kl7GL1PGaXtMGQZUXrkCjNEgxDfmAuAabr/rlw==}
@ -15902,26 +15891,6 @@ packages:
/bn.js/5.2.1:
resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==}
/body-parser/1.20.0:
resolution: {integrity: sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
dependencies:
bytes: 3.1.2
content-type: 1.0.4
debug: 2.6.9
depd: 2.0.0
destroy: 1.2.0
http-errors: 2.0.0
iconv-lite: 0.4.24
on-finished: 2.4.1
qs: 6.10.3
raw-body: 2.5.1
type-is: 1.6.18
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
dev: false
/body-parser/1.20.1:
resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
@ -17839,16 +17808,16 @@ packages:
vary: 1.1.2
dev: false
/cosmiconfig-typescript-loader/2.0.2_rmyookn2hbqnnqjamditnjqvjq:
/cosmiconfig-typescript-loader/2.0.2_awa2wsr5thmg3i7jqycphctjfq:
resolution: {integrity: sha512-KmE+bMjWMXJbkWCeY4FJX/npHuZPNr9XF9q9CIQ/bpFwi1qHfCmSiKarrCcRa0LO4fWjk93pVoeRtJAkTGcYNw==}
engines: {node: '>=12', npm: '>=6'}
peerDependencies:
'@types/node': '*'
typescript: '>=3'
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
cosmiconfig: 7.1.0
ts-node: 10.9.1_rmyookn2hbqnnqjamditnjqvjq
ts-node: 10.9.1_awa2wsr5thmg3i7jqycphctjfq
typescript: 4.9.4
transitivePeerDependencies:
- '@swc/core'
@ -19579,7 +19548,7 @@ packages:
dependencies:
'@types/cookie': 0.4.1
'@types/cors': 2.8.12
'@types/node': 18.11.16
'@types/node': 18.11.18
accepts: 1.3.8
base64id: 2.0.0
cookie: 0.4.2
@ -20571,7 +20540,7 @@ packages:
resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==}
engines: {node: '>= 0.8'}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
require-like: 0.1.2
dev: false
@ -20754,45 +20723,6 @@ packages:
express: 4.18.2
dev: false
/express/4.18.1:
resolution: {integrity: sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==}
engines: {node: '>= 0.10.0'}
dependencies:
accepts: 1.3.8
array-flatten: 1.1.1
body-parser: 1.20.0
content-disposition: 0.5.4
content-type: 1.0.4
cookie: 0.5.0
cookie-signature: 1.0.6
debug: 2.6.9
depd: 2.0.0
encodeurl: 1.0.2
escape-html: 1.0.3
etag: 1.8.1
finalhandler: 1.2.0
fresh: 0.5.2
http-errors: 2.0.0
merge-descriptors: 1.0.1
methods: 1.1.2
on-finished: 2.4.1
parseurl: 1.3.3
path-to-regexp: 0.1.7
proxy-addr: 2.0.7
qs: 6.10.3
range-parser: 1.2.1
safe-buffer: 5.2.1
send: 0.18.0
serve-static: 1.15.0
setprototypeof: 1.2.0
statuses: 2.0.1
type-is: 1.6.18
utils-merge: 1.0.1
vary: 1.1.2
transitivePeerDependencies:
- supports-color
dev: false
/express/4.18.2:
resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==}
engines: {node: '>= 0.10.0'}
@ -24449,7 +24379,7 @@ packages:
pretty-format: 27.5.1
slash: 3.0.0
strip-json-comments: 3.1.1
ts-node: 10.9.1_nzafxra4mdyuer2ejmql6rdadq
ts-node: 10.9.1_k2dsl7zculo2nmh5s33pladmoa
transitivePeerDependencies:
- bufferutil
- canvas
@ -24522,7 +24452,7 @@ packages:
'@jest/environment': 27.5.1
'@jest/fake-timers': 27.5.1
'@jest/types': 27.5.1
'@types/node': 18.11.16
'@types/node': 18.11.18
jest-mock: 27.5.1
jest-util: 27.5.1
jsdom: 16.7.0
@ -24571,7 +24501,7 @@ packages:
dependencies:
'@jest/types': 26.6.2
'@types/graceful-fs': 4.1.5
'@types/node': 18.11.16
'@types/node': 18.11.18
anymatch: 3.1.3
fb-watchman: 2.0.1
graceful-fs: 4.2.10
@ -24721,7 +24651,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
'@types/node': 18.11.16
'@types/node': 18.11.18
dev: true
/jest-pnp-resolver/1.2.3_jest-resolve@27.5.1:
@ -24839,7 +24769,7 @@ packages:
resolution: {integrity: sha512-S5wqyz0DXnNJPd/xfIzZ5Xnp1HrJWBczg8mMfMpN78OJ5eDxXyf+Ygld9wX1DnUWbIbhM1YDY95NjR4CBXkb2g==}
engines: {node: '>= 10.14.2'}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
graceful-fs: 4.2.10
dev: true
@ -24886,7 +24816,7 @@ packages:
engines: {node: '>= 10.14.2'}
dependencies:
'@jest/types': 26.6.2
'@types/node': 18.11.16
'@types/node': 18.11.18
chalk: 4.1.2
graceful-fs: 4.2.10
is-ci: 2.0.0
@ -24910,7 +24840,7 @@ packages:
engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0}
dependencies:
'@jest/types': 28.1.3
'@types/node': 18.11.16
'@types/node': 18.11.18
chalk: 4.1.2
ci-info: 3.3.2
graceful-fs: 4.2.10
@ -24922,7 +24852,7 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@jest/types': 29.2.1
'@types/node': 18.11.16
'@types/node': 18.11.18
chalk: 4.1.2
ci-info: 3.3.2
graceful-fs: 4.2.10
@ -24986,7 +24916,7 @@ packages:
resolution: {integrity: sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@types/node': 18.11.16
'@types/node': 18.11.18
jest-util: 29.2.1
merge-stream: 2.0.0
supports-color: 8.1.1
@ -30599,16 +30529,16 @@ packages:
engines: {node: '>=6'}
dev: false
/probot-metadata/2.1.0_probot@12.2.8:
/probot-metadata/2.1.0_probot@12.3.0:
resolution: {integrity: sha512-0e8+fZ5tE2EbsSgN1zGHfjFNs17DEbG5b0zYq2HlEL6u+8JJRZraUMtwsi0QdtB2eMrenYfEy76aBfnfzFcrRw==}
peerDependencies:
probot: '>=10'
dependencies:
probot: 12.2.8
probot: 12.3.0
dev: false
/probot/12.2.8:
resolution: {integrity: sha512-O2WqJmgXUijAOTHaIBEW3jC5OU9Rq+eUg/AEBI5zkAUZaxzJMQvXvGvhVsdFE3Zt9Z3ceGN8Z2cgN+NTItSrCQ==}
/probot/12.3.0:
resolution: {integrity: sha512-I7qpD6myIt5eEqAOv14mrbdh4HdLG1MQgCHGQJpIj6rdDeQaacQDL2THlMSqIU2VBcdIRpLqNv7D0z2NG0la3w==}
engines: {node: '>=10.21'}
hasBin: true
dependencies:
@ -30618,12 +30548,12 @@ packages:
'@octokit/plugin-rest-endpoint-methods': 5.16.2_@octokit+core@3.6.0
'@octokit/plugin-retry': 3.0.9
'@octokit/plugin-throttling': 3.7.0_@octokit+core@3.6.0
'@octokit/types': 7.5.1
'@octokit/types': 8.0.0
'@octokit/webhooks': 9.26.0
'@probot/get-private-key': 1.1.1
'@probot/octokit-plugin-config': 1.1.6_@octokit+core@3.6.0
'@probot/pino': 2.3.5
'@types/express': 4.17.13
'@types/express': 4.17.15
'@types/ioredis': 4.28.10
'@types/pino': 6.3.12
'@types/pino-http': 5.8.1
@ -30632,7 +30562,7 @@ packages:
deprecation: 2.3.1
dotenv: 8.6.0
eventsource: 2.0.2
express: 4.18.1
express: 4.18.2
express-handlebars: 6.0.6
ioredis: 4.28.5
js-yaml: 3.14.1
@ -30642,7 +30572,7 @@ packages:
pino-http: 5.8.0
pkg-conf: 3.1.0
resolve: 1.22.1
semver: 7.3.7
semver: 7.3.8
update-dotenv: 1.1.1_dotenv@8.6.0
uuid: 8.3.2
transitivePeerDependencies:
@ -31028,13 +30958,6 @@ packages:
resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==}
engines: {node: '>=0.6.0', teleport: '>=0.2.0'}
/qs/6.10.3:
resolution: {integrity: sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==}
engines: {node: '>=0.6'}
dependencies:
side-channel: 1.0.4
dev: false
/qs/6.11.0:
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
engines: {node: '>=0.6'}
@ -35924,6 +35847,7 @@ packages:
react-is: 18.2.0
shallowequal: 1.1.0
supports-color: 5.5.0
dev: false
/styled-components/5.3.6_mdz3marskokvq6744hhidi3r5a:
resolution: {integrity: sha512-hGTZquGAaTqhGWldX7hhfzjnIYBZ0IXQXkCYdvF1Sq3DsUaLx6+NTHC5Jj1ooM2F68sBiVz3lvhfwQs/S3l6qg==}
@ -35969,7 +35893,6 @@ packages:
react: 18.2.0
shallowequal: 1.1.0
supports-color: 5.5.0
dev: true
/styled-system/5.1.5:
resolution: {integrity: sha512-7VoD0o2R3RKzOzPK0jYrVnS8iJdfkKsQJNiLRDjikOpQVqQHns/DXWaPZOH4tIKkhAT7I6wIsy9FWTWh2X3q+A==}
@ -37068,7 +36991,6 @@ packages:
typescript: 4.9.4
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
dev: false
/ts-node/10.9.1_k2dsl7zculo2nmh5s33pladmoa:
resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==}

Loading…
Cancel
Save