From b9c978548abe9b7aaa9a9dddbebffecc26716937 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Tue, 27 Aug 2024 14:55:43 -0500 Subject: [PATCH] feat: disable tools on opentest --- .vscode/settings.json | 1 + scripts/applyPatches.ts | 10 +- scripts/buildAssets/currencies.ts | 4 +- src/app/api/patreon/auth/[code]/route.ts | 8 +- .../api/patreon/membership/[token]/route.ts | 4 +- src/app/api/patreon/refresh/[token]/route.ts | 6 +- src/app/components/ToolCard.tsx | 95 ++++++++----------- src/app/docs/[directory]/[document]/page.tsx | 4 +- src/components/Link.tsx | 20 +++- src/constants/tools.tsx | 8 ++ src/core/blitzkit/asset.ts | 4 +- src/core/blitzkit/commitAssets.ts | 4 +- src/core/blitzkit/octokit.ts | 4 +- src/core/blitzkit/patreonLoginUrl.ts | 6 +- src/core/blitzkit/secret.ts | 4 + src/core/blitzkit/secrete.ts | 4 - src/core/discord/manager.ts | 4 +- src/core/github/assetCommit.ts | 6 +- src/events/interactionCreate/index.ts | 6 +- src/workers/bot.ts | 4 +- 20 files changed, 107 insertions(+), 99 deletions(-) create mode 100644 src/core/blitzkit/secret.ts delete mode 100644 src/core/blitzkit/secrete.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 387a377ea..f24f382fa 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -108,6 +108,7 @@ "noout", "normalmap", "Oopsy", + "opentest", "OPTML", "outdir", "outfile", diff --git a/scripts/applyPatches.ts b/scripts/applyPatches.ts index b5423a104..3d7ff6210 100644 --- a/scripts/applyPatches.ts +++ b/scripts/applyPatches.ts @@ -5,7 +5,7 @@ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml'; import { readStringDVPL } from '../src/core/blitz/readStringDVPL'; import { readYAMLDVPL } from '../src/core/blitz/readYAMLDVPL'; import { writeDVPL } from '../src/core/blitz/writeDVPL'; -import { assertSecrete } from '../src/core/blitzkit/secrete'; +import { assertSecret } from '../src/core/blitzkit/secret'; import { dvp } from '../submodules/blitzkit-closed/src/dvp'; import { DATA } from './buildAssets/constants'; @@ -21,7 +21,7 @@ console.log(`Installing patches for ${currentVersion}...`); let patchIndex = 1; while (true) { const response = await fetch( - `${assertSecrete(process.env.WOTB_DLC_CDN)}/dlc/s${currentVersion}_${patchIndex}.yaml`, + `${assertSecret(process.env.WOTB_DLC_CDN)}/dlc/s${currentVersion}_${patchIndex}.yaml`, ); if (response.status === 200) { @@ -29,10 +29,10 @@ while (true) { const data = parseYaml(await response.text()); const dvpm = await fetch( - `${assertSecrete(process.env.WOTB_DLC_CDN)}/dlc/${data.dx11}`, + `${assertSecret(process.env.WOTB_DLC_CDN)}/dlc/${data.dx11}`, ).then((response) => response.arrayBuffer()); const dvpd = await fetch( - `${assertSecrete(process.env.WOTB_DLC_CDN)}/dlc/${data.dx11.replace('.dvpm', '.dvpd')}`, + `${assertSecret(process.env.WOTB_DLC_CDN)}/dlc/${data.dx11.replace('.dvpm', '.dvpd')}`, ).then((response) => response.arrayBuffer()); const files = await dvp(dvpm, dvpd); const bar = new ProgressBar( @@ -58,7 +58,7 @@ while (true) { console.log('Found dynamic content localizations; patching...'); const localizationsResponse = await fetch( - `${assertSecrete(process.env.WOTB_DLC_CDN)}/dlc/${data.dynamicContentLocalizationsDir}/en.yaml`, + `${assertSecret(process.env.WOTB_DLC_CDN)}/dlc/${data.dynamicContentLocalizationsDir}/en.yaml`, ); const newStrings = parseYaml(await localizationsResponse.text()); const oldStrings = await readYAMLDVPL>( diff --git a/scripts/buildAssets/currencies.ts b/scripts/buildAssets/currencies.ts index 3c2dae3d5..d9e00e408 100644 --- a/scripts/buildAssets/currencies.ts +++ b/scripts/buildAssets/currencies.ts @@ -2,7 +2,7 @@ import sharp from 'sharp'; import { readDVPLFile } from '../../src/core/blitz/readDVPLFile'; import { commitAssets } from '../../src/core/blitzkit/commitAssets'; import { FileChange } from '../../src/core/blitzkit/commitMultipleFiles'; -import { assertSecrete } from '../../src/core/blitzkit/secrete'; +import { assertSecret } from '../../src/core/blitzkit/secret'; import { DATA } from './constants'; const ICONS = [ @@ -45,7 +45,7 @@ export async function currencies() { }), ); - const glossary = await fetch(assertSecrete(process.env.WOTB_GLOSSARY)).then( + const glossary = await fetch(assertSecret(process.env.WOTB_GLOSSARY)).then( (response) => response.json() as Promise, ); diff --git a/src/app/api/patreon/auth/[code]/route.ts b/src/app/api/patreon/auth/[code]/route.ts index 67b674629..755ccb13f 100644 --- a/src/app/api/patreon/auth/[code]/route.ts +++ b/src/app/api/patreon/auth/[code]/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server'; -import { assertSecrete } from '../../../../../core/blitzkit/secrete'; +import { assertSecret } from '../../../../../core/blitzkit/secret'; export async function GET( request: Request, @@ -8,11 +8,11 @@ export async function GET( const response = await fetch( `https://www.patreon.com/api/oauth2/token?code=${ params.code - }&grant_type=authorization_code&client_id=${assertSecrete( + }&grant_type=authorization_code&client_id=${assertSecret( process.env.NEXT_PUBLIC_PATREON_CLIENT_ID, - )}&client_secret=${assertSecrete( + )}&client_secret=${assertSecret( process.env.PATREON_CLIENT_SECRET, - )}&redirect_uri=${assertSecrete(process.env.NEXT_PUBLIC_PATREON_REDIRECT_URI)}`, + )}&redirect_uri=${assertSecret(process.env.NEXT_PUBLIC_PATREON_REDIRECT_URI)}`, { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, diff --git a/src/app/api/patreon/membership/[token]/route.ts b/src/app/api/patreon/membership/[token]/route.ts index 0ade27193..fd3995f25 100644 --- a/src/app/api/patreon/membership/[token]/route.ts +++ b/src/app/api/patreon/membership/[token]/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server'; -import { assertSecrete } from '../../../../../core/blitzkit/secrete'; +import { assertSecret } from '../../../../../core/blitzkit/secret'; interface PatreonMembershipResponse { data: { @@ -69,7 +69,7 @@ export async function GET( (item) => item.type === 'member' && item.relationships.campaign.data.id === - assertSecrete(process.env.PATREON_CAMPAIGN_ID) && + assertSecret(process.env.PATREON_CAMPAIGN_ID) && item.attributes.patron_status === 'active_patron', ), ); diff --git a/src/app/api/patreon/refresh/[token]/route.ts b/src/app/api/patreon/refresh/[token]/route.ts index e7e98868a..ef395faef 100644 --- a/src/app/api/patreon/refresh/[token]/route.ts +++ b/src/app/api/patreon/refresh/[token]/route.ts @@ -1,5 +1,5 @@ import { NextResponse } from 'next/server'; -import { assertSecrete } from '../../../../../core/blitzkit/secrete'; +import { assertSecret } from '../../../../../core/blitzkit/secret'; export async function GET( request: Request, @@ -8,9 +8,9 @@ export async function GET( const response = await fetch( `https://www.patreon.com/api/oauth2/token?grant_type=refresh_token&refresh_token=${ params.token - }&client_id=${assertSecrete( + }&client_id=${assertSecret( process.env.NEXT_PUBLIC_PATREON_CLIENT_ID, - )}&client_secret=${assertSecrete(process.env.PATREON_CLIENT_SECRET)}`, + )}&client_secret=${assertSecret(process.env.PATREON_CLIENT_SECRET)}`, { method: 'POST' }, ); const json = await response.json(); diff --git a/src/app/components/ToolCard.tsx b/src/app/components/ToolCard.tsx index 09f4aecbb..ee0955982 100644 --- a/src/app/components/ToolCard.tsx +++ b/src/app/components/ToolCard.tsx @@ -2,14 +2,16 @@ import { CaretRightIcon } from '@radix-ui/react-icons'; import { Box, Button, + Code, Flex, FlexProps, Heading, - Link, Text, } from '@radix-ui/themes'; +import { Link } from '../../components/Link'; import { Tool } from '../../constants/tools'; import { ImgurSize, imgur } from '../../core/blitzkit/imgur'; +import { assertSecret } from '../../core/blitzkit/secret'; type ToolCardProps = FlexProps & { tool: Tool; @@ -19,10 +21,14 @@ export function ToolCard({ tool, style, ...props }: ToolCardProps) { const size = tool.significant ? ImgurSize.HugeThumbnail : ImgurSize.LargeThumbnail; + const unavailableOnBranch = tool.branches?.every( + (branch) => branch !== assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH), + ); return ( {tool.title} - {tool.description} + {unavailableOnBranch ? ( + <> + Unavailable on{' '} + + {assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH)} + + + ) : ( + tool.description + )} - + {!unavailableOnBranch && ( + + )} diff --git a/src/app/docs/[directory]/[document]/page.tsx b/src/app/docs/[directory]/[document]/page.tsx index 08c6b3d69..3c59f90ae 100644 --- a/src/app/docs/[directory]/[document]/page.tsx +++ b/src/app/docs/[directory]/[document]/page.tsx @@ -3,7 +3,7 @@ import Markdown from 'markdown-to-jsx'; import { use } from 'react'; import { Link } from '../../../../components/Link'; import PageWrapper from '../../../../components/PageWrapper'; -import { assertSecrete } from '../../../../core/blitzkit/secrete'; +import { assertSecret } from '../../../../core/blitzkit/secret'; export default function Page({ params, @@ -12,7 +12,7 @@ export default function Page({ }) { const markdown = use( fetch( - `https://raw.githubusercontent.com/tresabhi/blitzkit/${assertSecrete( + `https://raw.githubusercontent.com/tresabhi/blitzkit/${assertSecret( process.env.NEXT_PUBLIC_ASSET_BRANCH, )}/docs/${params.directory}/${params.document}.md`, ).then((response) => response.text()), diff --git a/src/components/Link.tsx b/src/components/Link.tsx index 576727433..8fdc4f124 100644 --- a/src/components/Link.tsx +++ b/src/components/Link.tsx @@ -1,19 +1,33 @@ 'use client'; -import { LinkProps, Link as RadixLink } from '@radix-ui/themes'; +import { + Link as RadixLink, + LinkProps as RadixLinkProps, +} from '@radix-ui/themes'; import { useRouter } from 'next/navigation'; import { forwardRef } from 'react'; +type LinkProps = RadixLinkProps & { + disabled?: boolean; +}; + export const Link = forwardRef( - ({ href, onClick, target, ...props }, ref) => { + ({ href, onClick, target, disabled, style, ...props }, ref) => { const router = useRouter(); return ( { + if (disabled) return; + event.preventDefault(); + if (href) { if (event.ctrlKey || event.metaKey || target === '_blank') { window.open(href); diff --git a/src/constants/tools.tsx b/src/constants/tools.tsx index 00ab55d76..ccb93a5de 100644 --- a/src/constants/tools.tsx +++ b/src/constants/tools.tsx @@ -14,6 +14,7 @@ export interface Tool { color: ComponentProps['color']; }; significant?: boolean; + branches?: string[]; } export const tankopediaTool: Tool = { @@ -28,6 +29,7 @@ export const tankopediaTool: Tool = { color: 'purple', }, significant: true, + branches: ['main', 'dev', 'opentest'], }; export const ratingTool: Tool = { @@ -41,6 +43,7 @@ export const ratingTool: Tool = { text: 'View leaderboard', color: 'orange', }, + branches: ['main', 'dev'], }; export const compareTool: Tool = { @@ -54,6 +57,7 @@ export const compareTool: Tool = { text: 'Compare tanks', color: 'crimson', }, + branches: ['main', 'dev', 'opentest'], }; export const sessionTool: Tool = { @@ -68,6 +72,7 @@ export const sessionTool: Tool = { text: 'Start tracking', color: 'blue', }, + branches: ['main', 'dev'], }; export const discordTool: Tool = { @@ -105,6 +110,7 @@ export const playerStatsTool: Tool = { }, image: 'YelSOfT', href: '_', // TODO: remove this to re-enable link + branches: ['main', 'dev'], }; export const tankPerformanceTool: Tool = { @@ -117,6 +123,7 @@ export const tankPerformanceTool: Tool = { color: 'jade', }, image: 'vOKFB03', + branches: ['main', 'dev'], }; export const embedTool: Tool = { @@ -130,6 +137,7 @@ export const embedTool: Tool = { color: 'red', }, image: 'Q0faRYg', + branches: ['main', 'dev', 'opentest'], }; export const homeTool: Tool = { diff --git a/src/core/blitzkit/asset.ts b/src/core/blitzkit/asset.ts index c1f396e97..531e4f919 100644 --- a/src/core/blitzkit/asset.ts +++ b/src/core/blitzkit/asset.ts @@ -1,8 +1,8 @@ import { ASSETS_REPO } from '../../constants/assets'; -import { assertSecrete } from './secrete'; +import { assertSecret } from './secret'; export function asset(path: string) { - return `https://raw.githubusercontent.com/tresabhi/${ASSETS_REPO}/${assertSecrete( + return `https://raw.githubusercontent.com/tresabhi/${ASSETS_REPO}/${assertSecret( process.env.NEXT_PUBLIC_ASSET_BRANCH, )}/${path}`; } diff --git a/src/core/blitzkit/commitAssets.ts b/src/core/blitzkit/commitAssets.ts index cfc8f776e..e7d1f0798 100644 --- a/src/core/blitzkit/commitAssets.ts +++ b/src/core/blitzkit/commitAssets.ts @@ -1,6 +1,6 @@ import { ASSETS_REPO } from '../../constants/assets'; import commitMultipleFiles, { FileChange } from './commitMultipleFiles'; -import { assertSecrete } from './secrete'; +import { assertSecret } from './secret'; export async function commitAssets(message: string, changes: FileChange[]) { console.log(`Committing ${message}...`); @@ -10,7 +10,7 @@ export async function commitAssets(message: string, changes: FileChange[]) { await commitMultipleFiles( 'tresabhi', ASSETS_REPO, - assertSecrete(process.env.NEXT_PUBLIC_ASSET_BRANCH), + assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH), `${message} - ${new Date().toDateString()}`, changes, ); diff --git a/src/core/blitzkit/octokit.ts b/src/core/blitzkit/octokit.ts index a5d1cdadc..9aa350593 100644 --- a/src/core/blitzkit/octokit.ts +++ b/src/core/blitzkit/octokit.ts @@ -1,9 +1,9 @@ import { throttling } from '@octokit/plugin-throttling'; import { Octokit } from '@octokit/rest'; -import { assertSecrete } from './secrete'; +import { assertSecret } from './secret'; Octokit.plugin(throttling); export const octokit = new Octokit({ - auth: assertSecrete(process.env.GH_TOKEN), + auth: assertSecret(process.env.GH_TOKEN), }); diff --git a/src/core/blitzkit/patreonLoginUrl.ts b/src/core/blitzkit/patreonLoginUrl.ts index 2ca21161a..8c6bef249 100644 --- a/src/core/blitzkit/patreonLoginUrl.ts +++ b/src/core/blitzkit/patreonLoginUrl.ts @@ -1,10 +1,10 @@ -import { assertSecrete } from './secrete'; +import { assertSecret } from './secret'; export function patreonLoginUrl() { const params = new URLSearchParams({ response_type: 'code', - client_id: assertSecrete(process.env.NEXT_PUBLIC_PATREON_CLIENT_ID), - redirect_uri: assertSecrete(process.env.NEXT_PUBLIC_PATREON_REDIRECT_URI), + client_id: assertSecret(process.env.NEXT_PUBLIC_PATREON_CLIENT_ID), + redirect_uri: assertSecret(process.env.NEXT_PUBLIC_PATREON_REDIRECT_URI), scope: 'identity', }); diff --git a/src/core/blitzkit/secret.ts b/src/core/blitzkit/secret.ts new file mode 100644 index 000000000..949e735f9 --- /dev/null +++ b/src/core/blitzkit/secret.ts @@ -0,0 +1,4 @@ +export function assertSecret(secret?: string) { + if (secret === undefined) throw new Error('Missing secret'); + return secret; +} diff --git a/src/core/blitzkit/secrete.ts b/src/core/blitzkit/secrete.ts deleted file mode 100644 index a8be621b5..000000000 --- a/src/core/blitzkit/secrete.ts +++ /dev/null @@ -1,4 +0,0 @@ -export function assertSecrete(secrete?: string) { - if (secrete === undefined) throw new Error('Missing secret'); - return secrete; -} diff --git a/src/core/discord/manager.ts b/src/core/discord/manager.ts index 1af5dd96b..830c32a80 100644 --- a/src/core/discord/manager.ts +++ b/src/core/discord/manager.ts @@ -1,6 +1,6 @@ import { ShardingManager } from 'discord.js'; -import { assertSecrete } from '../blitzkit/secrete'; +import { assertSecret } from '../blitzkit/secret'; export const manager = new ShardingManager('dist/bot/workers/bot.js', { - token: assertSecrete(process.env.DISCORD_TOKEN), + token: assertSecret(process.env.DISCORD_TOKEN), }); diff --git a/src/core/github/assetCommit.ts b/src/core/github/assetCommit.ts index 88afd88db..a55930eeb 100644 --- a/src/core/github/assetCommit.ts +++ b/src/core/github/assetCommit.ts @@ -1,7 +1,7 @@ import { ASSETS_REPO } from '../../constants/assets'; import { GithubChangeBlob, createBlob } from '../blitzkit/createBlob'; import { octokit } from '../blitzkit/octokit'; -import { assertSecrete } from '../blitzkit/secrete'; +import { assertSecret } from '../blitzkit/secret'; export class AssetCommit { constructor(public message: string) {} @@ -26,7 +26,7 @@ export class AssetCommit { await octokit.git.getRef({ owner: 'tresabhi', repo: ASSETS_REPO, - ref: `heads/${assertSecrete(process.env.NEXT_PUBLIC_ASSET_BRANCH)}`, + ref: `heads/${assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH)}`, }) ).data.object.sha; const treeSha = ( @@ -54,7 +54,7 @@ export class AssetCommit { await octokit.git.updateRef({ owner: 'tresabhi', repo: ASSETS_REPO, - ref: `heads/${assertSecrete(process.env.NEXT_PUBLIC_ASSET_BRANCH)}`, + ref: `heads/${assertSecret(process.env.NEXT_PUBLIC_ASSET_BRANCH)}`, sha: newCommitData.sha, }); } diff --git a/src/events/interactionCreate/index.ts b/src/events/interactionCreate/index.ts index 48cf7f4fd..53ae9dbb9 100644 --- a/src/events/interactionCreate/index.ts +++ b/src/events/interactionCreate/index.ts @@ -33,7 +33,7 @@ import { searchPlayersCommand } from '../../commands/searchPlayers'; import { statsCommand } from '../../commands/stats'; import { todayCommand } from '../../commands/today'; import { RenderConfiguration } from '../../core/blitzkit/renderConfiguration'; -import { assertSecrete } from '../../core/blitzkit/secrete'; +import { assertSecret } from '../../core/blitzkit/secret'; import handleAutocomplete from './handlers/autocomplete'; import handleButton from './handlers/button'; import handleChatInputCommand from './handlers/chatInputCommand'; @@ -115,7 +115,7 @@ export const commands = Promise.allSettled(COMMANDS_RAW).then((rawCommands) => { ); }); -const rest = new REST().setToken(assertSecrete(process.env.DISCORD_TOKEN)); +const rest = new REST().setToken(assertSecret(process.env.DISCORD_TOKEN)); commands.then((awaitedCommands) => { const body = Object.values(awaitedCommands).map((registry) => @@ -123,7 +123,7 @@ commands.then((awaitedCommands) => { ); rest.put( - Routes.applicationCommands(assertSecrete(process.env.DISCORD_CLIENT_ID)), + Routes.applicationCommands(assertSecret(process.env.DISCORD_CLIENT_ID)), { body, }, diff --git a/src/workers/bot.ts b/src/workers/bot.ts index 68c6cfd43..948916ed5 100644 --- a/src/workers/bot.ts +++ b/src/workers/bot.ts @@ -1,9 +1,9 @@ import { registerProcesses } from '../core/blitzkit/processes'; -import { assertSecrete } from '../core/blitzkit/secrete'; +import { assertSecret } from '../core/blitzkit/secret'; import { client } from '../core/discord/client'; console.log(`🟡 Launching bot ${client.shard?.ids[0]}`); registerProcesses(); -client.login(assertSecrete(process.env.DISCORD_TOKEN)); +client.login(assertSecret(process.env.DISCORD_TOKEN));