feat: migrate to git.wanhose.dev
This commit is contained in:
parent
c6faa2796b
commit
069bb29242
21
.gitea/ISSUE_TEMPLATE.md
Normal file
21
.gitea/ISSUE_TEMPLATE.md
Normal file
@ -0,0 +1,21 @@
|
||||
## Issue information
|
||||
|
||||
#### 🖥️ Browser
|
||||
|
||||
...
|
||||
|
||||
#### 📱 Device
|
||||
|
||||
...
|
||||
|
||||
#### 📝 Reason
|
||||
|
||||
...
|
||||
|
||||
#### 🔗 URL
|
||||
|
||||
...
|
||||
|
||||
#### 🏷️ Version
|
||||
|
||||
...
|
10
.gitea/PULL_REQUEST_TEMPLATE.md
Normal file
10
.gitea/PULL_REQUEST_TEMPLATE.md
Normal file
@ -0,0 +1,10 @@
|
||||
## Description
|
||||
|
||||
...
|
||||
|
||||
## Browsers
|
||||
|
||||
- [ ] Google Chrome (specify version if checked)
|
||||
- [ ] Microsoft Edge (specify version if checked)
|
||||
- [ ] Mozilla Firefox (specify version if checked)
|
||||
- [ ] Opera (specify version if checked)
|
1
.github/FUNDING.yml
vendored
1
.github/FUNDING.yml
vendored
@ -1 +0,0 @@
|
||||
custom: ['https://paypal.me/wanhose']
|
19
README.md
Normal file
19
README.md
Normal file
@ -0,0 +1,19 @@
|
||||
> AN IMPORTANT UPDATE
|
||||
> <br><br>
|
||||
> On the morning of October 11, 2024, GitHub unexpectedly hid our repository without any prior notification. This sudden action immediately disrupted all of our API services, as they relied on files from the repository that were no longer accessible. Our team reached out to GitHub support to understand the situation, but we have not yet received any response. Given the critical impact on our services and the lack of communication from GitHub, we decided to migrate the entire repository to an alternative platform to ensure continuity and reliability.
|
||||
> <br><br>
|
||||
> We initially migrated the repository, releases, and open issues (excluding discussions) to GitLab. However, during the migration of issues, GitLab's own spam detection mechanism mistakenly identified its bot activity as spam, leading to our issues being hidden. Despite reaching out to GitLab support, we have not yet received a resolution for this incident. Faced with these ongoing platform limitations and communication delays, we have opted to move forward with self-hosting our own Git system using Gitea to ensure full control over our repository and services.
|
||||
> <br><br>
|
||||
> We will no longer support platforms that overlook the contributions of our users and the significant work invested over the last five years. Once our GitHub account is reinstated, we will set up a redirect to guide users to our new, self-hosted repository.
|
||||
> <br><br>
|
||||
> Thank you to our community for your patience. Your contributions remain vital to this project, and we are committed to ensuring its stability and growth in a more secure environment.
|
||||
|
||||
# Cookie Dialog Monster
|
||||
|
||||
Cookie Dialog Monster is a browser extension that hides cookie consent dialogs without changing user preferences. By default, we do NOT accept cookies (except in [a few cases](https://git.wanhose.dev/wanhose/cookie-dialog-monster/src/branch/main/database.json#L248) where the pages do not function without accepting them). You can report broken sites with a single click, which will create an issue in this repository to be fixed promptly.
|
||||
|
||||
## Repositories
|
||||
|
||||
- [API](/wanhose/cookie-dialog-monster/src/branch/main/packages/api)
|
||||
- [Browser extension](/wanhose/cookie-dialog-monster/src/branch/main/packages/browser-extension)
|
||||
- [Web](/wanhose/cookie-dialog-monster/src/branch/main/packages/web)
|
@ -1,9 +0,0 @@
|
||||
# Cookie Monster Dialog
|
||||
|
||||
Cookie Monster Dialog is a browser extension that hides cookie consent dialogs without changing user preferences. By default, we do NOT accept cookies (except in [a few cases](https://github.com/wanhose/cookie-dialog-monster/blob/main/database.json#L248) where the pages do not function without accepting them). You can report broken sites with a single click, which will create an issue in this repository to be fixed promptly.
|
||||
|
||||
## Repositories
|
||||
|
||||
- [API](/packages/api/)
|
||||
- [Browser extension](/packages/browser-extension/)
|
||||
- [Web](/packages/web/)
|
@ -1,10 +0,0 @@
|
||||
## Description
|
||||
|
||||
Give a short description about this pull request.
|
||||
|
||||
## Browsers
|
||||
|
||||
- [ ] Google Chrome (specify version if checked).
|
||||
- [ ] Microsoft Edge (specify version if checked).
|
||||
- [ ] Mozilla Firefox (specify version if checked).
|
||||
- [ ] Opera (specify version if checked).
|
@ -1 +1,2 @@
|
||||
GITHUB_TOKEN=?
|
||||
GITEA_RAW=?
|
||||
GITEA_TOKEN=?
|
||||
|
@ -1,4 +1,4 @@
|
||||
# Cookie Monster Dialog API
|
||||
# Cookie Dialog Monster API
|
||||
|
||||
## Installation
|
||||
|
@ -12,7 +12,6 @@
|
||||
"@fastify/rate-limit": "^9.1.0",
|
||||
"fastify": "^4.26.2",
|
||||
"node-fetch": "^2.7.0",
|
||||
"octokit": "^3.2.1",
|
||||
"ua-parser-js": "^1.0.37",
|
||||
"yup": "^1.4.0"
|
||||
},
|
||||
|
@ -12,7 +12,6 @@ import v4ReportRoutes from 'routes/v4/report';
|
||||
import v5DataRoutes from 'routes/v5/data';
|
||||
import v5IssuesRoutes from 'routes/v5/issues';
|
||||
import v5ReportRoutes from 'routes/v5/report';
|
||||
import v5VersionRoutes from 'routes/v5/version';
|
||||
import environment from 'services/environment';
|
||||
|
||||
const server = fastify({ logger: true });
|
||||
@ -27,8 +26,6 @@ server.register(cors, {
|
||||
|
||||
server.register(rateLimit, {
|
||||
global: false,
|
||||
max: 1,
|
||||
timeWindow: 30000,
|
||||
});
|
||||
|
||||
server.register(v1EntriesRoutes, { prefix: '/rest/v1' });
|
||||
@ -42,7 +39,6 @@ server.register(v4ReportRoutes, { prefix: '/rest/v4' });
|
||||
server.register(v5DataRoutes, { prefix: '/rest/v5' });
|
||||
server.register(v5IssuesRoutes, { prefix: '/rest/v5' });
|
||||
server.register(v5ReportRoutes, { prefix: '/rest/v5' });
|
||||
server.register(v5VersionRoutes, { prefix: '/rest/v5' });
|
||||
|
||||
server.listen({ host: '0.0.0.0', port: environment.port }, (error, address) => {
|
||||
if (error) {
|
||||
|
@ -1,15 +1,24 @@
|
||||
import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import { RATE_LIMIT_1_PER_HOUR } from 'services/rateLimit';
|
||||
|
||||
/**
|
||||
* @deprecated This API route is no longer supported. Please use a newer version
|
||||
*/
|
||||
export default (server: FastifyInstance, _options: RouteShorthandOptions, done: () => void) => {
|
||||
server.get('/entries/', async (_request, reply) => {
|
||||
server.get(
|
||||
'/entries/',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_1_PER_HOUR,
|
||||
},
|
||||
},
|
||||
async (_request, reply) => {
|
||||
reply.send({
|
||||
success: false,
|
||||
errors: ['This API route is no longer supported. Please use a newer version'],
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
done();
|
||||
};
|
||||
|
@ -1,15 +1,24 @@
|
||||
import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import { RATE_LIMIT_1_PER_HOUR } from 'services/rateLimit';
|
||||
|
||||
/**
|
||||
* @deprecated This API route is no longer supported. Please use a newer version
|
||||
*/
|
||||
export default (server: FastifyInstance, _options: RouteShorthandOptions, done: () => void) => {
|
||||
server.post('/report/', {}, async (_request, reply) => {
|
||||
server.post(
|
||||
'/report/',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_1_PER_HOUR,
|
||||
},
|
||||
},
|
||||
async (_request, reply) => {
|
||||
reply.send({
|
||||
success: false,
|
||||
errors: ['This API route is no longer supported. Please use a newer version'],
|
||||
});
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
done();
|
||||
};
|
||||
|
@ -2,11 +2,19 @@ import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import fetch from 'node-fetch';
|
||||
import { parseNewFix } from 'services/compatibility';
|
||||
import environment from 'services/environment';
|
||||
import { RATE_LIMIT_10_PER_MIN } from 'services/rateLimit';
|
||||
|
||||
export default (server: FastifyInstance, _options: RouteShorthandOptions, done: () => void) => {
|
||||
server.get('/data/', async (_request, reply) => {
|
||||
server.get(
|
||||
'/data/',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_10_PER_MIN,
|
||||
},
|
||||
},
|
||||
async (_request, reply) => {
|
||||
try {
|
||||
const url = `${environment.github.files}/database.json`;
|
||||
const url = `${environment.gitea.raw}/database.json`;
|
||||
const result = await (await fetch(url)).json();
|
||||
|
||||
reply.send({
|
||||
@ -20,11 +28,14 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
},
|
||||
success: true,
|
||||
});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
reply.send({ success: false });
|
||||
}
|
||||
} catch (error) {
|
||||
reply.send({
|
||||
errors: [error.message],
|
||||
success: false,
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
done();
|
||||
};
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import environment from 'services/environment';
|
||||
import { octokit } from 'services/octokit';
|
||||
import { formatMessage } from 'services/format';
|
||||
import { createIssue, createIssueComment, getIssue, updateIssue } from 'services/git';
|
||||
import { RATE_LIMIT_1_PER_MIN } from 'services/rateLimit';
|
||||
import { validatorCompiler } from 'services/validation';
|
||||
import { UAParser } from 'ua-parser-js';
|
||||
import * as yup from 'yup';
|
||||
@ -22,6 +23,9 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
server.post<{ Body: PostReportBody }>(
|
||||
'/report/',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_1_PER_MIN,
|
||||
},
|
||||
schema: {
|
||||
body: PostReportBodySchema,
|
||||
},
|
||||
@ -29,45 +33,45 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
},
|
||||
async (request, reply) => {
|
||||
try {
|
||||
const issues = await octokit.request('GET /repos/{owner}/{repo}/issues', {
|
||||
owner: environment.github.owner,
|
||||
repo: environment.github.repo,
|
||||
});
|
||||
const ua = new UAParser(request.body.userAgent ?? '').getResult();
|
||||
const url = new URL(request.body.url).hostname
|
||||
.split('.')
|
||||
.slice(-3)
|
||||
.join('.')
|
||||
.replace('www.', '');
|
||||
const { reason, url, userAgent, version } = request.body;
|
||||
const hostname = new URL(url).hostname.split('.').slice(-3).join('.').replace('www.', '');
|
||||
const issue = await getIssue({ title: hostname });
|
||||
const ua = new UAParser(userAgent ?? '').getResult();
|
||||
|
||||
if (issues.data.some((issue) => issue.title.includes(url))) {
|
||||
throw new Error();
|
||||
if (issue) {
|
||||
if (issue.state === 'closed') {
|
||||
await updateIssue({
|
||||
id: issue.id,
|
||||
labels: ['bug'],
|
||||
state: 'open',
|
||||
});
|
||||
}
|
||||
|
||||
await octokit.request('POST /repos/{owner}/{repo}/issues', {
|
||||
assignees: [environment.github.owner],
|
||||
body: [
|
||||
'## Specifications',
|
||||
'#### Browser',
|
||||
`${ua.browser.name ? `${ua.browser.name} ${ua.browser.version || ''}` : '-'}`,
|
||||
'#### Device',
|
||||
`${ua.device.type && ua.device.vendor ? `${ua.device.vendor} (${ua.device.type})` : '-'}`,
|
||||
'#### Reason',
|
||||
request.body.reason ?? '-',
|
||||
'#### URL',
|
||||
request.body.url,
|
||||
'#### Version',
|
||||
request.body.version,
|
||||
].join('\n'),
|
||||
labels: ['bug'],
|
||||
owner: environment.github.owner,
|
||||
repo: environment.github.repo,
|
||||
title: url,
|
||||
await createIssueComment({
|
||||
description: formatMessage({ reason, ua, url, version }),
|
||||
id: issue.id,
|
||||
});
|
||||
|
||||
reply.send({ success: true });
|
||||
reply.send({
|
||||
success: true,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
await createIssue({
|
||||
description: formatMessage({ reason, ua, url, version }),
|
||||
labels: ['bug'],
|
||||
title: hostname,
|
||||
});
|
||||
|
||||
reply.send({
|
||||
success: true,
|
||||
});
|
||||
} catch (error) {
|
||||
reply.send({ errors: [error.message], success: false });
|
||||
reply.send({
|
||||
errors: [error.message],
|
||||
success: false,
|
||||
});
|
||||
}
|
||||
}
|
||||
);
|
||||
|
@ -2,11 +2,19 @@ import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import fetch from 'node-fetch';
|
||||
import { parseNewFix } from 'services/compatibility';
|
||||
import environment from 'services/environment';
|
||||
import { RATE_LIMIT_3_PER_MIN } from 'services/rateLimit';
|
||||
|
||||
export default (server: FastifyInstance, _options: RouteShorthandOptions, done: () => void) => {
|
||||
server.get('/data/', async (_request, reply) => {
|
||||
server.get(
|
||||
'/data/',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_3_PER_MIN,
|
||||
},
|
||||
},
|
||||
async (_request, reply) => {
|
||||
try {
|
||||
const url = `${environment.github.files}/database.json`;
|
||||
const url = `${environment.gitea.raw}/database.json`;
|
||||
const result = await (await fetch(url)).json();
|
||||
|
||||
reply.send({
|
||||
@ -22,7 +30,8 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
success: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
done();
|
||||
};
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import environment from 'services/environment';
|
||||
import { octokit } from 'services/octokit';
|
||||
import { formatMessage } from 'services/format';
|
||||
import { createIssue, createIssueComment, getIssue, updateIssue } from 'services/git';
|
||||
import { RATE_LIMIT_1_PER_MIN } from 'services/rateLimit';
|
||||
import { validatorCompiler } from 'services/validation';
|
||||
import { UAParser } from 'ua-parser-js';
|
||||
import * as yup from 'yup';
|
||||
@ -22,63 +23,50 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
server.post<{ Body: PostReportBody }>(
|
||||
'/report/',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_1_PER_MIN,
|
||||
},
|
||||
schema: {
|
||||
body: PostReportBodySchema,
|
||||
},
|
||||
validatorCompiler,
|
||||
},
|
||||
async (request, reply) => {
|
||||
const { url, userAgent } = request.body;
|
||||
const ua = new UAParser(userAgent ?? '').getResult();
|
||||
const hostname = new URL(url).hostname.split('.').slice(-3).join('.').replace('www.', '');
|
||||
const existingIssues = await octokit.request('GET /search/issues', {
|
||||
per_page: 50,
|
||||
q: `in:title+is:issue+repo:${environment.github.owner}/${environment.github.repo}+${hostname}`,
|
||||
});
|
||||
const existingIssue = existingIssues.data.items.find(
|
||||
(issue) =>
|
||||
hostname === issue.title &&
|
||||
(issue.state === 'open' ||
|
||||
(issue.state === 'closed' && issue.labels.some((label) => label.name === 'wontfix')))
|
||||
);
|
||||
|
||||
try {
|
||||
if (existingIssue) {
|
||||
if (existingIssue.state === 'closed') {
|
||||
await octokit.request('PATCH /repos/{owner}/{repo}/issues/{issue_number}', {
|
||||
issue_number: existingIssue.number,
|
||||
const { reason, url, userAgent, version } = request.body;
|
||||
const hostname = new URL(url).hostname.split('.').slice(-3).join('.').replace('www.', '');
|
||||
const issue = await getIssue({ title: hostname });
|
||||
const ua = new UAParser(userAgent ?? '').getResult();
|
||||
|
||||
if (issue) {
|
||||
if (issue.state === 'closed') {
|
||||
await updateIssue({
|
||||
id: issue.id,
|
||||
labels: ['bug'],
|
||||
owner: environment.github.owner,
|
||||
repo: environment.github.repo,
|
||||
state: 'open',
|
||||
});
|
||||
}
|
||||
|
||||
await octokit.request('POST /repos/{owner}/{repo}/issues/{issue_number}/comments', {
|
||||
body: generateText(request.body, ua),
|
||||
issue_number: existingIssue.number,
|
||||
owner: environment.github.owner,
|
||||
repo: environment.github.repo,
|
||||
await createIssueComment({
|
||||
description: formatMessage({ reason, ua, url, version }),
|
||||
id: issue.id,
|
||||
});
|
||||
|
||||
reply.send({
|
||||
data: existingIssue.html_url,
|
||||
data: issue.html_url,
|
||||
success: true,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await octokit.request('POST /repos/{owner}/{repo}/issues', {
|
||||
assignees: [environment.github.owner],
|
||||
body: generateText(request.body, ua),
|
||||
const newIssue = await createIssue({
|
||||
description: formatMessage({ reason, ua, url, version }),
|
||||
labels: ['bug'],
|
||||
owner: environment.github.owner,
|
||||
repo: environment.github.repo,
|
||||
title: hostname,
|
||||
});
|
||||
|
||||
reply.send({
|
||||
data: response.data.html_url,
|
||||
data: newIssue.html_url,
|
||||
success: true,
|
||||
});
|
||||
} catch (error) {
|
||||
@ -92,21 +80,3 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
|
||||
done();
|
||||
};
|
||||
|
||||
function generateText(body: PostReportBody, ua: UAParser.IResult): string {
|
||||
return [
|
||||
'## Issue information',
|
||||
...(ua.browser.name && ua.browser.version
|
||||
? ['#### 🖥️ Browser', `${ua.browser.name} (${ua.browser.version})`]
|
||||
: []),
|
||||
...(ua.device.type && ua.device.vendor
|
||||
? ['#### 📱 Device', `${ua.device.vendor} (${ua.device.type})`]
|
||||
: []),
|
||||
'#### 📝 Reason',
|
||||
body.reason,
|
||||
'#### 🔗 URL',
|
||||
body.url,
|
||||
'#### 🏷️ Version',
|
||||
body.version,
|
||||
].join('\n');
|
||||
}
|
||||
|
@ -1,12 +1,20 @@
|
||||
import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import fetch from 'node-fetch';
|
||||
import environment from 'services/environment';
|
||||
import { RATE_LIMIT_3_PER_MIN } from 'services/rateLimit';
|
||||
|
||||
export default (server: FastifyInstance, _options: RouteShorthandOptions, done: () => void) => {
|
||||
server.get('/data/', async (_request, reply) => {
|
||||
server.get(
|
||||
'/data/',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_3_PER_MIN,
|
||||
},
|
||||
},
|
||||
async (_request, reply) => {
|
||||
try {
|
||||
const options = { headers: { 'Cache-Control': 'no-cache' } };
|
||||
const url = `${environment.github.files}/database.json`;
|
||||
const url = `${environment.gitea.raw}/database.json`;
|
||||
const { rules, ...result } = await (await fetch(url, options)).json();
|
||||
|
||||
reply.send({
|
||||
@ -22,7 +30,8 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
success: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
done();
|
||||
};
|
||||
|
@ -1,6 +1,6 @@
|
||||
import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import environment from 'services/environment';
|
||||
import { octokit } from 'services/octokit';
|
||||
import { getIssue } from 'services/git';
|
||||
import { RATE_LIMIT_10_PER_MIN } from 'services/rateLimit';
|
||||
import { validatorCompiler } from 'services/validation';
|
||||
import * as yup from 'yup';
|
||||
|
||||
@ -14,6 +14,9 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
server.get<{ Params: GetIssuesParams }>(
|
||||
'/issues/:hostname',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_10_PER_MIN,
|
||||
},
|
||||
schema: {
|
||||
params: GetIssuesParamsSchema,
|
||||
},
|
||||
@ -22,30 +25,22 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
async (request, reply) => {
|
||||
try {
|
||||
const { hostname } = request.params;
|
||||
const existingIssues = await octokit.request('GET /search/issues', {
|
||||
per_page: 50,
|
||||
q: `in:title+is:issue+repo:${environment.github.owner}/${environment.github.repo}+${hostname}`,
|
||||
});
|
||||
const existingIssue = existingIssues.data.items.find(
|
||||
(issue) =>
|
||||
hostname === issue.title &&
|
||||
(issue.state === 'open' ||
|
||||
(issue.state === 'closed' && issue.labels.some((label) => label.name === 'wontfix')))
|
||||
);
|
||||
const issue = await getIssue({ title: hostname });
|
||||
|
||||
if (existingIssue) {
|
||||
if (
|
||||
issue &&
|
||||
((issue.state === 'closed' && issue.labels.some((label) => label.name === 'wontfix')) ||
|
||||
issue.state === 'open')
|
||||
) {
|
||||
reply.send({
|
||||
data: {
|
||||
flags: existingIssue.labels.map((label) => label.name),
|
||||
url: existingIssue.html_url,
|
||||
flags: issue.labels.map((label) => label.name),
|
||||
url: issue.html_url,
|
||||
},
|
||||
success: true,
|
||||
});
|
||||
} else {
|
||||
reply.send({
|
||||
data: {},
|
||||
success: true,
|
||||
});
|
||||
throw new Error('Failed to find issue');
|
||||
}
|
||||
} catch (error) {
|
||||
reply.send({
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import environment from 'services/environment';
|
||||
import { octokit } from 'services/octokit';
|
||||
import { formatMessage } from 'services/format';
|
||||
import { createIssue, getIssue, updateIssue } from 'services/git';
|
||||
import { RATE_LIMIT_1_PER_MIN } from 'services/rateLimit';
|
||||
import { validatorCompiler } from 'services/validation';
|
||||
import { UAParser } from 'ua-parser-js';
|
||||
import * as yup from 'yup';
|
||||
@ -22,35 +23,34 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
server.post<{ Body: PostReportBody }>(
|
||||
'/report/',
|
||||
{
|
||||
config: {
|
||||
rateLimit: RATE_LIMIT_1_PER_MIN,
|
||||
},
|
||||
schema: {
|
||||
body: PostReportBodySchema,
|
||||
},
|
||||
validatorCompiler,
|
||||
},
|
||||
async (request, reply) => {
|
||||
const { reason, url, userAgent, version } = request.body;
|
||||
const ua = new UAParser(userAgent ?? '').getResult();
|
||||
const hostname = new URL(url).hostname.split('.').slice(-3).join('.').replace('www.', '');
|
||||
const existingIssues = await octokit.request('GET /search/issues', {
|
||||
per_page: 50,
|
||||
q: `in:title+is:issue+repo:${environment.github.owner}/${environment.github.repo}+${hostname}`,
|
||||
});
|
||||
const existingIssue = existingIssues.data.items.find((issue) => hostname === issue.title);
|
||||
|
||||
try {
|
||||
if (existingIssue) {
|
||||
if (existingIssue.labels.some((label) => label.name === 'wontfix')) {
|
||||
const { reason, url, userAgent, version } = request.body;
|
||||
const hostname = new URL(url).hostname.split('.').slice(-3).join('.').replace('www.', '');
|
||||
const issue = await getIssue({ title: hostname });
|
||||
const ua = new UAParser(userAgent ?? '').getResult();
|
||||
|
||||
if (issue) {
|
||||
if (issue.labels.some((label) => label.name === 'wontfix')) {
|
||||
reply.send({
|
||||
data: existingIssue.html_url,
|
||||
data: issue.html_url,
|
||||
errors: ['This issue has been marked as "wontfix" and will not be addressed.'],
|
||||
success: false,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
if (existingIssue.state === 'open') {
|
||||
if (issue.state === 'open') {
|
||||
reply.send({
|
||||
data: existingIssue.html_url,
|
||||
data: issue.html_url,
|
||||
errors: [
|
||||
'This issue already exists. Please refer to the existing issue for updates.',
|
||||
],
|
||||
@ -59,46 +59,27 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
|
||||
return;
|
||||
}
|
||||
|
||||
await octokit.request('PATCH /repos/{owner}/{repo}/issues/{issue_number}', {
|
||||
issue_number: existingIssue.number,
|
||||
await updateIssue({
|
||||
id: issue.id,
|
||||
labels: ['bug'],
|
||||
owner: environment.github.owner,
|
||||
repo: environment.github.repo,
|
||||
state: 'open',
|
||||
});
|
||||
|
||||
reply.send({
|
||||
data: existingIssue.html_url,
|
||||
data: issue.html_url,
|
||||
success: true,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
const response = await octokit.request('POST /repos/{owner}/{repo}/issues', {
|
||||
assignees: [environment.github.owner],
|
||||
body: [
|
||||
'## Issue information',
|
||||
...(ua.browser.name && ua.browser.version
|
||||
? ['#### 🖥️ Browser', `${ua.browser.name} (${ua.browser.version})`]
|
||||
: []),
|
||||
...(ua.device.type && ua.device.vendor
|
||||
? ['#### 📱 Device', `${ua.device.vendor} (${ua.device.type})`]
|
||||
: []),
|
||||
'#### 📝 Reason',
|
||||
reason,
|
||||
'#### 🔗 URL',
|
||||
url,
|
||||
'#### 🏷️ Version',
|
||||
version,
|
||||
].join('\n'),
|
||||
const newIssue = await createIssue({
|
||||
description: formatMessage({ reason, ua, url, version }),
|
||||
labels: ['bug'],
|
||||
owner: environment.github.owner,
|
||||
repo: environment.github.repo,
|
||||
title: hostname,
|
||||
});
|
||||
|
||||
reply.send({
|
||||
data: response.data.html_url,
|
||||
data: newIssue.html_url,
|
||||
success: true,
|
||||
});
|
||||
} catch (error) {
|
||||
|
@ -1,27 +0,0 @@
|
||||
import { FastifyInstance, RouteShorthandOptions } from 'fastify';
|
||||
import fetch from 'node-fetch';
|
||||
import environment from 'services/environment';
|
||||
|
||||
export default (server: FastifyInstance, _options: RouteShorthandOptions, done: () => void) => {
|
||||
server.get('/version/', async (_request, reply) => {
|
||||
try {
|
||||
const options = { headers: { 'Cache-Control': 'no-cache' } };
|
||||
const url = `${environment.github.files}/packages/browser-extension/src/manifest.json`;
|
||||
const { version } = await (await fetch(url, options)).json();
|
||||
|
||||
reply.send({
|
||||
data: {
|
||||
version,
|
||||
},
|
||||
success: true,
|
||||
});
|
||||
} catch (error) {
|
||||
reply.send({
|
||||
errors: [error.message],
|
||||
success: false,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
done();
|
||||
};
|
@ -1,9 +1,7 @@
|
||||
export default {
|
||||
github: {
|
||||
files: 'https://raw.githubusercontent.com/wanhose/cookie-dialog-monster/main',
|
||||
owner: 'wanhose',
|
||||
repo: 'cookie-dialog-monster',
|
||||
token: process.env.GITHUB_TOKEN ?? '',
|
||||
gitea: {
|
||||
raw: process.env.GITEA_RAW ?? '',
|
||||
token: process.env.GITEA_TOKEN ?? '',
|
||||
},
|
||||
port: (process.env.PORT ? Number(process.env.PORT) : undefined) ?? 8080,
|
||||
};
|
||||
|
28
packages/api/src/services/format.ts
Normal file
28
packages/api/src/services/format.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import type { IResult as UAParserResult } from 'ua-parser-js';
|
||||
|
||||
export function formatMessage(params: FormatMessageParams): string {
|
||||
const { reason = '-', ua, url, version } = params;
|
||||
|
||||
return [
|
||||
'## Issue information',
|
||||
...(ua.browser.name && ua.browser.version
|
||||
? ['#### 🖥️ Browser', `${ua.browser.name} (${ua.browser.version})`]
|
||||
: []),
|
||||
...(ua.device.type && ua.device.vendor
|
||||
? ['#### 📱 Device', `${ua.device.vendor} (${ua.device.type})`]
|
||||
: []),
|
||||
'#### 📝 Reason',
|
||||
reason,
|
||||
'#### 🔗 URL',
|
||||
url,
|
||||
'#### 🏷️ Version',
|
||||
version,
|
||||
].join('\n');
|
||||
}
|
||||
|
||||
export interface FormatMessageParams {
|
||||
readonly reason?: string;
|
||||
readonly ua: UAParserResult;
|
||||
readonly url: string;
|
||||
readonly version: string;
|
||||
}
|
150
packages/api/src/services/git.ts
Normal file
150
packages/api/src/services/git.ts
Normal file
@ -0,0 +1,150 @@
|
||||
import environment from './environment';
|
||||
|
||||
const API_URL = 'https://git.wanhose.dev/api/v1/repos/wanhose/cookie-dialog-monster';
|
||||
|
||||
export async function createIssue(params: CreateIssueParams): Promise<Issue> {
|
||||
const { description, title } = params;
|
||||
const body: { [key: string]: number[] | string | string[] } = {
|
||||
assignees: ['wanhose'],
|
||||
body: description,
|
||||
labels: [],
|
||||
title,
|
||||
};
|
||||
const headers = new Headers({
|
||||
Authorization: `token ${environment.gitea.token}`,
|
||||
'Content-Type': 'application/json',
|
||||
});
|
||||
|
||||
if (params.labels) {
|
||||
const response = await fetch(`${API_URL}/labels`, { headers });
|
||||
const labels = (await response.json()) as readonly Label[];
|
||||
|
||||
for (const label of labels) {
|
||||
if (params.labels.includes(label.name)) {
|
||||
(body.labels as number[]).push(label.id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const response = await fetch(`${API_URL}/issues`, {
|
||||
body: JSON.stringify(body),
|
||||
headers,
|
||||
method: 'POST',
|
||||
});
|
||||
const issue = await response.json();
|
||||
|
||||
return issue as unknown as Issue;
|
||||
}
|
||||
|
||||
export async function createIssueComment(params: CreateIssueCommentParams): Promise<Issue | null> {
|
||||
const { description, id } = params;
|
||||
const headers = new Headers({
|
||||
Authorization: `token ${environment.gitea.token}`,
|
||||
'Content-Type': 'application/json',
|
||||
});
|
||||
|
||||
const response = await fetch(`${API_URL}/issues/${id}/comments`, {
|
||||
body: JSON.stringify({ body: description }),
|
||||
headers,
|
||||
method: 'POST',
|
||||
});
|
||||
const issue = await response.json();
|
||||
|
||||
return issue as unknown as Issue | null;
|
||||
}
|
||||
|
||||
export async function getIssue(params: GetIssueParams): Promise<Issue | null> {
|
||||
const { labels, state, title } = params;
|
||||
const headers = new Headers({
|
||||
Authorization: `token ${environment.gitea.token}`,
|
||||
'Content-Type': 'application/json',
|
||||
});
|
||||
const search = new URLSearchParams({
|
||||
q: title,
|
||||
state: 'all',
|
||||
type: 'issues',
|
||||
});
|
||||
|
||||
if (labels) {
|
||||
search.append('labels', `${labels}`);
|
||||
}
|
||||
|
||||
if (state) {
|
||||
search.append('state', state);
|
||||
}
|
||||
|
||||
const response = await fetch(`${API_URL}/issues?${search}`, { headers });
|
||||
const issues: readonly Issue[] = (await response.json()) as unknown as readonly Issue[];
|
||||
|
||||
return issues.find((issue) => issue.title === title) || null;
|
||||
}
|
||||
|
||||
export async function updateIssue(params: UpdateIssueParams): Promise<Issue | null> {
|
||||
const { id, labels, state } = params;
|
||||
const body: { [key: string]: string } = {};
|
||||
const headers = new Headers({
|
||||
Authorization: `token ${environment.gitea.token}`,
|
||||
'Content-Type': 'application/json',
|
||||
});
|
||||
|
||||
if (labels) {
|
||||
await fetch(`${API_URL}/issues/${id}/labels`, {
|
||||
headers,
|
||||
method: 'DELETE',
|
||||
});
|
||||
await fetch(`${API_URL}/issues/${id}/labels`, {
|
||||
body: JSON.stringify({ labels }),
|
||||
headers,
|
||||
method: 'POST',
|
||||
});
|
||||
}
|
||||
|
||||
if (state) {
|
||||
body['state'] = state;
|
||||
}
|
||||
|
||||
const response = await fetch(`${API_URL}/issues/${id}`, {
|
||||
body: JSON.stringify(body),
|
||||
headers,
|
||||
method: 'PATCH',
|
||||
});
|
||||
const issue = await response.json();
|
||||
|
||||
return issue as unknown as Issue | null;
|
||||
}
|
||||
|
||||
export interface CreateIssueParams {
|
||||
readonly description: string;
|
||||
readonly labels?: readonly string[];
|
||||
readonly title: string;
|
||||
}
|
||||
|
||||
export interface CreateIssueCommentParams {
|
||||
readonly description: string;
|
||||
readonly id: number;
|
||||
}
|
||||
|
||||
export interface GetIssueParams {
|
||||
readonly labels?: readonly string[];
|
||||
readonly state?: string;
|
||||
readonly title: string;
|
||||
}
|
||||
|
||||
export interface Issue {
|
||||
readonly html_url: string;
|
||||
readonly id: number;
|
||||
readonly labels: readonly Label[];
|
||||
readonly state: string;
|
||||
readonly title: string;
|
||||
}
|
||||
|
||||
export interface Label {
|
||||
readonly id: number;
|
||||
readonly name: string;
|
||||
}
|
||||
|
||||
export interface UpdateIssueParams {
|
||||
readonly id: number;
|
||||
readonly labels?: readonly string[];
|
||||
readonly state?: string;
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
import { Octokit } from 'octokit';
|
||||
import environment from './environment';
|
||||
|
||||
export const octokit = new Octokit({ auth: environment.github.token });
|
19
packages/api/src/services/rateLimit.ts
Normal file
19
packages/api/src/services/rateLimit.ts
Normal file
@ -0,0 +1,19 @@
|
||||
export const RATE_LIMIT_1_PER_HOUR = {
|
||||
max: 1,
|
||||
timeWindow: '1 hour',
|
||||
};
|
||||
|
||||
export const RATE_LIMIT_1_PER_MIN = {
|
||||
max: 1,
|
||||
timeWindow: '1 minute',
|
||||
};
|
||||
|
||||
export const RATE_LIMIT_10_PER_MIN = {
|
||||
max: 10,
|
||||
timeWindow: '1 minute',
|
||||
};
|
||||
|
||||
export const RATE_LIMIT_3_PER_MIN = {
|
||||
max: 3,
|
||||
timeWindow: '1 minute',
|
||||
};
|
@ -1,4 +1,4 @@
|
||||
# Cookie Monster Dialog Browser Extension
|
||||
# Cookie Dialog Monster Browser Extension
|
||||
|
||||
## Downloads
|
||||
|
||||
@ -11,9 +11,9 @@
|
||||
|
||||
## Compatibility
|
||||
|
||||
- All browsers based on Chromium 124+ (Blisk, Brave, Colibri, Epic Browser, Iron Browser, Vivaldi and many more)
|
||||
- Google Chrome 124+
|
||||
- Microsoft Edge 124+
|
||||
- All browsers based on Chromium 127+ (Blisk, Brave, Colibri, Epic Browser, Iron Browser, Vivaldi and many more)
|
||||
- Google Chrome 127+
|
||||
- Microsoft Edge 127+
|
||||
- Mozilla Firefox 126+
|
||||
- Mozilla Firefox Mobile 126+
|
||||
|
@ -40,6 +40,48 @@
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
<div class="bg-gray-300 text-secondary" role="banner">
|
||||
<div class="max-w-5xl mx-auto p-4 text-justify" id="banner-content-preview">
|
||||
<p class="font-semibold">AN IMPORTANT UPDATE</p>
|
||||
<p class="mt-2">
|
||||
On the morning of October 11, 2024, GitHub unexpectedly hid our repository without any
|
||||
prior notification. This sudden action immediately disrupted all of our API
|
||||
services...
|
||||
<span class="font-bold" id="banner-button" role="button" tabindex="0"> Read more </span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="hidden max-w-5xl mx-auto p-4 text-justify" id="banner-content-full">
|
||||
<p class="font-semibold">AN IMPORTANT UPDATE</p>
|
||||
<p class="mt-2">
|
||||
On the morning of October 11, 2024, GitHub unexpectedly hid our repository without any
|
||||
prior notification. This sudden action immediately disrupted all of our API services, as
|
||||
they relied on files from the repository that were no longer accessible. Our team
|
||||
reached out to GitHub support to understand the situation, but we have not yet received
|
||||
any response. Given the critical impact on our services and the lack of communication
|
||||
from GitHub, we decided to migrate the entire repository to an alternative platform to
|
||||
ensure continuity and reliability.
|
||||
</p>
|
||||
<p class="mt-2">
|
||||
We initially migrated the repository, releases, and open issues (excluding discussions)
|
||||
to GitLab. However, during the migration of issues, GitLab's own spam detection
|
||||
mechanism mistakenly identified its bot activity as spam, leading to our issues being
|
||||
hidden. Despite reaching out to GitLab support, we have not yet received a resolution
|
||||
for this incident. Faced with these ongoing platform limitations and communication
|
||||
delays, we have opted to move forward with self-hosting our own Git system using Gitea
|
||||
to ensure full control over our repository and services.
|
||||
</p>
|
||||
<p class="mt-2">
|
||||
We will no longer support platforms that overlook the contributions of our users and the
|
||||
significant work invested over the last years. Once our GitHub account is reinstated, we
|
||||
will set up a redirect to guide users to our new, self-hosted repository.
|
||||
</p>
|
||||
<p class="mt-2">
|
||||
Thank you to our community for your patience. Your contributions remain vital to this
|
||||
project, and we are committed to ensuring its stability and growth in a more secure
|
||||
environment.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<nav class="bg-secondary text-white">
|
||||
<div class="flex items-center max-w-5xl mx-auto p-4">
|
||||
<svg
|
||||
@ -84,35 +126,41 @@
|
||||
<p class="font-medium">Cookie Dialog Monster</p>
|
||||
<div class="ml-auto">
|
||||
<div class="flex gap-4 text-white">
|
||||
<a class="contents" href="mailto:hello@wanhose.dev" title="Email">
|
||||
<a class="inline-flex" href="mailto:hello@wanhose.dev" title="Email">
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-6 w-6"
|
||||
viewBox="0 0 20 20"
|
||||
fill="currentColor"
|
||||
class="h-6 shrink-0 w-6"
|
||||
fill="none"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<path
|
||||
fill-rule="evenodd"
|
||||
d="M14.243 5.757a6 6 0 10-.986 9.284 1 1 0 111.087 1.678A8 8 0 1118 10a3 3 0 01-4.8 2.401A4 4 0 1114 10a1 1 0 102 0c0-1.537-.586-3.07-1.757-4.243zM12 10a2 2 0 10-4 0 2 2 0 004 0z"
|
||||
clip-rule="evenodd"
|
||||
/>
|
||||
<circle cx="12" cy="12" r="4"></circle>
|
||||
<path d="M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94"></path>
|
||||
</svg>
|
||||
</a>
|
||||
<a
|
||||
class="contents"
|
||||
href="https://github.com/wanhose/cookie-dialog-monster"
|
||||
class="inline-flex"
|
||||
href="https://git.wanhose.dev/wanhose/cookie-dialog-monster"
|
||||
target="_blank"
|
||||
title="GitHub"
|
||||
title="Gitea"
|
||||
>
|
||||
<svg
|
||||
class="h-6 w-6"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
class="h-6 shrink-0 w-6"
|
||||
fill="none"
|
||||
height="24"
|
||||
stroke-linecap="round"
|
||||
stroke-linejoin="round"
|
||||
stroke-width="2"
|
||||
stroke="currentColor"
|
||||
viewBox="0 0 24 24"
|
||||
fill="currentColor"
|
||||
width="24"
|
||||
>
|
||||
<path
|
||||
d="M10.9,2.1c-4.6,0.5-8.3,4.2-8.8,8.7c-0.5,4.7,2.2,8.9,6.3,10.5C8.7,21.4,9,21.2,9,20.8v-1.6c0,0-0.4,0.1-0.9,0.1 c-1.4,0-2-1.2-2.1-1.9c-0.1-0.4-0.3-0.7-0.6-1C5.1,16.3,5,16.3,5,16.2C5,16,5.3,16,5.4,16c0.6,0,1.1,0.7,1.3,1c0.5,0.8,1.1,1,1.4,1 c0.4,0,0.7-0.1,0.9-0.2c0.1-0.7,0.4-1.4,1-1.8c-2.3-0.5-4-1.8-4-4c0-1.1,0.5-2.2,1.2-3C7.1,8.8,7,8.3,7,7.6C7,7.2,7,6.6,7.3,6 c0,0,1.4,0,2.8,1.3C10.6,7.1,11.3,7,12,7s1.4,0.1,2,0.3C15.3,6,16.8,6,16.8,6C17,6.6,17,7.2,17,7.6c0,0.8-0.1,1.2-0.2,1.4 c0.7,0.8,1.2,1.8,1.2,3c0,2.2-1.7,3.5-4,4c0.6,0.5,1,1.4,1,2.3v2.6c0,0.3,0.3,0.6,0.7,0.5c3.7-1.5,6.3-5.1,6.3-9.3 C22,6.1,16.9,1.4,10.9,2.1z"
|
||||
/>
|
||||
<circle cx="18" cy="18" r="3"></circle>
|
||||
<circle cx="6" cy="6" r="3"></circle>
|
||||
<path d="M13 6h3a2 2 0 0 1 2 2v7"></path>
|
||||
<line x1="6" y1="9" x2="6" y2="21"></line>
|
||||
</svg>
|
||||
</a>
|
||||
</div>
|
||||
@ -327,8 +375,8 @@
|
||||
<h3 class="font-medium mt-4 text-lg text-secondary">Open source</h3>
|
||||
<p class="mt-2 text-gray-500">
|
||||
Feel free to contribute to our
|
||||
<a href="https://github.com/wanhose/cookie-dialog-monster/pulls" target="_blank">
|
||||
GitHub repository
|
||||
<a href="https://git.wanhose.dev/wanhose/cookie-dialog-monster/pulls" target="_blank">
|
||||
GitLab repository
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
@ -478,7 +526,7 @@
|
||||
version following
|
||||
<a
|
||||
class="underline"
|
||||
href="https://github.com/wanhose/cookie-dialog-monster/tree/main/packages/browser-extension#installation-for-mozilla-firefox-users"
|
||||
href="https://git.wanhose.dev/wanhose/cookie-dialog-monster/src/branch/main/packages/browser-extension#installation-for-mozilla-firefox-users"
|
||||
id="firefox-guide-link"
|
||||
target="_blank"
|
||||
>
|
||||
@ -492,7 +540,7 @@
|
||||
the extension. We recommend you to follow
|
||||
<a
|
||||
class="underline"
|
||||
href="https://github.com/wanhose/cookie-dialog-monster/tree/main/packages/browser-extension#installation-for-advanced-and-non-listed-browser-users"
|
||||
href="https://git.wanhose.dev/wanhose/cookie-dialog-monster/src/branch/main/packages/browser-extension#installation-for-advanced-and-non-listed-browser-users"
|
||||
target="_blank"
|
||||
>
|
||||
this guide</a
|
||||
@ -504,19 +552,29 @@
|
||||
<div class="max-w-5xl mx-auto">
|
||||
<p class="text-center text-white text-sm">
|
||||
An open source project built by you and
|
||||
<a class="underline" href="https://github.com/wanhose" target="_blank"> wanhose</a>
|
||||
<a class="underline" href="https://git.wanhose.com/wanhose" target="_blank"> wanhose</a>
|
||||
</p>
|
||||
</div>
|
||||
</footer>
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const bannerButton = document.getElementById('banner-button');
|
||||
const firefoxGuideLink = document.getElementById('firefox-guide-link');
|
||||
const firefoxLink = document.getElementById('firefox-link');
|
||||
const isMobile = /Android|Mobi/i.test(navigator.userAgent);
|
||||
|
||||
bannerButton.addEventListener('click', () => {
|
||||
const bannerContentFull = document.getElementById('banner-content-full');
|
||||
const bannerContentPreview = document.getElementById('banner-content-preview');
|
||||
|
||||
bannerButton.classList.add('hidden');
|
||||
bannerContentFull.classList.remove('hidden');
|
||||
bannerContentPreview.classList.add('hidden');
|
||||
});
|
||||
|
||||
if (isMobile) {
|
||||
firefoxGuideLink.href =
|
||||
'https://github.com/wanhose/cookie-dialog-monster/tree/main/packages/browser-extension#installation-for-mozilla-firefox-mobile-users';
|
||||
'https://git.wanhose.dev/wanhose/cookie-dialog-monster/src/branch/main/packages/browser-extension#installation-for-mozilla-firefox-mobile-users';
|
||||
firefoxLink.href = '/releases/latest-mozilla-mobile.xpi';
|
||||
}
|
||||
});
|
||||
|
@ -23,6 +23,7 @@ module.exports = {
|
||||
'firefox-3': '#fee545',
|
||||
primary: '#3dd9eb',
|
||||
secondary: '#34495e',
|
||||
tertiary: '#6b7280',
|
||||
},
|
||||
fontFamily: {
|
||||
sans: ['Inter', ...defaultTheme.fontFamily.sans],
|
||||
|
507
yarn.lock
507
yarn.lock
@ -498,316 +498,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/app@npm:^14.0.2":
|
||||
version: 14.1.0
|
||||
resolution: "@octokit/app@npm:14.1.0"
|
||||
dependencies:
|
||||
"@octokit/auth-app": "npm:^6.0.0"
|
||||
"@octokit/auth-unauthenticated": "npm:^5.0.0"
|
||||
"@octokit/core": "npm:^5.0.0"
|
||||
"@octokit/oauth-app": "npm:^6.0.0"
|
||||
"@octokit/plugin-paginate-rest": "npm:^9.0.0"
|
||||
"@octokit/types": "npm:^12.0.0"
|
||||
"@octokit/webhooks": "npm:^12.0.4"
|
||||
checksum: 10c0/c115209f3c8dd05ec5acb5897f9e914177a07e335a7ffb985133d51302112be98122a1c3e3de05018885657ca4e5c9d42949eeb24b39d5881e80ed6411b81857
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/auth-app@npm:^6.0.0":
|
||||
version: 6.1.1
|
||||
resolution: "@octokit/auth-app@npm:6.1.1"
|
||||
dependencies:
|
||||
"@octokit/auth-oauth-app": "npm:^7.1.0"
|
||||
"@octokit/auth-oauth-user": "npm:^4.1.0"
|
||||
"@octokit/request": "npm:^8.3.1"
|
||||
"@octokit/request-error": "npm:^5.1.0"
|
||||
"@octokit/types": "npm:^13.1.0"
|
||||
deprecation: "npm:^2.3.1"
|
||||
lru-cache: "npm:^10.0.0"
|
||||
universal-github-app-jwt: "npm:^1.1.2"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/633fa49ef1d688f1db050fd359d224f5529f0df20e2a5f8f7e78d5f81f33d18cbcde735ea5222b0bcf058b5b93bff88d1dd6f614b9c9443bda5fa0921757cf4f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/auth-oauth-app@npm:^7.0.0, @octokit/auth-oauth-app@npm:^7.1.0":
|
||||
version: 7.1.0
|
||||
resolution: "@octokit/auth-oauth-app@npm:7.1.0"
|
||||
dependencies:
|
||||
"@octokit/auth-oauth-device": "npm:^6.1.0"
|
||||
"@octokit/auth-oauth-user": "npm:^4.1.0"
|
||||
"@octokit/request": "npm:^8.3.1"
|
||||
"@octokit/types": "npm:^13.0.0"
|
||||
"@types/btoa-lite": "npm:^1.0.0"
|
||||
btoa-lite: "npm:^1.0.0"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/e23c5968426949181beea3ca89bb193885f4ec481b194a0c3bb252b02b1ff3f78908541f4ee6381563cfe6f23ed07e0c0eb33a842b1a6f85301a8266d4d46649
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/auth-oauth-device@npm:^6.1.0":
|
||||
version: 6.1.0
|
||||
resolution: "@octokit/auth-oauth-device@npm:6.1.0"
|
||||
dependencies:
|
||||
"@octokit/oauth-methods": "npm:^4.1.0"
|
||||
"@octokit/request": "npm:^8.3.1"
|
||||
"@octokit/types": "npm:^13.0.0"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/74e17b76f55c8503dc1b4d95e4f52ee49900f7f720983d1725ad29361c9f413d22aa7621e8809ea644bb225686b3ee70f147a9e5944f3c1c1cccba55fa414422
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/auth-oauth-user@npm:^4.0.0, @octokit/auth-oauth-user@npm:^4.1.0":
|
||||
version: 4.1.0
|
||||
resolution: "@octokit/auth-oauth-user@npm:4.1.0"
|
||||
dependencies:
|
||||
"@octokit/auth-oauth-device": "npm:^6.1.0"
|
||||
"@octokit/oauth-methods": "npm:^4.1.0"
|
||||
"@octokit/request": "npm:^8.3.1"
|
||||
"@octokit/types": "npm:^13.0.0"
|
||||
btoa-lite: "npm:^1.0.0"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/5d17d1e86ca89d4f2c440de4e5a648a1646818f0683a6230558279d71151a6b01f1228ccc4fc6e3ae24da92fa18810fac7b2bb6e019646f1f46be3928f522e7f
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/auth-token@npm:^4.0.0":
|
||||
version: 4.0.0
|
||||
resolution: "@octokit/auth-token@npm:4.0.0"
|
||||
checksum: 10c0/57acaa6c394c5abab2f74e8e1dcf4e7a16b236f713c77a54b8f08e2d14114de94b37946259e33ec2aab0566b26f724c2b71d2602352b59e541a9854897618f3c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/auth-unauthenticated@npm:^5.0.0":
|
||||
version: 5.0.1
|
||||
resolution: "@octokit/auth-unauthenticated@npm:5.0.1"
|
||||
dependencies:
|
||||
"@octokit/request-error": "npm:^5.0.0"
|
||||
"@octokit/types": "npm:^12.0.0"
|
||||
checksum: 10c0/c9cad429981a34021ec9f1fdc238c39eba36807683859a3bffb9dd66abf1ce016c9a2ff31fe09313458e59b37f8fa91522c0e34a1daecefdabcdf23a494fbcc2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/core@npm:^5.0.0":
|
||||
version: 5.2.0
|
||||
resolution: "@octokit/core@npm:5.2.0"
|
||||
dependencies:
|
||||
"@octokit/auth-token": "npm:^4.0.0"
|
||||
"@octokit/graphql": "npm:^7.1.0"
|
||||
"@octokit/request": "npm:^8.3.1"
|
||||
"@octokit/request-error": "npm:^5.1.0"
|
||||
"@octokit/types": "npm:^13.0.0"
|
||||
before-after-hook: "npm:^2.2.0"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/9dc5cf55b335da382f340ef74c8009c06a1f7157b0530d3ff6cacf179887811352dcd405448e37849d73f17b28970b7817995be2260ce902dad52b91905542f0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/endpoint@npm:^9.0.1":
|
||||
version: 9.0.5
|
||||
resolution: "@octokit/endpoint@npm:9.0.5"
|
||||
dependencies:
|
||||
"@octokit/types": "npm:^13.1.0"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/e9bbb2111abe691c146075abb1b6f724a9b77fa8bfefdaaa82b8ebad6c8790e949f2367bb0b79800fef93ad72807513333e83e8ffba389bc85215535f63534d9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/graphql@npm:^7.1.0":
|
||||
version: 7.1.0
|
||||
resolution: "@octokit/graphql@npm:7.1.0"
|
||||
dependencies:
|
||||
"@octokit/request": "npm:^8.3.0"
|
||||
"@octokit/types": "npm:^13.0.0"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/6d50a013d151f416fc837644e394e8b8872da7b17b181da119842ca569b0971e4dfacda55af6c329b51614e436945415dd5bd75eb3652055fdb754bbcd20d9d1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/oauth-app@npm:^6.0.0":
|
||||
version: 6.1.0
|
||||
resolution: "@octokit/oauth-app@npm:6.1.0"
|
||||
dependencies:
|
||||
"@octokit/auth-oauth-app": "npm:^7.0.0"
|
||||
"@octokit/auth-oauth-user": "npm:^4.0.0"
|
||||
"@octokit/auth-unauthenticated": "npm:^5.0.0"
|
||||
"@octokit/core": "npm:^5.0.0"
|
||||
"@octokit/oauth-authorization-url": "npm:^6.0.2"
|
||||
"@octokit/oauth-methods": "npm:^4.0.0"
|
||||
"@types/aws-lambda": "npm:^8.10.83"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/9d67ca196eabbb397c677e006d28148d6c5185f88d86e5444c219e43b95e0ecaee5d31807ea24aedb64a76d61c0a53acd8091613e15d10733f41960bd981463c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/oauth-authorization-url@npm:^6.0.2":
|
||||
version: 6.0.2
|
||||
resolution: "@octokit/oauth-authorization-url@npm:6.0.2"
|
||||
checksum: 10c0/8c06e538b3e392f0fa68f3347078c32f92c03474eb214e4e82774513a54c164bac14c228f7dbd79d22a920df1a8b2e0765dd6ee45929bda0b77e5cf7f0d92c71
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/oauth-methods@npm:^4.0.0, @octokit/oauth-methods@npm:^4.1.0":
|
||||
version: 4.1.0
|
||||
resolution: "@octokit/oauth-methods@npm:4.1.0"
|
||||
dependencies:
|
||||
"@octokit/oauth-authorization-url": "npm:^6.0.2"
|
||||
"@octokit/request": "npm:^8.3.1"
|
||||
"@octokit/request-error": "npm:^5.1.0"
|
||||
"@octokit/types": "npm:^13.0.0"
|
||||
btoa-lite: "npm:^1.0.0"
|
||||
checksum: 10c0/3ab7ab41e82faebb662bfc4cc20756f008adb37b447386c29ddb09cbac5d1867b1b23f2f8dd268e06dca5ff1c874162e01d475f15634b42e6ab0a95471dcc365
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/openapi-types@npm:^20.0.0":
|
||||
version: 20.0.0
|
||||
resolution: "@octokit/openapi-types@npm:20.0.0"
|
||||
checksum: 10c0/5176dcc3b9d182ede3d446750cfa5cf31139624785a73fcf3511e3102a802b4d7cc45e999c27ed91d73fe8b7d718c8c406facb48688926921a71fe603b7db95d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/openapi-types@npm:^22.2.0":
|
||||
version: 22.2.0
|
||||
resolution: "@octokit/openapi-types@npm:22.2.0"
|
||||
checksum: 10c0/a45bfc735611e836df0729f5922bbd5811d401052b972d1e3bc1278a2d2403e00f4552ce9d1f2793f77f167d212da559c5cb9f1b02c935114ad6d898779546ee
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/plugin-paginate-graphql@npm:^4.0.0":
|
||||
version: 4.0.1
|
||||
resolution: "@octokit/plugin-paginate-graphql@npm:4.0.1"
|
||||
peerDependencies:
|
||||
"@octokit/core": ">=5"
|
||||
checksum: 10c0/d559cdc2b5de107a7da5384b5241d1dfdc1038db1c4a70aca8a450c996315936844e0a1888216fb568c7a272bc6adf6667f897e0976b01e68085663b166cc533
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/plugin-paginate-rest@npm:11.3.1":
|
||||
version: 11.3.1
|
||||
resolution: "@octokit/plugin-paginate-rest@npm:11.3.1"
|
||||
dependencies:
|
||||
"@octokit/types": "npm:^13.5.0"
|
||||
peerDependencies:
|
||||
"@octokit/core": 5
|
||||
checksum: 10c0/72107ff7e459c49d1f13bbe44ac07b073497692eba28cb5ac6dbfa41e0ebc059ad7bccfa3dd45d3165348adcc2ede8ac159f8a9b637389b8e335af16aaa01469
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/plugin-paginate-rest@npm:^9.0.0":
|
||||
version: 9.2.1
|
||||
resolution: "@octokit/plugin-paginate-rest@npm:9.2.1"
|
||||
dependencies:
|
||||
"@octokit/types": "npm:^12.6.0"
|
||||
peerDependencies:
|
||||
"@octokit/core": 5
|
||||
checksum: 10c0/1dc55032a9e0c3e6440080a319975c9e4f189913fbc8870a48048d0c712473ea3d902ba247a37a46d45d502859b2728731a0d285107e4b0fa628d380f87163b4
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/plugin-rest-endpoint-methods@npm:13.2.2":
|
||||
version: 13.2.2
|
||||
resolution: "@octokit/plugin-rest-endpoint-methods@npm:13.2.2"
|
||||
dependencies:
|
||||
"@octokit/types": "npm:^13.5.0"
|
||||
peerDependencies:
|
||||
"@octokit/core": ^5
|
||||
checksum: 10c0/0f2b14b7a185b49908bcc01bcae9849aae2da46c88f500c143d230caa3cd35540839b916e88a4642c60a5499d33e7a37faf1aa42c5bab270cefc10f5d6202893
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/plugin-retry@npm:^6.0.0":
|
||||
version: 6.0.1
|
||||
resolution: "@octokit/plugin-retry@npm:6.0.1"
|
||||
dependencies:
|
||||
"@octokit/request-error": "npm:^5.0.0"
|
||||
"@octokit/types": "npm:^12.0.0"
|
||||
bottleneck: "npm:^2.15.3"
|
||||
peerDependencies:
|
||||
"@octokit/core": ">=5"
|
||||
checksum: 10c0/721b5a7949e3defdec5f1b451850ab924162fd2712c9ab59a2aaaad5b9ed6ee2a9447fe82ec1f91086cf23aaaceb14ff4e74de67ba3c63c5029e59c67b50979c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/plugin-throttling@npm:^8.0.0":
|
||||
version: 8.2.0
|
||||
resolution: "@octokit/plugin-throttling@npm:8.2.0"
|
||||
dependencies:
|
||||
"@octokit/types": "npm:^12.2.0"
|
||||
bottleneck: "npm:^2.15.3"
|
||||
peerDependencies:
|
||||
"@octokit/core": ^5.0.0
|
||||
checksum: 10c0/e65de9958ac5f29ba473bb969d25738f7466dad1b64e8181199c71438c06a6333ba655bd5194581a24199ca06fc9a6e752d0a4782b554ef603b0acffe9f8bfbd
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/request-error@npm:^5.0.0, @octokit/request-error@npm:^5.1.0":
|
||||
version: 5.1.0
|
||||
resolution: "@octokit/request-error@npm:5.1.0"
|
||||
dependencies:
|
||||
"@octokit/types": "npm:^13.1.0"
|
||||
deprecation: "npm:^2.0.0"
|
||||
once: "npm:^1.4.0"
|
||||
checksum: 10c0/61e688abce17dd020ea1e343470b9758f294bfe5432c5cb24bdb5b9b10f90ecec1ecaaa13b48df9288409e0da14252f6579a20f609af155bd61dc778718b7738
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/request@npm:^8.3.0, @octokit/request@npm:^8.3.1":
|
||||
version: 8.4.0
|
||||
resolution: "@octokit/request@npm:8.4.0"
|
||||
dependencies:
|
||||
"@octokit/endpoint": "npm:^9.0.1"
|
||||
"@octokit/request-error": "npm:^5.1.0"
|
||||
"@octokit/types": "npm:^13.1.0"
|
||||
universal-user-agent: "npm:^6.0.0"
|
||||
checksum: 10c0/b857782ac2ff5387e9cc502759de73ea642c498c97d06ad2ecd8a395e4b9532d9f3bc3fc460e0d3d0e8f0d43c917a90c493e43766d37782b3979d3afffbf1b4b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/types@npm:^12.0.0, @octokit/types@npm:^12.2.0, @octokit/types@npm:^12.6.0":
|
||||
version: 12.6.0
|
||||
resolution: "@octokit/types@npm:12.6.0"
|
||||
dependencies:
|
||||
"@octokit/openapi-types": "npm:^20.0.0"
|
||||
checksum: 10c0/0bea58bda46c93287f5a80a0e52bc60e7dc7136b8a38c3569d63d073fb9df4a56acdb9d9bdba9978f37c374a4a6e3e52886ef5b08cace048adb0012cacef942c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/types@npm:^13.0.0, @octokit/types@npm:^13.1.0, @octokit/types@npm:^13.5.0":
|
||||
version: 13.5.0
|
||||
resolution: "@octokit/types@npm:13.5.0"
|
||||
dependencies:
|
||||
"@octokit/openapi-types": "npm:^22.2.0"
|
||||
checksum: 10c0/355ebc6776ce23feace1b1be0927cdda758790fda83068109c4f27b354dcd43d0447d4dc24e5eafdb596465469ea1baed23f3fd63adfec508cc375ccd1dcb0a3
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/webhooks-methods@npm:^4.1.0":
|
||||
version: 4.1.0
|
||||
resolution: "@octokit/webhooks-methods@npm:4.1.0"
|
||||
checksum: 10c0/153b344b4b20b48fdf89225f482bd9aa612998c28e43d032756d5a2ec7ebf117922fb6a95ee7c0a985cab6924fa4de3378c60e9ff41e384498b8cb7aad3771f2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/webhooks-types@npm:7.4.0":
|
||||
version: 7.4.0
|
||||
resolution: "@octokit/webhooks-types@npm:7.4.0"
|
||||
checksum: 10c0/c2f06bdee4cb3f8f9e685a5a0289bd59673954b9bd25701480ba204ea23333f9bcc4a6f757f563ae5a1490f58eace8ebbc7aa8a1737c276ccc1cf5c3e2fe2ebe
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@octokit/webhooks@npm:^12.0.4":
|
||||
version: 12.2.0
|
||||
resolution: "@octokit/webhooks@npm:12.2.0"
|
||||
dependencies:
|
||||
"@octokit/request-error": "npm:^5.0.0"
|
||||
"@octokit/webhooks-methods": "npm:^4.1.0"
|
||||
"@octokit/webhooks-types": "npm:7.4.0"
|
||||
aggregate-error: "npm:^3.1.0"
|
||||
checksum: 10c0/d22c55e99726c32d55b9faf8cde02274c3f6cd82992a5cedf795de401656cc716ff151b0dd6e4173d12dc335583944415613132a9dbf18ee6ffa0d550479a1c2
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@pkgjs/parseargs@npm:^0.11.0":
|
||||
version: 0.11.0
|
||||
resolution: "@pkgjs/parseargs@npm:0.11.0"
|
||||
@ -857,20 +547,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/aws-lambda@npm:^8.10.83":
|
||||
version: 8.10.137
|
||||
resolution: "@types/aws-lambda@npm:8.10.137"
|
||||
checksum: 10c0/32272f8e9dfa88987cbc68e999554225d07282c3a884d769cdec7116fcec1f7e716914a9ac0d8afd79cf6c955b09e7bcfa6258dda6daa3f532c7eb97bf47bff1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/btoa-lite@npm:^1.0.0":
|
||||
version: 1.0.2
|
||||
resolution: "@types/btoa-lite@npm:1.0.2"
|
||||
checksum: 10c0/daffbb47e4fe6493df70d83878b550adab48bab2f02b3591a59367af3ecebf34c971e070479ab68d83ca59cbeefbc61a50d9a7552f639dc908706183e0222bab
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/conventional-commits-parser@npm:^5.0.0":
|
||||
version: 5.0.0
|
||||
resolution: "@types/conventional-commits-parser@npm:5.0.0"
|
||||
@ -894,15 +570,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/jsonwebtoken@npm:^9.0.0":
|
||||
version: 9.0.6
|
||||
resolution: "@types/jsonwebtoken@npm:9.0.6"
|
||||
dependencies:
|
||||
"@types/node": "npm:*"
|
||||
checksum: 10c0/9c29e3896e5fb6056e54d87514643e59e0cfb966ae25171a107776270195bba955f0373e98c8ed6450c145b18984f5df9cf0fcac360f382cec3c7c4d3510b202
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"@types/node-fetch@npm:2.6.11":
|
||||
version: 2.6.11
|
||||
resolution: "@types/node-fetch@npm:2.6.11"
|
||||
@ -1159,7 +826,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"aggregate-error@npm:^3.0.0, aggregate-error@npm:^3.1.0":
|
||||
"aggregate-error@npm:^3.0.0":
|
||||
version: 3.1.0
|
||||
resolution: "aggregate-error@npm:3.1.0"
|
||||
dependencies:
|
||||
@ -1323,7 +990,6 @@ __metadata:
|
||||
fastify: "npm:^4.26.2"
|
||||
node-fetch: "npm:^2.7.0"
|
||||
nodemon: "npm:^3.1.0"
|
||||
octokit: "npm:^3.2.1"
|
||||
rimraf: "npm:^5.0.5"
|
||||
ts-node: "npm:^10.9.2"
|
||||
tsconfig-paths: "npm:^4.2.0"
|
||||
@ -1422,13 +1088,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"before-after-hook@npm:^2.2.0":
|
||||
version: 2.2.3
|
||||
resolution: "before-after-hook@npm:2.2.3"
|
||||
checksum: 10c0/0488c4ae12df758ca9d49b3bb27b47fd559677965c52cae7b335784724fb8bf96c42b6e5ba7d7afcbc31facb0e294c3ef717cc41c5bc2f7bd9e76f8b90acd31c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"binary-extensions@npm:^2.0.0":
|
||||
version: 2.3.0
|
||||
resolution: "binary-extensions@npm:2.3.0"
|
||||
@ -1436,13 +1095,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"bottleneck@npm:^2.15.3":
|
||||
version: 2.19.5
|
||||
resolution: "bottleneck@npm:2.19.5"
|
||||
checksum: 10c0/b0f72e45b2e0f56a21ba720183f16bef8e693452fb0495d997fa354e42904353a94bd8fd429868e6751bc85e54b6755190519eed5a0ae0a94a5185209ae7c6d0
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"boxen@npm:7.0.0":
|
||||
version: 7.0.0
|
||||
resolution: "boxen@npm:7.0.0"
|
||||
@ -1500,20 +1152,6 @@ __metadata:
|
||||
languageName: unknown
|
||||
linkType: soft
|
||||
|
||||
"btoa-lite@npm:^1.0.0":
|
||||
version: 1.0.0
|
||||
resolution: "btoa-lite@npm:1.0.0"
|
||||
checksum: 10c0/7a4f0568ae3c915464650f98fde7901ae07b13a333a614515a0c86876b3528670fafece28dfef9745d971a613bb83341823afb0c20c6f318b384c1e364b9eb95
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"buffer-equal-constant-time@npm:1.0.1":
|
||||
version: 1.0.1
|
||||
resolution: "buffer-equal-constant-time@npm:1.0.1"
|
||||
checksum: 10c0/fb2294e64d23c573d0dd1f1e7a466c3e978fe94a4e0f8183937912ca374619773bef8e2aceb854129d2efecbbc515bbd0cc78d2734a3e3031edb0888531bbc8e
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"buffer-from@npm:^1.0.0":
|
||||
version: 1.1.2
|
||||
resolution: "buffer-from@npm:1.1.2"
|
||||
@ -2013,13 +1651,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"deprecation@npm:^2.0.0, deprecation@npm:^2.3.1":
|
||||
version: 2.3.1
|
||||
resolution: "deprecation@npm:2.3.1"
|
||||
checksum: 10c0/23d688ba66b74d09b908c40a76179418acbeeb0bfdf218c8075c58ad8d0c315130cb91aa3dffb623aa3a411a3569ce56c6460de6c8d69071c17fe6dd2442f032
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"didyoumean@npm:^1.2.2":
|
||||
version: 1.2.2
|
||||
resolution: "didyoumean@npm:1.2.2"
|
||||
@ -2085,15 +1716,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ecdsa-sig-formatter@npm:1.0.11":
|
||||
version: 1.0.11
|
||||
resolution: "ecdsa-sig-formatter@npm:1.0.11"
|
||||
dependencies:
|
||||
safe-buffer: "npm:^5.0.1"
|
||||
checksum: 10c0/ebfbf19d4b8be938f4dd4a83b8788385da353d63307ede301a9252f9f7f88672e76f2191618fd8edfc2f24679236064176fab0b78131b161ee73daa37125408c
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"emoji-regex@npm:^10.3.0":
|
||||
version: 10.3.0
|
||||
resolution: "emoji-regex@npm:10.3.0"
|
||||
@ -3276,45 +2898,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jsonwebtoken@npm:^9.0.2":
|
||||
version: 9.0.2
|
||||
resolution: "jsonwebtoken@npm:9.0.2"
|
||||
dependencies:
|
||||
jws: "npm:^3.2.2"
|
||||
lodash.includes: "npm:^4.3.0"
|
||||
lodash.isboolean: "npm:^3.0.3"
|
||||
lodash.isinteger: "npm:^4.0.4"
|
||||
lodash.isnumber: "npm:^3.0.3"
|
||||
lodash.isplainobject: "npm:^4.0.6"
|
||||
lodash.isstring: "npm:^4.0.1"
|
||||
lodash.once: "npm:^4.0.0"
|
||||
ms: "npm:^2.1.1"
|
||||
semver: "npm:^7.5.4"
|
||||
checksum: 10c0/d287a29814895e866db2e5a0209ce730cbc158441a0e5a70d5e940eb0d28ab7498c6bf45029cc8b479639bca94056e9a7f254e2cdb92a2f5750c7f358657a131
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jwa@npm:^1.4.1":
|
||||
version: 1.4.1
|
||||
resolution: "jwa@npm:1.4.1"
|
||||
dependencies:
|
||||
buffer-equal-constant-time: "npm:1.0.1"
|
||||
ecdsa-sig-formatter: "npm:1.0.11"
|
||||
safe-buffer: "npm:^5.0.1"
|
||||
checksum: 10c0/5c533540bf38702e73cf14765805a94027c66a0aa8b16bc3e89d8d905e61a4ce2791e87e21be97d1293a5ee9d4f3e5e47737e671768265ca4f25706db551d5e9
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"jws@npm:^3.2.2":
|
||||
version: 3.2.2
|
||||
resolution: "jws@npm:3.2.2"
|
||||
dependencies:
|
||||
jwa: "npm:^1.4.1"
|
||||
safe-buffer: "npm:^5.0.1"
|
||||
checksum: 10c0/e770704533d92df358adad7d1261fdecad4d7b66fa153ba80d047e03ca0f1f73007ce5ed3fbc04d2eba09ba6e7e6e645f351e08e5ab51614df1b0aa4f384dfff
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"keyv@npm:^4.5.3":
|
||||
version: 4.5.4
|
||||
resolution: "keyv@npm:4.5.4"
|
||||
@ -3432,34 +3015,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.includes@npm:^4.3.0":
|
||||
version: 4.3.0
|
||||
resolution: "lodash.includes@npm:4.3.0"
|
||||
checksum: 10c0/7ca498b9b75bf602d04e48c0adb842dfc7d90f77bcb2a91a2b2be34a723ad24bc1c8b3683ec6b2552a90f216c723cdea530ddb11a3320e08fa38265703978f4b
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.isboolean@npm:^3.0.3":
|
||||
version: 3.0.3
|
||||
resolution: "lodash.isboolean@npm:3.0.3"
|
||||
checksum: 10c0/0aac604c1ef7e72f9a6b798e5b676606042401dd58e49f051df3cc1e3adb497b3d7695635a5cbec4ae5f66456b951fdabe7d6b387055f13267cde521f10ec7f7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.isinteger@npm:^4.0.4":
|
||||
version: 4.0.4
|
||||
resolution: "lodash.isinteger@npm:4.0.4"
|
||||
checksum: 10c0/4c3e023a2373bf65bf366d3b8605b97ec830bca702a926939bcaa53f8e02789b6a176e7f166b082f9365bfec4121bfeb52e86e9040cb8d450e64c858583f61b7
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.isnumber@npm:^3.0.3":
|
||||
version: 3.0.3
|
||||
resolution: "lodash.isnumber@npm:3.0.3"
|
||||
checksum: 10c0/2d01530513a1ee4f72dd79528444db4e6360588adcb0e2ff663db2b3f642d4bb3d687051ae1115751ca9082db4fdef675160071226ca6bbf5f0c123dbf0aa12d
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.isplainobject@npm:^4.0.6":
|
||||
version: 4.0.6
|
||||
resolution: "lodash.isplainobject@npm:4.0.6"
|
||||
@ -3467,13 +3022,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.isstring@npm:^4.0.1":
|
||||
version: 4.0.1
|
||||
resolution: "lodash.isstring@npm:4.0.1"
|
||||
checksum: 10c0/09eaf980a283f9eef58ef95b30ec7fee61df4d6bf4aba3b5f096869cc58f24c9da17900febc8ffd67819b4e29de29793190e88dc96983db92d84c95fa85d1c92
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.kebabcase@npm:^4.1.1":
|
||||
version: 4.1.1
|
||||
resolution: "lodash.kebabcase@npm:4.1.1"
|
||||
@ -3495,13 +3043,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.once@npm:^4.0.0":
|
||||
version: 4.1.1
|
||||
resolution: "lodash.once@npm:4.1.1"
|
||||
checksum: 10c0/46a9a0a66c45dd812fcc016e46605d85ad599fe87d71a02f6736220554b52ffbe82e79a483ad40f52a8a95755b0d1077fba259da8bfb6694a7abbf4a48f1fc04
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lodash.snakecase@npm:^4.1.1":
|
||||
version: 4.1.1
|
||||
resolution: "lodash.snakecase@npm:4.1.1"
|
||||
@ -3552,7 +3093,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"lru-cache@npm:^10.0.0, lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
|
||||
"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0":
|
||||
version: 10.2.2
|
||||
resolution: "lru-cache@npm:10.2.2"
|
||||
checksum: 10c0/402d31094335851220d0b00985084288136136992979d0e015f0f1697e15d1c86052d7d53ae86b614e5b058425606efffc6969a31a091085d7a2b80a8a1e26d6
|
||||
@ -3833,13 +3374,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"ms@npm:^2.1.1":
|
||||
version: 2.1.3
|
||||
resolution: "ms@npm:2.1.3"
|
||||
checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"mz@npm:^2.7.0":
|
||||
version: 2.7.0
|
||||
resolution: "mz@npm:2.7.0"
|
||||
@ -4006,24 +3540,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"octokit@npm:^3.2.1":
|
||||
version: 3.2.1
|
||||
resolution: "octokit@npm:3.2.1"
|
||||
dependencies:
|
||||
"@octokit/app": "npm:^14.0.2"
|
||||
"@octokit/core": "npm:^5.0.0"
|
||||
"@octokit/oauth-app": "npm:^6.0.0"
|
||||
"@octokit/plugin-paginate-graphql": "npm:^4.0.0"
|
||||
"@octokit/plugin-paginate-rest": "npm:11.3.1"
|
||||
"@octokit/plugin-rest-endpoint-methods": "npm:13.2.2"
|
||||
"@octokit/plugin-retry": "npm:^6.0.0"
|
||||
"@octokit/plugin-throttling": "npm:^8.0.0"
|
||||
"@octokit/request-error": "npm:^5.0.0"
|
||||
"@octokit/types": "npm:^13.0.0"
|
||||
checksum: 10c0/475575a30b351f2578f19f4d7c284c3928a0fd87f553a903436a6728d4d647ce93c8633e1f93cc4efe84ef9fcbfd9740f4198ec573323890084aa39ccf392a87
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"on-exit-leak-free@npm:^2.1.0":
|
||||
version: 2.1.2
|
||||
resolution: "on-exit-leak-free@npm:2.1.2"
|
||||
@ -4038,7 +3554,7 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"once@npm:^1.3.0, once@npm:^1.4.0":
|
||||
"once@npm:^1.3.0":
|
||||
version: 1.4.0
|
||||
resolution: "once@npm:1.4.0"
|
||||
dependencies:
|
||||
@ -5473,23 +4989,6 @@ __metadata:
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"universal-github-app-jwt@npm:^1.1.2":
|
||||
version: 1.1.2
|
||||
resolution: "universal-github-app-jwt@npm:1.1.2"
|
||||
dependencies:
|
||||
"@types/jsonwebtoken": "npm:^9.0.0"
|
||||
jsonwebtoken: "npm:^9.0.2"
|
||||
checksum: 10c0/061d2a52c25f0a09a5ae40167e6006ba89510df9934070996d8ca3019afd34f7f28fbb74a93d1627beb4209faf04ec9173f0dc9ff351ee2ec42ab76cff389a80
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"universal-user-agent@npm:^6.0.0":
|
||||
version: 6.0.1
|
||||
resolution: "universal-user-agent@npm:6.0.1"
|
||||
checksum: 10c0/5c9c46ffe19a975e11e6443640ed4c9e0ce48fcc7203325757a8414ac49940ebb0f4667f2b1fa561489d1eb22cb2d05a0f7c82ec20c5cba42e58e188fb19b187
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
"update-check@npm:1.5.4":
|
||||
version: 1.5.4
|
||||
resolution: "update-check@npm:1.5.4"
|
||||
|
Loading…
Reference in New Issue
Block a user