From 2590242bd89e385ee45954721937d77bfe072c4c Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Sat, 11 Feb 2023 18:43:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20github=20=E5=BC=80=E6=94=BE=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E6=9C=BA=E5=99=A8=E4=BA=BA=E5=A2=9E=E5=8A=A0=E7=9B=91?= =?UTF-8?q?=E5=90=AC=E6=B6=88=E6=81=AF=E5=9B=9E=E8=B0=83=E5=88=B0github=20?= =?UTF-8?q?issue=20comment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/github-app/.env.example | 3 +- apps/github-app/api/github/webhooks/index.js | 4 +- apps/github-app/package.json | 6 +- apps/github-app/src/app.ts | 128 ++++++++++-- apps/github-app/src/client.ts | 2 +- apps/github-app/src/index.ts | 8 +- apps/github-app/src/utils.ts | 30 +++ pnpm-lock.yaml | 196 ++++++------------- 8 files changed, 209 insertions(+), 168 deletions(-) diff --git a/apps/github-app/.env.example b/apps/github-app/.env.example index 881ff64e..1bfd7802 100644 --- a/apps/github-app/.env.example +++ b/apps/github-app/.env.example @@ -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= diff --git a/apps/github-app/api/github/webhooks/index.js b/apps/github-app/api/github/webhooks/index.js index becf8065..2e108ded 100644 --- a/apps/github-app/api/github/webhooks/index.js +++ b/apps/github-app/api/github/webhooks/index.js @@ -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', }); diff --git a/apps/github-app/package.json b/apps/github-app/package.json index 99a76873..fbfa97e7 100644 --- a/apps/github-app/package.json +++ b/apps/github-app/package.json @@ -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", diff --git a/apps/github-app/src/app.ts b/apps/github-app/src/app.ts index 0d789d08..81ad9bfe 100644 --- a/apps/github-app/src/app.ts +++ b/apps/github-app/src/app.ts @@ -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[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!'); + }); + } +} diff --git a/apps/github-app/src/client.ts b/apps/github-app/src/client.ts index 638d7010..f0bc6d05 100644 --- a/apps/github-app/src/client.ts +++ b/apps/github-app/src/client.ts @@ -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('登录失败, 请检查应用凭证'); diff --git a/apps/github-app/src/index.ts b/apps/github-app/src/index.ts index 6b816a95..15873dcc 100644 --- a/apps/github-app/src/index.ts +++ b/apps/github-app/src/index.ts @@ -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); diff --git a/apps/github-app/src/utils.ts b/apps/github-app/src/utils.ts index e965a44e..82bfee82 100644 --- a/apps/github-app/src/utils.ts +++ b/apps/github-app/src/utils.ts @@ -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}`; +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d13a0040..ca4f71c1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -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==}