@smythos/sre 1.5.50 → 1.5.52

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 (225) hide show
  1. package/CHANGELOG +98 -98
  2. package/LICENSE +18 -18
  3. package/README.md +135 -135
  4. package/dist/index.js +3 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/types/Components/APICall/AccessTokenManager.d.ts +3 -2
  7. package/dist/types/Components/APICall/OAuth.helper.d.ts +3 -2
  8. package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.d.ts +6 -1
  9. package/dist/types/subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class.d.ts +39 -0
  10. package/package.json +1 -1
  11. package/src/Components/APICall/APICall.class.ts +156 -156
  12. package/src/Components/APICall/AccessTokenManager.ts +166 -130
  13. package/src/Components/APICall/ArrayBufferResponse.helper.ts +58 -58
  14. package/src/Components/APICall/OAuth.helper.ts +446 -294
  15. package/src/Components/APICall/mimeTypeCategories.ts +46 -46
  16. package/src/Components/APICall/parseData.ts +167 -167
  17. package/src/Components/APICall/parseHeaders.ts +41 -41
  18. package/src/Components/APICall/parseProxy.ts +68 -68
  19. package/src/Components/APICall/parseUrl.ts +91 -91
  20. package/src/Components/APIEndpoint.class.ts +234 -234
  21. package/src/Components/APIOutput.class.ts +58 -58
  22. package/src/Components/AgentPlugin.class.ts +102 -102
  23. package/src/Components/Async.class.ts +155 -155
  24. package/src/Components/Await.class.ts +90 -90
  25. package/src/Components/Classifier.class.ts +158 -158
  26. package/src/Components/Component.class.ts +132 -132
  27. package/src/Components/ComponentHost.class.ts +38 -38
  28. package/src/Components/DataSourceCleaner.class.ts +92 -92
  29. package/src/Components/DataSourceIndexer.class.ts +181 -181
  30. package/src/Components/DataSourceLookup.class.ts +161 -161
  31. package/src/Components/ECMASandbox.class.ts +71 -71
  32. package/src/Components/FEncDec.class.ts +29 -29
  33. package/src/Components/FHash.class.ts +33 -33
  34. package/src/Components/FSign.class.ts +80 -80
  35. package/src/Components/FSleep.class.ts +25 -25
  36. package/src/Components/FTimestamp.class.ts +25 -25
  37. package/src/Components/FileStore.class.ts +78 -78
  38. package/src/Components/ForEach.class.ts +97 -97
  39. package/src/Components/GPTPlugin.class.ts +70 -70
  40. package/src/Components/GenAILLM.class.ts +586 -586
  41. package/src/Components/HuggingFace.class.ts +314 -314
  42. package/src/Components/Image/imageSettings.config.ts +70 -70
  43. package/src/Components/ImageGenerator.class.ts +502 -502
  44. package/src/Components/JSONFilter.class.ts +54 -54
  45. package/src/Components/LLMAssistant.class.ts +213 -213
  46. package/src/Components/LogicAND.class.ts +28 -28
  47. package/src/Components/LogicAtLeast.class.ts +85 -85
  48. package/src/Components/LogicAtMost.class.ts +86 -86
  49. package/src/Components/LogicOR.class.ts +29 -29
  50. package/src/Components/LogicXOR.class.ts +34 -34
  51. package/src/Components/MCPClient.class.ts +138 -138
  52. package/src/Components/MemoryDeleteKeyVal.class.ts +70 -70
  53. package/src/Components/MemoryReadKeyVal.class.ts +66 -66
  54. package/src/Components/MemoryWriteKeyVal.class.ts +62 -62
  55. package/src/Components/MemoryWriteObject.class.ts +97 -97
  56. package/src/Components/MultimodalLLM.class.ts +128 -128
  57. package/src/Components/OpenAPI.class.ts +72 -72
  58. package/src/Components/PromptGenerator.class.ts +122 -122
  59. package/src/Components/ScrapflyWebScrape.class.ts +159 -159
  60. package/src/Components/ServerlessCode.class.ts +123 -123
  61. package/src/Components/TavilyWebSearch.class.ts +98 -98
  62. package/src/Components/VisionLLM.class.ts +104 -104
  63. package/src/Components/ZapierAction.class.ts +127 -127
  64. package/src/Components/index.ts +97 -97
  65. package/src/Core/AgentProcess.helper.ts +240 -240
  66. package/src/Core/Connector.class.ts +123 -123
  67. package/src/Core/ConnectorsService.ts +197 -197
  68. package/src/Core/DummyConnector.ts +49 -49
  69. package/src/Core/HookService.ts +105 -105
  70. package/src/Core/SmythRuntime.class.ts +235 -235
  71. package/src/Core/SystemEvents.ts +16 -16
  72. package/src/Core/boot.ts +56 -56
  73. package/src/config.ts +15 -15
  74. package/src/constants.ts +126 -126
  75. package/src/data/hugging-face.params.json +579 -579
  76. package/src/helpers/AWSLambdaCode.helper.ts +590 -587
  77. package/src/helpers/BinaryInput.helper.ts +331 -331
  78. package/src/helpers/Conversation.helper.ts +1119 -1119
  79. package/src/helpers/ECMASandbox.helper.ts +54 -54
  80. package/src/helpers/JsonContent.helper.ts +97 -97
  81. package/src/helpers/LocalCache.helper.ts +97 -97
  82. package/src/helpers/Log.helper.ts +274 -274
  83. package/src/helpers/OpenApiParser.helper.ts +150 -150
  84. package/src/helpers/S3Cache.helper.ts +147 -147
  85. package/src/helpers/SmythURI.helper.ts +5 -5
  86. package/src/helpers/Sysconfig.helper.ts +77 -77
  87. package/src/helpers/TemplateString.helper.ts +243 -243
  88. package/src/helpers/TypeChecker.helper.ts +329 -329
  89. package/src/index.ts +3 -3
  90. package/src/index.ts.bak +3 -3
  91. package/src/subsystems/AgentManager/Agent.class.ts +1114 -1114
  92. package/src/subsystems/AgentManager/Agent.helper.ts +3 -3
  93. package/src/subsystems/AgentManager/AgentData.service/AgentDataConnector.ts +230 -230
  94. package/src/subsystems/AgentManager/AgentData.service/connectors/CLIAgentDataConnector.class.ts +66 -66
  95. package/src/subsystems/AgentManager/AgentData.service/connectors/LocalAgentDataConnector.class.ts +142 -142
  96. package/src/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.ts +39 -39
  97. package/src/subsystems/AgentManager/AgentData.service/index.ts +18 -18
  98. package/src/subsystems/AgentManager/AgentLogger.class.ts +297 -297
  99. package/src/subsystems/AgentManager/AgentRequest.class.ts +51 -51
  100. package/src/subsystems/AgentManager/AgentRuntime.class.ts +559 -559
  101. package/src/subsystems/AgentManager/AgentSSE.class.ts +101 -101
  102. package/src/subsystems/AgentManager/AgentSettings.class.ts +52 -52
  103. package/src/subsystems/AgentManager/Component.service/ComponentConnector.ts +32 -32
  104. package/src/subsystems/AgentManager/Component.service/connectors/LocalComponentConnector.class.ts +60 -60
  105. package/src/subsystems/AgentManager/Component.service/index.ts +11 -11
  106. package/src/subsystems/AgentManager/EmbodimentSettings.class.ts +47 -47
  107. package/src/subsystems/AgentManager/ForkedAgent.class.ts +154 -154
  108. package/src/subsystems/AgentManager/OSResourceMonitor.ts +77 -77
  109. package/src/subsystems/ComputeManager/Code.service/CodeConnector.ts +98 -98
  110. package/src/subsystems/ComputeManager/Code.service/connectors/AWSLambdaCode.class.ts +172 -172
  111. package/src/subsystems/ComputeManager/Code.service/connectors/ECMASandbox.class.ts +131 -131
  112. package/src/subsystems/ComputeManager/Code.service/index.ts +13 -13
  113. package/src/subsystems/IO/CLI.service/CLIConnector.ts +47 -47
  114. package/src/subsystems/IO/CLI.service/index.ts +9 -9
  115. package/src/subsystems/IO/Log.service/LogConnector.ts +32 -32
  116. package/src/subsystems/IO/Log.service/connectors/ConsoleLog.class.ts +28 -28
  117. package/src/subsystems/IO/Log.service/index.ts +13 -13
  118. package/src/subsystems/IO/NKV.service/NKVConnector.ts +43 -43
  119. package/src/subsystems/IO/NKV.service/connectors/NKVLocalStorage.class.ts +234 -234
  120. package/src/subsystems/IO/NKV.service/connectors/NKVRAM.class.ts +204 -204
  121. package/src/subsystems/IO/NKV.service/connectors/NKVRedis.class.ts +182 -182
  122. package/src/subsystems/IO/NKV.service/index.ts +14 -14
  123. package/src/subsystems/IO/Router.service/RouterConnector.ts +21 -21
  124. package/src/subsystems/IO/Router.service/connectors/ExpressRouter.class.ts +48 -48
  125. package/src/subsystems/IO/Router.service/connectors/NullRouter.class.ts +40 -40
  126. package/src/subsystems/IO/Router.service/index.ts +11 -11
  127. package/src/subsystems/IO/Storage.service/SmythFS.class.ts +489 -489
  128. package/src/subsystems/IO/Storage.service/StorageConnector.ts +66 -66
  129. package/src/subsystems/IO/Storage.service/connectors/LocalStorage.class.ts +327 -327
  130. package/src/subsystems/IO/Storage.service/connectors/S3Storage.class.ts +482 -482
  131. package/src/subsystems/IO/Storage.service/index.ts +13 -13
  132. package/src/subsystems/IO/VectorDB.service/VectorDBConnector.ts +108 -108
  133. package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +454 -454
  134. package/src/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.ts +384 -384
  135. package/src/subsystems/IO/VectorDB.service/connectors/RAMVecrtorDB.class.ts +421 -421
  136. package/src/subsystems/IO/VectorDB.service/embed/BaseEmbedding.ts +107 -107
  137. package/src/subsystems/IO/VectorDB.service/embed/OpenAIEmbedding.ts +109 -109
  138. package/src/subsystems/IO/VectorDB.service/embed/index.ts +21 -21
  139. package/src/subsystems/IO/VectorDB.service/index.ts +14 -14
  140. package/src/subsystems/LLMManager/LLM.helper.ts +251 -251
  141. package/src/subsystems/LLMManager/LLM.inference.ts +339 -339
  142. package/src/subsystems/LLMManager/LLM.service/LLMConnector.ts +489 -489
  143. package/src/subsystems/LLMManager/LLM.service/LLMCredentials.helper.ts +171 -171
  144. package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +659 -659
  145. package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +400 -400
  146. package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +77 -77
  147. package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +757 -757
  148. package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +304 -304
  149. package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +250 -250
  150. package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +423 -423
  151. package/src/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.ts +488 -488
  152. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +524 -524
  153. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterface.ts +100 -100
  154. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterfaceFactory.ts +81 -81
  155. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +1145 -1145
  156. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.ts +13 -13
  157. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/index.ts +4 -4
  158. package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/utils.ts +11 -11
  159. package/src/subsystems/LLMManager/LLM.service/connectors/openai/types.ts +32 -32
  160. package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +471 -471
  161. package/src/subsystems/LLMManager/LLM.service/index.ts +44 -44
  162. package/src/subsystems/LLMManager/ModelsProvider.service/ModelsProviderConnector.ts +300 -300
  163. package/src/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.ts +252 -252
  164. package/src/subsystems/LLMManager/ModelsProvider.service/index.ts +11 -11
  165. package/src/subsystems/LLMManager/custom-models.ts +854 -854
  166. package/src/subsystems/LLMManager/models.ts +2540 -2540
  167. package/src/subsystems/LLMManager/paramMappings.ts +69 -69
  168. package/src/subsystems/MemoryManager/Cache.service/CacheConnector.ts +86 -86
  169. package/src/subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class.ts +297 -297
  170. package/src/subsystems/MemoryManager/Cache.service/connectors/RAMCache.class.ts +201 -201
  171. package/src/subsystems/MemoryManager/Cache.service/connectors/RedisCache.class.ts +252 -252
  172. package/src/subsystems/MemoryManager/Cache.service/connectors/S3Cache.class.ts +373 -373
  173. package/src/subsystems/MemoryManager/Cache.service/index.ts +15 -15
  174. package/src/subsystems/MemoryManager/LLMCache.ts +72 -72
  175. package/src/subsystems/MemoryManager/LLMContext.ts +124 -124
  176. package/src/subsystems/MemoryManager/LLMMemory.service/LLMMemoryConnector.ts +26 -26
  177. package/src/subsystems/MemoryManager/RuntimeContext.ts +266 -266
  178. package/src/subsystems/Security/AccessControl/ACL.class.ts +208 -208
  179. package/src/subsystems/Security/AccessControl/AccessCandidate.class.ts +82 -82
  180. package/src/subsystems/Security/AccessControl/AccessRequest.class.ts +52 -52
  181. package/src/subsystems/Security/Account.service/AccountConnector.ts +44 -44
  182. package/src/subsystems/Security/Account.service/connectors/AWSAccount.class.ts +76 -76
  183. package/src/subsystems/Security/Account.service/connectors/DummyAccount.class.ts +130 -130
  184. package/src/subsystems/Security/Account.service/connectors/JSONFileAccount.class.ts +159 -159
  185. package/src/subsystems/Security/Account.service/index.ts +14 -14
  186. package/src/subsystems/Security/Credentials.helper.ts +62 -62
  187. package/src/subsystems/Security/ManagedVault.service/ManagedVaultConnector.ts +38 -38
  188. package/src/subsystems/Security/ManagedVault.service/connectors/NullManagedVault.class.ts +53 -53
  189. package/src/subsystems/Security/ManagedVault.service/connectors/SecretManagerManagedVault.ts +154 -154
  190. package/src/subsystems/Security/ManagedVault.service/index.ts +12 -12
  191. package/src/subsystems/Security/SecureConnector.class.ts +110 -110
  192. package/src/subsystems/Security/Vault.service/Vault.helper.ts +30 -30
  193. package/src/subsystems/Security/Vault.service/VaultConnector.ts +29 -29
  194. package/src/subsystems/Security/Vault.service/connectors/HashicorpVault.class.ts +46 -46
  195. package/src/subsystems/Security/Vault.service/connectors/JSONFileVault.class.ts +221 -221
  196. package/src/subsystems/Security/Vault.service/connectors/NullVault.class.ts +54 -54
  197. package/src/subsystems/Security/Vault.service/connectors/SecretsManager.class.ts +140 -140
  198. package/src/subsystems/Security/Vault.service/index.ts +12 -12
  199. package/src/types/ACL.types.ts +104 -104
  200. package/src/types/AWS.types.ts +10 -10
  201. package/src/types/Agent.types.ts +61 -61
  202. package/src/types/AgentLogger.types.ts +17 -17
  203. package/src/types/Cache.types.ts +1 -1
  204. package/src/types/Common.types.ts +2 -2
  205. package/src/types/LLM.types.ts +496 -496
  206. package/src/types/Redis.types.ts +8 -8
  207. package/src/types/SRE.types.ts +64 -64
  208. package/src/types/Security.types.ts +14 -14
  209. package/src/types/Storage.types.ts +5 -5
  210. package/src/types/VectorDB.types.ts +86 -86
  211. package/src/utils/base64.utils.ts +275 -275
  212. package/src/utils/cli.utils.ts +68 -68
  213. package/src/utils/data.utils.ts +322 -322
  214. package/src/utils/date-time.utils.ts +22 -22
  215. package/src/utils/general.utils.ts +238 -238
  216. package/src/utils/index.ts +12 -12
  217. package/src/utils/lazy-client.ts +261 -261
  218. package/src/utils/numbers.utils.ts +13 -13
  219. package/src/utils/oauth.utils.ts +35 -35
  220. package/src/utils/string.utils.ts +414 -414
  221. package/src/utils/url.utils.ts +19 -19
  222. package/src/utils/validation.utils.ts +74 -74
  223. package/dist/bundle-analysis-lazy.html +0 -4949
  224. package/dist/bundle-analysis.html +0 -4949
  225. package/dist/types/utils/package-manager.utils.d.ts +0 -26
@@ -1,150 +1,150 @@
1
- import axios from 'axios';
2
- import yaml from 'js-yaml';
3
-
4
- import { REQUEST_METHODS } from '../constants';
5
-
6
- // * We need a couple of packages to resolve references in the OpenAPI specification
7
- //FIXME : YAML support temporarly disabled to allow executable packaging
8
- //import SwaggerParser from '@apidevtools/swagger-parser';
9
- //import $RefParser from '@apidevtools/json-schema-ref-parser';
10
- //import { JSONSchema } from '@apidevtools/json-schema-ref-parser/dist/lib/types';
11
-
12
- //const swaggerParser = new SwaggerParser();
13
-
14
- type JSONSchema = Record<string, any>;
15
-
16
- /**
17
- * Utility function to resolve $ref values within a schema.
18
- * @param schema The schema containing potential $ref values.
19
- * @param root The root schema for reference resolution.
20
- * @returns The dereferenced schema.
21
- */
22
- const dereferenceSchema = async (schema: any, root: any = schema): Promise<any> => {
23
- if (typeof schema !== 'object' || schema === null) {
24
- return schema;
25
- }
26
-
27
- if (schema.$ref) {
28
- const ref = schema.$ref;
29
- const path = ref.replace(/^#\//, '').split('/'); // Remove the initial '#/' and split the path
30
- let resolved = root;
31
- for (const segment of path) {
32
- if (resolved[segment] === undefined) {
33
- throw new Error(`Could not resolve $ref: ${ref}`);
34
- }
35
- resolved = resolved[segment];
36
- }
37
- return dereferenceSchema(resolved, root); // Recursively dereference
38
- }
39
-
40
- // Recursively resolve all properties and items
41
- if (Array.isArray(schema)) {
42
- return Promise.all(schema.map((item) => dereferenceSchema(item, root)));
43
- }
44
-
45
- const result: any = {};
46
- for (const key of Object.keys(schema)) {
47
- result[key] = await dereferenceSchema(schema[key], root);
48
- }
49
- return result;
50
- };
51
-
52
- export class OpenAPIParser {
53
- static mapReqMethods(paths: Array<Record<string, any>>): Map<string, any> {
54
- const methods = new Map();
55
-
56
- for (const path in paths) {
57
- const pathData = paths[path];
58
-
59
- for (const method in pathData) {
60
- const data = pathData[method];
61
-
62
- if (REQUEST_METHODS.includes(method.toUpperCase())) {
63
- methods.set(data?.operationId, method);
64
- }
65
- }
66
- }
67
-
68
- return methods;
69
- }
70
- static mapEndpoints(paths: Array<Record<string, any>>): Map<string, any> {
71
- const operationIds = new Map();
72
-
73
- for (const path in paths) {
74
- const pathData = paths[path];
75
-
76
- // it's possible we have multiple methods for a single path
77
- for (const method in pathData) {
78
- const data = pathData[method];
79
-
80
- if (REQUEST_METHODS.includes(method.toUpperCase())) {
81
- operationIds.set(data?.operationId, path);
82
- }
83
- }
84
- }
85
-
86
- return operationIds;
87
- }
88
-
89
- // static async yamlToJson(yamlData: string): Promise<JSONSchema> {
90
- // const data = yaml.load(yamlData);
91
- // //FIXME : YAML support temporarly disabled to allow executable packaging
92
- // const schema = await $RefParser.dereference(data);
93
- // //const schema: any = {};
94
-
95
- // return schema;
96
- // }
97
-
98
- static async yamlToJson(yamlData: string): Promise<JSONSchema> {
99
- const data = yaml.load(yamlData);
100
- const schema = await dereferenceSchema(data);
101
- return schema;
102
- }
103
-
104
- // static async getJson(data: string | Record<string, any>): Promise<Record<string, any>> {
105
- // try {
106
- // let _data = data;
107
- // if (typeof data === 'string') {
108
- // _data = JSON.parse(_data as string);
109
- // }
110
- // //FIXME : YAML support temporarly disabled to allow executable packaging
111
- // const result = swaggerParser.dereference(_data as any);
112
- // //const result: any = {};
113
- // return result;
114
- // } catch (error) {
115
- // try {
116
- // return OpenAPIParser.yamlToJson(data as string);
117
- // } catch (error) {
118
- // throw new Error('Invalid OpenAPI specification data format');
119
- // }
120
- // }
121
- // }
122
-
123
- static async getJson(data: string | Record<string, any>): Promise<Record<string, any>> {
124
- try {
125
- let parsedData = data;
126
- if (typeof data === 'string') {
127
- parsedData = JSON.parse(data);
128
- }
129
-
130
- return await dereferenceSchema(parsedData);
131
- } catch (error) {
132
- try {
133
- // Fallback to handle YAML data
134
- return await OpenAPIParser.yamlToJson(data as string);
135
- } catch (innerError) {
136
- throw new Error('Invalid OpenAPI specification or JSON data format');
137
- }
138
- }
139
- }
140
- static async getJsonFromUrl(url: string): Promise<Record<string, any>> {
141
- const response = await axios.get(url);
142
- const data = response.data;
143
-
144
- return OpenAPIParser.getJson(data);
145
- }
146
-
147
- static isValidOpenAPI(data: Record<string, any>): boolean {
148
- return data?.openapi && data?.paths && data?.servers;
149
- }
150
- }
1
+ import axios from 'axios';
2
+ import yaml from 'js-yaml';
3
+
4
+ import { REQUEST_METHODS } from '../constants';
5
+
6
+ // * We need a couple of packages to resolve references in the OpenAPI specification
7
+ //FIXME : YAML support temporarly disabled to allow executable packaging
8
+ //import SwaggerParser from '@apidevtools/swagger-parser';
9
+ //import $RefParser from '@apidevtools/json-schema-ref-parser';
10
+ //import { JSONSchema } from '@apidevtools/json-schema-ref-parser/dist/lib/types';
11
+
12
+ //const swaggerParser = new SwaggerParser();
13
+
14
+ type JSONSchema = Record<string, any>;
15
+
16
+ /**
17
+ * Utility function to resolve $ref values within a schema.
18
+ * @param schema The schema containing potential $ref values.
19
+ * @param root The root schema for reference resolution.
20
+ * @returns The dereferenced schema.
21
+ */
22
+ const dereferenceSchema = async (schema: any, root: any = schema): Promise<any> => {
23
+ if (typeof schema !== 'object' || schema === null) {
24
+ return schema;
25
+ }
26
+
27
+ if (schema.$ref) {
28
+ const ref = schema.$ref;
29
+ const path = ref.replace(/^#\//, '').split('/'); // Remove the initial '#/' and split the path
30
+ let resolved = root;
31
+ for (const segment of path) {
32
+ if (resolved[segment] === undefined) {
33
+ throw new Error(`Could not resolve $ref: ${ref}`);
34
+ }
35
+ resolved = resolved[segment];
36
+ }
37
+ return dereferenceSchema(resolved, root); // Recursively dereference
38
+ }
39
+
40
+ // Recursively resolve all properties and items
41
+ if (Array.isArray(schema)) {
42
+ return Promise.all(schema.map((item) => dereferenceSchema(item, root)));
43
+ }
44
+
45
+ const result: any = {};
46
+ for (const key of Object.keys(schema)) {
47
+ result[key] = await dereferenceSchema(schema[key], root);
48
+ }
49
+ return result;
50
+ };
51
+
52
+ export class OpenAPIParser {
53
+ static mapReqMethods(paths: Array<Record<string, any>>): Map<string, any> {
54
+ const methods = new Map();
55
+
56
+ for (const path in paths) {
57
+ const pathData = paths[path];
58
+
59
+ for (const method in pathData) {
60
+ const data = pathData[method];
61
+
62
+ if (REQUEST_METHODS.includes(method.toUpperCase())) {
63
+ methods.set(data?.operationId, method);
64
+ }
65
+ }
66
+ }
67
+
68
+ return methods;
69
+ }
70
+ static mapEndpoints(paths: Array<Record<string, any>>): Map<string, any> {
71
+ const operationIds = new Map();
72
+
73
+ for (const path in paths) {
74
+ const pathData = paths[path];
75
+
76
+ // it's possible we have multiple methods for a single path
77
+ for (const method in pathData) {
78
+ const data = pathData[method];
79
+
80
+ if (REQUEST_METHODS.includes(method.toUpperCase())) {
81
+ operationIds.set(data?.operationId, path);
82
+ }
83
+ }
84
+ }
85
+
86
+ return operationIds;
87
+ }
88
+
89
+ // static async yamlToJson(yamlData: string): Promise<JSONSchema> {
90
+ // const data = yaml.load(yamlData);
91
+ // //FIXME : YAML support temporarly disabled to allow executable packaging
92
+ // const schema = await $RefParser.dereference(data);
93
+ // //const schema: any = {};
94
+
95
+ // return schema;
96
+ // }
97
+
98
+ static async yamlToJson(yamlData: string): Promise<JSONSchema> {
99
+ const data = yaml.load(yamlData);
100
+ const schema = await dereferenceSchema(data);
101
+ return schema;
102
+ }
103
+
104
+ // static async getJson(data: string | Record<string, any>): Promise<Record<string, any>> {
105
+ // try {
106
+ // let _data = data;
107
+ // if (typeof data === 'string') {
108
+ // _data = JSON.parse(_data as string);
109
+ // }
110
+ // //FIXME : YAML support temporarly disabled to allow executable packaging
111
+ // const result = swaggerParser.dereference(_data as any);
112
+ // //const result: any = {};
113
+ // return result;
114
+ // } catch (error) {
115
+ // try {
116
+ // return OpenAPIParser.yamlToJson(data as string);
117
+ // } catch (error) {
118
+ // throw new Error('Invalid OpenAPI specification data format');
119
+ // }
120
+ // }
121
+ // }
122
+
123
+ static async getJson(data: string | Record<string, any>): Promise<Record<string, any>> {
124
+ try {
125
+ let parsedData = data;
126
+ if (typeof data === 'string') {
127
+ parsedData = JSON.parse(data);
128
+ }
129
+
130
+ return await dereferenceSchema(parsedData);
131
+ } catch (error) {
132
+ try {
133
+ // Fallback to handle YAML data
134
+ return await OpenAPIParser.yamlToJson(data as string);
135
+ } catch (innerError) {
136
+ throw new Error('Invalid OpenAPI specification or JSON data format');
137
+ }
138
+ }
139
+ }
140
+ static async getJsonFromUrl(url: string): Promise<Record<string, any>> {
141
+ const response = await axios.get(url);
142
+ const data = response.data;
143
+
144
+ return OpenAPIParser.getJson(data);
145
+ }
146
+
147
+ static isValidOpenAPI(data: Record<string, any>): boolean {
148
+ return data?.openapi && data?.paths && data?.servers;
149
+ }
150
+ }
@@ -1,147 +1,147 @@
1
- import { GetBucketLifecycleConfigurationCommandOutput, PutBucketLifecycleConfigurationCommand } from '@aws-sdk/client-s3';
2
-
3
- import { GetBucketLifecycleConfigurationCommand } from '@aws-sdk/client-s3';
4
- import { S3Client } from '@aws-sdk/client-s3';
5
- import { Logger } from '@sre/helpers/Log.helper';
6
- const console = Logger('S3Cache');
7
-
8
- export function generateLifecycleRules() {
9
- const rules = [];
10
-
11
- // Add rules for 1-100 days
12
- for (let i = 1; i < 100; i++) {
13
- rules.push({
14
- ID: `ExpireAfter${i}Days`,
15
- Filter: {
16
- // Prefix: '',
17
- Tag: {
18
- Key: 'Expiry',
19
- Value: 'ExpireAfter' + i + 'Days',
20
- },
21
- },
22
- Status: 'Enabled',
23
- Expiration: { Days: i },
24
- });
25
- }
26
-
27
- // Add rules for 110-1000 days with 10-day steps
28
- for (let i = 100; i < 1000; i += 10) {
29
- rules.push({
30
- ID: `ExpireAfter${i}Days`,
31
- Filter: {
32
- // Prefix: '',
33
- Tag: {
34
- Key: 'Expiry',
35
- Value: 'ExpireAfter' + i + 'Days',
36
- },
37
- },
38
- Status: 'Enabled',
39
- Expiration: { Days: i },
40
- });
41
- }
42
-
43
- // Add rules for 1000-10000 days with 100-day steps
44
- for (let i = 1000; i <= 10000; i += 100) {
45
- rules.push({
46
- ID: `ExpireAfter${i}Days`,
47
- Filter: {
48
- // Prefix: '',
49
- Tag: {
50
- Key: 'Expiry',
51
- Value: 'ExpireAfter' + i + 'Days',
52
- },
53
- },
54
- Status: 'Enabled',
55
- Expiration: { Days: i },
56
- });
57
- }
58
-
59
- return rules;
60
- }
61
-
62
- export function generateExpiryMetadata(expiryDays) {
63
- let metadataValue;
64
-
65
- if (expiryDays >= 1 && expiryDays < 100) {
66
- metadataValue = `ExpireAfter${expiryDays}Days`;
67
- } else if (expiryDays >= 100 && expiryDays < 1000) {
68
- const roundedUpDays = Math.ceil(expiryDays / 10) * 10;
69
- metadataValue = `ExpireAfter${roundedUpDays}Days`;
70
- } else if (expiryDays >= 1000 && expiryDays <= 10000) {
71
- const roundedUpDays = Math.ceil(expiryDays / 100) * 100;
72
- metadataValue = `ExpireAfter${roundedUpDays}Days`;
73
- } else {
74
- throw new Error('Invalid expiry days. Please provide a valid expiry days value.');
75
- }
76
-
77
- return {
78
- Key: 'Expiry',
79
- Value: metadataValue,
80
- };
81
- }
82
-
83
- export function getNonExistingRules(existingRules: any[], newRules: any[]) {
84
- return newRules.filter((rule) => !existingRules.some((existingRule) => existingRule.ID === rule.ID));
85
- }
86
-
87
- export function ttlToExpiryDays(ttl: number) {
88
- // seconds
89
- return Math.ceil(ttl / (60 * 60 * 24));
90
- }
91
-
92
- export async function checkAndInstallLifecycleRules(bucketName: string, s3Client: S3Client) {
93
- // Validate inputs
94
- if (!bucketName || bucketName.trim() === '') {
95
- throw new Error('Bucket name is required and cannot be empty');
96
- }
97
-
98
- if (!s3Client) {
99
- throw new Error('S3Client is required');
100
- }
101
-
102
- console.log(`Checking lifecycle rules for bucket: ${bucketName}`);
103
-
104
- try {
105
- // Check existing lifecycle configuration
106
- const getLifecycleCommand = new GetBucketLifecycleConfigurationCommand({ Bucket: bucketName });
107
- const existingLifecycle: GetBucketLifecycleConfigurationCommandOutput = await s3Client.send(getLifecycleCommand);
108
- const existingRules = existingLifecycle.Rules;
109
- const newRules = generateLifecycleRules();
110
- const nonExistingNewRules = getNonExistingRules(existingRules, newRules);
111
- if (nonExistingNewRules.length > 0) {
112
- const params = {
113
- Bucket: bucketName,
114
- LifecycleConfiguration: { Rules: [...existingRules, ...nonExistingNewRules] },
115
- };
116
- const putLifecycleCommand = new PutBucketLifecycleConfigurationCommand(params);
117
- // Put the new lifecycle configuration
118
- await s3Client.send(putLifecycleCommand);
119
- console.log(`Added ${nonExistingNewRules.length} new lifecycle rules to bucket: ${bucketName}`);
120
- } else {
121
- console.log('Lifecycle configuration already exists');
122
- }
123
- } catch (error) {
124
- if (error.code === 'NoSuchLifecycleConfiguration') {
125
- console.log('No lifecycle configuration found. Creating new configuration...');
126
-
127
- const lifecycleRules = generateLifecycleRules();
128
-
129
- const params = {
130
- Bucket: bucketName,
131
- LifecycleConfiguration: { Rules: lifecycleRules },
132
- };
133
- const putLifecycleCommand = new PutBucketLifecycleConfigurationCommand(params);
134
- // Put the new lifecycle configuration
135
- await s3Client.send(putLifecycleCommand);
136
- console.log('Lifecycle configuration created successfully.');
137
- } else {
138
- console.error('Error checking lifecycle configuration:', error);
139
- console.error('Bucket name provided:', bucketName);
140
- console.error('Error details:', {
141
- name: error.name,
142
- message: error.message,
143
- code: error.code,
144
- });
145
- }
146
- }
147
- }
1
+ import { GetBucketLifecycleConfigurationCommandOutput, PutBucketLifecycleConfigurationCommand } from '@aws-sdk/client-s3';
2
+
3
+ import { GetBucketLifecycleConfigurationCommand } from '@aws-sdk/client-s3';
4
+ import { S3Client } from '@aws-sdk/client-s3';
5
+ import { Logger } from '@sre/helpers/Log.helper';
6
+ const console = Logger('S3Cache');
7
+
8
+ export function generateLifecycleRules() {
9
+ const rules = [];
10
+
11
+ // Add rules for 1-100 days
12
+ for (let i = 1; i < 100; i++) {
13
+ rules.push({
14
+ ID: `ExpireAfter${i}Days`,
15
+ Filter: {
16
+ // Prefix: '',
17
+ Tag: {
18
+ Key: 'Expiry',
19
+ Value: 'ExpireAfter' + i + 'Days',
20
+ },
21
+ },
22
+ Status: 'Enabled',
23
+ Expiration: { Days: i },
24
+ });
25
+ }
26
+
27
+ // Add rules for 110-1000 days with 10-day steps
28
+ for (let i = 100; i < 1000; i += 10) {
29
+ rules.push({
30
+ ID: `ExpireAfter${i}Days`,
31
+ Filter: {
32
+ // Prefix: '',
33
+ Tag: {
34
+ Key: 'Expiry',
35
+ Value: 'ExpireAfter' + i + 'Days',
36
+ },
37
+ },
38
+ Status: 'Enabled',
39
+ Expiration: { Days: i },
40
+ });
41
+ }
42
+
43
+ // Add rules for 1000-10000 days with 100-day steps
44
+ for (let i = 1000; i <= 10000; i += 100) {
45
+ rules.push({
46
+ ID: `ExpireAfter${i}Days`,
47
+ Filter: {
48
+ // Prefix: '',
49
+ Tag: {
50
+ Key: 'Expiry',
51
+ Value: 'ExpireAfter' + i + 'Days',
52
+ },
53
+ },
54
+ Status: 'Enabled',
55
+ Expiration: { Days: i },
56
+ });
57
+ }
58
+
59
+ return rules;
60
+ }
61
+
62
+ export function generateExpiryMetadata(expiryDays) {
63
+ let metadataValue;
64
+
65
+ if (expiryDays >= 1 && expiryDays < 100) {
66
+ metadataValue = `ExpireAfter${expiryDays}Days`;
67
+ } else if (expiryDays >= 100 && expiryDays < 1000) {
68
+ const roundedUpDays = Math.ceil(expiryDays / 10) * 10;
69
+ metadataValue = `ExpireAfter${roundedUpDays}Days`;
70
+ } else if (expiryDays >= 1000 && expiryDays <= 10000) {
71
+ const roundedUpDays = Math.ceil(expiryDays / 100) * 100;
72
+ metadataValue = `ExpireAfter${roundedUpDays}Days`;
73
+ } else {
74
+ throw new Error('Invalid expiry days. Please provide a valid expiry days value.');
75
+ }
76
+
77
+ return {
78
+ Key: 'Expiry',
79
+ Value: metadataValue,
80
+ };
81
+ }
82
+
83
+ export function getNonExistingRules(existingRules: any[], newRules: any[]) {
84
+ return newRules.filter((rule) => !existingRules.some((existingRule) => existingRule.ID === rule.ID));
85
+ }
86
+
87
+ export function ttlToExpiryDays(ttl: number) {
88
+ // seconds
89
+ return Math.ceil(ttl / (60 * 60 * 24));
90
+ }
91
+
92
+ export async function checkAndInstallLifecycleRules(bucketName: string, s3Client: S3Client) {
93
+ // Validate inputs
94
+ if (!bucketName || bucketName.trim() === '') {
95
+ throw new Error('Bucket name is required and cannot be empty');
96
+ }
97
+
98
+ if (!s3Client) {
99
+ throw new Error('S3Client is required');
100
+ }
101
+
102
+ console.log(`Checking lifecycle rules for bucket: ${bucketName}`);
103
+
104
+ try {
105
+ // Check existing lifecycle configuration
106
+ const getLifecycleCommand = new GetBucketLifecycleConfigurationCommand({ Bucket: bucketName });
107
+ const existingLifecycle: GetBucketLifecycleConfigurationCommandOutput = await s3Client.send(getLifecycleCommand);
108
+ const existingRules = existingLifecycle.Rules;
109
+ const newRules = generateLifecycleRules();
110
+ const nonExistingNewRules = getNonExistingRules(existingRules, newRules);
111
+ if (nonExistingNewRules.length > 0) {
112
+ const params = {
113
+ Bucket: bucketName,
114
+ LifecycleConfiguration: { Rules: [...existingRules, ...nonExistingNewRules] },
115
+ };
116
+ const putLifecycleCommand = new PutBucketLifecycleConfigurationCommand(params);
117
+ // Put the new lifecycle configuration
118
+ await s3Client.send(putLifecycleCommand);
119
+ console.log(`Added ${nonExistingNewRules.length} new lifecycle rules to bucket: ${bucketName}`);
120
+ } else {
121
+ console.log('Lifecycle configuration already exists');
122
+ }
123
+ } catch (error) {
124
+ if (error.code === 'NoSuchLifecycleConfiguration') {
125
+ console.log('No lifecycle configuration found. Creating new configuration...');
126
+
127
+ const lifecycleRules = generateLifecycleRules();
128
+
129
+ const params = {
130
+ Bucket: bucketName,
131
+ LifecycleConfiguration: { Rules: lifecycleRules },
132
+ };
133
+ const putLifecycleCommand = new PutBucketLifecycleConfigurationCommand(params);
134
+ // Put the new lifecycle configuration
135
+ await s3Client.send(putLifecycleCommand);
136
+ console.log('Lifecycle configuration created successfully.');
137
+ } else {
138
+ console.error('Error checking lifecycle configuration:', error);
139
+ console.error('Bucket name provided:', bucketName);
140
+ console.error('Error details:', {
141
+ name: error.name,
142
+ message: error.message,
143
+ code: error.code,
144
+ });
145
+ }
146
+ }
147
+ }
@@ -1,5 +1,5 @@
1
- export class SmythURI {
2
- static agent(id: string): string {
3
- return `smyth:agent:${id}`;
4
- }
5
- }
1
+ export class SmythURI {
2
+ static agent(id: string): string {
3
+ return `smyth:agent:${id}`;
4
+ }
5
+ }