Add server events emitter

6b821409e0d522a3ec78b124f7e9d6e53cb029ff

Cohee <18619528+Cohee1207@users.noreply.github.com>

3 files changed, +54 -3Showing whitespace changes
index.d.ts+31 -3
@@ -1,8 +1,36 @@
1import { UserDirectoryList, User } from "./src/users";1import { EventEmitter } from 'node:events';
2import { CommandLineArguments } from "./src/command-line";2import { CsrfSyncedToken } from 'csrf-sync';
3import { CsrfSyncedToken } from "csrf-sync";3import { UserDirectoryList, User } from './src/users.js';
4import { CommandLineArguments } from './src/command-line.js';
5import { EVENT_NAMES } from './src/server-events.js';
6
7/**
8 * Event payload for SERVER_STARTED event.
9 */
10export interface ServerStartedEvent {
11 /**
12 * The URL the server is listening on.
13 */
14 url: URL;
15}
16
17/**
18 * Map of all server events to their payload types.
19 */
20export interface ServerEventMap {
21 [EVENT_NAMES.SERVER_STARTED]: [ServerStartedEvent];
22}
423
5declare global {24declare global {
25 declare namespace NodeJS {
26 export interface Process {
27 /**
28 * A global instance of the server events emitter.
29 */
30 serverEvents: EventEmitter<ServerEventMap>;
31 }
32 }
33
6 declare namespace CookieSessionInterfaces {34 declare namespace CookieSessionInterfaces {
7 export interface CookieSessionObject {35 export interface CookieSessionObject {
8 /**36 /**
server.js+2 -0
@@ -20,6 +20,7 @@ import bodyParser from 'body-parser';
20import open from 'open';20import open from 'open';
2121
22// local library imports22// local library imports
23import { serverEvents, EVENT_NAMES } from './src/server-events.js';
23import { CommandLineParser } from './src/command-line.js';24import { CommandLineParser } from './src/command-line.js';
24import { loadPlugins } from './src/plugin-loader.js';25import { loadPlugins } from './src/plugin-loader.js';
25import {26import {
@@ -348,6 +349,7 @@ async function postSetupTasks(result) {
348 console.log('\n' + getSeparator(plainGoToLog.length) + '\n');349 console.log('\n' + getSeparator(plainGoToLog.length) + '\n');
349350
350 setupLogLevel();351 setupLogLevel();
352 serverEvents.emit(EVENT_NAMES.SERVER_STARTED, { url: autorunUrl });
351}353}
352354
353/**355/**
src/server-events.js+21 -0
@@ -0,0 +1,21 @@
1import EventEmitter from 'node:events';
2import process from 'node:process';
3
4/**
5 * @typedef {import('../index').ServerEventMap} ServerEventMap
6 * @type {EventEmitter<ServerEventMap>} The default event source.
7 */
8export const serverEvents = new EventEmitter();
9process.serverEvents = serverEvents;
10export default serverEvents;
11
12/**
13 * @enum {string}
14 * @readonly
15 */
16export const EVENT_NAMES = Object.freeze({
17 /**
18 * Emitted when the server has started.
19 */
20 SERVER_STARTED: 'server-started',
21});