diff --git a/package.json b/package.json index 5bb79ef..4e6daac 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@tailwindcss/forms": "^0.5.2", "@tailwindcss/typography": "^0.5.3", "@types/minio": "^7.0.16", + "@types/semver": "^7.3.13", "@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/parser": "^5.45.0", "autoprefixer": "^10.4.7", @@ -49,6 +50,7 @@ "minio": "^7.0.32", "nano": "^10.1.2", "nanoid": "^4.0.1", + "semver": "^7.3.8", "svelte-feather-icons": "^4.0.0", "zod": "^3.20.6" } diff --git a/src/lib/fetchutils.ts b/src/lib/fetchutils.ts new file mode 100644 index 0000000..e905e20 --- /dev/null +++ b/src/lib/fetchutils.ts @@ -0,0 +1,41 @@ +const ratelimits: Record> = {}; + +export async function fetch_with_ratelimit( + ratelimit_id: string, + input: RequestInfo | URL, + init?: RequestInit | undefined +): Promise { + if (ratelimit_id in ratelimits) { + await ratelimits[ratelimit_id]; + } + if (!init) { + init = { + headers: { + 'User-Agent': 'NotModdermore/noversion (+https://git.skye.vg/me/not-moddermore/)' + } + }; + } + const response = await fetch(input, init); + if (response.status == 429 || response.headers.get('X-Ratelimit-Remaining') == '0') { + const retryAfter = response.headers.get('Retry-After'); + const ratelimitReset = response.headers.get('X-Ratelimit-Reset'); + if (retryAfter) { + ratelimits[ratelimit_id] = new Promise((resolve) => { + setTimeout(resolve, parseInt(retryAfter) * 1000); + }); + return await fetch_with_ratelimit(ratelimit_id, input, init); + } else if (ratelimitReset) { + if (parseInt(ratelimitReset) > 1678000000) { + ratelimits[ratelimit_id] = new Promise((resolve) => { + setTimeout(() => resolve(), parseInt(ratelimitReset) * 1000 - Date.now()); + }); + } else { + ratelimits[ratelimit_id] = new Promise((resolve) => { + setTimeout(() => resolve(), parseInt(ratelimitReset) * 1000); + }); + } + return await fetch_with_ratelimit(ratelimit_id, input, init); + } + } + return response; +} diff --git a/src/lib/modrinth.ts b/src/lib/modrinth.ts index 1e85243..52475e4 100644 --- a/src/lib/modrinth.ts +++ b/src/lib/modrinth.ts @@ -1,4 +1,5 @@ import { z } from 'zod'; +import { fetch_with_ratelimit } from './fetchutils'; export const searchProjectsHit = z.object({ slug: z.string().regex(/^[\w!@$()`.+,"\-']{3,64}$/), @@ -8,14 +9,14 @@ export const searchProjectsHit = z.object({ client_side: z.enum(['required', 'optional', 'unsupported', 'unknown']), server_side: z.enum(['required', 'optional', 'unsupported', 'unknown']), project_type: z.enum(['mod', 'modpack', 'resourcepack', 'shader']), - downloads: z.number(), + downloads: z.number().int(), icon_url: z.union([z.string().url(), z.literal('').transform(() => '/favicon.png')]), - color: z.number().nullable(), + color: z.number().int().nullable(), project_id: z.string(), author: z.string(), display_categories: z.string().array().default([]), versions: z.string().array(), - follows: z.number(), + follows: z.number().int(), date_created: z.string().datetime({ offset: true }), date_modified: z.string().datetime({ offset: true }), latest_version: z.string().optional(), @@ -26,9 +27,9 @@ export const searchProjectsHit = z.object({ export const searchProjectsResponse = z.object({ hits: searchProjectsHit.array(), - offset: z.number(), - limit: z.number(), - total_hits: z.number() + offset: z.number().int(), + limit: z.number().int(), + total_hits: z.number().int() }); const searchProjectsRequest = z.object({ @@ -40,8 +41,8 @@ const searchProjectsRequest = z.object({ .array() .default([]), index: z.enum(['relevance', 'downloads', 'follows', 'newest', 'updated']).default('relevance'), - offset: z.number().default(0), - limit: z.number().default(10), + offset: z.number().int().default(0), + limit: z.number().int().default(10), filters: z.string().optional() }); @@ -67,10 +68,60 @@ export async function searchProjects( ): Promise> { const parsedRequest = searchProjectsRequest.parse(request); const params = searchProjectsRequestToUrlParams(parsedRequest); - const response = await fetch('https://api.modrinth.com/v2/search?' + params.toString(), { - headers: { - 'User-Agent': 'NotModdermore/noversion (+https://git.skye.vg/me/not-moddermore/)' - } - }); + const response = await fetch_with_ratelimit( + 'modrinth', + 'https://api.modrinth.com/v2/search?' + params.toString() + ); return searchProjectsResponse.parse(await response.json()); } + +export const projectVersion = z.object({ + name: z.string(), + version_number: z.string(), + changelog: z.string().nullable(), + dependencies: z + .object({ + version_id: z.string().nullable(), + project_id: z.string().nullable(), + file_name: z.string().nullable(), + dependency_type: z.enum(['required', 'optional', 'incompatible', 'embedded']) + }) + .array(), + game_versions: z.string().array(), + version_type: z.enum(['release', 'beta', 'alpha']), + loaders: z.string().array(), + featured: z.boolean(), + status: z.enum(['listed', 'archived', 'draft', 'unlisted', 'scheduled', 'unknown']), + requested_status: z.enum(['listed', 'archived', 'draft', 'unlisted']).nullable(), + id: z.string(), + project_id: z.string(), + author_id: z.string(), + date_published: z.string().datetime({ offset: true }), + downloads: z.number().int(), + changelog_url: z.null(), + files: z + .object({ + hashes: z.object({ + sha512: z.string().regex(/^[a-f0-9]{128}$/), + sha1: z.string().regex(/^[a-f0-9]{40}$/) + }), + url: z.string().url(), + filename: z.string(), + primary: z.boolean(), + size: z.number().int(), + file_type: z.enum(['required-resource-pack', 'optional-resource-pack']).nullable() + }) + .array() +}); + +export const listProjectVersionsResponse = projectVersion.array(); + +export async function listProjectVersions( + id: string +): Promise> { + const response = await fetch_with_ratelimit( + 'modrinth', + `https://api.modrinth.com/v2/project/${id}/version` + ); + return listProjectVersionsResponse.parse(await response.json()); +} diff --git a/src/lib/packwiz-types.ts b/src/lib/packwiz-types.ts index ee7a74b..b87b6e4 100644 --- a/src/lib/packwiz-types.ts +++ b/src/lib/packwiz-types.ts @@ -33,7 +33,7 @@ export const indexSchema = z.object({ metafile: z.boolean().default(false), preserve: z.boolean().default(false) }) - .array(), + .array() }); // export const metafileSchema = z.object({ @@ -90,7 +90,7 @@ export const metafileSchema = z.union([ 'hash-format': z.enum(['sha256', 'sha512', 'sha1', 'md5', 'murmur2']), hash: z.string().regex(/^[a-fA-F0-9]+$/), url: z.string().url(), - mode: z.literal('url').default('url') + mode: z.literal('url').optional() }), update: z .object({ diff --git a/src/lib/rpc-types.ts b/src/lib/rpc-types.ts index 2872431..9abf70f 100644 --- a/src/lib/rpc-types.ts +++ b/src/lib/rpc-types.ts @@ -3,8 +3,8 @@ import { versionsSchema } from './packwiz-types'; import { fileTreeSchema } from './types-zod'; export const createRequestSchema = z.object({ - name: z.string(), - description: z.string(), - versions: versionsSchema, - tree: fileTreeSchema, -}) \ No newline at end of file + name: z.string(), + description: z.string(), + versions: versionsSchema, + tree: fileTreeSchema +}); diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 4a6e44f..d10cb77 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -13,3 +13,13 @@ export function get_blobs(tree: FileTree): FileBlob[] { } return blobs; } + +export async function digest(algorithm: string, data: BufferSource): string { + const hashBuffer = await crypto.subtle.digest(algorithm, data); + const hashArray = Array.from(new Uint8Array(hashBuffer)); + const hash = hashArray + .map((b) => b.toString(16).padStart(2, '0')) + .join('') + .toLowerCase(); + return hash; +} diff --git a/src/routes/create/+page.server.ts b/src/routes/create/+page.server.ts index 2e7ba7b..0606fc2 100644 --- a/src/routes/create/+page.server.ts +++ b/src/routes/create/+page.server.ts @@ -1,7 +1,7 @@ import type { Actions } from './$types'; import { COUCHDB_DB_NAME, S3_BUCKET_NAME } from '$env/static/private'; import { fail, redirect } from '@sveltejs/kit'; -import { get_blobs } from '$lib/utils'; +import { digest, get_blobs } from '$lib/utils'; import type { Modpack } from '$lib/types'; import { nanoid } from 'nanoid'; import { minioClient, nano } from '$lib/server/clients'; @@ -24,12 +24,7 @@ export const actions: Actions = { if (typeof file != 'object' || !file) throw fail(400); if (file.size > 8 * 1024 * 1024) throw fail(400); const buf = await file.arrayBuffer(); - const hashBuffer = await crypto.subtle.digest('SHA-512', buf); - const hashArray = Array.from(new Uint8Array(hashBuffer)); - const hash = hashArray - .map((b) => b.toString(16).padStart(2, '0')) - .join('') - .toLowerCase(); + const hash = await digest('SHA-512', buf); if (hash != blob.sha512) throw fail(400); let exists = false; try { diff --git a/src/routes/create/+page.svelte b/src/routes/create/+page.svelte index 892d98d..6dee636 100644 --- a/src/routes/create/+page.svelte +++ b/src/routes/create/+page.svelte @@ -16,12 +16,18 @@ } from '@rgossiaux/svelte-headlessui'; import { FolderIcon, PlusIcon } from 'svelte-feather-icons'; import { + listProjectVersions, + type listProjectVersionsResponse, + projectVersion, searchProjects, type searchProjectsHit, type searchProjectsResponse } from '$lib/modrinth'; import type { z } from 'zod'; import toml from '@ltd/j-toml'; + import semver from 'semver'; + import type { metafileSchema, versionsSchema } from '$lib/packwiz-types'; + import { digest } from '$lib/utils'; let fileTree: Folder = { type: 'folder', children: { @@ -79,7 +85,11 @@ version = "2sIhirkG" } }; let blobs: Blob[] = []; - let isOpen = false; + let versions: z.infer = { + minecraft: '1.19.3', + quilt: '0.18.3' + }; + let modalStatus: | 'none' | 'search:mods' @@ -129,13 +139,111 @@ version = "2sIhirkG" searchLoadingMore = false; } - async function addMod(mod: z.infer) {} + let versionCandidates: z.infer = []; + + function semver_gt(lhs: string, rhs: string): boolean | undefined { + try { + return semver.gt(lhs, rhs); + } catch { + return undefined + } + } + + async function addMod(mod: z.infer) { + const modVersions = await listProjectVersions(mod.project_id); + let candidate: null | z.infer = null; + for (const version of modVersions) { + if (version.game_versions.includes(versions.minecraft)) { + let compatible = false; + for (const loader of version.loaders) { + if (loader in versions) { + compatible = true; + break; + } + } + if (compatible) { + if (!candidate) candidate = version; + const is_later = new Date(version.date_published) > new Date(candidate.date_published); + const is_semver_later = semver_gt(version.version_number, candidate.version_number) ?? is_later; + if ((is_later && !is_semver_later) || (!is_later && is_semver_later)) { + // semver is later, but the date is not + // can't really determine precedence + // fallback to manual + candidate = null; + break; + } else if (is_later && is_semver_later) { + candidate = version; + } + } + } + } + if (!candidate) { + modalStatus = 'select:modversion'; + versionCandidates = modVersions; + return; + } + if (!('mods' in fileTree.children)) { + fileTree.children.mods = { + type: 'folder', + children: {} + }; + } + if (fileTree.children.mods.type != 'folder') { + // give up + // why is /mods a file + return; + } + + let primaryFile = candidate.files[0]; + + for (const file of candidate.files) { + if (file.primary) { + primaryFile = file; + } + } + + console.log(mod); + + const server_side = mod.server_side == 'optional' || mod.server_side == 'required'; + const client_side = mod.client_side == 'optional' || mod.client_side == 'required'; + const side = server_side ? (client_side ? 'both' : 'server') : client_side ? 'client' : 'both'; + + const content: z.input = { + name: mod.title, + filename: primaryFile.filename, + side: side, + download: { + url: primaryFile.url, + 'hash-format': 'sha512', + hash: primaryFile.hashes.sha512 + }, + update: { + modrinth: { + 'mod-id': mod.project_id, + version: candidate.id + } + } + }; + const content_str = toml.stringify(content, { newline: '\n' }); + const content_buf = new TextEncoder().encode(content_str); + console.log(content_str); + + fileTree.children.mods.children[mod.slug + '.pw.toml'] = { + type: 'file', + inline: true, + metafile: true, + ignored: false, + content: content_str, + sha1: await digest('SHA-1', content_buf), + sha512: await digest('SHA-512', content_buf) + }; + } let editPath: string[] = []; function getFileFromPath(path: string[], tree: Folder): File | undefined { const segment = editPath.shift(); if (typeof segment == 'undefined') { - return undefined + return undefined; } const next = tree.children[segment]; if (!next) { @@ -299,9 +407,39 @@ version = "2sIhirkG" {:else if modalStatus == 'edit:simple'} {@const file = getFileFromPath(editPath, fileTree)} {#if file && file.inline && file.metafile} - {@const parsed = toml.parse(file.content)} - {JSON.stringify(parsed)} + {@const parsed = toml.parse(file.content)} + {JSON.stringify(parsed)} {/if} + {:else if modalStatus == 'select:modversion'} + Select version + + Could not determine latest version automatically.
+ Please choose a version. +
+
    + {#each versionCandidates as version} +
  • +
    +

    {version.name}

    +

    ({version.version_number})

    +
    +
    + {#if version.loaders.includes("fabric")} + Fabric icon + {/if} + {#if version.loaders.includes("forge")} + Forge icon + {/if} + {#if version.loaders.includes("quilt")} + Quilt icon + {/if} + {#if version.loaders.includes("liteloader")} + LiteLoader icon + {/if} +
    +
  • + {/each} +
{/if} diff --git a/static/icons/Fabric.svg b/static/icons/Fabric.svg new file mode 100644 index 0000000..0b3d176 --- /dev/null +++ b/static/icons/Fabric.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/Forge.svg b/static/icons/Forge.svg new file mode 100644 index 0000000..7af6faa --- /dev/null +++ b/static/icons/Forge.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/LiteLoader.svg b/static/icons/LiteLoader.svg new file mode 100644 index 0000000..8789099 --- /dev/null +++ b/static/icons/LiteLoader.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/icons/Quilt.svg b/static/icons/Quilt.svg new file mode 100644 index 0000000..3bb1afd --- /dev/null +++ b/static/icons/Quilt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 6716321..ba2c870 100644 --- a/yarn.lock +++ b/yarn.lock @@ -195,11 +195,6 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@iarna/toml@^2.2.5": - version "2.2.5" - resolved "https://registry.yarnpkg.com/@iarna/toml/-/toml-2.2.5.tgz#b32366c89b43c6f8cefbdefac778b9c828e3ba8c" - integrity sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg== - "@jridgewell/resolve-uri@3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" @@ -244,231 +239,6 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@octokit/app@^13.1.1": - version "13.1.2" - resolved "https://registry.yarnpkg.com/@octokit/app/-/app-13.1.2.tgz#81fdee338abddda9c016e5beccdb19ff5110bb66" - integrity sha512-Kf+h5sa1SOI33hFsuHvTsWj1jUrjp1x4MuiJBq7U/NicfEGa6nArPUoDnyfP/YTmcQ5cQ5yvOgoIBkbwPg6kzQ== - dependencies: - "@octokit/auth-app" "^4.0.8" - "@octokit/auth-unauthenticated" "^3.0.0" - "@octokit/core" "^4.0.0" - "@octokit/oauth-app" "^4.0.7" - "@octokit/plugin-paginate-rest" "^6.0.0" - "@octokit/types" "^9.0.0" - "@octokit/webhooks" "^10.0.0" - -"@octokit/auth-app@^4.0.8": - version "4.0.9" - resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-4.0.9.tgz#66500c8f66545d970a19123b9b364c678c972d6b" - integrity sha512-VFpKIXhHO+kVJtane5cEvdYPtjDKCOI0uKsRrsZfJP+uEu7rcPbQCLCcRKgyT+mUIzGr1IIOmwP/lFqSip1dXA== - dependencies: - "@octokit/auth-oauth-app" "^5.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - "@types/lru-cache" "^5.1.0" - deprecation "^2.3.1" - lru-cache "^6.0.0" - universal-github-app-jwt "^1.1.1" - universal-user-agent "^6.0.0" - -"@octokit/auth-oauth-app@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.5.tgz#be2a93d72835133b4866ac4721aa628849475525" - integrity sha512-UPX1su6XpseaeLVCi78s9droxpGtBWIgz9XhXAx9VXabksoF0MyI5vaa1zo1njyYt6VaAjFisC2A2Wchcu2WmQ== - dependencies: - "@octokit/auth-oauth-device" "^4.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - "@types/btoa-lite" "^1.0.0" - btoa-lite "^1.0.0" - universal-user-agent "^6.0.0" - -"@octokit/auth-oauth-device@^4.0.0": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-4.0.4.tgz#b8dde812a38bf5cb0696b6e7d0a74681d437c390" - integrity sha512-Xl85BZYfqCMv+Uvz33nVVUjE7I/PVySNaK6dRRqlkvYcArSr9vRcZC9KVjXYObGRTCN6mISeYdakAZvWEN4+Jw== - dependencies: - "@octokit/oauth-methods" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/auth-oauth-user@^2.0.0": - version "2.1.1" - resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-2.1.1.tgz#d900972f3d9247924637ab3343a8305746feadb2" - integrity sha512-JgqnNNPf9CaWLxWm9uh2WgxcaVYhxBR09NVIPTiMU2dVZ3FObOHs3njBiLNw+zq84k+rEdm5Y7AsiASrZ84Apg== - dependencies: - "@octokit/auth-oauth-device" "^4.0.0" - "@octokit/oauth-methods" "^2.0.0" - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - btoa-lite "^1.0.0" - universal-user-agent "^6.0.0" - -"@octokit/auth-token@^3.0.0": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-3.0.3.tgz#ce7e48a3166731f26068d7a7a7996b5da58cbe0c" - integrity sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA== - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/auth-unauthenticated@^3.0.0": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@octokit/auth-unauthenticated/-/auth-unauthenticated-3.0.4.tgz#347d3f3a6fefb22d399a941b986bac5361fc95df" - integrity sha512-AT74XGBylcLr4lmUp1s6mjSUgphGdlse21Qjtv5DzpX1YOl5FXKwvNcZWESdhyBbpDT8VkVyLFqa/7a7eqpPNw== - dependencies: - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - -"@octokit/core@^4.0.0", "@octokit/core@^4.0.4": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@octokit/core/-/core-4.2.0.tgz#8c253ba9605aca605bc46187c34fcccae6a96648" - integrity sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg== - dependencies: - "@octokit/auth-token" "^3.0.0" - "@octokit/graphql" "^5.0.0" - "@octokit/request" "^6.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - before-after-hook "^2.2.0" - universal-user-agent "^6.0.0" - -"@octokit/endpoint@^7.0.0": - version "7.0.5" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-7.0.5.tgz#2bb2a911c12c50f10014183f5d596ce30ac67dd1" - integrity sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA== - dependencies: - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - universal-user-agent "^6.0.0" - -"@octokit/graphql@^5.0.0": - version "5.0.5" - resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-5.0.5.tgz#a4cb3ea73f83b861893a6370ee82abb36e81afd2" - integrity sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ== - dependencies: - "@octokit/request" "^6.0.0" - "@octokit/types" "^9.0.0" - universal-user-agent "^6.0.0" - -"@octokit/oauth-app@^4.0.6", "@octokit/oauth-app@^4.0.7": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@octokit/oauth-app/-/oauth-app-4.2.0.tgz#f965496b1d957c3ff0275a5d5233b380181ce72b" - integrity sha512-gyGclT77RQMkVUEW3YBeAKY+LBSc5u3eC9Wn/Uwt3WhuKuu9mrV18EnNpDqmeNll+mdV02yyBROU29Tlili6gg== - dependencies: - "@octokit/auth-oauth-app" "^5.0.0" - "@octokit/auth-oauth-user" "^2.0.0" - "@octokit/auth-unauthenticated" "^3.0.0" - "@octokit/core" "^4.0.0" - "@octokit/oauth-authorization-url" "^5.0.0" - "@octokit/oauth-methods" "^2.0.0" - "@types/aws-lambda" "^8.10.83" - fromentries "^1.3.1" - universal-user-agent "^6.0.0" - -"@octokit/oauth-authorization-url@^5.0.0": - version "5.0.0" - resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-5.0.0.tgz#029626ce87f3b31addb98cd0d2355c2381a1c5a1" - integrity sha512-y1WhN+ERDZTh0qZ4SR+zotgsQUE1ysKnvBt1hvDRB2WRzYtVKQjn97HEPzoehh66Fj9LwNdlZh+p6TJatT0zzg== - -"@octokit/oauth-methods@^2.0.0": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-2.0.5.tgz#b11ce2205c46ffcd731c7332b21bb62dad10ce24" - integrity sha512-yQP6B5gE3axNxuM3U9KqWs/ErAQ+WLPaPgC/7EjsZsQibkf8sjdAfF8/y/EJW+Dd05XQvadX4WhQZPMnO1SE1A== - dependencies: - "@octokit/oauth-authorization-url" "^5.0.0" - "@octokit/request" "^6.2.3" - "@octokit/request-error" "^3.0.3" - "@octokit/types" "^9.0.0" - btoa-lite "^1.0.0" - -"@octokit/openapi-types@^16.0.0": - version "16.0.0" - resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-16.0.0.tgz#d92838a6cd9fb4639ca875ddb3437f1045cc625e" - integrity sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA== - -"@octokit/plugin-paginate-rest@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz#f34b5a7d9416019126042cd7d7b811e006c0d561" - integrity sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw== - dependencies: - "@octokit/types" "^9.0.0" - -"@octokit/plugin-rest-endpoint-methods@^7.0.0": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz#f7ebe18144fd89460f98f35a587b056646e84502" - integrity sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.3.1" - -"@octokit/plugin-retry@^4.0.3": - version "4.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-retry/-/plugin-retry-4.1.2.tgz#4a8be9cdd75c0b650a5547b1b527a1498391242f" - integrity sha512-hscf7p/6DIQ8xbfDrMl9IflxugED6sFQvAUbSi75R6h/6hcNQgrb2vpfPTmyYKkdAEeTkUsEpzpQFdTAhSITOw== - dependencies: - "@octokit/types" "^9.0.0" - bottleneck "^2.15.3" - -"@octokit/plugin-throttling@^5.0.0": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@octokit/plugin-throttling/-/plugin-throttling-5.0.1.tgz#e3ba0a49830a777097b6d49615782a0a5e51e743" - integrity sha512-I4qxs7wYvYlFuY3PAUGWAVPhFXG3RwnvTiSr5Fu/Auz7bYhDLnzS2MjwV8nGLq/FPrWwYiweeZrI5yjs1YG4tQ== - dependencies: - "@octokit/types" "^9.0.0" - bottleneck "^2.15.3" - -"@octokit/request-error@^3.0.0", "@octokit/request-error@^3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-3.0.3.tgz#ef3dd08b8e964e53e55d471acfe00baa892b9c69" - integrity sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ== - dependencies: - "@octokit/types" "^9.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^6.0.0", "@octokit/request@^6.2.3": - version "6.2.3" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-6.2.3.tgz#76d5d6d44da5c8d406620a4c285d280ae310bdb4" - integrity sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA== - dependencies: - "@octokit/endpoint" "^7.0.0" - "@octokit/request-error" "^3.0.0" - "@octokit/types" "^9.0.0" - is-plain-object "^5.0.0" - node-fetch "^2.6.7" - universal-user-agent "^6.0.0" - -"@octokit/types@^9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-9.0.0.tgz#6050db04ddf4188ec92d60e4da1a2ce0633ff635" - integrity sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw== - dependencies: - "@octokit/openapi-types" "^16.0.0" - -"@octokit/webhooks-methods@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@octokit/webhooks-methods/-/webhooks-methods-3.0.2.tgz#cece91cc72714a1c83b35d121e04334f051e509c" - integrity sha512-Vlnv5WBscf07tyAvfDbp7pTkMZUwk7z7VwEF32x6HqI+55QRwBTcT+D7DDjZXtad/1dU9E32x0HmtDlF9VIRaQ== - -"@octokit/webhooks-types@6.10.0": - version "6.10.0" - resolved "https://registry.yarnpkg.com/@octokit/webhooks-types/-/webhooks-types-6.10.0.tgz#b441780d26370c7682f4f964d4b36b5cb0c757f8" - integrity sha512-lDNv83BeEyxxukdQ0UttiUXawk9+6DkdjjFtm2GFED+24IQhTVaoSbwV9vWWKONyGLzRmCQqZmoEWkDhkEmPlw== - -"@octokit/webhooks@^10.0.0": - version "10.7.0" - resolved "https://registry.yarnpkg.com/@octokit/webhooks/-/webhooks-10.7.0.tgz#ec05e655d309383e2cd08dafe51abd1705df6d4a" - integrity sha512-zZBbQMpXXnK/ki/utrFG/TuWv9545XCSLibfDTxrYqR1PmU6zel02ebTOrA7t5XIGHzlEOc/NgISUIBUe7pMFA== - dependencies: - "@octokit/request-error" "^3.0.0" - "@octokit/webhooks-methods" "^3.0.0" - "@octokit/webhooks-types" "6.10.0" - aggregate-error "^3.1.0" - "@panva/hkdf@^1.0.2", "@panva/hkdf@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@panva/hkdf/-/hkdf-1.0.4.tgz#4e02bb248402ff6c5c024e23a68438e2b0e69d67" @@ -549,16 +319,6 @@ lodash.merge "^4.6.2" postcss-selector-parser "6.0.10" -"@types/aws-lambda@^8.10.83": - version "8.10.111" - resolved "https://registry.yarnpkg.com/@types/aws-lambda/-/aws-lambda-8.10.111.tgz#9107c405f3011a5c423b5ac93fbf279439558571" - integrity sha512-8HR9UjIKmoemEzE2BviVtFkeenxfbizSu8raFjnT2VXxguZZ2JTlNww7INOH7IA0J/zRa3TjOftkYq6hVNkxDA== - -"@types/btoa-lite@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.0.tgz#e190a5a548e0b348adb0df9ac7fa5f1151c7cca4" - integrity sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg== - "@types/chai-subset@^1.3.3": version "1.3.3" resolved "https://registry.yarnpkg.com/@types/chai-subset/-/chai-subset-1.3.3.tgz#97893814e92abd2c534de422cb377e0e0bdaac94" @@ -581,18 +341,6 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== -"@types/jsonwebtoken@^9.0.0": - version "9.0.1" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz#29b1369c4774200d6d6f63135bf3d1ba3ef997a4" - integrity sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw== - dependencies: - "@types/node" "*" - -"@types/lru-cache@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" - integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== - "@types/minio@^7.0.16": version "7.0.16" resolved "https://registry.yarnpkg.com/@types/minio/-/minio-7.0.16.tgz#704b827f22baaa95b7bade90f3336494762b90f9" @@ -617,7 +365,7 @@ dependencies: "@types/node" "*" -"@types/semver@^7.3.12": +"@types/semver@^7.3.12", "@types/semver@^7.3.13": version "7.3.13" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.3.13.tgz#da4bfd73f49bd541d28920ab0e2bf0ee80f71c91" integrity sha512-21cFJr9z3g5dW8B0CVI9g2O9beqaThGQ6ZFBqHfwhzLDKUxaqTIy3vnfah/UPkfOiF2pLq+tGz+W8RyCskuslw== @@ -706,11 +454,6 @@ "@typescript-eslint/types" "5.54.0" eslint-visitor-keys "^3.3.0" -"@xmcl/modrinth@^1.1.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@xmcl/modrinth/-/modrinth-1.1.0.tgz#77a129cc682614781999b9e4de5d871a648e4856" - integrity sha512-sKGQhr+yKFISnEobLtBPqzpiJHy+OBt653iQ+rNkLUQlSbiyR9k2rTSfAQ7FgPHB37koCbgKMuD1Ah5vFRPTMg== - "@zxing/text-encoding@0.9.0": version "0.9.0" resolved "https://registry.yarnpkg.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz#fb50ffabc6c7c66a0c96b4c03e3d9be74864b70b" @@ -750,14 +493,6 @@ acorn@^8.8.0, acorn@^8.8.1, acorn@^8.8.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== -aggregate-error@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - ajv@^6.10.0, ajv@^6.12.4: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" @@ -859,11 +594,6 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -before-after-hook@^2.2.0: - version "2.2.3" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" - integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== - binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -886,11 +616,6 @@ bn.js@^5.0.0, bn.js@^5.1.1: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== -bottleneck@^2.15.3: - version "2.19.5" - resolved "https://registry.yarnpkg.com/bottleneck/-/bottleneck-2.19.5.tgz#5df0b90f59fd47656ebe63c78a98419205cadd91" - integrity sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw== - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -980,21 +705,11 @@ browserslist@^4.21.4: node-releases "^2.0.8" update-browserslist-db "^1.0.10" -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== - buffer-crc32@^0.2.13, buffer-crc32@^0.2.5: version "0.2.13" resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== - buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1079,11 +794,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -1214,11 +924,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -1279,13 +984,6 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - electron-to-chromium@^1.4.284: version "1.4.313" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.313.tgz#ff95f01926ab748c65beb23fc55f2f178e7a24a9" @@ -1598,11 +1296,6 @@ fraction.js@^4.2.0: resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== -fromentries@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/fromentries/-/fromentries-1.3.2.tgz#e4bca6808816bf8f93b52750f1127f5a6fd86e3a" - integrity sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg== - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1777,11 +1470,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1856,11 +1544,6 @@ is-path-inside@^3.0.3: resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - is-typed-array@^1.1.10, is-typed-array@^1.1.3: version "1.1.10" resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" @@ -1909,33 +1592,6 @@ json-stream@^1.0.0: resolved "https://registry.yarnpkg.com/json-stream/-/json-stream-1.0.0.tgz#1a3854e28d2bbeeab31cc7ddf683d2ddc5652708" integrity sha512-H/ZGY0nIAg3QcOwE1QN/rK/Fa7gJn7Ii5obwp6zyPO4xiPNwpIMjqy2gwjBEGqzkF/vSWEIBQCBuN19hYiL6Qg== -jsonwebtoken@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" - integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== - dependencies: - jws "^3.2.2" - lodash "^4.17.21" - ms "^2.1.1" - semver "^7.3.8" - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - kleur@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" @@ -2152,11 +1808,6 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - nano@^10.1.2: version "10.1.2" resolved "https://registry.yarnpkg.com/nano/-/nano-10.1.2.tgz#2ed9902d29b029ac4f23b694f4d0359aecfa1b01" @@ -2191,13 +1842,6 @@ node-abort-controller@^3.0.1: resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548" integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ== -node-fetch@^2.6.7: - version "2.6.9" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.9.tgz#7c7f744b5cc6eb5fd404e0c7a9fec630a55657e6" - integrity sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg== - dependencies: - whatwg-url "^5.0.0" - node-releases@^2.0.8: version "2.0.10" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" @@ -2228,21 +1872,7 @@ object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== -octokit@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/octokit/-/octokit-2.0.14.tgz#e2057097a6c9cac3e7724a4365b450b7c694a6a4" - integrity sha512-z6cgZBFxirpFEQ1La8Lg83GCs5hOV2EPpkYYdjsGNbfQMv8qUGjq294MiRBCbZqLufviakGsPUxaNKe3JrPmsA== - dependencies: - "@octokit/app" "^13.1.1" - "@octokit/core" "^4.0.4" - "@octokit/oauth-app" "^4.0.6" - "@octokit/plugin-paginate-rest" "^6.0.0" - "@octokit/plugin-rest-endpoint-methods" "^7.0.0" - "@octokit/plugin-retry" "^4.0.3" - "@octokit/plugin-throttling" "^5.0.0" - "@octokit/types" "^9.0.0" - -once@^1.3.0, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== @@ -2921,11 +2551,6 @@ totalist@^3.0.0: resolved "https://registry.yarnpkg.com/totalist/-/totalist-3.0.0.tgz#4ef9c58c5f095255cdc3ff2a0a55091c57a3a1bd" integrity sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw== -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - tslib@^1.8.1: version "1.14.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" @@ -2972,19 +2597,6 @@ undici@5.20.0: dependencies: busboy "^1.6.0" -universal-github-app-jwt@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz#d57cee49020662a95ca750a057e758a1a7190e6e" - integrity sha512-G33RTLrIBMFmlDV4u4CBF7dh71eWwykck4XgaxaIVeZKOYZRAAxvcGMRFTUclVY6xoUPQvO4Ne5wKGxYm/Yy9w== - dependencies: - "@types/jsonwebtoken" "^9.0.0" - jsonwebtoken "^9.0.0" - -universal-user-agent@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" - integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== - update-browserslist-db@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" @@ -3062,19 +2674,6 @@ web-encoding@^1.1.5: optionalDependencies: "@zxing/text-encoding" "0.9.0" -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - which-typed-array@^1.1.2: version "1.1.9" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6"