├── .gitignore ├── .github ├── workflows │ ├── src │ │ ├── .node-version │ │ ├── app │ │ │ ├── data │ │ │ │ ├── airtable.json │ │ │ │ └── example-event.json │ │ │ ├── action-event.js │ │ │ ├── education-web.js │ │ │ ├── file-validator.js │ │ │ ├── airtable.js │ │ │ └── octokit.js │ │ ├── .gitignore │ │ ├── package.json │ │ ├── fetch-data.js │ │ ├── index.js │ │ └── package-lock.json │ └── main.yml └── PULL_REQUEST_TEMPLATE.md ├── assets ├── card-min.png └── GHG_Blog_1.jpg ├── _data ├── yomaokobiah │ └── yomaokobiah.md └── kunal-kushwaha │ └── kunal-kushwaha.md └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .autogit -------------------------------------------------------------------------------- /.github/workflows/src/.node-version: -------------------------------------------------------------------------------- 1 | 14.9.0 2 | -------------------------------------------------------------------------------- /.github/workflows/src/app/data/airtable.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /.github/workflows/src/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | .env 4 | -------------------------------------------------------------------------------- /assets/card-min.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunal-kushwaha/GitHubGraduation-2022/HEAD/assets/card-min.png -------------------------------------------------------------------------------- /assets/GHG_Blog_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kunal-kushwaha/GitHubGraduation-2022/HEAD/assets/GHG_Blog_1.jpg -------------------------------------------------------------------------------- /_data/yomaokobiah/yomaokobiah.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Ogheneyoma Okobiah 3 | institution: Nile University of Nigeria 4 | quote: Determination is a burning desire for success. 5 | github_user: yomaokobiah 6 | --- 7 | -------------------------------------------------------------------------------- /_data/kunal-kushwaha/kunal-kushwaha.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Kunal Kushwaha 3 | institution: Maharaja Agrasen Institute Of Technology 4 | quote: Contributing to open source was the most rewarding thing I did in my college life. 5 | github_user: kunal-kushwaha 6 | --- -------------------------------------------------------------------------------- /.github/workflows/src/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GitHub Graduation", 3 | "version": "1.0.1", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "airtable": "^0.11.0", 13 | "axios": "^0.21.1", 14 | "dotenv": "^8.2.0", 15 | "markdown-it": "^12.0.6", 16 | "markdown-it-metadata-block": "^1.0.2", 17 | "octokit": "^1.0.3", 18 | "yaml": "^1.10.2" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /.github/workflows/src/fetch-data.js: -------------------------------------------------------------------------------- 1 | if(!process.env.GITHUB_ACTIONS) { 2 | const result = require('dotenv').config() 3 | 4 | if (result.error) { 5 | throw result.error 6 | } 7 | } 8 | 9 | const airtable = require('./app/airtable.js'); 10 | const fs = require('fs') 11 | 12 | ;(async ()=>{ 13 | const grad2020 = await airtable.fetchAll2020() 14 | const grad2021 = await airtable.fetchAll2021() 15 | const grad2022 = await airtable.fetchAll2022() 16 | const content = JSON.stringify({grad2020, grad2021, grad2022}) 17 | fs.writeFileSync('./app/data/airtable.json', content) 18 | })() 19 | -------------------------------------------------------------------------------- /.github/workflows/src/app/action-event.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | 3 | class ActionsEvent { 4 | constructor() { 5 | try { 6 | this.data = JSON.parse(fs.readFileSync(process.env.GITHUB_EVENT_PATH, 'utf8')) 7 | this.initAttributes() 8 | } catch(err) { 9 | console.error(err) 10 | this.data = null 11 | } 12 | } 13 | 14 | initAttributes() { 15 | if(!this.data) { 16 | return 17 | } 18 | 19 | // These could change.... I was noticing different data structures after moving repos 20 | this.event = this.data 21 | this.pull = this.data.pull_request 22 | this.requestedReviewer = this.data.requested_reviewer 23 | this.name = this.event.action 24 | this.pullNumber = this.pull.number 25 | this.pullRepo = this.pull.base.repo 26 | this.pullRepoOwner = this.pullRepo.owner.login 27 | this.pullAuthor = this.pull.user.login 28 | } 29 | } 30 | 31 | module.exports = new ActionsEvent() 32 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Application to the Class of 2022🎓 2 | 3 | This pull request template helps you complete an application to the **Class of 2022**. Use the checklist below to verify you have followed the instructions correctly. 4 | 5 | ## Checklist ✅ 6 | 7 | - [ ] I have read the instructions on the README file before submitting my application. 8 | - [ ] I made my submission by creating a folder on the `_data` folder and followed the naming convention mentioned in the instructions (``) and markdown file. 9 | - [ ] I have submitted a [swag shipping form](https://airtable.com/shrM5IigBuRFaj33H). 10 | - [ ] I have used the Markdown file template to add my information to the Year Book. 11 | - [ ] I understand that a reviewer will merge my pull request after examining it or ask for changes in case needed. 12 | - [ ] I understand I should not tag or add a reviewer to this Pull Request. 13 | - [ ] I have [added the event](http://www.google.com/calendar/event?action=TEMPLATE&dates=20210605T160000Z%2F20210605T173000Z&text=GitHub%20Graduation%20%F0%9F%8E%93&location=https%3A%2F%2Fwww.twitch.tv%2Fgithubeducation&details=) to my Calendar. 14 | -------------------------------------------------------------------------------- /.github/workflows/src/app/education-web.js: -------------------------------------------------------------------------------- 1 | const axios = require('axios'); 2 | 3 | class EducationWeb { 4 | constructor() { 5 | 6 | } 7 | 8 | async hasPack(github_identifier) { 9 | await this.authenticate() 10 | 11 | const result = await axios({ 12 | method: "get", 13 | url: process.env.EDUCATION_WEB_API + "/api/user", 14 | headers: { 15 | "Authorization": "token " + this.authToken, 16 | "Accept": "application/vnd.education.github.v2" 17 | }, 18 | params: { github_identifier: github_identifier } 19 | }) 20 | 21 | const user_type = result?.data?.user?.type 22 | 23 | return (user_type === "faculty" || user_type === "student") 24 | } 25 | 26 | async authenticate() { 27 | if(this.authToken) { 28 | return 29 | } 30 | 31 | const result = await axios({ 32 | method: "post", 33 | url: process.env.EDUCATION_WEB_API + "/api/auth", 34 | headers: { 35 | "Accept": "application/vnd.education.github.v2" 36 | }, 37 | data: { 38 | key: process.env.EDUCATION_WEB_KEY, 39 | secret: process.env.EDUCATION_WEB_SECRET 40 | } 41 | }) 42 | 43 | this.authToken = result.data.jwt 44 | } 45 | } 46 | 47 | module.exports = new EducationWeb() 48 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | # This is a basic workflow to help you get started with Actions 2 | 3 | name: Graduation Helper 4 | 5 | # Controls when the action will run. 6 | on: 7 | # Triggers the workflow on push or pull request events but only for the main branch 8 | pull_request_target: 9 | types: 10 | - opened 11 | - review_requested 12 | - ready_for_review 13 | workflow_dispatch: 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | defaults: 18 | run: 19 | shell: bash 20 | working-directory: .github/workflows/src 21 | name: Getting grades 22 | steps: 23 | - uses: actions/checkout@v2 24 | - name: Setup node 25 | uses: actions/setup-node@v2 26 | with: 27 | node-version: 14 28 | - name: Cache modules 29 | id: cachemodules 30 | uses: actions/cache@v2 31 | with: 32 | path: .github/workflows/src/node_modules 33 | key: ${{ runner.os }}-${{ hashFiles('.github/workflows/src/package.json') }} 34 | - name: Setup npm 35 | run: npm install -g npm 36 | - name: Install dependencies 37 | if: steps.cachemodules.outputs.cache-hit != 'true' 38 | run: npm install 39 | - name: Get Minute 40 | id: getminute 41 | run: echo "::set-output name=minute::$(date -u '+%M')" 42 | shell: bash # For Windows, Linux and macOS default to bash alrea 43 | - name: Cache data 44 | id: cache-data 45 | uses: actions/cache@v2 46 | with: 47 | path: .github/workflows/src/app/data 48 | key: ${{ runner.OS }}-${{ steps.getminute.outputs.minute }} # cache for 1 minute 49 | - name: Cache Airtable 50 | if: steps.cache-data.outputs.cache-hit != 'true' 51 | run: node fetch-data.js 52 | env: 53 | AIRTABLE_SECRET: ${{ secrets.AIRTABLE_SECRET }} 54 | GH_SECRET: ${{ secrets.GH_SECRET }} 55 | EDUCATION_WEB_KEY: ${{ secrets.EDUCATION_WEB_KEY }} 56 | EDUCATION_WEB_SECRET: ${{ secrets.EDUCATION_WEB_SECRET }} 57 | EDUCATION_WEB_API: ${{ secrets.EDUCATION_WEB_API }} 58 | - name: run entry point 59 | run: node index.js 60 | env: 61 | AIRTABLE_SECRET: ${{ secrets.AIRTABLE_SECRET }} 62 | GH_SECRET: ${{ secrets.GH_SECRET }} 63 | EDUCATION_WEB_KEY: ${{ secrets.EDUCATION_WEB_KEY }} 64 | EDUCATION_WEB_SECRET: ${{ secrets.EDUCATION_WEB_SECRET }} 65 | EDUCATION_WEB_API: ${{ secrets.EDUCATION_WEB_API }} 66 | -------------------------------------------------------------------------------- /.github/workflows/src/app/file-validator.js: -------------------------------------------------------------------------------- 1 | const actionEvent = require('./action-event.js'); 2 | const path = require('path') 3 | const yaml = require('yaml') 4 | const md = require('markdown-it') 5 | 6 | const pullAuthor = actionEvent.pull.user.login 7 | const expectedPath = `_data/${pullAuthor}` 8 | const characterLimits = { name: 28, institution: 58, quote: 100 } 9 | 10 | class FileVaidator { 11 | constructor() { 12 | 13 | } 14 | 15 | async isMarkdownValid(markdown) { 16 | // hack to import a module TOO Enable modules and swap all the requires 17 | const metadataBlock = (await import("markdown-it-metadata-block")).default; 18 | const meta = {} 19 | const errors = [] 20 | let mdContent = false 21 | 22 | const mdParser = md({ 23 | html: true, 24 | linkify: true, 25 | typographer: true 26 | }).use(metadataBlock,{ 27 | parseMetadata: yaml.parse, 28 | meta: meta 29 | }); 30 | 31 | try { 32 | mdContent = mdParser.render(markdown) 33 | } catch(err) { 34 | console.log("markdown error: " + err) 35 | errors.push(`*The markdown content in \`${expectedPath}/${pullAuthor}.md\` has syntax errors*`) 36 | } 37 | 38 | if(mdContent !== false) { 39 | if(meta.github_user !== pullAuthor) { 40 | errors.push(`*The yaml content in \`${expectedPath}/${pullAuthor}.md\` must contain your github username*`) 41 | } 42 | 43 | for(const key of [ "name", "institution", "quote" ]) { 44 | if(!meta[key]) { 45 | errors.push(`*The attribute \`${key}\` is required in \`${expectedPath}/${pullAuthor}.md\`*`) 46 | } else if(meta[key].length > characterLimits[key]) { 47 | errors.push(`*The value for \`${key}\` can only have **${characterLimits[key]}** characters max (I see **${meta[key].length }**)*`) 48 | } 49 | } 50 | } else { 51 | errors.push(`*\`${expectedPath}/${pullAuthor}.md\` does not contain any yaml metadata*`) 52 | } 53 | 54 | return { isValid: !errors.length, errors: errors } 55 | } 56 | 57 | isValidPaths(filePaths=[]) { 58 | const errors = [] 59 | const invalidPaths = [] 60 | let invalidDirectory = false 61 | let InvalidMarkdownFile = true 62 | let isValid = true 63 | let pathData 64 | 65 | for(let filePath of filePaths) { 66 | pathData = path.parse(filePath) 67 | 68 | if(pathData.dir !== expectedPath) { 69 | invalidPaths.push("`" + filePath + "`") 70 | invalidDirectory = true 71 | } 72 | 73 | if(pathData.base === `${pullAuthor}.md`) { 74 | InvalidMarkdownFile = false 75 | } 76 | } 77 | 78 | if(InvalidMarkdownFile) { 79 | errors.push(`*The required markdown file does not exist, please ensure the file \`${expectedPath}/${pullAuthor}.md\` exists*`) 80 | } 81 | 82 | if(invalidDirectory) { 83 | errors.push(`*Please ensure all changes are contained within the \`${expectedPath}/\` directory. Invalid file paths:* \n\n\t* ${invalidPaths.join('\n\t* ')}\n`) 84 | } 85 | 86 | return { isValid: !errors.length, errors } 87 | } 88 | } 89 | 90 | module.exports = new FileVaidator() 91 | -------------------------------------------------------------------------------- /.github/workflows/src/app/airtable.js: -------------------------------------------------------------------------------- 1 | const Airtable = require('airtable') 2 | const fs = require('fs') 3 | 4 | Airtable.configure({ 5 | endpointUrl: 'https://api.airtable.com', 6 | apiKey: process.env.AIRTABLE_SECRET 7 | }); 8 | 9 | const GITHUB_GRADUATION = "appQj1OE66mjSGWq8" 10 | const GRADUATES_2020 = "Graduation 2020" 11 | const GRADUATES_2021 = "Graduation 2021" 12 | const GRADUATES_2022 = "Graduation 2022" 13 | 14 | let cachedJson 15 | let cachedData = {} 16 | 17 | try { 18 | cachedJson = fs.readFileSync('./app/data/airtable.json', 'utf8') 19 | cachedData = JSON.parse(cachedJson) 20 | } catch(err) { 21 | console.log("Failed to parse cache", err) 22 | } 23 | 24 | 25 | class ATable { 26 | constructor() { 27 | 28 | } 29 | 30 | userParticipatedPrior(githubLogin, year) { 31 | const data = this.fetchFromCache(githubLogin, year) 32 | 33 | if(data) { 34 | console.log("found cached " + year + " data") 35 | return Promise.resolve(data) 36 | } 37 | 38 | return this.fetchGraduate(githubLogin, year) 39 | } 40 | 41 | async fetchGraduate(githubLogin, year) { 42 | const data = this.fetchFromCache(githubLogin, year) 43 | if(data[0] || data[1]) { 44 | console.log("found cached 2021 or 2020 data") 45 | return Promise.resolve(data) 46 | } 47 | 48 | return this.fetchGraduate(githubLogin, GRADUATES_2021) 49 | } 50 | 51 | async fetchAll(table) { 52 | const airtable = Airtable.base(GITHUB_GRADUATION); 53 | const users = {} 54 | 55 | return new Promise((resolve, reject)=>{ 56 | airtable(table).select().eachPage(function page(records, fetchNextPage) { 57 | // This function (`page`) will get called for each page of records. 58 | 59 | records.forEach(function(record) { 60 | users[record.fields["GitHub Username"]] = record.fields 61 | }); 62 | 63 | // To fetch the next page of records, call `fetchNextPage`. 64 | // If there are more records, `page` will get called again. 65 | // If there are no more records, `done` will get called. 66 | fetchNextPage(); 67 | 68 | }, function done(err) { 69 | if (err) { 70 | console.error(err); 71 | reject(err) 72 | } 73 | resolve(users) 74 | }); 75 | }) 76 | } 77 | 78 | async fetchAll2022() { 79 | return await this.fetchAll(GRADUATES_2022) 80 | } 81 | 82 | async fetchAll2021() { 83 | return await this.fetchAll(GRADUATES_2021) 84 | } 85 | 86 | async fetchAll2020() { 87 | return await this.fetchAll(GRADUATES_2020) 88 | } 89 | 90 | fetchFromCache(githubLogin, table) { 91 | let data 92 | 93 | if(table === GRADUATES_2020) { 94 | data = cachedData["grad2020"] 95 | } else if(table === GRADUATES_2021) { 96 | data = cachedData["grad2021"] 97 | } else if(table === GRADUATES_2022) { 98 | data = cachedData["grad2022"] 99 | } 100 | 101 | if(data) { 102 | return data[githubLogin] 103 | } 104 | } 105 | 106 | fetchGraduate(githubLogin, table) { 107 | const airtable = Airtable.base(GITHUB_GRADUATION); 108 | const data = [] 109 | return new Promise((resolve, reject)=>{ 110 | airtable(table).select({ 111 | // Selecting the first 3 records in Pending Reviews: 112 | maxRecords: 1, 113 | filterByFormula: `{GitHub Username} = '${githubLogin}'` 114 | // view: "Pending Reviews", 115 | // filterByFormula: `{GitHub Username} = '${}'` 116 | }).eachPage(function page(records, fetchNextPage) { 117 | // This function (`page`) will get called for each page of records. 118 | records.forEach(function(record) { 119 | data.push(record.fields) 120 | }); 121 | 122 | fetchNextPage() 123 | }, function done(err) { 124 | if (err) { 125 | if(err.error === "NOT_FOUND") { 126 | resolve(false) 127 | } 128 | 129 | reject(err) 130 | return; 131 | } 132 | 133 | resolve(data[0]) 134 | }); 135 | 136 | }).catch((err)=>{ 137 | reject(err) 138 | }) 139 | } 140 | } 141 | 142 | module.exports = new ATable() 143 | -------------------------------------------------------------------------------- /.github/workflows/src/app/octokit.js: -------------------------------------------------------------------------------- 1 | const { Octokit, App, Action } = require("octokit") 2 | const actionEvent = require('./action-event.js'); 3 | 4 | const MERGE_LABEL = "✅ Ready for merge" 5 | const CLOSED_LABEL = "🎉 Previously Graduated" 6 | 7 | class Octo { 8 | constructor() { 9 | this.octokit = new Octokit({ auth: process.env.GH_SECRET }); 10 | } 11 | 12 | async getContent(path) { 13 | const { data } = await this.octokit.rest.repos.getContent({ 14 | mediaType: { 15 | format: "raw", 16 | }, 17 | owner: actionEvent.pullRepoOwner, 18 | repo: actionEvent.pullRepo.name, 19 | path: path, 20 | ref: actionEvent.pull.head.sha 21 | }); 22 | 23 | return data 24 | } 25 | 26 | async fetchPr(pr) { 27 | const { repository: { pullRequest } } = await this.octokit.graphql( 28 | ` 29 | query myQuery($name: String!, $owner: String!, $pr: Int!){ 30 | repository(name: $name, owner: $owner) { 31 | pullRequest(number: $pr) { 32 | author { 33 | login 34 | } 35 | bodyText 36 | closed 37 | reviews(first:100) { 38 | edges{ 39 | node { 40 | body 41 | state 42 | url 43 | author { 44 | login 45 | } 46 | 47 | comments(first: 100) { 48 | edges { 49 | node { 50 | body 51 | author { 52 | login 53 | } 54 | } 55 | } 56 | } 57 | } 58 | } 59 | } 60 | 61 | files(first: 100) { 62 | edges { 63 | node { 64 | path 65 | additions 66 | deletions 67 | } 68 | } 69 | } 70 | } 71 | } 72 | } 73 | `, 74 | { 75 | name: actionEvent.pullRepo.name, 76 | owner: actionEvent.pullRepoOwner, 77 | pr: pr 78 | } 79 | ) 80 | return pullRequest 81 | } 82 | 83 | // comments are an array of objects: 84 | 85 | // path (string) Required. The relative path to the file that necessitates a review comment. 86 | // position (integer) The position in the diff where you want to add a review comment. 87 | // Note this value is not the same as the line number in the file. For help finding 88 | // the position value, read the note below. 89 | // body (string) Required. Text of the review comment. 90 | // line (integer) 91 | // side (string) 92 | // start_line (integer) 93 | // start_side (string) 94 | 95 | async createReview(content, event="COMMENT", comments=[]) { 96 | const { data } = await this.octokit.rest.pulls.createReview({ 97 | accept: "application/vnd.github.v3+json", 98 | pull_number: actionEvent.pullNumber, 99 | commit_id: actionEvent.pull.head.sha, 100 | owner: actionEvent.pullRepoOwner, 101 | repo: actionEvent.pullRepo.name, 102 | body: content, 103 | comments: comments, 104 | event: event 105 | }); 106 | 107 | return data 108 | } 109 | 110 | async mergePR() { 111 | return await this.octokit.request('PUT /repos/{owner}/{repo}/pulls/{pull_number}/merge', { 112 | owner: actionEvent.pullRepoOwner, 113 | repo: actionEvent.pullRepo.name, 114 | pull_number: actionEvent.pullNumber 115 | }); 116 | } 117 | 118 | async closePR() { 119 | return await this.octokit.request('PATCH /repos/{owner}/{repo}/pulls/{pull_number}', { 120 | owner: actionEvent.pullRepoOwner, 121 | repo: actionEvent.pullRepo.name, 122 | pull_number: actionEvent.pullNumber, 123 | state: "closed" 124 | }) 125 | } 126 | 127 | async addReviewLabel() { 128 | return await this.addLabel(MERGE_LABEL) 129 | } 130 | 131 | async addClosedLabel() { 132 | return await this.addLabel(CLOSED_LABEL) 133 | } 134 | 135 | async addLabel(label) { 136 | return await this.octokit.request('POST /repos/{owner}/{repo}/issues/{issue_number}/labels', { 137 | owner: actionEvent.pullRepoOwner, 138 | repo: actionEvent.pullRepo.name, 139 | issue_number: actionEvent.pullNumber, 140 | labels: [label] 141 | }) 142 | } 143 | } 144 | 145 | module.exports = new Octo() 146 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # GitHub Graduation-2022 2 | 3 | ### [Leia este repositório em Português.](https://drive.google.com/file/d/1pbjjTfIzB3Mu3Ot98GTO72s8ZpsB_Lxb/view?usp=sharing) 4 | ![2022-github-graduation-social-card-1](/assets/GHG_Blog_1.jpg) 5 | 6 | This repository contains the yearbook for **GitHub Graduation 2022**. By issuing a pull request to this repository, you can request to be added to the GitHub Class of 2022. 7 | 8 | The first 7,500 pull request successfully merged into the repository by May 27 will receive custom trading card, stickers, and letter in the mail. 9 | 10 | 11 | ## Privacy Notice 👀 12 | Consider that all the information that you add to this repository will be publicly available. 13 | 14 | - If you don't feel comfortable with displaying your full name, you can include a short name or nickname instead. 15 | 16 | # Who can apply 📝 17 | We invite any student who has graduated, or plans to graduate, in 2022 to apply to the yearbook. This includes bootcamps, code camps, high school graduates, Master's graduates, Ph. D. Graduates, etc. 18 | 19 | The eligibility criteria are - 20 | 1. You have been verified as a student with the GitHub Student Developer Pack. Not yet a part of the Pack? [Apply here](https://education.github.com/discount_requests/student_application?utm_source=2022-06-11-GitHubGraduation). 21 | 2. You have not participated in a past GitHub Graduation event. 22 | 3. You identify as a graduate in the year 2022. 23 | 24 | # How to join the Class of 2022 25 | 26 | Here are three steps to join graduation and receive swag in the mail. 27 | 1. [Fill out the **swag shipment form**](https://airtable.com/shrVMo8ItH4wjsO9f) 28 | ⚠️ the form needs to be done before creating your Pull Request (PR) and does not guarantee participation in the event. Your PR must successfully merge into the repository and only the first 7,500 merged PRs will receive cards in the mail. 29 | 2. **Submit a pull request** with your profile information to join the Yearbook and be highlighted in the graduation event. 30 | 3. [**Save the date**](http://www.google.com/calendar/event?action=TEMPLATE&dates=20220611T160000Z%2FT010000Z&text=GitHub%20Graduation%202022&location=https%3A%2F%2Fwww.twitch.tv%2Fgithubeducation&details=GitHub%20Graduation%202022%2C%20live%20event) (Google calendar invite) and attend graduation 🥳 31 | 32 | ## 1. Fill out the swag shipment form. 33 | Information submitted to [the swag shipment form](https://airtable.com/shrVMo8ItH4wjsO9f) is only used to ship trading cards for graduation. Submitting the form does not guarantee you will receive anything in the mail. Only the first 7,500 graduates to merge their Pull Request to the GitHub Yearbook will receive a shipment. 34 | 35 | ## 2. Add yourself to Yearbook 🏫 36 | 37 | Replace `` with your GitHub username in this guide. 38 | 39 | ### First, create the folder _data/YOUR-USERNAME/ 40 | Fork this repository, create a new folder inside the `_data` folder, and name it with your username. It should look something like this `_data//`. Ex. 41 | 42 | ``` 43 | _data/MonaTheOctocat/ 44 | ``` 45 | ### Second, add your profile information 46 | Create a markdown file in your folder following the convention `.md`. Ex. 47 | 48 | ``` 49 | _data/MonaTheOctocat/MonaTheOctocat.md 50 | ``` 51 | Copy the next template into your file, delete the boilerplate data and fill the information with yours. 52 | ``` 53 | --- 54 | name: FULLNAME-OR-NICKNAME # No longer than 28 characters 55 | institution: INSTITUTION-NAME 🚩 # no longer than 58 characters 56 | quote: YOUR-SENIOR-QUOTE # no longer than 100 characters, avoid using quotes(") to guarantee the format remains the same. 57 | github_user: YOUR-GITHUB-USERNAME 58 | --- 59 | ``` 60 | 61 | _Do not use special characters in the template above._ 62 | 63 | ### Third, submit your Pull Request 64 | 65 | Go through the checklist on the pull request template to guarantee your submission is valid. The GitHub Education team will review your application, approve and merge your submission if everything is correct. Otherwise, you will get notified of the changes requested in the pull request comment section. 66 | 67 | Having trouble submitting your Pull Request? [Ask for help in the GitHub Community](https://github.com/orgs/github-community/discussions/categories/github-education)! 68 | 69 | # Graduation Stories 2022 👩‍🏫👨‍🏫 (optional) 70 | Looking for more ways to participate in GitHub Graduation and the possibility of being featured on our social account? 71 | 72 | We want to hear about the amazing things you achieved during your academic year and how GitHub helped you to accomplish your goals. Take a moment to record a video or write a message and share your story with us, your teachers, and your classmates. 73 | 74 | [How to participate](https://drive.google.com/file/d/1ozBt4ekiQuD4dSCq65S30-6V1Csw65A7/view) 75 | 76 | We are looking forward to hearing what you have to say, and we are grateful to have you as part of our community 💖 77 | Remember: you have until May 30th to submit your story! 78 | 79 | 80 | 81 | # A note on swag 🛍 82 | The first 7,500 successfully merged PRs will receive a custom holographic developer trading card with their GitHub status in the mail. 83 | 84 | What does this mean? We will use your public GitHub profile information to create a trading card. To ensure your trading card best reflects you, please make sure your GitHub profile picture and bio are up to date and what you would like shown on the card. 85 | 86 | # Graduation Day 🎓 87 | Don't forget to watch the livestream! 88 | 89 | - 📆 Saturday, June 11, 2022 90 | - ⏰ 9:00am PT | 16:00 GMT | 21:30 IST 91 | - 📍 Follow the [GitHub Education Twitch Channel](https://twitch.tv/githubeducation) for notifications. 92 | - 📎Add the event to your calender: 93 | - [Google Calendar](https://calendar.google.com/calendar/render?action=TEMPLATE&dates=20220611T200000Z%2F20220611T220000Z&details=&location=https%3A%2F%2Fwww.twitch.tv%2Fgithubeducation&text=%F0%9F%8E%89%F0%9F%8E%8A%20GitHub%20Graduation%202022%20%F0%9F%8E%89%F0%9F%8E%8A) 94 | - [Outlook Calendar](https://outlook.live.com/calendar/0/deeplink/compose?allday=false&body=&enddt=2022-06-11T22%3A00%3A00%2B00%3A00&location=https%3A%2F%2Fwww.twitch.tv%2Fgithubeducation&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2022-06-11T20%3A00%3A00%2B00%3A00&subject=%F0%9F%8E%89%F0%9F%8E%8A%20GitHub%20Graduation%202022%20%F0%9F%8E%89%F0%9F%8E%8A) 95 | - [Yahoo Calendar](https://calendar.yahoo.com/?desc=&dur=&et=20220611T220000Z&in_loc=https%3A%2F%2Fwww.twitch.tv%2Fgithubeducation&st=20220611T200000Z&title=%F0%9F%8E%89%F0%9F%8E%8A%20GitHub%20Graduation%202022%20%F0%9F%8E%89%F0%9F%8E%8A&v=60) 96 | 97 | 98 | Questions about GitHub Graduation? Ask in the [GitHub Community Discussions](https://github.com/orgs/github-community/discussions/categories/github-education). 99 | -------------------------------------------------------------------------------- /.github/workflows/src/index.js: -------------------------------------------------------------------------------- 1 | 2 | // stepper 3 | 4 | // reverse parse markdown from bot comment, determine which step the PR is on: 5 | 6 | // * Participated in 2020 7 | // * no - close PR 8 | // * SDP? 9 | // * no - request changes 10 | // * Shipping form complete? 11 | // * no - request changes 12 | // * Correct file path 13 | // * no - request changes 14 | // * Markdown correct? 15 | // * no - request changes 16 | // * Follows COC 17 | // * no - close PR 18 | // * congrats! 19 | // * merge PR 20 | 21 | // Load .env in dev 22 | if(!process.env.GITHUB_ACTIONS) { 23 | const result = require('dotenv').config() 24 | 25 | if (result.error) { 26 | throw result.error 27 | } 28 | } 29 | 30 | const airtable = require('./app/airtable.js'); 31 | const octokit = require('./app/octokit.js'); 32 | const actionEvent = require('./app/action-event.js'); 33 | const educationWeb = require('./app/education-web.js'); 34 | const fileValidator = require('./app/file-validator.js'); 35 | 36 | const BOT_ACCOUNT_LOGIN = "github-education" 37 | 38 | const GRADUATES_2020 = "Graduation 2020" 39 | const GRADUATES_2021 = "Graduation 2021" 40 | const GRADUATES_2022 = "Graduation 2022" 41 | 42 | 43 | try { 44 | ;(async ()=>{ 45 | 46 | const feedback = [] 47 | 48 | let pull, user2021, user2020, user2022, hasSdp 49 | 50 | if(actionEvent.name === "review_requested" && actionEvent.requestedReviewer.login !== BOT_ACCOUNT_LOGIN) { 51 | return true 52 | } 53 | 54 | try { 55 | pull = await octokit.fetchPr(actionEvent.pullNumber) 56 | }catch(err) { 57 | console.log(err) 58 | } 59 | 60 | try { 61 | user2022 = await airtable.fetchGraduate(actionEvent.pullAuthor, GRADUATES_2022) 62 | } catch(err) { 63 | console.log(err) 64 | } 65 | 66 | // checks 67 | 68 | // graduated already in 2020 or 2021? 69 | try { 70 | user2020 = await airtable.userParticipatedPrior(actionEvent.pullAuthor, GRADUATES_2020) 71 | user2021 = await airtable.userParticipatedPrior(actionEvent.pullAuthor, GRADUATES_2021) 72 | } catch(err) { 73 | console.log(err) 74 | } 75 | 76 | // approved for the student/teacher development pack 77 | try { 78 | hasSdp = await educationWeb.hasPack(actionEvent.pullAuthor) 79 | } catch(err) { 80 | console.log(err) 81 | } 82 | 83 | // Has the user completed the shipping form? (address must exist for the form to be submitted) 84 | const completedShippingForm = user2022 && user2022["Address Line 1"].length > 0 85 | const fileNames = pull.files.edges.map((file)=>{ 86 | return file.node.path 87 | }) 88 | 89 | let isMarkdownValid = {} 90 | let content 91 | const isFilePathValid = fileValidator.isValidPaths(fileNames) 92 | 93 | try { 94 | content = isFilePathValid.isValid && await octokit.getContent(`_data/${actionEvent.pullAuthor}/${actionEvent.pullAuthor}.md`) 95 | } catch(err) { 96 | feedback.push("I was unable to view the content of the markdown file, please try again in a few minutes") 97 | console.log(err) 98 | } 99 | 100 | if(content) { 101 | isMarkdownValid = await fileValidator.isMarkdownValid(content) 102 | } 103 | 104 | console.log(content) 105 | 106 | // I have read the instructions on the README file before submitting my application. 107 | // I made my submission by creating a folder on the _data folder and followed the naming convention mentioned in the instructions () and markdown file. 108 | // I have submitted a swag shipping form. 109 | // I have used the Markdown file template to add my information to the Year Book. 110 | // I understand that a reviewer will merge my pull request after examining it or ask for changes in case needed. 111 | // I understand I should not tag or add a reviewer to this Pull Request. 112 | // I have added the event to my Calendar. 113 | 114 | // #################### TODO CACHE AIR TABLE SOMEHOW ######################## 115 | // * cache the entire base in a json file with actions 116 | // * if the user checks come back negative, query the api directly to double check 117 | // * if it comes back different, then trigger a cache rebuild 118 | 119 | 120 | // ############################ bot posting flow ############################ 121 | // - show initial message with spinner when checks are running 122 | // - General message with a list of errors 123 | // - Already Participated - close PR 124 | // - Not applied for SDP 125 | // - Not completed the shipping form 126 | // - invalid files 127 | // - comment on files review request changes 128 | // - invalid markdown 129 | // - comment on files review request changes 130 | // - collapse requested changes comment 131 | // - welcome and congrats 132 | // - merge PR 133 | 134 | const userAgreesCoc = user2022 && user2022["Code of Conduct"] 135 | let closePR = false 136 | 137 | if(user2020 || user2021) { 138 | console.log("user already Participated in 2020 or 2021") 139 | closePR = true 140 | } else { 141 | if(!hasSdp) { 142 | console.log("User has not applied for SDP") 143 | feedback.push("* *I'm not seeing a valid student developer pack approval, please submit an [application](https://education.github.com/discount_requests/student_application?utm_source=2021-06-05-GitHubGraduation) to get started*") 144 | } 145 | 146 | if(!completedShippingForm) { 147 | console.log("user has not completed the shipping form") 148 | feedback.push("* *It looks like you still need to fill out the [shipping form](https://airtable.com/shrVMo8ItH4wjsO9f) to continue*") 149 | } 150 | 151 | if(!isFilePathValid.isValid) { 152 | console.log('Files have errors: \n' + isFilePathValid.errors.join('\n')) 153 | feedback.push(`* *Uh Oh! I've found some issues with where you have created your files!* \n\t${isFilePathValid.errors?.join('\n')}`) 154 | } 155 | 156 | if(isMarkdownValid.isValid === false) { 157 | console.log("markdown is invalid") 158 | feedback.push(`* *Please take another look at your markdown file, there are errors:* \n\t${isMarkdownValid.errors?.join('\n')}`) 159 | } 160 | 161 | if(!userAgreesCoc) { 162 | console.log("User has not agreed to COC") 163 | feedback.push("* *You need to agree to our COC on the shipping form pretty please!*") 164 | } 165 | } 166 | 167 | let feedBackMessage = "" 168 | if(closePR) { 169 | feedBackMessage = "I'm really sorry! It looks like you've already graduated in a previous year. This is for first time grads!" 170 | } else if(feedback.length) { 171 | feedBackMessage = ` 172 | ### I have a few items I need you to take care of before I can merge this PR:\n 173 | ${feedback.join('\n')} 174 | 175 | Feel free to re-request a review from me and I'll come back and take a look! 176 | ` 177 | } else { 178 | // All checks pass 179 | feedBackMessage = "Your Pull Request looks good! Thanks for your graduation submission. Next, one of our reviews will come by to check your PR meets the Code of Conduct. You don’t need to do anything but wait. Once they've completed their review, they'll leave another comment asking for changes or merging your Pull Request." 180 | try { 181 | // await octokit.mergePR() 182 | await octokit.addReviewLabel() 183 | } catch(err) { 184 | console.error(err) 185 | feedBackMessage += "\n\n Uh Oh! I tried to merge this PR and something went wrong!" 186 | feedback.push("merge failed") 187 | } 188 | } 189 | 190 | console.log(feedBackMessage) 191 | 192 | try { 193 | await octokit.createReview(` 194 | **Hi ${ actionEvent.pullAuthor },** 195 | **Welcome to graduation!** 196 | 197 | ${ feedBackMessage } 198 | `, feedback.length ? "REQUEST_CHANGES" : "APPROVE") 199 | } catch(err) { 200 | console.log(err) 201 | } 202 | 203 | if(closePR) { 204 | try { 205 | await octokit.addClosedLabel() 206 | await octokit.closePR() 207 | } catch(err) { 208 | console.log("failed to close PR") 209 | console.log(err) 210 | } 211 | } 212 | 213 | if(feedback.length) { 214 | console.log(feedback.join('\n')) 215 | process.exit(1) 216 | } 217 | })() 218 | } catch(err) { 219 | console.error(err) 220 | process.exit(1); 221 | } 222 | -------------------------------------------------------------------------------- /.github/workflows/src/app/data/example-event.json: -------------------------------------------------------------------------------- 1 | { 2 | "action": "review_requested", 3 | "number": 8, 4 | "organization": { 5 | "avatar_url": "https://avatars.githubusercontent.com/u/6667880?v=4", 6 | "description": "Bringing GitHub to the classroom", 7 | "events_url": "https://api.github.com/orgs/education/events", 8 | "hooks_url": "https://api.github.com/orgs/education/hooks", 9 | "id": 6667880, 10 | "issues_url": "https://api.github.com/orgs/education/issues", 11 | "login": "education", 12 | "members_url": "https://api.github.com/orgs/education/members{/member}", 13 | "node_id": "MDEyOk9yZ2FuaXphdGlvbjY2Njc4ODA=", 14 | "public_members_url": "https://api.github.com/orgs/education/public_members{/member}", 15 | "repos_url": "https://api.github.com/orgs/education/repos", 16 | "url": "https://api.github.com/orgs/education" 17 | }, 18 | "pull_request": { 19 | "_links": { 20 | "comments": { 21 | "href": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/8/comments" 22 | }, 23 | "commits": { 24 | "href": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls/8/commits" 25 | }, 26 | "html": { 27 | "href": "https://github.com/education/GitHubGraduation-2021/pull/8" 28 | }, 29 | "issue": { 30 | "href": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/8" 31 | }, 32 | "review_comment": { 33 | "href": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls/comments{/number}" 34 | }, 35 | "review_comments": { 36 | "href": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls/8/comments" 37 | }, 38 | "self": { 39 | "href": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls/8" 40 | }, 41 | "statuses": { 42 | "href": "https://api.github.com/repos/education/GitHubGraduation-2021/statuses/beefd36c45c6259948476fee4c7234a8b112a888" 43 | } 44 | }, 45 | "active_lock_reason": null, 46 | "additions": 6, 47 | "assignee": null, 48 | "assignees": [], 49 | "author_association": "COLLABORATOR", 50 | "auto_merge": null, 51 | "base": { 52 | "label": "education:main", 53 | "ref": "main", 54 | "repo": { 55 | "allow_merge_commit": true, 56 | "allow_rebase_merge": false, 57 | "allow_squash_merge": false, 58 | "archive_url": "https://api.github.com/repos/education/GitHubGraduation-2021/{archive_format}{/ref}", 59 | "archived": false, 60 | "assignees_url": "https://api.github.com/repos/education/GitHubGraduation-2021/assignees{/user}", 61 | "blobs_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/blobs{/sha}", 62 | "branches_url": "https://api.github.com/repos/education/GitHubGraduation-2021/branches{/branch}", 63 | "clone_url": "https://github.com/education/GitHubGraduation-2021.git", 64 | "collaborators_url": "https://api.github.com/repos/education/GitHubGraduation-2021/collaborators{/collaborator}", 65 | "comments_url": "https://api.github.com/repos/education/GitHubGraduation-2021/comments{/number}", 66 | "commits_url": "https://api.github.com/repos/education/GitHubGraduation-2021/commits{/sha}", 67 | "compare_url": "https://api.github.com/repos/education/GitHubGraduation-2021/compare/{base}...{head}", 68 | "contents_url": "https://api.github.com/repos/education/GitHubGraduation-2021/contents/{+path}", 69 | "contributors_url": "https://api.github.com/repos/education/GitHubGraduation-2021/contributors", 70 | "created_at": "2021-04-22T19:11:09Z", 71 | "default_branch": "main", 72 | "delete_branch_on_merge": false, 73 | "deployments_url": "https://api.github.com/repos/education/GitHubGraduation-2021/deployments", 74 | "description": "Join the GitHub Graduation Yearbook and \"walk the stage\" on June 5.", 75 | "disabled": false, 76 | "downloads_url": "https://api.github.com/repos/education/GitHubGraduation-2021/downloads", 77 | "events_url": "https://api.github.com/repos/education/GitHubGraduation-2021/events", 78 | "fork": false, 79 | "forks": 0, 80 | "forks_count": 0, 81 | "forks_url": "https://api.github.com/repos/education/GitHubGraduation-2021/forks", 82 | "full_name": "education/GitHubGraduation-2021", 83 | "git_commits_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/commits{/sha}", 84 | "git_refs_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/refs{/sha}", 85 | "git_tags_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/tags{/sha}", 86 | "git_url": "git://github.com/education/GitHubGraduation-2021.git", 87 | "has_downloads": true, 88 | "has_issues": true, 89 | "has_pages": false, 90 | "has_projects": false, 91 | "has_wiki": true, 92 | "homepage": "", 93 | "hooks_url": "https://api.github.com/repos/education/GitHubGraduation-2021/hooks", 94 | "html_url": "https://github.com/education/GitHubGraduation-2021", 95 | "id": 360655524, 96 | "issue_comment_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/comments{/number}", 97 | "issue_events_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/events{/number}", 98 | "issues_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues{/number}", 99 | "keys_url": "https://api.github.com/repos/education/GitHubGraduation-2021/keys{/key_id}", 100 | "labels_url": "https://api.github.com/repos/education/GitHubGraduation-2021/labels{/name}", 101 | "language": "JavaScript", 102 | "languages_url": "https://api.github.com/repos/education/GitHubGraduation-2021/languages", 103 | "license": null, 104 | "merges_url": "https://api.github.com/repos/education/GitHubGraduation-2021/merges", 105 | "milestones_url": "https://api.github.com/repos/education/GitHubGraduation-2021/milestones{/number}", 106 | "mirror_url": null, 107 | "name": "GitHubGraduation-2021", 108 | "node_id": "MDEwOlJlcG9zaXRvcnkzNjA2NTU1MjQ=", 109 | "notifications_url": "https://api.github.com/repos/education/GitHubGraduation-2021/notifications{?since,all,participating}", 110 | "open_issues": 5, 111 | "open_issues_count": 5, 112 | "owner": { 113 | "avatar_url": "https://avatars.githubusercontent.com/u/6667880?v=4", 114 | "events_url": "https://api.github.com/users/education/events{/privacy}", 115 | "followers_url": "https://api.github.com/users/education/followers", 116 | "following_url": "https://api.github.com/users/education/following{/other_user}", 117 | "gists_url": "https://api.github.com/users/education/gists{/gist_id}", 118 | "gravatar_id": "", 119 | "html_url": "https://github.com/education", 120 | "id": 6667880, 121 | "login": "education", 122 | "node_id": "MDEyOk9yZ2FuaXphdGlvbjY2Njc4ODA=", 123 | "organizations_url": "https://api.github.com/users/education/orgs", 124 | "received_events_url": "https://api.github.com/users/education/received_events", 125 | "repos_url": "https://api.github.com/users/education/repos", 126 | "site_admin": false, 127 | "starred_url": "https://api.github.com/users/education/starred{/owner}{/repo}", 128 | "subscriptions_url": "https://api.github.com/users/education/subscriptions", 129 | "type": "Organization", 130 | "url": "https://api.github.com/users/education" 131 | }, 132 | "private": true, 133 | "pulls_url": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls{/number}", 134 | "pushed_at": "2021-05-10T23:46:52Z", 135 | "releases_url": "https://api.github.com/repos/education/GitHubGraduation-2021/releases{/id}", 136 | "size": 1443, 137 | "ssh_url": "git@github.com:education/GitHubGraduation-2021.git", 138 | "stargazers_count": 0, 139 | "stargazers_url": "https://api.github.com/repos/education/GitHubGraduation-2021/stargazers", 140 | "statuses_url": "https://api.github.com/repos/education/GitHubGraduation-2021/statuses/{sha}", 141 | "subscribers_url": "https://api.github.com/repos/education/GitHubGraduation-2021/subscribers", 142 | "subscription_url": "https://api.github.com/repos/education/GitHubGraduation-2021/subscription", 143 | "svn_url": "https://github.com/education/GitHubGraduation-2021", 144 | "tags_url": "https://api.github.com/repos/education/GitHubGraduation-2021/tags", 145 | "teams_url": "https://api.github.com/repos/education/GitHubGraduation-2021/teams", 146 | "trees_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/trees{/sha}", 147 | "updated_at": "2021-05-10T23:46:54Z", 148 | "url": "https://api.github.com/repos/education/GitHubGraduation-2021", 149 | "watchers": 0, 150 | "watchers_count": 0 151 | }, 152 | "sha": "9c139b7dd2eb421a3274b8565f5583749234df56", 153 | "user": { 154 | "avatar_url": "https://avatars.githubusercontent.com/u/6667880?v=4", 155 | "events_url": "https://api.github.com/users/education/events{/privacy}", 156 | "followers_url": "https://api.github.com/users/education/followers", 157 | "following_url": "https://api.github.com/users/education/following{/other_user}", 158 | "gists_url": "https://api.github.com/users/education/gists{/gist_id}", 159 | "gravatar_id": "", 160 | "html_url": "https://github.com/education", 161 | "id": 6667880, 162 | "login": "education", 163 | "node_id": "MDEyOk9yZ2FuaXphdGlvbjY2Njc4ODA=", 164 | "organizations_url": "https://api.github.com/users/education/orgs", 165 | "received_events_url": "https://api.github.com/users/education/received_events", 166 | "repos_url": "https://api.github.com/users/education/repos", 167 | "site_admin": false, 168 | "starred_url": "https://api.github.com/users/education/starred{/owner}{/repo}", 169 | "subscriptions_url": "https://api.github.com/users/education/subscriptions", 170 | "type": "Organization", 171 | "url": "https://api.github.com/users/education" 172 | } 173 | }, 174 | "body": "# Application to the Class of 2021🎓\r\n\r\nThis pull request template helps you complete an application to the **Class of 2021**. Use the checklist below to verify you have followed the instructions correctly. \r\n\r\n## Checklist ✅\r\n\r\n- [X] I have read the instructions on the README file before submitting my application. \r\n- [X] I made my submission by creating a folder on the `_data` folder and followed the naming convention mentioned in the instructions (``) and markdown file.\r\n- [X] I have submitted a [swag shipping form](https://airtable.com/shrM5IigBuRFaj33H).\r\n- [X] I have used the Markdown file template to add my information to the Year Book.\r\n- [X] I understand that a reviewer will merge my pull request after examining it or ask for changes in case needed.\r\n- [X] I understand I should not tag or add a reviewer to this Pull Request.\r\n- [X] I have [added the event](http://www.google.com/calendar/event?action=TEMPLATE&dates=20210605T160000Z%2F20210605T173000Z&text=GitHub%20Graduation%20%F0%9F%8E%93&location=https%3A%2F%2Fwww.twitch.tv%2Fgithubeducation&details=) to my Calendar.\r\n\r\n", 175 | "changed_files": 1, 176 | "closed_at": null, 177 | "comments": 0, 178 | "comments_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/8/comments", 179 | "commits": 1, 180 | "commits_url": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls/8/commits", 181 | "created_at": "2021-05-10T21:04:55Z", 182 | "deletions": 0, 183 | "diff_url": "https://github.com/education/GitHubGraduation-2021/pull/8.diff", 184 | "draft": false, 185 | "head": { 186 | "label": "education:elise-graduation", 187 | "ref": "elise-graduation", 188 | "repo": { 189 | "allow_merge_commit": true, 190 | "allow_rebase_merge": false, 191 | "allow_squash_merge": false, 192 | "archive_url": "https://api.github.com/repos/education/GitHubGraduation-2021/{archive_format}{/ref}", 193 | "archived": false, 194 | "assignees_url": "https://api.github.com/repos/education/GitHubGraduation-2021/assignees{/user}", 195 | "blobs_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/blobs{/sha}", 196 | "branches_url": "https://api.github.com/repos/education/GitHubGraduation-2021/branches{/branch}", 197 | "clone_url": "https://github.com/education/GitHubGraduation-2021.git", 198 | "collaborators_url": "https://api.github.com/repos/education/GitHubGraduation-2021/collaborators{/collaborator}", 199 | "comments_url": "https://api.github.com/repos/education/GitHubGraduation-2021/comments{/number}", 200 | "commits_url": "https://api.github.com/repos/education/GitHubGraduation-2021/commits{/sha}", 201 | "compare_url": "https://api.github.com/repos/education/GitHubGraduation-2021/compare/{base}...{head}", 202 | "contents_url": "https://api.github.com/repos/education/GitHubGraduation-2021/contents/{+path}", 203 | "contributors_url": "https://api.github.com/repos/education/GitHubGraduation-2021/contributors", 204 | "created_at": "2021-04-22T19:11:09Z", 205 | "default_branch": "main", 206 | "delete_branch_on_merge": false, 207 | "deployments_url": "https://api.github.com/repos/education/GitHubGraduation-2021/deployments", 208 | "description": "Join the GitHub Graduation Yearbook and \"walk the stage\" on June 5.", 209 | "disabled": false, 210 | "downloads_url": "https://api.github.com/repos/education/GitHubGraduation-2021/downloads", 211 | "events_url": "https://api.github.com/repos/education/GitHubGraduation-2021/events", 212 | "fork": false, 213 | "forks": 0, 214 | "forks_count": 0, 215 | "forks_url": "https://api.github.com/repos/education/GitHubGraduation-2021/forks", 216 | "full_name": "education/GitHubGraduation-2021", 217 | "git_commits_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/commits{/sha}", 218 | "git_refs_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/refs{/sha}", 219 | "git_tags_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/tags{/sha}", 220 | "git_url": "git://github.com/education/GitHubGraduation-2021.git", 221 | "has_downloads": true, 222 | "has_issues": true, 223 | "has_pages": false, 224 | "has_projects": false, 225 | "has_wiki": true, 226 | "homepage": "", 227 | "hooks_url": "https://api.github.com/repos/education/GitHubGraduation-2021/hooks", 228 | "html_url": "https://github.com/education/GitHubGraduation-2021", 229 | "id": 360655524, 230 | "issue_comment_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/comments{/number}", 231 | "issue_events_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/events{/number}", 232 | "issues_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues{/number}", 233 | "keys_url": "https://api.github.com/repos/education/GitHubGraduation-2021/keys{/key_id}", 234 | "labels_url": "https://api.github.com/repos/education/GitHubGraduation-2021/labels{/name}", 235 | "language": "JavaScript", 236 | "languages_url": "https://api.github.com/repos/education/GitHubGraduation-2021/languages", 237 | "license": null, 238 | "merges_url": "https://api.github.com/repos/education/GitHubGraduation-2021/merges", 239 | "milestones_url": "https://api.github.com/repos/education/GitHubGraduation-2021/milestones{/number}", 240 | "mirror_url": null, 241 | "name": "GitHubGraduation-2021", 242 | "node_id": "MDEwOlJlcG9zaXRvcnkzNjA2NTU1MjQ=", 243 | "notifications_url": "https://api.github.com/repos/education/GitHubGraduation-2021/notifications{?since,all,participating}", 244 | "open_issues": 5, 245 | "open_issues_count": 5, 246 | "owner": { 247 | "avatar_url": "https://avatars.githubusercontent.com/u/6667880?v=4", 248 | "events_url": "https://api.github.com/users/education/events{/privacy}", 249 | "followers_url": "https://api.github.com/users/education/followers", 250 | "following_url": "https://api.github.com/users/education/following{/other_user}", 251 | "gists_url": "https://api.github.com/users/education/gists{/gist_id}", 252 | "gravatar_id": "", 253 | "html_url": "https://github.com/education", 254 | "id": 6667880, 255 | "login": "education", 256 | "node_id": "MDEyOk9yZ2FuaXphdGlvbjY2Njc4ODA=", 257 | "organizations_url": "https://api.github.com/users/education/orgs", 258 | "received_events_url": "https://api.github.com/users/education/received_events", 259 | "repos_url": "https://api.github.com/users/education/repos", 260 | "site_admin": false, 261 | "starred_url": "https://api.github.com/users/education/starred{/owner}{/repo}", 262 | "subscriptions_url": "https://api.github.com/users/education/subscriptions", 263 | "type": "Organization", 264 | "url": "https://api.github.com/users/education" 265 | }, 266 | "private": true, 267 | "pulls_url": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls{/number}", 268 | "pushed_at": "2021-05-10T23:46:52Z", 269 | "releases_url": "https://api.github.com/repos/education/GitHubGraduation-2021/releases{/id}", 270 | "size": 1443, 271 | "ssh_url": "git@github.com:education/GitHubGraduation-2021.git", 272 | "stargazers_count": 0, 273 | "stargazers_url": "https://api.github.com/repos/education/GitHubGraduation-2021/stargazers", 274 | "statuses_url": "https://api.github.com/repos/education/GitHubGraduation-2021/statuses/{sha}", 275 | "subscribers_url": "https://api.github.com/repos/education/GitHubGraduation-2021/subscribers", 276 | "subscription_url": "https://api.github.com/repos/education/GitHubGraduation-2021/subscription", 277 | "svn_url": "https://github.com/education/GitHubGraduation-2021", 278 | "tags_url": "https://api.github.com/repos/education/GitHubGraduation-2021/tags", 279 | "teams_url": "https://api.github.com/repos/education/GitHubGraduation-2021/teams", 280 | "trees_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/trees{/sha}", 281 | "updated_at": "2021-05-10T23:46:54Z", 282 | "url": "https://api.github.com/repos/education/GitHubGraduation-2021", 283 | "watchers": 0, 284 | "watchers_count": 0 285 | }, 286 | "sha": "beefd36c45c6259948476fee4c7234a8b112a888", 287 | "user": { 288 | "avatar_url": "https://avatars.githubusercontent.com/u/6667880?v=4", 289 | "events_url": "https://api.github.com/users/education/events{/privacy}", 290 | "followers_url": "https://api.github.com/users/education/followers", 291 | "following_url": "https://api.github.com/users/education/following{/other_user}", 292 | "gists_url": "https://api.github.com/users/education/gists{/gist_id}", 293 | "gravatar_id": "", 294 | "html_url": "https://github.com/education", 295 | "id": 6667880, 296 | "login": "education", 297 | "node_id": "MDEyOk9yZ2FuaXphdGlvbjY2Njc4ODA=", 298 | "organizations_url": "https://api.github.com/users/education/orgs", 299 | "received_events_url": "https://api.github.com/users/education/received_events", 300 | "repos_url": "https://api.github.com/users/education/repos", 301 | "site_admin": false, 302 | "starred_url": "https://api.github.com/users/education/starred{/owner}{/repo}", 303 | "subscriptions_url": "https://api.github.com/users/education/subscriptions", 304 | "type": "Organization", 305 | "url": "https://api.github.com/users/education" 306 | } 307 | }, 308 | "html_url": "https://github.com/education/GitHubGraduation-2021/pull/8", 309 | "id": 638447500, 310 | "issue_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/8", 311 | "labels": [], 312 | "locked": false, 313 | "maintainer_can_modify": false, 314 | "merge_commit_sha": "b50000b220a69f6334721f0791774aa44e893d38", 315 | "mergeable": true, 316 | "mergeable_state": "clean", 317 | "merged": false, 318 | "merged_at": null, 319 | "merged_by": null, 320 | "milestone": null, 321 | "node_id": "MDExOlB1bGxSZXF1ZXN0NjM4NDQ3NTAw", 322 | "number": 8, 323 | "patch_url": "https://github.com/education/GitHubGraduation-2021/pull/8.patch", 324 | "rebaseable": true, 325 | "requested_reviewers": [ 326 | { 327 | "avatar_url": "https://avatars.githubusercontent.com/u/83462995?v=4", 328 | "events_url": "https://api.github.com/users/GitHub-Education-bot/events{/privacy}", 329 | "followers_url": "https://api.github.com/users/GitHub-Education-bot/followers", 330 | "following_url": "https://api.github.com/users/GitHub-Education-bot/following{/other_user}", 331 | "gists_url": "https://api.github.com/users/GitHub-Education-bot/gists{/gist_id}", 332 | "gravatar_id": "", 333 | "html_url": "https://github.com/GitHub-Education-bot", 334 | "id": 83462995, 335 | "login": "GitHub-Education-bot", 336 | "node_id": "MDQ6VXNlcjgzNDYyOTk1", 337 | "organizations_url": "https://api.github.com/users/GitHub-Education-bot/orgs", 338 | "received_events_url": "https://api.github.com/users/GitHub-Education-bot/received_events", 339 | "repos_url": "https://api.github.com/users/GitHub-Education-bot/repos", 340 | "site_admin": false, 341 | "starred_url": "https://api.github.com/users/GitHub-Education-bot/starred{/owner}{/repo}", 342 | "subscriptions_url": "https://api.github.com/users/GitHub-Education-bot/subscriptions", 343 | "type": "User", 344 | "url": "https://api.github.com/users/GitHub-Education-bot" 345 | } 346 | ], 347 | "requested_teams": [], 348 | "review_comment_url": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls/comments{/number}", 349 | "review_comments": 0, 350 | "review_comments_url": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls/8/comments", 351 | "state": "open", 352 | "statuses_url": "https://api.github.com/repos/education/GitHubGraduation-2021/statuses/beefd36c45c6259948476fee4c7234a8b112a888", 353 | "title": "add Elise to GitHub Graduation", 354 | "updated_at": "2021-05-10T23:47:05Z", 355 | "url": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls/8", 356 | "user": { 357 | "avatar_url": "https://avatars.githubusercontent.com/u/6633808?v=4", 358 | "events_url": "https://api.github.com/users/elisemoe/events{/privacy}", 359 | "followers_url": "https://api.github.com/users/elisemoe/followers", 360 | "following_url": "https://api.github.com/users/elisemoe/following{/other_user}", 361 | "gists_url": "https://api.github.com/users/elisemoe/gists{/gist_id}", 362 | "gravatar_id": "", 363 | "html_url": "https://github.com/elisemoe", 364 | "id": 6633808, 365 | "login": "elisemoe", 366 | "node_id": "MDQ6VXNlcjY2MzM4MDg=", 367 | "organizations_url": "https://api.github.com/users/elisemoe/orgs", 368 | "received_events_url": "https://api.github.com/users/elisemoe/received_events", 369 | "repos_url": "https://api.github.com/users/elisemoe/repos", 370 | "site_admin": true, 371 | "starred_url": "https://api.github.com/users/elisemoe/starred{/owner}{/repo}", 372 | "subscriptions_url": "https://api.github.com/users/elisemoe/subscriptions", 373 | "type": "User", 374 | "url": "https://api.github.com/users/elisemoe" 375 | } 376 | }, 377 | "repository": { 378 | "archive_url": "https://api.github.com/repos/education/GitHubGraduation-2021/{archive_format}{/ref}", 379 | "archived": false, 380 | "assignees_url": "https://api.github.com/repos/education/GitHubGraduation-2021/assignees{/user}", 381 | "blobs_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/blobs{/sha}", 382 | "branches_url": "https://api.github.com/repos/education/GitHubGraduation-2021/branches{/branch}", 383 | "clone_url": "https://github.com/education/GitHubGraduation-2021.git", 384 | "collaborators_url": "https://api.github.com/repos/education/GitHubGraduation-2021/collaborators{/collaborator}", 385 | "comments_url": "https://api.github.com/repos/education/GitHubGraduation-2021/comments{/number}", 386 | "commits_url": "https://api.github.com/repos/education/GitHubGraduation-2021/commits{/sha}", 387 | "compare_url": "https://api.github.com/repos/education/GitHubGraduation-2021/compare/{base}...{head}", 388 | "contents_url": "https://api.github.com/repos/education/GitHubGraduation-2021/contents/{+path}", 389 | "contributors_url": "https://api.github.com/repos/education/GitHubGraduation-2021/contributors", 390 | "created_at": "2021-04-22T19:11:09Z", 391 | "default_branch": "main", 392 | "deployments_url": "https://api.github.com/repos/education/GitHubGraduation-2021/deployments", 393 | "description": "Join the GitHub Graduation Yearbook and \"walk the stage\" on June 5.", 394 | "disabled": false, 395 | "downloads_url": "https://api.github.com/repos/education/GitHubGraduation-2021/downloads", 396 | "events_url": "https://api.github.com/repos/education/GitHubGraduation-2021/events", 397 | "fork": false, 398 | "forks": 0, 399 | "forks_count": 0, 400 | "forks_url": "https://api.github.com/repos/education/GitHubGraduation-2021/forks", 401 | "full_name": "education/GitHubGraduation-2021", 402 | "git_commits_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/commits{/sha}", 403 | "git_refs_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/refs{/sha}", 404 | "git_tags_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/tags{/sha}", 405 | "git_url": "git://github.com/education/GitHubGraduation-2021.git", 406 | "has_downloads": true, 407 | "has_issues": true, 408 | "has_pages": false, 409 | "has_projects": false, 410 | "has_wiki": true, 411 | "homepage": "", 412 | "hooks_url": "https://api.github.com/repos/education/GitHubGraduation-2021/hooks", 413 | "html_url": "https://github.com/education/GitHubGraduation-2021", 414 | "id": 360655524, 415 | "issue_comment_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/comments{/number}", 416 | "issue_events_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues/events{/number}", 417 | "issues_url": "https://api.github.com/repos/education/GitHubGraduation-2021/issues{/number}", 418 | "keys_url": "https://api.github.com/repos/education/GitHubGraduation-2021/keys{/key_id}", 419 | "labels_url": "https://api.github.com/repos/education/GitHubGraduation-2021/labels{/name}", 420 | "language": "JavaScript", 421 | "languages_url": "https://api.github.com/repos/education/GitHubGraduation-2021/languages", 422 | "license": null, 423 | "merges_url": "https://api.github.com/repos/education/GitHubGraduation-2021/merges", 424 | "milestones_url": "https://api.github.com/repos/education/GitHubGraduation-2021/milestones{/number}", 425 | "mirror_url": null, 426 | "name": "GitHubGraduation-2021", 427 | "node_id": "MDEwOlJlcG9zaXRvcnkzNjA2NTU1MjQ=", 428 | "notifications_url": "https://api.github.com/repos/education/GitHubGraduation-2021/notifications{?since,all,participating}", 429 | "open_issues": 5, 430 | "open_issues_count": 5, 431 | "owner": { 432 | "avatar_url": "https://avatars.githubusercontent.com/u/6667880?v=4", 433 | "events_url": "https://api.github.com/users/education/events{/privacy}", 434 | "followers_url": "https://api.github.com/users/education/followers", 435 | "following_url": "https://api.github.com/users/education/following{/other_user}", 436 | "gists_url": "https://api.github.com/users/education/gists{/gist_id}", 437 | "gravatar_id": "", 438 | "html_url": "https://github.com/education", 439 | "id": 6667880, 440 | "login": "education", 441 | "node_id": "MDEyOk9yZ2FuaXphdGlvbjY2Njc4ODA=", 442 | "organizations_url": "https://api.github.com/users/education/orgs", 443 | "received_events_url": "https://api.github.com/users/education/received_events", 444 | "repos_url": "https://api.github.com/users/education/repos", 445 | "site_admin": false, 446 | "starred_url": "https://api.github.com/users/education/starred{/owner}{/repo}", 447 | "subscriptions_url": "https://api.github.com/users/education/subscriptions", 448 | "type": "Organization", 449 | "url": "https://api.github.com/users/education" 450 | }, 451 | "private": true, 452 | "pulls_url": "https://api.github.com/repos/education/GitHubGraduation-2021/pulls{/number}", 453 | "pushed_at": "2021-05-10T23:46:52Z", 454 | "releases_url": "https://api.github.com/repos/education/GitHubGraduation-2021/releases{/id}", 455 | "size": 1443, 456 | "ssh_url": "git@github.com:education/GitHubGraduation-2021.git", 457 | "stargazers_count": 0, 458 | "stargazers_url": "https://api.github.com/repos/education/GitHubGraduation-2021/stargazers", 459 | "statuses_url": "https://api.github.com/repos/education/GitHubGraduation-2021/statuses/{sha}", 460 | "subscribers_url": "https://api.github.com/repos/education/GitHubGraduation-2021/subscribers", 461 | "subscription_url": "https://api.github.com/repos/education/GitHubGraduation-2021/subscription", 462 | "svn_url": "https://github.com/education/GitHubGraduation-2021", 463 | "tags_url": "https://api.github.com/repos/education/GitHubGraduation-2021/tags", 464 | "teams_url": "https://api.github.com/repos/education/GitHubGraduation-2021/teams", 465 | "trees_url": "https://api.github.com/repos/education/GitHubGraduation-2021/git/trees{/sha}", 466 | "updated_at": "2021-05-10T23:46:54Z", 467 | "url": "https://api.github.com/repos/education/GitHubGraduation-2021", 468 | "watchers": 0, 469 | "watchers_count": 0 470 | }, 471 | "requested_reviewer": { 472 | "avatar_url": "https://avatars.githubusercontent.com/u/83462995?v=4", 473 | "events_url": "https://api.github.com/users/GitHub-Education-bot/events{/privacy}", 474 | "followers_url": "https://api.github.com/users/GitHub-Education-bot/followers", 475 | "following_url": "https://api.github.com/users/GitHub-Education-bot/following{/other_user}", 476 | "gists_url": "https://api.github.com/users/GitHub-Education-bot/gists{/gist_id}", 477 | "gravatar_id": "", 478 | "html_url": "https://github.com/GitHub-Education-bot", 479 | "id": 83462995, 480 | "login": "GitHub-Education-bot", 481 | "node_id": "MDQ6VXNlcjgzNDYyOTk1", 482 | "organizations_url": "https://api.github.com/users/GitHub-Education-bot/orgs", 483 | "received_events_url": "https://api.github.com/users/GitHub-Education-bot/received_events", 484 | "repos_url": "https://api.github.com/users/GitHub-Education-bot/repos", 485 | "site_admin": false, 486 | "starred_url": "https://api.github.com/users/GitHub-Education-bot/starred{/owner}{/repo}", 487 | "subscriptions_url": "https://api.github.com/users/GitHub-Education-bot/subscriptions", 488 | "type": "User", 489 | "url": "https://api.github.com/users/GitHub-Education-bot" 490 | }, 491 | "sender": { 492 | "avatar_url": "https://avatars.githubusercontent.com/u/599521?v=4", 493 | "events_url": "https://api.github.com/users/renz45/events{/privacy}", 494 | "followers_url": "https://api.github.com/users/renz45/followers", 495 | "following_url": "https://api.github.com/users/renz45/following{/other_user}", 496 | "gists_url": "https://api.github.com/users/renz45/gists{/gist_id}", 497 | "gravatar_id": "", 498 | "html_url": "https://github.com/renz45", 499 | "id": 599521, 500 | "login": "renz45", 501 | "node_id": "MDQ6VXNlcjU5OTUyMQ==", 502 | "organizations_url": "https://api.github.com/users/renz45/orgs", 503 | "received_events_url": "https://api.github.com/users/renz45/received_events", 504 | "repos_url": "https://api.github.com/users/renz45/repos", 505 | "site_admin": true, 506 | "starred_url": "https://api.github.com/users/renz45/starred{/owner}{/repo}", 507 | "subscriptions_url": "https://api.github.com/users/renz45/subscriptions", 508 | "type": "User", 509 | "url": "https://api.github.com/users/renz45" 510 | } 511 | } 512 | -------------------------------------------------------------------------------- /.github/workflows/src/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GitHub Graduation", 3 | "version": "1.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "GitHub Graduation", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "airtable": "^0.11.0", 13 | "axios": "^0.21.1", 14 | "dotenv": "^8.2.0", 15 | "markdown-it": "^12.0.6", 16 | "markdown-it-metadata-block": "^1.0.2", 17 | "octokit": "^1.0.3", 18 | "yaml": "^1.10.2" 19 | } 20 | }, 21 | "node_modules/@octokit/app": { 22 | "version": "12.0.2", 23 | "resolved": "https://registry.npmjs.org/@octokit/app/-/app-12.0.2.tgz", 24 | "integrity": "sha512-yQNnVR7ZvElQHmuEfcI/fg3Z3waRCNV9TC1FLaO0e6AT4SEJPUrymRKWhG9ts7kUCWseVSHlxR+r/zsbIPd+9w==", 25 | "dependencies": { 26 | "@octokit/auth-app": "^3.3.0", 27 | "@octokit/auth-unauthenticated": "^2.0.4", 28 | "@octokit/core": "^3.4.0", 29 | "@octokit/oauth-app": "^3.3.2", 30 | "@octokit/plugin-paginate-rest": "^2.13.3", 31 | "@octokit/types": "^6.13.0", 32 | "@octokit/webhooks": "^9.0.1" 33 | } 34 | }, 35 | "node_modules/@octokit/auth-app": { 36 | "version": "3.4.0", 37 | "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-3.4.0.tgz", 38 | "integrity": "sha512-zBVgTnLJb0uoNMGCpcDkkAbPeavHX7oAjJkaDv2nqMmsXSsCw4AbUhjl99EtJQG/JqFY/kLFHM9330Wn0k70+g==", 39 | "dependencies": { 40 | "@octokit/auth-oauth-app": "^4.1.0", 41 | "@octokit/auth-oauth-user": "^1.2.3", 42 | "@octokit/request": "^5.4.11", 43 | "@octokit/request-error": "^2.0.0", 44 | "@octokit/types": "^6.0.3", 45 | "@types/lru-cache": "^5.1.0", 46 | "deprecation": "^2.3.1", 47 | "lru-cache": "^6.0.0", 48 | "universal-github-app-jwt": "^1.0.1", 49 | "universal-user-agent": "^6.0.0" 50 | } 51 | }, 52 | "node_modules/@octokit/auth-oauth-app": { 53 | "version": "4.1.2", 54 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-4.1.2.tgz", 55 | "integrity": "sha512-bdNGNRmuDJjKoHla3mUGtkk/xcxKngnQfBEnyk+7VwMqrABKvQB1wQRSrwSWkPPUX7Lcj2ttkPAPG7+iBkMRnw==", 56 | "dependencies": { 57 | "@octokit/auth-oauth-device": "^3.1.1", 58 | "@octokit/auth-oauth-user": "^1.2.1", 59 | "@octokit/request": "^5.3.0", 60 | "@octokit/types": "^6.0.3", 61 | "@types/btoa-lite": "^1.0.0", 62 | "btoa-lite": "^1.0.0", 63 | "universal-user-agent": "^6.0.0" 64 | } 65 | }, 66 | "node_modules/@octokit/auth-oauth-device": { 67 | "version": "3.1.1", 68 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-3.1.1.tgz", 69 | "integrity": "sha512-ykDZROilszXZJ6pYdl6SZ15UZniCs0zDcKgwOZpMz3U0QDHPUhFGXjHToBCAIHwbncMu+jLt4/Nw4lq3FwAw/w==", 70 | "dependencies": { 71 | "@octokit/oauth-methods": "^1.1.0", 72 | "@octokit/request": "^5.4.14", 73 | "@octokit/types": "^6.10.0", 74 | "universal-user-agent": "^6.0.0" 75 | } 76 | }, 77 | "node_modules/@octokit/auth-oauth-user": { 78 | "version": "1.2.4", 79 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-1.2.4.tgz", 80 | "integrity": "sha512-efOajupCZBP1veqx5w59Qey0lIud1rDUgxTRjjkQDU3eOBmkAasY1pXemDsQwW0I85jb1P/gn2dMejedVxf9kw==", 81 | "dependencies": { 82 | "@octokit/auth-oauth-device": "^3.1.1", 83 | "@octokit/oauth-methods": "^1.1.0", 84 | "@octokit/request": "^5.4.14", 85 | "@octokit/types": "^6.12.2", 86 | "btoa-lite": "^1.0.0", 87 | "universal-user-agent": "^6.0.0" 88 | } 89 | }, 90 | "node_modules/@octokit/auth-token": { 91 | "version": "2.4.5", 92 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", 93 | "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", 94 | "dependencies": { 95 | "@octokit/types": "^6.0.3" 96 | } 97 | }, 98 | "node_modules/@octokit/auth-unauthenticated": { 99 | "version": "2.0.4", 100 | "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-2.0.4.tgz", 101 | "integrity": "sha512-jZMwIz2PfQuLcOQRRELY6zb/jIyWQKlPxVV1oEG4sxJNmnANz3Skvnz4kVNvfs1r2jhgKAx9Pb6f+3vXeyh7yg==", 102 | "dependencies": { 103 | "@octokit/request-error": "^2.0.2", 104 | "@octokit/types": "^6.0.3" 105 | } 106 | }, 107 | "node_modules/@octokit/core": { 108 | "version": "3.4.0", 109 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.4.0.tgz", 110 | "integrity": "sha512-6/vlKPP8NF17cgYXqucdshWqmMZGXkuvtcrWCgU5NOI0Pl2GjlmZyWgBMrU8zJ3v2MJlM6++CiB45VKYmhiWWg==", 111 | "dependencies": { 112 | "@octokit/auth-token": "^2.4.4", 113 | "@octokit/graphql": "^4.5.8", 114 | "@octokit/request": "^5.4.12", 115 | "@octokit/request-error": "^2.0.5", 116 | "@octokit/types": "^6.0.3", 117 | "before-after-hook": "^2.2.0", 118 | "universal-user-agent": "^6.0.0" 119 | } 120 | }, 121 | "node_modules/@octokit/endpoint": { 122 | "version": "6.0.11", 123 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz", 124 | "integrity": "sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==", 125 | "dependencies": { 126 | "@octokit/types": "^6.0.3", 127 | "is-plain-object": "^5.0.0", 128 | "universal-user-agent": "^6.0.0" 129 | } 130 | }, 131 | "node_modules/@octokit/graphql": { 132 | "version": "4.6.1", 133 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.1.tgz", 134 | "integrity": "sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA==", 135 | "dependencies": { 136 | "@octokit/request": "^5.3.0", 137 | "@octokit/types": "^6.0.3", 138 | "universal-user-agent": "^6.0.0" 139 | } 140 | }, 141 | "node_modules/@octokit/oauth-app": { 142 | "version": "3.3.2", 143 | "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-3.3.2.tgz", 144 | "integrity": "sha512-vZPleCS65Sq2fXQYWt1JmTqrNUdsmdvmgr4rmZhxKaX/Fc6xExtNCBmksAbSMY9q3uFBv76BuvNWGKFNpXy5Tw==", 145 | "dependencies": { 146 | "@octokit/auth-oauth-app": "^4.0.0", 147 | "@octokit/auth-oauth-user": "^1.2.3", 148 | "@octokit/auth-unauthenticated": "^2.0.0", 149 | "@octokit/core": "^3.3.2", 150 | "@octokit/oauth-authorization-url": "^4.2.1", 151 | "@octokit/oauth-methods": "^1.2.2", 152 | "fromentries": "^1.3.1", 153 | "universal-user-agent": "^6.0.0" 154 | } 155 | }, 156 | "node_modules/@octokit/oauth-authorization-url": { 157 | "version": "4.3.1", 158 | "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-4.3.1.tgz", 159 | "integrity": "sha512-sI/SOEAvzRhqdzj+kJl+2ifblRve2XU6ZB36Lq25Su8R31zE3GoKToSLh64nWFnKePNi2RrdcMm94UEIQZslOw==" 160 | }, 161 | "node_modules/@octokit/oauth-methods": { 162 | "version": "1.2.2", 163 | "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.2.tgz", 164 | "integrity": "sha512-CFMUMn9DdPLMcpffhKgkwIIClfv0ZToJM4qcg4O0egCoHMYkVlxl22bBoo9qCnuF1U/xn871KEXuozKIX+bA2w==", 165 | "dependencies": { 166 | "@octokit/oauth-authorization-url": "^4.3.1", 167 | "@octokit/request": "^5.4.14", 168 | "@octokit/request-error": "^2.0.5", 169 | "@octokit/types": "^6.12.2", 170 | "btoa-lite": "^1.0.0" 171 | } 172 | }, 173 | "node_modules/@octokit/openapi-types": { 174 | "version": "7.0.0", 175 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.0.0.tgz", 176 | "integrity": "sha512-gV/8DJhAL/04zjTI95a7FhQwS6jlEE0W/7xeYAzuArD0KVAVWDLP2f3vi98hs3HLTczxXdRK/mF0tRoQPpolEw==" 177 | }, 178 | "node_modules/@octokit/plugin-paginate-rest": { 179 | "version": "2.13.3", 180 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.3.tgz", 181 | "integrity": "sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg==", 182 | "dependencies": { 183 | "@octokit/types": "^6.11.0" 184 | }, 185 | "peerDependencies": { 186 | "@octokit/core": ">=2" 187 | } 188 | }, 189 | "node_modules/@octokit/plugin-rest-endpoint-methods": { 190 | "version": "5.1.1", 191 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.1.1.tgz", 192 | "integrity": "sha512-u4zy0rVA8darm/AYsIeWkRalhQR99qPL1D/EXHejV2yaECMdHfxXiTXtba8NMBSajOJe8+C9g+EqMKSvysx0dg==", 193 | "dependencies": { 194 | "@octokit/types": "^6.14.1", 195 | "deprecation": "^2.3.1" 196 | }, 197 | "peerDependencies": { 198 | "@octokit/core": ">=3" 199 | } 200 | }, 201 | "node_modules/@octokit/plugin-retry": { 202 | "version": "3.0.7", 203 | "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.7.tgz", 204 | "integrity": "sha512-n08BPfVeKj5wnyH7IaOWnuKbx+e9rSJkhDHMJWXLPv61625uWjsN8G7sAW3zWm9n9vnS4friE7LL/XLcyGeG8Q==", 205 | "dependencies": { 206 | "@octokit/types": "^6.0.3", 207 | "bottleneck": "^2.15.3" 208 | } 209 | }, 210 | "node_modules/@octokit/plugin-throttling": { 211 | "version": "3.4.1", 212 | "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.4.1.tgz", 213 | "integrity": "sha512-qCQ+Z4AnL9OrXvV59EH3GzPxsB+WyqufoCjiCJXJxTbnt3W+leXbXw5vHrMp4NG9ltw00McFWIxIxNQAzLNoTA==", 214 | "dependencies": { 215 | "@octokit/types": "^6.0.1", 216 | "bottleneck": "^2.15.3" 217 | }, 218 | "peerDependencies": { 219 | "@octokit/core": "^3.0.0" 220 | } 221 | }, 222 | "node_modules/@octokit/request": { 223 | "version": "5.4.15", 224 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.15.tgz", 225 | "integrity": "sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag==", 226 | "dependencies": { 227 | "@octokit/endpoint": "^6.0.1", 228 | "@octokit/request-error": "^2.0.0", 229 | "@octokit/types": "^6.7.1", 230 | "is-plain-object": "^5.0.0", 231 | "node-fetch": "^2.6.1", 232 | "universal-user-agent": "^6.0.0" 233 | } 234 | }, 235 | "node_modules/@octokit/request-error": { 236 | "version": "2.0.5", 237 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.5.tgz", 238 | "integrity": "sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==", 239 | "dependencies": { 240 | "@octokit/types": "^6.0.3", 241 | "deprecation": "^2.0.0", 242 | "once": "^1.4.0" 243 | } 244 | }, 245 | "node_modules/@octokit/types": { 246 | "version": "6.14.2", 247 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.14.2.tgz", 248 | "integrity": "sha512-wiQtW9ZSy4OvgQ09iQOdyXYNN60GqjCL/UdMsepDr1Gr0QzpW6irIKbH3REuAHXAhxkEk9/F2a3Gcs1P6kW5jA==", 249 | "dependencies": { 250 | "@octokit/openapi-types": "^7.0.0" 251 | } 252 | }, 253 | "node_modules/@octokit/webhooks": { 254 | "version": "9.3.0", 255 | "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.3.0.tgz", 256 | "integrity": "sha512-DCN5NLAw6UzAE5/9H4d0wu4yHXxxPRmg1AyvKA65YGLYsY43cUQhogTse6yUr+7gEdmNkmS166JyDzttxy+gew==", 257 | "dependencies": { 258 | "@octokit/request-error": "^2.0.2", 259 | "@octokit/webhooks-methods": "^1.0.0", 260 | "@octokit/webhooks-types": "3.71.0", 261 | "aggregate-error": "^3.1.0" 262 | } 263 | }, 264 | "node_modules/@octokit/webhooks-methods": { 265 | "version": "1.0.0", 266 | "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-1.0.0.tgz", 267 | "integrity": "sha512-pVceMQcj9SZ5p2RkemL0TuuPdGULNQj9F3Pq1cNM1xH+Kst1VNt0dj3PEGZRZV473njrDnYdi/OG4wWY9TLbbA==" 268 | }, 269 | "node_modules/@octokit/webhooks-types": { 270 | "version": "3.71.0", 271 | "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-3.71.0.tgz", 272 | "integrity": "sha512-Xgu3p5V18rk6TSSFtEukZaR6dOXaLpBnQcRkEge/UZ6AtrNXvG/GWFL+lGyGb2VCi1/qnpXM5XgnJFq8oIuzvg==" 273 | }, 274 | "node_modules/@types/btoa-lite": { 275 | "version": "1.0.0", 276 | "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", 277 | "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" 278 | }, 279 | "node_modules/@types/jsonwebtoken": { 280 | "version": "8.5.1", 281 | "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 282 | "integrity": "sha512-rNAPdomlIUX0i0cg2+I+Q1wOUr531zHBQ+cV/28PJ39bSPKjahatZZ2LMuhiguETkCgLVzfruw/ZvNMNkKoSzw==", 283 | "dependencies": { 284 | "@types/node": "*" 285 | } 286 | }, 287 | "node_modules/@types/lru-cache": { 288 | "version": "5.1.0", 289 | "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz", 290 | "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==" 291 | }, 292 | "node_modules/@types/node": { 293 | "version": "14.14.43", 294 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.43.tgz", 295 | "integrity": "sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==" 296 | }, 297 | "node_modules/abort-controller": { 298 | "version": "3.0.0", 299 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 300 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 301 | "dependencies": { 302 | "event-target-shim": "^5.0.0" 303 | }, 304 | "engines": { 305 | "node": ">=6.5" 306 | } 307 | }, 308 | "node_modules/abortcontroller-polyfill": { 309 | "version": "1.7.1", 310 | "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.1.tgz", 311 | "integrity": "sha512-yml9NiDEH4M4p0G4AcPkg8AAa4mF3nfYF28VQxaokpO67j9H7gWgmsVWJ/f1Rn+PzsnDYvzJzWIQzCqDKRvWlA==" 312 | }, 313 | "node_modules/aggregate-error": { 314 | "version": "3.1.0", 315 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 316 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 317 | "dependencies": { 318 | "clean-stack": "^2.0.0", 319 | "indent-string": "^4.0.0" 320 | }, 321 | "engines": { 322 | "node": ">=8" 323 | } 324 | }, 325 | "node_modules/airtable": { 326 | "version": "0.11.0", 327 | "resolved": "https://registry.npmjs.org/airtable/-/airtable-0.11.0.tgz", 328 | "integrity": "sha512-PwFAFooF7MA9QzxbuhTOckkeLJ/O4Ro4Af0a696AVa4UAV+HAuuLwMiy6bsNRJwT6E1KR8FcsWGVB7CSCu7b0A==", 329 | "dependencies": { 330 | "@types/node": ">=8.0.0 <15", 331 | "abort-controller": "^3.0.0", 332 | "abortcontroller-polyfill": "^1.4.0", 333 | "lodash": "^4.17.19", 334 | "node-fetch": "^2.6.1" 335 | }, 336 | "engines": { 337 | "node": ">=8.0.0" 338 | } 339 | }, 340 | "node_modules/argparse": { 341 | "version": "2.0.1", 342 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 343 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 344 | }, 345 | "node_modules/axios": { 346 | "version": "0.21.1", 347 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 348 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 349 | "dependencies": { 350 | "follow-redirects": "^1.10.0" 351 | } 352 | }, 353 | "node_modules/before-after-hook": { 354 | "version": "2.2.1", 355 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.1.tgz", 356 | "integrity": "sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw==" 357 | }, 358 | "node_modules/bottleneck": { 359 | "version": "2.19.5", 360 | "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", 361 | "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" 362 | }, 363 | "node_modules/btoa-lite": { 364 | "version": "1.0.0", 365 | "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", 366 | "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=" 367 | }, 368 | "node_modules/buffer-equal-constant-time": { 369 | "version": "1.0.1", 370 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 371 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 372 | }, 373 | "node_modules/clean-stack": { 374 | "version": "2.2.0", 375 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 376 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 377 | "engines": { 378 | "node": ">=6" 379 | } 380 | }, 381 | "node_modules/deprecation": { 382 | "version": "2.3.1", 383 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 384 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 385 | }, 386 | "node_modules/dotenv": { 387 | "version": "8.2.0", 388 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 389 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==", 390 | "engines": { 391 | "node": ">=8" 392 | } 393 | }, 394 | "node_modules/ecdsa-sig-formatter": { 395 | "version": "1.0.11", 396 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 397 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 398 | "dependencies": { 399 | "safe-buffer": "^5.0.1" 400 | } 401 | }, 402 | "node_modules/entities": { 403 | "version": "2.1.0", 404 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", 405 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", 406 | "funding": { 407 | "url": "https://github.com/fb55/entities?sponsor=1" 408 | } 409 | }, 410 | "node_modules/event-target-shim": { 411 | "version": "5.0.1", 412 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 413 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 414 | "engines": { 415 | "node": ">=6" 416 | } 417 | }, 418 | "node_modules/follow-redirects": { 419 | "version": "1.14.0", 420 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.0.tgz", 421 | "integrity": "sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg==", 422 | "funding": [ 423 | { 424 | "type": "individual", 425 | "url": "https://github.com/sponsors/RubenVerborgh" 426 | } 427 | ], 428 | "engines": { 429 | "node": ">=4.0" 430 | }, 431 | "peerDependenciesMeta": { 432 | "debug": { 433 | "optional": true 434 | } 435 | } 436 | }, 437 | "node_modules/fromentries": { 438 | "version": "1.3.2", 439 | "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", 440 | "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", 441 | "funding": [ 442 | { 443 | "type": "github", 444 | "url": "https://github.com/sponsors/feross" 445 | }, 446 | { 447 | "type": "patreon", 448 | "url": "https://www.patreon.com/feross" 449 | }, 450 | { 451 | "type": "consulting", 452 | "url": "https://feross.org/support" 453 | } 454 | ] 455 | }, 456 | "node_modules/indent-string": { 457 | "version": "4.0.0", 458 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 459 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 460 | "engines": { 461 | "node": ">=8" 462 | } 463 | }, 464 | "node_modules/is-plain-object": { 465 | "version": "5.0.0", 466 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 467 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 468 | "engines": { 469 | "node": ">=0.10.0" 470 | } 471 | }, 472 | "node_modules/jsonwebtoken": { 473 | "version": "8.5.1", 474 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 475 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 476 | "dependencies": { 477 | "jws": "^3.2.2", 478 | "lodash.includes": "^4.3.0", 479 | "lodash.isboolean": "^3.0.3", 480 | "lodash.isinteger": "^4.0.4", 481 | "lodash.isnumber": "^3.0.3", 482 | "lodash.isplainobject": "^4.0.6", 483 | "lodash.isstring": "^4.0.1", 484 | "lodash.once": "^4.0.0", 485 | "ms": "^2.1.1", 486 | "semver": "^5.6.0" 487 | }, 488 | "engines": { 489 | "node": ">=4", 490 | "npm": ">=1.4.28" 491 | } 492 | }, 493 | "node_modules/jwa": { 494 | "version": "1.4.1", 495 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 496 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 497 | "dependencies": { 498 | "buffer-equal-constant-time": "1.0.1", 499 | "ecdsa-sig-formatter": "1.0.11", 500 | "safe-buffer": "^5.0.1" 501 | } 502 | }, 503 | "node_modules/jws": { 504 | "version": "3.2.2", 505 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 506 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 507 | "dependencies": { 508 | "jwa": "^1.4.1", 509 | "safe-buffer": "^5.0.1" 510 | } 511 | }, 512 | "node_modules/linkify-it": { 513 | "version": "3.0.2", 514 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", 515 | "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", 516 | "dependencies": { 517 | "uc.micro": "^1.0.1" 518 | } 519 | }, 520 | "node_modules/lodash": { 521 | "version": "4.17.21", 522 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 523 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 524 | }, 525 | "node_modules/lodash.includes": { 526 | "version": "4.3.0", 527 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 528 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 529 | }, 530 | "node_modules/lodash.isboolean": { 531 | "version": "3.0.3", 532 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 533 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 534 | }, 535 | "node_modules/lodash.isinteger": { 536 | "version": "4.0.4", 537 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 538 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 539 | }, 540 | "node_modules/lodash.isnumber": { 541 | "version": "3.0.3", 542 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 543 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 544 | }, 545 | "node_modules/lodash.isplainobject": { 546 | "version": "4.0.6", 547 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 548 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 549 | }, 550 | "node_modules/lodash.isstring": { 551 | "version": "4.0.1", 552 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 553 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 554 | }, 555 | "node_modules/lodash.once": { 556 | "version": "4.1.1", 557 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 558 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 559 | }, 560 | "node_modules/lru-cache": { 561 | "version": "6.0.0", 562 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 563 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 564 | "dependencies": { 565 | "yallist": "^4.0.0" 566 | }, 567 | "engines": { 568 | "node": ">=10" 569 | } 570 | }, 571 | "node_modules/markdown-it": { 572 | "version": "12.0.6", 573 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.6.tgz", 574 | "integrity": "sha512-qv3sVLl4lMT96LLtR7xeRJX11OUFjsaD5oVat2/SNBIb21bJXwal2+SklcRbTwGwqWpWH/HRtYavOoJE+seL8w==", 575 | "dependencies": { 576 | "argparse": "^2.0.1", 577 | "entities": "~2.1.0", 578 | "linkify-it": "^3.0.1", 579 | "mdurl": "^1.0.1", 580 | "uc.micro": "^1.0.5" 581 | }, 582 | "bin": { 583 | "markdown-it": "bin/markdown-it.js" 584 | } 585 | }, 586 | "node_modules/markdown-it-metadata-block": { 587 | "version": "1.0.2", 588 | "resolved": "https://registry.npmjs.org/markdown-it-metadata-block/-/markdown-it-metadata-block-1.0.2.tgz", 589 | "integrity": "sha512-6//Fdar0x0d6lpTYL1RSt2lxRHscRqZqVuQOfTjL/oWhH7QhDo3ahkDg9ai4MF6sRKKAa7ztFneadWeDcwsocg==" 590 | }, 591 | "node_modules/mdurl": { 592 | "version": "1.0.1", 593 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", 594 | "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" 595 | }, 596 | "node_modules/ms": { 597 | "version": "2.1.3", 598 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 599 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 600 | }, 601 | "node_modules/node-fetch": { 602 | "version": "2.6.1", 603 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 604 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", 605 | "engines": { 606 | "node": "4.x || >=6.0.0" 607 | } 608 | }, 609 | "node_modules/octokit": { 610 | "version": "1.0.3", 611 | "resolved": "https://registry.npmjs.org/octokit/-/octokit-1.0.3.tgz", 612 | "integrity": "sha512-xficjKIoPf/9JdI8bCru+pdddB+TRWrSvsgdbwc/XQmzGDho1kYPOeqghAq0/qcK1zwSo2YwzyQLwihiUOA5qA==", 613 | "dependencies": { 614 | "@octokit/app": "^12.0.2", 615 | "@octokit/core": "^3.4.0", 616 | "@octokit/oauth-app": "^3.3.2", 617 | "@octokit/plugin-paginate-rest": "^2.13.3", 618 | "@octokit/plugin-rest-endpoint-methods": "^5.0.0", 619 | "@octokit/plugin-retry": "^3.0.7", 620 | "@octokit/plugin-throttling": "^3.4.1", 621 | "@octokit/types": "^6.13.0" 622 | } 623 | }, 624 | "node_modules/once": { 625 | "version": "1.4.0", 626 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 627 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 628 | "dependencies": { 629 | "wrappy": "1" 630 | } 631 | }, 632 | "node_modules/safe-buffer": { 633 | "version": "5.2.1", 634 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 635 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 636 | "funding": [ 637 | { 638 | "type": "github", 639 | "url": "https://github.com/sponsors/feross" 640 | }, 641 | { 642 | "type": "patreon", 643 | "url": "https://www.patreon.com/feross" 644 | }, 645 | { 646 | "type": "consulting", 647 | "url": "https://feross.org/support" 648 | } 649 | ] 650 | }, 651 | "node_modules/semver": { 652 | "version": "5.7.1", 653 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 654 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 655 | "bin": { 656 | "semver": "bin/semver" 657 | } 658 | }, 659 | "node_modules/uc.micro": { 660 | "version": "1.0.6", 661 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", 662 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" 663 | }, 664 | "node_modules/universal-github-app-jwt": { 665 | "version": "1.1.0", 666 | "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.0.tgz", 667 | "integrity": "sha512-3b+ocAjjz4JTyqaOT+NNBd5BtTuvJTxWElIoeHSVelUV9J3Jp7avmQTdLKCaoqi/5Ox2o/q+VK19TJ233rVXVQ==", 668 | "dependencies": { 669 | "@types/jsonwebtoken": "^8.3.3", 670 | "jsonwebtoken": "^8.5.1" 671 | } 672 | }, 673 | "node_modules/universal-user-agent": { 674 | "version": "6.0.0", 675 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", 676 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" 677 | }, 678 | "node_modules/wrappy": { 679 | "version": "1.0.2", 680 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 681 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 682 | }, 683 | "node_modules/yallist": { 684 | "version": "4.0.0", 685 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 686 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 687 | }, 688 | "node_modules/yaml": { 689 | "version": "1.10.2", 690 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 691 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 692 | "engines": { 693 | "node": ">= 6" 694 | } 695 | } 696 | }, 697 | "dependencies": { 698 | "@octokit/app": { 699 | "version": "12.0.2", 700 | "resolved": "https://registry.npmjs.org/@octokit/app/-/app-12.0.2.tgz", 701 | "integrity": "sha512-yQNnVR7ZvElQHmuEfcI/fg3Z3waRCNV9TC1FLaO0e6AT4SEJPUrymRKWhG9ts7kUCWseVSHlxR+r/zsbIPd+9w==", 702 | "requires": { 703 | "@octokit/auth-app": "^3.3.0", 704 | "@octokit/auth-unauthenticated": "^2.0.4", 705 | "@octokit/core": "^3.4.0", 706 | "@octokit/oauth-app": "^3.3.2", 707 | "@octokit/plugin-paginate-rest": "^2.13.3", 708 | "@octokit/types": "^6.13.0", 709 | "@octokit/webhooks": "^9.0.1" 710 | } 711 | }, 712 | "@octokit/auth-app": { 713 | "version": "3.4.0", 714 | "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-3.4.0.tgz", 715 | "integrity": "sha512-zBVgTnLJb0uoNMGCpcDkkAbPeavHX7oAjJkaDv2nqMmsXSsCw4AbUhjl99EtJQG/JqFY/kLFHM9330Wn0k70+g==", 716 | "requires": { 717 | "@octokit/auth-oauth-app": "^4.1.0", 718 | "@octokit/auth-oauth-user": "^1.2.3", 719 | "@octokit/request": "^5.4.11", 720 | "@octokit/request-error": "^2.0.0", 721 | "@octokit/types": "^6.0.3", 722 | "@types/lru-cache": "^5.1.0", 723 | "deprecation": "^2.3.1", 724 | "lru-cache": "^6.0.0", 725 | "universal-github-app-jwt": "^1.0.1", 726 | "universal-user-agent": "^6.0.0" 727 | } 728 | }, 729 | "@octokit/auth-oauth-app": { 730 | "version": "4.1.2", 731 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-4.1.2.tgz", 732 | "integrity": "sha512-bdNGNRmuDJjKoHla3mUGtkk/xcxKngnQfBEnyk+7VwMqrABKvQB1wQRSrwSWkPPUX7Lcj2ttkPAPG7+iBkMRnw==", 733 | "requires": { 734 | "@octokit/auth-oauth-device": "^3.1.1", 735 | "@octokit/auth-oauth-user": "^1.2.1", 736 | "@octokit/request": "^5.3.0", 737 | "@octokit/types": "^6.0.3", 738 | "@types/btoa-lite": "^1.0.0", 739 | "btoa-lite": "^1.0.0", 740 | "universal-user-agent": "^6.0.0" 741 | } 742 | }, 743 | "@octokit/auth-oauth-device": { 744 | "version": "3.1.1", 745 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-3.1.1.tgz", 746 | "integrity": "sha512-ykDZROilszXZJ6pYdl6SZ15UZniCs0zDcKgwOZpMz3U0QDHPUhFGXjHToBCAIHwbncMu+jLt4/Nw4lq3FwAw/w==", 747 | "requires": { 748 | "@octokit/oauth-methods": "^1.1.0", 749 | "@octokit/request": "^5.4.14", 750 | "@octokit/types": "^6.10.0", 751 | "universal-user-agent": "^6.0.0" 752 | } 753 | }, 754 | "@octokit/auth-oauth-user": { 755 | "version": "1.2.4", 756 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-1.2.4.tgz", 757 | "integrity": "sha512-efOajupCZBP1veqx5w59Qey0lIud1rDUgxTRjjkQDU3eOBmkAasY1pXemDsQwW0I85jb1P/gn2dMejedVxf9kw==", 758 | "requires": { 759 | "@octokit/auth-oauth-device": "^3.1.1", 760 | "@octokit/oauth-methods": "^1.1.0", 761 | "@octokit/request": "^5.4.14", 762 | "@octokit/types": "^6.12.2", 763 | "btoa-lite": "^1.0.0", 764 | "universal-user-agent": "^6.0.0" 765 | } 766 | }, 767 | "@octokit/auth-token": { 768 | "version": "2.4.5", 769 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", 770 | "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", 771 | "requires": { 772 | "@octokit/types": "^6.0.3" 773 | } 774 | }, 775 | "@octokit/auth-unauthenticated": { 776 | "version": "2.0.4", 777 | "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-2.0.4.tgz", 778 | "integrity": "sha512-jZMwIz2PfQuLcOQRRELY6zb/jIyWQKlPxVV1oEG4sxJNmnANz3Skvnz4kVNvfs1r2jhgKAx9Pb6f+3vXeyh7yg==", 779 | "requires": { 780 | "@octokit/request-error": "^2.0.2", 781 | "@octokit/types": "^6.0.3" 782 | } 783 | }, 784 | "@octokit/core": { 785 | "version": "3.4.0", 786 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.4.0.tgz", 787 | "integrity": "sha512-6/vlKPP8NF17cgYXqucdshWqmMZGXkuvtcrWCgU5NOI0Pl2GjlmZyWgBMrU8zJ3v2MJlM6++CiB45VKYmhiWWg==", 788 | "requires": { 789 | "@octokit/auth-token": "^2.4.4", 790 | "@octokit/graphql": "^4.5.8", 791 | "@octokit/request": "^5.4.12", 792 | "@octokit/request-error": "^2.0.5", 793 | "@octokit/types": "^6.0.3", 794 | "before-after-hook": "^2.2.0", 795 | "universal-user-agent": "^6.0.0" 796 | } 797 | }, 798 | "@octokit/endpoint": { 799 | "version": "6.0.11", 800 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.11.tgz", 801 | "integrity": "sha512-fUIPpx+pZyoLW4GCs3yMnlj2LfoXTWDUVPTC4V3MUEKZm48W+XYpeWSZCv+vYF1ZABUm2CqnDVf1sFtIYrj7KQ==", 802 | "requires": { 803 | "@octokit/types": "^6.0.3", 804 | "is-plain-object": "^5.0.0", 805 | "universal-user-agent": "^6.0.0" 806 | } 807 | }, 808 | "@octokit/graphql": { 809 | "version": "4.6.1", 810 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.6.1.tgz", 811 | "integrity": "sha512-2lYlvf4YTDgZCTXTW4+OX+9WTLFtEUc6hGm4qM1nlZjzxj+arizM4aHWzBVBCxY9glh7GIs0WEuiSgbVzv8cmA==", 812 | "requires": { 813 | "@octokit/request": "^5.3.0", 814 | "@octokit/types": "^6.0.3", 815 | "universal-user-agent": "^6.0.0" 816 | } 817 | }, 818 | "@octokit/oauth-app": { 819 | "version": "3.3.2", 820 | "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-3.3.2.tgz", 821 | "integrity": "sha512-vZPleCS65Sq2fXQYWt1JmTqrNUdsmdvmgr4rmZhxKaX/Fc6xExtNCBmksAbSMY9q3uFBv76BuvNWGKFNpXy5Tw==", 822 | "requires": { 823 | "@octokit/auth-oauth-app": "^4.0.0", 824 | "@octokit/auth-oauth-user": "^1.2.3", 825 | "@octokit/auth-unauthenticated": "^2.0.0", 826 | "@octokit/core": "^3.3.2", 827 | "@octokit/oauth-authorization-url": "^4.2.1", 828 | "@octokit/oauth-methods": "^1.2.2", 829 | "fromentries": "^1.3.1", 830 | "universal-user-agent": "^6.0.0" 831 | } 832 | }, 833 | "@octokit/oauth-authorization-url": { 834 | "version": "4.3.1", 835 | "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-4.3.1.tgz", 836 | "integrity": "sha512-sI/SOEAvzRhqdzj+kJl+2ifblRve2XU6ZB36Lq25Su8R31zE3GoKToSLh64nWFnKePNi2RrdcMm94UEIQZslOw==" 837 | }, 838 | "@octokit/oauth-methods": { 839 | "version": "1.2.2", 840 | "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-1.2.2.tgz", 841 | "integrity": "sha512-CFMUMn9DdPLMcpffhKgkwIIClfv0ZToJM4qcg4O0egCoHMYkVlxl22bBoo9qCnuF1U/xn871KEXuozKIX+bA2w==", 842 | "requires": { 843 | "@octokit/oauth-authorization-url": "^4.3.1", 844 | "@octokit/request": "^5.4.14", 845 | "@octokit/request-error": "^2.0.5", 846 | "@octokit/types": "^6.12.2", 847 | "btoa-lite": "^1.0.0" 848 | } 849 | }, 850 | "@octokit/openapi-types": { 851 | "version": "7.0.0", 852 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-7.0.0.tgz", 853 | "integrity": "sha512-gV/8DJhAL/04zjTI95a7FhQwS6jlEE0W/7xeYAzuArD0KVAVWDLP2f3vi98hs3HLTczxXdRK/mF0tRoQPpolEw==" 854 | }, 855 | "@octokit/plugin-paginate-rest": { 856 | "version": "2.13.3", 857 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.13.3.tgz", 858 | "integrity": "sha512-46lptzM9lTeSmIBt/sVP/FLSTPGx6DCzAdSX3PfeJ3mTf4h9sGC26WpaQzMEq/Z44cOcmx8VsOhO+uEgE3cjYg==", 859 | "requires": { 860 | "@octokit/types": "^6.11.0" 861 | } 862 | }, 863 | "@octokit/plugin-rest-endpoint-methods": { 864 | "version": "5.1.1", 865 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.1.1.tgz", 866 | "integrity": "sha512-u4zy0rVA8darm/AYsIeWkRalhQR99qPL1D/EXHejV2yaECMdHfxXiTXtba8NMBSajOJe8+C9g+EqMKSvysx0dg==", 867 | "requires": { 868 | "@octokit/types": "^6.14.1", 869 | "deprecation": "^2.3.1" 870 | } 871 | }, 872 | "@octokit/plugin-retry": { 873 | "version": "3.0.7", 874 | "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-3.0.7.tgz", 875 | "integrity": "sha512-n08BPfVeKj5wnyH7IaOWnuKbx+e9rSJkhDHMJWXLPv61625uWjsN8G7sAW3zWm9n9vnS4friE7LL/XLcyGeG8Q==", 876 | "requires": { 877 | "@octokit/types": "^6.0.3", 878 | "bottleneck": "^2.15.3" 879 | } 880 | }, 881 | "@octokit/plugin-throttling": { 882 | "version": "3.4.1", 883 | "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-3.4.1.tgz", 884 | "integrity": "sha512-qCQ+Z4AnL9OrXvV59EH3GzPxsB+WyqufoCjiCJXJxTbnt3W+leXbXw5vHrMp4NG9ltw00McFWIxIxNQAzLNoTA==", 885 | "requires": { 886 | "@octokit/types": "^6.0.1", 887 | "bottleneck": "^2.15.3" 888 | } 889 | }, 890 | "@octokit/request": { 891 | "version": "5.4.15", 892 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.4.15.tgz", 893 | "integrity": "sha512-6UnZfZzLwNhdLRreOtTkT9n57ZwulCve8q3IT/Z477vThu6snfdkBuhxnChpOKNGxcQ71ow561Qoa6uqLdPtag==", 894 | "requires": { 895 | "@octokit/endpoint": "^6.0.1", 896 | "@octokit/request-error": "^2.0.0", 897 | "@octokit/types": "^6.7.1", 898 | "is-plain-object": "^5.0.0", 899 | "node-fetch": "^2.6.1", 900 | "universal-user-agent": "^6.0.0" 901 | } 902 | }, 903 | "@octokit/request-error": { 904 | "version": "2.0.5", 905 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.0.5.tgz", 906 | "integrity": "sha512-T/2wcCFyM7SkXzNoyVNWjyVlUwBvW3igM3Btr/eKYiPmucXTtkxt2RBsf6gn3LTzaLSLTQtNmvg+dGsOxQrjZg==", 907 | "requires": { 908 | "@octokit/types": "^6.0.3", 909 | "deprecation": "^2.0.0", 910 | "once": "^1.4.0" 911 | } 912 | }, 913 | "@octokit/types": { 914 | "version": "6.14.2", 915 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.14.2.tgz", 916 | "integrity": "sha512-wiQtW9ZSy4OvgQ09iQOdyXYNN60GqjCL/UdMsepDr1Gr0QzpW6irIKbH3REuAHXAhxkEk9/F2a3Gcs1P6kW5jA==", 917 | "requires": { 918 | "@octokit/openapi-types": "^7.0.0" 919 | } 920 | }, 921 | "@octokit/webhooks": { 922 | "version": "9.3.0", 923 | "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-9.3.0.tgz", 924 | "integrity": "sha512-DCN5NLAw6UzAE5/9H4d0wu4yHXxxPRmg1AyvKA65YGLYsY43cUQhogTse6yUr+7gEdmNkmS166JyDzttxy+gew==", 925 | "requires": { 926 | "@octokit/request-error": "^2.0.2", 927 | "@octokit/webhooks-methods": "^1.0.0", 928 | "@octokit/webhooks-types": "3.71.0", 929 | "aggregate-error": "^3.1.0" 930 | } 931 | }, 932 | "@octokit/webhooks-methods": { 933 | "version": "1.0.0", 934 | "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-1.0.0.tgz", 935 | "integrity": "sha512-pVceMQcj9SZ5p2RkemL0TuuPdGULNQj9F3Pq1cNM1xH+Kst1VNt0dj3PEGZRZV473njrDnYdi/OG4wWY9TLbbA==" 936 | }, 937 | "@octokit/webhooks-types": { 938 | "version": "3.71.0", 939 | "resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-3.71.0.tgz", 940 | "integrity": "sha512-Xgu3p5V18rk6TSSFtEukZaR6dOXaLpBnQcRkEge/UZ6AtrNXvG/GWFL+lGyGb2VCi1/qnpXM5XgnJFq8oIuzvg==" 941 | }, 942 | "@types/btoa-lite": { 943 | "version": "1.0.0", 944 | "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", 945 | "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" 946 | }, 947 | "@types/jsonwebtoken": { 948 | "version": "8.5.1", 949 | "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 950 | "integrity": "sha512-rNAPdomlIUX0i0cg2+I+Q1wOUr531zHBQ+cV/28PJ39bSPKjahatZZ2LMuhiguETkCgLVzfruw/ZvNMNkKoSzw==", 951 | "requires": { 952 | "@types/node": "*" 953 | } 954 | }, 955 | "@types/lru-cache": { 956 | "version": "5.1.0", 957 | "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.0.tgz", 958 | "integrity": "sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w==" 959 | }, 960 | "@types/node": { 961 | "version": "14.14.43", 962 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.43.tgz", 963 | "integrity": "sha512-3pwDJjp1PWacPTpH0LcfhgjvurQvrZFBrC6xxjaUEZ7ifUtT32jtjPxEMMblpqd2Mvx+k8haqQJLQxolyGN/cQ==" 964 | }, 965 | "abort-controller": { 966 | "version": "3.0.0", 967 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 968 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 969 | "requires": { 970 | "event-target-shim": "^5.0.0" 971 | } 972 | }, 973 | "abortcontroller-polyfill": { 974 | "version": "1.7.1", 975 | "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.1.tgz", 976 | "integrity": "sha512-yml9NiDEH4M4p0G4AcPkg8AAa4mF3nfYF28VQxaokpO67j9H7gWgmsVWJ/f1Rn+PzsnDYvzJzWIQzCqDKRvWlA==" 977 | }, 978 | "aggregate-error": { 979 | "version": "3.1.0", 980 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 981 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 982 | "requires": { 983 | "clean-stack": "^2.0.0", 984 | "indent-string": "^4.0.0" 985 | } 986 | }, 987 | "airtable": { 988 | "version": "0.11.0", 989 | "resolved": "https://registry.npmjs.org/airtable/-/airtable-0.11.0.tgz", 990 | "integrity": "sha512-PwFAFooF7MA9QzxbuhTOckkeLJ/O4Ro4Af0a696AVa4UAV+HAuuLwMiy6bsNRJwT6E1KR8FcsWGVB7CSCu7b0A==", 991 | "requires": { 992 | "@types/node": ">=8.0.0 <15", 993 | "abort-controller": "^3.0.0", 994 | "abortcontroller-polyfill": "^1.4.0", 995 | "lodash": "^4.17.19", 996 | "node-fetch": "^2.6.1" 997 | } 998 | }, 999 | "argparse": { 1000 | "version": "2.0.1", 1001 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1002 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" 1003 | }, 1004 | "axios": { 1005 | "version": "0.21.1", 1006 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 1007 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 1008 | "requires": { 1009 | "follow-redirects": "^1.10.0" 1010 | } 1011 | }, 1012 | "before-after-hook": { 1013 | "version": "2.2.1", 1014 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.1.tgz", 1015 | "integrity": "sha512-/6FKxSTWoJdbsLDF8tdIjaRiFXiE6UHsEHE3OPI/cwPURCVi1ukP0gmLn7XWEiFk5TcwQjjY5PWsU+j+tgXgmw==" 1016 | }, 1017 | "bottleneck": { 1018 | "version": "2.19.5", 1019 | "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", 1020 | "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" 1021 | }, 1022 | "btoa-lite": { 1023 | "version": "1.0.0", 1024 | "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", 1025 | "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=" 1026 | }, 1027 | "buffer-equal-constant-time": { 1028 | "version": "1.0.1", 1029 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 1030 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 1031 | }, 1032 | "clean-stack": { 1033 | "version": "2.2.0", 1034 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 1035 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" 1036 | }, 1037 | "deprecation": { 1038 | "version": "2.3.1", 1039 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 1040 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 1041 | }, 1042 | "dotenv": { 1043 | "version": "8.2.0", 1044 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz", 1045 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==" 1046 | }, 1047 | "ecdsa-sig-formatter": { 1048 | "version": "1.0.11", 1049 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 1050 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 1051 | "requires": { 1052 | "safe-buffer": "^5.0.1" 1053 | } 1054 | }, 1055 | "entities": { 1056 | "version": "2.1.0", 1057 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", 1058 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==" 1059 | }, 1060 | "event-target-shim": { 1061 | "version": "5.0.1", 1062 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1063 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 1064 | }, 1065 | "follow-redirects": { 1066 | "version": "1.14.0", 1067 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.0.tgz", 1068 | "integrity": "sha512-0vRwd7RKQBTt+mgu87mtYeofLFZpTas2S9zY+jIeuLJMNvudIgF52nr19q40HOwH5RrhWIPuj9puybzSJiRrVg==" 1069 | }, 1070 | "fromentries": { 1071 | "version": "1.3.2", 1072 | "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", 1073 | "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==" 1074 | }, 1075 | "indent-string": { 1076 | "version": "4.0.0", 1077 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 1078 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" 1079 | }, 1080 | "is-plain-object": { 1081 | "version": "5.0.0", 1082 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 1083 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==" 1084 | }, 1085 | "jsonwebtoken": { 1086 | "version": "8.5.1", 1087 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 1088 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 1089 | "requires": { 1090 | "jws": "^3.2.2", 1091 | "lodash.includes": "^4.3.0", 1092 | "lodash.isboolean": "^3.0.3", 1093 | "lodash.isinteger": "^4.0.4", 1094 | "lodash.isnumber": "^3.0.3", 1095 | "lodash.isplainobject": "^4.0.6", 1096 | "lodash.isstring": "^4.0.1", 1097 | "lodash.once": "^4.0.0", 1098 | "ms": "^2.1.1", 1099 | "semver": "^5.6.0" 1100 | } 1101 | }, 1102 | "jwa": { 1103 | "version": "1.4.1", 1104 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 1105 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 1106 | "requires": { 1107 | "buffer-equal-constant-time": "1.0.1", 1108 | "ecdsa-sig-formatter": "1.0.11", 1109 | "safe-buffer": "^5.0.1" 1110 | } 1111 | }, 1112 | "jws": { 1113 | "version": "3.2.2", 1114 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 1115 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 1116 | "requires": { 1117 | "jwa": "^1.4.1", 1118 | "safe-buffer": "^5.0.1" 1119 | } 1120 | }, 1121 | "linkify-it": { 1122 | "version": "3.0.2", 1123 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.2.tgz", 1124 | "integrity": "sha512-gDBO4aHNZS6coiZCKVhSNh43F9ioIL4JwRjLZPkoLIY4yZFwg264Y5lu2x6rb1Js42Gh6Yqm2f6L2AJcnkzinQ==", 1125 | "requires": { 1126 | "uc.micro": "^1.0.1" 1127 | } 1128 | }, 1129 | "lodash": { 1130 | "version": "4.17.21", 1131 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1132 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 1133 | }, 1134 | "lodash.includes": { 1135 | "version": "4.3.0", 1136 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 1137 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 1138 | }, 1139 | "lodash.isboolean": { 1140 | "version": "3.0.3", 1141 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 1142 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 1143 | }, 1144 | "lodash.isinteger": { 1145 | "version": "4.0.4", 1146 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 1147 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 1148 | }, 1149 | "lodash.isnumber": { 1150 | "version": "3.0.3", 1151 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 1152 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 1153 | }, 1154 | "lodash.isplainobject": { 1155 | "version": "4.0.6", 1156 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 1157 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 1158 | }, 1159 | "lodash.isstring": { 1160 | "version": "4.0.1", 1161 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 1162 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 1163 | }, 1164 | "lodash.once": { 1165 | "version": "4.1.1", 1166 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 1167 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 1168 | }, 1169 | "lru-cache": { 1170 | "version": "6.0.0", 1171 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1172 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1173 | "requires": { 1174 | "yallist": "^4.0.0" 1175 | } 1176 | }, 1177 | "markdown-it": { 1178 | "version": "12.0.6", 1179 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.0.6.tgz", 1180 | "integrity": "sha512-qv3sVLl4lMT96LLtR7xeRJX11OUFjsaD5oVat2/SNBIb21bJXwal2+SklcRbTwGwqWpWH/HRtYavOoJE+seL8w==", 1181 | "requires": { 1182 | "argparse": "^2.0.1", 1183 | "entities": "~2.1.0", 1184 | "linkify-it": "^3.0.1", 1185 | "mdurl": "^1.0.1", 1186 | "uc.micro": "^1.0.5" 1187 | } 1188 | }, 1189 | "markdown-it-metadata-block": { 1190 | "version": "1.0.2", 1191 | "resolved": "https://registry.npmjs.org/markdown-it-metadata-block/-/markdown-it-metadata-block-1.0.2.tgz", 1192 | "integrity": "sha512-6//Fdar0x0d6lpTYL1RSt2lxRHscRqZqVuQOfTjL/oWhH7QhDo3ahkDg9ai4MF6sRKKAa7ztFneadWeDcwsocg==" 1193 | }, 1194 | "mdurl": { 1195 | "version": "1.0.1", 1196 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", 1197 | "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=" 1198 | }, 1199 | "ms": { 1200 | "version": "2.1.3", 1201 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1202 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1203 | }, 1204 | "node-fetch": { 1205 | "version": "2.6.1", 1206 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", 1207 | "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" 1208 | }, 1209 | "octokit": { 1210 | "version": "1.0.3", 1211 | "resolved": "https://registry.npmjs.org/octokit/-/octokit-1.0.3.tgz", 1212 | "integrity": "sha512-xficjKIoPf/9JdI8bCru+pdddB+TRWrSvsgdbwc/XQmzGDho1kYPOeqghAq0/qcK1zwSo2YwzyQLwihiUOA5qA==", 1213 | "requires": { 1214 | "@octokit/app": "^12.0.2", 1215 | "@octokit/core": "^3.4.0", 1216 | "@octokit/oauth-app": "^3.3.2", 1217 | "@octokit/plugin-paginate-rest": "^2.13.3", 1218 | "@octokit/plugin-rest-endpoint-methods": "^5.0.0", 1219 | "@octokit/plugin-retry": "^3.0.7", 1220 | "@octokit/plugin-throttling": "^3.4.1", 1221 | "@octokit/types": "^6.13.0" 1222 | } 1223 | }, 1224 | "once": { 1225 | "version": "1.4.0", 1226 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1227 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1228 | "requires": { 1229 | "wrappy": "1" 1230 | } 1231 | }, 1232 | "safe-buffer": { 1233 | "version": "5.2.1", 1234 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1235 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 1236 | }, 1237 | "semver": { 1238 | "version": "5.7.1", 1239 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1240 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 1241 | }, 1242 | "uc.micro": { 1243 | "version": "1.0.6", 1244 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", 1245 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==" 1246 | }, 1247 | "universal-github-app-jwt": { 1248 | "version": "1.1.0", 1249 | "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.0.tgz", 1250 | "integrity": "sha512-3b+ocAjjz4JTyqaOT+NNBd5BtTuvJTxWElIoeHSVelUV9J3Jp7avmQTdLKCaoqi/5Ox2o/q+VK19TJ233rVXVQ==", 1251 | "requires": { 1252 | "@types/jsonwebtoken": "^8.3.3", 1253 | "jsonwebtoken": "^8.5.1" 1254 | } 1255 | }, 1256 | "universal-user-agent": { 1257 | "version": "6.0.0", 1258 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", 1259 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" 1260 | }, 1261 | "wrappy": { 1262 | "version": "1.0.2", 1263 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1264 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1265 | }, 1266 | "yallist": { 1267 | "version": "4.0.0", 1268 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1269 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1270 | }, 1271 | "yaml": { 1272 | "version": "1.10.2", 1273 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1274 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" 1275 | } 1276 | } 1277 | } 1278 | --------------------------------------------------------------------------------