@@ -24,6 +24,7 @@ import {
2424} from './modules/index.js' ;
2525import CoreModule from './CoreModule.js' ;
2626import { XUtil } from './utils/index.js' ;
27+ import CoreKernelExtension from './classes/CoreKernelExtension.js' ;
2728
2829/**
2930 * Core Kernel class
@@ -79,6 +80,8 @@ export default abstract class CoreKernel<
7980
8081 protected eventMap : Map < string , ( kernel : CoreKernel < X > ) => Promise < unknown > > ;
8182
83+ protected extension : Map < string , CoreKernelExtension > ;
84+
8285 protected globalLogger : CoreLogger ;
8386
8487 /**
@@ -101,6 +104,7 @@ export default abstract class CoreKernel<
101104 this . updateSkip = false ;
102105 this . appVersion = 'noVersion' ;
103106 this . triggerEvent = this . triggerEvent . bind ( this ) ;
107+ this . extension = new Map < string , CoreKernelExtension > ( ) ;
104108 this . eventMap = new Map <
105109 string ,
106110 ( kernel : CoreKernel < X > ) => Promise < unknown >
@@ -296,8 +300,6 @@ export default abstract class CoreKernel<
296300
297301 /**
298302 * register new module
299- * > In general there are two places to add Modules correctly: In the Kernel constructor or in the pre-trigger-function
300- *
301303 * @see CoreKernelModule
302304 * @param module
303305 * @typeParam X Type of Crypto client.
@@ -306,6 +308,23 @@ export default abstract class CoreKernel<
306308 this . moduleList . push ( ...module ) ;
307309 }
308310
311+ /**
312+ * @see CoreKernelExtension
313+ * @param name Name of the extension
314+ * @param ext Extension to add
315+ */
316+ addExtension ( name : string , ext : CoreKernelExtension ) : void {
317+ this . extension . set ( name , ext ) ;
318+ }
319+
320+ /**
321+ * @see CoreKernelExtension
322+ * @param name Name of the extension
323+ */
324+ getExtension < A extends CoreKernelExtension > ( name : string ) : A | undefined {
325+ return this . extension . get ( name ) as A | undefined ;
326+ }
327+
309328 setBaseModule ( module : Y ) : void {
310329 this . kernelModule = module ;
311330 }
0 commit comments