@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,98 +1,98 @@
1
- import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
2
- import { AccessRequest } from '@sre/Security/AccessControl/AccessRequest.class';
3
- import { ACL } from '@sre/Security/AccessControl/ACL.class';
4
- import { IAccessCandidate, IACL } from '@sre/types/ACL.types';
5
- import { SecureConnector } from '@sre/Security/SecureConnector.class';
6
-
7
- export interface CodeInput {
8
- code: string; // Main code to execute
9
- dependencies?: string; // Dependencies/imports/packages
10
- files?: Record<string, string>; // Additional files (filename -> content)
11
- inputs?: Record<string, any>; // Runtime input parameters
12
- }
13
-
14
- export interface CodeConfig {
15
- runtime: string; // 'nodejs', 'python', 'java', etc.
16
- timeout?: number; // Execution timeout in milliseconds
17
- memoryLimit?: number; // Memory allocation in MB
18
- environment?: Record<string, string>; // Environment variables
19
- // Platform-specific settings
20
- platformConfig?: Record<string, any>;
21
- }
22
-
23
- export interface CodeExecutionResult {
24
- output: any; // The execution result/return value
25
- executionTime: number; // Execution time in milliseconds
26
- logs?: string[]; // Execution logs
27
- errors?: string[]; // Error messages
28
- success: boolean; // Whether execution succeeded
29
- }
30
-
31
- export interface CodePreparationResult {
32
- prepared: boolean; // Whether preparation succeeded
33
- errors?: string[]; // Preparation errors
34
- warnings?: string[]; // Preparation warnings
35
- metadata?: Record<string, any>; // Platform-specific preparation data
36
- }
37
-
38
- export interface CodeDeployment {
39
- id: string; // Deployment identifier
40
- status: string;
41
- runtime: string;
42
- createdAt: Date;
43
- lastUsed?: Date;
44
- lastUpdated?: Date;
45
- }
46
-
47
- export interface ICodeRequest {
48
- // Core workflow
49
- prepare(codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodePreparationResult>;
50
- deploy(codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodeDeployment>;
51
- execute(codeUID: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult>;
52
-
53
- // Execute with existing deployment (for platforms that support it)
54
- executeDeployment(codeUID: string, deploymentId: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult>;
55
-
56
- // Deployment management
57
- listDeployments(codeUID: string, config: CodeConfig): Promise<CodeDeployment[]>;
58
- getDeployment(codeUID: string, deploymentId: string, config: CodeConfig): Promise<CodeDeployment | null>;
59
- deleteDeployment(codeUID: string, deploymentId: string, config: CodeConfig): Promise<void>;
60
- }
61
-
62
- export abstract class CodeConnector extends SecureConnector {
63
- public abstract getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL>;
64
- // Abstract methods that concrete connectors must implement
65
- protected abstract prepare(acRequest: AccessRequest, codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodePreparationResult>;
66
- protected abstract deploy(acRequest: AccessRequest, codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodeDeployment>;
67
- protected abstract execute(acRequest: AccessRequest, codeUID: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult>;
68
- protected abstract executeDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult>;
69
- protected abstract listDeployments(acRequest: AccessRequest, codeUID: string, config: CodeConfig): Promise<CodeDeployment[]>;
70
- protected abstract getDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, config: CodeConfig): Promise<CodeDeployment | null>;
71
- protected abstract deleteDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, config: CodeConfig): Promise<void>;
72
-
73
- public requester(candidate: AccessCandidate): ICodeRequest {
74
- return {
75
- prepare: async (codeUID: string, input: CodeInput, config: CodeConfig) => {
76
- return await this.prepare(candidate.readRequest, codeUID, input, config);
77
- },
78
- deploy: async (codeUID: string, input: CodeInput, config: CodeConfig) => {
79
- return await this.deploy(candidate.writeRequest, codeUID, input, config);
80
- },
81
- execute: async (codeUID: string, inputs: Record<string, any>, config: CodeConfig) => {
82
- return await this.execute(candidate.readRequest, codeUID, inputs, config);
83
- },
84
- executeDeployment: async (codeUID: string, deploymentId: string, inputs: Record<string, any>, config: CodeConfig) => {
85
- return await this.executeDeployment(candidate.readRequest, codeUID, deploymentId, inputs, config);
86
- },
87
- listDeployments: async (codeUID: string, config: CodeConfig) => {
88
- return await this.listDeployments(candidate.readRequest, codeUID, config);
89
- },
90
- getDeployment: async (codeUID: string, deploymentId: string, config: CodeConfig) => {
91
- return await this.getDeployment(candidate.readRequest, codeUID, deploymentId, config);
92
- },
93
- deleteDeployment: async (codeUID: string, deploymentId: string, config: CodeConfig) => {
94
- await this.deleteDeployment(candidate.writeRequest, codeUID, deploymentId, config);
95
- },
96
- } as ICodeRequest;
97
- }
98
- }
1
+ import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
2
+ import { AccessRequest } from '@sre/Security/AccessControl/AccessRequest.class';
3
+ import { ACL } from '@sre/Security/AccessControl/ACL.class';
4
+ import { IAccessCandidate, IACL } from '@sre/types/ACL.types';
5
+ import { SecureConnector } from '@sre/Security/SecureConnector.class';
6
+
7
+ export interface CodeInput {
8
+ code: string; // Main code to execute
9
+ dependencies?: string; // Dependencies/imports/packages
10
+ files?: Record<string, string>; // Additional files (filename -> content)
11
+ inputs?: Record<string, any>; // Runtime input parameters
12
+ }
13
+
14
+ export interface CodeConfig {
15
+ runtime: string; // 'nodejs', 'python', 'java', etc.
16
+ timeout?: number; // Execution timeout in milliseconds
17
+ memoryLimit?: number; // Memory allocation in MB
18
+ environment?: Record<string, string>; // Environment variables
19
+ // Platform-specific settings
20
+ platformConfig?: Record<string, any>;
21
+ }
22
+
23
+ export interface CodeExecutionResult {
24
+ output: any; // The execution result/return value
25
+ executionTime: number; // Execution time in milliseconds
26
+ logs?: string[]; // Execution logs
27
+ errors?: string[]; // Error messages
28
+ success: boolean; // Whether execution succeeded
29
+ }
30
+
31
+ export interface CodePreparationResult {
32
+ prepared: boolean; // Whether preparation succeeded
33
+ errors?: string[]; // Preparation errors
34
+ warnings?: string[]; // Preparation warnings
35
+ metadata?: Record<string, any>; // Platform-specific preparation data
36
+ }
37
+
38
+ export interface CodeDeployment {
39
+ id: string; // Deployment identifier
40
+ status: string;
41
+ runtime: string;
42
+ createdAt: Date;
43
+ lastUsed?: Date;
44
+ lastUpdated?: Date;
45
+ }
46
+
47
+ export interface ICodeRequest {
48
+ // Core workflow
49
+ prepare(codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodePreparationResult>;
50
+ deploy(codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodeDeployment>;
51
+ execute(codeUID: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult>;
52
+
53
+ // Execute with existing deployment (for platforms that support it)
54
+ executeDeployment(codeUID: string, deploymentId: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult>;
55
+
56
+ // Deployment management
57
+ listDeployments(codeUID: string, config: CodeConfig): Promise<CodeDeployment[]>;
58
+ getDeployment(codeUID: string, deploymentId: string, config: CodeConfig): Promise<CodeDeployment | null>;
59
+ deleteDeployment(codeUID: string, deploymentId: string, config: CodeConfig): Promise<void>;
60
+ }
61
+
62
+ export abstract class CodeConnector extends SecureConnector {
63
+ public abstract getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL>;
64
+ // Abstract methods that concrete connectors must implement
65
+ protected abstract prepare(acRequest: AccessRequest, codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodePreparationResult>;
66
+ protected abstract deploy(acRequest: AccessRequest, codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodeDeployment>;
67
+ protected abstract execute(acRequest: AccessRequest, codeUID: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult>;
68
+ protected abstract executeDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult>;
69
+ protected abstract listDeployments(acRequest: AccessRequest, codeUID: string, config: CodeConfig): Promise<CodeDeployment[]>;
70
+ protected abstract getDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, config: CodeConfig): Promise<CodeDeployment | null>;
71
+ protected abstract deleteDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, config: CodeConfig): Promise<void>;
72
+
73
+ public requester(candidate: AccessCandidate): ICodeRequest {
74
+ return {
75
+ prepare: async (codeUID: string, input: CodeInput, config: CodeConfig) => {
76
+ return await this.prepare(candidate.readRequest, codeUID, input, config);
77
+ },
78
+ deploy: async (codeUID: string, input: CodeInput, config: CodeConfig) => {
79
+ return await this.deploy(candidate.writeRequest, codeUID, input, config);
80
+ },
81
+ execute: async (codeUID: string, inputs: Record<string, any>, config: CodeConfig) => {
82
+ return await this.execute(candidate.readRequest, codeUID, inputs, config);
83
+ },
84
+ executeDeployment: async (codeUID: string, deploymentId: string, inputs: Record<string, any>, config: CodeConfig) => {
85
+ return await this.executeDeployment(candidate.readRequest, codeUID, deploymentId, inputs, config);
86
+ },
87
+ listDeployments: async (codeUID: string, config: CodeConfig) => {
88
+ return await this.listDeployments(candidate.readRequest, codeUID, config);
89
+ },
90
+ getDeployment: async (codeUID: string, deploymentId: string, config: CodeConfig) => {
91
+ return await this.getDeployment(candidate.readRequest, codeUID, deploymentId, config);
92
+ },
93
+ deleteDeployment: async (codeUID: string, deploymentId: string, config: CodeConfig) => {
94
+ await this.deleteDeployment(candidate.writeRequest, codeUID, deploymentId, config);
95
+ },
96
+ } as ICodeRequest;
97
+ }
98
+ }
@@ -1,170 +1,172 @@
1
- import { IAccessCandidate, TAccessLevel } from '@sre/types/ACL.types';
2
- import { ACL } from '@sre/Security/AccessControl/ACL.class';
3
- import { CodeConfig, CodePreparationResult, CodeConnector, CodeInput, CodeDeployment, CodeExecutionResult } from '../CodeConnector';
4
- import { AccessRequest } from '@sre/Security/AccessControl/AccessRequest.class';
5
- import fs from 'fs';
6
- import path from 'path';
7
- import { execSync } from 'child_process';
8
- import { cacheTTL, createOrUpdateLambdaFunction, generateCodeHash, generateLambdaCode, getDeployedCodeHash, getDeployedFunction, getLambdaFunctionName, invokeLambdaFunction, setDeployedCodeHash, updateDeployedCodeTTL, validateAsyncMainFunction, zipCode } from '@sre/helpers/AWSLambdaCode.helper';
9
- import { AWSCredentials, AWSRegionConfig } from '@sre/types/AWS.types';
10
- import { Logger } from '@sre/helpers/Log.helper';
11
-
12
- const console = Logger('AWSLambda');
13
-
14
- export class AWSLambdaCode extends CodeConnector {
15
- public name = 'AWSLambda';
16
- private awsConfigs: AWSCredentials & AWSRegionConfig;
17
-
18
- constructor(config: { region: string, accessKeyId: string, secretAccessKey: string }) {
19
- super(config);
20
- //if (!SmythRuntime.Instance) throw new Error('SRE not initialized');
21
- this.awsConfigs = config;
22
- }
23
- public async prepare(acRequest: AccessRequest, codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodePreparationResult> {
24
- return {
25
- prepared: true,
26
- errors: [],
27
- warnings: [],
28
- };
29
- }
30
-
31
- public async deploy(acRequest: AccessRequest, codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodeDeployment> {
32
- const agentId = acRequest.candidate.id;
33
- const functionName = getLambdaFunctionName(agentId, codeUID);
34
-
35
-
36
- const [isLambdaExists, exisitingCodeHash] = await Promise.all([
37
- getDeployedFunction(functionName, this.awsConfigs),
38
- getDeployedCodeHash(agentId, codeUID),
39
- ]);
40
-
41
- const codeHash = generateCodeHash(input.code, Object.keys(input.inputs));
42
- if (isLambdaExists && exisitingCodeHash === codeHash) {
43
- return {
44
- id: functionName,
45
- runtime: config.runtime,
46
- createdAt: new Date(),
47
- status: 'deployed',
48
- };
49
- }
50
- const baseFolder = `${process.cwd()}/lambda_archives`;
51
- if (!fs.existsSync(baseFolder)) {
52
- fs.mkdirSync(baseFolder);
53
- }
54
- const directory = `${baseFolder}/${functionName}__${Date.now()}`;
55
- try {
56
- const { isValid, parameters, error, dependencies } = validateAsyncMainFunction(input.code);
57
- if (!isValid) {
58
- throw new Error(error || 'Invalid Code')
59
- }
60
- const lambdaCode = generateLambdaCode(input.code, parameters);
61
- // create folder
62
- fs.mkdirSync(directory);
63
- // create index.js file
64
- fs.writeFileSync(path.join(directory, 'index.mjs'), lambdaCode);
65
- // run command npm init
66
- execSync('npm init -y', { cwd: directory });
67
- // run command npm install
68
- execSync(`npm install ${dependencies.join(' ')}`, { cwd: directory });
69
-
70
- const zipFilePath = await zipCode(directory);
71
- await createOrUpdateLambdaFunction(functionName, zipFilePath, this.awsConfigs);
72
- await setDeployedCodeHash(agentId, codeUID, codeHash);
73
- console.debug('Lambda function updated successfully!');
74
- return {
75
- id: functionName,
76
- runtime: config.runtime,
77
- createdAt: new Date(),
78
- status: 'deploying',
79
- };
80
- } catch (error) {
81
- throw error;
82
- } finally {
83
- try {
84
- fs.rmSync(`${directory}`, { recursive: true, force: true });
85
- fs.unlinkSync(`${directory}.zip`);
86
- } catch (error) {}
87
- }
88
-
89
- }
90
-
91
- public async execute(acRequest: AccessRequest, codeUID: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult> {
92
- try {
93
- const agentId = acRequest.candidate.id;
94
- const functionName = getLambdaFunctionName(agentId, codeUID);
95
-
96
- const lambdaResponse = JSON.parse(await invokeLambdaFunction(functionName, inputs, this.awsConfigs));
97
- const executionTime = lambdaResponse.executionTime;
98
- await updateDeployedCodeTTL(agentId, codeUID, cacheTTL);
99
- console.debug(
100
- `Code result:\n ${typeof lambdaResponse.result === 'object' ? JSON.stringify(lambdaResponse.result, null, 2) : lambdaResponse.result
101
- }\n`,
102
- );
103
- console.debug(`Execution time: ${executionTime}ms\n`);
104
-
105
- const Output = lambdaResponse.result;
106
- return {
107
- output: Output,
108
- executionTime: executionTime,
109
- success: true,
110
- };
111
- } catch (error: any) {
112
- console.error(`Error running code \n${error}\n`);
113
- const _error = error?.response?.data || error?.message || error.toString();
114
- const output = undefined; //prevents running next component if the code execution failed
115
- return { output, executionTime: 0, success: false, errors: [_error] };
116
- }
117
- }
118
-
119
- public async executeDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult> {
120
- const result = await this.execute(acRequest, codeUID, inputs, config);
121
- return result;
122
- }
123
-
124
- public async listDeployments(acRequest: AccessRequest, codeUID: string, config: CodeConfig): Promise<CodeDeployment[]> {
125
- const agentId = acRequest.candidate.id;
126
- const lambdaFunction = await getDeployedFunction(getLambdaFunctionName(agentId, codeUID), config.platformConfig as AWSCredentials & AWSRegionConfig);
127
- if (lambdaFunction) {
128
- return [
129
- {
130
- id: lambdaFunction.functionName,
131
- runtime: lambdaFunction.runtime,
132
- createdAt: new Date(lambdaFunction.updatedAt),
133
- status: lambdaFunction.status,
134
- lastUpdated: new Date(lambdaFunction.updatedAt),
135
- }
136
- ]
137
- }
138
-
139
- return [];
140
- }
141
-
142
- public async getDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, config: CodeConfig): Promise<CodeDeployment | null> {
143
- const agentId = acRequest.candidate.id;
144
- const lambdaFunction = await getDeployedFunction(getLambdaFunctionName(agentId, codeUID), config.platformConfig as AWSCredentials & AWSRegionConfig);
145
- if (lambdaFunction) {
146
- return {
147
- id: lambdaFunction.functionName,
148
- runtime: lambdaFunction.runtime,
149
- createdAt: new Date(lambdaFunction.updatedAt),
150
- status: lambdaFunction.status,
151
- lastUpdated: new Date(lambdaFunction.updatedAt),
152
- }
153
- }
154
- return null;
155
- }
156
-
157
- public async deleteDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string): Promise<void> {
158
- return;
159
- }
160
-
161
- public async getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL> {
162
- const acl = new ACL();
163
-
164
- //give Read access everytime
165
- //FIXME: !!!!!! IMPORTANT !!!!!! this implementation have to be changed in order to reflect the security model of AWS Lambda
166
- acl.addAccess(candidate.role, candidate.id, TAccessLevel.Read);
167
-
168
- return acl;
169
- }
170
- }
1
+ import { IAccessCandidate, TAccessLevel } from '@sre/types/ACL.types';
2
+ import { ACL } from '@sre/Security/AccessControl/ACL.class';
3
+ import { CodeConfig, CodePreparationResult, CodeConnector, CodeInput, CodeDeployment, CodeExecutionResult } from '../CodeConnector';
4
+ import { AccessRequest } from '@sre/Security/AccessControl/AccessRequest.class';
5
+ import fs from 'fs';
6
+ import path from 'path';
7
+ import { execSync } from 'child_process';
8
+ import { cacheTTL, createOrUpdateLambdaFunction, generateCodeHash, generateLambdaCode, getCurrentEnvironmentVariables, getDeployedCodeHash, getDeployedFunction, getLambdaFunctionName, getSortedObjectValues, invokeLambdaFunction, setDeployedCodeHash, updateDeployedCodeTTL, validateAsyncMainFunction, zipCode } from '@sre/helpers/AWSLambdaCode.helper';
9
+ import { AWSCredentials, AWSRegionConfig } from '@sre/types/AWS.types';
10
+ import { Logger } from '@sre/helpers/Log.helper';
11
+
12
+ const console = Logger('AWSLambda');
13
+
14
+ export class AWSLambdaCode extends CodeConnector {
15
+ public name = 'AWSLambda';
16
+ private awsConfigs: AWSCredentials & AWSRegionConfig;
17
+
18
+ constructor(config: { region: string, accessKeyId: string, secretAccessKey: string }) {
19
+ super(config);
20
+ //if (!SmythRuntime.Instance) throw new Error('SRE not initialized');
21
+ this.awsConfigs = config;
22
+ }
23
+ public async prepare(acRequest: AccessRequest, codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodePreparationResult> {
24
+ return {
25
+ prepared: true,
26
+ errors: [],
27
+ warnings: [],
28
+ };
29
+ }
30
+
31
+ public async deploy(acRequest: AccessRequest, codeUID: string, input: CodeInput, config: CodeConfig): Promise<CodeDeployment> {
32
+ const agentId = acRequest.candidate.id;
33
+ const functionName = getLambdaFunctionName(agentId, codeUID);
34
+ const [isLambdaExists, exisitingCodeHash, currentEnvVariables] = await Promise.all([
35
+ getDeployedFunction(functionName, this.awsConfigs),
36
+ getDeployedCodeHash(agentId, codeUID),
37
+ getCurrentEnvironmentVariables(acRequest.candidate.id, input.code),
38
+ ]);
39
+
40
+ // sorting values to get the same hash for the same env variables
41
+ const envValues = getSortedObjectValues(currentEnvVariables);
42
+
43
+ const codeHash = generateCodeHash(input.code, Object.keys(input.inputs), envValues);
44
+ if (isLambdaExists && exisitingCodeHash === codeHash) {
45
+ return {
46
+ id: functionName,
47
+ runtime: config.runtime,
48
+ createdAt: new Date(),
49
+ status: 'deployed',
50
+ };
51
+ }
52
+ const baseFolder = `${process.cwd()}/lambda_archives`;
53
+ if (!fs.existsSync(baseFolder)) {
54
+ fs.mkdirSync(baseFolder);
55
+ }
56
+ const directory = `${baseFolder}/${functionName}__${Date.now()}`;
57
+ try {
58
+ const { isValid, parameters, error, dependencies } = validateAsyncMainFunction(input.code);
59
+ if (!isValid) {
60
+ throw new Error(error || 'Invalid Code')
61
+ }
62
+ const lambdaCode = generateLambdaCode(input.code, parameters, currentEnvVariables);
63
+ // create folder
64
+ fs.mkdirSync(directory);
65
+ // create index.js file
66
+ fs.writeFileSync(path.join(directory, 'index.mjs'), lambdaCode);
67
+ // run command npm init
68
+ execSync('npm init -y', { cwd: directory });
69
+ // run command npm install
70
+ execSync(`npm install ${dependencies.join(' ')}`, { cwd: directory });
71
+
72
+ const zipFilePath = await zipCode(directory);
73
+ await createOrUpdateLambdaFunction(functionName, zipFilePath, this.awsConfigs, currentEnvVariables);
74
+ await setDeployedCodeHash(agentId, codeUID, codeHash);
75
+ console.debug('Lambda function updated successfully!');
76
+ return {
77
+ id: functionName,
78
+ runtime: config.runtime,
79
+ createdAt: new Date(),
80
+ status: 'deploying',
81
+ };
82
+ } catch (error) {
83
+ throw error;
84
+ } finally {
85
+ try {
86
+ fs.rmSync(`${directory}`, { recursive: true, force: true });
87
+ fs.unlinkSync(`${directory}.zip`);
88
+ } catch (error) { }
89
+ }
90
+
91
+ }
92
+
93
+ public async execute(acRequest: AccessRequest, codeUID: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult> {
94
+ try {
95
+ const agentId = acRequest.candidate.id;
96
+ const functionName = getLambdaFunctionName(agentId, codeUID);
97
+
98
+ const lambdaResponse = JSON.parse(await invokeLambdaFunction(functionName, inputs, this.awsConfigs));
99
+ const executionTime = lambdaResponse.executionTime;
100
+ await updateDeployedCodeTTL(agentId, codeUID, cacheTTL);
101
+ console.debug(
102
+ `Code result:\n ${typeof lambdaResponse.result === 'object' ? JSON.stringify(lambdaResponse.result, null, 2) : lambdaResponse.result
103
+ }\n`,
104
+ );
105
+ console.debug(`Execution time: ${executionTime}ms\n`);
106
+
107
+ const Output = lambdaResponse.result;
108
+ return {
109
+ output: Output,
110
+ executionTime: executionTime,
111
+ success: true,
112
+ };
113
+ } catch (error: any) {
114
+ console.error(`Error running code \n${error}\n`);
115
+ const _error = error?.response?.data || error?.message || error.toString();
116
+ const output = undefined; //prevents running next component if the code execution failed
117
+ return { output, executionTime: 0, success: false, errors: [_error] };
118
+ }
119
+ }
120
+
121
+ public async executeDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, inputs: Record<string, any>, config: CodeConfig): Promise<CodeExecutionResult> {
122
+ const result = await this.execute(acRequest, codeUID, inputs, config);
123
+ return result;
124
+ }
125
+
126
+ public async listDeployments(acRequest: AccessRequest, codeUID: string, config: CodeConfig): Promise<CodeDeployment[]> {
127
+ const agentId = acRequest.candidate.id;
128
+ const lambdaFunction = await getDeployedFunction(getLambdaFunctionName(agentId, codeUID), config.platformConfig as AWSCredentials & AWSRegionConfig);
129
+ if (lambdaFunction) {
130
+ return [
131
+ {
132
+ id: lambdaFunction.functionName,
133
+ runtime: lambdaFunction.runtime,
134
+ createdAt: new Date(lambdaFunction.updatedAt),
135
+ status: lambdaFunction.status,
136
+ lastUpdated: new Date(lambdaFunction.updatedAt),
137
+ }
138
+ ]
139
+ }
140
+
141
+ return [];
142
+ }
143
+
144
+ public async getDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string, config: CodeConfig): Promise<CodeDeployment | null> {
145
+ const agentId = acRequest.candidate.id;
146
+ const lambdaFunction = await getDeployedFunction(getLambdaFunctionName(agentId, codeUID), config.platformConfig as AWSCredentials & AWSRegionConfig);
147
+ if (lambdaFunction) {
148
+ return {
149
+ id: lambdaFunction.functionName,
150
+ runtime: lambdaFunction.runtime,
151
+ createdAt: new Date(lambdaFunction.updatedAt),
152
+ status: lambdaFunction.status,
153
+ lastUpdated: new Date(lambdaFunction.updatedAt),
154
+ }
155
+ }
156
+ return null;
157
+ }
158
+
159
+ public async deleteDeployment(acRequest: AccessRequest, codeUID: string, deploymentId: string): Promise<void> {
160
+ return;
161
+ }
162
+
163
+ public async getResourceACL(resourceId: string, candidate: IAccessCandidate): Promise<ACL> {
164
+ const acl = new ACL();
165
+
166
+ //give Read access everytime
167
+ //FIXME: !!!!!! IMPORTANT !!!!!! this implementation have to be changed in order to reflect the security model of AWS Lambda
168
+ acl.addAccess(candidate.role, candidate.id, TAccessLevel.Read);
169
+
170
+ return acl;
171
+ }
172
+ }