diff --git a/_package.json b/_package.json new file mode 100644 index 000000000..0b48acc03 --- /dev/null +++ b/_package.json @@ -0,0 +1,113 @@ +{ + "name": "blitzkit", + "private": true, + "version": "1.27.11", + "description": "🎉 Tools for everything World of Tanks Blitz", + "type": "module", + "types": "./types.d.ts", + "workspaces": ["packages/*", "submodules/*"], + "scripts": { + "build:assets": "cd packages/scripts && bun run build:assets", + "build:averages": "bun --filter=@blitzkit/scripts run build:averages", + "build:bot": "cd packages/scripts && bun run build:bot", + "build:website": "bun build:prisma --no-hints && cd packages/website && bun run build", + "build:prisma": "prisma generate", + "build:sitemap": "bun scripts/sitemap.ts", + "build:docs": "vitepress build docs", + "build:ratingleaderboard": "cd packages/scripts && bun run build:ratingleaderboard", + "dev:bot": "bun run build:bot --dev && bun start:bot", + "start:bot": "bun dist/bot/main.js", + "dev:docs": "vitepress dev docs", + "dev:website": "cd packages/website-ue && bun run dev", + "dev:api": "bun --filter=@blitzkit/api run dev", + "setup:depotdownloader": "bun --filter=@blitzkit/scripts run setup:depotdownloader", + "setup:patches": "bun --filter=@blitzkit/scripts run setup:patches", + "start:website": "bun --filter=@blitzkit/website run start", + "host:docs": "vitepress preview docs", + "lint": "tsc", + "lint:website": "cd packages/website && bun run lint", + "format": "prettier --write \"**/*.@(json|js|jsx|css|md|ts|tsx|html|xml|yml|gltf)\"", + "update": "yarn upgrade --latest", + "tunnel": "cloudflared tunnel --url http://localhost:3000", + "discoverids": "scripts/discoverIds.ts", + "build:protos": "bun packages/scripts/src/protos.ts", + "preview:website": "cd packages/website && bun run preview", + "build:reviews": "cd packages/scripts && bun build:reviews", + "build:ids": "cd packages/scripts && bun build:ids", + "prunestrings": "cd packages/scripts && bun prunestrings" + }, + "license": "MIT", + "dependencies": { + "satori": "^0.10.14", + "@resvg/resvg-js": "^2.6.2", + "discord.js": "^14.16.3", + "fuzzysort": "^2.0.4", + "bepaint": "^0.1.0-beta.3", + "markdown-escape": "^2.0.0", + "@types/markdown-escape": "^1.1.3", + "@types/adm-zip": "^0.5.5", + "@types/lz4js": "^0.2.1", + "@octokit/plugin-throttling": "^8.2.0", + "@octokit/rest": "^20.1.1", + "@prisma/client": "^6.6.0", + "adm-zip": "^0.5.16", + "crc": "^4.3.2", + "dotenv": "^16.4.5", + "lz4js": "^0.2.0", + "ts-proto": "^2.2.2", + "yaml": "^2.5.0", + "ts-deepmerge": "^7.0.2", + "@types/decompress": "^4.2.7", + "@types/progress": "^2.0.7", + "@gltf-transform/core": "^4.0.10", + "@gltf-transform/extensions": "^4.0.10", + "@gltf-transform/functions": "^4.0.10", + "csv-parse": "^5.5.6", + "decompress": "^4.2.1", + "esbuild": "^0.19.12", + "fast-xml-parser": "^4.4.1", + "progress": "^2.0.3", + "puppeteer": "^23.10.4", + "@astrojs/check": "^0.9.4", + "@astrojs/sitemap": "^3.2.1", + "@playform/compress": "^0.1.9", + "@playform/inline": "^0.1.2", + "@types/js-cookie": "^3.0.6", + "@types/three": "^0.160.0", + "astro-compressor": "^1.0.0", + "@astrojs/partytown": "^2.1.4", + "@astrolib/seo": "^1.0.0-beta.8", + "@fontsource/inter": "^5.2.5", + "@nanostores/persistent": "^0.10.2", + "@nanostores/react": "^0.7.3", + "@nivo/bar": "^0.87.0", + "@nivo/line": "^0.88.0", + "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/themes": "^3.1.4", + "@react-three/drei": "^9.115.0", + "@react-three/fiber": "^8.17.10", + "compare-versions": "^6.1.1", + "echarts": "^5.5.1", + "immer": "^10.1.1", + "js-cookie": "^3.0.5", + "markdown-to-jsx": "^7.5.0", + "nanostores": "^0.11.3", + "react-device-detect": "^2.2.3", + "react-promise-suspense": "^0.3.4", + "three": "^0.169.0", + "urlon": "^3.1.0", + "zustand": "^4.5.5", + "@types/bun": "latest", + "@types/lodash-es": "^4.17.12", + "@types/node": "^22.14.1", + "prettier": "^3.5.3", + "prisma": "^6.6.0", + "typescript": "^5.8.3", + "googleapis": "^144.0.0", + "lodash-es": "^4.17.21", + "protobufjs": "^7.5.2", + "quicklime": "^1.2.0", + "sharp": "^0.33.5" + } +} diff --git a/archive.json b/archive.json new file mode 100644 index 000000000..c4d8abca6 --- /dev/null +++ b/archive.json @@ -0,0 +1,124 @@ +{ + "name": "blitzkit", + "private": true, + "version": "1.27.11", + "description": "🎉 Tools for everything World of Tanks Blitz", + "type": "module", + "types": "./types.d.ts", + "workspaces": [ + "packages/*", + "submodules/*" + ], + "scripts": { + "build:assets": "cd packages/scripts && bun run build:assets", + "build:averages": "bun --filter=@blitzkit/scripts run build:averages", + "build:bot": "cd packages/scripts && bun run build:bot", + "build:website": "bun build:prisma --no-hints && cd packages/website && bun run build", + "build:prisma": "prisma generate", + "build:sitemap": "bun scripts/sitemap.ts", + "build:docs": "vitepress build docs", + "build:ratingleaderboard": "cd packages/scripts && bun run build:ratingleaderboard", + "dev:bot": "bun run build:bot --dev && bun start:bot", + "start:bot": "bun dist/bot/main.js", + "dev:docs": "vitepress dev docs", + "dev:website": "cd packages/website-ue && bun run dev", + "dev:api": "bun --filter=@blitzkit/api run dev", + "setup:depotdownloader": "bun --filter=@blitzkit/scripts run setup:depotdownloader", + "setup:patches": "bun --filter=@blitzkit/scripts run setup:patches", + "start:website": "bun --filter=@blitzkit/website run start", + "host:docs": "vitepress preview docs", + "lint": "tsc", + "lint:website": "cd packages/website && bun run lint", + "format": "prettier --write \"**/*.@(json|js|jsx|css|md|ts|tsx|html|xml|yml|gltf)\"", + "update": "yarn upgrade --latest", + "tunnel": "cloudflared tunnel --url http://localhost:3000", + "discoverids": "scripts/discoverIds.ts", + "build:protos": "bun packages/scripts/src/protos.ts", + "preview:website": "cd packages/website && bun run preview", + "build:reviews": "cd packages/scripts && bun build:reviews", + "build:ids": "cd packages/scripts && bun build:ids", + "prunestrings": "cd packages/scripts && bun prunestrings" + }, + "license": "MIT", + "dependencies": { + "satori": "^0.10.14", + "@resvg/resvg-js": "^2.6.2", + "discord.js": "^14.16.3", + "fuzzysort": "^2.0.4", + "bepaint": "^0.1.0-beta.3", + "markdown-escape": "^2.0.0", + "@types/markdown-escape": "^1.1.3", + "@types/adm-zip": "^0.5.5", + "@types/lz4js": "^0.2.1", + "@octokit/plugin-throttling": "^8.2.0", + "@octokit/rest": "^20.1.1", + "@prisma/client": "^6.6.0", + "adm-zip": "^0.5.16", + "crc": "^4.3.2", + "dotenv": "^16.4.5", + "lz4js": "^0.2.0", + "ts-proto": "^2.2.2", + "yaml": "^2.5.0", + "ts-deepmerge": "^7.0.2", + "@types/decompress": "^4.2.7", + "@types/progress": "^2.0.7", + "@gltf-transform/core": "^4.0.10", + "@gltf-transform/extensions": "^4.0.10", + "@gltf-transform/functions": "^4.0.10", + "csv-parse": "^5.5.6", + "decompress": "^4.2.1", + "esbuild": "^0.19.12", + "fast-xml-parser": "^4.4.1", + "progress": "^2.0.3", + "puppeteer": "^23.10.4", + "@astrojs/check": "^0.9.4", + "@astrojs/sitemap": "^3.2.1", + "@playform/compress": "^0.1.9", + "@playform/inline": "^0.1.2", + "@types/js-cookie": "^3.0.6", + "@types/three": "^0.160.0", + "astro-compressor": "^1.0.0", + "@astrojs/partytown": "^2.1.4", + "@astrolib/seo": "^1.0.0-beta.8", + "@fontsource/inter": "^5.2.5", + "@nanostores/persistent": "^0.10.2", + "@nanostores/react": "^0.7.3", + "@nivo/bar": "^0.87.0", + "@nivo/line": "^0.88.0", + "@radix-ui/colors": "^3.0.0", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/themes": "^3.1.4", + "@react-three/drei": "^9.115.0", + "@react-three/fiber": "^8.17.10", + "compare-versions": "^6.1.1", + "echarts": "^5.5.1", + "immer": "^10.1.1", + "js-cookie": "^3.0.5", + "markdown-to-jsx": "^7.5.0", + "nanostores": "^0.11.3", + "react-device-detect": "^2.2.3", + "react-promise-suspense": "^0.3.4", + "three": "^0.169.0", + "urlon": "^3.1.0", + "zustand": "^4.5.5", + "@types/bun": "latest", + "@types/lodash-es": "^4.17.12", + "@types/node": "^22.14.1", + "prettier": "^3.5.3", + "prisma": "^6.6.0", + "typescript": "^5.8.3", + "googleapis": "^144.0.0", + "lodash-es": "^4.17.21", + "protobufjs": "^7.5.2", + "quicklime": "^1.2.0", + "sharp": "^0.33.5", + "@blitzkit/core": "workspace:*", + "@blitzkit/i18n": "workspace:*", + "@astrojs/react": "^4.3.0", + "@types/react": "^19.1.5", + "@types/react-dom": "^19.1.5", + "astro": "^5.8.0", + "react": "^19.1.0", + "react-dom": "^19.1.0" + } +} diff --git a/bun.lockb b/bun.lockb index c9cf84fce..78ce50ff0 100644 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index de2ad62c2..cadab3e60 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "type": "module", "types": "./types.d.ts", "workspaces": [ - "packages/*" + "packages/*", + "submodules/*" ], "scripts": { "build:assets": "cd packages/scripts && bun run build:assets", @@ -38,25 +39,5 @@ "build:ids": "cd packages/scripts && bun build:ids", "prunestrings": "cd packages/scripts && bun prunestrings" }, - "license": "MIT", - "dependencies": { - "@astrojs/react": "^4.3.0", - "@types/react": "^19.1.5", - "@types/react-dom": "^19.1.5", - "googleapis": "^144.0.0", - "lodash-es": "^4.17.21", - "protobufjs": "^7.5.2", - "quicklime": "^1.2.0", - "react": "^19.1.0", - "react-dom": "^19.1.0", - "sharp": "^0.33.5" - }, - "devDependencies": { - "@types/bun": "latest", - "@types/lodash-es": "^4.17.12", - "@types/node": "^22.14.1", - "prettier": "^3.5.3", - "prisma": "^6.6.0", - "typescript": "^5.8.3" - } + "license": "MIT" } diff --git a/packages/bot/package.json b/packages/bot/package.json index aae56319d..8d676f347 100644 --- a/packages/bot/package.json +++ b/packages/bot/package.json @@ -3,24 +3,8 @@ "private": true, "type": "module", "types": "src/types.d.ts", - "dependencies": { - "@blitzkit/core": "workspace:*", - "@blitzkit/i18n": "workspace:*", - "satori": "^0.10.14", - "@resvg/resvg-js": "^2.6.2", - "discord.js": "^14.16.3", - "react": "^18.3.1", - "@radix-ui/colors": "^3.0.0", - "fuzzysort": "^2.0.4", - "bepaint": "^0.1.0-beta.3", - "dotenv": "^16.4.5", - "markdown-escape": "^2.0.0" - }, "scripts": { "dev": "bun --watch src/main.ts", "start": "bun src/main.ts" - }, - "devDependencies": { - "@types/markdown-escape": "^1.1.3" } } diff --git a/packages/bot/tsconfig.json b/packages/bot/tsconfig.json index d24722b0d..902639a19 100644 --- a/packages/bot/tsconfig.json +++ b/packages/bot/tsconfig.json @@ -1,4 +1,11 @@ { "extends": "../../tsconfig.json", - "include": ["src/**/*", "../core/src/blitzkit/supportedLocales.ts", "../i18n/src/unwrapper.ts"] + "include": [ + "src/**/*", + "../core/src/blitzkit/supportedLocales.ts", + "../i18n/src/unwrapper.ts" + ], + "compilerOptions": { + "baseUrl": "../../" + } } diff --git a/packages/core/package.json b/packages/core/package.json index 8ad88467a..fa0c8aa5b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -2,22 +2,5 @@ "name": "@blitzkit/core", "private": true, "type": "module", - "main": "src/index.ts", - "dependencies": { - "@octokit/plugin-throttling": "^8.2.0", - "@octokit/rest": "^20.1.1", - "@prisma/client": "^6.6.0", - "adm-zip": "^0.5.16", - "crc": "^4.3.2", - "dotenv": "^16.4.5", - "lz4js": "^0.2.0", - "pickleparser": "^0.2.1", - "protobufjs": "^7.4.0", - "ts-proto": "^2.2.2", - "yaml": "^2.5.0" - }, - "devDependencies": { - "@types/adm-zip": "^0.5.5", - "@types/lz4js": "^0.2.1" - } + "main": "src/index.ts" } diff --git a/packages/core/src/blitz/catalogItemAccessor.ts b/packages/core/src/blitz/catalogItemAccessor.ts new file mode 100644 index 000000000..dde396517 --- /dev/null +++ b/packages/core/src/blitz/catalogItemAccessor.ts @@ -0,0 +1,28 @@ +import { CatalogItem } from '@protos/blitz_items'; +import { Any } from '@protos/google/protobuf/any'; +import { MessageFns } from '../protos'; + +export class CatalogItemAccessor { + private components: Record = {}; + + constructor(item: CatalogItem) { + for (const component of item.components) { + if ( + component.value === undefined || + component.value.component === undefined + ) { + continue; + } + + this.components[component.key] = component.value.component; + } + } + + get(Message: MessageFns, component: string) { + if (component in this.components) { + return Message.decode(this.components[component].value); + } + + throw new Error(`Unknown component: ${component}`); + } +} diff --git a/packages/core/src/blitz/index.ts b/packages/core/src/blitz/index.ts index d1bd1b37d..7765608cb 100644 --- a/packages/core/src/blitz/index.ts +++ b/packages/core/src/blitz/index.ts @@ -1,4 +1,5 @@ export * from './canSplash'; +export * from './catalogItemAccessor'; export * from './clans'; export * from './classes'; export * from './constants'; @@ -18,6 +19,7 @@ export * from './getTankStats'; export * from './idToRegion'; export * from './isOnGoingRatingSeason'; export * from './isValidBlitzId'; +export * from './metadataAccessor'; export * from './nations'; export * from './normalizeExtra'; export * from './normalizeIds'; diff --git a/packages/core/src/blitz/metadataAccessor.ts b/packages/core/src/blitz/metadataAccessor.ts new file mode 100644 index 000000000..3d1ae7889 --- /dev/null +++ b/packages/core/src/blitz/metadataAccessor.ts @@ -0,0 +1,38 @@ +import { CatalogItem } from '@protos/blitz_items'; +import { Metadata } from '@protos/blitz_metadata'; +import { CatalogItemAccessor } from './catalogItemAccessor'; + +export class UnpackedMetadataAccessor { + private items: Record = {}; + + constructor(metadata: Metadata) { + for (const item of metadata.catalog_items) { + if (item.catalog_id in this.items) { + throw new Error(`Duplicate catalog ID: ${item.catalog_id}`); + } + + this.items[item.catalog_id] = new CatalogItemAccessor(item); + } + } + + get(item: string) { + if (item in this.items) return this.items[item]; + + throw new Error(`Unknown catalog ID: ${item}`); + } +} + +export class DiscreteMetadataAccessor { + constructor(private base: string) {} + + async get(item: string) { + const response = await fetch(`${this.base}/${item}.pb`); + + if (!response.ok) throw new Error(`Unknown catalog ID: ${item}`); + + const buffer = await response.arrayBuffer(); + const catalogItem = CatalogItem.decode(new Uint8Array(buffer)); + + return new CatalogItemAccessor(catalogItem); + } +} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 2ee5d8b21..f2ca1d8d9 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,4 +1,7 @@ { "extends": "../../tsconfig.json", - "include": ["src/**/*", "../i18n/src/strings.ts"] + "include": ["src/**/*", "../i18n/src/strings.ts"], + "compilerOptions": { + "baseUrl": "../../" + } } diff --git a/packages/i18n/package.json b/packages/i18n/package.json index 6e5d9d87d..14880a8be 100644 --- a/packages/i18n/package.json +++ b/packages/i18n/package.json @@ -2,9 +2,5 @@ "name": "@blitzkit/i18n", "private": true, "type": "module", - "main": "src/index.ts", - "dependencies": { - "ts-deepmerge": "^7.0.2" - }, - "devDependencies": {} + "main": "src/index.ts" } diff --git a/packages/scripts/package.json b/packages/scripts/package.json index c2257f005..da4e97c55 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -12,22 +12,5 @@ "build:bot": "bun src/buildBot.ts", "build:ratingleaderboard": "bun src/buildRatingLeaderboard.ts", "prunestrings": "bun src/pruneStrings.ts" - }, - "dependencies": { - "@blitzkit/core": "workspace:*", - "@blitzkit/i18n": "workspace:*", - "@gltf-transform/core": "^4.0.10", - "@gltf-transform/extensions": "^4.0.10", - "@gltf-transform/functions": "^4.0.10", - "csv-parse": "^5.5.6", - "decompress": "^4.2.1", - "esbuild": "^0.19.12", - "fast-xml-parser": "^4.4.1", - "progress": "^2.0.3", - "puppeteer": "^23.10.4" - }, - "devDependencies": { - "@types/decompress": "^4.2.7", - "@types/progress": "^2.0.7" } } diff --git a/packages/scripts/tsconfig.json b/packages/scripts/tsconfig.json index 52d43eaaa..70747e7dc 100644 --- a/packages/scripts/tsconfig.json +++ b/packages/scripts/tsconfig.json @@ -1,4 +1,7 @@ { "extends": "../../tsconfig.json", - "include": ["src/**/*"] + "include": ["src/**/*"], + "compilerOptions": { + "baseUrl": "../../" + } } diff --git a/packages/website-ue/package.json b/packages/website-ue/package.json index 99e8d18cc..68a904a70 100644 --- a/packages/website-ue/package.json +++ b/packages/website-ue/package.json @@ -1,5 +1,5 @@ { - "name": "website-ue", + "name": "@blitzkit/website-ue", "type": "module", "scripts": { "dev": "astro dev", @@ -9,7 +9,7 @@ }, "dependencies": { "@blitzkit/core": "workspace:*", - "@blitzkit/i18n": "workspace:*", + "@blitzkit/closed": "workspace:*", "@astrojs/react": "^4.3.0", "@types/react": "^19.1.5", "@types/react-dom": "^19.1.5", diff --git a/packages/website-ue/src/components/TestComponent.tsx b/packages/website-ue/src/components/TestComponent.tsx new file mode 100644 index 000000000..de84d7051 --- /dev/null +++ b/packages/website-ue/src/components/TestComponent.tsx @@ -0,0 +1,9 @@ +import { use } from 'react'; + +export function TestComponent() { + const content = use( + fetch('https://example.com/').then((response) => response.text()), + ); + + return
;
+}
diff --git a/packages/website-ue/src/core/blitz/discreteMetadata.ts b/packages/website-ue/src/core/blitz/discreteMetadata.ts
new file mode 100644
index 000000000..ad2b97025
--- /dev/null
+++ b/packages/website-ue/src/core/blitz/discreteMetadata.ts
@@ -0,0 +1,3 @@
+import { DiscreteMetadataAccessor } from 'packages/core/src';
+
+export const discreteMetadata = new DiscreteMetadataAccessor('/api/catalog');
diff --git a/packages/website-ue/src/core/blitz/unpackedMetadata.ts b/packages/website-ue/src/core/blitz/unpackedMetadata.ts
new file mode 100644
index 000000000..6fd18d1ba
--- /dev/null
+++ b/packages/website-ue/src/core/blitz/unpackedMetadata.ts
@@ -0,0 +1,9 @@
+import { requestAutoProxyClient, unpackMetadata } from '@blitzkit/closed';
+import type { GetPackedMetadataAsyncResponse } from '@blitzkit/closed/src/unreal/protos/auto_legacy_proxy_client';
+import { UnpackedMetadataAccessor } from 'packages/core/src';
+
+export const unpackedMetadata = new UnpackedMetadataAccessor(
+  await requestAutoProxyClient(
+    'GetPackedMetadataAsyncRequest',
+  ).then(unpackMetadata),
+);
diff --git a/packages/website-ue/src/pages/[...locale]/tanks/index.astro b/packages/website-ue/src/pages/[...locale]/tanks/index.astro
new file mode 100644
index 000000000..6b26050fd
--- /dev/null
+++ b/packages/website-ue/src/pages/[...locale]/tanks/index.astro
@@ -0,0 +1,14 @@
+---
+import { CatalogItemsComponent } from '@protos/blitz_static_catalog_items_group_component';
+import { TestComponent } from '../../../components/TestComponent';
+import { unpackedMetadata } from '../../../core/blitz/unpackedMetadata';
+export { getStaticPaths } from '../index.astro';
+
+const { locale } = Astro.props;
+
+const allTanks = unpackedMetadata
+  .get('CatalogItemsGroupEntity.all_tanks')
+  .get(CatalogItemsComponent, 'catalogItemsGroupComponent');
+---
+
+
diff --git a/packages/website-ue/tsconfig.json b/packages/website-ue/tsconfig.json
index 2158c2b40..1162e4f1f 100644
--- a/packages/website-ue/tsconfig.json
+++ b/packages/website-ue/tsconfig.json
@@ -4,6 +4,7 @@
   "exclude": ["dist"],
   "compilerOptions": {
     "jsx": "react-jsx",
-    "jsxImportSource": "react"
+    "jsxImportSource": "react",
+    "baseUrl": "../../"
   }
 }
diff --git a/packages/website/package.json b/packages/website/package.json
index feabd8ff5..08b6b83d7 100644
--- a/packages/website/package.json
+++ b/packages/website/package.json
@@ -10,46 +10,8 @@
     "astro": "astro"
   },
   "dependencies": {
-    "@astrojs/partytown": "^2.1.4",
-    "@astrolib/seo": "^1.0.0-beta.8",
-    "@blitzkit/core": "workspace:*",
-    "@blitzkit/i18n": "workspace:*",
-    "@fontsource/inter": "^5.2.5",
-    "@nanostores/persistent": "^0.10.2",
-    "@nanostores/react": "^0.7.3",
-    "@nivo/bar": "^0.87.0",
-    "@nivo/line": "^0.88.0",
-    "@radix-ui/colors": "^3.0.0",
-    "@radix-ui/react-icons": "^1.3.0",
-    "@radix-ui/themes": "^3.1.4",
-    "@react-three/drei": "^9.115.0",
-    "@react-three/fiber": "^8.17.10",
-    "compare-versions": "^6.1.1",
-    "echarts": "^5.5.1",
-    "immer": "^10.1.1",
-    "js-cookie": "^3.0.5",
-    "markdown-to-jsx": "^7.5.0",
-    "nanostores": "^0.11.3",
-    "quicklime": "^1.2.0",
-    "react": "^18.3.1",
-    "react-device-detect": "^2.2.3",
-    "react-dom": "^18.3.1",
-    "react-promise-suspense": "^0.3.4",
-    "three": "^0.169.0",
-    "urlon": "^3.1.0",
-    "zustand": "^4.5.5"
   },
   "devDependencies": {
-    "@astrojs/check": "^0.9.4",
-    "@astrojs/react": "^3.6.2",
-    "@astrojs/sitemap": "^3.2.1",
-    "@playform/compress": "^0.1.9",
-    "@playform/inline": "^0.1.2",
-    "@types/js-cookie": "^3.0.6",
-    "@types/react": "^18.3.12",
-    "@types/react-dom": "^18.3.1",
-    "@types/three": "^0.160.0",
-    "astro": "^4.16.7",
-    "astro-compressor": "^1.0.0"
+
   }
 }
diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json
index db4d5dcac..8a7b14cd6 100644
--- a/packages/website/tsconfig.json
+++ b/packages/website/tsconfig.json
@@ -3,6 +3,7 @@
   "compilerOptions": {
     "jsx": "react-jsx",
     "jsxImportSource": "react",
-    "types": ["vite/client"]
+    "types": ["vite/client"],
+    "baseUrl": "../../"
   }
 }
diff --git a/submodules/blitzkit-closed b/submodules/blitzkit-closed
index accc9ee26..71263548c 160000
--- a/submodules/blitzkit-closed
+++ b/submodules/blitzkit-closed
@@ -1 +1 @@
-Subproject commit accc9ee26bca2f327381ceac8ff9f72869a72aec
+Subproject commit 71263548cc16aa27cb9b3ab73376f0b53c3f343f
diff --git a/tsconfig.json b/tsconfig.json
index f5912f4e8..5a12d819a 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -18,7 +18,12 @@
       {
         "name": "next"
       }
-    ]
+    ],
+    "baseUrl": "./",
+    "paths": {
+      "@protos/*": ["submodules/blitzkit-closed/src/unreal/protos/*"],
+      "@strings/*": ["packages/i18n/strings/*"]
+    }
   },
   "exclude": ["node_modules/**/*", "dist", ".next"]
 }