Merge branch 'main' into v8.0.0

This commit is contained in:
wanhose 2024-10-11 14:44:41 +02:00
commit 14ab8a7a60
20 changed files with 440 additions and 754 deletions

View File

@ -1,6 +1,6 @@
# 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.
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://gitlab.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

View File

@ -1 +1,3 @@
GITHUB_TOKEN=?
GITLAB_PROJECT_ID=?
GITLAB_RAW=?
GITLAB_TOKEN=?

View File

@ -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"
},

View File

@ -26,8 +26,6 @@ server.register(cors, {
server.register(rateLimit, {
global: false,
max: 1,
timeWindow: 30000,
});
server.register(v1EntriesRoutes, { prefix: '/rest/v1' });

View File

@ -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) => {
reply.send({
success: false,
errors: ['This API route is no longer supported. Please use a newer version'],
});
});
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();
};

View File

@ -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) => {
reply.send({
success: false,
errors: ['This API route is no longer supported. Please use a newer version'],
});
});
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();
};

View File

@ -2,29 +2,40 @@ 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) => {
try {
const url = `${environment.github.files}/database.json`;
const result = await (await fetch(url)).json();
server.get(
'/data/',
{
config: {
rateLimit: RATE_LIMIT_10_PER_MIN,
},
},
async (_request, reply) => {
try {
const url = `${environment.gitlab.raw}/database.json`;
const result = await (await fetch(url)).json();
reply.send({
data: {
classes: result.tokens.classes,
commonWords: result.commonWords,
elements: result.tokens.selectors,
fixes: result.fixes.map(parseNewFix),
skips: result.skips.domains,
tags: result.skips.tags,
},
success: true,
});
} catch (e) {
console.error(e);
reply.send({ success: false });
reply.send({
data: {
classes: result.tokens.classes,
commonWords: result.commonWords,
elements: result.tokens.selectors,
fixes: result.fixes.map(parseNewFix),
skips: result.skips.domains,
tags: result.skips.tags,
},
success: true,
});
} catch (error) {
reply.send({
errors: [error.message],
success: false,
});
}
}
});
);
done();
};

View File

@ -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,46 @@ 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({
event: 'reopen',
iid: issue.iid,
labels: ['bug'],
labelsToRemove: issue.labels,
});
}
await createIssueComment({
description: formatMessage({ reason, ua, url, version }),
iid: issue.iid,
});
reply.send({
success: true,
});
return;
}
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'),
await createIssue({
description: formatMessage({ reason, ua, url, version }),
labels: ['bug'],
owner: environment.github.owner,
repo: environment.github.repo,
title: url,
title: hostname,
});
reply.send({ success: true });
reply.send({
success: true,
});
} catch (error) {
reply.send({ errors: [error.message], success: false });
reply.send({
errors: [error.message],
success: false,
});
}
}
);

View File

@ -2,27 +2,36 @@ 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) => {
try {
const url = `${environment.github.files}/database.json`;
const result = await (await fetch(url)).json();
server.get(
'/data/',
{
config: {
rateLimit: RATE_LIMIT_3_PER_MIN,
},
},
async (_request, reply) => {
try {
const url = `${environment.gitlab.raw}/database.json`;
const result = await (await fetch(url)).json();
reply.send({
data: {
...result,
fixes: result.fixes.map(parseNewFix),
},
success: true,
});
} catch (error) {
reply.send({
errors: [error.message],
success: false,
});
reply.send({
data: {
...result,
fixes: result.fixes.map(parseNewFix),
},
success: true,
});
} catch (error) {
reply.send({
errors: [error.message],
success: false,
});
}
}
});
);
done();
};

View File

@ -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,51 @@ 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({
event: 'reopen',
iid: issue.iid,
labels: ['bug'],
owner: environment.github.owner,
repo: environment.github.repo,
state: 'open',
labelsToRemove: issue.labels,
});
}
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 }),
iid: issue.iid,
});
reply.send({
data: existingIssue.html_url,
data: issue.web_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.web_url,
success: true,
});
} catch (error) {
@ -92,21 +81,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');
}

View File

@ -1,28 +1,37 @@
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) => {
try {
const options = { headers: { 'Cache-Control': 'no-cache' } };
const url = `${environment.github.files}/database.json`;
const { rules, ...result } = await (await fetch(url, options)).json();
server.get(
'/data/',
{
config: {
rateLimit: RATE_LIMIT_3_PER_MIN,
},
},
async (_request, reply) => {
try {
const options = { headers: { 'Cache-Control': 'no-cache' } };
const url = `${environment.gitlab.raw}/database.json`;
const { rules, ...result } = await (await fetch(url, options)).json();
reply.send({
data: {
...result,
rules: rules.map(toDeclarativeNetRequestRule),
},
success: true,
});
} catch (error) {
reply.send({
errors: [error.message],
success: false,
});
reply.send({
data: {
...result,
rules: rules.map(toDeclarativeNetRequestRule),
},
success: true,
});
} catch (error) {
reply.send({
errors: [error.message],
success: false,
});
}
}
});
);
done();
};

View File

@ -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.includes('wontfix')) ||
issue.state === 'opened')
) {
reply.send({
data: {
flags: existingIssue.labels.map((label) => label.name),
url: existingIssue.html_url,
flags: issue.labels,
url: issue.web_url,
},
success: true,
});
} else {
reply.send({
data: {},
success: true,
});
throw new Error('Failed to find issue');
}
} catch (error) {
reply.send({

View File

@ -1,8 +1,12 @@
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 environment from 'services/environment';
// import { octokit } from 'services/octokit';
import { validatorCompiler } from 'services/validation';
import { UAParser } from 'ua-parser-js';
// import { UAParser } from 'ua-parser-js';
import * as yup from 'yup';
const PostReportBodySchema = yup.object().shape({
@ -22,35 +26,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 === 'wontfix')) {
reply.send({
data: existingIssue.html_url,
data: issue.web_url,
errors: ['This issue has been marked as "wontfix" and will not be addressed.'],
success: false,
});
return;
}
if (existingIssue.state === 'open') {
if (issue.state === 'opened') {
reply.send({
data: existingIssue.html_url,
data: issue.web_url,
errors: [
'This issue already exists. Please refer to the existing issue for updates.',
],
@ -59,46 +62,28 @@ export default (server: FastifyInstance, _options: RouteShorthandOptions, done:
return;
}
await octokit.request('PATCH /repos/{owner}/{repo}/issues/{issue_number}', {
issue_number: existingIssue.number,
await updateIssue({
event: 'reopen',
iid: issue.iid,
labels: ['bug'],
owner: environment.github.owner,
repo: environment.github.repo,
state: 'open',
labelsToRemove: issue.labels,
});
reply.send({
data: existingIssue.html_url,
data: issue.web_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.web_url,
success: true,
});
} catch (error) {

View File

@ -1,9 +1,8 @@
export default {
github: {
files: 'https://raw.githubusercontent.com/wanhose/cookie-dialog-monster/main',
owner: 'wanhose',
repo: 'cookie-dialog-monster',
token: process.env.GITHUB_TOKEN ?? '',
gitlab: {
projectId: process.env.GITLAB_PROJECT_ID ?? '',
raw: process.env.GITLAB_RAW ?? '',
token: process.env.GITLAB_TOKEN ?? '',
},
port: (process.env.PORT ? Number(process.env.PORT) : undefined) ?? 8080,
};

View 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;
}

View File

@ -0,0 +1,140 @@
import environment from './environment';
const API_URL = `https://gitlab.com/api/v4/projects/${environment.gitlab.projectId}`;
export async function createIssue(params: CreateIssueParams): Promise<Issue> {
const { description, labels, title } = params;
const body: { [key: string]: string } = {
description,
title,
};
const headers = new Headers({
'Content-Type': 'application/json',
'PRIVATE-TOKEN': environment.gitlab.token,
});
if (labels) {
body['labels'] = `${labels}`;
}
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, iid } = params;
const headers = new Headers({
'Content-Type': 'application/json',
'PRIVATE-TOKEN': environment.gitlab.token,
});
const response = await fetch(`${API_URL}/issues/${iid}/discussions`, {
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, not, state, title } = params;
const headers = new Headers({
'Content-Type': 'application/json',
'PRIVATE-TOKEN': environment.gitlab.token,
});
const search = new URLSearchParams({ in: 'title', title });
if (labels) {
search.append('labels', `${labels}`);
}
if (not) {
if (not.labels) {
search.append('not[labels]', `${not.labels}`);
}
if (not.state) {
search.append('not[state]', not.state);
}
}
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 { event, iid, labels, labelsToRemove } = params;
const body: { [key: string]: string } = {};
const headers = new Headers({
'Content-Type': 'application/json',
'PRIVATE-TOKEN': environment.gitlab.token,
});
if (event) {
body['state_event'] = event;
}
if (labels) {
body['labels'] = `${labels}`;
}
if (labelsToRemove) {
body['remove_labels'] = `${labelsToRemove}`;
}
const response = await fetch(`${API_URL}/issues/${iid}`, {
body: JSON.stringify(body),
headers,
method: 'PUT',
});
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 iid: number;
}
export interface GetIssueParams {
readonly labels?: readonly string[];
readonly not?: Omit<GetIssueParams, 'not' | 'title'>;
readonly state?: string;
readonly title: string;
}
export interface Issue {
readonly iid: number;
readonly labels: readonly string[];
readonly state: string;
readonly title: string;
readonly web_url: string;
}
export interface UpdateIssueParams {
readonly event?: 'close' | 'reopen';
readonly iid: number;
readonly labels?: readonly string[];
readonly labelsToRemove?: readonly string[];
}

View File

@ -1,4 +0,0 @@
import { Octokit } from 'octokit';
import environment from './environment';
export const octokit = new Octokit({ auth: environment.github.token });

View 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',
};

View File

@ -86,33 +86,36 @@
<div class="flex gap-4 text-white">
<a class="contents" 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"
href="https://gitlab.com/wanhose/cookie-dialog-monster"
target="_blank"
title="GitHub"
title="GitLab"
>
<svg
class="h-6 w-6"
xmlns="http://www.w3.org/2000/svg"
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"
fill="currentColor"
>
<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"
/>
d="M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z"
></path>
</svg>
</a>
</div>
@ -341,8 +344,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://gitlab.com/wanhose/cookie-dialog-monster/pulls" target="_blank">
GitLab repository
</a>
</p>
</div>
@ -492,7 +495,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://gitlab.com/wanhose/cookie-dialog-monster/tree/main/packages/browser-extension#installation-for-mozilla-firefox-users"
id="firefox-guide-link"
target="_blank"
>
@ -506,7 +509,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://gitlab.com/wanhose/cookie-dialog-monster/tree/main/packages/browser-extension#installation-for-advanced-and-non-listed-browser-users"
target="_blank"
>
this guide</a
@ -518,7 +521,7 @@
<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://gitlab.com/wanhose" target="_blank"> wanhose</a>
</p>
</div>
</footer>
@ -530,7 +533,7 @@
if (isMobile) {
firefoxGuideLink.href =
'https://github.com/wanhose/cookie-dialog-monster/tree/main/packages/browser-extension#installation-for-mozilla-firefox-mobile-users';
'https://gitlab.com/wanhose/cookie-dialog-monster/tree/main/packages/browser-extension#installation-for-mozilla-firefox-mobile-users';
firefoxLink.href = '/releases/latest-mozilla-mobile.xpi';
}
});

507
yarn.lock
View File

@ -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"