first commit

This commit is contained in:
Myk
2025-07-31 23:47:20 +03:00
commit 2186b278a0
5149 changed files with 537218 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
import { ILogger } from "./ILogger";
/**
* Logs to the console in a plain format. This is the default logger.
* @category Logging
*/
export declare class ConsoleLogger implements ILogger {
trace(module: string, ...messageOrObject: any[]): void;
debug(module: string, ...messageOrObject: any[]): void;
error(module: string, ...messageOrObject: any[]): void;
info(module: string, ...messageOrObject: any[]): void;
warn(module: string, ...messageOrObject: any[]): void;
}

View File

@@ -0,0 +1,28 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ConsoleLogger = void 0;
/* eslint-disable no-console */
/**
* Logs to the console in a plain format. This is the default logger.
* @category Logging
*/
class ConsoleLogger {
trace(module, ...messageOrObject) {
console.trace(module, ...messageOrObject);
}
debug(module, ...messageOrObject) {
console.debug(module, ...messageOrObject);
}
error(module, ...messageOrObject) {
console.error(module, ...messageOrObject);
}
info(module, ...messageOrObject) {
console.log(module, ...messageOrObject);
}
warn(module, ...messageOrObject) {
console.warn(module, ...messageOrObject);
}
}
exports.ConsoleLogger = ConsoleLogger;
/* eslint-enable no-console */
//# sourceMappingURL=ConsoleLogger.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ConsoleLogger.js","sourceRoot":"","sources":["../../src/logging/ConsoleLogger.ts"],"names":[],"mappings":";;;AAEA,+BAA+B;AAE/B;;;GAGG;AACH,MAAa,aAAa;IACf,KAAK,CAAC,MAAc,EAAE,GAAG,eAAsB;QAClD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,MAAc,EAAE,GAAG,eAAsB;QAClD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC;IAC9C,CAAC;IAEM,KAAK,CAAC,MAAc,EAAE,GAAG,eAAsB;QAClD,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC;IAC9C,CAAC;IAEM,IAAI,CAAC,MAAc,EAAE,GAAG,eAAsB;QACjD,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC;IAC5C,CAAC;IAEM,IAAI,CAAC,MAAc,EAAE,GAAG,eAAsB;QACjD,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,eAAe,CAAC,CAAC;IAC7C,CAAC;CACJ;AApBD,sCAoBC;AAED,8BAA8B"}

View File

@@ -0,0 +1,36 @@
/**
* Represents a logger
* @category Logging
*/
export interface ILogger {
/**
* Logs to the INFO channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
info(module: string, ...messageOrObject: any[]): any;
/**
* Logs to the WARN channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
warn(module: string, ...messageOrObject: any[]): any;
/**
* Logs to the ERROR channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
error(module: string, ...messageOrObject: any[]): any;
/**
* Logs to the DEBUG channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
debug(module: string, ...messageOrObject: any[]): any;
/**
* Logs to the TRACE channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
trace(module: string, ...messageOrObject: any[]): any;
}

View File

@@ -0,0 +1,3 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
//# sourceMappingURL=ILogger.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ILogger.js","sourceRoot":"","sources":["../../src/logging/ILogger.ts"],"names":[],"mappings":""}

View File

@@ -0,0 +1,100 @@
import { MatrixError } from "../models/MatrixError";
import { ILogger } from "./ILogger";
/**
* The log levels to log at.
* @category Logging
*/
export declare class LogLevel {
private level;
private sequence;
/**
* The TRACE channel
*/
static readonly TRACE: LogLevel;
/**
* The DEBUG channel
*/
static readonly DEBUG: LogLevel;
/**
* The INFO channel
*/
static readonly INFO: LogLevel;
/**
* The WARN channel
*/
static readonly WARN: LogLevel;
/**
* The ERROR channel
*/
static readonly ERROR: LogLevel;
private constructor();
includes(level: LogLevel): boolean;
toString(): string;
static fromString(level: string, defaultLevel?: LogLevel): LogLevel;
}
/**
* Service class for logging in the bot-sdk
* @category Logging
*/
export declare class LogService {
private static logger;
private static logLevel;
private static mutedModules;
private constructor();
/**
* The level at which the LogService is running.
*/
static get level(): LogLevel;
/**
* Sets the log level for this logger. Defaults to DEBUG.
* @param {LogLevel} level the new log level
*/
static setLevel(level: LogLevel): void;
/**
* Sets a new logger for the Log Service
* @param {ILogger} logger the new logger
*/
static setLogger(logger: ILogger): void;
/**
* Mutes a module from the logger.
* @param {string} name The module name to mute.
*/
static muteModule(name: string): void;
/**
* Logs to the TRACE channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static trace(module: string, ...messageOrObject: any[]): void;
/**
* Logs to the DEBUG channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static debug(module: string, ...messageOrObject: any[]): void;
/**
* Logs to the ERROR channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static error(module: string, ...messageOrObject: any[]): void;
/**
* Logs to the INFO channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static info(module: string, ...messageOrObject: any[]): void;
/**
* Logs to the WARN channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static warn(module: string, ...messageOrObject: any[]): void;
}
/**
* Extracts the useful part of a request's error into something loggable.
* @param {Error} err The error to parse.
* @returns {*} The extracted error, or the given error if unaltered.
* @category Logging
*/
export declare function extractRequestError(err: Error | MatrixError): any;

View File

@@ -0,0 +1,171 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractRequestError = exports.LogService = exports.LogLevel = void 0;
const ConsoleLogger_1 = require("./ConsoleLogger");
/**
* The log levels to log at.
* @category Logging
*/
class LogLevel {
level;
sequence;
/**
* The TRACE channel
*/
static TRACE = new LogLevel("TRACE", -1);
/**
* The DEBUG channel
*/
static DEBUG = new LogLevel("DEBUG", 0);
/**
* The INFO channel
*/
static INFO = new LogLevel("INFO", 1);
/**
* The WARN channel
*/
static WARN = new LogLevel("WARN", 2);
/**
* The ERROR channel
*/
static ERROR = new LogLevel("ERROR", 3);
constructor(level, sequence) {
this.level = level;
this.sequence = sequence;
}
includes(level) {
return level.sequence >= this.sequence;
}
toString() {
return this.level;
}
static fromString(level, defaultLevel = LogLevel.DEBUG) {
if (!level)
return defaultLevel;
if (level.toUpperCase() === LogLevel.TRACE.level)
return LogLevel.TRACE;
if (level.toUpperCase() === LogLevel.DEBUG.level)
return LogLevel.DEBUG;
if (level.toUpperCase() === LogLevel.INFO.level)
return LogLevel.INFO;
if (level.toUpperCase() === LogLevel.WARN.level)
return LogLevel.WARN;
if (level.toUpperCase() === LogLevel.ERROR.level)
return LogLevel.ERROR;
return defaultLevel;
}
}
exports.LogLevel = LogLevel;
/**
* Service class for logging in the bot-sdk
* @category Logging
*/
class LogService {
static logger = new ConsoleLogger_1.ConsoleLogger();
static logLevel = LogLevel.INFO;
static mutedModules = [];
constructor() {
}
/**
* The level at which the LogService is running.
*/
static get level() {
return this.logLevel;
}
/**
* Sets the log level for this logger. Defaults to DEBUG.
* @param {LogLevel} level the new log level
*/
static setLevel(level) {
LogService.logLevel = level || LogLevel.DEBUG;
}
/**
* Sets a new logger for the Log Service
* @param {ILogger} logger the new logger
*/
static setLogger(logger) {
LogService.logger = logger;
}
/**
* Mutes a module from the logger.
* @param {string} name The module name to mute.
*/
static muteModule(name) {
LogService.mutedModules.push(name);
}
/**
* Logs to the TRACE channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static trace(module, ...messageOrObject) {
if (!LogService.logLevel.includes(LogLevel.TRACE))
return;
if (LogService.mutedModules.includes(module))
return;
LogService.logger.trace(module, ...messageOrObject);
}
/**
* Logs to the DEBUG channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static debug(module, ...messageOrObject) {
if (!LogService.logLevel.includes(LogLevel.DEBUG))
return;
if (LogService.mutedModules.includes(module))
return;
LogService.logger.debug(module, ...messageOrObject);
}
/**
* Logs to the ERROR channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static error(module, ...messageOrObject) {
if (!LogService.logLevel.includes(LogLevel.ERROR))
return;
if (LogService.mutedModules.includes(module))
return;
LogService.logger.error(module, ...messageOrObject);
}
/**
* Logs to the INFO channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static info(module, ...messageOrObject) {
if (!LogService.logLevel.includes(LogLevel.INFO))
return;
if (LogService.mutedModules.includes(module))
return;
LogService.logger.info(module, ...messageOrObject);
}
/**
* Logs to the WARN channel
* @param {string} module The module being logged
* @param {any[]} messageOrObject The data to log
*/
static warn(module, ...messageOrObject) {
if (!LogService.logLevel.includes(LogLevel.WARN))
return;
if (LogService.mutedModules.includes(module))
return;
LogService.logger.warn(module, ...messageOrObject);
}
}
exports.LogService = LogService;
/**
* Extracts the useful part of a request's error into something loggable.
* @param {Error} err The error to parse.
* @returns {*} The extracted error, or the given error if unaltered.
* @category Logging
*/
function extractRequestError(err) {
if (err && 'body' in err) {
return err.body;
}
return err;
}
exports.extractRequestError = extractRequestError;
//# sourceMappingURL=LogService.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"LogService.js","sourceRoot":"","sources":["../../src/logging/LogService.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,20 @@
import * as chalk from "chalk";
import { ILogger } from "./ILogger";
/**
* Prints to the console with colors and a format.
* @category Logging
*/
export declare class RichConsoleLogger implements ILogger {
protected chalkDebug: chalk.Chalk;
protected chalkInfo: chalk.Chalk;
protected chalkWarning: chalk.Chalk;
protected chalkError: chalk.Chalk;
protected chalkTimestamp: chalk.Chalk;
protected chalkModule: chalk.Chalk;
protected getTimestamp(): string;
trace(module: string, ...messageOrObject: any[]): void;
debug(module: string, ...messageOrObject: any[]): void;
error(module: string, ...messageOrObject: any[]): void;
info(module: string, ...messageOrObject: any[]): void;
warn(module: string, ...messageOrObject: any[]): void;
}

View File

@@ -0,0 +1,39 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RichConsoleLogger = void 0;
const chalk = require("chalk");
/* eslint-disable no-console */
/**
* Prints to the console with colors and a format.
* @category Logging
*/
class RichConsoleLogger {
chalkDebug = chalk.cyan;
chalkInfo = chalk.green;
chalkWarning = chalk.yellow;
chalkError = chalk.bold.red;
chalkTimestamp = chalk.grey;
chalkModule = chalk.grey;
getTimestamp() {
const now = new Date(Date.now()).toUTCString();
return this.chalkTimestamp(now);
}
trace(module, ...messageOrObject) {
console.trace(this.getTimestamp(), this.chalkDebug("[TRACE]"), this.chalkModule(`[${module}]`), ...messageOrObject);
}
debug(module, ...messageOrObject) {
console.debug(this.getTimestamp(), this.chalkDebug("[DEBUG]"), this.chalkModule(`[${module}]`), ...messageOrObject);
}
error(module, ...messageOrObject) {
console.error(this.getTimestamp(), this.chalkError("[ERROR]"), this.chalkModule(`[${module}]`), ...messageOrObject);
}
info(module, ...messageOrObject) {
console.log(this.getTimestamp(), this.chalkInfo("[INFO]"), this.chalkModule(`[${module}]`), ...messageOrObject);
}
warn(module, ...messageOrObject) {
console.warn(this.getTimestamp(), this.chalkWarning("[WARN]"), this.chalkModule(`[${module}]`), ...messageOrObject);
}
}
exports.RichConsoleLogger = RichConsoleLogger;
/* eslint-enable no-console */
//# sourceMappingURL=RichConsoleLogger.js.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"RichConsoleLogger.js","sourceRoot":"","sources":["../../src/logging/RichConsoleLogger.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAI/B,+BAA+B;AAE/B;;;GAGG;AACH,MAAa,iBAAiB;IAChB,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC;IACxB,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IAC5B,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC;IAC5B,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;IAEzB,YAAY;QAClB,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAEM,KAAK,CAAC,MAAc,EAAE,GAAG,eAAsB;QAClD,OAAO,CAAC,KAAK,CACT,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,GAAG,CAAC,EAC/B,GAAG,eAAe,CACrB,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,MAAc,EAAE,GAAG,eAAsB;QAClD,OAAO,CAAC,KAAK,CACT,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,GAAG,CAAC,EAC/B,GAAG,eAAe,CACrB,CAAC;IACN,CAAC;IAEM,KAAK,CAAC,MAAc,EAAE,GAAG,eAAsB;QAClD,OAAO,CAAC,KAAK,CACT,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAC1B,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,GAAG,CAAC,EAC/B,GAAG,eAAe,CACrB,CAAC;IACN,CAAC;IAEM,IAAI,CAAC,MAAc,EAAE,GAAG,eAAsB;QACjD,OAAO,CAAC,GAAG,CACP,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EACxB,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,GAAG,CAAC,EAC/B,GAAG,eAAe,CACrB,CAAC;IACN,CAAC;IAEM,IAAI,CAAC,MAAc,EAAE,GAAG,eAAsB;QACjD,OAAO,CAAC,IAAI,CACR,IAAI,CAAC,YAAY,EAAE,EACnB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC3B,IAAI,CAAC,WAAW,CAAC,IAAI,MAAM,GAAG,CAAC,EAC/B,GAAG,eAAe,CACrB,CAAC;IACN,CAAC;CACJ;AAzDD,8CAyDC;AAED,8BAA8B"}