@smythos/sre 1.5.43 → 1.5.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (233) hide show
  1. package/CHANGELOG +90 -90
  2. package/LICENSE +18 -18
  3. package/README.md +135 -135
  4. package/dist/index.js +13 -13
  5. package/dist/index.js.map +1 -1
  6. package/dist/types/Components/GenAILLM.class.d.ts +6 -0
  7. package/dist/types/helpers/AWSLambdaCode.helper.d.ts +8 -5
  8. package/dist/types/index.d.ts +1 -0
  9. package/dist/types/subsystems/LLMManager/LLM.service/connectors/Groq.class.d.ts +5 -0
  10. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.d.ts +13 -1
  11. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.d.ts +0 -4
  12. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.d.ts +44 -29
  13. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.d.ts +4 -2
  14. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/utils.d.ts +6 -0
  15. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/types.d.ts +0 -4
  16. package/dist/types/subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class.d.ts +39 -0
  17. package/dist/types/types/LLM.types.d.ts +4 -1
  18. package/package.json +5 -2
  19. package/src/Components/APICall/APICall.class.ts +156 -156
  20. package/src/Components/APICall/AccessTokenManager.ts +130 -130
  21. package/src/Components/APICall/ArrayBufferResponse.helper.ts +58 -58
  22. package/src/Components/APICall/OAuth.helper.ts +294 -294
  23. package/src/Components/APICall/mimeTypeCategories.ts +46 -46
  24. package/src/Components/APICall/parseData.ts +167 -167
  25. package/src/Components/APICall/parseHeaders.ts +41 -41
  26. package/src/Components/APICall/parseProxy.ts +68 -68
  27. package/src/Components/APICall/parseUrl.ts +91 -91
  28. package/src/Components/APIEndpoint.class.ts +234 -234
  29. package/src/Components/APIOutput.class.ts +58 -58
  30. package/src/Components/AgentPlugin.class.ts +102 -102
  31. package/src/Components/Async.class.ts +155 -155
  32. package/src/Components/Await.class.ts +90 -90
  33. package/src/Components/Classifier.class.ts +158 -158
  34. package/src/Components/Component.class.ts +132 -132
  35. package/src/Components/ComponentHost.class.ts +38 -38
  36. package/src/Components/DataSourceCleaner.class.ts +92 -92
  37. package/src/Components/DataSourceIndexer.class.ts +181 -181
  38. package/src/Components/DataSourceLookup.class.ts +161 -161
  39. package/src/Components/ECMASandbox.class.ts +71 -71
  40. package/src/Components/FEncDec.class.ts +29 -29
  41. package/src/Components/FHash.class.ts +33 -33
  42. package/src/Components/FSign.class.ts +80 -80
  43. package/src/Components/FSleep.class.ts +25 -25
  44. package/src/Components/FTimestamp.class.ts +25 -25
  45. package/src/Components/FileStore.class.ts +78 -78
  46. package/src/Components/ForEach.class.ts +97 -97
  47. package/src/Components/GPTPlugin.class.ts +70 -70
  48. package/src/Components/GenAILLM.class.ts +586 -579
  49. package/src/Components/HuggingFace.class.ts +314 -314
  50. package/src/Components/Image/imageSettings.config.ts +70 -70
  51. package/src/Components/ImageGenerator.class.ts +502 -502
  52. package/src/Components/JSONFilter.class.ts +54 -54
  53. package/src/Components/LLMAssistant.class.ts +213 -213
  54. package/src/Components/LogicAND.class.ts +28 -28
  55. package/src/Components/LogicAtLeast.class.ts +85 -85
  56. package/src/Components/LogicAtMost.class.ts +86 -86
  57. package/src/Components/LogicOR.class.ts +29 -29
  58. package/src/Components/LogicXOR.class.ts +34 -34
  59. package/src/Components/MCPClient.class.ts +112 -112
  60. package/src/Components/MemoryDeleteKeyVal.class.ts +70 -70
  61. package/src/Components/MemoryReadKeyVal.class.ts +66 -66
  62. package/src/Components/MemoryWriteKeyVal.class.ts +62 -62
  63. package/src/Components/MemoryWriteObject.class.ts +97 -97
  64. package/src/Components/MultimodalLLM.class.ts +128 -128
  65. package/src/Components/OpenAPI.class.ts +72 -72
  66. package/src/Components/PromptGenerator.class.ts +122 -122
  67. package/src/Components/ScrapflyWebScrape.class.ts +159 -159
  68. package/src/Components/ServerlessCode.class.ts +123 -123
  69. package/src/Components/TavilyWebSearch.class.ts +98 -98
  70. package/src/Components/VisionLLM.class.ts +104 -104
  71. package/src/Components/ZapierAction.class.ts +127 -127
  72. package/src/Components/index.ts +97 -97
  73. package/src/Core/AgentProcess.helper.ts +240 -240
  74. package/src/Core/Connector.class.ts +123 -123
  75. package/src/Core/ConnectorsService.ts +197 -197
  76. package/src/Core/DummyConnector.ts +49 -49
  77. package/src/Core/HookService.ts +105 -105
  78. package/src/Core/SmythRuntime.class.ts +235 -235
  79. package/src/Core/SystemEvents.ts +16 -16
  80. package/src/Core/boot.ts +56 -56
  81. package/src/config.ts +15 -15
  82. package/src/constants.ts +126 -126
  83. package/src/data/hugging-face.params.json +579 -579
  84. package/src/helpers/AWSLambdaCode.helper.ts +588 -528
  85. package/src/helpers/BinaryInput.helper.ts +331 -331
  86. package/src/helpers/Conversation.helper.ts +1119 -1119
  87. package/src/helpers/ECMASandbox.helper.ts +54 -54
  88. package/src/helpers/JsonContent.helper.ts +97 -97
  89. package/src/helpers/LocalCache.helper.ts +97 -97
  90. package/src/helpers/Log.helper.ts +274 -274
  91. package/src/helpers/OpenApiParser.helper.ts +150 -150
  92. package/src/helpers/S3Cache.helper.ts +147 -147
  93. package/src/helpers/SmythURI.helper.ts +5 -5
  94. package/src/helpers/Sysconfig.helper.ts +77 -77
  95. package/src/helpers/TemplateString.helper.ts +243 -243
  96. package/src/helpers/TypeChecker.helper.ts +329 -329
  97. package/src/index.ts +4 -3
  98. package/src/index.ts.bak +4 -3
  99. package/src/subsystems/AgentManager/Agent.class.ts +1114 -1114
  100. package/src/subsystems/AgentManager/Agent.helper.ts +3 -3
  101. package/src/subsystems/AgentManager/AgentData.service/AgentDataConnector.ts +230 -230
  102. package/src/subsystems/AgentManager/AgentData.service/connectors/CLIAgentDataConnector.class.ts +66 -66
  103. package/src/subsystems/AgentManager/AgentData.service/connectors/LocalAgentDataConnector.class.ts +142 -142
  104. package/src/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.ts +39 -39
  105. package/src/subsystems/AgentManager/AgentData.service/index.ts +18 -18
  106. package/src/subsystems/AgentManager/AgentLogger.class.ts +297 -297
  107. package/src/subsystems/AgentManager/AgentRequest.class.ts +51 -51
  108. package/src/subsystems/AgentManager/AgentRuntime.class.ts +559 -559
  109. package/src/subsystems/AgentManager/AgentSSE.class.ts +101 -101
  110. package/src/subsystems/AgentManager/AgentSettings.class.ts +52 -52
  111. package/src/subsystems/AgentManager/Component.service/ComponentConnector.ts +32 -32
  112. package/src/subsystems/AgentManager/Component.service/connectors/LocalComponentConnector.class.ts +60 -60
  113. package/src/subsystems/AgentManager/Component.service/index.ts +11 -11
  114. package/src/subsystems/AgentManager/EmbodimentSettings.class.ts +47 -47
  115. package/src/subsystems/AgentManager/ForkedAgent.class.ts +154 -154
  116. package/src/subsystems/AgentManager/OSResourceMonitor.ts +77 -77
  117. package/src/subsystems/ComputeManager/Code.service/CodeConnector.ts +98 -98
  118. package/src/subsystems/ComputeManager/Code.service/connectors/AWSLambdaCode.class.ts +172 -170
  119. package/src/subsystems/ComputeManager/Code.service/connectors/ECMASandbox.class.ts +131 -131
  120. package/src/subsystems/ComputeManager/Code.service/index.ts +13 -13
  121. package/src/subsystems/IO/CLI.service/CLIConnector.ts +47 -47
  122. package/src/subsystems/IO/CLI.service/index.ts +9 -9
  123. package/src/subsystems/IO/Log.service/LogConnector.ts +32 -32
  124. package/src/subsystems/IO/Log.service/connectors/ConsoleLog.class.ts +28 -28
  125. package/src/subsystems/IO/Log.service/index.ts +13 -13
  126. package/src/subsystems/IO/NKV.service/NKVConnector.ts +43 -43
  127. package/src/subsystems/IO/NKV.service/connectors/NKVLocalStorage.class.ts +234 -234
  128. package/src/subsystems/IO/NKV.service/connectors/NKVRAM.class.ts +204 -204
  129. package/src/subsystems/IO/NKV.service/connectors/NKVRedis.class.ts +182 -182
  130. package/src/subsystems/IO/NKV.service/index.ts +14 -14
  131. package/src/subsystems/IO/Router.service/RouterConnector.ts +21 -21
  132. package/src/subsystems/IO/Router.service/connectors/ExpressRouter.class.ts +48 -48
  133. package/src/subsystems/IO/Router.service/connectors/NullRouter.class.ts +40 -40
  134. package/src/subsystems/IO/Router.service/index.ts +11 -11
  135. package/src/subsystems/IO/Storage.service/SmythFS.class.ts +489 -489
  136. package/src/subsystems/IO/Storage.service/StorageConnector.ts +66 -66
  137. package/src/subsystems/IO/Storage.service/connectors/LocalStorage.class.ts +327 -327
  138. package/src/subsystems/IO/Storage.service/connectors/S3Storage.class.ts +482 -482
  139. package/src/subsystems/IO/Storage.service/index.ts +13 -13
  140. package/src/subsystems/IO/VectorDB.service/VectorDBConnector.ts +108 -108
  141. package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +454 -454
  142. package/src/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.ts +384 -384
  143. package/src/subsystems/IO/VectorDB.service/connectors/RAMVecrtorDB.class.ts +421 -421
  144. package/src/subsystems/IO/VectorDB.service/embed/BaseEmbedding.ts +107 -107
  145. package/src/subsystems/IO/VectorDB.service/embed/OpenAIEmbedding.ts +109 -109
  146. package/src/subsystems/IO/VectorDB.service/embed/index.ts +21 -21
  147. package/src/subsystems/IO/VectorDB.service/index.ts +14 -14
  148. package/src/subsystems/LLMManager/LLM.helper.ts +251 -251
  149. package/src/subsystems/LLMManager/LLM.inference.ts +339 -339
  150. package/src/subsystems/LLMManager/LLM.service/LLMConnector.ts +489 -489
  151. package/src/subsystems/LLMManager/LLM.service/LLMCredentials.helper.ts +171 -171
  152. package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +659 -659
  153. package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +400 -400
  154. package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +77 -77
  155. package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +757 -757
  156. package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +304 -291
  157. package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +250 -250
  158. package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +423 -423
  159. package/src/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.ts +488 -455
  160. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +528 -528
  161. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterface.ts +100 -100
  162. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterfaceFactory.ts +81 -81
  163. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +1168 -853
  164. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.ts +13 -37
  165. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/index.ts +4 -4
  166. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/utils.ts +11 -0
  167. package/src/subsystems/LLMManager/LLM.service/connectors/openai/types.ts +32 -37
  168. package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +471 -471
  169. package/src/subsystems/LLMManager/LLM.service/index.ts +44 -44
  170. package/src/subsystems/LLMManager/ModelsProvider.service/ModelsProviderConnector.ts +300 -300
  171. package/src/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.ts +252 -252
  172. package/src/subsystems/LLMManager/ModelsProvider.service/index.ts +11 -11
  173. package/src/subsystems/LLMManager/custom-models.ts +854 -854
  174. package/src/subsystems/LLMManager/models.ts +2540 -2540
  175. package/src/subsystems/LLMManager/paramMappings.ts +69 -69
  176. package/src/subsystems/MemoryManager/Cache.service/CacheConnector.ts +86 -86
  177. package/src/subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class.ts +297 -297
  178. package/src/subsystems/MemoryManager/Cache.service/connectors/RAMCache.class.ts +201 -201
  179. package/src/subsystems/MemoryManager/Cache.service/connectors/RedisCache.class.ts +252 -252
  180. package/src/subsystems/MemoryManager/Cache.service/connectors/S3Cache.class.ts +373 -373
  181. package/src/subsystems/MemoryManager/Cache.service/index.ts +15 -15
  182. package/src/subsystems/MemoryManager/LLMCache.ts +72 -72
  183. package/src/subsystems/MemoryManager/LLMContext.ts +124 -124
  184. package/src/subsystems/MemoryManager/LLMMemory.service/LLMMemoryConnector.ts +26 -26
  185. package/src/subsystems/MemoryManager/RuntimeContext.ts +266 -266
  186. package/src/subsystems/Security/AccessControl/ACL.class.ts +208 -208
  187. package/src/subsystems/Security/AccessControl/AccessCandidate.class.ts +82 -82
  188. package/src/subsystems/Security/AccessControl/AccessRequest.class.ts +52 -52
  189. package/src/subsystems/Security/Account.service/AccountConnector.ts +44 -44
  190. package/src/subsystems/Security/Account.service/connectors/AWSAccount.class.ts +76 -76
  191. package/src/subsystems/Security/Account.service/connectors/DummyAccount.class.ts +130 -130
  192. package/src/subsystems/Security/Account.service/connectors/JSONFileAccount.class.ts +159 -159
  193. package/src/subsystems/Security/Account.service/index.ts +14 -14
  194. package/src/subsystems/Security/Credentials.helper.ts +62 -62
  195. package/src/subsystems/Security/ManagedVault.service/ManagedVaultConnector.ts +38 -38
  196. package/src/subsystems/Security/ManagedVault.service/connectors/NullManagedVault.class.ts +53 -53
  197. package/src/subsystems/Security/ManagedVault.service/connectors/SecretManagerManagedVault.ts +154 -154
  198. package/src/subsystems/Security/ManagedVault.service/index.ts +12 -12
  199. package/src/subsystems/Security/SecureConnector.class.ts +110 -110
  200. package/src/subsystems/Security/Vault.service/Vault.helper.ts +30 -30
  201. package/src/subsystems/Security/Vault.service/VaultConnector.ts +29 -29
  202. package/src/subsystems/Security/Vault.service/connectors/HashicorpVault.class.ts +46 -46
  203. package/src/subsystems/Security/Vault.service/connectors/JSONFileVault.class.ts +221 -221
  204. package/src/subsystems/Security/Vault.service/connectors/NullVault.class.ts +54 -54
  205. package/src/subsystems/Security/Vault.service/connectors/SecretsManager.class.ts +140 -140
  206. package/src/subsystems/Security/Vault.service/index.ts +12 -12
  207. package/src/types/ACL.types.ts +104 -104
  208. package/src/types/AWS.types.ts +10 -10
  209. package/src/types/Agent.types.ts +61 -61
  210. package/src/types/AgentLogger.types.ts +17 -17
  211. package/src/types/Cache.types.ts +1 -1
  212. package/src/types/Common.types.ts +2 -2
  213. package/src/types/LLM.types.ts +496 -491
  214. package/src/types/Redis.types.ts +8 -8
  215. package/src/types/SRE.types.ts +64 -64
  216. package/src/types/Security.types.ts +14 -14
  217. package/src/types/Storage.types.ts +5 -5
  218. package/src/types/VectorDB.types.ts +86 -86
  219. package/src/utils/base64.utils.ts +275 -275
  220. package/src/utils/cli.utils.ts +68 -68
  221. package/src/utils/data.utils.ts +322 -322
  222. package/src/utils/date-time.utils.ts +22 -22
  223. package/src/utils/general.utils.ts +238 -238
  224. package/src/utils/index.ts +12 -12
  225. package/src/utils/lazy-client.ts +261 -261
  226. package/src/utils/numbers.utils.ts +13 -13
  227. package/src/utils/oauth.utils.ts +35 -35
  228. package/src/utils/string.utils.ts +414 -414
  229. package/src/utils/url.utils.ts +19 -19
  230. package/src/utils/validation.utils.ts +74 -74
  231. package/dist/bundle-analysis-lazy.html +0 -4949
  232. package/dist/bundle-analysis.html +0 -4949
  233. package/dist/types/utils/package-manager.utils.d.ts +0 -26
@@ -1,49 +1,49 @@
1
- import { Logger } from '../helpers/Log.helper';
2
- import { getFormattedStackTrace, printStackTrace } from '../utils';
3
-
4
- /**
5
- * DummyConnector is a placeholder for unimplemented connectors, it logs a warning when a method is called in order to help developers identify missing connectors
6
- */
7
- export const DummyConnector: any = (name: string) => {
8
- const logger = Logger(`DummyConnector<${name}>`);
9
- return new Proxy(
10
- {},
11
- {
12
- get: function (target, prop, receiver) {
13
- //check if we are accessing the valid property
14
- if (prop === 'valid') {
15
- return false; //when DummyConnector is used it means that the main connector failed to load
16
- }
17
-
18
- // Check if the property being accessed is a function
19
- if (typeof target[prop] === 'function') {
20
- return target[prop];
21
- } else {
22
- // Return a function that logs "unavailable"
23
- return function (...args: any[]) {
24
- const argsString =
25
- args.length > 0
26
- ? args
27
- .map((arg) => {
28
- if (typeof arg === 'object') return JSON.stringify(arg, null, 0).slice(0, 50) + '...';
29
- if (typeof arg === 'string') return `"${arg.slice(0, 50)}..."`;
30
- if (typeof arg === 'number') return arg.toString();
31
- if (typeof arg === 'boolean') return arg.toString();
32
- if (typeof arg === 'function') return arg.toString();
33
- if (typeof arg === 'symbol') return arg.toString();
34
- if (typeof arg === 'undefined') return 'undefined';
35
-
36
- return String(arg);
37
- })
38
- .join(', ')
39
- : '(no arguments)';
40
-
41
- logger.warn(`[!!] Unimplemented Connector tried to call: ${name}.${prop.toString()}(${argsString})`);
42
-
43
- printStackTrace(logger, 3, 1); //the argument 1 means that we skip one more strack element because we are calling printStackTrace from an anonymous function
44
- };
45
- }
46
- },
47
- },
48
- );
49
- };
1
+ import { Logger } from '../helpers/Log.helper';
2
+ import { getFormattedStackTrace, printStackTrace } from '../utils';
3
+
4
+ /**
5
+ * DummyConnector is a placeholder for unimplemented connectors, it logs a warning when a method is called in order to help developers identify missing connectors
6
+ */
7
+ export const DummyConnector: any = (name: string) => {
8
+ const logger = Logger(`DummyConnector<${name}>`);
9
+ return new Proxy(
10
+ {},
11
+ {
12
+ get: function (target, prop, receiver) {
13
+ //check if we are accessing the valid property
14
+ if (prop === 'valid') {
15
+ return false; //when DummyConnector is used it means that the main connector failed to load
16
+ }
17
+
18
+ // Check if the property being accessed is a function
19
+ if (typeof target[prop] === 'function') {
20
+ return target[prop];
21
+ } else {
22
+ // Return a function that logs "unavailable"
23
+ return function (...args: any[]) {
24
+ const argsString =
25
+ args.length > 0
26
+ ? args
27
+ .map((arg) => {
28
+ if (typeof arg === 'object') return JSON.stringify(arg, null, 0).slice(0, 50) + '...';
29
+ if (typeof arg === 'string') return `"${arg.slice(0, 50)}..."`;
30
+ if (typeof arg === 'number') return arg.toString();
31
+ if (typeof arg === 'boolean') return arg.toString();
32
+ if (typeof arg === 'function') return arg.toString();
33
+ if (typeof arg === 'symbol') return arg.toString();
34
+ if (typeof arg === 'undefined') return 'undefined';
35
+
36
+ return String(arg);
37
+ })
38
+ .join(', ')
39
+ : '(no arguments)';
40
+
41
+ logger.warn(`[!!] Unimplemented Connector tried to call: ${name}.${prop.toString()}(${argsString})`);
42
+
43
+ printStackTrace(logger, 3, 1); //the argument 1 means that we skip one more strack element because we are calling printStackTrace from an anonymous function
44
+ };
45
+ }
46
+ },
47
+ },
48
+ );
49
+ };
@@ -1,105 +1,105 @@
1
- // Type definition for hook callbacks
2
- type HookCallback = (...args: any[]) => void;
3
-
4
- // Store hooks in a map where each hook name can have multiple callbacks
5
- const hooks: { [key: string]: HookCallback[] } = {};
6
-
7
- export class HookService {
8
- /**
9
- * Register a new hook callback for a given hook name
10
- * @param hookName The name of the hook to register
11
- * @param callback The callback function to execute when the hook is triggered
12
- */
13
- static register(hookName: string, callback: HookCallback): void {
14
- if (typeof callback !== 'function') {
15
- throw new Error('Hook callback must be a function');
16
- }
17
-
18
- if (!hooks[hookName]) {
19
- hooks[hookName] = [];
20
- }
21
-
22
- hooks[hookName].push(callback);
23
- }
24
-
25
- static trigger(hookName: string, ...args: any[]) {
26
- if (hooks[hookName]) {
27
- hooks[hookName].forEach((callback) => callback(...args));
28
- }
29
- }
30
- }
31
-
32
- /**
33
- * Decorator function that executes registered hooks before the decorated method
34
- * @param hookName The name of the hook to trigger
35
- */
36
- export function hook(hookName: string) {
37
- return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
38
- const originalMethod = descriptor.value;
39
-
40
- descriptor.value = function (...args: any[]) {
41
- // Execute all registered hooks for this hook name
42
- if (hooks[hookName]) {
43
- hooks[hookName].forEach((callback) => {
44
- callback.apply(this, args);
45
- });
46
- }
47
-
48
- // Call the original method
49
- return originalMethod.apply(this, args);
50
- };
51
-
52
- return descriptor;
53
- };
54
- }
55
-
56
- /**
57
- * Decorator function that executes registered hooks asynchronously before the decorated method
58
- * @param hookName The name of the hook to trigger
59
- */
60
- export function hookAsync(hookName: string) {
61
- return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
62
- const originalMethod = descriptor.value;
63
-
64
- descriptor.value = async function (...args: any[]) {
65
- // Execute all registered hooks for this hook name
66
- if (hooks[hookName]) {
67
- // Wait for all hooks to complete before proceeding
68
- await Promise.all(hooks[hookName].map((callback) => callback.apply(this, args)));
69
- }
70
-
71
- // Call the original method
72
- return originalMethod.apply(this, args);
73
- };
74
-
75
- return descriptor;
76
- };
77
- }
78
-
79
- /**
80
- * Decorator function that executes registered hooks asynchronously before the decorated method
81
- * @param hookName The name of the hook to trigger
82
- * @param contextFn Optional function to extract additional context from the class instance
83
- */
84
- export function hookAsyncWithContext(hookName: string, contextFn?: (instance: any) => Record<string, any>) {
85
- return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
86
- const originalMethod = descriptor.value;
87
-
88
- descriptor.value = async function (...args: any[]) {
89
- // Execute all registered hooks for this hook name
90
- if (hooks[hookName]) {
91
- // Get additional context if contextFn is provided
92
- const additionalContext = typeof contextFn === 'function' ? await contextFn(this) : {};
93
-
94
- // Wait for all hooks to complete before proceeding
95
- // We need to prepend the additional context before the args; otherwise, optional parameters may cause incorrect argument mapping.
96
- await Promise.all(hooks[hookName].map((callback) => callback.apply(this, [additionalContext, ...args])));
97
- }
98
-
99
- // Call the original method
100
- return originalMethod.apply(this, args);
101
- };
102
-
103
- return descriptor;
104
- };
105
- }
1
+ // Type definition for hook callbacks
2
+ type HookCallback = (...args: any[]) => void;
3
+
4
+ // Store hooks in a map where each hook name can have multiple callbacks
5
+ const hooks: { [key: string]: HookCallback[] } = {};
6
+
7
+ export class HookService {
8
+ /**
9
+ * Register a new hook callback for a given hook name
10
+ * @param hookName The name of the hook to register
11
+ * @param callback The callback function to execute when the hook is triggered
12
+ */
13
+ static register(hookName: string, callback: HookCallback): void {
14
+ if (typeof callback !== 'function') {
15
+ throw new Error('Hook callback must be a function');
16
+ }
17
+
18
+ if (!hooks[hookName]) {
19
+ hooks[hookName] = [];
20
+ }
21
+
22
+ hooks[hookName].push(callback);
23
+ }
24
+
25
+ static trigger(hookName: string, ...args: any[]) {
26
+ if (hooks[hookName]) {
27
+ hooks[hookName].forEach((callback) => callback(...args));
28
+ }
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Decorator function that executes registered hooks before the decorated method
34
+ * @param hookName The name of the hook to trigger
35
+ */
36
+ export function hook(hookName: string) {
37
+ return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
38
+ const originalMethod = descriptor.value;
39
+
40
+ descriptor.value = function (...args: any[]) {
41
+ // Execute all registered hooks for this hook name
42
+ if (hooks[hookName]) {
43
+ hooks[hookName].forEach((callback) => {
44
+ callback.apply(this, args);
45
+ });
46
+ }
47
+
48
+ // Call the original method
49
+ return originalMethod.apply(this, args);
50
+ };
51
+
52
+ return descriptor;
53
+ };
54
+ }
55
+
56
+ /**
57
+ * Decorator function that executes registered hooks asynchronously before the decorated method
58
+ * @param hookName The name of the hook to trigger
59
+ */
60
+ export function hookAsync(hookName: string) {
61
+ return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
62
+ const originalMethod = descriptor.value;
63
+
64
+ descriptor.value = async function (...args: any[]) {
65
+ // Execute all registered hooks for this hook name
66
+ if (hooks[hookName]) {
67
+ // Wait for all hooks to complete before proceeding
68
+ await Promise.all(hooks[hookName].map((callback) => callback.apply(this, args)));
69
+ }
70
+
71
+ // Call the original method
72
+ return originalMethod.apply(this, args);
73
+ };
74
+
75
+ return descriptor;
76
+ };
77
+ }
78
+
79
+ /**
80
+ * Decorator function that executes registered hooks asynchronously before the decorated method
81
+ * @param hookName The name of the hook to trigger
82
+ * @param contextFn Optional function to extract additional context from the class instance
83
+ */
84
+ export function hookAsyncWithContext(hookName: string, contextFn?: (instance: any) => Record<string, any>) {
85
+ return function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
86
+ const originalMethod = descriptor.value;
87
+
88
+ descriptor.value = async function (...args: any[]) {
89
+ // Execute all registered hooks for this hook name
90
+ if (hooks[hookName]) {
91
+ // Get additional context if contextFn is provided
92
+ const additionalContext = typeof contextFn === 'function' ? await contextFn(this) : {};
93
+
94
+ // Wait for all hooks to complete before proceeding
95
+ // We need to prepend the additional context before the args; otherwise, optional parameters may cause incorrect argument mapping.
96
+ await Promise.all(hooks[hookName].map((callback) => callback.apply(this, [additionalContext, ...args])));
97
+ }
98
+
99
+ // Call the original method
100
+ return originalMethod.apply(this, args);
101
+ };
102
+
103
+ return descriptor;
104
+ };
105
+ }