Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 0 additions & 20 deletions .github/dependabot.yml

This file was deleted.

2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: "20"
node-version: "24"

- name: Install dependencies
run: npm ci
Expand Down
8 changes: 3 additions & 5 deletions apps/juxtaposition-ui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,10 @@
"connect-redis": "^9.0.0",
"cookie-parser": "^1.4.7",
"crc": "^4.3.2",
"express": "^4.22.1",
"express-async-errors": "^3.1.1",
"express": "^5.2.1",
"express-prom-bundle": "^7.0.2",
"express-rate-limit": "^8.2.1",
"express-session": "^1.19.0",
"express-subdomain": "^1.0.6",
"hashmap": "^2.4.0",
"i18next": "^25.8.13",
"luxon": "^3.7.2",
Expand Down Expand Up @@ -67,7 +65,7 @@
"@types/hashmap": "^2.3.4",
"@types/luxon": "^3.7.1",
"@types/method-override": "^3.0.0",
"@types/node": "^22.19.15",
"@types/node": "^24.12.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"browserslist": "^4.28.1",
Expand All @@ -82,4 +80,4 @@
"tsup": "^8.5.1",
"typescript": "^5.9.3"
}
}
}
7 changes: 6 additions & 1 deletion apps/juxtaposition-ui/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,12 @@ const schema = z.object({
redis: z.object({
host: z.string(),
port: z.coerce.number().default(6379)
})
}),
domains: z.object({
web: z.hostname().default('juxt.pretendo.network'),
ctr: z.hostname().default('ctr.olv.pretendo.cc'),
portal: z.hostname().default('portal.olv.pretendo.cc')
}).prefault({})
});

export const presets = {
Expand Down
14 changes: 14 additions & 0 deletions apps/juxtaposition-ui/src/middleware/hostLimit.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import type express from 'express';

export function restrictHostnames<TFn extends express.Router>(
allowedHostnames: string[],
fn: TFn
): (request: express.Request, response: express.Response, next: () => void) => void | TFn {
return (request: express.Request, response: express.Response, next: () => void) => {
if (allowedHostnames.includes(request.hostname)) {
return fn(request, response, next);
}

return next();
};
}
1 change: 0 additions & 1 deletion apps/juxtaposition-ui/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ import express from 'express';
import cookieParser from 'cookie-parser';
import session from 'express-session';
import { RedisStore } from 'connect-redis';
import 'express-async-errors'; // See package docs
import methodOverride from 'method-override';
import { database } from '@/database';
import { logger } from '@/logger';
Expand Down
20 changes: 4 additions & 16 deletions apps/juxtaposition-ui/src/services/juxt-web/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import express from 'express';
import subdomain from 'express-subdomain';
import { webAuth } from '@/middleware/webAuth';
import { consoleAuth } from '@/middleware/consoleAuth';
import { checkBan } from '@/middleware/checkBan';
import { detectVersion } from '@/middleware/detectVersion';
import { checkDiscovery } from '@/middleware/discovery';
import { logger } from '@/logger';
import { routes } from '@/services/juxt-web/routes';
import { restrictHostnames } from '@/middleware/hostLimit';
import { config } from '@/config';

export const router = express.Router();
const consoleRouter = express.Router();
Expand All @@ -20,20 +20,8 @@ router.use(routes.ENTRYPOINT);
router.use(checkDiscovery);

// Create subdomains
logger.info('[JUXT-WEB] Creating \'Web\' subdomain');
router.use(subdomain('juxt', webRouter));
router.use(subdomain('juxt-beta', webRouter));
router.use(subdomain('juxt-dev', webRouter));

logger.info('[JUXT-WEB] Creating \'Wii U\' subdomain');
router.use(subdomain('portal.olv', consoleRouter));
router.use(subdomain('portal-beta.olv', consoleRouter));
router.use(subdomain('portal-dev.olv', consoleRouter));

logger.info('[JUXT-WEB] Creating \'3DS\' subdomain');
router.use(subdomain('ctr.olv', consoleRouter));
router.use(subdomain('ctr-beta.olv', consoleRouter));
router.use(subdomain('ctr-dev.olv', consoleRouter));
router.use(restrictHostnames([config.domains.web], webRouter));
router.use(restrictHostnames([config.domains.portal, config.domains.ctr], consoleRouter));

// Setup routes for console
consoleRouter.use(consoleAuth);
Expand Down
4 changes: 1 addition & 3 deletions apps/miiverse-api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,9 @@
"@repo/grpc-client": "^0.0.0",
"colors": "^1.4.0",
"crc": "^4.3.2",
"express": "^4.22.1",
"express-async-errors": "^3.1.1",
"express": "^5.2.1",
"express-prom-bundle": "^7.0.2",
"express-rate-limit": "^8.2.1",
"express-subdomain": "^1.0.6",
"moment": "^2.24.0",
"mongoose": "^8.23.0",
"multer": "^2.1.1",
Expand Down
6 changes: 5 additions & 1 deletion apps/miiverse-api/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,11 @@ const schema = z.object({
port: z.coerce.number().default(8125),
apiKey: z.string()
})
})
}),
domains: z.object({
api: z.hostname().default('api.olv.pretendo.cc'),
discovery: z.hostname().default('discovery.olv.pretendo.cc')
}).prefault({})
});

export const presets: Record<string, any> = {
Expand Down
14 changes: 14 additions & 0 deletions apps/miiverse-api/src/middleware/hostLimit.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import type express from 'express';

export function restrictHostnames<TFn extends express.Router>(
allowedHostnames: string[],
fn: TFn
): (request: express.Request, response: express.Response, next: () => void) => void | TFn {
return (request: express.Request, response: express.Response, next: () => void) => {
if (allowedHostnames.includes(request.hostname)) {
return fn(request, response, next);
}

return next();
};
}
1 change: 0 additions & 1 deletion apps/miiverse-api/src/server.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import express from 'express';
import 'express-async-errors'; // See package docs
import expressMetrics from 'express-prom-bundle';
import { connect as connectDatabase } from '@/database';
import { logger } from '@/logger';
Expand Down
10 changes: 3 additions & 7 deletions apps/miiverse-api/src/services/api/index.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import express from 'express';
import subdomain from 'express-subdomain';
import { rateLimit } from 'express-rate-limit';
import { LOG_INFO } from '@/logger';
import postsHandlers from '@/services/api/routes/posts';
import friendMessagesHandlers from '@/services/api/routes/friend_messages';
import communitiesHandlers from '@/services/api/routes/communities';
import peopleHandlers from '@/services/api/routes/people';
import topicsHandlers from '@/services/api/routes/topics';
import usersHandlers from '@/services/api/routes/users';
import statusHandlers from '@/services/api/routes/status';
import { restrictHostnames } from '@/middleware/hostLimit';
import { config } from '@/config';

// Main router for endpointsindex.js
const router = express.Router();
Expand All @@ -25,11 +25,7 @@ const limiter = rateLimit({
});
router.use(limiter);

// Create subdomains
LOG_INFO('[MIIVERSE] Creating \'api\' subdomain');
router.use(subdomain('api.olv', api));
router.use(subdomain('api-test.olv', api));
router.use(subdomain('api-dev.olv', api));
router.use(restrictHostnames([config.domains.api], api));

// Setup routes
api.use('/v1/posts', postsHandlers);
Expand Down
9 changes: 3 additions & 6 deletions apps/miiverse-api/src/services/discovery/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import express from 'express';
import subdomain from 'express-subdomain';
import { LOG_INFO } from '@/logger';
import discoveryHandlers from '@/services/discovery/routes/discovery';
import { restrictHostnames } from '@/middleware/hostLimit';
import { config } from '@/config';

// Main router for endpointsindex.js
const router = express.Router();
Expand All @@ -10,10 +10,7 @@ const router = express.Router();
const discovery = express.Router();

// Create subdomains
LOG_INFO('[MIIVERSE] Creating \'discovery\' subdomain');
router.use(subdomain('discovery.olv', discovery));
router.use(subdomain('discovery-test.olv', discovery));
router.use(subdomain('discovery-dev.olv', discovery));
router.use(restrictHostnames([config.domains.discovery], discovery));

// Setup routes
discovery.use('/v1/endpoint', discoveryHandlers);
Expand Down
16 changes: 0 additions & 16 deletions apps/miiverse-api/src/types/express-subdomain.d.ts

This file was deleted.

2 changes: 1 addition & 1 deletion juxtaposition-ui.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

ARG app_dir="/home/node/app"

FROM node:22-alpine
FROM node:24-alpine
ARG app_dir
WORKDIR ${app_dir}

Expand Down
2 changes: 1 addition & 1 deletion miiverse-api.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

ARG app_dir="/home/node/app"

FROM node:22-alpine
FROM node:24-alpine
ARG app_dir
WORKDIR ${app_dir}

Expand Down
Loading