Compare commits

...

1 commit

Author SHA1 Message Date
Acid Chicken (硫酸鶏)
3cf5e4fabc
wip 2023-06-15 15:40:14 +09:00
8 changed files with 665 additions and 147 deletions

View file

@ -65,9 +65,13 @@
"@fastify/multipart": "7.6.0", "@fastify/multipart": "7.6.0",
"@fastify/static": "6.10.2", "@fastify/static": "6.10.2",
"@fastify/view": "7.4.1", "@fastify/view": "7.4.1",
"@nestjs/common": "9.4.2", "@mercuriusjs/gateway": "2.0.0",
"@nestjs/core": "9.4.2", "@nestjs/common": "9.4.3",
"@nestjs/testing": "9.4.2", "@nestjs/core": "9.4.3",
"@nestjs/graphql": "11.0.6",
"@nestjs/mercurius": "11.0.6",
"@nestjs/platform-fastify": "9.4.3",
"@nestjs/testing": "9.4.3",
"@peertube/http-signature": "1.7.0", "@peertube/http-signature": "1.7.0",
"@sinonjs/fake-timers": "10.2.0", "@sinonjs/fake-timers": "10.2.0",
"@swc/cli": "0.1.62", "@swc/cli": "0.1.62",
@ -96,6 +100,7 @@
"fluent-ffmpeg": "2.1.2", "fluent-ffmpeg": "2.1.2",
"form-data": "4.0.0", "form-data": "4.0.0",
"got": "12.6.0", "got": "12.6.0",
"graphql": "16.6.0",
"happy-dom": "9.20.3", "happy-dom": "9.20.3",
"hpagent": "1.2.0", "hpagent": "1.2.0",
"ioredis": "5.3.2", "ioredis": "5.3.2",
@ -107,6 +112,7 @@
"jsonld": "8.2.0", "jsonld": "8.2.0",
"jsrsasign": "10.8.6", "jsrsasign": "10.8.6",
"meilisearch": "0.32.5", "meilisearch": "0.32.5",
"mercurius": "13.0.0",
"mfm-js": "0.23.3", "mfm-js": "0.23.3",
"mime-types": "2.1.35", "mime-types": "2.1.35",
"misskey-js": "workspace:*", "misskey-js": "workspace:*",

View file

@ -1,4 +1,5 @@
import { NestFactory } from '@nestjs/core'; import { NestFactory } from '@nestjs/core';
import { FastifyAdapter, type NestFastifyApplication } from '@nestjs/platform-fastify';
import { ChartManagementService } from '@/core/chart/ChartManagementService.js'; import { ChartManagementService } from '@/core/chart/ChartManagementService.js';
import { QueueProcessorService } from '@/queue/QueueProcessorService.js'; import { QueueProcessorService } from '@/queue/QueueProcessorService.js';
import { NestLogger } from '@/NestLogger.js'; import { NestLogger } from '@/NestLogger.js';
@ -10,7 +11,10 @@ import { ServerService } from '@/server/ServerService.js';
import { MainModule } from '@/MainModule.js'; import { MainModule } from '@/MainModule.js';
export async function server() { export async function server() {
const app = await NestFactory.createApplicationContext(MainModule, { const app = await NestFactory.create<NestFastifyApplication>(MainModule, new FastifyAdapter({
trustProxy: true,
logger: !['production', 'test'].includes(process.env.NODE_ENV ?? ''),
}), {
logger: new NestLogger(), logger: new NestLogger(),
}); });
app.enableShutdownHooks(); app.enableShutdownHooks();

View file

@ -1,5 +1,6 @@
import { Module } from '@nestjs/common'; import { Module } from '@nestjs/common';
import { EndpointsModule } from '@/server/api/EndpointsModule.js'; import { EndpointsModule } from '@/server/api/EndpointsModule.js';
import { GraphQLModule } from '@/server/graphql/GraphQLModule.js';
import { CoreModule } from '@/core/CoreModule.js'; import { CoreModule } from '@/core/CoreModule.js';
import { ApiCallService } from './api/ApiCallService.js'; import { ApiCallService } from './api/ApiCallService.js';
import { FileServerService } from './FileServerService.js'; import { FileServerService } from './FileServerService.js';
@ -40,6 +41,7 @@ import { RoleTimelineChannelService } from './api/stream/channels/role-timeline.
@Module({ @Module({
imports: [ imports: [
EndpointsModule, EndpointsModule,
GraphQLModule,
CoreModule, CoreModule,
], ],
providers: [ providers: [

View file

@ -2,7 +2,7 @@ import cluster from 'node:cluster';
import * as fs from 'node:fs'; import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url'; import { fileURLToPath } from 'node:url';
import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common'; import { Inject, Injectable, OnApplicationShutdown } from '@nestjs/common';
import Fastify, { FastifyInstance } from 'fastify'; import { HttpAdapterHost } from '@nestjs/core';
import fastifyStatic from '@fastify/static'; import fastifyStatic from '@fastify/static';
import { IsNull } from 'typeorm'; import { IsNull } from 'typeorm';
import { GlobalEventService } from '@/core/GlobalEventService.js'; import { GlobalEventService } from '@/core/GlobalEventService.js';
@ -24,13 +24,14 @@ import { WellKnownServerService } from './WellKnownServerService.js';
import { FileServerService } from './FileServerService.js'; import { FileServerService } from './FileServerService.js';
import { ClientServerService } from './web/ClientServerService.js'; import { ClientServerService } from './web/ClientServerService.js';
import { OpenApiServerService } from './api/openapi/OpenApiServerService.js'; import { OpenApiServerService } from './api/openapi/OpenApiServerService.js';
import type { FastifyAdapter } from '@nestjs/platform-fastify';
import type { FastifyInstance } from 'fastify/types/instance.js';
const _dirname = fileURLToPath(new URL('.', import.meta.url)); const _dirname = fileURLToPath(new URL('.', import.meta.url));
@Injectable() @Injectable()
export class ServerService implements OnApplicationShutdown { export class ServerService implements OnApplicationShutdown {
private logger: Logger; private logger: Logger;
#fastify: FastifyInstance;
constructor( constructor(
@Inject(DI.config) @Inject(DI.config)
@ -45,6 +46,7 @@ export class ServerService implements OnApplicationShutdown {
@Inject(DI.emojisRepository) @Inject(DI.emojisRepository)
private emojisRepository: EmojisRepository, private emojisRepository: EmojisRepository,
private adapterHost: HttpAdapterHost<FastifyAdapter>,
private userEntityService: UserEntityService, private userEntityService: UserEntityService,
private apiServerService: ApiServerService, private apiServerService: ApiServerService,
private openApiServerService: OpenApiServerService, private openApiServerService: OpenApiServerService,
@ -62,11 +64,7 @@ export class ServerService implements OnApplicationShutdown {
@bindThis @bindThis
public async launch() { public async launch() {
const fastify = Fastify({ const fastify = this.adapterHost.httpAdapter.getInstance() as FastifyInstance;
trustProxy: true,
logger: !['production', 'test'].includes(process.env.NODE_ENV ?? ''),
});
this.#fastify = fastify;
// HSTS // HSTS
// 6months (15552000sec) // 6months (15552000sec)
@ -217,15 +215,13 @@ export class ServerService implements OnApplicationShutdown {
} }
}); });
fastify.listen({ port: this.config.port, host: '0.0.0.0' }); await fastify.listen({ port: this.config.port, host: '0.0.0.0' });
await fastify.ready();
} }
@bindThis @bindThis
public async dispose(): Promise<void> { public async dispose(): Promise<void> {
await this.streamingApiServerService.detach(); await this.streamingApiServerService.detach();
await this.#fastify.close(); await this.adapterHost.httpAdapter.getInstance().close();
} }
@bindThis @bindThis

View file

@ -0,0 +1,23 @@
import path from 'node:path';
import { Module } from '@nestjs/common';
import * as nestjs_graphql from '@nestjs/graphql';
import { MercuriusDriver, MercuriusDriverConfig } from '@nestjs/mercurius';
import type { HttpAdapterHost } from '@nestjs/core';
import type { FastifyAdapter } from '@nestjs/platform-fastify';
@Module({
imports: [
nestjs_graphql.GraphQLModule.forRoot<MercuriusDriverConfig>({
driver: MercuriusDriver,
autoSchemaFile: path.join(path.dirname(import.meta.url), 'schema.graphql'),
graphiql: true,
}),
],
})
export class GraphQLModule {
constructor(
private adapterHost: HttpAdapterHost<FastifyAdapter>,
) {
console.log(adapterHost.httpAdapter.getInstance().printRoutes());
}
}

View file

@ -670,11 +670,6 @@ export class ClientServerService {
reply.header('Cache-Control', 'private, max-age=0'); reply.header('Cache-Control', 'private, max-age=0');
}); });
// Render base html for all requests
fastify.get('*', async (request, reply) => {
return await renderBase(reply);
});
fastify.setErrorHandler(async (error, request, reply) => { fastify.setErrorHandler(async (error, request, reply) => {
const errId = uuid(); const errId = uuid();
this.clientLoggerService.logger.error(`Internal error occured in ${request.routerPath}: ${error.message}`, { this.clientLoggerService.logger.error(`Internal error occured in ${request.routerPath}: ${error.message}`, {

View file

@ -28,7 +28,7 @@
"autosize": "6.0.1", "autosize": "6.0.1",
"broadcast-channel": "5.1.0", "broadcast-channel": "5.1.0",
"browser-image-resizer": "github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3", "browser-image-resizer": "github:misskey-dev/browser-image-resizer#v2.2.1-misskey.3",
"buraha": "github:misskey-dev/buraha", "buraha": "0.0.1",
"canvas-confetti": "1.6.0", "canvas-confetti": "1.6.0",
"chart.js": "4.3.0", "chart.js": "4.3.0",
"chartjs-adapter-date-fns": "3.0.0", "chartjs-adapter-date-fns": "3.0.0",

File diff suppressed because it is too large Load diff