@smythos/sre 1.6.8 → 1.6.10
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.
- package/CHANGELOG +111 -111
- package/LICENSE +18 -18
- package/README.md +135 -135
- package/dist/bundle-analysis-lazy.html +4949 -0
- package/dist/bundle-analysis.html +4949 -0
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/types/Components/Triggers/Gmail.trigger.d.ts +58 -0
- package/dist/types/Components/Triggers/GmailTrigger.class.d.ts +44 -0
- package/dist/types/Components/Triggers/Trigger.class.d.ts +21 -0
- package/dist/types/Components/Triggers/WhatsApp.trigger.d.ts +22 -0
- package/dist/types/helpers/AIPerformanceAnalyzer.helper.d.ts +45 -0
- package/dist/types/helpers/AIPerformanceCollector.helper.d.ts +111 -0
- package/dist/types/subsystems/IO/Storage.service/connectors/AzureBlobStorage.class.d.ts +211 -0
- package/dist/types/subsystems/IO/VectorDB.service/connectors/WeaviateVectorDB.class.d.ts +187 -0
- package/dist/types/subsystems/PerformanceManager/Performance.service/PerformanceConnector.d.ts +102 -0
- package/dist/types/subsystems/PerformanceManager/Performance.service/connectors/LocalPerformanceConnector.class.d.ts +100 -0
- package/dist/types/subsystems/PerformanceManager/Performance.service/index.d.ts +22 -0
- package/dist/types/subsystems/Security/Credentials/Credentials.class.d.ts +2 -0
- package/dist/types/subsystems/Security/Credentials/ManagedOAuth2Credentials.class.d.ts +18 -0
- package/dist/types/subsystems/Security/Credentials/OAuth2Credentials.class.d.ts +14 -0
- package/dist/types/types/Performance.types.d.ts +468 -0
- package/dist/types/utils/package-manager.utils.d.ts +26 -0
- package/package.json +1 -1
- package/src/Components/APICall/APICall.class.ts +161 -161
- package/src/Components/APICall/AccessTokenManager.ts +166 -166
- package/src/Components/APICall/ArrayBufferResponse.helper.ts +58 -58
- package/src/Components/APICall/OAuth.helper.ts +447 -447
- package/src/Components/APICall/mimeTypeCategories.ts +46 -46
- package/src/Components/APICall/parseData.ts +167 -167
- package/src/Components/APICall/parseHeaders.ts +41 -41
- package/src/Components/APICall/parseProxy.ts +68 -68
- package/src/Components/APICall/parseUrl.ts +91 -91
- package/src/Components/APIEndpoint.class.ts +234 -234
- package/src/Components/APIOutput.class.ts +58 -58
- package/src/Components/AgentPlugin.class.ts +102 -102
- package/src/Components/Async.class.ts +155 -155
- package/src/Components/Await.class.ts +90 -90
- package/src/Components/Classifier.class.ts +158 -158
- package/src/Components/Component.class.ts +147 -147
- package/src/Components/ComponentHost.class.ts +38 -38
- package/src/Components/DataSourceCleaner.class.ts +92 -92
- package/src/Components/DataSourceIndexer.class.ts +181 -181
- package/src/Components/DataSourceLookup.class.ts +161 -161
- package/src/Components/ECMASandbox.class.ts +72 -72
- package/src/Components/FEncDec.class.ts +29 -29
- package/src/Components/FHash.class.ts +33 -33
- package/src/Components/FSign.class.ts +80 -80
- package/src/Components/FSleep.class.ts +25 -25
- package/src/Components/FTimestamp.class.ts +66 -66
- package/src/Components/FileStore.class.ts +78 -78
- package/src/Components/ForEach.class.ts +97 -97
- package/src/Components/GPTPlugin.class.ts +70 -70
- package/src/Components/GenAILLM.class.ts +586 -586
- package/src/Components/HuggingFace.class.ts +313 -313
- package/src/Components/Image/imageSettings.config.ts +70 -70
- package/src/Components/ImageGenerator.class.ts +483 -483
- package/src/Components/JSONFilter.class.ts +54 -54
- package/src/Components/LLMAssistant.class.ts +213 -213
- package/src/Components/LogicAND.class.ts +28 -28
- package/src/Components/LogicAtLeast.class.ts +85 -85
- package/src/Components/LogicAtMost.class.ts +86 -86
- package/src/Components/LogicOR.class.ts +29 -29
- package/src/Components/LogicXOR.class.ts +34 -34
- package/src/Components/MCPClient.class.ts +137 -137
- package/src/Components/MemoryDeleteKeyVal.class.ts +70 -70
- package/src/Components/MemoryReadKeyVal.class.ts +67 -67
- package/src/Components/MemoryWriteKeyVal.class.ts +62 -62
- package/src/Components/MemoryWriteObject.class.ts +97 -97
- package/src/Components/MultimodalLLM.class.ts +128 -128
- package/src/Components/OpenAPI.class.ts +72 -72
- package/src/Components/PromptGenerator.class.ts +122 -122
- package/src/Components/ScrapflyWebScrape.class.ts +183 -183
- package/src/Components/ServerlessCode.class.ts +123 -123
- package/src/Components/TavilyWebSearch.class.ts +103 -103
- package/src/Components/VisionLLM.class.ts +104 -104
- package/src/Components/ZapierAction.class.ts +127 -127
- package/src/Components/index.ts +97 -97
- package/src/Core/AgentProcess.helper.ts +240 -240
- package/src/Core/Connector.class.ts +123 -123
- package/src/Core/ConnectorsService.ts +197 -197
- package/src/Core/DummyConnector.ts +49 -49
- package/src/Core/HookService.ts +105 -105
- package/src/Core/SmythRuntime.class.ts +241 -241
- package/src/Core/SystemEvents.ts +16 -16
- package/src/Core/boot.ts +56 -56
- package/src/config.ts +15 -15
- package/src/constants.ts +126 -126
- package/src/data/hugging-face.params.json +579 -579
- package/src/helpers/AWSLambdaCode.helper.ts +624 -624
- package/src/helpers/BinaryInput.helper.ts +331 -331
- package/src/helpers/Conversation.helper.ts +1157 -1157
- package/src/helpers/ECMASandbox.helper.ts +64 -64
- package/src/helpers/JsonContent.helper.ts +97 -97
- package/src/helpers/LocalCache.helper.ts +97 -97
- package/src/helpers/Log.helper.ts +274 -274
- package/src/helpers/OpenApiParser.helper.ts +150 -150
- package/src/helpers/S3Cache.helper.ts +147 -147
- package/src/helpers/SmythURI.helper.ts +5 -5
- package/src/helpers/Sysconfig.helper.ts +95 -95
- package/src/helpers/TemplateString.helper.ts +243 -243
- package/src/helpers/TypeChecker.helper.ts +329 -329
- package/src/index.ts +3 -3
- package/src/index.ts.bak +3 -3
- package/src/subsystems/AgentManager/Agent.class.ts +1114 -1114
- package/src/subsystems/AgentManager/Agent.helper.ts +3 -3
- package/src/subsystems/AgentManager/AgentData.service/AgentDataConnector.ts +230 -230
- package/src/subsystems/AgentManager/AgentData.service/connectors/CLIAgentDataConnector.class.ts +66 -66
- package/src/subsystems/AgentManager/AgentData.service/connectors/LocalAgentDataConnector.class.ts +145 -145
- package/src/subsystems/AgentManager/AgentData.service/connectors/NullAgentData.class.ts +39 -39
- package/src/subsystems/AgentManager/AgentData.service/index.ts +18 -18
- package/src/subsystems/AgentManager/AgentLogger.class.ts +301 -301
- package/src/subsystems/AgentManager/AgentRequest.class.ts +51 -51
- package/src/subsystems/AgentManager/AgentRuntime.class.ts +557 -557
- package/src/subsystems/AgentManager/AgentSSE.class.ts +101 -101
- package/src/subsystems/AgentManager/AgentSettings.class.ts +52 -52
- package/src/subsystems/AgentManager/Component.service/ComponentConnector.ts +32 -32
- package/src/subsystems/AgentManager/Component.service/connectors/LocalComponentConnector.class.ts +60 -60
- package/src/subsystems/AgentManager/Component.service/index.ts +11 -11
- package/src/subsystems/AgentManager/EmbodimentSettings.class.ts +47 -47
- package/src/subsystems/AgentManager/ForkedAgent.class.ts +154 -154
- package/src/subsystems/AgentManager/OSResourceMonitor.ts +77 -77
- package/src/subsystems/ComputeManager/Code.service/CodeConnector.ts +98 -98
- package/src/subsystems/ComputeManager/Code.service/connectors/AWSLambdaCode.class.ts +171 -171
- package/src/subsystems/ComputeManager/Code.service/connectors/ECMASandbox.class.ts +131 -131
- package/src/subsystems/ComputeManager/Code.service/index.ts +13 -13
- package/src/subsystems/IO/CLI.service/CLIConnector.ts +47 -47
- package/src/subsystems/IO/CLI.service/index.ts +9 -9
- package/src/subsystems/IO/Log.service/LogConnector.ts +32 -32
- package/src/subsystems/IO/Log.service/connectors/ConsoleLog.class.ts +28 -28
- package/src/subsystems/IO/Log.service/index.ts +13 -13
- package/src/subsystems/IO/NKV.service/NKVConnector.ts +43 -43
- package/src/subsystems/IO/NKV.service/connectors/NKVLocalStorage.class.ts +234 -234
- package/src/subsystems/IO/NKV.service/connectors/NKVRAM.class.ts +204 -204
- package/src/subsystems/IO/NKV.service/connectors/NKVRedis.class.ts +182 -182
- package/src/subsystems/IO/NKV.service/index.ts +14 -14
- package/src/subsystems/IO/Router.service/RouterConnector.ts +21 -21
- package/src/subsystems/IO/Router.service/connectors/ExpressRouter.class.ts +48 -48
- package/src/subsystems/IO/Router.service/connectors/NullRouter.class.ts +40 -40
- package/src/subsystems/IO/Router.service/index.ts +11 -11
- package/src/subsystems/IO/Storage.service/SmythFS.class.ts +488 -488
- package/src/subsystems/IO/Storage.service/StorageConnector.ts +66 -66
- package/src/subsystems/IO/Storage.service/connectors/LocalStorage.class.ts +327 -327
- package/src/subsystems/IO/Storage.service/connectors/S3Storage.class.ts +482 -482
- package/src/subsystems/IO/Storage.service/index.ts +13 -13
- package/src/subsystems/IO/VectorDB.service/VectorDBConnector.ts +108 -108
- package/src/subsystems/IO/VectorDB.service/connectors/MilvusVectorDB.class.ts +465 -465
- package/src/subsystems/IO/VectorDB.service/connectors/PineconeVectorDB.class.ts +387 -387
- package/src/subsystems/IO/VectorDB.service/connectors/RAMVecrtorDB.class.ts +408 -408
- package/src/subsystems/IO/VectorDB.service/embed/BaseEmbedding.ts +107 -107
- package/src/subsystems/IO/VectorDB.service/embed/GoogleEmbedding.ts +118 -118
- package/src/subsystems/IO/VectorDB.service/embed/OpenAIEmbedding.ts +109 -109
- package/src/subsystems/IO/VectorDB.service/embed/index.ts +26 -26
- package/src/subsystems/IO/VectorDB.service/index.ts +14 -14
- package/src/subsystems/LLMManager/LLM.helper.ts +251 -251
- package/src/subsystems/LLMManager/LLM.inference.ts +345 -345
- package/src/subsystems/LLMManager/LLM.service/LLMConnector.ts +492 -492
- package/src/subsystems/LLMManager/LLM.service/LLMCredentials.helper.ts +171 -171
- package/src/subsystems/LLMManager/LLM.service/connectors/Anthropic.class.ts +666 -666
- package/src/subsystems/LLMManager/LLM.service/connectors/Bedrock.class.ts +407 -407
- package/src/subsystems/LLMManager/LLM.service/connectors/Echo.class.ts +92 -92
- package/src/subsystems/LLMManager/LLM.service/connectors/GoogleAI.class.ts +983 -983
- package/src/subsystems/LLMManager/LLM.service/connectors/Groq.class.ts +319 -319
- package/src/subsystems/LLMManager/LLM.service/connectors/Ollama.class.ts +361 -361
- package/src/subsystems/LLMManager/LLM.service/connectors/Perplexity.class.ts +257 -257
- package/src/subsystems/LLMManager/LLM.service/connectors/VertexAI.class.ts +430 -430
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/OpenAIConnector.class.ts +503 -503
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +524 -524
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterface.ts +100 -100
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/OpenAIApiInterfaceFactory.ts +81 -81
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +1145 -1145
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.ts +13 -13
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/index.ts +4 -4
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/utils.ts +11 -11
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/types.ts +32 -32
- package/src/subsystems/LLMManager/LLM.service/connectors/xAI.class.ts +478 -478
- package/src/subsystems/LLMManager/LLM.service/index.ts +47 -47
- package/src/subsystems/LLMManager/ModelsProvider.service/ModelsProviderConnector.ts +303 -303
- package/src/subsystems/LLMManager/ModelsProvider.service/connectors/JSONModelsProvider.class.ts +280 -271
- package/src/subsystems/LLMManager/ModelsProvider.service/index.ts +11 -11
- package/src/subsystems/LLMManager/custom-models.ts +854 -854
- package/src/subsystems/LLMManager/models.ts +2540 -2540
- package/src/subsystems/LLMManager/paramMappings.ts +69 -69
- package/src/subsystems/MemoryManager/Cache.service/CacheConnector.ts +86 -86
- package/src/subsystems/MemoryManager/Cache.service/connectors/LocalStorageCache.class.ts +297 -297
- package/src/subsystems/MemoryManager/Cache.service/connectors/RAMCache.class.ts +214 -214
- package/src/subsystems/MemoryManager/Cache.service/connectors/RedisCache.class.ts +252 -252
- package/src/subsystems/MemoryManager/Cache.service/connectors/S3Cache.class.ts +373 -373
- package/src/subsystems/MemoryManager/Cache.service/index.ts +15 -15
- package/src/subsystems/MemoryManager/LLMCache.ts +72 -72
- package/src/subsystems/MemoryManager/LLMContext.ts +124 -124
- package/src/subsystems/MemoryManager/LLMMemory.service/LLMMemoryConnector.ts +26 -26
- package/src/subsystems/MemoryManager/RuntimeContext.ts +277 -277
- package/src/subsystems/Security/AccessControl/ACL.class.ts +208 -208
- package/src/subsystems/Security/AccessControl/AccessCandidate.class.ts +82 -82
- package/src/subsystems/Security/AccessControl/AccessRequest.class.ts +52 -52
- package/src/subsystems/Security/Account.service/AccountConnector.ts +44 -44
- package/src/subsystems/Security/Account.service/connectors/DummyAccount.class.ts +130 -130
- package/src/subsystems/Security/Account.service/connectors/JSONFileAccount.class.ts +170 -170
- package/src/subsystems/Security/Account.service/connectors/MySQLAccount.class.ts +76 -76
- package/src/subsystems/Security/Account.service/index.ts +14 -14
- package/src/subsystems/Security/Credentials.helper.ts +62 -62
- package/src/subsystems/Security/ManagedVault.service/ManagedVaultConnector.ts +38 -38
- package/src/subsystems/Security/ManagedVault.service/connectors/NullManagedVault.class.ts +53 -53
- package/src/subsystems/Security/ManagedVault.service/connectors/SecretManagerManagedVault.ts +154 -154
- package/src/subsystems/Security/ManagedVault.service/index.ts +12 -12
- package/src/subsystems/Security/SecureConnector.class.ts +110 -110
- package/src/subsystems/Security/Vault.service/Vault.helper.ts +30 -30
- package/src/subsystems/Security/Vault.service/VaultConnector.ts +29 -29
- package/src/subsystems/Security/Vault.service/connectors/HashicorpVault.class.ts +46 -46
- package/src/subsystems/Security/Vault.service/connectors/JSONFileVault.class.ts +221 -221
- package/src/subsystems/Security/Vault.service/connectors/NullVault.class.ts +54 -54
- package/src/subsystems/Security/Vault.service/connectors/SecretsManager.class.ts +140 -140
- package/src/subsystems/Security/Vault.service/index.ts +12 -12
- package/src/types/ACL.types.ts +104 -104
- package/src/types/AWS.types.ts +10 -10
- package/src/types/Agent.types.ts +61 -61
- package/src/types/AgentLogger.types.ts +17 -17
- package/src/types/Cache.types.ts +1 -1
- package/src/types/Common.types.ts +2 -2
- package/src/types/LLM.types.ts +520 -520
- package/src/types/Redis.types.ts +8 -8
- package/src/types/SRE.types.ts +64 -64
- package/src/types/Security.types.ts +14 -14
- package/src/types/Storage.types.ts +5 -5
- package/src/types/VectorDB.types.ts +86 -86
- package/src/utils/base64.utils.ts +275 -275
- package/src/utils/cli.utils.ts +68 -68
- package/src/utils/data.utils.ts +322 -322
- package/src/utils/date-time.utils.ts +22 -22
- package/src/utils/general.utils.ts +238 -238
- package/src/utils/index.ts +12 -12
- package/src/utils/lazy-client.ts +261 -261
- package/src/utils/numbers.utils.ts +13 -13
- package/src/utils/oauth.utils.ts +35 -35
- package/src/utils/string.utils.ts +414 -414
- package/src/utils/url.utils.ts +19 -19
- package/src/utils/validation.utils.ts +74 -74
- package/dist/types/subsystems/LLMManager/ModelsProvider.service/connectors/SmythModelsProvider.class.d.ts +0 -39
|
@@ -1,243 +1,243 @@
|
|
|
1
|
-
import { VaultHelper } from '@sre/Security/Vault.service/Vault.helper';
|
|
2
|
-
|
|
3
|
-
export type TemplateStringMatch = RegExp;
|
|
4
|
-
|
|
5
|
-
export const Match = {
|
|
6
|
-
default: /{{(.*?)}}/g,
|
|
7
|
-
//matches all placeholders
|
|
8
|
-
doubleCurly: /{{(.*?)}}/g,
|
|
9
|
-
singleCurly: /{(.*?)}/g,
|
|
10
|
-
doubleCurlyForSingleMatch: /{{(.*?)}}/,
|
|
11
|
-
|
|
12
|
-
//matches component template variables
|
|
13
|
-
//example of matching strings
|
|
14
|
-
// {{VAULTINPUT:Input label:[APIKEY]}}
|
|
15
|
-
// {{VARINPUT:Variable label:{ "key":"value" }}}
|
|
16
|
-
templateVariables: /{{([A-Z]+):([\w\s]+):[\[{](.*?)[\]}]}}/gm,
|
|
17
|
-
|
|
18
|
-
//matches only the placeholders that have a specific prefix
|
|
19
|
-
prefix(prefix: string) {
|
|
20
|
-
return new RegExp(`{{${prefix}(.*?)}}`, 'g');
|
|
21
|
-
},
|
|
22
|
-
|
|
23
|
-
//matches only the placeholders that have a specific suffix
|
|
24
|
-
suffix(suffix: string) {
|
|
25
|
-
return new RegExp(`{{(.*?)${suffix}}}`, 'g');
|
|
26
|
-
},
|
|
27
|
-
//matches only the placeholders that have a specific prefix and suffix
|
|
28
|
-
prefSuf(prefix: string, suffix: string) {
|
|
29
|
-
return new RegExp(`{{${prefix}(.*?)${suffix}}}`, 'g');
|
|
30
|
-
},
|
|
31
|
-
|
|
32
|
-
//matches a function annotation with a given name, just like prefix but with wrapping parenthesis
|
|
33
|
-
fn(name: string) {
|
|
34
|
-
return new RegExp(`{{${name}\\((.*?)\\)}}`, 'g');
|
|
35
|
-
},
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export const TPLProcessor = {
|
|
39
|
-
vaultTeam(teamId: string): (token) => Promise<string> {
|
|
40
|
-
//the token here represents the vault key name
|
|
41
|
-
return async (token) => {
|
|
42
|
-
try {
|
|
43
|
-
return await VaultHelper.getTeamKey(token, teamId);
|
|
44
|
-
} catch (error) {
|
|
45
|
-
return token;
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
},
|
|
49
|
-
componentTemplateVar(templateSettings: Record<string, any>): (token, matches) => Promise<string> {
|
|
50
|
-
return async (token, matches) => {
|
|
51
|
-
try {
|
|
52
|
-
const label = matches[2]; //template variables are identified by their label inside the component config
|
|
53
|
-
if (!label) return token;
|
|
54
|
-
|
|
55
|
-
const entry: any = Object.values(templateSettings).find((o: any) => o.label == label);
|
|
56
|
-
if (!entry) return token;
|
|
57
|
-
return `{{${entry.id}}}`;
|
|
58
|
-
} catch (error) {
|
|
59
|
-
return token;
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
},
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
/**
|
|
66
|
-
* Provides a chainable to manipulate template strings
|
|
67
|
-
*
|
|
68
|
-
* Template strings are strings that can contain placeholders, which are expressions that get evaluated to produce a resulting string.
|
|
69
|
-
* The placeholders are defined by double curly braces `{{` and `}}`.
|
|
70
|
-
*/
|
|
71
|
-
|
|
72
|
-
//FIXME: async parsing breaks the chainability of the TemplateStringHelper
|
|
73
|
-
export class TemplateStringHelper {
|
|
74
|
-
private _current: string;
|
|
75
|
-
|
|
76
|
-
//this queue is used to wait for asyncronous results when async processors are used
|
|
77
|
-
//if all processors are synchronous, this queue will be empty and .result getter can be used
|
|
78
|
-
//if any processor is async, the .result getter will throw an error and you should use .asyncResult instead
|
|
79
|
-
private _promiseQueue: Promise<any>[] = [];
|
|
80
|
-
|
|
81
|
-
public get result(): string {
|
|
82
|
-
if (this._promiseQueue.length <= 0) return this._current;
|
|
83
|
-
throw new Error('This template object has async results, you should use .asyncResult with await instead of .result');
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
public get asyncResult(): Promise<string> {
|
|
87
|
-
return new Promise(async (resolve, reject) => {
|
|
88
|
-
await Promise.all(this._promiseQueue);
|
|
89
|
-
resolve(this._current);
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
private constructor(private templateString: string) {
|
|
94
|
-
this._current = templateString;
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
public static create(templateString: string) {
|
|
98
|
-
return new TemplateStringHelper(templateString);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* Parses a template string by replacing the placeholders with the values from the provided data object
|
|
103
|
-
* unmatched placeholders will be left as is
|
|
104
|
-
*/
|
|
105
|
-
public parse(data: Record<string, string>, regex: TemplateStringMatch = Match.default) {
|
|
106
|
-
if (typeof this._current !== 'string' || typeof data !== 'object') return this;
|
|
107
|
-
this._current = this._current.replace(regex, (match, token) => {
|
|
108
|
-
const val = data?.[token] ?? match; // Use nullish coalescing to preserve falsy values (0, '', false)
|
|
109
|
-
|
|
110
|
-
return typeof val === 'object' ? JSON.stringify(val) : escapeJsonField(val);
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
return this;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
/**
|
|
117
|
-
* Parses a template string by replacing placeholders with values from the provided data object, keeping the original raw values intact. This is particularly important for BinaryInput instances, as they include buffer data.
|
|
118
|
-
* unmatched placeholders will be left as is
|
|
119
|
-
*/
|
|
120
|
-
// Note: right now this method only match the first occurrence of the regex
|
|
121
|
-
public parseRaw(data: Record<string, string>, regex: TemplateStringMatch = Match.doubleCurlyForSingleMatch) {
|
|
122
|
-
if (typeof this._current !== 'string' || typeof data !== 'object') return this;
|
|
123
|
-
|
|
124
|
-
const match = this._current.match(regex);
|
|
125
|
-
const key = match ? match[1] : '';
|
|
126
|
-
|
|
127
|
-
if (key) {
|
|
128
|
-
const value = data?.[key];
|
|
129
|
-
this._current = value;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
return this;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* This is a shortcut function that parses vault key values and replace them with corresponding values from team vault
|
|
137
|
-
* @param teamId
|
|
138
|
-
* @returns
|
|
139
|
-
*/
|
|
140
|
-
public parseTeamKeysAsync(teamId: string) {
|
|
141
|
-
return this.process(TPLProcessor.vaultTeam(teamId), Match.fn('KEY'));
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
/**
|
|
145
|
-
* This is a shortcut function that parses component template variables and replace them with their corresponding values
|
|
146
|
-
* @param templateSettings the component template settings to be used for parsing
|
|
147
|
-
* @returns
|
|
148
|
-
*/
|
|
149
|
-
public parseComponentTemplateVarsAsync(templateSettings: Record<string, any>) {
|
|
150
|
-
return this.process(TPLProcessor.componentTemplateVar(templateSettings), Match.templateVariables);
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* Processes a template string by replacing the placeholders with the result of the provided processor function
|
|
155
|
-
* The processor function receives the token as an argument and should return the value to replace the token with
|
|
156
|
-
* If the processor function returns undefined, the token will be left as is
|
|
157
|
-
*/
|
|
158
|
-
public process(processor: (token, matches?) => Promise<string> | string, regex: TemplateStringMatch = Match.default) {
|
|
159
|
-
if (typeof this._current !== 'string') return this;
|
|
160
|
-
//first build a json object with all matching tokens
|
|
161
|
-
let tokens = {};
|
|
162
|
-
let match;
|
|
163
|
-
|
|
164
|
-
const prosessorPromises = [];
|
|
165
|
-
while ((match = regex.exec(this._current)) !== null) {
|
|
166
|
-
const token = match[1];
|
|
167
|
-
tokens[token] = match[0];
|
|
168
|
-
|
|
169
|
-
const _processor = processor(token, match);
|
|
170
|
-
|
|
171
|
-
//if an async processor is used, the TemplateStringHelper switches to async mode
|
|
172
|
-
if (_processor instanceof Promise) {
|
|
173
|
-
_processor.then((result) => {
|
|
174
|
-
if (result === undefined) {
|
|
175
|
-
return match?.[0];
|
|
176
|
-
}
|
|
177
|
-
tokens[token] = result;
|
|
178
|
-
});
|
|
179
|
-
prosessorPromises.push(_processor);
|
|
180
|
-
} else {
|
|
181
|
-
tokens[token] = _processor;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
if (prosessorPromises.length > 0) {
|
|
186
|
-
const promise = new Promise(async (resolve, reject) => {
|
|
187
|
-
await Promise.all(prosessorPromises);
|
|
188
|
-
this.parse(tokens, regex);
|
|
189
|
-
resolve(true);
|
|
190
|
-
});
|
|
191
|
-
this._promiseQueue.push(Promise.all(prosessorPromises));
|
|
192
|
-
} else {
|
|
193
|
-
this.parse(tokens, regex);
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
// this._current = await asyncReplace(this._current, regex, async (match, token) => {
|
|
197
|
-
// let result = await processor(token);
|
|
198
|
-
// if (result === undefined) {
|
|
199
|
-
// return match;
|
|
200
|
-
// }
|
|
201
|
-
// return result;
|
|
202
|
-
// });
|
|
203
|
-
|
|
204
|
-
return this;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Removes all placeholders from the template string, leaving only the plain text
|
|
209
|
-
* This is useful when you want to clean up a template string that has placeholders that were not parsed
|
|
210
|
-
*/
|
|
211
|
-
public clean(regex: TemplateStringMatch = Match.default, replaceWith: string = '') {
|
|
212
|
-
if (typeof this._current !== 'string') return this;
|
|
213
|
-
this._current = this._current.replace(regex, replaceWith);
|
|
214
|
-
return this;
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
// public toString() {
|
|
218
|
-
// if (this._promiseQueue.length <= 0) return this._current;
|
|
219
|
-
// return new Promise(async (resolve, reject) => {
|
|
220
|
-
// await Promise.all(this._promiseQueue);
|
|
221
|
-
// resolve(this._current);
|
|
222
|
-
// });
|
|
223
|
-
// }
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/**
|
|
227
|
-
* a helper function that takes a string and escape it
|
|
228
|
-
* This is useful when you have a stringified json and want to replace one of its values while making sure it won't break the json structure (e.g new lines, double quotes ...etc)
|
|
229
|
-
*/
|
|
230
|
-
export function escapeString(str?: string) {
|
|
231
|
-
if (!str) return str;
|
|
232
|
-
return str.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t');
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
// This is used escape JSON values characters like double quotes '"' to parse it properly
|
|
236
|
-
export function escapeJsonField(str?: string) {
|
|
237
|
-
if (typeof str !== 'string') return str;
|
|
238
|
-
return str.replace(/\\"/g, '"').replace(/"/g, '\\"');
|
|
239
|
-
}
|
|
240
|
-
|
|
241
|
-
export function TemplateString(templateString: string) {
|
|
242
|
-
return TemplateStringHelper.create(templateString);
|
|
243
|
-
}
|
|
1
|
+
import { VaultHelper } from '@sre/Security/Vault.service/Vault.helper';
|
|
2
|
+
|
|
3
|
+
export type TemplateStringMatch = RegExp;
|
|
4
|
+
|
|
5
|
+
export const Match = {
|
|
6
|
+
default: /{{(.*?)}}/g,
|
|
7
|
+
//matches all placeholders
|
|
8
|
+
doubleCurly: /{{(.*?)}}/g,
|
|
9
|
+
singleCurly: /{(.*?)}/g,
|
|
10
|
+
doubleCurlyForSingleMatch: /{{(.*?)}}/,
|
|
11
|
+
|
|
12
|
+
//matches component template variables
|
|
13
|
+
//example of matching strings
|
|
14
|
+
// {{VAULTINPUT:Input label:[APIKEY]}}
|
|
15
|
+
// {{VARINPUT:Variable label:{ "key":"value" }}}
|
|
16
|
+
templateVariables: /{{([A-Z]+):([\w\s]+):[\[{](.*?)[\]}]}}/gm,
|
|
17
|
+
|
|
18
|
+
//matches only the placeholders that have a specific prefix
|
|
19
|
+
prefix(prefix: string) {
|
|
20
|
+
return new RegExp(`{{${prefix}(.*?)}}`, 'g');
|
|
21
|
+
},
|
|
22
|
+
|
|
23
|
+
//matches only the placeholders that have a specific suffix
|
|
24
|
+
suffix(suffix: string) {
|
|
25
|
+
return new RegExp(`{{(.*?)${suffix}}}`, 'g');
|
|
26
|
+
},
|
|
27
|
+
//matches only the placeholders that have a specific prefix and suffix
|
|
28
|
+
prefSuf(prefix: string, suffix: string) {
|
|
29
|
+
return new RegExp(`{{${prefix}(.*?)${suffix}}}`, 'g');
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
//matches a function annotation with a given name, just like prefix but with wrapping parenthesis
|
|
33
|
+
fn(name: string) {
|
|
34
|
+
return new RegExp(`{{${name}\\((.*?)\\)}}`, 'g');
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
export const TPLProcessor = {
|
|
39
|
+
vaultTeam(teamId: string): (token) => Promise<string> {
|
|
40
|
+
//the token here represents the vault key name
|
|
41
|
+
return async (token) => {
|
|
42
|
+
try {
|
|
43
|
+
return await VaultHelper.getTeamKey(token, teamId);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
return token;
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
},
|
|
49
|
+
componentTemplateVar(templateSettings: Record<string, any>): (token, matches) => Promise<string> {
|
|
50
|
+
return async (token, matches) => {
|
|
51
|
+
try {
|
|
52
|
+
const label = matches[2]; //template variables are identified by their label inside the component config
|
|
53
|
+
if (!label) return token;
|
|
54
|
+
|
|
55
|
+
const entry: any = Object.values(templateSettings).find((o: any) => o.label == label);
|
|
56
|
+
if (!entry) return token;
|
|
57
|
+
return `{{${entry.id}}}`;
|
|
58
|
+
} catch (error) {
|
|
59
|
+
return token;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/**
|
|
66
|
+
* Provides a chainable to manipulate template strings
|
|
67
|
+
*
|
|
68
|
+
* Template strings are strings that can contain placeholders, which are expressions that get evaluated to produce a resulting string.
|
|
69
|
+
* The placeholders are defined by double curly braces `{{` and `}}`.
|
|
70
|
+
*/
|
|
71
|
+
|
|
72
|
+
//FIXME: async parsing breaks the chainability of the TemplateStringHelper
|
|
73
|
+
export class TemplateStringHelper {
|
|
74
|
+
private _current: string;
|
|
75
|
+
|
|
76
|
+
//this queue is used to wait for asyncronous results when async processors are used
|
|
77
|
+
//if all processors are synchronous, this queue will be empty and .result getter can be used
|
|
78
|
+
//if any processor is async, the .result getter will throw an error and you should use .asyncResult instead
|
|
79
|
+
private _promiseQueue: Promise<any>[] = [];
|
|
80
|
+
|
|
81
|
+
public get result(): string {
|
|
82
|
+
if (this._promiseQueue.length <= 0) return this._current;
|
|
83
|
+
throw new Error('This template object has async results, you should use .asyncResult with await instead of .result');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
public get asyncResult(): Promise<string> {
|
|
87
|
+
return new Promise(async (resolve, reject) => {
|
|
88
|
+
await Promise.all(this._promiseQueue);
|
|
89
|
+
resolve(this._current);
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private constructor(private templateString: string) {
|
|
94
|
+
this._current = templateString;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
public static create(templateString: string) {
|
|
98
|
+
return new TemplateStringHelper(templateString);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Parses a template string by replacing the placeholders with the values from the provided data object
|
|
103
|
+
* unmatched placeholders will be left as is
|
|
104
|
+
*/
|
|
105
|
+
public parse(data: Record<string, string>, regex: TemplateStringMatch = Match.default) {
|
|
106
|
+
if (typeof this._current !== 'string' || typeof data !== 'object') return this;
|
|
107
|
+
this._current = this._current.replace(regex, (match, token) => {
|
|
108
|
+
const val = data?.[token] ?? match; // Use nullish coalescing to preserve falsy values (0, '', false)
|
|
109
|
+
|
|
110
|
+
return typeof val === 'object' ? JSON.stringify(val) : escapeJsonField(val);
|
|
111
|
+
});
|
|
112
|
+
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Parses a template string by replacing placeholders with values from the provided data object, keeping the original raw values intact. This is particularly important for BinaryInput instances, as they include buffer data.
|
|
118
|
+
* unmatched placeholders will be left as is
|
|
119
|
+
*/
|
|
120
|
+
// Note: right now this method only match the first occurrence of the regex
|
|
121
|
+
public parseRaw(data: Record<string, string>, regex: TemplateStringMatch = Match.doubleCurlyForSingleMatch) {
|
|
122
|
+
if (typeof this._current !== 'string' || typeof data !== 'object') return this;
|
|
123
|
+
|
|
124
|
+
const match = this._current.match(regex);
|
|
125
|
+
const key = match ? match[1] : '';
|
|
126
|
+
|
|
127
|
+
if (key) {
|
|
128
|
+
const value = data?.[key];
|
|
129
|
+
this._current = value;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return this;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* This is a shortcut function that parses vault key values and replace them with corresponding values from team vault
|
|
137
|
+
* @param teamId
|
|
138
|
+
* @returns
|
|
139
|
+
*/
|
|
140
|
+
public parseTeamKeysAsync(teamId: string) {
|
|
141
|
+
return this.process(TPLProcessor.vaultTeam(teamId), Match.fn('KEY'));
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* This is a shortcut function that parses component template variables and replace them with their corresponding values
|
|
146
|
+
* @param templateSettings the component template settings to be used for parsing
|
|
147
|
+
* @returns
|
|
148
|
+
*/
|
|
149
|
+
public parseComponentTemplateVarsAsync(templateSettings: Record<string, any>) {
|
|
150
|
+
return this.process(TPLProcessor.componentTemplateVar(templateSettings), Match.templateVariables);
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* Processes a template string by replacing the placeholders with the result of the provided processor function
|
|
155
|
+
* The processor function receives the token as an argument and should return the value to replace the token with
|
|
156
|
+
* If the processor function returns undefined, the token will be left as is
|
|
157
|
+
*/
|
|
158
|
+
public process(processor: (token, matches?) => Promise<string> | string, regex: TemplateStringMatch = Match.default) {
|
|
159
|
+
if (typeof this._current !== 'string') return this;
|
|
160
|
+
//first build a json object with all matching tokens
|
|
161
|
+
let tokens = {};
|
|
162
|
+
let match;
|
|
163
|
+
|
|
164
|
+
const prosessorPromises = [];
|
|
165
|
+
while ((match = regex.exec(this._current)) !== null) {
|
|
166
|
+
const token = match[1];
|
|
167
|
+
tokens[token] = match[0];
|
|
168
|
+
|
|
169
|
+
const _processor = processor(token, match);
|
|
170
|
+
|
|
171
|
+
//if an async processor is used, the TemplateStringHelper switches to async mode
|
|
172
|
+
if (_processor instanceof Promise) {
|
|
173
|
+
_processor.then((result) => {
|
|
174
|
+
if (result === undefined) {
|
|
175
|
+
return match?.[0];
|
|
176
|
+
}
|
|
177
|
+
tokens[token] = result;
|
|
178
|
+
});
|
|
179
|
+
prosessorPromises.push(_processor);
|
|
180
|
+
} else {
|
|
181
|
+
tokens[token] = _processor;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
if (prosessorPromises.length > 0) {
|
|
186
|
+
const promise = new Promise(async (resolve, reject) => {
|
|
187
|
+
await Promise.all(prosessorPromises);
|
|
188
|
+
this.parse(tokens, regex);
|
|
189
|
+
resolve(true);
|
|
190
|
+
});
|
|
191
|
+
this._promiseQueue.push(Promise.all(prosessorPromises));
|
|
192
|
+
} else {
|
|
193
|
+
this.parse(tokens, regex);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// this._current = await asyncReplace(this._current, regex, async (match, token) => {
|
|
197
|
+
// let result = await processor(token);
|
|
198
|
+
// if (result === undefined) {
|
|
199
|
+
// return match;
|
|
200
|
+
// }
|
|
201
|
+
// return result;
|
|
202
|
+
// });
|
|
203
|
+
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Removes all placeholders from the template string, leaving only the plain text
|
|
209
|
+
* This is useful when you want to clean up a template string that has placeholders that were not parsed
|
|
210
|
+
*/
|
|
211
|
+
public clean(regex: TemplateStringMatch = Match.default, replaceWith: string = '') {
|
|
212
|
+
if (typeof this._current !== 'string') return this;
|
|
213
|
+
this._current = this._current.replace(regex, replaceWith);
|
|
214
|
+
return this;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// public toString() {
|
|
218
|
+
// if (this._promiseQueue.length <= 0) return this._current;
|
|
219
|
+
// return new Promise(async (resolve, reject) => {
|
|
220
|
+
// await Promise.all(this._promiseQueue);
|
|
221
|
+
// resolve(this._current);
|
|
222
|
+
// });
|
|
223
|
+
// }
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
/**
|
|
227
|
+
* a helper function that takes a string and escape it
|
|
228
|
+
* This is useful when you have a stringified json and want to replace one of its values while making sure it won't break the json structure (e.g new lines, double quotes ...etc)
|
|
229
|
+
*/
|
|
230
|
+
export function escapeString(str?: string) {
|
|
231
|
+
if (!str) return str;
|
|
232
|
+
return str.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t');
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
// This is used escape JSON values characters like double quotes '"' to parse it properly
|
|
236
|
+
export function escapeJsonField(str?: string) {
|
|
237
|
+
if (typeof str !== 'string') return str;
|
|
238
|
+
return str.replace(/\\"/g, '"').replace(/"/g, '\\"');
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
export function TemplateString(templateString: string) {
|
|
242
|
+
return TemplateStringHelper.create(templateString);
|
|
243
|
+
}
|