@smythos/sre 1.5.0 → 1.5.2

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 (189) hide show
  1. package/CHANGELOG +62 -0
  2. package/LICENSE +18 -0
  3. package/package.json +127 -115
  4. package/src/Components/APICall/APICall.class.ts +155 -0
  5. package/src/Components/APICall/AccessTokenManager.ts +130 -0
  6. package/src/Components/APICall/ArrayBufferResponse.helper.ts +58 -0
  7. package/src/Components/APICall/OAuth.helper.ts +294 -0
  8. package/src/Components/APICall/mimeTypeCategories.ts +46 -0
  9. package/src/Components/APICall/parseData.ts +167 -0
  10. package/src/Components/APICall/parseHeaders.ts +41 -0
  11. package/src/Components/APICall/parseProxy.ts +68 -0
  12. package/src/Components/APICall/parseUrl.ts +91 -0
  13. package/src/Components/APIEndpoint.class.ts +234 -0
  14. package/src/Components/APIOutput.class.ts +58 -0
  15. package/src/Components/AgentPlugin.class.ts +102 -0
  16. package/src/Components/Async.class.ts +155 -0
  17. package/src/Components/Await.class.ts +90 -0
  18. package/src/Components/Classifier.class.ts +158 -0
  19. package/src/Components/Component.class.ts +94 -0
  20. package/src/Components/ComponentHost.class.ts +38 -0
  21. package/src/Components/DataSourceCleaner.class.ts +92 -0
  22. package/src/Components/DataSourceIndexer.class.ts +181 -0
  23. package/src/Components/DataSourceLookup.class.ts +141 -0
  24. package/src/Components/FEncDec.class.ts +29 -0
  25. package/src/Components/FHash.class.ts +33 -0
  26. package/src/Components/FSign.class.ts +80 -0
  27. package/src/Components/FSleep.class.ts +25 -0
  28. package/src/Components/FTimestamp.class.ts +25 -0
  29. package/src/Components/FileStore.class.ts +75 -0
  30. package/src/Components/ForEach.class.ts +97 -0
  31. package/src/Components/GPTPlugin.class.ts +70 -0
  32. package/src/Components/GenAILLM.class.ts +395 -0
  33. package/src/Components/HuggingFace.class.ts +314 -0
  34. package/src/Components/Image/imageSettings.config.ts +70 -0
  35. package/src/Components/ImageGenerator.class.ts +407 -0
  36. package/src/Components/JSONFilter.class.ts +54 -0
  37. package/src/Components/LLMAssistant.class.ts +213 -0
  38. package/src/Components/LogicAND.class.ts +28 -0
  39. package/src/Components/LogicAtLeast.class.ts +85 -0
  40. package/src/Components/LogicAtMost.class.ts +86 -0
  41. package/src/Components/LogicOR.class.ts +29 -0
  42. package/src/Components/LogicXOR.class.ts +34 -0
  43. package/src/Components/MCPClient.class.ts +112 -0
  44. package/src/Components/PromptGenerator.class.ts +122 -0
  45. package/src/Components/ScrapflyWebScrape.class.ts +159 -0
  46. package/src/Components/TavilyWebSearch.class.ts +98 -0
  47. package/src/Components/index.ts +77 -0
  48. package/src/Core/AgentProcess.helper.ts +240 -0
  49. package/src/Core/Connector.class.ts +123 -0
  50. package/src/Core/ConnectorsService.ts +192 -0
  51. package/src/Core/DummyConnector.ts +49 -0
  52. package/src/Core/HookService.ts +105 -0
  53. package/src/Core/SmythRuntime.class.ts +292 -0
  54. package/src/Core/SystemEvents.ts +15 -0
  55. package/src/Core/boot.ts +55 -0
  56. package/src/config.ts +15 -0
  57. package/src/constants.ts +125 -0
  58. package/src/data/hugging-face.params.json +580 -0
  59. package/src/helpers/BinaryInput.helper.ts +324 -0
  60. package/src/helpers/Conversation.helper.ts +1094 -0
  61. package/src/helpers/JsonContent.helper.ts +97 -0
  62. package/src/helpers/LocalCache.helper.ts +97 -0
  63. package/src/helpers/Log.helper.ts +234 -0
  64. package/src/helpers/OpenApiParser.helper.ts +150 -0
  65. package/src/helpers/S3Cache.helper.ts +129 -0
  66. package/src/helpers/SmythURI.helper.ts +5 -0
  67. package/src/helpers/TemplateString.helper.ts +243 -0
  68. package/src/helpers/TypeChecker.helper.ts +329 -0
  69. package/src/index.ts +179 -0
  70. package/src/index.ts.bak +179 -0
  71. package/src/subsystems/AgentManager/Agent.class.ts +1108 -0
  72. package/src/subsystems/AgentManager/Agent.helper.ts +3 -0
  73. package/src/subsystems/AgentManager/AgentData.service/AgentDataConnector.ts +230 -0
  74. package/src/subsystems/AgentManager/AgentData.service/connectors/CLIAgentDataConnector.class.ts +66 -0
  75. package/src/subsystems/AgentManager/AgentData.service/connectors/LocalAgentDataConnector.class.ts +142 -0
  76. package/src/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.ts +39 -0
  77. package/src/subsystems/AgentManager/AgentData.service/index.ts +18 -0
  78. package/src/subsystems/AgentManager/AgentLogger.class.ts +297 -0
  79. package/src/subsystems/AgentManager/AgentRequest.class.ts +51 -0
  80. package/src/subsystems/AgentManager/AgentRuntime.class.ts +559 -0
  81. package/src/subsystems/AgentManager/AgentSSE.class.ts +101 -0
  82. package/src/subsystems/AgentManager/AgentSettings.class.ts +52 -0
  83. package/src/subsystems/AgentManager/Component.service/ComponentConnector.ts +32 -0
  84. package/src/subsystems/AgentManager/Component.service/connectors/LocalComponentConnector.class.ts +59 -0
  85. package/src/subsystems/AgentManager/Component.service/index.ts +11 -0
  86. package/src/subsystems/AgentManager/EmbodimentSettings.class.ts +47 -0
  87. package/src/subsystems/AgentManager/ForkedAgent.class.ts +153 -0
  88. package/src/subsystems/AgentManager/OSResourceMonitor.ts +77 -0
  89. package/src/subsystems/ComputeManager/Code.service/CodeConnector.ts +99 -0
  90. package/src/subsystems/ComputeManager/Code.service/connectors/AWSLambdaCode.class.ts +63 -0
  91. package/src/subsystems/ComputeManager/Code.service/index.ts +11 -0
  92. package/src/subsystems/IO/CLI.service/CLIConnector.ts +47 -0
  93. package/src/subsystems/IO/CLI.service/index.ts +9 -0
  94. package/src/subsystems/IO/Log.service/LogConnector.ts +32 -0
  95. package/src/subsystems/IO/Log.service/connectors/ConsoleLog.class.ts +28 -0
  96. package/src/subsystems/IO/Log.service/index.ts +13 -0
  97. package/src/subsystems/IO/NKV.service/NKVConnector.ts +41 -0
  98. package/src/subsystems/IO/NKV.service/connectors/NKVRAM.class.ts +204 -0
  99. package/src/subsystems/IO/NKV.service/connectors/NKVRedis.class.ts +182 -0
  100. package/src/subsystems/IO/NKV.service/index.ts +12 -0
  101. package/src/subsystems/IO/Router.service/RouterConnector.ts +21 -0
  102. package/src/subsystems/IO/Router.service/connectors/ExpressRouter.class.ts +48 -0
  103. package/src/subsystems/IO/Router.service/connectors/NullRouter.class.ts +40 -0
  104. package/src/subsystems/IO/Router.service/index.ts +11 -0
  105. package/src/subsystems/IO/Storage.service/SmythFS.class.ts +472 -0
  106. package/src/subsystems/IO/Storage.service/StorageConnector.ts +66 -0
  107. package/src/subsystems/IO/Storage.service/connectors/LocalStorage.class.ts +305 -0
  108. package/src/subsystems/IO/Storage.service/connectors/S3Storage.class.ts +418 -0
  109. package/src/subsystems/IO/Storage.service/index.ts +13 -0
  110. package/src/subsystems/IO/VectorDB.service/VectorDBConnector.ts +108 -0
  111. package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +450 -0
  112. package/src/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.ts +373 -0
  113. package/src/subsystems/IO/VectorDB.service/connectors/RAMVecrtorDB.class.ts +420 -0
  114. package/src/subsystems/IO/VectorDB.service/embed/BaseEmbedding.ts +106 -0
  115. package/src/subsystems/IO/VectorDB.service/embed/OpenAIEmbedding.ts +109 -0
  116. package/src/subsystems/IO/VectorDB.service/embed/index.ts +21 -0
  117. package/src/subsystems/IO/VectorDB.service/index.ts +14 -0
  118. package/src/subsystems/LLMManager/LLM.helper.ts +221 -0
  119. package/src/subsystems/LLMManager/LLM.inference.ts +335 -0
  120. package/src/subsystems/LLMManager/LLM.service/LLMConnector.ts +374 -0
  121. package/src/subsystems/LLMManager/LLM.service/LLMCredentials.helper.ts +145 -0
  122. package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +632 -0
  123. package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +405 -0
  124. package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +81 -0
  125. package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +689 -0
  126. package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +257 -0
  127. package/src/subsystems/LLMManager/LLM.service/connectors/OpenAI.class.ts +848 -0
  128. package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +255 -0
  129. package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +193 -0
  130. package/src/subsystems/LLMManager/LLM.service/index.ts +43 -0
  131. package/src/subsystems/LLMManager/ModelsProvider.service/ModelsProviderConnector.ts +281 -0
  132. package/src/subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class.ts +229 -0
  133. package/src/subsystems/LLMManager/ModelsProvider.service/index.ts +11 -0
  134. package/src/subsystems/LLMManager/custom-models.ts +854 -0
  135. package/src/subsystems/LLMManager/models.ts +2539 -0
  136. package/src/subsystems/LLMManager/paramMappings.ts +69 -0
  137. package/src/subsystems/MemoryManager/Cache.service/CacheConnector.ts +86 -0
  138. package/src/subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class.ts +297 -0
  139. package/src/subsystems/MemoryManager/Cache.service/connectors/RAMCache.class.ts +201 -0
  140. package/src/subsystems/MemoryManager/Cache.service/connectors/RedisCache.class.ts +252 -0
  141. package/src/subsystems/MemoryManager/Cache.service/connectors/S3Cache.class.ts +373 -0
  142. package/src/subsystems/MemoryManager/Cache.service/index.ts +15 -0
  143. package/src/subsystems/MemoryManager/LLMCache.ts +72 -0
  144. package/src/subsystems/MemoryManager/LLMContext.ts +125 -0
  145. package/src/subsystems/MemoryManager/RuntimeContext.ts +249 -0
  146. package/src/subsystems/Security/AccessControl/ACL.class.ts +208 -0
  147. package/src/subsystems/Security/AccessControl/AccessCandidate.class.ts +76 -0
  148. package/src/subsystems/Security/AccessControl/AccessRequest.class.ts +52 -0
  149. package/src/subsystems/Security/Account.service/AccountConnector.ts +41 -0
  150. package/src/subsystems/Security/Account.service/connectors/AWSAccount.class.ts +76 -0
  151. package/src/subsystems/Security/Account.service/connectors/DummyAccount.class.ts +130 -0
  152. package/src/subsystems/Security/Account.service/connectors/JSONFileAccount.class.ts +159 -0
  153. package/src/subsystems/Security/Account.service/index.ts +14 -0
  154. package/src/subsystems/Security/Credentials.helper.ts +62 -0
  155. package/src/subsystems/Security/ManagedVault.service/ManagedVaultConnector.ts +34 -0
  156. package/src/subsystems/Security/ManagedVault.service/connectors/NullManagedVault.class.ts +57 -0
  157. package/src/subsystems/Security/ManagedVault.service/connectors/SecretManagerManagedVault.ts +154 -0
  158. package/src/subsystems/Security/ManagedVault.service/index.ts +12 -0
  159. package/src/subsystems/Security/SecureConnector.class.ts +110 -0
  160. package/src/subsystems/Security/Vault.service/Vault.helper.ts +30 -0
  161. package/src/subsystems/Security/Vault.service/VaultConnector.ts +26 -0
  162. package/src/subsystems/Security/Vault.service/connectors/HashicorpVault.class.ts +46 -0
  163. package/src/subsystems/Security/Vault.service/connectors/JSONFileVault.class.ts +166 -0
  164. package/src/subsystems/Security/Vault.service/connectors/NullVault.class.ts +54 -0
  165. package/src/subsystems/Security/Vault.service/connectors/SecretsManager.class.ts +140 -0
  166. package/src/subsystems/Security/Vault.service/index.ts +12 -0
  167. package/src/types/ACL.types.ts +104 -0
  168. package/src/types/AWS.types.ts +9 -0
  169. package/src/types/Agent.types.ts +61 -0
  170. package/src/types/AgentLogger.types.ts +17 -0
  171. package/src/types/Cache.types.ts +1 -0
  172. package/src/types/Common.types.ts +3 -0
  173. package/src/types/LLM.types.ts +419 -0
  174. package/src/types/Redis.types.ts +8 -0
  175. package/src/types/SRE.types.ts +64 -0
  176. package/src/types/Security.types.ts +18 -0
  177. package/src/types/Storage.types.ts +5 -0
  178. package/src/types/VectorDB.types.ts +78 -0
  179. package/src/utils/base64.utils.ts +275 -0
  180. package/src/utils/cli.utils.ts +68 -0
  181. package/src/utils/data.utils.ts +263 -0
  182. package/src/utils/date-time.utils.ts +22 -0
  183. package/src/utils/general.utils.ts +238 -0
  184. package/src/utils/index.ts +12 -0
  185. package/src/utils/numbers.utils.ts +13 -0
  186. package/src/utils/oauth.utils.ts +35 -0
  187. package/src/utils/string.utils.ts +414 -0
  188. package/src/utils/url.utils.ts +19 -0
  189. package/src/utils/validation.utils.ts +74 -0
package/CHANGELOG ADDED
@@ -0,0 +1,62 @@
1
+ # Changelog
2
+
3
+ All notable changes to the SmythOS CORE Runtime Engine will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [v1.5.0] SmythOS becomes open source!
9
+
10
+ ### Features
11
+
12
+ - Moved to a monorepo structure
13
+ - Implemented an SDK that provides an abstracted interface for all SmythOS components
14
+ - Implemented a CLI to help running agents and scaffolding SDK and SRE projects along
15
+
16
+ ## [v1.4.5]
17
+
18
+ ### Features
19
+
20
+ - New connectors : JSON Account connector, RAMVec vectordb, localStorage
21
+ - Conversation manager: better handling of agent chats
22
+ - logger becomes a connector
23
+ - Add support for usage reporting
24
+ - LLM : Refactored and simplified LLM Connector interface
25
+
26
+ ## [v1.4.0]
27
+
28
+ ### Features
29
+
30
+ - New connectors : JSON Account connector, RAMVec vectordb, localStorage
31
+ - Conversation manager: better handling of agent chats
32
+ - logger becomes a connector
33
+ - Add support for usage reporting
34
+ - LLM : new models provider connector allows loading custom models including local models
35
+
36
+ ## [v1.2.0]
37
+
38
+ ### Features
39
+
40
+ - New connectors : AWS Secret Manager Vault, Redis, and RAM Cache
41
+ - Conversation manager: better handling of agent chats
42
+ - All connectors inherit from SecureConnector using a common security layer
43
+ - LLM : support for anthropic, Groq and Gemini
44
+
45
+ ## [v1.1.0]
46
+
47
+ ### Features
48
+
49
+ - New connectors : S3, Pinecone, and local vault
50
+ - LLM : implemented common LLM interface to support more providers
51
+
52
+ ## [v1.0.0]
53
+
54
+ ### Features
55
+
56
+ - Initial release
57
+ - LLM : support for openai API
58
+ - Smyth Runtime Core
59
+ - Connectors Serivece
60
+ - Subsystems architecture
61
+ - Security & ACL helpers
62
+ - Implemented services : AgentData, Storage, Account, VectorDB
package/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ The MIT License
2
+
3
+ Copyright 2025, INK Content, Inc.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
6
+ documentation files (the “Software”), to deal in the Software without restriction, including without limitation
7
+ the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
8
+ to permit persons to whom the Software is furnished to do so, subject to the following conditions:
9
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions
10
+ of the Software.
11
+
12
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18
+ SOFTWARE.
package/package.json CHANGED
@@ -1,117 +1,129 @@
1
1
  {
2
- "name": "@smythos/sre",
3
- "version": "1.5.0",
4
- "description": "Smyth Runtime Environment",
5
- "author": "Alaa-eddine KADDOURI",
6
- "license": "MIT",
7
- "main": "dist/index.js",
8
- "types": "dist/types/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "import": "./dist/index.js",
12
- "types": "./dist/types/index.d.ts"
13
- }
14
- },
15
- "files": [
16
- "dist"
17
- ],
18
- "type": "module",
19
- "scripts": {
20
- "gen:barrel": "ctix build",
21
- "build:types": "tsc --emitDeclarationOnly --declaration --outDir dist/types -p tsconfig.dts.json",
22
- "build:jsbundle": "cross-env rollup -c",
23
- "build": "pnpm run build:jsbundle && pnpm run build:types",
24
- "doc:gen": "typedoc",
25
- "doc:graphgen": "npx depcruise src --config ./doc/.dep-minimal.json --output-type dot > ./doc/dep-graph.dot && dot -Tpng ./doc/dep-graph.dot -o ./doc/dep-graph.png",
26
- "knip": "knip"
27
- },
28
- "devDependencies": {
29
- "@faker-js/faker": "^8.4.1",
30
- "@istanbuljs/nyc-config-typescript": "^1.0.2",
31
- "@rollup/plugin-json": "^6.1.0",
32
- "@rollup/plugin-node-resolve": "^15.2.3",
33
- "@rollup/pluginutils": "^5.1.0",
34
- "@types/cookie-parser": "^1.4.7",
35
- "@types/express": "^4.17.23",
36
- "@types/express-session": "^1.18.0",
37
- "@types/lodash": "^4.17.10",
38
- "@types/node": "^20.19.0",
39
- "cross-env": "^7.0.3",
40
- "ctix": "^2.7.1",
41
- "dependency-cruiser": "^16.3.3",
42
- "esbuild": "^0.25.0",
43
- "knip": "^5.23.1",
44
- "nyc": "^17.0.0",
45
- "pkg": "^5.8.1",
46
- "rollup-plugin-copy": "^3.5.0",
47
- "rollup-plugin-esbuild": "^6.1.1",
48
- "rollup-plugin-sourcemaps": "^0.6.3",
49
- "rollup-plugin-terser": "^7.0.2",
50
- "rollup-plugin-typescript-paths": "^1.5.0",
51
- "rollup-plugin-typescript2": "^0.36.0",
52
- "source-map-support": "^0.5.21",
53
- "typedoc": "^0.28.5",
54
- "typedoc-github-theme": "^0.3.0",
55
- "typescript": "^5.4.5"
56
- },
57
- "dependencies": {
58
- "@anthropic-ai/sdk": "^0.39.0",
59
- "@apidevtools/json-schema-ref-parser": "^11.6.4",
60
- "@aws-sdk/client-bedrock-runtime": "^3.826.0",
61
- "@aws-sdk/client-iam": "^3.826.0",
62
- "@aws-sdk/client-lambda": "^3.826.0",
63
- "@aws-sdk/client-s3": "^3.826.0",
64
- "@aws-sdk/client-secrets-manager": "^3.826.0",
65
- "@google-cloud/vertexai": "^1.7.0",
66
- "@google/generative-ai": "^0.14.1",
67
- "@huggingface/inference": "^2.8.0",
68
- "@modelcontextprotocol/sdk": "^1.10.1",
69
- "@pinecone-database/pinecone": "^3.0.0",
70
- "@runware/sdk-js": "^1.1.36",
71
- "@smithy/smithy-client": "^4.4.3",
72
- "@zilliz/milvus2-sdk-node": "^2.5.11",
73
- "acorn": "^8.14.1",
74
- "axios": "^1.7.2",
75
- "chokidar": "^4.0.3",
76
- "commander": "^11.1.0",
77
- "cookie-parser": "^1.4.7",
78
- "cors": "^2.8.5",
79
- "dayjs": "^1.11.11",
80
- "dotenv": "^16.4.5",
81
- "eventsource": "^3.0.2",
82
- "express": "^4.21.2",
83
- "express-async-handler": "^1.2.0",
84
- "express-session": "^1.18.1",
85
- "file-type": "^19.0.0",
86
- "form-data": "^4.0.3",
87
- "gpt-tokenizer": "^2.2.1",
88
- "groq-sdk": "^0.6.1",
89
- "image-size": "^1.1.1",
90
- "ioredis": "^5.4.1",
91
- "isbinaryfile": "^5.0.2",
92
- "joi": "^17.13.1",
93
- "js-yaml": "^4.1.0",
94
- "jsonrepair": "^3.8.0",
95
- "jsonwebtoken": "^9.0.2",
96
- "jwks-rsa": "^3.1.0",
97
- "lodash": "^4.17.21",
98
- "memorystore": "^1.6.7",
99
- "mime": "^4.0.3",
100
- "multer": "^1.4.5-lts.1",
101
- "mysql2": "^3.11.3",
102
- "oauth-1.0a": "^2.2.6",
103
- "openai": "^4.103.0",
104
- "p-limit": "^6.1.0",
105
- "pkce-challenge": "^5.0.0",
106
- "qs": "^6.13.0",
107
- "rate-limiter-flexible": "^5.0.3",
108
- "readline-sync": "^1.4.10",
109
- "socket.io-client": "^4.8.1",
110
- "socks-proxy-agent": "^8.0.4",
111
- "uuid": "^10.0.0",
112
- "winston": "^3.13.0",
113
- "winston-transport": "^4.7.0",
114
- "xxhashjs": "^0.2.2",
115
- "zip-lib": "^1.0.5"
2
+ "name": "@smythos/sre",
3
+ "version": "1.5.2",
4
+ "description": "Smyth Runtime Environment",
5
+ "author": "Alaa-eddine KADDOURI",
6
+ "license": "MIT",
7
+ "main": "dist/index.js",
8
+ "types": "dist/types/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/types/index.d.ts"
116
13
  }
117
- }
14
+ },
15
+ "files": [
16
+ "dist",
17
+ "src",
18
+ "README.md",
19
+ "CHANGELOG"
20
+ ],
21
+ "type": "module",
22
+ "devDependencies": {
23
+ "@faker-js/faker": "^8.4.1",
24
+ "@istanbuljs/nyc-config-typescript": "^1.0.2",
25
+ "@rollup/plugin-json": "^6.1.0",
26
+ "@rollup/plugin-node-resolve": "^15.2.3",
27
+ "@rollup/pluginutils": "^5.1.0",
28
+ "@types/cookie-parser": "^1.4.7",
29
+ "@types/express": "^4.17.23",
30
+ "@types/express-session": "^1.18.0",
31
+ "@types/lodash": "^4.17.10",
32
+ "@types/node": "^20.19.0",
33
+ "cross-env": "^7.0.3",
34
+ "ctix": "^2.7.1",
35
+ "dependency-cruiser": "^16.3.3",
36
+ "esbuild": "^0.25.0",
37
+ "knip": "^5.23.1",
38
+ "nyc": "^17.0.0",
39
+ "pkg": "^5.8.1",
40
+ "rollup-plugin-copy": "^3.5.0",
41
+ "rollup-plugin-esbuild": "^6.1.1",
42
+ "rollup-plugin-sourcemaps": "^0.6.3",
43
+ "rollup-plugin-terser": "^7.0.2",
44
+ "rollup-plugin-typescript-paths": "^1.5.0",
45
+ "rollup-plugin-typescript2": "^0.36.0",
46
+ "source-map-support": "^0.5.21",
47
+ "typedoc": "^0.28.5",
48
+ "typedoc-github-theme": "^0.3.0",
49
+ "typescript": "^5.4.5"
50
+ },
51
+ "dependencies": {
52
+ "@anthropic-ai/sdk": "^0.39.0",
53
+ "@apidevtools/json-schema-ref-parser": "^11.6.4",
54
+ "@aws-sdk/client-bedrock-runtime": "^3.826.0",
55
+ "@aws-sdk/client-iam": "^3.826.0",
56
+ "@aws-sdk/client-lambda": "^3.826.0",
57
+ "@aws-sdk/client-s3": "^3.826.0",
58
+ "@aws-sdk/client-secrets-manager": "^3.826.0",
59
+ "@google-cloud/vertexai": "^1.7.0",
60
+ "@google/generative-ai": "^0.14.1",
61
+ "@huggingface/inference": "^2.8.0",
62
+ "@modelcontextprotocol/sdk": "^1.10.1",
63
+ "@pinecone-database/pinecone": "^3.0.0",
64
+ "@runware/sdk-js": "^1.1.36",
65
+ "@smithy/smithy-client": "^4.4.3",
66
+ "@zilliz/milvus2-sdk-node": "^2.5.11",
67
+ "acorn": "^8.14.1",
68
+ "axios": "^1.7.2",
69
+ "chokidar": "^4.0.3",
70
+ "commander": "^11.1.0",
71
+ "cookie-parser": "^1.4.7",
72
+ "cors": "^2.8.5",
73
+ "dayjs": "^1.11.11",
74
+ "dotenv": "^16.4.5",
75
+ "eventsource": "^3.0.2",
76
+ "express": "^4.21.2",
77
+ "express-async-handler": "^1.2.0",
78
+ "express-session": "^1.18.1",
79
+ "file-type": "^19.0.0",
80
+ "form-data": "^4.0.3",
81
+ "gpt-tokenizer": "^2.2.1",
82
+ "groq-sdk": "^0.6.1",
83
+ "image-size": "^1.1.1",
84
+ "ioredis": "^5.4.1",
85
+ "isbinaryfile": "^5.0.2",
86
+ "joi": "^17.13.1",
87
+ "js-yaml": "^4.1.0",
88
+ "jsonrepair": "^3.8.0",
89
+ "jsonwebtoken": "^9.0.2",
90
+ "jwks-rsa": "^3.1.0",
91
+ "lodash": "^4.17.21",
92
+ "memorystore": "^1.6.7",
93
+ "mime": "^4.0.3",
94
+ "multer": "^1.4.5-lts.1",
95
+ "mysql2": "^3.11.3",
96
+ "oauth-1.0a": "^2.2.6",
97
+ "openai": "^4.103.0",
98
+ "p-limit": "^6.1.0",
99
+ "pkce-challenge": "^5.0.0",
100
+ "qs": "^6.13.0",
101
+ "rate-limiter-flexible": "^5.0.3",
102
+ "readline-sync": "^1.4.10",
103
+ "socket.io-client": "^4.8.1",
104
+ "socks-proxy-agent": "^8.0.4",
105
+ "uuid": "^10.0.0",
106
+ "winston": "^3.13.0",
107
+ "winston-transport": "^4.7.0",
108
+ "xxhashjs": "^0.2.2",
109
+ "zip-lib": "^1.0.5"
110
+ },
111
+ "repository": {
112
+ "type": "git",
113
+ "url": "https://github.com/smythos/sre.git",
114
+ "directory": "packages/core"
115
+ },
116
+ "bugs": {
117
+ "url": "https://github.com/smythos/sre/issues"
118
+ },
119
+ "homepage": "https://github.com/smythos/sre/tree/main/packages/core#readme",
120
+ "scripts": {
121
+ "gen:barrel": "ctix build",
122
+ "build:types": "tsc --emitDeclarationOnly --declaration --outDir dist/types -p tsconfig.dts.json",
123
+ "build:jsbundle": "cross-env rollup -c",
124
+ "build": "pnpm run build:jsbundle && pnpm run build:types",
125
+ "doc:gen": "typedoc",
126
+ "doc:graphgen": "npx depcruise src --config ./doc/.dep-minimal.json --output-type dot > ./doc/dep-graph.dot && dot -Tpng ./doc/dep-graph.dot -o ./doc/dep-graph.png",
127
+ "knip": "knip"
128
+ }
129
+ }
@@ -0,0 +1,155 @@
1
+ import axios, { AxiosRequestConfig } from 'axios';
2
+ import Joi from 'joi';
3
+
4
+ import { Agent } from '@sre/AgentManager/Agent.class';
5
+ import { Component } from '../Component.class';
6
+ import { parseHeaders } from './parseHeaders';
7
+ import { parseUrl, parseSmythFsUrl, destroyPublicUrls } from './parseUrl';
8
+ import { parseData } from './parseData';
9
+ import { parseProxy } from './parseProxy';
10
+ import { parseArrayBufferResponse } from './ArrayBufferResponse.helper';
11
+ import { extractAdditionalParamsForOAuth1, handleOAuthHeaders as generateOAuthHeaders } from './OAuth.helper';
12
+ import { SocksProxyAgent } from 'socks-proxy-agent';
13
+ import { formatDataForDebug } from '@sre/utils/data.utils';
14
+
15
+ export class APICall extends Component {
16
+ protected schema = {
17
+ name: 'APICall',
18
+ description: 'Use this component to make an API call',
19
+ inputs: {},
20
+ outputs: {
21
+ Headers: {
22
+ description: 'The headers of the API call response',
23
+ default: true,
24
+ },
25
+ Response: {
26
+ description: 'The response of the API call',
27
+ default: true,
28
+ },
29
+ },
30
+ };
31
+
32
+ protected configSchema = Joi.object({
33
+ method: Joi.string().valid('GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS').required().label('Method'),
34
+ url: Joi.string()
35
+ .max(8192) /*.custom(isUrlValid, 'URL validation')*/
36
+ .required()
37
+ .label('URL'),
38
+ headers: Joi.any().allow('').label('Headers'),
39
+ contentType: Joi.string()
40
+ .valid('none', 'application/json', 'multipart/form-data', 'binary', 'application/x-www-form-urlencoded', 'text/plain', 'application/xml')
41
+ .label('Content-Type'),
42
+ body: Joi.any().allow('').label('Body'),
43
+ _templateSettings: Joi.object().allow(null).label('Template Settings'),
44
+ _templateVars: Joi.object().allow(null).label('Template Variables'),
45
+ proxy: Joi.string().allow('').label('Proxy'),
46
+ oauthService: Joi.string().allow('').label('OAuth Service'),
47
+ scope: Joi.string().allow('').label('Scope'),
48
+ authorizationURL: Joi.string().allow('').label('Authorization URL'),
49
+ tokenURL: Joi.string().allow('').label('Token URL'),
50
+ clientID: Joi.string().allow('').label('Client ID'),
51
+ clientSecret: Joi.string().allow('').label('Client Secret'),
52
+ oauth2CallbackURL: Joi.string().allow('').label('OAuth2 Callback URL'),
53
+ callbackURL: Joi.string().allow('').label('Callback URL'), // !TEMP: prevent validation error
54
+ requestTokenURL: Joi.string().allow('').label('Request Token URL'),
55
+ accessTokenURL: Joi.string().allow('').label('Access Token URL'),
56
+ userAuthorizationURL: Joi.string().allow('').label('User Authorization URL'),
57
+ consumerKey: Joi.string().allow('').label('Consumer Key'),
58
+ consumerSecret: Joi.string().allow('').label('Consumer Secret'),
59
+ oauth1CallbackURL: Joi.string().allow('').label('OAuth1 Callback URL'),
60
+ authenticate: Joi.string().allow('').label('Authenticate'),
61
+ });
62
+ constructor() {
63
+ super();
64
+ }
65
+
66
+ init() {}
67
+
68
+ async process(input, config, agent: Agent) {
69
+ await super.process(input, config, agent);
70
+
71
+ const logger = this.createComponentLogger(agent, config);
72
+
73
+ let publicUrls: string[] = [];
74
+
75
+ try {
76
+ logger.debug(`=== API Call Log ===`);
77
+
78
+ const method = config?.data?.method || 'get';
79
+
80
+ const reqConfig: AxiosRequestConfig = {};
81
+ reqConfig.method = method;
82
+
83
+ reqConfig.url = await parseUrl(input, config, agent);
84
+
85
+ // We generate public URLs for any resources specified with the smythfs protocol in the request URL.
86
+ ({ url: reqConfig.url, publicUrls } = await parseSmythFsUrl(reqConfig.url, agent));
87
+
88
+ const { data, headers } = await parseData(input, config, agent);
89
+
90
+ // If the data is null, the request may fail. We encountered an issue where a request failed due to null data being provided.
91
+ let dataForDebug;
92
+ if (data) {
93
+ reqConfig.data = data;
94
+
95
+ dataForDebug = await formatDataForDebug(data);
96
+ }
97
+
98
+ reqConfig.headers = (await parseHeaders(input, config, agent)).concat({ ...headers });
99
+
100
+ const proxyConfig = await parseProxy(input, config, agent);
101
+
102
+ if (proxyConfig) {
103
+ if (proxyConfig instanceof SocksProxyAgent) {
104
+ const isSecureEndpoint = reqConfig.url?.startsWith('https://');
105
+ reqConfig[isSecureEndpoint ? 'httpsAgent' : 'httpAgent'] = proxyConfig;
106
+ } else {
107
+ reqConfig.proxy = proxyConfig;
108
+ }
109
+ }
110
+
111
+ let Response: any = {};
112
+ let Headers: any = {};
113
+ let _error: any = undefined;
114
+ try {
115
+ if (config?.data?.oauthService && config?.data?.oauthService !== 'None') {
116
+ const rootUrl = new URL(reqConfig.url).origin;
117
+ const additionalParams = extractAdditionalParamsForOAuth1(reqConfig);
118
+ const oauthHeaders = await generateOAuthHeaders(agent, config, reqConfig, logger, additionalParams, rootUrl);
119
+ //reqConfig.headers = { ...reqConfig.headers, ...oauthHeaders };
120
+ reqConfig.headers = reqConfig.headers.concat({ ...oauthHeaders });
121
+ }
122
+
123
+ // in order to handle binary data automatically, we need to set responseType to 'arraybuffer' for all requests, then parse the response data based on content-type
124
+ reqConfig.responseType = 'arraybuffer';
125
+
126
+ logger.debug('Making API call', { ...reqConfig, data: dataForDebug });
127
+
128
+ const response = await axios.request(reqConfig);
129
+
130
+ const parsedRes = await parseArrayBufferResponse(response, agent);
131
+
132
+ // log response headers
133
+ logger.debug('API call Response Headers', response.headers);
134
+ Response = parsedRes;
135
+
136
+ logger.debug('API call Response\n', Response);
137
+
138
+ Headers = Object.fromEntries(Object.entries(response.headers));
139
+ } catch (error) {
140
+ logger.debug(`Error making API call: ${error.message}`);
141
+ Headers = error?.response?.headers ? Object.fromEntries(Object.entries(error.response.headers)) : {};
142
+ Response = await parseArrayBufferResponse(error.response, agent);
143
+ _error = error.message;
144
+ }
145
+
146
+ return { Response, Headers, _error, _debug: logger.output };
147
+ } catch (error) {
148
+ return { _error: error.message, _debug: logger.output };
149
+ } finally {
150
+ if (publicUrls.length > 0) {
151
+ await destroyPublicUrls(publicUrls);
152
+ }
153
+ }
154
+ }
155
+ }
@@ -0,0 +1,130 @@
1
+ // accessTokenManager.ts
2
+ import { Agent } from '@sre/AgentManager/Agent.class';
3
+ import { ConnectorService } from '@sre/Core/ConnectorsService';
4
+ import { SystemEvents } from '@sre/Core/SystemEvents';
5
+ import { Logger } from '@sre/helpers/Log.helper';
6
+ import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
7
+ import axios from 'axios';
8
+
9
+ const console = Logger('AccessTokenManager');
10
+ let managedVault: any;
11
+
12
+ SystemEvents.on('SRE:Booted', () => {
13
+ managedVault = ConnectorService.getManagedVaultConnector();
14
+ });
15
+ class AccessTokenManager {
16
+ private clientId: string;
17
+ private clientSecret: string;
18
+ private primaryToken: string; // accessToken || token
19
+ private secondaryToken: string; // refreshToken || tokenSecret
20
+ private tokenUrl: string; // tokenURL to refresh accessToken
21
+ private expires_in: any;
22
+ private data: any; // value of key(keyId) in teamSettings that needs to be updated if required
23
+ private keyId: any; // key of object in teamSettings
24
+ private logger: any; // Use to log console in debugger
25
+ private agent: Agent;
26
+ constructor(
27
+ clientId: string,
28
+ clientSecret: string,
29
+ secondaryToken: string,
30
+ tokenUrl: string,
31
+ expires_in: any,
32
+ primaryToken: string,
33
+ data: any,
34
+ keyId: any,
35
+ logger: any,
36
+ agent: Agent,
37
+ ) {
38
+ this.clientId = clientId;
39
+ this.clientSecret = clientSecret;
40
+ this.primaryToken = primaryToken;
41
+ this.secondaryToken = secondaryToken;
42
+ this.tokenUrl = tokenUrl;
43
+ this.expires_in = expires_in;
44
+ this.data = data;
45
+ this.keyId = keyId;
46
+ this.logger = logger;
47
+ this.agent = agent;
48
+ }
49
+
50
+ async getAccessToken(): Promise<string> {
51
+ try {
52
+ const currentTime: any = new Date().getTime();
53
+
54
+ // If there's no secondaryToken (refresh token) and no expires_in,
55
+ // assume it's a long-lived token and return the primaryToken directly
56
+ if (!this.secondaryToken && !this.expires_in) {
57
+ console.log('Using long-lived access token');
58
+ this.logger.debug('Using long-lived access token. If authentication failes, please re-authenticate and try again');
59
+ return this.primaryToken;
60
+ }
61
+
62
+ // Regular token expiration check for tokens with expiration
63
+ // should be alway currentTime >= Number(this.expires_in)
64
+ if (!this.expires_in || currentTime >= Number(this.expires_in)) {
65
+ if (!this.secondaryToken) {
66
+ this.logger.debug('Refresh token is missing. Please re authenticate');
67
+ console.log('Refresh token is missing. Please re authenticate...');
68
+ // Redirect the user to the OAuth authorization URL or initiate the reauthentication flow
69
+ throw new Error('Reauthentication required');
70
+ }
71
+ this.logger.debug('Access token is expired or missing. Refreshing access token...');
72
+ console.log('Access token is expired or missing. Refreshing access token...');
73
+ return await this.refreshAccessToken();
74
+ } else {
75
+ console.log('Access token is still valid');
76
+ this.logger.debug('Access token is still valid.');
77
+ return this.primaryToken;
78
+ }
79
+ } catch (error) {
80
+ console.error('Error fetching access token:', error);
81
+ this.logger.debug('Error fetching access token');
82
+ throw error;
83
+ }
84
+ }
85
+
86
+ async refreshAccessToken(): Promise<string> {
87
+ try {
88
+ const response = await axios.post(
89
+ this.tokenUrl,
90
+ new URLSearchParams({
91
+ client_id: this.clientId,
92
+ client_secret: this.clientSecret,
93
+ refresh_token: this.secondaryToken,
94
+ grant_type: 'refresh_token',
95
+ }).toString(),
96
+ {
97
+ headers: {
98
+ 'Content-Type': 'application/x-www-form-urlencoded',
99
+ },
100
+ },
101
+ );
102
+
103
+ const newAccessToken: string = response?.data?.access_token;
104
+ console.log('Access token refreshed successfully.');
105
+ this.logger.debug('Access token refreshed successfully.');
106
+ const expiresInMilliseconds: number = response?.data?.expires_in ? response?.data?.expires_in * 1000 : response?.data?.expires_in;
107
+ const expirationTimestamp: number = expiresInMilliseconds ? new Date().getTime() + expiresInMilliseconds : expiresInMilliseconds;
108
+ this.data.primary = newAccessToken;
109
+ this.data.expires_in = expirationTimestamp ? expirationTimestamp?.toString() : expirationTimestamp;
110
+ //const oauthTeamSettings = new OauthTeamSettings();
111
+ //const save: any = await oauthTeamSettings.update({ keyId: this.keyId, data: this.data });
112
+
113
+ const save: any = await managedVault.user(AccessCandidate.agent(this.agent.id)).set(this.keyId, JSON.stringify(this.data));
114
+ if (save && save.status === 200) {
115
+ console.log('Access token value is updated successfully.');
116
+ this.logger.debug('Access token value is updated successfully.');
117
+ } else {
118
+ console.log('Warning: new access token value is not updated.');
119
+ this.logger.debug('Warning: new access token value is not updated.');
120
+ }
121
+ return newAccessToken;
122
+ } catch (error) {
123
+ console.error('Failed to refresh access token:', error);
124
+ this.logger.debug(`Failed to refresh access token: ${error}`);
125
+ throw new Error('Failed to refresh access token.');
126
+ }
127
+ }
128
+ }
129
+
130
+ export default AccessTokenManager;
@@ -0,0 +1,58 @@
1
+ import { Agent } from '@sre/AgentManager/Agent.class';
2
+ import { BinaryInput } from '@sre/helpers/BinaryInput.helper';
3
+ import { AccessCandidate } from '@sre/Security/AccessControl/AccessCandidate.class';
4
+ import { isBinaryData, isBinaryMimeType } from '@sre/utils/data.utils';
5
+ import { AxiosResponse } from 'axios';
6
+ import mimeTypeCategories from './mimeTypeCategories';
7
+
8
+ const contentHandlers = {
9
+ json: parseJson,
10
+ text: parseText,
11
+ binary: parseBinary,
12
+ };
13
+
14
+ function parseJson(data) {
15
+ return JSON.parse(Buffer.from(data).toString('utf8') || '{}');
16
+ }
17
+
18
+ function parseText(data) {
19
+ return Buffer.from(data).toString('utf8');
20
+ }
21
+
22
+ async function parseBinary(data, contentType, agentId) {
23
+ const binaryInput = BinaryInput.from(data, null, contentType);
24
+ const smythFile = await binaryInput.getJsonData(AccessCandidate.agent(agentId));
25
+
26
+ return smythFile;
27
+ }
28
+
29
+ export async function parseArrayBufferResponse(response: AxiosResponse, agent: Agent): Promise<any> {
30
+ if (!response?.data) {
31
+ return null;
32
+ }
33
+ const data = response.data;
34
+ const contentType = response.headers['content-type'];
35
+ const cleanContentType = contentType?.split(';')[0];
36
+
37
+ // Try to find an exact match first,
38
+ let handlerType = Object.keys(mimeTypeCategories).find((type) => mimeTypeCategories[type].includes(cleanContentType));
39
+
40
+ // If no exact match, try to find a match for the first part of the handlerTypes, some handlers are generic like text/ in that case we check if the handler is a substring of the contentType
41
+ if (!handlerType) {
42
+ handlerType = Object.keys(mimeTypeCategories).find((type) => mimeTypeCategories[type].some((prefix) => cleanContentType?.startsWith(prefix)));
43
+ }
44
+
45
+ const handler = contentHandlers[handlerType];
46
+
47
+ if (handler) {
48
+ return handler(data, contentType, agent.id);
49
+ }
50
+
51
+ // Fallback: if no content type matches then check if the data is binary
52
+ // If so then parse it as binary, otherwise parse it as text
53
+ if (isBinaryMimeType(contentType) || isBinaryData(data)) {
54
+ return parseBinary(data, contentType, agent.id);
55
+ } else {
56
+ return parseText(data);
57
+ }
58
+ }