diff --git a/workspaces/mi/mi-core/src/rpc-types/agent-mode/types.ts b/workspaces/mi/mi-core/src/rpc-types/agent-mode/types.ts index b10813a9816..48e938f811e 100644 --- a/workspaces/mi/mi-core/src/rpc-types/agent-mode/types.ts +++ b/workspaces/mi/mi-core/src/rpc-types/agent-mode/types.ts @@ -169,7 +169,9 @@ export type PlanApprovalKind = | 'exit_plan_mode' | 'exit_plan_mode_without_plan' | 'web_search' - | 'web_fetch'; + | 'web_fetch' + | 'shell_command' + | 'continue_after_limit'; /** * Agent event for streaming. @@ -179,7 +181,7 @@ export type PlanApprovalKind = * - `tool_result`: `toolName`, `toolOutput`, `completedAction` (+ optional shell fields) * - `ask_user`: `questionId`, `questions` * - `todo_updated`: `todos` - * - `plan_approval_requested`: `approvalId`, `approvalKind`, `approvalTitle`, `approveLabel`, `rejectLabel`, `allowFeedback`, `planFilePath`, `content` + * - `plan_approval_requested`: `approvalId`, `approvalKind`, `approvalTitle`, `approveLabel`, `rejectLabel`, `allowFeedback`, `planFilePath`, `content`, `suggestedPrefixRule` * - `compact`: `summary`, `content` * - `usage`: `totalInputTokens` * - `error`: `error` @@ -223,6 +225,8 @@ export interface AgentEvent { rejectLabel?: string; /** Whether the UI should collect rejection feedback */ allowFeedback?: boolean; + /** Suggested command prefix rule for shell approval dialogs */ + suggestedPrefixRule?: string[]; /** Summary text for compact event */ summary?: string; @@ -257,6 +261,7 @@ export interface PlanApprovalRequestedEvent extends AgentEvent { approveLabel: string; rejectLabel: string; allowFeedback: boolean; + suggestedPrefixRule?: string[]; planFilePath?: string; } @@ -334,6 +339,10 @@ export interface PlanApprovalResponse { approved: boolean; /** Optional feedback if user rejects the plan */ feedback?: string; + /** Optional per-session approval preference for shell command approvals */ + rememberForSession?: boolean; + /** Optional command-prefix rule to persist for shell command approvals */ + suggestedPrefixRule?: string[]; } // ============================================================================ diff --git a/workspaces/mi/mi-extension/.env.example b/workspaces/mi/mi-extension/.env.example index 19e431d4f61..9a476b15d49 100644 --- a/workspaces/mi/mi-extension/.env.example +++ b/workspaces/mi/mi-extension/.env.example @@ -11,5 +11,7 @@ MI_CONNECTOR_STORE_BACKEND=https://apis.wso2.com/qgpf/connector-store-backend/en MI_CONNECTOR_STORE_BACKEND_SEARCH=https://apis.wso2.com/qgpf/connector-store-backend/endpoint-9090-803/v1.0/connectors/details?limit=10&offset=0&searchQuery=${searchValue}&type=Connector&product=MI&runtimeVersion=${version} MI_CONNECTOR_STORE_BACKEND_INBOUND_ENDPOINTS=https://apis.wso2.com/qgpf/connector-store-backend/endpoint-9090-803/v1.0/connectors/details?offset=0&product=MI&type=inbound&runtimeVersion=${version} MI_CONNECTOR_STORE_BACKEND_GETBYVERSION=https://apis.wso2.com/qgpf/connector-store-backend/endpoint-9090-803/v1.0/connectors/${repoName}/versions/${versionId}?runtimeVersion=4.3.0&product=MI +MI_CONNECTOR_STORE_BACKEND_SUMMARIES=https://apis.wso2.com/qgpf/connector-store-backend/endpoint-9090-803/v1.0/connectors/summaries?type=${type}&limit=100&offset=0&product=MI +MI_CONNECTOR_STORE_BACKEND_DETAILS_FILTER=https://apis.wso2.com/qgpf/connector-store-backend/endpoint-9090-803/v1.0/connectors/details/filter ADOPTIUM_API_BASE_URL=https://api.adoptium.net/v3/assets/feature_releases COPILOT_ROOT_URL=https://7eff1239-64bb-4663-b256-30a00d187a5c-prod.e1-us-east-azure.choreoapis.dev/copilot diff --git a/workspaces/mi/mi-extension/scripts/update-connector-context-db.js b/workspaces/mi/mi-extension/scripts/update-connector-context-db.js new file mode 100644 index 00000000000..98ab4145a83 --- /dev/null +++ b/workspaces/mi/mi-extension/scripts/update-connector-context-db.js @@ -0,0 +1,372 @@ +#!/usr/bin/env node + +/* eslint-disable no-console */ + +const fs = require('fs/promises'); +const path = require('path'); + +const API_BASE = process.env.CONNECTOR_STORE_BASE_URL + || 'https://apis.wso2.com/qgpf/connector-store-backend/endpoint-9090-803/v1.0'; +const SUMMARY_URL_TEMPLATE = `${API_BASE}/connectors/summaries?type=\${type}&limit=100&offset=0&product=MI`; +const DETAILS_URL = `${API_BASE}/connectors/details/filter`; +const PRODUCT = 'MI'; +const RUNTIME_VERSION = process.env.MI_RUNTIME_VERSION || '4.5.0'; +const MAX_NAMES_PER_REQUEST = 3; +const REQUEST_TIMEOUT_MS = 120000; +const RETRY_COUNT = 3; +const RETRY_DELAY_MS = 1250; +const BATCH_DELAY_MS = 250; + +const CONTEXT_DIR = path.resolve(__dirname, '../src/ai-features/agent-mode/context'); +const TARGETS = [ + { type: 'Connector', fileName: 'connector_db.ts', exportName: 'CONNECTOR_DB' }, + { type: 'Inbound', fileName: 'inbound_db.ts', exportName: 'INBOUND_DB' }, +]; + +function sleep(ms) { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +function chunkArray(items, size) { + const chunks = []; + for (let i = 0; i < items.length; i += size) { + chunks.push(items.slice(i, i + size)); + } + return chunks; +} + +function getConnectorName(item) { + if (!item || typeof item !== 'object') { + return ''; + } + + const rawName = item.connectorName || item.connector_name || item.name; + if (typeof rawName !== 'string') { + return ''; + } + + return rawName.trim(); +} + +function normalizeArrayPayload(payload, label) { + if (Array.isArray(payload)) { + return payload; + } + + if (payload && typeof payload === 'object') { + if (Array.isArray(payload.data)) { + return payload.data; + } + if (Array.isArray(payload.items)) { + return payload.items; + } + if (Array.isArray(payload.connectors)) { + return payload.connectors; + } + } + + throw new Error(`${label} payload is not an array.`); +} + +async function fetchWithTimeout(url, init) { + const controller = new AbortController(); + const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS); + try { + return await fetch(url, { + ...init, + signal: controller.signal, + }); + } finally { + clearTimeout(timeout); + } +} + +async function parseResponse(response, label) { + const text = await response.text(); + + if (!response.ok) { + const bodySnippet = text ? ` - ${text.slice(0, 300)}` : ''; + throw new Error(`${label} failed: HTTP ${response.status} ${response.statusText}${bodySnippet}`); + } + + if (text.trim().length === 0) { + return []; + } + + try { + return JSON.parse(text); + } catch { + throw new Error(`${label} returned non-JSON content.`); + } +} + +async function requestJson(url, init, label) { + let lastError; + + for (let attempt = 1; attempt <= RETRY_COUNT; attempt++) { + try { + const response = await fetchWithTimeout(url, init); + return await parseResponse(response, label); + } catch (error) { + lastError = error; + if (attempt < RETRY_COUNT) { + console.warn(`${label} attempt ${attempt}/${RETRY_COUNT} failed. Retrying...`); + await sleep(RETRY_DELAY_MS * attempt); + } + } + } + + throw lastError; +} + +async function fetchSummaries(type) { + const summaryUrl = SUMMARY_URL_TEMPLATE.replace('${type}', encodeURIComponent(type)); + const payload = await requestJson( + summaryUrl, + { + method: 'GET', + headers: { + Accept: 'application/json', + }, + }, + `${type} summaries` + ); + + return normalizeArrayPayload(payload, `${type} summaries`); +} + +function extractUniqueNames(summaries, type) { + const names = []; + const seen = new Set(); + + for (const summary of summaries) { + const name = getConnectorName(summary); + if (!name || seen.has(name)) { + continue; + } + seen.add(name); + names.push(name); + } + + if (names.length === 0) { + throw new Error(`No ${type} names found from summaries.`); + } + + return names; +} + +function getConnectorDescription(item) { + if (!item || typeof item !== 'object') { + return ''; + } + + const rawDescription = item.description; + return typeof rawDescription === 'string' ? rawDescription : ''; +} + +function getConnectorTypeValue(item, fallbackType) { + if (!item || typeof item !== 'object') { + return fallbackType; + } + + const rawType = item.connectorType || item.connector_type; + if (typeof rawType === 'string' && rawType.trim().length > 0) { + return rawType.trim(); + } + + return fallbackType; +} + +function createSummaryFallbackRecord(name, summary, type) { + const baseRecord = { + connectorName: name, + repoName: '', + description: getConnectorDescription(summary), + connectorType: getConnectorTypeValue(summary, type), + mavenGroupId: '', + mavenArtifactId: '', + version: { + tagName: '', + releaseId: '', + isLatest: true, + isDeprecated: false, + operations: [], + connections: [], + }, + otherVersions: {}, + connectorRank: 0, + iconUrl: '', + }; + + if (type === 'Inbound') { + return { + ...baseRecord, + id: '', + }; + } + + return baseRecord; +} + +async function fetchDetailsBatch(type, connectorNames) { + const payload = await requestJson( + DETAILS_URL, + { + method: 'POST', + headers: { + Accept: 'application/json', + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + connectorNames, + runtimeVersion: RUNTIME_VERSION, + product: PRODUCT, + latest: true, + }), + }, + `${type} details (${connectorNames.join(', ')})` + ); + + return normalizeArrayPayload(payload, `${type} details`); +} + +async function fetchAllDetails(type, names) { + const detailsByName = new Map(); + let missing = names.slice(); + const maxPasses = 3; + + for (let pass = 1; pass <= maxPasses && missing.length > 0; pass++) { + if (pass > 1) { + console.warn(`[${type}] retry pass ${pass} for ${missing.length} missing item(s).`); + } + + const batches = chunkArray(missing, MAX_NAMES_PER_REQUEST); + for (let i = 0; i < batches.length; i++) { + const batch = batches[i]; + console.log(`[${type}] details batch ${i + 1}/${batches.length} with ${batch.length} item(s).`); + + try { + const batchDetails = await fetchDetailsBatch(type, batch); + for (const detail of batchDetails) { + const name = getConnectorName(detail); + if (name) { + detailsByName.set(name, detail); + } + } + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + console.warn(`[${type}] batch failed and will be retried in next pass: ${message}`); + } + + await sleep(BATCH_DELAY_MS); + } + + missing = names.filter((name) => !detailsByName.has(name)); + } + + if (missing.length > 0) { + console.warn(`[${type}] missing API details for ${missing.length} item(s): ${missing.join(', ')}`); + } + + return { detailsByName, missing }; +} + +async function readExistingRecordsByName(filePath, exportName) { + const existing = await fs.readFile(filePath, 'utf8'); + const exportIndex = existing.indexOf(`export const ${exportName} =`); + if (exportIndex < 0) { + throw new Error(`Could not find export declaration for ${exportName} in ${filePath}.`); + } + + const arrayStart = existing.indexOf('[', exportIndex); + const arrayEnd = existing.lastIndexOf(']'); + if (arrayStart < 0 || arrayEnd < 0 || arrayEnd < arrayStart) { + throw new Error(`Could not parse array contents from ${filePath}.`); + } + + const parsed = JSON.parse(existing.slice(arrayStart, arrayEnd + 1)); + if (!Array.isArray(parsed)) { + throw new Error(`Parsed existing data from ${filePath} is not an array.`); + } + + const recordsByName = new Map(); + for (const record of parsed) { + const name = getConnectorName(record); + if (name) { + recordsByName.set(name, record); + } + } + + return recordsByName; +} + +async function writeTsArrayFile(filePath, exportName, records) { + const existing = await fs.readFile(filePath, 'utf8'); + const exportRegex = new RegExp(`^[\\s\\S]*?export const\\s+${exportName}\\s*=\\s*`); + const match = existing.match(exportRegex); + + if (!match) { + throw new Error(`Could not find export declaration for ${exportName} in ${filePath}.`); + } + + const content = `${match[0]}${JSON.stringify(records, null, 4)}\n`; + await fs.writeFile(filePath, content, 'utf8'); +} + +async function updateTarget(target) { + const { type, fileName, exportName } = target; + const filePath = path.join(CONTEXT_DIR, fileName); + + console.log(`\n=== Updating ${type} definitions ===`); + const summaries = await fetchSummaries(type); + const names = extractUniqueNames(summaries, type); + const summariesByName = new Map(summaries.map((summary) => [getConnectorName(summary), summary])); + console.log(`[${type}] fetched ${summaries.length} summaries, ${names.length} unique names.`); + + const { detailsByName, missing } = await fetchAllDetails(type, names); + + if (missing.length > 0) { + const existingRecordsByName = await readExistingRecordsByName(filePath, exportName); + let fallbackCount = 0; + let summaryFallbackCount = 0; + + for (const name of missing) { + const fallbackRecord = existingRecordsByName.get(name); + if (fallbackRecord) { + detailsByName.set(name, fallbackRecord); + fallbackCount++; + } else { + const summary = summariesByName.get(name); + detailsByName.set(name, createSummaryFallbackRecord(name, summary, type)); + summaryFallbackCount++; + } + } + + console.warn( + `[${type}] used fallback records for ${fallbackCount} item(s) and summary-only placeholders for ${summaryFallbackCount} item(s).` + ); + } + + const details = names.map((name) => detailsByName.get(name)).filter(Boolean); + console.log(`[${type}] fetched ${details.length} detailed records.`); + + await writeTsArrayFile(filePath, exportName, details); + console.log(`[${type}] wrote ${filePath}`); +} + +async function main() { + if (MAX_NAMES_PER_REQUEST > 3) { + throw new Error('MAX_NAMES_PER_REQUEST must be 3 or less to avoid backend overload.'); + } + + for (const target of TARGETS) { + await updateTarget(target); + } +} + +if (require.main === module) { + main().catch((error) => { + console.error(`Failed to update connector context DB files: ${error instanceof Error ? error.message : String(error)}`); + process.exit(1); + }); +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/agent.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/agent.ts index 267213a4a85..6a92d86e5d3 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/agent.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/agent.ts @@ -55,10 +55,24 @@ import { WEB_FETCH_TOOL_NAME, } from './tools'; import { logInfo, logError, logDebug } from '../../../copilot/logger'; -import { ChatHistoryManager } from '../../chat-history-manager'; +import { ChatHistoryManager, TOOL_USE_INTERRUPTION_CONTEXT } from '../../chat-history-manager'; import { getToolAction } from '../../tool-action-mapper'; import { AgentUndoCheckpointManager } from '../../undo/checkpoint-manager'; import { getCopilotSessionDir } from '../../storage-paths'; +import { ShellApprovalRuleStore } from '../../tools/types'; +import { + awaitWithTimeout, + createProxyTerminatedError, + createStreamWatchdog, + DEFAULT_FINAL_RESPONSE_WAIT_TIMEOUT_MS, + DEFAULT_STREAM_IDLE_TIMEOUT_MS, + DEFAULT_STREAM_TOTAL_TIMEOUT_MS, + getErrorDiagnostics, + getErrorMessage, + isProxyTerminatedStreamError, + isStreamTimeoutError, + StreamWatchdog, +} from '../../stream_guard'; // Import types from mi-core (shared with visualizer) import { AgentEvent, AgentEventType, FileObject, ImageObject, AgentMode } from '@wso2/mi-core'; @@ -103,6 +117,8 @@ export interface AgentRequest { pendingQuestions?: Map; /** Pending plan approvals map for exit_plan_mode tool (shared with RPC layer) */ pendingApprovals?: Map; + /** Session-scoped shell approval rule store */ + shellApprovalRuleStore?: ShellApprovalRuleStore; /** Optional checkpoint manager for undo support */ undoCheckpointManager?: AgentUndoCheckpointManager; } @@ -119,6 +135,56 @@ export interface AgentResult { error?: string; /** Full AI SDK messages from this turn (includes tool calls/results) */ modelMessages?: any[]; + /** True when the run ended due to model limits (step/token) and should be continued in a new run */ + continuationSuggested?: boolean; + /** Normalized stop reason when continuation is suggested */ + continuationReason?: 'max_output_tokens' | 'max_tool_calls'; +} + +type ContinuationReason = 'max_output_tokens' | 'max_tool_calls'; + +function normalizeFinishReason(finishPart: unknown): string | undefined { + const part = finishPart as Record | undefined; + const candidates = [ + part?.finishReason, + part?.finish_reason, + part?.stopReason, + part?.stop_reason, + part?.reason, + ]; + for (const candidate of candidates) { + if (typeof candidate === 'string' && candidate.trim().length > 0) { + return candidate.trim().toLowerCase(); + } + } + return undefined; +} + +function getContinuationReasonFromFinish(finishReason?: string): ContinuationReason | undefined { + if (!finishReason) { + return undefined; + } + + const reason = finishReason.toLowerCase(); + if ( + reason.includes('tool') || + reason.includes('step') || + reason.includes('max_steps') || + reason.includes('stepcount') + ) { + return 'max_tool_calls'; + } + + if ( + reason.includes('length') || + reason.includes('token') || + reason.includes('max_tokens') || + reason.includes('output') + ) { + return 'max_output_tokens'; + } + + return undefined; } // ============================================================================ @@ -137,6 +203,23 @@ export async function executeAgent( let response: any = null; // Store response promise for later access let accumulatedContent: string = ''; // Accumulate assistant response content let isExecutingTool = false; // Track if we're currently executing a tool (for interruption message) + let cleanupStreamLifecycle: (() => void) | undefined; + let streamWatchdog: StreamWatchdog | undefined; + let pauseIdleTimeout = false; + let touchStreamActivity: () => void = () => undefined; + let finalResponseWaitTimeoutMs = DEFAULT_FINAL_RESPONSE_WAIT_TIMEOUT_MS; + + const emitEvent = (event: AgentEvent) => { + const eventType = (event as { type?: string })?.type; + if (eventType === 'ask_user' || eventType === 'plan_approval_requested') { + pauseIdleTimeout = true; + } else { + pauseIdleTimeout = false; + } + + touchStreamActivity(); + eventHandler(event); + }; // Use provided pendingQuestions map or create a new one const pendingQuestions = request.pendingQuestions || new Map(); @@ -240,11 +323,12 @@ export async function executeAgent( modifiedFiles, sessionId, sessionDir, - eventHandler, + eventHandler: emitEvent, pendingQuestions, pendingApprovals, getAnthropicClient, webAccessPreapproved: request.webAccessPreapproved === true, + shellApprovalRuleStore: request.shellApprovalRuleStore, undoCheckpointManager: request.undoCheckpointManager, }); @@ -289,7 +373,28 @@ export async function executeAgent( ? { 'anthropic-beta': 'interleaved-thinking-2025-05-14' } : undefined; - // Setup Langfuse tracing if enabled + // Setup stream watchdog and timeout controls (fixed constants) + const idleTimeoutMs = DEFAULT_STREAM_IDLE_TIMEOUT_MS; + const totalTimeoutMs = DEFAULT_STREAM_TOTAL_TIMEOUT_MS; + finalResponseWaitTimeoutMs = DEFAULT_FINAL_RESPONSE_WAIT_TIMEOUT_MS; + streamWatchdog = createStreamWatchdog({ + requestAbortSignal: request.abortSignal, + idleTimeoutMs, + totalTimeoutMs, + shouldPauseIdleTimeout: () => pauseIdleTimeout || isExecutingTool, + onTimeout: (kind, timeoutError) => { + const timeoutLabel = kind === 'idle' ? 'idle' : 'total'; + logError(`[Agent] Stream ${timeoutLabel} timeout reached`, timeoutError); + }, + }); + + touchStreamActivity = () => { + streamWatchdog?.markActivity(); + }; + cleanupStreamLifecycle = () => { + streamWatchdog?.cleanup(); + }; + const streamConfig: any = { model, maxOutputTokens: 15000, @@ -297,13 +402,28 @@ export async function executeAgent( messages: allMessages, stopWhen: stepCountIs(50), tools, - abortSignal: request.abortSignal, + abortSignal: streamWatchdog.abortSignal, headers: requestHeaders, providerOptions: { anthropic: anthropicOptions, }, prepareStep, + onAbort: () => { + logInfo('[Agent] streamText aborted'); + }, + onError: (error: unknown) => { + const errorMsg = getErrorMessage(error); + logError(`[Agent] streamText error: ${errorMsg}`, error); + logDebug(`[Agent] streamText error diagnostics: ${getErrorDiagnostics(error)}`); + if (streamWatchdog && !streamWatchdog.abortSignal.aborted) { + const abortReason = error instanceof Error + ? error + : new Error(errorMsg); + streamWatchdog.abort(abortReason); + } + }, onStepFinish: async (step) => { + touchStreamActivity(); currentStepNumber++; // Simple cache metrics logging @@ -318,7 +438,7 @@ export async function executeAgent( // Emit usage event to UI const totalInputTokens = inputTokens + cachedInputTokens; - eventHandler({ type: 'usage', totalInputTokens }); + emitEvent({ type: 'usage', totalInputTokens }); } // Save only unsaved messages from this step @@ -356,8 +476,19 @@ export async function executeAgent( const streamResult = streamText(streamConfig); const fullStream = streamResult.fullStream; response = streamResult.response; // Assign to outer scope variable + response?.catch((error: unknown) => { + const errorMsg = getErrorMessage(error); + logError(`[Agent] streamText response error: ${errorMsg}`, error); + logDebug(`[Agent] streamText response error diagnostics: ${getErrorDiagnostics(error)}`); + if (streamWatchdog && !streamWatchdog.abortSignal.aborted) { + const abortReason = isProxyTerminatedStreamError(errorMsg) + ? createProxyTerminatedError(errorMsg) + : (error instanceof Error ? error : new Error(errorMsg)); + streamWatchdog.abort(abortReason); + } + }); - eventHandler({ type: 'start' }); + emitEvent({ type: 'start' }); // Track tool inputs for use in tool results (by toolCallId) const toolInputMap = new Map(); @@ -368,6 +499,8 @@ export async function executeAgent( // Process stream for await (const part of fullStream) { + touchStreamActivity(); + pauseIdleTimeout = false; // Check for abort signal at each iteration if (request.abortSignal?.aborted) { logInfo('[Agent] Abort signal detected during stream processing'); @@ -379,7 +512,7 @@ export async function executeAgent( // Accumulate content for later recording as complete message accumulatedContent += part.text; - eventHandler({ + emitEvent({ type: 'content_block', content: part.text, }); @@ -388,7 +521,7 @@ export async function executeAgent( case 'reasoning-start': { reasoningById.set(part.id, ''); - eventHandler({ + emitEvent({ type: 'thinking_start', thinkingId: part.id, }); @@ -404,7 +537,7 @@ export async function executeAgent( const current = reasoningById.get(part.id) || ''; reasoningById.set(part.id, current + delta); - eventHandler({ + emitEvent({ type: 'thinking_delta', thinkingId: part.id, content: delta, @@ -414,7 +547,7 @@ export async function executeAgent( case 'reasoning-end': { reasoningById.delete(part.id); - eventHandler({ + emitEvent({ type: 'thinking_end', thinkingId: part.id, }); @@ -422,6 +555,7 @@ export async function executeAgent( } case 'tool-input-start': { + isExecutingTool = true; const toolCallId = (part as any).id ?? (part as any).toolCallId; if (toolCallId && preloadedToolCallIds.has(toolCallId)) { break; @@ -440,7 +574,7 @@ export async function executeAgent( const loadingAction = toolActions?.loading || toolName; // Emit an early loading event so UI shows progress while tool input streams. - eventHandler({ + emitEvent({ type: 'tool_call', toolName, toolInput: {}, @@ -481,8 +615,10 @@ export async function executeAgent( displayInput = { file_path: toolInput?.file_path }; } else if (part.toolName === CONNECTOR_TOOL_NAME) { displayInput = { - connector_names: toolInput?.connector_names, - inbound_endpoint_names: toolInput?.inbound_endpoint_names, + name: toolInput?.name, + include_full_descriptions: toolInput?.include_full_descriptions, + operation_names: toolInput?.operation_names, + connection_names: toolInput?.connection_names, }; } else if (part.toolName === SKILL_TOOL_NAME) { displayInput = { @@ -542,7 +678,7 @@ export async function executeAgent( // Skip tool call UI for todo_write (handled by inline todo list) if (part.toolName !== TODO_WRITE_TOOL_NAME) { - eventHandler({ + emitEvent({ type: 'tool_call', toolName: part.toolName, toolInput: displayInput, @@ -591,7 +727,7 @@ export async function executeAgent( } // Send to visualizer with result action for display - eventHandler(toolResultEvent); + emitEvent(toolResultEvent); } // Clean up stored tool input @@ -600,9 +736,10 @@ export async function executeAgent( } case 'error': { + cleanupStreamLifecycle?.(); const errorMsg = getErrorMessage(part.error); logError(`[Agent] Stream error: ${errorMsg}`); - eventHandler({ + emitEvent({ type: 'error', error: errorMsg, }); @@ -615,7 +752,7 @@ export async function executeAgent( case 'text-start': { // Add newline for formatting - eventHandler({ + emitEvent({ type: 'content_block', content: ' \n', }); @@ -623,64 +760,85 @@ export async function executeAgent( } case 'finish': { + cleanupStreamLifecycle?.(); logInfo(`[Agent] Execution finished. Modified files: ${modifiedFiles.length}`); + const finishReason = normalizeFinishReason(part); + const continuationReason = getContinuationReasonFromFinish(finishReason); // Capture final messages and log cache usage try { - const finalResponse = await response; + const finalResponse: any = response + ? await awaitWithTimeout(response, finalResponseWaitTimeoutMs) + : undefined; finalModelMessages = finalResponse.messages || []; } catch (error) { - logError('[Agent] Failed to capture model messages', error); + logError('[Agent] Failed to capture model messages on finish', error); } // Send stop event to UI - eventHandler({ type: 'stop', modelMessages: finalModelMessages }); + emitEvent({ type: 'stop', modelMessages: finalModelMessages }); return { success: true, modifiedFiles, modelMessages: finalModelMessages, + continuationSuggested: continuationReason !== undefined, + continuationReason, }; } + + default: + break; } } // Stream completed without finish event (shouldn't happen normally) - // Capture final model messages for UI only (recording should have happened in onStepFinish) + cleanupStreamLifecycle?.(); + // Capture partial messages if available, but do not block forever waiting for response. try { - const finalResponse = await response; + const finalResponse: any = response + ? await awaitWithTimeout(response, finalResponseWaitTimeoutMs) + : undefined; finalModelMessages = finalResponse.messages || []; - logDebug(`[Agent] Captured ${finalModelMessages.length} model messages (no finish event)`); + logDebug(`[Agent] Captured ${finalModelMessages.length} model messages after unexpected stream end`); } catch (error) { - logError('[Agent] Failed to capture model messages', error); + logError('[Agent] Failed to capture model messages after unexpected stream end', error); } - // Send stop event with modelMessages - eventHandler({ type: 'stop', modelMessages: finalModelMessages }); + const unexpectedStreamEndMessage = 'Agent stream ended unexpectedly before completion. Please retry.'; + logError(`[Agent] ${unexpectedStreamEndMessage}`); + emitEvent({ type: 'error', error: unexpectedStreamEndMessage }); return { - success: true, + success: false, modifiedFiles, + error: unexpectedStreamEndMessage, modelMessages: finalModelMessages, }; } catch (error: any) { + cleanupStreamLifecycle?.(); const errorMsg = getErrorMessage(error); + const abortReason = streamWatchdog?.getAbortReason(); // Try to capture partial model messages even on error try { - const finalResponse = await response; + const finalResponse: any = response + ? await awaitWithTimeout(response, finalResponseWaitTimeoutMs) + : undefined; finalModelMessages = finalResponse.messages || []; - } catch { - // Ignore errors in capturing messages + } catch (captureError) { + logDebug(`[Agent] Skipped capturing final model messages after error: ${getErrorMessage(captureError)}`); } // Check if aborted - be thorough about detecting abort scenarios // The abort could come from various sources with different error types - const isAborted = - error?.name === 'AbortError' || - request.abortSignal?.aborted || - errorMsg.toLowerCase().includes('abort') || - errorMsg.toLowerCase().includes('cancel') || - error?.code === 'ABORT_ERR'; + const isToolInterruptionAbort = errorMsg.includes(TOOL_USE_INTERRUPTION_CONTEXT); + const isUserInitiatedAbort = (streamWatchdog?.isUserAbortRequested() || false) || request.abortSignal?.aborted || isToolInterruptionAbort; + const isTimeoutAbort = isStreamTimeoutError(error) || isStreamTimeoutError(abortReason); + const isProxyTerminated = isProxyTerminatedStreamError(errorMsg) || isProxyTerminatedStreamError(getErrorMessage(abortReason)); + const isAborted = + !isTimeoutAbort && + !isProxyTerminated && + isUserInitiatedAbort; if (isAborted) { logInfo(`[Agent] Execution aborted by user (isExecutingTool: ${isExecutingTool})`); @@ -696,7 +854,7 @@ export async function executeAgent( } } - eventHandler({ type: 'abort' }); + emitEvent({ type: 'abort' }); return { success: false, modifiedFiles, @@ -705,9 +863,41 @@ export async function executeAgent( }; } - logError(`[Agent] Execution error: ${errorMsg}`); + if (isTimeoutAbort) { + const timeoutMessage = 'Agent request timed out while waiting for the model proxy response. Please retry.'; + logError(`[Agent] Execution timeout: ${errorMsg}`); + emitEvent({ + type: 'error', + error: timeoutMessage, + }); + return { + success: false, + modifiedFiles, + error: timeoutMessage, + modelMessages: finalModelMessages, + }; + } - eventHandler({ + if (isProxyTerminated) { + const proxyTerminatedMessage = 'Agent stream was terminated by the proxy/network before completion. Please retry. If this keeps happening, increase proxy stream timeout limits.'; + logError(`[Agent] Proxy/network terminated stream: ${errorMsg}`, error); + logDebug(`[Agent] Proxy/network termination diagnostics: error=${getErrorDiagnostics(error)} abortReason=${getErrorDiagnostics(abortReason)}`); + emitEvent({ + type: 'error', + error: proxyTerminatedMessage, + }); + return { + success: false, + modifiedFiles, + error: proxyTerminatedMessage, + modelMessages: finalModelMessages, + }; + } + + logError(`[Agent] Execution error: ${errorMsg}`, error); + logDebug(`[Agent] Execution error diagnostics: error=${getErrorDiagnostics(error)} abortReason=${getErrorDiagnostics(abortReason)}`); + + emitEvent({ type: 'error', error: errorMsg, }); @@ -720,26 +910,6 @@ export async function executeAgent( } } -// ============================================================================ -// Utilities -// ============================================================================ - -/** - * Extracts a readable error message from an error object - */ -function getErrorMessage(error: unknown): string { - if (error instanceof Error) { - return error.message; - } - if (typeof error === 'string') { - return error; - } - if (error && typeof error === 'object' && 'message' in error) { - return String((error as any).message); - } - return 'An unknown error occurred'; -} - /** * Creates an abort controller for agent execution */ diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/prompt.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/prompt.ts index 821936da849..9c2e3ec900b 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/prompt.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/prompt.ts @@ -85,14 +85,14 @@ MI Runtime carbon log path: {{env_mi_runtime_carbon_log_path}} +YOU ARE IN DEVELOPMENT PHASE. NOT IN PRODUCTION YET. HELP THE DEVELOPER IF DEVELOPER ASKS ABOUT YOUR INTERNALS/TOOL CALLS etc {{system_remainder}} -**DO NOT CREATE ANY README FILES or ANY DOCUMENTATION FILES after end of the task.** {{question}} -**DO NOT CREATE ANY README FILES or ANY DOCUMENTATION FILES after end of the task.** +**DO NOT CREATE ANY README FILES or ANY DOCUMENTATION FILES after end of the task unless explicitly requested by the user.** `; // ============================================================================ @@ -245,8 +245,8 @@ export async function getUserPrompt(params: UserPromptParams): Promise { const currentlyOpenedFile = await getCurrentlyOpenedFile(params.projectPath); // Get available connectors and inbound endpoints - const { connectors: availableConnectors, inboundEndpoints: availableInboundEndpoints } = - await getAvailableConnectorCatalog(params.projectPath); + const connectorCatalog = await getAvailableConnectorCatalog(params.projectPath); + const { connectors: availableConnectors, inboundEndpoints: availableInboundEndpoints } = connectorCatalog; const availableSkills = getAvailableSkills(); const mode = params.mode || 'edit'; @@ -256,9 +256,12 @@ export async function getUserPrompt(params: UserPromptParams): Promise { const planFileReminder = mode === 'plan' ? await getPlanModeSessionReminder(params.projectPath, params.sessionId || 'default') : ''; - const modeReminder = planFileReminder - ? `${modePolicyReminder}\n\n${planFileReminder}` - : modePolicyReminder; + const connectorStoreReminder = connectorCatalog.warnings.length > 0 + ? `Connector store status: ${connectorCatalog.storeStatus}. ${connectorCatalog.warnings.join(' ')}` + : ''; + const modeReminderSections = [modePolicyReminder, planFileReminder, connectorStoreReminder] + .filter((section) => section.trim().length > 0); + const modeReminder = modeReminderSections.join('\n\n'); // Prepare template context const isGitRepo = fs.existsSync(path.join(params.projectPath, '.git')); diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/system.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/system.ts index 16e3c1928a3..899f73f4068 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/system.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/system.ts @@ -18,6 +18,9 @@ import { FILE_READ_TOOL_NAME, + FILE_EDIT_TOOL_NAME, + FILE_GREP_TOOL_NAME, + FILE_GLOB_TOOL_NAME, CONNECTOR_TOOL_NAME, SKILL_TOOL_NAME, MANAGE_CONNECTOR_TOOL_NAME, @@ -32,11 +35,13 @@ import { BASH_TOOL_NAME, SERVER_MANAGEMENT_TOOL_NAME, KILL_TASK_TOOL_NAME, + TASK_OUTPUT_TOOL_NAME, WEB_SEARCH_TOOL_NAME, WEB_FETCH_TOOL_NAME, } from '../../tools/types'; import { SYNAPSE_GUIDE } from '../../context/synapse_guide'; import { SYNAPSE_GUIDE as SYNAPSE_GUIDE_OLD } from '../../context/synapse_guide_old'; +import { CONNECTOR_DOCUMENTATION } from '../../context/connectors_guide'; import { compareVersions } from '../../../../util/onboardingUtils'; import { RUNTIME_VERSION_440 } from '../../../../constants'; @@ -61,17 +66,16 @@ Prioritize technical accuracy over validation. Be direct, objective, and disagre # Asking questions as you work - You have access to the ${ASK_USER_TOOL_NAME} tool to ask the user questions when you need clarification, want to validate assumptions, or need to make a decision you're unsure about. When presenting options or plans, never include time estimates - focus on what each option involves, not how long it takes. - Always prefer using ${ASK_USER_TOOL_NAME} over asking questions to the user directly. +- When using ${ASK_USER_TOOL_NAME}, include one clearly recommended option by appending "(Recommended)" to that option label and place it first. # tags -- Tool results and user messages may include tags. tags contain useful information and reminders. They are automatically added by the system, and bear no direct relation to the specific tool results or user messages in which they appear. +- Tool results and user messages may include tags. tags contain useful information and reminders. They are automatically injected by the system, and bear no direct relation to the specific tool results or user messages in which they appear. - The latest mode instructions are injected via in the user prompt. Treat those mode instructions as authoritative for the current turn. # Operating modes - This agent supports three modes: ASK, PLAN, and EDIT. - User can manually put the agent in any of the modes at any time via the mode selector in the chat window. -- ASK mode: strictly read-only. Analyze, explain, and propose changes, but do not perform mutating actions. -- PLAN mode: planning-focused and read-only for implementation. Explore, ask clarifying questions, maintain todos, and produce an implementation plan. -- EDIT mode: full implementation mode. You may use the full toolset to modify and validate the project. +- The latest defines the active mode and detailed constraints for this turn. Follow it as authoritative. - If a mode constraint conflicts with a user request, follow the mode constraint and explain what mode change is needed. ## Plan Mode @@ -79,6 +83,7 @@ Prioritize technical accuracy over validation. Be direct, objective, and disagre - Prefer PLAN mode when there are multiple valid approaches, multi-file/architectural changes, or unclear requirements. - Do not use PLAN mode for pure research-only requests. - In PLAN mode, finalize the plan in the assigned plan file and request approval using ${EXIT_PLAN_MODE_TOOL_NAME}. +- Use ${EXIT_PLAN_MODE_TOOL_NAME} for plan approval itself; do not use ${ASK_USER_TOOL_NAME} to ask separate "plan approval" questions. # Undo behavior - For project-file changes that are actually applied, the system creates an undo checkpoint and shows an Undo card in chat. Note: Plan file you generated in PLAN mode is excluded from this undo flow. @@ -89,14 +94,23 @@ Prioritize technical accuracy over validation. Be direct, objective, and disagre - You have access to the ${TODO_WRITE_TOOL_NAME} tool to help you manage and plan tasks. Use this tool VERY frequently to ensure that you are tracking your tasks and giving the user visibility into your progress. - If the task is too complex to handle just with ${TODO_WRITE_TOOL_NAME} tool, use plan mode. ( To enter plan mode you must be in EDIT mode first. ) - These tools are also EXTREMELY helpful for planning tasks, and for breaking down larger complex tasks into smaller steps. If you do not use this tool when planning, you may forget to do important tasks - and that is unacceptable. +- ${TODO_WRITE_TOOL_NAME} replaces the full todo list each call; include all active/completed/pending tasks and keep at most one task in_progress. # Tool usage policy -- When doing file search, prefer to use the ${SUBAGENT_TOOL_NAME} tool in order to reduce context usage if the codebase is large. +- Use ${FILE_GREP_TOOL_NAME} and ${FILE_GLOB_TOOL_NAME} for targeted needle searches (specific pattern, file type, or known location). +- Use ${SUBAGENT_TOOL_NAME} with subagent_type=Explore for broad understanding tasks (module summaries, architecture discovery, tracing cross-file patterns). +- Use ${BASH_TOOL_NAME} only for actual system operations (build, test, runtime/log checks, curl, and file management). Do not use shell for file/content search when dedicated tools are available. +- ${BASH_TOOL_NAME} runs inside a policy sandbox. Interactive/elevated commands and file mutations outside the project (except /tmp) are blocked. +- Access to sensitive files/paths is blocked (for example .env files, ~/.ssh, ~/.aws, and shell rc files). +- Allowed mutating commands may require approval; /tmp-only mutations are allowed without approval. +- If shell approval is denied, do not retry the same command in a loop. Continue with alternative tools or ask the user for guidance. - You can call multiple tools in a single response. If you intend to call multiple tools and there are no dependencies between them, make all independent tool calls in parallel. Maximize use of parallel tool calls where possible to increase efficiency. However, if some tool calls depend on previous calls to inform dependent values, do NOT call these tools in parallel and instead call them sequentially. For instance, if one operation must complete before another starts, run these operations sequentially instead. Never use placeholders or guess missing parameters in tool calls. +- For multi-file edits, call ${FILE_EDIT_TOOL_NAME} in parallel only when edits are independent. If edits touch the same file or depend on earlier edits, run them sequentially. - Use specialized tools instead of shell commands when possible, as this provides a better user experience. For file operations, use dedicated tools: Read for reading files instead of shell file-print commands, Edit for editing instead of shell text-rewrite commands, and Write for creating files instead of shell redirection. Reserve shell tools exclusively for actual system commands and terminal operations that require shell execution. ALWAYS use platform-specific shell syntax based on the block in the current user prompt (Windows: PowerShell syntax, macOS/Linux: bash syntax). NEVER use shell echo or command-line tools to communicate thoughts, explanations, or instructions to the user. Output all communication directly in your response text instead. +- Before ${FILE_EDIT_TOOL_NAME}, read the target file first with ${FILE_READ_TOOL_NAME} and build minimal hunks. Use context_before/context_after for repeated blocks and use line_hint only as a tie-breaker. +- Background tasks from ${BASH_TOOL_NAME} and ${SUBAGENT_TOOL_NAME} share the same task_id workflow: use ${TASK_OUTPUT_TOOL_NAME} to check output and ${KILL_TASK_TOOL_NAME} to terminate. - Use MI runtime paths from the block (MI Runtime home path, MI Runtime carbon log path) for runtime/debug log checks instead of hardcoded paths. -- VERY IMPORTANT: When exploring the codebase to gather context or answer broad questions (not a needle query for a specific file), use the ${SUBAGENT_TOOL_NAME} tool with subagent_type=Explore instead of running search commands directly. -- Connector guidance: keep ${CONNECTOR_TOOL_NAME} include_documentation=true for common connector usage context. Use ${SKILL_TOOL_NAME} only for specialized, rarely needed guidance. +- Connector guidance: ${CONNECTOR_TOOL_NAME} fetches exactly one connector or one inbound endpoint per call using the name field. For multiple items, call it in parallel. First read the summary and check the "Parameter Details" availability line, operations, connections, and initialization flags. Request include_full_descriptions=true only when parameter details are needed and available, and provide exact operation_names and/or connection_names for targeted details. Use ${SKILL_TOOL_NAME} only for specialized, rarely needed guidance. - Use ${WEB_SEARCH_TOOL_NAME} for external research and recent information. - Use ${WEB_FETCH_TOOL_NAME} for retrieving and analyzing content from specific URLs. - Prefer MI docs as a primary source by constraining ${WEB_SEARCH_TOOL_NAME} with allowed_domains=["mi.docs.wso2.com"], but do not limit research to MI docs only. Use other relevant sources such as GitHub issues, Stack Overflow, and technical blogs when they add value. @@ -118,22 +132,22 @@ The URL links MUST be absolute file paths. The project root path will be provide ## User Selection Context The user's IDE selection (if any) is included in the conversation context and marked with ide_selection tags. This represents code or text the user has highlighted in their editor and may or may not be relevant to their request. -# User Query Processing Workflow +# User Query Processing Policy +- This is not a step-by-step guide. It is a policy that you may selectively follow based on the user's request. -## Step 0: Determine Relevance: -- Only assist with technical queries related to WSO2 Synapse integrations. Politely decline non-technical or out-of-scope requests. +## Scope Guidelines +- Assist with technical queries related to WSO2 Synapse integrations. Politely decline non-technical or out-of-scope requests. -## Step 1: Understand the Requirement -- Analyze the user's request carefully -- Ask clarifying questions if the requirement is ambiguous using ASK_USER_TOOL. -- Make reasonable assumptions for missing details. +## Requirement Analysis Guidelines +- If a missing detail can change architecture, security, external dependencies, or tool choice, ask via ASK_USER_TOOL. +- Otherwise, make minimal reasonable assumptions and state them briefly. -## Step 2: Design the Solution +## Design Guidelines - Create a high-level design plan - Identify required artifacts (APIs, sequences, endpoints, etc.) - Identify necessary connectors and mediators -## Step 3: Implement the Solution +## Implementation Guidelines - Use the file tools to create/modify Synapse configurations. - Add required connectors and inbound endpoints using ${MANAGE_CONNECTOR_TOOL_NAME} (with operation: "add") when Synapse XML uses connector operations. - Create data mappers using ${CREATE_DATA_MAPPER_TOOL_NAME} when needed to transform data between input and output schemas. @@ -143,36 +157,27 @@ The user's IDE selection (if any) is included in the conversation context and ma - Follow the provided Synapse artifact guidelines and best practices strictly. - Create separate files for each artifact type. -## Step 4: Validate +## Validation Guidelines - XML files are automatically validated on write/edit. Review feedback and fix errors immediately. - Only use ${VALIDATE_CODE_TOOL_NAME} for files you didn't just write/edit. -## Step 5: Build the project and run it and test it if possible +## Build and Test Guidelines - Use ${BUILD_PROJECT_TOOL_NAME} to build the project. - If the integration can be tested locally without mocking the external services, then test it locally. Else end your task and ask user to test the project manually. -- If it needs any api keys or credentials ask user to set them then you can test else don't run the project. +- If testing requires API keys or credentials, ask the user to provide/configure them first. Do not attempt credential-dependent tests until the user confirms. - Clearly explain that you can not test the project if it needs any api keys or credentials or if it is not possible to test locally. - Use ${SERVER_MANAGEMENT_TOOL_NAME} to run the project. - Use ${SERVER_MANAGEMENT_TOOL_NAME} to check the status of the project. - Then use ${BASH_TOOL_NAME} to test the project if possible. - If there are server errors that you can not fix, end your task and ask user to fix the errors manually. **Do not try to fix the server errors yourself.** -## Step 6: Review and refine +## Review and Refine Guidelines - If code validation fails, or testing fails, review the code and fix the errors. -- DO NOT CREATE ANY README FILES or ANY DOCUMENTATION FILES after end of the task. -## Step 7: Clean up +## Clean up Guidelines - Always shutdown the server using ${SERVER_MANAGEMENT_TOOL_NAME} before ending the task. - Kill all the background tasks (shells/subagents) you started and still running during the task if any using ${KILL_TASK_TOOL_NAME} tool. -# Important Rules -1. **Always Read Before Edit**: Before editing any file, use ${FILE_READ_TOOL_NAME} to see the current content -2. **One Artifact Per File**: Each API, sequence, endpoint, etc. should be in its own file -3. **Use Meaningful Names**: Give clear, descriptive names to all artifacts -4. **Complete Solutions**: Never leave placeholders - implement the complete solution -5. **Follow Synapse Best Practices**: Use the latest mediators and patterns -6. **DO NOT CREATE ANY README FILES or ANY DOCUMENTATION FILES after end of the task.** - # File Paths For MI projects, use these standard paths: - APIs: \`src/main/wso2mi/artifacts/apis/\` @@ -208,7 +213,8 @@ Check: - INVALID Synapse XML → Check validation feedback from file_write/file_edit (automatic), or use ${VALIDATE_CODE_TOOL_NAME} tool for existing files - Port conflicts → Check if port 8290 is already in use -## Debugging Workflow +## Debugging Guidelines +- Use log mediator to debug the project. ( use logFullPayload=true to get the full payload ) - Read server logs (use ${BASH_TOOL_NAME} with platform-specific commands) - Review automatic validation feedback from file operations, or use ${VALIDATE_CODE_TOOL_NAME} for existing files - Verify artifact.xml matches actual files @@ -222,15 +228,20 @@ Check: - Hot deployment can leave the runtime in a broken or partially-loaded state, causing mediators to silently return wrong/empty values even though the artifact appears deployed. A clean restart guarantees the new artifact is fully initialized before testing. - Note: For simple projects, removing artifact.xml and letting Maven auto-discover artifacts often resolves deployment issues. -# User Communication +# User Communication Guidelines - Keep explanations concise and technical - Show your work by explaining what files you're creating/modifying - Use code blocks for XML examples in explanations - Do not mention internal tool names to users +- If you become blocked after repeated attempts (for example, same failure pattern repeats, MI platform limitation, unresolved bug, or unclear requirement), stop retrying, clearly report why progress is blocked, and ask the user to report it via https://github.com/wso2/mi-vscode/issues or the built-in good/bad feedback controls in the AI panel. ${SYNAPSE_GUIDE} + + +${CONNECTOR_DOCUMENTATION} + `; const SYSTEM_PROMPT_OLD = SYSTEM_PROMPT.replace(SYNAPSE_GUIDE, SYNAPSE_GUIDE_OLD); diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/tools.ts index c5f12dc9062..581c4c7946b 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/tools.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/agents/main/tools.ts @@ -115,7 +115,7 @@ import { WEB_SEARCH_TOOL_NAME, WEB_FETCH_TOOL_NAME, } from '../../tools/types'; -import { BashExecuteFn, ToolResult } from '../../tools/types'; +import { BashExecuteFn, ToolResult, ShellApprovalRuleStore } from '../../tools/types'; import { AgentUndoCheckpointManager } from '../../undo/checkpoint-manager'; import * as path from 'path'; import { getCopilotSessionDir } from '../../storage-paths'; @@ -172,6 +172,8 @@ export interface CreateToolsParams { getAnthropicClient: (model: AnthropicModel) => Promise; /** Skip per-call web approval prompts for this run */ webAccessPreapproved: boolean; + /** Session-scoped shell approval rule store */ + shellApprovalRuleStore?: ShellApprovalRuleStore; /** Optional undo checkpoint manager for capturing pre-change states */ undoCheckpointManager?: AgentUndoCheckpointManager; } @@ -404,6 +406,7 @@ export function createAgentTools(params: CreateToolsParams) { pendingApprovals, getAnthropicClient, webAccessPreapproved, + shellApprovalRuleStore, undoCheckpointManager, } = params; @@ -496,7 +499,7 @@ export function createAgentTools(params: CreateToolsParams) { // Shell Tools (3 tools) [BASH_TOOL_NAME]: createBashTool( - getWrappedExecute(BASH_TOOL_NAME, createBashExecute(projectPath)) + getWrappedExecute(BASH_TOOL_NAME, createBashExecute(projectPath, eventHandler, pendingApprovals, shellApprovalRuleStore)) ), [KILL_TASK_TOOL_NAME]: createKillTaskTool( getWrappedExecute(KILL_TASK_TOOL_NAME, createKillTaskExecute()) diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/chat-history-manager.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/chat-history-manager.ts index 69036e39018..0979f5a79ff 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/chat-history-manager.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/chat-history-manager.ts @@ -50,7 +50,7 @@ export interface SessionMetadata { sessionVersion?: number; } -export const TOOL_USE_INTERRUPTION_CONTEXT = `The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the new_string was NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.`; +export const TOOL_USE_INTERRUPTION_CONTEXT = `The user doesn't want to proceed with this tool use. The tool use was rejected (eg. if it was a file edit, the patch hunks were NOT written to the file). STOP what you are doing and wait for the user to tell you how to proceed.`; /** * Session summary for UI list display @@ -78,7 +78,7 @@ export interface GroupedSessions { * Session storage version for compatibility checks. * Increase this only when introducing breaking changes to persisted session data. */ -export const SESSION_STORAGE_VERSION = 1; +export const SESSION_STORAGE_VERSION = 1.0; /** * JSONL entry format (Claude Code style). diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/connector_db.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/connector_db.ts index fc23ad959c1..8dfe79036c5 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/connector_db.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/connector_db.ts @@ -24,93 +24,1008 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-ai", + "id": "", "version": { - "tagName": "0.1.5", - "releaseId": "220614930", + "tagName": "0.1.8", + "releaseId": "236147369", "isLatest": true, "isDeprecated": false, "operations": [ - { - "name": "chat", - "description": "Invoke a LLM service.", - "isHidden": false - }, { "name": "ragChat", - "description": "Invoke RAG.", - "isHidden": false + "description": "RAG Chat Completion", + "isHidden": false, + "parameters": [ + { + "name": "embeddingConfigKey", + "type": "connection", + "required": true, + "description": "Embedding model connection to be used", + "defaultValue": "" + }, + { + "name": "embeddingModel", + "type": "combo", + "required": true, + "description": "Select the splitting strategy Supported values: text-embedding-3-small, text-embedding-3-large, text-embedding-ada-002", + "defaultValue": "text-embedding-3-small" + }, + { + "name": "frequencyPenalty", + "type": "string", + "required": false, + "description": "Controls repetition: lower value results in less repetition", + "defaultValue": "0" + }, + { + "name": "llmConfigKey", + "type": "connection", + "required": true, + "description": "LLM service connection to be used", + "defaultValue": "" + }, + { + "name": "maxHistory", + "type": "string", + "required": false, + "description": "Maximum chat history to use", + "defaultValue": "10" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results to be returned", + "defaultValue": "5" + }, + { + "name": "maxTokens", + "type": "string", + "required": false, + "description": "Maximum number of tokens to generate", + "defaultValue": "4069" + }, + { + "name": "memoryConfigKey", + "type": "connection", + "required": false, + "description": "Memory connection to be used", + "defaultValue": "" + }, + { + "name": "minScore", + "type": "stringOrExpression", + "required": false, + "description": "Minimum score to be considered as a valid result", + "defaultValue": "0.75" + }, + { + "name": "modelName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the model to use", + "defaultValue": "gpt-4o" + }, + { + "name": "outputType", + "type": "combo", + "required": true, + "description": "Define type of the output Supported values: string, integer, float, boolean", + "defaultValue": "string" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "prompt", + "type": "expressionTextArea", + "required": true, + "description": "Query the LLM", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "seed", + "type": "string", + "required": false, + "description": "Seed", + "defaultValue": "" + }, + { + "name": "sessionId", + "type": "stringOrExpression", + "required": true, + "description": "Provide a unique identifier for the session.", + "defaultValue": "" + }, + { + "name": "system", + "type": "expressionTextArea", + "required": false, + "description": "Give instructions to LLM", + "defaultValue": "" + }, + { + "name": "temperature", + "type": "string", + "required": false, + "description": "Controls randomness: lower temperature results in less randomness", + "defaultValue": "0.7" + }, + { + "name": "topP", + "type": "string", + "required": false, + "description": "Controls diversity: lower value results in more diversity", + "defaultValue": "1" + }, + { + "name": "vectorStoreConfigKey", + "type": "connection", + "required": true, + "description": "Vector store connection to be used", + "defaultValue": "" + } + ] }, { - "name": "agent", - "description": "Create an AI agent.", - "isHidden": false + "name": "chat", + "description": "Chat Completion", + "isHidden": false, + "parameters": [ + { + "name": "attachments", + "type": "expressionTextArea", + "required": false, + "description": "Attach additional data or context to enhance the LLM's response. The attachments should be in the format [{\"type\":\"application/pdf\", \"content\":\"base64 content\"}]. The supported types are: application/pdf, image/png, image/jpeg, text/plain, text/html, text/csv, text/xml. The content should be base64 encoded.", + "defaultValue": "" + }, + { + "name": "frequencyPenalty", + "type": "string", + "required": false, + "description": "Reduce repetition in the response: higher values discourage repeated phrases.", + "defaultValue": "0" + }, + { + "name": "llmConfigKey", + "type": "connection", + "required": true, + "description": "Select the LLM service connection to be used for processing requests.", + "defaultValue": "" + }, + { + "name": "maxHistory", + "type": "string", + "required": false, + "description": "Set the maximum number of previous messages to include in the context.", + "defaultValue": "10" + }, + { + "name": "maxTokens", + "type": "string", + "required": false, + "description": "Define the maximum number of tokens the LLM can generate in the response.", + "defaultValue": "4069" + }, + { + "name": "memoryConfigKey", + "type": "connection", + "required": false, + "description": "Choose the memory connection to store and retrieve chat history.", + "defaultValue": "" + }, + { + "name": "modelName", + "type": "stringOrExpression", + "required": true, + "description": "Specify the name of the model to use for generating responses.", + "defaultValue": "gpt-4o" + }, + { + "name": "outputType", + "type": "combo", + "required": true, + "description": "Select the data type for the output generated by the LLM. Supported values: string, integer, float, boolean", + "defaultValue": "string" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "prompt", + "type": "expressionTextArea", + "required": true, + "description": "Enter the query or prompt to send to the LLM for processing.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "seed", + "type": "string", + "required": false, + "description": "Set a seed value for deterministic outputs when randomness is involved.", + "defaultValue": "" + }, + { + "name": "sessionId", + "type": "stringOrExpression", + "required": true, + "description": "Provide a unique identifier for the session.", + "defaultValue": "" + }, + { + "name": "system", + "type": "expressionTextArea", + "required": false, + "description": "Provide instructions or guidelines for the LLM to follow during the conversation.", + "defaultValue": "" + }, + { + "name": "temperature", + "type": "string", + "required": false, + "description": "Adjust the randomness of the response: lower values produce more deterministic results.", + "defaultValue": "0.7" + }, + { + "name": "topP", + "type": "string", + "required": false, + "description": "Control the diversity of the response: lower values result in more focused outputs.", + "defaultValue": "1" + } + ] }, { "name": "addToKnowledge", - "description": "Add text and its embeddings to a selected vector store.", - "isHidden": false + "description": "Ingest documents to the vector store", + "isHidden": false, + "parameters": [ + { + "name": "embeddingConfigKey", + "type": "connection", + "required": true, + "description": "Choose the AI service connection for generating embeddings.", + "defaultValue": "" + }, + { + "name": "embeddingModel", + "type": "combo", + "required": true, + "description": "Select the embedding model to generate vector representations. Supported values: text-embedding-3-small, text-embedding-3-small, text-embedding-ada-002", + "defaultValue": "text-embedding-3-small" + }, + { + "name": "input", + "type": "stringOrExpression", + "required": true, + "description": "Provide the input data to be processed.", + "defaultValue": "" + }, + { + "name": "maxOverlapSize", + "type": "stringOrExpression", + "required": false, + "description": "Specify the maximum overlap size (in tokens) between segments.", + "defaultValue": "200" + }, + { + "name": "maxSegmentSize", + "type": "stringOrExpression", + "required": false, + "description": "Specify the maximum size (in tokens) for each segment.", + "defaultValue": "1000" + }, + { + "name": "needEmbedding", + "type": "checkbox", + "required": false, + "description": "Enable this option to generate embeddings for the input.", + "defaultValue": "True" + }, + { + "name": "needParse", + "type": "checkbox", + "required": false, + "description": "Enable this option if the input needs to be parsed into text.", + "defaultValue": "True" + }, + { + "name": "needSplit", + "type": "checkbox", + "required": false, + "description": "Enable this option if the input needs to be split into smaller segments.", + "defaultValue": "True" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "parseType", + "type": "combo", + "required": true, + "description": "Select the format of the input content to parse it correctly. Supported values: pdf-to-text, markdown-to-text, html-to-text, doc-to-text, docx-to-text, xls-to-text, xlsx-to-text, ppt-to-text, pptx-to-text", + "defaultValue": "pdf-to-text" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "splitStrategy", + "type": "combo", + "required": true, + "description": "Choose the strategy for splitting the input into segments. Supported values: Recursive, ByParagraph, BySentence", + "defaultValue": "Recursive" + }, + { + "name": "vectorStoreConfigKey", + "type": "connection", + "required": true, + "description": "Select the vector store connection to store and retrieve embeddings.", + "defaultValue": "" + } + ] }, { "name": "getFromKnowledge", - "description": "Search for similar texts in a selected vector store.", - "isHidden": false + "description": "Search the vector store", + "isHidden": false, + "parameters": [ + { + "name": "embeddingConfigKey", + "type": "connection", + "required": true, + "description": "Choose the AI service connection for embedding generation.", + "defaultValue": "" + }, + { + "name": "embeddingModel", + "type": "combo", + "required": true, + "description": "Select the embedding model to use for processing the input. Supported values: text-embedding-3-small, text-embedding-3-small, text-embedding-ada-002", + "defaultValue": "text-embedding-3-small" + }, + { + "name": "input", + "type": "stringOrExpression", + "required": true, + "description": "Provide the input text or query to search in the vector store.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Specify the maximum number of results to return.", + "defaultValue": "5" + }, + { + "name": "minScore", + "type": "stringOrExpression", + "required": false, + "description": "Set the minimum score threshold for valid results.", + "defaultValue": "0.75" + }, + { + "name": "needEmbedding", + "type": "checkbox", + "required": false, + "description": "Check this box if the input needs to be embedded.", + "defaultValue": "True" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "vectorStoreConfigKey", + "type": "connection", + "required": true, + "description": "Select the vector store connection to retrieve data from.", + "defaultValue": "" + } + ] + }, + { + "name": "agent", + "description": "AI Agent", + "isHidden": false, + "parameters": [ + { + "name": "attachments", + "type": "expressionTextArea", + "required": false, + "description": "Attach additional data or context to enhance the LLM's response. The attachments should be in the format [{\"type\":\"application/pdf\", \"content\":\"base64 content\"}]. The supported types are: application/pdf, image/png, image/jpeg, text/plain, text/html, text/csv, text/xml. The content should be base64 encoded.", + "defaultValue": "" + }, + { + "name": "frequencyPenalty", + "type": "string", + "required": false, + "description": "Reduce repetition in responses: higher values discourage repeated phrases.", + "defaultValue": "0" + }, + { + "name": "instructions", + "type": "expressionTextArea", + "required": false, + "description": "Provide specific instructions or guidelines for the LLM to follow.", + "defaultValue": "" + }, + { + "name": "llmConfigKey", + "type": "connection", + "required": true, + "description": "Select the LLM service connection to be used for processing queries.", + "defaultValue": "" + }, + { + "name": "maxHistory", + "type": "string", + "required": false, + "description": "Set the maximum number of previous messages to include in the context.", + "defaultValue": "10" + }, + { + "name": "maxTokens", + "type": "string", + "required": false, + "description": "Specify the maximum number of tokens to generate in the response.", + "defaultValue": "4069" + }, + { + "name": "memoryConfigKey", + "type": "connection", + "required": false, + "description": "Choose the memory connection to store and retrieve chat history or context.", + "defaultValue": "" + }, + { + "name": "modelName", + "type": "stringOrExpression", + "required": true, + "description": "Specify the name of the LLM model to be used for generating responses.", + "defaultValue": "gpt-4o" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "prompt", + "type": "expressionTextArea", + "required": true, + "description": "Enter the query or prompt to be processed by the LLM.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "role", + "type": "string", + "required": false, + "description": "Define the role or persona of the agent (e.g., AI Assistant).", + "defaultValue": "" + }, + { + "name": "seed", + "type": "string", + "required": false, + "description": "Set a seed value for deterministic outputs (useful for debugging).", + "defaultValue": "" + }, + { + "name": "sessionId", + "type": "stringOrExpression", + "required": true, + "description": "Provide a unique identifier for the session.", + "defaultValue": "" + }, + { + "name": "temperature", + "type": "string", + "required": false, + "description": "Adjust the randomness of the response: lower values produce more deterministic outputs.", + "defaultValue": "0.7" + }, + { + "name": "toolExecutionTimeout", + "type": "string", + "required": false, + "description": "Specify the maximum time (in seconds) allowed for tool execution.", + "defaultValue": "10" + }, + { + "name": "topP", + "type": "string", + "required": false, + "description": "Control response diversity: lower values result in more focused outputs.", + "defaultValue": "1" + } + ] } ], "connections": [ { - "name": "ANTHROPIC", - "description": "Connection for interacting with the Anthropic AI service.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_ANTHROPIC.svg" + "name": "POSTGRES_VECTOR", + "description": "PGVector Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_POSTGRES_VECTOR.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "A name for the vector store connection", + "defaultValue": "POSTGRES_VECTOR" + }, + { + "name": "database", + "type": "stringOrExpression", + "required": true, + "description": "The name of the database", + "defaultValue": "postgres" + }, + { + "name": "dimension", + "type": "stringOrExpression", + "required": true, + "description": "Give the dimension of the embeddings", + "defaultValue": "1536" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "The host name of the database server", + "defaultValue": "localhost" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": false, + "description": "The password to connect to the database", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port number of the database server", + "defaultValue": "5432" + }, + { + "name": "table", + "type": "stringOrExpression", + "required": true, + "description": "The table name", + "defaultValue": "mi" + }, + { + "name": "user", + "type": "stringOrExpression", + "required": true, + "description": "The user name to connect to the database", + "defaultValue": "" + } + ] }, { - "name": "AZURE_OPEN_AI", - "description": "Connection for interacting with the Azure OpenAI service.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_AZURE_OPEN_AI.svg" + "name": "PINECONE", + "description": "Pinecone connection config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_PINECONE.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "Pinecone Key", + "defaultValue": "" + }, + { + "name": "cloud", + "type": "stringOrExpression", + "required": true, + "description": "Give the cloud", + "defaultValue": "AWS" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "A name for the vector store connection", + "defaultValue": "PINECONE" + }, + { + "name": "dimension", + "type": "stringOrExpression", + "required": true, + "description": "Give the dimension of the embeddings", + "defaultValue": "1536" + }, + { + "name": "index", + "type": "stringOrExpression", + "required": true, + "description": "Give the index", + "defaultValue": "wso2-mi" + }, + { + "name": "namespace", + "type": "stringOrExpression", + "required": false, + "description": "Give the namespace", + "defaultValue": "ai" + }, + { + "name": "region", + "type": "stringOrExpression", + "required": true, + "description": "Give the region", + "defaultValue": "us-east-1" + } + ] }, { - "name": "MISTRAL_AI", - "description": "Connection for interacting with the MistralAI service.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_MISTRAL_AI.svg" + "name": "MI_VECTOR_STORE", + "description": "MI Registry Vector Store", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_MI_VECTOR_STORE.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "A name for the vector store connection", + "defaultValue": "MI_VECTOR_STORE_1" + } + ] }, { - "name": "DEEPSEEK", - "description": "Connection for interacting with the DeepSeek service.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_DEEPSEEK.svg" + "name": "AZURE_OPEN_AI", + "description": "Azure OpenAI Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_AZURE_OPEN_AI.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "Azure OpenAI Key", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Azure OpenAI connection", + "defaultValue": "AZURE_OPEN_AI_CONNECTION" + }, + { + "name": "deploymentName", + "type": "stringOrExpression", + "required": true, + "description": "Azure deployment name", + "defaultValue": "" + }, + { + "name": "endpoint", + "type": "stringOrExpression", + "required": true, + "description": "Azure endpoint", + "defaultValue": "" + } + ] }, { "name": "OPEN_AI", - "description": "Connection for interacting with the OpenAI service.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_OPEN_AI.svg" + "description": "OpenAI Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_OPEN_AI.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "OpenAI Key", + "defaultValue": "" + }, + { + "name": "baseUrl", + "type": "stringOrExpression", + "required": false, + "description": "Base url", + "defaultValue": "https://api.openai.com/v1" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the OpenAI connection", + "defaultValue": "OPEN_AI_CONNECTION" + } + ] }, { - "name": "MI_VECTOR_STORE", - "description": "Connection for interacting with the MI In-Registry vector store.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_MI_VECTOR_STORE.svg" + "name": "MISTRAL_AI", + "description": "MistralAI Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_MISTRAL_AI.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "MistralAI Key", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the MistralAI connection", + "defaultValue": "MISTRAL_AI_CONNECTION_1" + } + ] }, { - "name": "PINECONE", - "description": "Connection for interacting with the Pinecone vector store.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_PINECONE.svg" + "name": "ANTHROPIC", + "description": "Anthropic Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_ANTHROPIC.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "Anthropic Key", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Anthropic connection", + "defaultValue": "ANTHROPIC_CONNECTION" + } + ] }, { - "name": "POSTGRES_VECTOR", - "description": "Connection for interacting with the PostgreSQL vector database.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_POSTGRES_VECTOR.svg" + "name": "DEEPSEEK", + "description": "DEEPSEEK Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_DEEPSEEK.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "Deepseek API Key", + "defaultValue": "" + }, + { + "name": "baseUrl", + "type": "stringOrExpression", + "required": false, + "description": "Base Url", + "defaultValue": "https://api.deepseek.com" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the DEEPSEEK connection", + "defaultValue": "DEEPSEEK_CONNECTION" + } + ] }, { - "name": "CHROMA_DB", - "description": "Connection for interacting with the ChromaDB vector database.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_CHROMA_DB.svg" + "name": "FILE_MEMORY", + "description": "File-Based Memory Store Configuration", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_FILE_MEMORY.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "Specify a unique name for the file-based memory store connection", + "defaultValue": "FILE_MEMORY_CONN" + } + ] }, { "name": "POSTGRES_MEMORY", - "description": "Connection for interacting with the PostgreSQL memory database.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_POSTGRES_MEMORY.svg" + "description": "POSTGRES Memory Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_POSTGRES_MEMORY.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "A name for the vector store connection", + "defaultValue": "POSTGRES_MEMORY" + }, + { + "name": "database", + "type": "stringOrExpression", + "required": true, + "description": "The name of the database", + "defaultValue": "postgres" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "The host name of the database server", + "defaultValue": "localhost" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": false, + "description": "The password to connect to the database", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port number of the database server", + "defaultValue": "5432" + }, + { + "name": "table", + "type": "stringOrExpression", + "required": true, + "description": "The table name", + "defaultValue": "mi" + }, + { + "name": "user", + "type": "stringOrExpression", + "required": true, + "description": "The user name to connect to the database", + "defaultValue": "" + } + ] }, { - "name": "FILE_MEMORY", - "description": "Connection for interacting with the file-based memory.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_FILE_MEMORY.svg" + "name": "CHROMA_DB", + "description": "ChromaDB Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-module-generative-ai_CHROMA_DB.svg", + "parameters": [ + { + "name": "collection", + "type": "string", + "required": true, + "description": "The collection name in the ChromaDB server", + "defaultValue": "WSO2-MI" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "A name for the vector store connection", + "defaultValue": "CHROMA_DB" + }, + { + "name": "url", + "type": "string", + "required": true, + "description": "The base URL of the ChromaDB server", + "defaultValue": "http://localhost:8000/" + } + ] + }, + { + "name": "MCP", + "description": "MCP (Model Context Protocol) Server Connection Config", + "iconUrl": "", + "parameters": [ + { + "name": "authenticationType", + "type": "combo", + "required": true, + "description": "Authentication method for the MCP server (None or Bearer Token)", + "defaultValue": "None" + }, + { + "name": "bearerToken", + "type": "stringOrExpression", + "required": false, + "description": "Bearer token for authentication (required when authentication type is Bearer Token)", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "A unique name for the MCP server connection", + "defaultValue": "MCP_CONNECTION" + }, + { + "name": "connectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "Connection establishment timeout in milliseconds", + "defaultValue": "5000" + }, + { + "name": "customHeaders", + "type": "expressionTextArea", + "required": false, + "description": "Additional HTTP headers in key:value format (one per line). Example: Content-Type:application/json", + "defaultValue": "" + }, + { + "name": "maxConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of concurrent connections to the MCP server", + "defaultValue": "10" + }, + { + "name": "mcpServerUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the MCP server endpoint (e.g., https://api.example.com/mcp/)", + "defaultValue": "" + }, + { + "name": "socketTimeout", + "type": "stringOrExpression", + "required": false, + "description": "Socket read/write timeout in milliseconds", + "defaultValue": "30000" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Connection timeout in milliseconds", + "defaultValue": "30000" + } + ] } ] }, @@ -125,174 +1040,1005 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-amazondynamodb", + "id": "", "version": { - "tagName": "2.0.0", - "releaseId": "226990592", + "tagName": "2.0.1", + "releaseId": "230352596", "isLatest": true, "isDeprecated": false, "operations": [ { "name": "putItem", "description": "Put Item", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "conditionalOperator", + "type": "comboOrExpression", + "required": false, + "description": "Logical operator to apply to conditions in the Expected map. Default is AND if not specified.", + "defaultValue": "" + }, + { + "name": "conditionExpression", + "type": "stringOrExpression", + "required": false, + "description": "A condition that must be satisfied for the operation to succeed. The operation fails if the condition evaluates to false. Example: \"attribute_not_exists(id)\"", + "defaultValue": "" + }, + { + "name": "expected", + "type": "stringOrExpression", + "required": false, + "description": "A map of attribute/condition pairs. Cannot be used with ConditionExpression. Example: {\"attr1\":{\"Value\":{\"S\":\"val1\"},\"ComparisonOperator\":\"EQ\"}}", + "defaultValue": "" + }, + { + "name": "expressionAttributeNames", + "type": "stringOrExpression", + "required": false, + "description": "Name substitution tokens for attribute names in an expression. Maps placeholder names to actual attribute names. Example: {\"#n\":\"name\",\"#t\":\"timestamp\"}", + "defaultValue": "" + }, + { + "name": "expressionAttributeValues", + "type": "stringOrExpression", + "required": false, + "description": "Value substitution tokens for expressions. Maps placeholder values to actual attribute values. Example: {\":val1\":{\"S\":\"value1\"},\":val2\":{\"N\":\"123\"}}", + "defaultValue": "" + }, + { + "name": "item", + "type": "stringOrExpression", + "required": true, + "description": "A map of attribute name/value pairs representing the item to create or replace. Each value must be a DynamoDB data type. Example: {\"id\":{\"S\":\"123\"},\"name\":{\"S\":\"John\"}}", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnConsumedCapacity", + "type": "comboOrExpression", + "required": false, + "description": "Determines the level of detail about provisioned throughput consumption to return. TOTAL returns consumption for table and indexes, INDEXES returns consumption for indexes, NONE returns nothing.", + "defaultValue": "" + }, + { + "name": "returnItemCollectionMetrics", + "type": "comboOrExpression", + "required": false, + "description": "Determines whether item collection metrics are returned. SIZE returns statistics about the item sizes, NONE returns no statistics.", + "defaultValue": "" + }, + { + "name": "returnValues", + "type": "comboOrExpression", + "required": false, + "description": "Use NONE if you don't want item attributes returned, or ALL_OLD to get the item attributes as they appeared before they were modified.", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table to contain the item. Must be between 3 and 255 characters.", + "defaultValue": "" + } + ] }, { "name": "describeTable", "description": "Describe Table", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table to describe (minimum length: 3, maximum length: 255)", + "defaultValue": "" + } + ] }, { "name": "describeLimits", "description": "Describe Limits", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "listTables", "description": "List Tables", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "exclusiveStartTableName", + "type": "stringOrExpression", + "required": false, + "description": "The first table name that this operation will evaluate. Use the value returned for LastEvaluatedTableName in a previous operation", + "defaultValue": "" + }, + { + "name": "limit", + "type": "stringOrExpression", + "required": false, + "description": "A maximum number of table names to return. If this parameter is not specified, the limit is 100", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "deleteItem", "description": "Delete Item", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "conditionalOperator", + "type": "comboOrExpression", + "required": false, + "description": "Logical operator to apply to conditions in the Expected map. Default is AND if not specified.", + "defaultValue": "" + }, + { + "name": "conditionExpression", + "type": "stringOrExpression", + "required": false, + "description": "A condition that must be satisfied for the operation to succeed. The delete operation only succeeds if the condition evaluates to true. Example: \"attribute_exists(#status)\"", + "defaultValue": "" + }, + { + "name": "expected", + "type": "stringOrExpression", + "required": false, + "description": "A map of attribute/condition pairs. Cannot be used with ConditionExpression. Example: {\"attr1\":{\"Value\":{\"S\":\"val1\"},\"ComparisonOperator\":\"EQ\"}}", + "defaultValue": "" + }, + { + "name": "expressionAttributeNames", + "type": "stringOrExpression", + "required": false, + "description": "Name substitution tokens for attribute names in an expression. Maps placeholder names to actual attribute names. Example: {\"#n\":\"name\",\"#t\":\"timestamp\"}", + "defaultValue": "" + }, + { + "name": "expressionAttributeValues", + "type": "stringOrExpression", + "required": false, + "description": "Value substitution tokens for expressions. Maps placeholder values to actual attribute values. Example: {\":val1\":{\"S\":\"value1\"},\":val2\":{\"N\":\"123\"}}", + "defaultValue": "" + }, + { + "name": "key", + "type": "stringOrExpression", + "required": true, + "description": "Primary key attribute values for the item to delete. Must be a JSON object where keys are attribute names and values are attribute values in DynamoDB format. Example: {\"id\":{\"S\":\"123\"}}", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnConsumedCapacity", + "type": "comboOrExpression", + "required": false, + "description": "Determines the level of detail about provisioned throughput consumption to return. TOTAL returns consumption for table and indexes, INDEXES returns consumption for indexes, NONE returns nothing.", + "defaultValue": "" + }, + { + "name": "returnItemCollectionMetrics", + "type": "comboOrExpression", + "required": false, + "description": "Determines whether item collection metrics are returned. SIZE returns statistics about the item sizes, NONE returns no statistics.", + "defaultValue": "" + }, + { + "name": "returnValues", + "type": "comboOrExpression", + "required": false, + "description": "Use NONE if you don't want item attributes returned, or ALL_OLD to get the item attributes as they appeared before they were deleted.", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table from which to delete the item. Must be between 3 and 255 characters.", + "defaultValue": "" + } + ] }, { "name": "updateTable", "description": "Update Table", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "attributeDefinitions", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of attributes that describe the key schema for the table and indexes. Optional parameter", + "defaultValue": "" + }, + { + "name": "globalSecondaryIndexUpdates", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of global secondary index updates. Optional parameter", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "provisionedThroughput", + "type": "stringOrExpression", + "required": false, + "description": "New provisioned throughput settings. Format: {\"ReadCapacityUnits\":number,\"WriteCapacityUnits\":number}", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "StreamSpecification", + "type": "stringOrExpression", + "required": false, + "description": "DynamoDB streams configuration for the table. Optional parameter", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table to update (minimum length: 3, maximum length: 255)", + "defaultValue": "" + } + ] }, { "name": "batchGetItem", "description": "Batch Get Item", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requestItems", + "type": "stringOrExpression", + "required": true, + "description": "A map of one or more table names and, for each table, a map that describes one or more items to retrieve from that table. Each table name can be included only once per BatchGetItem request. Example: {\"Table1\":{\"Keys\":[{\"id\":{\"S\":\"123\"}}]},\"Table2\":{\"Keys\":[{\"pk\":{\"S\":\"abc\"}}]}}", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnConsumedCapacity", + "type": "comboOrExpression", + "required": false, + "description": "Determines the level of detail about provisioned throughput consumption to return. TOTAL returns consumption for table and indexes, INDEXES returns consumption for indexes, NONE returns nothing.", + "defaultValue": "" + } + ] }, { "name": "batchWriteItem", "description": "Batch Write Item", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requestItems", + "type": "stringOrExpression", + "required": true, + "description": "JSON map of table names and list of operations to perform. Format: {\"TableName\":[{\"PutRequest\":{\"Item\":{...}}}]}", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnConsumedCapacity", + "type": "comboOrExpression", + "required": false, + "description": "Determines the level of detail about provisioned throughput consumption. Optional parameter", + "defaultValue": "" + }, + { + "name": "returnItemCollectionMetrics", + "type": "comboOrExpression", + "required": false, + "description": "Determines whether item collection metrics are returned. Optional parameter", + "defaultValue": "" + } + ] }, { "name": "getItem", "description": "Get Item", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "attributesToGet", + "type": "stringOrExpression", + "required": false, + "description": "List of one or more attributes to retrieve from the table. If not provided, then all attributes will be returned. Cannot be used with ProjectionExpression. Example: [\"attr1\",\"attr2\"]", + "defaultValue": "" + }, + { + "name": "consistentRead", + "type": "comboOrExpression", + "required": false, + "description": "Determines the read consistency model. If set to true, the operation uses strongly consistent reads; otherwise, the operation uses eventually consistent reads.", + "defaultValue": "" + }, + { + "name": "expressionAttributeNames", + "type": "stringOrExpression", + "required": false, + "description": "Name substitution tokens for attribute names in an expression. Maps placeholder names to actual attribute names. Example: {\"#n\":\"name\",\"#t\":\"timestamp\"}", + "defaultValue": "" + }, + { + "name": "key", + "type": "stringOrExpression", + "required": true, + "description": "Primary key attribute values for the item. Must be a JSON object where keys are attribute names and values are attribute values in DynamoDB format. Example: {\"id\":{\"S\":\"123\"}}", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectionExpression", + "type": "stringOrExpression", + "required": false, + "description": "String that identifies the attributes to retrieve from the table. Cannot be used with AttributesToGet. Example: \"attr1, attr2.nestedAttr\"", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnConsumedCapacity", + "type": "comboOrExpression", + "required": false, + "description": "Determines the level of detail about provisioned throughput consumption to return. TOTAL returns consumption for table and indexes, INDEXES returns consumption for indexes, NONE returns nothing.", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table containing the requested item. Must be between 3 and 255 characters.", + "defaultValue": "" + } + ] }, { "name": "scan", "description": "Scan", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "attributesToGet", + "type": "stringOrExpression", + "required": false, + "description": "Legacy parameter for attribute selection. Use ProjectionExpression instead. Optional parameter", + "defaultValue": "" + }, + { + "name": "conditionalOperator", + "type": "comboOrExpression", + "required": false, + "description": "Logical operator to apply to the conditions in ScanFilter. Optional parameter", + "defaultValue": "" + }, + { + "name": "consistentRead", + "type": "comboOrExpression", + "required": false, + "description": "Determines the read consistency model during the scan. Optional parameter", + "defaultValue": "" + }, + { + "name": "exclusiveStartKey", + "type": "stringOrExpression", + "required": false, + "description": "Primary key of the first item that this operation will evaluate. Optional parameter", + "defaultValue": "" + }, + { + "name": "expressionAttributeNames", + "type": "stringOrExpression", + "required": false, + "description": "One or more substitution tokens for attribute names in an expression. Optional parameter", + "defaultValue": "" + }, + { + "name": "expressionAttributeValues", + "type": "stringOrExpression", + "required": false, + "description": "One or more values that can be substituted in an expression. Optional parameter", + "defaultValue": "" + }, + { + "name": "filterExpression", + "type": "stringOrExpression", + "required": false, + "description": "A string that contains conditions that DynamoDB applies after the scan operation, but before the data is returned. Items that do not satisfy the criteria are not returned. Example: \"#status = :val\"", + "defaultValue": "" + }, + { + "name": "indexName", + "type": "stringOrExpression", + "required": false, + "description": "The name of a secondary index to scan. This can be any local secondary index or global secondary index on the table.", + "defaultValue": "" + }, + { + "name": "limit", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of items to evaluate (not necessarily returned). Optional parameter", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectionExpression", + "type": "stringOrExpression", + "required": false, + "description": "String that identifies one or more attributes to retrieve from the table. Optional parameter", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnConsumedCapacity", + "type": "comboOrExpression", + "required": false, + "description": "Determines the level of detail about provisioned throughput consumption. Optional parameter", + "defaultValue": "" + }, + { + "name": "scanFilter", + "type": "stringOrExpression", + "required": false, + "description": "Legacy parameter for filtering. Use FilterExpression instead. Optional parameter", + "defaultValue": "" + }, + { + "name": "segment", + "type": "stringOrExpression", + "required": false, + "description": "Individual segment to be scanned by an application worker (for parallel scan). Optional parameter", + "defaultValue": "" + }, + { + "name": "select", + "type": "comboOrExpression", + "required": false, + "description": "Attributes to be returned in the result. Optional parameter", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table to scan. Must be between 3 and 255 characters.", + "defaultValue": "" + }, + { + "name": "totalSegments", + "type": "stringOrExpression", + "required": false, + "description": "Total number of segments into which the scan operation will be divided. Optional parameter", + "defaultValue": "" + } + ] }, { "name": "updateItem", "description": "Update Item", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "attributeUpdates", + "type": "stringOrExpression", + "required": false, + "description": "Map of attribute names and their corresponding actions to perform. Cannot be used with UpdateExpression. Example: {\"attr1\":{\"Action\":\"PUT\",\"Value\":{\"S\":\"newValue\"}}}", + "defaultValue": "" + }, + { + "name": "conditionalOperator", + "type": "comboOrExpression", + "required": false, + "description": "Logical operator to apply to conditions in the expected map. Optional parameter", + "defaultValue": "" + }, + { + "name": "conditionExpression", + "type": "stringOrExpression", + "required": false, + "description": "A condition that must be satisfied for the operation to succeed. The update operation only succeeds if the condition evaluates to true. Example: \"attribute_exists(#status)\"", + "defaultValue": "" + }, + { + "name": "expected", + "type": "stringOrExpression", + "required": false, + "description": "JSON map of attribute/condition pairs for conditional operations. Optional parameter", + "defaultValue": "" + }, + { + "name": "expressionAttributeNames", + "type": "stringOrExpression", + "required": false, + "description": "JSON map for substitution tokens for attribute names. Format: {\"#name\":\"ActualAttributeName\"}. Optional parameter", + "defaultValue": "" + }, + { + "name": "expressionAttributeValues", + "type": "stringOrExpression", + "required": false, + "description": "JSON map for substitution values in expressions. Format: {\":val\":{\"S\":\"value\"}}. Optional parameter", + "defaultValue": "" + }, + { + "name": "key", + "type": "stringOrExpression", + "required": true, + "description": "Primary key attribute values for the item to update. Must be a JSON object where keys are attribute names and values are attribute values in DynamoDB format. Example: {\"id\":{\"S\":\"123\"}}", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnConsumedCapacity", + "type": "comboOrExpression", + "required": false, + "description": "Determines the level of detail about provisioned throughput consumption. Optional parameter", + "defaultValue": "" + }, + { + "name": "returnItemCollectionMetrics", + "type": "comboOrExpression", + "required": false, + "description": "Determines whether item collection metrics are returned. Optional parameter", + "defaultValue": "" + }, + { + "name": "returnValues", + "type": "comboOrExpression", + "required": false, + "description": "Use to get item attributes as they appeared before/after the update. Optional parameter", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table containing the item to update. Must be between 3 and 255 characters.", + "defaultValue": "" + }, + { + "name": "updateExpression", + "type": "stringOrExpression", + "required": false, + "description": "An expression that defines one or more attributes to be updated, the action to be performed on them, and new values for them. Example: \"SET #name = :val1, #status = :val2\"", + "defaultValue": "" + } + ] }, { "name": "deleteTable", "description": "Delete Table", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table to delete (minimum length: 3, maximum length: 255)", + "defaultValue": "" + } + ] }, { "name": "createTable", "description": "Create Table", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "attributeDefinitions", + "type": "stringOrExpression", + "required": true, + "description": "Array of attributes that describe the key schema for the table and indexes. Each element describes one attribute. Example: [{\"AttributeName\":\"id\",\"AttributeType\":\"S\"},{\"AttributeName\":\"timestamp\",\"AttributeType\":\"N\"}]", + "defaultValue": "" + }, + { + "name": "globalSecondaryIndexes", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of global secondary indexes (maximum: 5). Optional parameter", + "defaultValue": "" + }, + { + "name": "keySchema", + "type": "stringOrExpression", + "required": true, + "description": "Specifies the attributes that make up the primary key for the table. Must include one HASH (partition key) and optionally one RANGE (sort key). Example: [{\"AttributeName\":\"id\",\"KeyType\":\"HASH\"},{\"AttributeName\":\"timestamp\",\"KeyType\":\"RANGE\"}]", + "defaultValue": "" + }, + { + "name": "localSecondaryIndexes", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of local secondary indexes (maximum: 5). Optional parameter", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "provisionedThroughput", + "type": "stringOrExpression", + "required": true, + "description": "The provisioned throughput settings for the table. Defines the maximum number of reads and writes per second. Example: {\"ReadCapacityUnits\":5,\"WriteCapacityUnits\":5}", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "StreamSpecification", + "type": "stringOrExpression", + "required": false, + "description": "Settings for DynamoDB Streams on the table. Optional parameter", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table to create. Must be between 3 and 255 characters and unique for your AWS account in the current region.", + "defaultValue": "" + } + ] }, { "name": "query", "description": "Query", - "isHidden": false - }, - { - "name": "init", - "description": "Config operation with common parameters.", - "isHidden": true - }, - { - "name": "createTable", - "description": "Add a new table.", - "isHidden": false - }, - { - "name": "deleteTable", - "description": "Delete a table and all of its items.", - "isHidden": false - }, - { - "name": "describeLimits", - "description": "Get the current provisioned-capacity limits.", - "isHidden": false - }, - { - "name": "describeTable", - "description": "Get the information about the table.", - "isHidden": false - }, - { - "name": "listTables", - "description": "Get an array of table names.", - "isHidden": false - }, - { - "name": "updateTable", - "description": "Update the table.", - "isHidden": false - }, - { - "name": "batchGetItem", - "description": "Get the attributes of one or more items from one or more tables.", - "isHidden": false - }, - { - "name": "batchWriteItem", - "description": "Put or delete multiple items in one or more tables.", - "isHidden": false - }, - { - "name": "putItem", - "description": "Create a new item, or replace an old item with a new item.", - "isHidden": false - }, - { - "name": "deleteItem", - "description": "Delete a single item in a table by primary key.", - "isHidden": false - }, - { - "name": "getItem", - "description": "Get a set of attributes.", - "isHidden": false - }, - { - "name": "updateItem", - "description": "Update an existing item's attributes.", - "isHidden": false - }, - { - "name": "query", - "description": "Return all of the items from the table or index with that partition key value.", - "isHidden": false - }, - { - "name": "scan", - "description": "Returns one or more items and item attributes by accessing every item in a table or a secondary index.", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "attributesToGet", + "type": "stringOrExpression", + "required": false, + "description": "Legacy parameter for attributes to get. Use ProjectionExpression instead. Optional parameter", + "defaultValue": "" + }, + { + "name": "conditionalOperator", + "type": "comboOrExpression", + "required": false, + "description": "Logical operator to apply to the conditions in QueryFilter. Optional parameter", + "defaultValue": "" + }, + { + "name": "consistentRead", + "type": "comboOrExpression", + "required": false, + "description": "Determines the read consistency model. Optional parameter", + "defaultValue": "" + }, + { + "name": "exclusiveStartKey", + "type": "stringOrExpression", + "required": false, + "description": "Primary key of the first item that this operation will evaluate. Optional parameter", + "defaultValue": "" + }, + { + "name": "expressionAttributeNames", + "type": "stringOrExpression", + "required": false, + "description": "JSON map for substitution tokens for attribute names. Format: {\"#name\":\"ActualAttributeName\"}. Optional parameter", + "defaultValue": "" + }, + { + "name": "expressionAttributeValues", + "type": "stringOrExpression", + "required": false, + "description": "JSON map for substitution values in expressions. Format: {\":val\":{\"S\":\"value\"}}. Optional parameter", + "defaultValue": "" + }, + { + "name": "filterExpression", + "type": "stringOrExpression", + "required": false, + "description": "String that contains conditions that DynamoDB applies after the Query operation. Optional parameter", + "defaultValue": "" + }, + { + "name": "indexName", + "type": "stringOrExpression", + "required": false, + "description": "The name of a secondary index to query. This can be a global secondary index (GSI) or a local secondary index (LSI).", + "defaultValue": "" + }, + { + "name": "keyConditionExpression", + "type": "stringOrExpression", + "required": false, + "description": "Condition that specifies the key values for items to be retrieved. Must specify the partition key value and can optionally specify the sort key value. Example: \"id = :id AND #timestamp > :start\"", + "defaultValue": "" + }, + { + "name": "keyConditions", + "type": "stringOrExpression", + "required": false, + "description": "Legacy parameter for key conditions. Use KeyConditionExpression instead. Optional parameter", + "defaultValue": "" + }, + { + "name": "limit", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of items to evaluate (not necessarily returned). Optional parameter", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectionExpression", + "type": "stringOrExpression", + "required": false, + "description": "String that identifies attributes to retrieve. Optional parameter", + "defaultValue": "" + }, + { + "name": "queryFilter", + "type": "stringOrExpression", + "required": false, + "description": "Legacy parameter for filtering. Use FilterExpression instead. Optional parameter", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnConsumedCapacity", + "type": "comboOrExpression", + "required": false, + "description": "Determines the level of detail about provisioned throughput consumption. Optional parameter", + "defaultValue": "" + }, + { + "name": "scanIndexForward", + "type": "comboOrExpression", + "required": false, + "description": "Specifies the order for index traversal. Optional parameter", + "defaultValue": "" + }, + { + "name": "select", + "type": "comboOrExpression", + "required": false, + "description": "Attributes to be returned in the result. Optional parameter", + "defaultValue": "" + }, + { + "name": "tableName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the table containing the requested items. Must be between 3 and 255 characters.", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "amazondynamodb", "description": "Amazon DynamoDB Connection", - "iconUrl": "" - }, - { - "name": "amazondynamodb", - "description": "Connection for an Amazon DynamoDB", - "iconUrl": "" + "iconUrl": "", + "parameters": [ + { + "name": "accessKeyId", + "type": "stringOrExpression", + "required": true, + "description": "The AWS access key ID that corresponds to the secret access key. Used to sign requests to AWS services.", + "defaultValue": "" + }, + { + "name": "blocking", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to perform blocking invocations to Amazon DynamoDB. When true, the operation waits for a response before proceeding.", + "defaultValue": "false" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the DynamoDB connection", + "defaultValue": "DYNAMODB_CONNECTION_1" + }, + { + "name": "region", + "type": "stringOrExpression", + "required": true, + "description": "The AWS region where your DynamoDB resources are located. Example: us-east-1, us-west-2, eu-west-1", + "defaultValue": "" + }, + { + "name": "secretAccessKey", + "type": "stringOrExpression", + "required": true, + "description": "The AWS secret access key associated with your AWS account. Keep this secure and never share it publicly.", + "defaultValue": "" + } + ] } ] }, - "otherVersions": { - "1.0.2": "196760097" - }, + "otherVersions": {}, "connectorRank": 33, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-amazondynamodb.png" }, @@ -303,104 +2049,1005 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-amazonlambda", + "id": "", "version": { - "tagName": "2.0.0", - "releaseId": "226990139", + "tagName": "2.0.2", + "releaseId": "233268460", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "getAccountSettings", - "description": "Gets the settings of an account.", - "isHidden": false - }, - { - "name": "createAlias", - "description": "Create an alias for a lambda function version.", - "isHidden": false + "name": "removeLayerVersionPermission", + "description": "Remove Layer Version Permission", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionRemoveLayerVersionPermission", + "type": "stringOrExpression", + "required": false, + "description": "API version used for RemoveLayerVersionPermission method", + "defaultValue": "2015-03-31" + }, + { + "name": "layerName", + "type": "stringOrExpression", + "required": true, + "description": "The name or Amazon Resource Name (ARN) of the layer. For example: my-layer or arn:aws:lambda:us-east-1:123456789012:layer:my-layer", + "defaultValue": "" + }, + { + "name": "layerRevisionId", + "type": "stringOrExpression", + "required": false, + "description": "Only update the policy if the revision ID matches the ID that's specified. Use this to ensure that the policy hasn't changed since you last read it", + "defaultValue": "" + }, + { + "name": "layerStatementId", + "type": "stringOrExpression", + "required": true, + "description": "The identifier that was specified when the statement was added. This must match exactly the statement ID used when the permission was originally granted", + "defaultValue": "" + }, + { + "name": "layerVersionNumber", + "type": "stringOrExpression", + "required": true, + "description": "The version number of the layer from which to remove the permission", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Whether to replace the message body with the response from this operation", + "defaultValue": "true" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": false, + "description": "The name of the variable to store the response. If not specified, the response will be stored in the message body", + "defaultValue": "" + } + ] }, { - "name": "deleteAlias", - "description": "Deletes a Lambda function alias.", - "isHidden": false + "name": "deleteFunction", + "description": "Delete Function", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionDeleteFunction", + "type": "stringOrExpression", + "required": true, + "description": "API version for DeleteFunction method", + "defaultValue": "2015-03-31" + }, + { + "name": "deleteFunctionQualifier", + "type": "stringOrExpression", + "required": false, + "description": "Specify a version to delete. You can't delete a version that's referenced by an alias", + "defaultValue": "" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function to be deleted", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getAlias", - "description": "Returns details about a Lambda function alias.", - "isHidden": false + "name": "invoke", + "description": "Invoke Lambda Function", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionInvoke", + "type": "stringOrExpression", + "required": true, + "description": "API version for Invoke method", + "defaultValue": "2015-03-31" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": false, + "description": "The JSON that you want to provide to your Lambda function as input", + "defaultValue": "" + }, + { + "name": "qualifier", + "type": "stringOrExpression", + "required": false, + "description": "Specify a version or alias to invoke a published version of the function", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "x-amz-client-context", + "type": "stringOrExpression", + "required": false, + "description": "Up to 3583 bytes of base64-encoded data about the invoking client to pass to the function in the context object", + "defaultValue": "" + }, + { + "name": "x-amz-invocation-type", + "type": "combo", + "required": false, + "description": "Invocation type: RequestResponse (synchronous), Event (asynchronous), or DryRun (validation only) Supported values: RequestResponse, Event, DryRun", + "defaultValue": "RequestResponse" + }, + { + "name": "x-amz-log-type", + "type": "combo", + "required": false, + "description": "Set to Tail to include the execution log in the response Supported values: None, Tail", + "defaultValue": "None" + } + ] }, { - "name": "updateAlias", - "description": "Updates the configuration of a Lambda function alias.", - "isHidden": false + "name": "getFunction", + "description": "Get Function", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionGetFunction", + "type": "stringOrExpression", + "required": true, + "description": "API version for GetFunction method", + "defaultValue": "2015-03-31" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "qualifier", + "type": "stringOrExpression", + "required": false, + "description": "Specify a version or alias to get information about a specific version", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "init", - "description": "Config operations with common parameters.", - "isHidden": true + "name": "addPermission", + "description": "Add Permission", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionAddPermission", + "type": "stringOrExpression", + "required": true, + "description": "API version for AddPermission method", + "defaultValue": "2015-03-31" + }, + { + "name": "eventSourceToken", + "type": "stringOrExpression", + "required": false, + "description": "A unique token supplied by the principal invoking the function", + "defaultValue": "" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the Lambda function, version, or alias to which add a new permission", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "permissionAction", + "type": "stringOrExpression", + "required": true, + "description": "The AWS Lambda action to allow (e.g., lambda:InvokeFunction or lambda:GetFunction)", + "defaultValue": "" + }, + { + "name": "permissionPrincipal", + "type": "stringOrExpression", + "required": true, + "description": "The AWS service or account that invokes the function (e.g., s3.amazonaws.com)", + "defaultValue": "" + }, + { + "name": "permissionQualifier", + "type": "stringOrExpression", + "required": false, + "description": "Specify a version or alias to apply the permission to the specified function version", + "defaultValue": "" + }, + { + "name": "permissionRevisionId", + "type": "stringOrExpression", + "required": false, + "description": "Only update the policy if the revision ID matches the ID specified", + "defaultValue": "" + }, + { + "name": "permissionStatementId", + "type": "stringOrExpression", + "required": true, + "description": "A unique statement identifier that differentiates the statement from others in the same policy", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sourceAccount", + "type": "stringOrExpression", + "required": false, + "description": "The source account to limit who can invoke the function through the specified service", + "defaultValue": "" + }, + { + "name": "sourceArn", + "type": "stringOrExpression", + "required": false, + "description": "The ARN of the source to limit who can invoke the function through the specified service", + "defaultValue": "" + } + ] }, { - "name": "addPermission", - "description": "Grants an AWS service or another account permission to use a function.", - "isHidden": false + "name": "getAlias", + "description": "Get Alias", + "isHidden": false, + "parameters": [ + { + "name": "aliasName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the alias", + "defaultValue": "" + }, + { + "name": "apiVersionGetAlias", + "type": "stringOrExpression", + "required": true, + "description": "API version for GetAlias method", + "defaultValue": "2015-03-31" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function that the alias invokes", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createFunction", - "description": "Creates a lambda function.", - "isHidden": false + "name": "deleteAlias", + "description": "Delete Alias", + "isHidden": false, + "parameters": [ + { + "name": "aliasName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the alias to delete", + "defaultValue": "" + }, + { + "name": "apiVersionDeleteAlias", + "type": "stringOrExpression", + "required": true, + "description": "API version for DeleteAlias method", + "defaultValue": "2015-03-31" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function that the alias invokes", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteFunction", - "description": "Deletes a Lambda function.", - "isHidden": false + "name": "addLayerVersionPermission", + "description": "Add Layer Version Permission", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionAddLayerVersionPermission", + "type": "stringOrExpression", + "required": false, + "description": "API version used for AddLayerVersionPermission method", + "defaultValue": "2015-03-31" + }, + { + "name": "layerAction", + "type": "stringOrExpression", + "required": true, + "description": "The API action that grants access to the layer. Common values: lambda:GetLayerVersion", + "defaultValue": "lambda:GetLayerVersion" + }, + { + "name": "layerName", + "type": "stringOrExpression", + "required": true, + "description": "The name or Amazon Resource Name (ARN) of the layer. For example: my-layer or arn:aws:lambda:us-east-1:123456789012:layer:my-layer", + "defaultValue": "" + }, + { + "name": "layerOrganizationId", + "type": "stringOrExpression", + "required": false, + "description": "The organization ID (optional). Use this to restrict access to accounts within a specific AWS organization", + "defaultValue": "" + }, + { + "name": "layerPrincipal", + "type": "stringOrExpression", + "required": true, + "description": "An account ID, or * to grant permission to all AWS accounts. For example: 123456789012 or *", + "defaultValue": "" + }, + { + "name": "layerRevisionId", + "type": "stringOrExpression", + "required": false, + "description": "Only update the policy if the revision ID matches the ID that's specified. Use this to ensure that the policy hasn't changed since you last read it", + "defaultValue": "" + }, + { + "name": "layerStatementId", + "type": "stringOrExpression", + "required": true, + "description": "An identifier that distinguishes the policy from others on the same layer version. Must be unique within the layer version", + "defaultValue": "" + }, + { + "name": "layerVersionNumber", + "type": "stringOrExpression", + "required": true, + "description": "The version number of the layer. Each layer can have multiple versions, and permissions are granted per version", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Whether to replace the message body with the response from this operation", + "defaultValue": "true" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": false, + "description": "The name of the variable to store the response. If not specified, the response will be stored in the message body", + "defaultValue": "" + } + ] }, { - "name": "getFunction", - "description": "Returns information about function or function version.", - "isHidden": false + "name": "createAlias", + "description": "Create Alias", + "isHidden": false, + "parameters": [ + { + "name": "aliasAdditionalVersionWeights", + "type": "stringOrExpression", + "required": false, + "description": "The name of second alias, and the percentage of traffic that's routed to it (JSON format)", + "defaultValue": "" + }, + { + "name": "aliasName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the alias", + "defaultValue": "" + }, + { + "name": "apiVersionCreateAlias", + "type": "stringOrExpression", + "required": true, + "description": "API version for CreateAlias method", + "defaultValue": "2015-03-31" + }, + { + "name": "createAliasDescription", + "type": "stringOrExpression", + "required": false, + "description": "The description of the alias", + "defaultValue": "" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function that the alias invokes", + "defaultValue": "" + }, + { + "name": "functionVersion", + "type": "stringOrExpression", + "required": true, + "description": "The function version that the alias invokes", + "defaultValue": "$LATEST" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getFunctionConfiguration", - "description": "Returns the version-specific settings of a lambda function or version.", - "isHidden": false + "name": "removePermission", + "description": "Remove Permission", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionRemovePermission", + "type": "stringOrExpression", + "required": true, + "description": "API version for RemovePermission method", + "defaultValue": "2015-03-31" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the Lambda function", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "permissionQualifier", + "type": "stringOrExpression", + "required": false, + "description": "Specify a version or alias to remove permission from a published version of the function", + "defaultValue": "" + }, + { + "name": "permissionRevisionId", + "type": "stringOrExpression", + "required": false, + "description": "Only update the policy if the revision ID matches the ID specified. Use this to avoid modifying a policy that has changed since you last read it", + "defaultValue": "" + }, + { + "name": "permissionStatementId", + "type": "stringOrExpression", + "required": true, + "description": "Statement ID of the permission to remove", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "invoke", - "description": "Invokes a lambda function.", - "isHidden": false + "name": "updateAlias", + "description": "Update Alias", + "isHidden": false, + "parameters": [ + { + "name": "aliasName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the alias", + "defaultValue": "" + }, + { + "name": "aliasRevisionId", + "type": "stringOrExpression", + "required": false, + "description": "Only update the alias if the revision ID matches the ID that's specified. Use this to ensure the alias hasn't changed since you last read it", + "defaultValue": "" + }, + { + "name": "apiVersionUpdateAlias", + "type": "stringOrExpression", + "required": true, + "description": "API version for UpdateAlias method", + "defaultValue": "2015-03-31" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function that the alias invokes", + "defaultValue": "" + }, + { + "name": "functionVersion", + "type": "stringOrExpression", + "required": false, + "description": "The function version that the alias invokes", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "updatedAliasAdditionalVersionWeights", + "type": "stringOrExpression", + "required": false, + "description": "The name of second alias, and the percentage of traffic that's routed to it (JSON format)", + "defaultValue": "" + }, + { + "name": "updatedAliasDescription", + "type": "stringOrExpression", + "required": false, + "description": "The description of the alias", + "defaultValue": "" + } + ] }, { - "name": "listFunctions", - "description": "Returns a list of Lambda functions.", - "isHidden": false + "name": "getFunctionConfiguration", + "description": "Get Function Configuration", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionGetFunctionConfiguration", + "type": "stringOrExpression", + "required": true, + "description": "API version for GetFunctionConfiguration method", + "defaultValue": "2015-03-31" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "qualifier", + "type": "stringOrExpression", + "required": false, + "description": "Specify a version or alias to get configuration of a specific version", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "removePermission", - "description": "Removes function use permission from an AWS service or another account.", - "isHidden": false + "name": "createFunction", + "description": "Create Function", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionCreateFunction", + "type": "stringOrExpression", + "required": true, + "description": "API version for CreateFunction method", + "defaultValue": "2015-03-31" + }, + { + "name": "environmentVariables", + "type": "stringOrExpression", + "required": false, + "description": "Environment variable key-value pairs in JSON format", + "defaultValue": "" + }, + { + "name": "functionDescription", + "type": "stringOrExpression", + "required": false, + "description": "A description of the function", + "defaultValue": "" + }, + { + "name": "functionName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Lambda function", + "defaultValue": "" + }, + { + "name": "handler", + "type": "stringOrExpression", + "required": true, + "description": "The name of the method within your code that Lambda calls to execute your function", + "defaultValue": "" + }, + { + "name": "kmsKeyArn", + "type": "stringOrExpression", + "required": false, + "description": "The ARN of the KMS key used to encrypt your function's environment variables", + "defaultValue": "" + }, + { + "name": "layers", + "type": "stringOrExpression", + "required": false, + "description": "A list of function layers to add to the function's execution environment", + "defaultValue": "" + }, + { + "name": "memorySize", + "type": "stringOrExpression", + "required": false, + "description": "The amount of memory that your function has access to. Must be a multiple of 64 MB", + "defaultValue": "" + }, + { + "name": "mode", + "type": "combo", + "required": false, + "description": "Set to Active to sample and trace a subset of incoming requests with AWS X-Ray Supported values: Active, PassThrough", + "defaultValue": "PassThrough" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "publish", + "type": "checkbox", + "required": false, + "description": "Set to true to publish the first version of the function during creation", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "role", + "type": "stringOrExpression", + "required": true, + "description": "The Amazon Resource Name (ARN) of the function's execution role", + "defaultValue": "" + }, + { + "name": "runtime", + "type": "stringOrExpression", + "required": true, + "description": "The runtime version for the function", + "defaultValue": "python3.9" + }, + { + "name": "s3Bucket", + "type": "stringOrExpression", + "required": false, + "description": "An Amazon S3 bucket name in the same region as your function", + "defaultValue": "" + }, + { + "name": "s3Key", + "type": "stringOrExpression", + "required": false, + "description": "The Amazon S3 key of the deployment package", + "defaultValue": "" + }, + { + "name": "s3ObjectVersion", + "type": "stringOrExpression", + "required": false, + "description": "For versioned objects, the version of the deployment package object to use", + "defaultValue": "" + }, + { + "name": "securityGroupIds", + "type": "stringOrExpression", + "required": false, + "description": "A list of VPC security group IDs (comma-separated)", + "defaultValue": "" + }, + { + "name": "subnetIds", + "type": "stringOrExpression", + "required": false, + "description": "A list of VPC subnet IDs (comma-separated)", + "defaultValue": "" + }, + { + "name": "tags", + "type": "stringOrExpression", + "required": false, + "description": "A list of tags (key-value pairs) to apply to the function in JSON format", + "defaultValue": "" + }, + { + "name": "targetArn", + "type": "stringOrExpression", + "required": false, + "description": "The Amazon Resource Name (ARN) of an Amazon SQS queue or Amazon SNS topic", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "The amount of time that Lambda allows a function to run before stopping it (max 900 seconds)", + "defaultValue": "" + }, + { + "name": "zipFile", + "type": "stringOrExpression", + "required": false, + "description": "The base64-encoded contents of zip file containing your deployment package", + "defaultValue": "" + } + ] }, { - "name": "addLayerVersionPermission", - "description": "Adds permission to the resource-based policy of a version of an AWS Lambda layer.", - "isHidden": false + "name": "getAccountSettings", + "description": "Get Account Settings", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionGetAccountSettings", + "type": "stringOrExpression", + "required": true, + "description": "API version for GetAccountSettings method", + "defaultValue": "2016-08-19" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "removeLayerVersionPermission", - "description": "Removes a statement from the permissions policy for a version of an AWS Lambda layer.", - "isHidden": false + "name": "listFunctions", + "description": "List Functions", + "isHidden": false, + "parameters": [ + { + "name": "apiVersionListFunctions", + "type": "stringOrExpression", + "required": true, + "description": "API version for ListFunctions method", + "defaultValue": "2015-03-31" + }, + { + "name": "functionVersionToBeListed", + "type": "combo", + "required": false, + "description": "Set to ALL to include entries for all published versions of each function Supported values: ALL, $LATEST", + "defaultValue": "" + }, + { + "name": "marker", + "type": "stringOrExpression", + "required": false, + "description": "Pagination token returned by a previous request to retrieve the next page of results", + "defaultValue": "" + }, + { + "name": "masterRegion", + "type": "stringOrExpression", + "required": false, + "description": "For Lambda@Edge functions, the AWS Region of the master function (e.g., us-east-1 or ALL)", + "defaultValue": "" + }, + { + "name": "maxItems", + "type": "stringOrExpression", + "required": false, + "description": "Number of functions to return (1-10000)", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "amazonLambda", - "description": "Connection for accessing Amazon Lambda functions.", - "iconUrl": "" + "description": "Amazon Lambda Connection", + "iconUrl": "", + "parameters": [ + { + "name": "accessKeyId", + "type": "stringOrExpression", + "required": true, + "description": "The AWS Access Key ID for authentication. This corresponds to the IAM user or role credentials", + "defaultValue": "" + }, + { + "name": "blocking", + "type": "booleanOrExpression", + "required": true, + "description": "Enable blocking invocations to Amazon Lambda.", + "defaultValue": "false" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "A unique name for this Amazon Lambda connection configuration", + "defaultValue": "AMAZON_LAMBDA_CONNECTION_1" + }, + { + "name": "region", + "type": "stringOrExpression", + "required": true, + "description": "The AWS region where your Lambda functions are deployed (e.g., us-east-1, eu-west-1)", + "defaultValue": "us-east-1" + }, + { + "name": "secretAccessKey", + "type": "stringOrExpression", + "required": true, + "description": "The AWS Secret Access Key for authentication. Keep this secure and do not expose in logs", + "defaultValue": "" + } + ] } ] }, - "otherVersions": { - "1.0.1": "191162419" - }, + "otherVersions": {}, "connectorRank": 34, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-amazonlambda.gif" }, @@ -411,299 +3058,3273 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-amazons3", + "id": "", "version": { - "tagName": "2.0.10", - "releaseId": "207333141", + "tagName": "3.0.3", + "releaseId": "233198546", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "createBucket", - "description": "Get details about payments that have not completed", - "isHidden": false - }, - { - "name": "deleteBucket", - "description": "Deletes the bucket named in the URI. All objects (including all object versions and Delete Markers) in the bucket must be deleted before the bucket itself can be deleted", - "isHidden": false + "name": "deleteObject", + "description": "Delete Object", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "bypassGovernanceRetention", + "type": "comboOrExpression", + "required": false, + "description": "Indicates whether S3 Object Lock should bypass Governance-mode restrictions to process this operation. Supported values: true, false", + "defaultValue": "" + }, + { + "name": "mfa", + "type": "stringOrExpression", + "required": false, + "description": "The concatenation of the authentication device's serial number, a space, and the value that is displayed on the authentication device.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to be deleted.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "versionId", + "type": "stringOrExpression", + "required": false, + "description": "Version ID of an object to remove a specific object version.", + "defaultValue": "" + } + ] }, { - "name": "deleteBucketCORS", - "description": "Deletes the CORS configuration information set for the bucket", - "isHidden": false + "name": "listBuckets", + "description": "List Buckets", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteBucketLifecycle", - "description": "Deletes the lifecycle configuration from the specified bucket", - "isHidden": false + "name": "getBucketCORS", + "description": "Get Bucket CORS", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteBucketPolicy", - "description": "Delete the policy on a specified bucket", - "isHidden": false + "name": "copyBucketObject", + "description": "Copy Bucket Object", + "isHidden": false, + "parameters": [ + { + "name": "acl", + "type": "comboOrExpression", + "required": false, + "description": "The set of AWS accounts or groups are granted access and the type of access. Supported values: private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control", + "defaultValue": "" + }, + { + "name": "cacheControl", + "type": "stringOrExpression", + "required": false, + "description": "This can be used to specify caching behavior along the request or reply chain.", + "defaultValue": "" + }, + { + "name": "contentDisposition", + "type": "stringOrExpression", + "required": false, + "description": "This specifies presentational information for the object.", + "defaultValue": "" + }, + { + "name": "contentEncoding", + "type": "stringOrExpression", + "required": false, + "description": "This specifies what content encodings have been applied to the object.", + "defaultValue": "" + }, + { + "name": "contentLanguage", + "type": "stringOrExpression", + "required": false, + "description": "The language the content is in.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "A standard MIME type describing the format of the object data.", + "defaultValue": "" + }, + { + "name": "copySource", + "type": "stringOrExpression", + "required": true, + "description": "The name of the source bucket and the source object key, separated by a slash (/)", + "defaultValue": "" + }, + { + "name": "copySourceIfMatch", + "type": "stringOrExpression", + "required": false, + "description": "The object will be copied if its entity tag (ETag) matches this.", + "defaultValue": "" + }, + { + "name": "copySourceIfModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The object will be copied if it has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "copySourceIfNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The object will be copied if its entity tag (ETag) is different than the specified ETag.", + "defaultValue": "" + }, + { + "name": "copySourceIfUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The object will be copied if it hasn't been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "copySourceSSECustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use when decrypting the source object.", + "defaultValue": "" + }, + { + "name": "copySourceSSECustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key for Amazon S3 to use to decrypt the source object.", + "defaultValue": "" + }, + { + "name": "copySourceSSECustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "destinationBucket", + "type": "stringOrExpression", + "required": true, + "description": "The destination bucket where the object will be copied.", + "defaultValue": "" + }, + { + "name": "destinationKey", + "type": "stringOrExpression", + "required": true, + "description": "The name for the object to create after copying.", + "defaultValue": "" + }, + { + "name": "expires", + "type": "stringOrExpression", + "required": false, + "description": "The date and time at which the object is no longer cacheable.", + "defaultValue": "" + }, + { + "name": "grantFullControl", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ, READ_ACP, and WRITE_ACP permissions on the object.", + "defaultValue": "" + }, + { + "name": "grantRead", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantReadACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantWriteACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant WRITE_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "metadata", + "type": "comboOrExpression", + "required": false, + "description": "New metadata to be replaced. Comma separated key value pair. The key and value are separated by ':'. Supported values: COPY, REPLACE", + "defaultValue": "" + }, + { + "name": "metadataDirective", + "type": "comboOrExpression", + "required": false, + "description": "Specify whether the metadata is copied from the source object or replaced with metadata provided in the request. Supported values: COPY, REPLACE", + "defaultValue": "" + }, + { + "name": "objectLockLegalHoldStatus", + "type": "comboOrExpression", + "required": false, + "description": "Specify whether apply a Legal Hold to the uploaded object or not. Supported values: ON, OFF", + "defaultValue": "" + }, + { + "name": "objectLockMode", + "type": "comboOrExpression", + "required": false, + "description": "The object Lock mode that you want to apply to the uploaded object. Supported values: GOVERNANCE, COMPLIANCE", + "defaultValue": "" + }, + { + "name": "objectLockRetainUntilDate", + "type": "stringOrExpression", + "required": false, + "description": "The date and time when you want the Object Lock to expire.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "serverSideEncryption", + "type": "stringOrExpression", + "required": false, + "description": "The server-side encryption algorithm used for storing the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use to when encrypting the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key to use in encrypting data.", + "defaultValue": "" + }, + { + "name": "sseCustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "ssekmsEncryptionContext", + "type": "stringOrExpression", + "required": false, + "description": "The AWS KMS Encryption Context to use for object encryption.", + "defaultValue": "" + }, + { + "name": "ssekmsKeyId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the symmetric customer managed AWS KMS CMK to use for object encryption.", + "defaultValue": "" + }, + { + "name": "storageClass", + "type": "comboOrExpression", + "required": false, + "description": "The storage class. Supported values: STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE, OUTPOSTS", + "defaultValue": "" + }, + { + "name": "tagging", + "type": "stringOrExpression", + "required": false, + "description": "The tag-set for the destination object. The tag-set must be encoded as URL Query parameters. (For example, Key1=Value1). This must be used in conjunction with the TaggingDirective.", + "defaultValue": "" + }, + { + "name": "taggingDirective", + "type": "comboOrExpression", + "required": false, + "description": "Specifies whether the object tag-set are copied from the source object or replaced with tag-set provided in the request. Supported values: COPY, REPLACE", + "defaultValue": "" + }, + { + "name": "websiteRedirectLocation", + "type": "stringOrExpression", + "required": false, + "description": "The redirect URL of the object if the bucket is configured as a website.", + "defaultValue": "" + } + ] }, { - "name": "deleteBucketReplication", - "description": "Deletes the replication subresource associated with the specified bucket", - "isHidden": false + "name": "getBucketVersioning", + "description": "Get Bucket Versioning", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteBucketTagging", - "description": "Removes a tags set from the specified bucket", - "isHidden": false + "name": "deleteBucket", + "description": "Delete Bucket", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "true" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteBucketWebsiteConfiguration", - "description": "Removes the website configuration for a bucket", - "isHidden": false + "name": "putBucketPolicy", + "description": "Put Bucket Policy", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "bucketPolicy", + "type": "stringOrExpression", + "required": true, + "description": "Bucket policy configuration information.", + "defaultValue": "" + }, + { + "name": "confirmRemoveSelfBucketAccess", + "type": "comboOrExpression", + "required": false, + "description": "Set this parameter to true to confirm that you want to remove your permissions to change this bucket policy in future. Supported values: true, false", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getBucketACL", - "description": "Return the access control list (ACL) of a bucket", - "isHidden": false + "name": "listObjectVersions", + "description": "Get Bucket Object Versions", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "delimiter", + "type": "stringOrExpression", + "required": false, + "description": "A delimiter is a character used to group keys.", + "defaultValue": "" + }, + { + "name": "encodingType", + "type": "stringOrExpression", + "required": false, + "description": "Requests Amazon S3 to encode the response and specifies the encoding method to use.", + "defaultValue": "" + }, + { + "name": "keyMarker", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the key in the bucket that you want to start listing from.", + "defaultValue": "" + }, + { + "name": "maxKeys", + "type": "stringOrExpression", + "required": false, + "description": "Sets the maximum number of keys returned in the response body.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "prefix", + "type": "stringOrExpression", + "required": false, + "description": "Limits the response to keys that begin with the specified prefix.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "versionIdMarker", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the object version you want to start listing from.", + "defaultValue": "" + } + ] }, { - "name": "getBucketCORS", - "description": "Returns the CORS configuration information set for the bucket", - "isHidden": false + "name": "listMultipartUploads", + "description": "List Multipart Uploads", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "delimiter", + "type": "stringOrExpression", + "required": false, + "description": "A delimiter is a character used to group keys.", + "defaultValue": "" + }, + { + "name": "encodingType", + "type": "stringOrExpression", + "required": false, + "description": "Requests Amazon S3 to encode the response and specifies the encoding method to use.", + "defaultValue": "" + }, + { + "name": "keyMarker", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the key in the bucket that you want to start listing from.", + "defaultValue": "" + }, + { + "name": "maxUploads", + "type": "stringOrExpression", + "required": false, + "description": "Sets the maximum number of multipart uploads.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "prefix", + "type": "stringOrExpression", + "required": false, + "description": "Limits the response to keys that begin with the specified prefix.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "uploadIdMarker", + "type": "comboOrExpression", + "required": false, + "description": "Specifies the multipart upload after which listing should begin. Supported values: url", + "defaultValue": "" + } + ] }, { - "name": "getBucketLifecycleConfiguration", - "description": "Returns the lifecycle configuration information set on the bucket", - "isHidden": false + "name": "getBucketTagging", + "description": "Get Bucket Tagging", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getBucketLocation", - "description": "Returns a bucket's region", - "isHidden": false + "name": "restoreObject", + "description": "Restore Object", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "stringOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "restoreRequest", + "type": "stringOrExpression", + "required": true, + "description": "Container for the RestoreRequest parameters (Days, Description, GlacierJobParameters, OutputLocation, SelectParameters, Tier and Type).", + "defaultValue": "" + }, + { + "name": "versionId", + "type": "stringOrExpression", + "required": false, + "description": "Version ID of an object to restore a specific object version.", + "defaultValue": "" + } + ] }, { - "name": "getBucketLogging", - "description": "Returns the logging storageClass of a bucket", - "isHidden": false + "name": "putBucketWebsite", + "description": "Put Bucket Website", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "websiteConfig", + "type": "stringOrExpression", + "required": true, + "description": "Website configuration information.", + "defaultValue": "" + } + ] }, { - "name": "getBucketNotificationConfiguration", - "description": "Returns the notification configuration of a bucket", - "isHidden": false + "name": "deleteBucketTagging", + "description": "Delete Bucket Tagging", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getBucketPolicy", - "description": "Return the policy of a specified bucket", - "isHidden": false + "name": "generatePutObjectPresignedUrl", + "description": "Generate Put Object Presigned URL", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "A standard MIME type describing the format of the object data.", + "defaultValue": "" + }, + { + "name": "metadata", + "type": "stringOrExpression", + "required": false, + "description": "New metadata to be created. Comma separated key value pair. The key and value are separated by ':'.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to generate the presigned URL.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "signatureDurationInMins", + "type": "stringOrExpression", + "required": true, + "description": "The time in minutes until the pre-signed URL expires..", + "defaultValue": "" + } + ] }, { - "name": "getBucketReplication", - "description": "Returns replication configuration information set on the bucket", - "isHidden": false + "name": "abortMultipartUpload", + "description": "Abort Multipart Upload", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to retrieve details for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "uploadId", + "type": "stringOrExpression", + "required": true, + "description": "This specifies the ID of the current multipart upload.", + "defaultValue": "" + } + ] }, { "name": "getBucketRequestPayment", - "description": "Return the request payment configuration of a bucket", - "isHidden": false + "description": "Get Bucket Request Payment", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getBucketTagging", - "description": "Returns the tags set associated with the bucket", - "isHidden": false + "name": "putBucketACL", + "description": "Put Bucket ACL", + "isHidden": false, + "parameters": [ + { + "name": "accessControlList", + "type": "stringOrExpression", + "required": true, + "description": "Bucket ACL information.", + "defaultValue": "" + }, + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getBucketVersioning", - "description": "Returns the versioning state of a bucket", - "isHidden": false + "name": "headObject", + "description": "Head Object", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if its entity tag (ETag) is the same as the one specified.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if it has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if its entity tag (ETag) is different from the one specified.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if it has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name to give the newly created object.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "partNumber", + "type": "stringOrExpression", + "required": false, + "description": "Part number of the object being read.", + "defaultValue": "" + }, + { + "name": "range", + "type": "stringOrExpression", + "required": false, + "description": "The specified range bytes of an object to download.", + "defaultValue": "" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sseCustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use to when encrypting the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key to use in encrypting data.", + "defaultValue": "" + }, + { + "name": "sseCustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "versionId", + "type": "stringOrExpression", + "required": false, + "description": "VersionId used to reference a specific version of the object.", + "defaultValue": "" + } + ] }, { - "name": "getBucketWebsite", - "description": "Returns the website configuration associated with a bucket", - "isHidden": false + "name": "putBucketCORS", + "description": "Put Bucket CORS", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "corsConfiguration", + "type": "stringOrExpression", + "required": true, + "description": "Bucket CORS configuration.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "headBucket", - "description": "To determine if a bucket exists and you have permission to access it", - "isHidden": false + "name": "getBucketNotificationConfiguration", + "description": "Get Bucket Notification Configuration", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listBuckets", - "description": "Return the request payment configuration of a bucket.", - "isHidden": false + "name": "putBucketLifecycleConfiguration", + "description": "Put Bucket Lifecycle Configuration", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "lifecycleConfiguration", + "type": "stringOrExpression", + "required": true, + "description": "Bucket lifecycle configuration.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listMultipartUploads", - "description": "Lists in-progress multipart uploads", - "isHidden": false + "name": "getObject", + "description": "Get Object", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "destinationFilePath", + "type": "stringOrExpression", + "required": false, + "description": "Path to the file that response contents will be written to.", + "defaultValue": "" + }, + { + "name": "getContentAsBase64", + "type": "comboOrExpression", + "required": false, + "description": "Get Content As Base64. Supported values: true, false", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if its ETag is the same.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if it has been modified.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if its ETag is not same.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if it has not been modified.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to retrieve details for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "partNumber", + "type": "stringOrExpression", + "required": false, + "description": "Part number of the object being read.", + "defaultValue": "" + }, + { + "name": "range", + "type": "stringOrExpression", + "required": false, + "description": "HTTP range header.", + "defaultValue": "" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseCacheControl", + "type": "stringOrExpression", + "required": false, + "description": "Cache-Control header of the response.", + "defaultValue": "" + }, + { + "name": "responseContentDisposition", + "type": "stringOrExpression", + "required": false, + "description": "Content-Disposition header of the response.", + "defaultValue": "" + }, + { + "name": "responseContentEncoding", + "type": "stringOrExpression", + "required": false, + "description": "Content-Encoding header of the response.", + "defaultValue": "" + }, + { + "name": "responseContentLanguage", + "type": "stringOrExpression", + "required": false, + "description": "Content-Language header of the response.", + "defaultValue": "" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "Content-Type header of the response.", + "defaultValue": "" + }, + { + "name": "responseExpires", + "type": "stringOrExpression", + "required": false, + "description": "Expires header of the response.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sseCustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use to when encrypting the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key to use in encrypting data.", + "defaultValue": "" + }, + { + "name": "sseCustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "versionId", + "type": "stringOrExpression", + "required": false, + "description": "VersionId used to reference a specific version of the object.", + "defaultValue": "" + } + ] }, { - "name": "listObjects", - "description": "Returns some or all (up to 1000) of the objects in a bucket", - "isHidden": false + "name": "getObjectTagging", + "description": "Get Object Tags", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "versionId", + "type": "stringOrExpression", + "required": false, + "description": "The version id of the object.", + "defaultValue": "" + } + ] }, { - "name": "listObjectVersions", - "description": "List metadata about all of the versions of objects in a bucket", - "isHidden": false + "name": "getBucketWebsite", + "description": "Get Website Configuration", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "putBucketACL", - "description": "Set the permissions on an existing bucket using access control lists", - "isHidden": false + "name": "deleteBucketWebsiteConfiguration", + "description": "Delete Bucket Website Configuration", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "putBucketCORS", - "description": "Sets the CORS configuration for your bucket", - "isHidden": false + "name": "completeMultipartUpload", + "description": "Complete Multipart Upload", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "completedPartDetails", + "type": "stringOrExpression", + "required": true, + "description": "This contains all the part numbers and the corresponding ETags.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name to give the newly created object.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "uploadId", + "type": "stringOrExpression", + "required": true, + "description": "This specifies the ID of the current multipart upload.", + "defaultValue": "" + } + ] }, { - "name": "putBucketLifecycleConfiguration", - "description": "Creates a new lifecycle configuration for the bucket or replaces an existing lifecycle configuration", - "isHidden": false + "name": "deleteBucketPolicy", + "description": "Delete Bucket Policy", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "putBucketPolicy", - "description": "Add to or replace a policy on a bucket", - "isHidden": false + "name": "getBucketLocation", + "description": "Get Bucket Location", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "putBucketReplication", - "description": "Creates a new replication configuration", - "isHidden": false + "name": "uploadPart", + "description": "Upload Part", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "contentMD5", + "type": "stringOrExpression", + "required": false, + "description": "The base64-encoded 128-bit MD5 digest of the message according to RFC 1864.", + "defaultValue": "" + }, + { + "name": "fileContent", + "type": "stringOrExpression", + "required": false, + "description": "The content of the file.", + "defaultValue": "" + }, + { + "name": "filePath", + "type": "stringOrExpression", + "required": false, + "description": "Path of the file to be uploaded.", + "defaultValue": "" + }, + { + "name": "isContentBase64Encoded", + "type": "booleanOrExpression", + "required": false, + "description": "Whether the file content is base64 encoded.", + "defaultValue": "false" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to retrieve details for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "partNumber", + "type": "stringOrExpression", + "required": true, + "description": "This specifies the number or the index of the uploaded part.", + "defaultValue": "" + }, + { + "name": "requestPayer", + "type": "stringOrExpression", + "required": false, + "description": "Confirms that the requester knows that they will be charged for the request.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sseCustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use to when encrypting the object (for example, AES256).", + "defaultValue": "" + }, + { + "name": "sseCustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key for Amazon S3 to use in encrypting data.", + "defaultValue": "" + }, + { + "name": "sseCustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "uploadId", + "type": "stringOrExpression", + "required": true, + "description": "This specifies the ID of the initiated multipart upload.", + "defaultValue": "" + } + ] }, { - "name": "putBucketRequestPayment", - "description": "Set the request payment configuration of a bucket", - "isHidden": false + "name": "multipartUpload", + "description": "Multipart Upload", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "fileContent", + "type": "stringOrExpression", + "required": false, + "description": "The content of the file.", + "defaultValue": "" + }, + { + "name": "filePath", + "type": "stringOrExpression", + "required": false, + "description": "The file path to upload it as the object content.", + "defaultValue": "" + }, + { + "name": "isContentBase64Encoded", + "type": "booleanOrExpression", + "required": false, + "description": "Whether the file content is base64 encoded.", + "defaultValue": "false" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "partDetails", + "type": "stringOrExpression", + "required": true, + "description": "Array of parts with part with the part number.", + "defaultValue": "" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "putBucketTagging", - "description": "Adds a set of tags to an existing bucket", - "isHidden": false + "name": "deleteBucketReplication", + "description": "Delete Bucket Replication", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "putBucketVersioning", - "description": "Set the versioning state of an existing bucket", - "isHidden": false + "name": "generateGetObjectPresignedUrl", + "description": "Generate Get Object Presigned URL", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to generate the presigned URL.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "signatureDurationInMins", + "type": "stringOrExpression", + "required": true, + "description": "The time in minutes until the pre-signed URL expires..", + "defaultValue": "" + } + ] }, { - "name": "putBucketWebsite", - "description": "Sets the configuration of the website that is specified in the website subresource", - "isHidden": false + "name": "createMultipartUpload", + "description": "Create Multipart Upload", + "isHidden": false, + "parameters": [ + { + "name": "acl", + "type": "comboOrExpression", + "required": false, + "description": "The set of AWS accounts or groups are granted access and the type of access. Supported values: private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control", + "defaultValue": "" + }, + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "cacheControl", + "type": "stringOrExpression", + "required": false, + "description": "This can be used to specify caching behavior along the request or reply chain.", + "defaultValue": "" + }, + { + "name": "contentDisposition", + "type": "stringOrExpression", + "required": false, + "description": "This specifies presentational information for the object.", + "defaultValue": "" + }, + { + "name": "contentEncoding", + "type": "stringOrExpression", + "required": false, + "description": "This specifies what content encodings have been applied to the object.", + "defaultValue": "" + }, + { + "name": "contentLanguage", + "type": "stringOrExpression", + "required": false, + "description": "The language the content is in.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "A standard MIME type describing the format of the object data.", + "defaultValue": "" + }, + { + "name": "expires", + "type": "stringOrExpression", + "required": false, + "description": "The date and time at which the object is no longer cacheable.", + "defaultValue": "" + }, + { + "name": "grantFullControl", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ, READ_ACP, and WRITE_ACP permissions on the object.", + "defaultValue": "" + }, + { + "name": "grantRead", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantReadACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantWriteACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant WRITE_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "metadata", + "type": "comboOrExpression", + "required": false, + "description": "New metadata to be created. Comma separated key value pair. The key and value are separated by ':'. Supported values: COPY, REPLACE", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name to give the newly created object.", + "defaultValue": "" + }, + { + "name": "objectLockLegalHoldStatus", + "type": "comboOrExpression", + "required": false, + "description": "Specify whether apply a Legal Hold to the uploaded object or not. Supported values: ON, OFF", + "defaultValue": "" + }, + { + "name": "objectLockMode", + "type": "comboOrExpression", + "required": false, + "description": "The object Lock mode that you want to apply to the uploaded object. Supported values: GOVERNANCE, COMPLIANCE", + "defaultValue": "" + }, + { + "name": "objectLockRetainUntilDate", + "type": "stringOrExpression", + "required": false, + "description": "The date and time when you want the Object Lock to expire.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "serverSideEncryption", + "type": "stringOrExpression", + "required": false, + "description": "The server-side encryption algorithm used for storing the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use to when encrypting the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key to use in encrypting data.", + "defaultValue": "" + }, + { + "name": "sseCustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "ssekmsEncryptionContext", + "type": "stringOrExpression", + "required": false, + "description": "The AWS KMS Encryption Context to use for object encryption.", + "defaultValue": "" + }, + { + "name": "ssekmsKeyId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the symmetric customer managed AWS KMS CMK to use for object encryption.", + "defaultValue": "" + }, + { + "name": "storageClass", + "type": "comboOrExpression", + "required": false, + "description": "The storage class. Supported values: STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE, OUTPOSTS", + "defaultValue": "" + }, + { + "name": "tagging", + "type": "stringOrExpression", + "required": false, + "description": "The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, Key1=Value1). This must be used in conjunction with the TaggingDirective.", + "defaultValue": "" + }, + { + "name": "websiteRedirectLocation", + "type": "stringOrExpression", + "required": false, + "description": "The redirect URL of the object if the bucket is configured as a website.", + "defaultValue": "" + } + ] }, { - "name": "init", - "description": "Configuration files.", - "isHidden": true + "name": "putObjectAcl", + "description": "Put Object ACL", + "isHidden": false, + "parameters": [ + { + "name": "accessControlList", + "type": "stringOrExpression", + "required": true, + "description": "Object ACL information.", + "defaultValue": "" + }, + { + "name": "acl", + "type": "comboOrExpression", + "required": false, + "description": "The set of AWS accounts or groups are granted access and the type of access. Supported values: private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control", + "defaultValue": "" + }, + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "grantFullControl", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ, READ_ACP, and WRITE_ACP permissions on the object.", + "defaultValue": "" + }, + { + "name": "grantRead", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantReadACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantWrite", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant WRITE objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantWriteACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant WRITE_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to retrieve details for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "versionId", + "type": "stringOrExpression", + "required": false, + "description": "Version ID of an object to remove a specific object version.", + "defaultValue": "" + } + ] }, { - "name": "abortMultipartUpload", - "description": "Abort a currently active multipart upload", - "isHidden": false + "name": "putObject", + "description": "Put Object", + "isHidden": false, + "parameters": [ + { + "name": "acl", + "type": "comboOrExpression", + "required": false, + "description": "The set of AWS accounts or groups are granted access and the type of access. Supported values: private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control", + "defaultValue": "" + }, + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "cacheControl", + "type": "stringOrExpression", + "required": false, + "description": "This can be used to specify caching behavior along the request or reply chain.", + "defaultValue": "" + }, + { + "name": "contentDisposition", + "type": "stringOrExpression", + "required": false, + "description": "This specifies presentational information for the object.", + "defaultValue": "" + }, + { + "name": "contentEncoding", + "type": "stringOrExpression", + "required": false, + "description": "This specifies what content encodings have been applied to the object.", + "defaultValue": "" + }, + { + "name": "contentLanguage", + "type": "stringOrExpression", + "required": false, + "description": "The language the content is in.", + "defaultValue": "" + }, + { + "name": "contentMD5", + "type": "stringOrExpression", + "required": false, + "description": "The base64-encoded 128-bit MD5 digest of the message according to RFC 1864.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "A standard MIME type describing the format of the object data.", + "defaultValue": "" + }, + { + "name": "expires", + "type": "stringOrExpression", + "required": false, + "description": "The date and time at which the object is no longer cacheable.", + "defaultValue": "" + }, + { + "name": "fileContent", + "type": "stringOrExpression", + "required": false, + "description": "The content of the file.", + "defaultValue": "" + }, + { + "name": "filePath", + "type": "stringOrExpression", + "required": false, + "description": "The path of the file to be uploaded.", + "defaultValue": "" + }, + { + "name": "grantFullControl", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ, READ_ACP, and WRITE_ACP permissions on the object.", + "defaultValue": "" + }, + { + "name": "grantRead", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantReadACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantWriteACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant WRITE_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "isContentBase64Encoded", + "type": "booleanOrExpression", + "required": false, + "description": "Whether the file content is base64 encoded.", + "defaultValue": "false" + }, + { + "name": "metadata", + "type": "comboOrExpression", + "required": false, + "description": "New metadata to be created. Comma separated key value pair. The key and value are separated by ':'. Supported values: COPY, REPLACE", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name to give the newly created object.", + "defaultValue": "" + }, + { + "name": "objectLockLegalHoldStatus", + "type": "comboOrExpression", + "required": false, + "description": "Specify whether apply a Legal Hold to the uploaded object or not. Supported values: ON, OFF", + "defaultValue": "" + }, + { + "name": "objectLockMode", + "type": "comboOrExpression", + "required": false, + "description": "The object Lock mode that you want to apply to the uploaded object. Supported values: GOVERNANCE, COMPLIANCE", + "defaultValue": "" + }, + { + "name": "objectLockRetainUntilDate", + "type": "stringOrExpression", + "required": false, + "description": "The date and time when you want the Object Lock to expire.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "serverSideEncryption", + "type": "stringOrExpression", + "required": false, + "description": "The server-side encryption algorithm used for storing the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use to when encrypting the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key to use in encrypting data.", + "defaultValue": "" + }, + { + "name": "sseCustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "ssekmsEncryptionContext", + "type": "stringOrExpression", + "required": false, + "description": "The AWS KMS Encryption Context to use for object encryption.", + "defaultValue": "" + }, + { + "name": "ssekmsKeyId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the symmetric customer managed AWS KMS CMK to use for object encryption.", + "defaultValue": "" + }, + { + "name": "storageClass", + "type": "comboOrExpression", + "required": false, + "description": "The storage class. Supported values: STANDARD, REDUCED_REDUNDANCY, STANDARD_IA, ONEZONE_IA, INTELLIGENT_TIERING, GLACIER, DEEP_ARCHIVE, OUTPOSTS", + "defaultValue": "" + }, + { + "name": "tagging", + "type": "stringOrExpression", + "required": false, + "description": "The tag-set for the object. The tag-set must be encoded as URL Query parameters. (For example, Key1=Value1). This must be used in conjunction with the TaggingDirective.", + "defaultValue": "" + }, + { + "name": "websiteRedirectLocation", + "type": "stringOrExpression", + "required": false, + "description": "The redirect URL of the object if the bucket is configured as a website.", + "defaultValue": "" + } + ] }, { - "name": "copyBucketObject", - "description": "Creates a copy of an object that is already stored in Amazon S3", - "isHidden": false + "name": "headBucket", + "description": "Head Bucket", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteObject", - "description": "Removes the null version (if there is one) of an object and inserts a delete marker, which becomes the latest version of the object", - "isHidden": false + "name": "getBucketACL", + "description": "Get Bucket ACL", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteObjects", - "description": "Delete multiple objects from a bucket using a single HTTP request", - "isHidden": false + "name": "getBucketLogging", + "description": "Get Bucket Logging", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getObject", - "description": "Retrieves objects from Amazon S3", - "isHidden": false + "name": "listParts", + "description": "List Parts", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "maxParts", + "type": "stringOrExpression", + "required": false, + "description": "Sets the maximum number of parts to return in the response body.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to retrieve details for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "partNumberMarker", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the part after which listing should begin.", + "defaultValue": "" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "uploadId", + "type": "stringOrExpression", + "required": true, + "description": "This specifies the ID of the current multipart upload.", + "defaultValue": "" + } + ] }, { "name": "getObjectACL", - "description": "Returns the access control list (ACL) of an object", - "isHidden": false - }, - { - "name": "getObjectTagging", - "description": "Retrieve the list of tags associated with the object", - "isHidden": false + "description": "Get Object ACL", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "versionId", + "type": "stringOrExpression", + "required": false, + "description": "VersionId used to reference a specific version of the object.", + "defaultValue": "" + } + ] }, { "name": "getObjectTorrent", - "description": "Returns torrent files from a bucket", - "isHidden": false + "description": "Get Object Torrent", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to retrieve torrents for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that the requester knows that they will be charged for the request. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "torrentFilePath", + "type": "stringOrExpression", + "required": true, + "description": "The path of the torrent file to be created.", + "defaultValue": "" + } + ] }, { - "name": "headObject", - "description": "Retrieves metadata from an object without returning the object itself", - "isHidden": false + "name": "putBucketReplication", + "description": "Put Bucket Replication", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "replicationConfiguration", + "type": "stringOrExpression", + "required": true, + "description": "Bucket replication configuration.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "completeMultipartUpload", - "description": "Complete the multipart upload", - "isHidden": false + "name": "putBucketRequestPayment", + "description": "Put Bucket Request Payment", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "payer", + "type": "stringOrExpression", + "required": true, + "description": "Specifies who pays for the download and request fees.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createMultipartUpload", - "description": "Create a multipart upload for Part uploads", - "isHidden": false + "name": "getBucketReplication", + "description": "Get Bucket Replication", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listParts", - "description": "Retrieve list of uploaded parts", - "isHidden": false + "name": "deleteObjects", + "description": "Delete Multiple Objects", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "bypassGovernanceRetention", + "type": "comboOrExpression", + "required": false, + "description": "Specifies whether you want to delete this object even if it has a Governance-type Object Lock in place. Supported values: true, false", + "defaultValue": "" + }, + { + "name": "deleteConfig", + "type": "stringOrExpression", + "required": true, + "description": "Contains the objects that are suppose to be deleted.", + "defaultValue": "" + }, + { + "name": "mfa", + "type": "stringOrExpression", + "required": false, + "description": "The concatenation of the authentication device's serial number, a space, and the value that is displayed on the authentication device.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "multipartUpload", - "description": "Complete a currently active multipart upload", - "isHidden": false + "name": "putBucketVersioning", + "description": "Put Bucket Versioning", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "mfa", + "type": "stringOrExpression", + "required": false, + "description": "The concatenation of the authentication device's serial number, a space, and the value that is displayed on the authentication device.", + "defaultValue": "" + }, + { + "name": "mfaDelete", + "type": "stringOrExpression", + "required": false, + "description": "Specifies whether MFA Delete is enabled in the bucket versioning configuration.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "status", + "type": "stringOrExpression", + "required": false, + "description": "Sets the versioning state of the bucket.", + "defaultValue": "" + } + ] }, { - "name": "putObject", - "description": "Create objects from Amazon S3 bucket", - "isHidden": false + "name": "getBucketPolicy", + "description": "Get Bucket Policy", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "putObjectAcl", - "description": "Set the access control list (ACL) permissions for an object that already exists in a bucket", - "isHidden": false + "name": "createBucket", + "description": "Create Bucket", + "isHidden": false, + "parameters": [ + { + "name": "acl", + "type": "comboOrExpression", + "required": false, + "description": "The set of AWS accounts or groups are granted access and the type of access. Supported values: private, public-read, public-read-write, authenticated-read, aws-exec-read, bucket-owner-read, bucket-owner-full-control", + "defaultValue": "" + }, + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "bucketRegion", + "type": "comboOrExpression", + "required": false, + "description": "Region for the created bucket. Supported values: af-south-1, ap-east-1, ap-northeast-1, ap-northeast-2, ap-northeast-3, ap-south-1, ap-southeast-1, ap-southeast-2, ca-central-1, cn-north-1, cn-northwest-1, EU, eu-central-1, eu-north-1, eu-south-1, eu-west-1, eu-west-2, eu-west-3, me-south-1, sa-east-1, us-east-2, us-gov-east-1, us-gov-west-1, us-west-1, us-west-2", + "defaultValue": "us-east-1" + }, + { + "name": "grantFullControl", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ, READ_ACP, and WRITE_ACP permissions on the object.", + "defaultValue": "" + }, + { + "name": "grantRead", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantReadACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant READ_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantWrite", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant WRITE objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "grantWriteACP", + "type": "stringOrExpression", + "required": false, + "description": "The comma separated type(id, uri, emailAddress)=value pair to grant WRITE_ACP objects permission to those accounts.", + "defaultValue": "" + }, + { + "name": "objectLockEnabledForBucket", + "type": "comboOrExpression", + "required": false, + "description": "Specify whether you want S3 Object Lock to be enabled for this bucket. Supported values: true, false", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "restoreObject", - "description": "Restores a temporary copy of an archived object", - "isHidden": false + "name": "getBucketLifecycleConfiguration", + "description": "Get Bucket Life Cycle Configuration", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "uploadPart", - "description": "Upload a tag for a current multipart upload", - "isHidden": false + "name": "deleteBucketLifecycle", + "description": "Delete Bucket Lifecycle", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "uploadPartCopy", - "description": "Uploads a tag by copying data from an existing object as data source", - "isHidden": false + "description": "Upload Part Copy", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "copySource", + "type": "stringOrExpression", + "required": true, + "description": "The name of the source bucket and the source object key, separated by a slash (/)", + "defaultValue": "" + }, + { + "name": "copySourceRange", + "type": "stringOrExpression", + "required": false, + "description": "The range of bytes to copy from the source object.", + "defaultValue": "" + }, + { + "name": "copySourceSSECustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use when decrypting the source object.", + "defaultValue": "" + }, + { + "name": "copySourceSSECustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key for Amazon S3 to use to decrypt the source object.", + "defaultValue": "" + }, + { + "name": "copySourceSSECustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if its ETag is the same.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if it has been modified.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if its ETag is not same.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "Return the object only if it has not been modified.", + "defaultValue": "" + }, + { + "name": "objectKey", + "type": "stringOrExpression", + "required": true, + "description": "The name of the object to retrieve details for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "partNumber", + "type": "stringOrExpression", + "required": true, + "description": "This specifies the number or the index of the uploaded part.", + "defaultValue": "" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sseCustomerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm to use to when encrypting the object.", + "defaultValue": "" + }, + { + "name": "sseCustomerKey", + "type": "stringOrExpression", + "required": false, + "description": "The customer-provided encryption key to use in encrypting data.", + "defaultValue": "" + }, + { + "name": "sseCustomerKeyMD5", + "type": "stringOrExpression", + "required": false, + "description": "The 128-bit MD5 digest of the encryption key according to RFC 1321.", + "defaultValue": "" + }, + { + "name": "uploadId", + "type": "stringOrExpression", + "required": true, + "description": "This specifies the ID of the initiated multipart upload.", + "defaultValue": "" + } + ] }, { - "name": "generatePutObjectPresignedUrl", - "description": "Generate a presigned URL to upload an object to Amazon S3", - "isHidden": false + "name": "listObjects", + "description": "List Objects in Bucket", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "delimiter", + "type": "stringOrExpression", + "required": false, + "description": "A delimiter is a character used to group keys.", + "defaultValue": "" + }, + { + "name": "encodingType", + "type": "stringOrExpression", + "required": false, + "description": "Requests Amazon S3 to encode the response and specifies the encoding method to use.", + "defaultValue": "" + }, + { + "name": "marker", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the key to start with when listing objects in a bucket.", + "defaultValue": "" + }, + { + "name": "maxKeys", + "type": "stringOrExpression", + "required": false, + "description": "Sets the maximum number of keys returned in the response body.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "prefix", + "type": "stringOrExpression", + "required": false, + "description": "Limits the response to keys that begin with the specified prefix.", + "defaultValue": "" + }, + { + "name": "requestPayer", + "type": "comboOrExpression", + "required": false, + "description": "Confirms that this requester knows that they will be charged for the request. Bucket owners need not specify this parameter in their requests. Supported values: requester", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "generateGetObjectPresignedUrl", - "description": "Generate a presigned URL to download an object from Amazon S3", - "isHidden": false + "name": "putBucketTagging", + "description": "Put Bucket Tagging", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "tagSet", + "type": "stringOrExpression", + "required": true, + "description": "Container for a set of tags.", + "defaultValue": "" + } + ] + }, + { + "name": "deleteBucketCORS", + "description": "Delete Bucket CORS", + "isHidden": false, + "parameters": [ + { + "name": "bucketName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the bucket.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output payload of the operation (The above variable will be ignored).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "amazons3", - "description": "Connection for accessing Amazon S3 storage.", - "iconUrl": "" + "description": "Amazon S3 Connection", + "iconUrl": "", + "parameters": [ + { + "name": "awsAccessKeyId", + "type": "stringOrExpression", + "required": false, + "description": "AWS access key ID.", + "defaultValue": "" + }, + { + "name": "awsSecretAccessKey", + "type": "stringOrExpression", + "required": false, + "description": "AWS secret access key.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the AmazonS3 connection", + "defaultValue": "AMAZON_S3_CONNECTION_1" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": false, + "description": "For path-style requests, the value is s3.amazonaws.com. For virtual-style requests, the value is BucketName.s3.amazonaws.com.", + "defaultValue": "" + }, + { + "name": "region", + "type": "stringOrExpression", + "required": true, + "description": "Region which is used select a regional endpoint to make requests.", + "defaultValue": "" + } + ] } ] }, - "otherVersions": { - "2.0.9": "201982453" - }, + "otherVersions": {}, "connectorRank": 11, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-amazons3.png" }, @@ -714,114 +6335,1026 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-amazonsqs", + "id": "", "version": { - "tagName": "2.0.3", - "releaseId": "208301548", + "tagName": "3.0.1", + "releaseId": "233197587", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Config operation", - "isHidden": true + "name": "deleteQueue", + "description": "Delete Queue", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue to delete.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "sendMessage", - "description": "Delivers a message to the specified queue", - "isHidden": false + "name": "changeMessageVisibilityBatch", + "description": "Change Message Visibility Batch", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "messageRequestEntries", + "type": "stringOrExpression", + "required": true, + "description": "A list of receipt handles of the messages for which the visibility timeout must be changed. (e.g., [{'receiptHandle': '123234343434454', 'id': 'id1'', 'VisibilityTimeout': 5}])", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue whose messages' visibility is changed.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "sendMessageBatch", - "description": "Delivers batch messages to the specified queue", - "isHidden": false + "name": "setQueueAttributes", + "description": "Set Queue Attributes", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "attributeEntries", + "type": "stringOrExpression", + "required": true, + "description": "A map of attributes to set.(e.g., {'RedrivePolicy': {'deadLetterTargetArn': 'arn:aws:sqs:us-east-1:844555590511:TestQueue', 'maxReceiveCount': 10}})", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue whose attributes are set.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "receiveMessage", - "description": "Retrieves one or more messages from the specified queue", - "isHidden": false - }, - { - "name": "changeMessageVisibility", - "description": "Changes the visibility timeout of a specified message in a queue", - "isHidden": false + "description": "Receive Message", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "maxNumberOfMessages", + "type": "integerOrExpression", + "required": false, + "description": "The maximum number of messages to be returned.", + "defaultValue": "1" + }, + { + "name": "messageAttributeNames", + "type": "stringOrExpression", + "required": false, + "description": "The name of the message attribute.(e.g., attributeName1, attributeName2)", + "defaultValue": "" + }, + { + "name": "messageSystemAttributeNames", + "type": "stringOrExpression", + "required": false, + "description": "A list of attributes that need to be returned along with each message.e.g., systemAttributeName1, systemAttributeName2", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue to which a message is sent.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "visibilityTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration (in seconds) in which the received messages are hidden from subsequent retrieve requests after being retrieved by the request.", + "defaultValue": "" + }, + { + "name": "waitTimeSeconds", + "type": "integerOrExpression", + "required": false, + "description": "The duration (in seconds) for which the call will wait for a message to arrive in the queue before returning.", + "defaultValue": "" + } + ] }, { - "name": "changeMessageVisibilityBatch", - "description": "Changes the visibility timeout of multiple messages", - "isHidden": false + "name": "createQueue", + "description": "Create Queue", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "attributeEntries", + "type": "stringOrExpression", + "required": false, + "description": "A map of attributes with their corresponding values. (e.g., {'my_attribute_name_1': {'DataType': 'String','StringValue': 'my_attribute_value_1' }}", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the queue.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "tags", + "type": "stringOrExpression", + "required": false, + "description": "The cost allocation tags to the specified Amazon SQS queue. (e.g., {QueueType: Testing})", + "defaultValue": "" + } + ] }, { - "name": "deleteMessage", - "description": "Deletes the specified message from the specified queue", - "isHidden": false + "name": "listDeadLetterSourceQueues", + "description": "List Dead Letter Source Queues", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results to include in the response.", + "defaultValue": "" + }, + { + "name": "nextToken", + "type": "stringOrExpression", + "required": false, + "description": "Pagination token to request the next set of results.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of a dead-letter queue.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "deleteMessageBatch", - "description": "Deletes multiple messages from the specified queue", - "isHidden": false + "description": "Delete Message Batch", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "messageRequestEntries", + "type": "stringOrExpression", + "required": true, + "description": "A list of receipt handles for the messages to be deleted.(e.g., [{'receiptHandle': '324343434545', 'id': 'id1' }])", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue from which messages are deleted.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "addPermission", - "description": "Adds a permission to a queue for a specific principal which allows access sharing to the queue", - "isHidden": false + "name": "changeMessageVisibility", + "description": "Change Message Visibility", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue whose message's visibility is changed.", + "defaultValue": "" + }, + { + "name": "receiptHandle", + "type": "stringOrExpression", + "required": true, + "description": "The receipt handle associated with the message, whose visibility timeout is changed.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "visibilityTimeout", + "type": "integerOrExpression", + "required": true, + "description": "The new value (in seconds from 0 to 43200, which is 12 hours) for the message's visibility timeout.", + "defaultValue": "" + } + ] }, { - "name": "removePermission", - "description": "Revokes any permissions in the queue policy", - "isHidden": false + "name": "addPermission", + "description": "Add Permission", + "isHidden": false, + "parameters": [ + { + "name": "actionNames", + "type": "stringOrExpression", + "required": true, + "description": "The action the client wants to allow for the specified principal. (e.g., SendMessage, DeleteMessage)", + "defaultValue": "" + }, + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "awsAccountNumbers", + "type": "stringOrExpression", + "required": true, + "description": "The AWS account numbers of the principal who will be given permission.(e.g., 111111111234, 111111111111)", + "defaultValue": "" + }, + { + "name": "label", + "type": "stringOrExpression", + "required": true, + "description": "The unique identification of the permission you are setting (e.g., AliceSendMessage)", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue to which permissions are added.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createQueue", - "description": "Creates a new queue, or returns the URL of an existing one", - "isHidden": false + "name": "sendMessage", + "description": "Send Message", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "delaySeconds", + "type": "stringOrExpression", + "required": false, + "description": "The number of seconds (0 to 900, which is 15 minutes) to delay a specific message.", + "defaultValue": "" + }, + { + "name": "messageAttributes", + "type": "stringOrExpression", + "required": false, + "description": "Each message attribute consists of a Name, Type, and Value. (e.g., { 'attributeName' :{ DataType: value, StringValue: value}}", + "defaultValue": "" + }, + { + "name": "messageBody", + "type": "stringOrExpression", + "required": true, + "description": "The message to be sent.", + "defaultValue": "" + }, + { + "name": "messageDeduplicationId", + "type": "stringOrExpression", + "required": false, + "description": "The ID used for deduplication of sent messages.", + "defaultValue": "" + }, + { + "name": "messageGroupId", + "type": "stringOrExpression", + "required": false, + "description": "The ID that specifies that a message belongs to a specific message group.", + "defaultValue": "" + }, + { + "name": "messageSystemAttributes", + "type": "stringOrExpression", + "required": false, + "description": "Each message attribute consists of a Name, Type, and Value.(e.g., {'AWSTraceHeader': {'DataType': 'String','StringValue': 'AWS X-Ray'}}", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue to which a message is sent.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getQueueAttributes", - "description": "Gets attributes for the specified queue", - "isHidden": false + "name": "listQueues", + "description": "List Queues", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results to include in the response.", + "defaultValue": "" + }, + { + "name": "nextToken", + "type": "stringOrExpression", + "required": false, + "description": "Pagination token to request the next set of results.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueNamePrefix", + "type": "stringOrExpression", + "required": false, + "description": "A string to use for filtering the list results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "setQueueAttributes", - "description": "Sets the value of one or more queue attributes", - "isHidden": false + "name": "sendMessageBatch", + "description": "Send Message Batch", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "messageRequestEntries", + "type": "stringOrExpression", + "required": true, + "description": "The list of messages to be sent.(e.g., [{'delaySeconds': 0, 'id': 'id1', 'messageBody': 'hi', 'messageAttributes': {'my_attribute_name_1': {'DataType': 'String','StringValue': 'my_attribute_value_1'}}, messageSystemAttributes: {'AWSTraceHeader': {'DataType': 'String','StringValue': 'AWS X-Ray'}}}])", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue to which a message is sent.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "getQueueUrl", - "description": "Returns the URL of an existing queue", - "isHidden": false + "description": "Get Queue URL", + "isHidden": false, + "parameters": [ + { + "name": "accountId", + "type": "stringOrExpression", + "required": true, + "description": "The AWS account ID without hyphens of the account that created the queue.", + "defaultValue": "" + }, + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the queue.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listQueues", - "description": "Returns a list of queues", - "isHidden": false + "name": "removePermission", + "description": "Remove Permission", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "label", + "type": "stringOrExpression", + "required": true, + "description": "The unique identification of the permission to remove", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue from which permissions are removed.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteQueue", - "description": "Deletes the queue specified by the queue URL", - "isHidden": false + "name": "getQueueAttributes", + "description": "Get Queue Attributes", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "attributes", + "type": "stringOrExpression", + "required": false, + "description": "A list of attributes to retrieve information for. (e.g., Policy, DelaySeconds)", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue whose attribute information is retrieved.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "purgeQueue", - "description": "Deletes the messages in a queue specified by the queue URL", - "isHidden": false + "name": "deleteMessage", + "description": "Delete Message", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue from which messages are deleted.", + "defaultValue": "" + }, + { + "name": "receiptHandle", + "type": "stringOrExpression", + "required": true, + "description": "The receipt handle associated with the message to be deleted.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listDeadLetterSourceQueues", - "description": "Returns a list of your queues that have the RedrivePolicy queue attribute", - "isHidden": false + "name": "purgeQueue", + "description": "Purge Queue", + "isHidden": false, + "parameters": [ + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queueUrl", + "type": "stringOrExpression", + "required": true, + "description": "The URL of the queue to delete.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "stringOrExpression", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "amazonsqs", - "description": "Connection for interacting with Amazon SQS queues.", - "iconUrl": "" + "description": "Amazon SQS Connection", + "iconUrl": "", + "parameters": [ + { + "name": "accessKeyId", + "type": "stringOrExpression", + "required": false, + "description": "The access key ID that corresponds to the secret access key.", + "defaultValue": "" + }, + { + "name": "apiCallAttemptTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The duration(in seconds) for a single HTTP attempt before retrying the API call.", + "defaultValue": "" + }, + { + "name": "apiCallTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The total execution time(in seconds), including all retry attempts.", + "defaultValue": "" + }, + { + "name": "connectionAcquisitionTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The timeout(in seconds) for acquiring an established connection from the pool.", + "defaultValue": "" + }, + { + "name": "connectionMaxIdleTime", + "type": "integerOrExpression", + "required": false, + "description": "The timeout (in seconds) after which an idle connection should be closed.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the AmazonSQS connection", + "defaultValue": "AMAZON_SQS_CONNECTION_1" + }, + { + "name": "connectionTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The timeout (in seconds) for establishing a connection to a remote service.", + "defaultValue": "" + }, + { + "name": "connectionTimeToLive", + "type": "integerOrExpression", + "required": false, + "description": "The timeout(in seconds) after which a connection should be closed.", + "defaultValue": "" + }, + { + "name": "region", + "type": "stringOrExpression", + "required": true, + "description": "Region which is used select a regional endpoint to make requests.", + "defaultValue": "" + }, + { + "name": "secretAccessKey", + "type": "stringOrExpression", + "required": false, + "description": "AWS secret access key.", + "defaultValue": "" + }, + { + "name": "socketTimeout", + "type": "integerOrExpression", + "required": false, + "description": "The timeout(in seconds) for each read to the underlying socket.", + "defaultValue": "" + } + ] } ] }, - "otherVersions": { - "2.0.2": "191922252" - }, + "otherVersions": {}, "connectorRank": 22, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-amazonsqs.png" }, @@ -832,6 +7365,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-pcml", + "id": "", "version": { "tagName": "2.0.1", "releaseId": "193423606", @@ -841,22 +7375,26 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "Initializes AS400 instance. Authenticates if credentials are provided.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "call", "description": "Calls a program in the AS400 system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "trace", "description": "Modify trace log levels.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "returnPool", "description": "Returns the AS400 connection to the connection pool.", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [] @@ -872,98 +7410,1400 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-msazuredatalakestorage", + "id": "", "version": { - "tagName": "1.0.2", - "releaseId": "218793394", + "tagName": "1.0.3", + "releaseId": "233269434", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Config operation", - "isHidden": true + "name": "listFileSystems", + "description": "List File Systems", + "isHidden": false, + "parameters": [ + { + "name": "maxResultsPerPage", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results per page", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "prefix", + "type": "stringOrExpression", + "required": false, + "description": "Prefix to filter the file systems", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "retrieveDeleted", + "type": "checkbox", + "required": false, + "description": "Whether to retrieve deleted or not", + "defaultValue": "false" + }, + { + "name": "retrieveMetadata", + "type": "checkbox", + "required": false, + "description": "Whether to retrieve metadata or not", + "defaultValue": "false" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Timeout in seconds", + "defaultValue": "" + } + ] }, { - "name": "createFileSystem", - "description": "Create File System", - "isHidden": false + "name": "readFile", + "description": "Read File", + "isHidden": false, + "parameters": [ + { + "name": "count", + "type": "stringOrExpression", + "required": false, + "description": "Number of bytes to be read.", + "defaultValue": "" + }, + { + "name": "filePath", + "type": "expressionTextArea", + "required": true, + "description": "Path of the file to be read.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the file is located.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "leaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "maxRetryRequests", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of retry requests.", + "defaultValue": "" + }, + { + "name": "offset", + "type": "stringOrExpression", + "required": false, + "description": "Offset(byte) from where the file is to be read.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { - "name": "deleteFileSystem", - "description": "Delete File System", - "isHidden": false + "name": "downloadFile", + "description": "Download File", + "isHidden": false, + "parameters": [ + { + "name": "blockSize", + "type": "stringOrExpression", + "required": false, + "description": "The size of the block in MB.", + "defaultValue": "" + }, + { + "name": "count", + "type": "stringOrExpression", + "required": false, + "description": "Number of bytes to be read.", + "defaultValue": "" + }, + { + "name": "downloadLocation", + "type": "expressionTextArea", + "required": true, + "description": "Location where the file is to be downloaded.", + "defaultValue": "" + }, + { + "name": "filePathToDownload", + "type": "expressionTextArea", + "required": true, + "description": "Path of the file to be downloaded.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the file is located.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "leaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "maxConcurrency", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of blocks that can be uploaded in parallel.", + "defaultValue": "" + }, + { + "name": "maxRetryRequests", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of retry requests.", + "defaultValue": "" + }, + { + "name": "offset", + "type": "stringOrExpression", + "required": false, + "description": "Offset(bytes) from where the file is to be read.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "rangeGetContentMd5", + "type": "checkbox", + "required": false, + "description": "Indicates if the content-MD5 header should be returned for a range GET request.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { - "name": "listFileSystems", - "description": "List File Systems", - "isHidden": false + "name": "deleteFileSystem", + "description": "Delete File System", + "isHidden": false, + "parameters": [ + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system to be deleted.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "leaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { "name": "createDirectory", - "description": "Create Directory in the file system", - "isHidden": false + "description": "Create Directory", + "isHidden": false, + "parameters": [ + { + "name": "cacheControl", + "type": "stringOrExpression", + "required": false, + "description": "The value of the Cache-Control response header.", + "defaultValue": "" + }, + { + "name": "contentDisposition", + "type": "stringOrExpression", + "required": false, + "description": "The value of the Content-Disposition response header.", + "defaultValue": "" + }, + { + "name": "contentEncoding", + "type": "stringOrExpression", + "required": false, + "description": "Defines the encoding type (e.g., \"gzip\", \"UTF-8\").", + "defaultValue": "" + }, + { + "name": "contentLanguage", + "type": "stringOrExpression", + "required": false, + "description": "The language of the content.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "The MIME content type of the content.", + "defaultValue": "" + }, + { + "name": "directoryName", + "type": "expressionTextArea", + "required": true, + "description": "Path of the directory to be created.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the directory will be created.", + "defaultValue": "" + }, + { + "name": "group", + "type": "stringOrExpression", + "required": false, + "description": "The group to be set on the directory.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "owner", + "type": "stringOrExpression", + "required": false, + "description": "The owner to be set on the directory.", + "defaultValue": "" + }, + { + "name": "permissions", + "type": "stringOrExpression", + "required": false, + "description": "Permissions to be set on the directory.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sourceLeaseId", + "type": "stringOrExpression", + "required": false, + "description": "The lease ID specified for the source directory.", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds to wait for the operation to complete.", + "defaultValue": "" + }, + { + "name": "umask", + "type": "stringOrExpression", + "required": false, + "description": "The umask to be set on the directory.", + "defaultValue": "" + } + ] }, { - "name": "deleteDirectory", - "description": "Delete Directory in the file system", - "isHidden": false - }, - { - "name": "uploadFile", - "description": "Upload File to the file system", - "isHidden": false + "name": "getMetadata", + "description": "Get Metadata", + "isHidden": false, + "parameters": [ + { + "name": "filePath", + "type": "expressionTextArea", + "required": true, + "description": "Path of the file for which metadata is to be fetched.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the file is located.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "downloadFile", - "description": "Download File from the file system", - "isHidden": false + "name": "flushFile", + "description": "Flush File", + "isHidden": false, + "parameters": [ + { + "name": "cacheControl", + "type": "stringOrExpression", + "required": false, + "description": "The value of the Cache-Control response header.", + "defaultValue": "" + }, + { + "name": "contentDisposition", + "type": "stringOrExpression", + "required": false, + "description": "The value of the Content-Disposition response header.", + "defaultValue": "" + }, + { + "name": "contentEncoding", + "type": "stringOrExpression", + "required": false, + "description": "Defines the encoding type (e.g., \"gzip\", \"UTF-8\").", + "defaultValue": "" + }, + { + "name": "contentLanguage", + "type": "stringOrExpression", + "required": false, + "description": "The language of the content.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "The MIME content type of the content.", + "defaultValue": "" + }, + { + "name": "fileLength", + "type": "stringOrExpression", + "required": true, + "description": "Length of the file to flush.", + "defaultValue": "" + }, + { + "name": "filePathToFlush", + "type": "expressionTextArea", + "required": true, + "description": "Path of the file to flush.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the file is located.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "leaseAction", + "type": "combo", + "required": false, + "description": "The lease action to perform on the file. Supported values: None, Acquire, Auto Renew, Acquire Release, Release", + "defaultValue": "None" + }, + { + "name": "leaseDuration", + "type": "stringOrExpression", + "required": false, + "description": "The lease duration in seconds.", + "defaultValue": "" + }, + { + "name": "leaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "proposedLeaseId", + "type": "stringOrExpression", + "required": false, + "description": "A proposed lease ID that can be set when acquiring or changing a lease.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds after which the operation will time out.", + "defaultValue": "" + }, + { + "name": "uncommittedDataRetained", + "type": "checkbox", + "required": false, + "description": "Indicates whether uncommitted data is retained.", + "defaultValue": "false" + } + ] }, { - "name": "deleteFile", - "description": "Delete File from the file system", - "isHidden": false + "name": "renamePath", + "description": "Rename Path", + "isHidden": false, + "parameters": [ + { + "name": "destinationIfMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "destinationIfModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "destinationIfNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "destinationIfUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "destinationLeaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided source leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "directoryName", + "type": "expressionTextArea", + "required": true, + "description": "Path of the directory to be renamed.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the directory is located.", + "defaultValue": "" + }, + { + "name": "newDirectoryName", + "type": "expressionTextArea", + "required": true, + "description": "New path of the directory.", + "defaultValue": "" + }, + { + "name": "newFileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the new file system where the directory is to be moved.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sourceIfMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "sourceIfModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "sourceIfNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "sourceIfUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "sourceLeaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided source leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { - "name": "renamePath", - "description": "Rename path of a file or directory in the file system", - "isHidden": false + "name": "uploadFile", + "description": "Upload File", + "isHidden": false, + "parameters": [ + { + "name": "blockSize", + "type": "stringOrExpression", + "required": false, + "description": "The size of the block in MB.", + "defaultValue": "" + }, + { + "name": "cacheControl", + "type": "stringOrExpression", + "required": false, + "description": "The value of the Cache-Control response header.", + "defaultValue": "" + }, + { + "name": "contentDisposition", + "type": "stringOrExpression", + "required": false, + "description": "The value of the Content-Disposition response header.", + "defaultValue": "" + }, + { + "name": "contentEncoding", + "type": "stringOrExpression", + "required": false, + "description": "Defines the encoding type (e.g., \"gzip\", \"UTF-8\").", + "defaultValue": "" + }, + { + "name": "contentLanguage", + "type": "stringOrExpression", + "required": false, + "description": "The language of the content.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "The MIME content type of the content.", + "defaultValue": "" + }, + { + "name": "filePathToUpload", + "type": "expressionTextArea", + "required": true, + "description": "Path of the file to be uploaded.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the file will be uploaded.", + "defaultValue": "" + }, + { + "name": "inputType", + "type": "combo", + "required": true, + "description": "Path of the file to be uploaded. Supported values: Local File, Text Content", + "defaultValue": "Local File" + }, + { + "name": "localFilePath", + "type": "expressionTextArea", + "required": true, + "description": "File to be uploaded.", + "defaultValue": "" + }, + { + "name": "maxConcurrency", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of blocks that can be uploaded in parallel.", + "defaultValue": "" + }, + { + "name": "maxSingleUploadSize", + "type": "stringOrExpression", + "required": false, + "description": "The maximum size of a single upload in bytes.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "textContent", + "type": "expressionTextArea", + "required": true, + "description": "Text content to be uploaded (without using a file).", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { - "name": "readFile", - "description": "Read File from the file system", - "isHidden": false + "name": "listPaths", + "description": "List Paths of the File System", + "isHidden": false, + "parameters": [ + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the maximum number of blobs to return per page, including all BlobPrefix elements.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "path", + "type": "expressionTextArea", + "required": false, + "description": "Path of the directory for which paths are to be fetched.", + "defaultValue": "" + }, + { + "name": "recursive", + "type": "checkbox", + "required": false, + "description": "If true, all paths under the specified path are fetched.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { - "name": "getMetadata", - "description": "Get Metadata of the file system", - "isHidden": false + "name": "createFileSystem", + "description": "Create File System", + "isHidden": false, + "parameters": [ + { + "name": "accessType", + "type": "combo", + "required": false, + "description": "The type of public access to be set on the file system. Supported values: NONE, BLOB, CONTAINER", + "defaultValue": "NONE" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system to be created.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds to wait for the operation to complete.", + "defaultValue": "" + } + ] }, { - "name": "updateMetadata", - "description": "Update Metadata of the file system", - "isHidden": false + "name": "appendFile", + "description": "Append File", + "isHidden": false, + "parameters": [ + { + "name": "filePathToAppend", + "type": "expressionTextArea", + "required": true, + "description": "Path of the file to be appended.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the file will be uploaded.", + "defaultValue": "" + }, + { + "name": "flush", + "type": "checkbox", + "required": false, + "description": "Flush the data to the file after appending.", + "defaultValue": "true" + }, + { + "name": "inputType", + "type": "combo", + "required": true, + "description": "Path of the file to be uploaded. Supported values: Local File, Text Content", + "defaultValue": "Local File" + }, + { + "name": "leaseAction", + "type": "combo", + "required": false, + "description": "The lease action to perform on the file. Supported values: None, Acquire, Auto Renew, Acquire Release, Release", + "defaultValue": "None" + }, + { + "name": "leaseDuration", + "type": "stringOrExpression", + "required": false, + "description": "The lease duration in seconds.", + "defaultValue": "" + }, + { + "name": "leaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "localFilePath", + "type": "expressionTextArea", + "required": true, + "description": "File to be uploaded.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "proposedLeaseId", + "type": "stringOrExpression", + "required": false, + "description": "A proposed lease ID that can be set when acquiring or changing a lease.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "textContent", + "type": "expressionTextArea", + "required": true, + "description": "Text content to be uploaded (without using a file).", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { - "name": "listPaths", - "description": "List Paths of the file system", - "isHidden": false + "name": "deleteDirectory", + "description": "Delete Directory", + "isHidden": false, + "parameters": [ + { + "name": "directoryName", + "type": "expressionTextArea", + "required": true, + "description": "Directory path to be deleted.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the directory is located.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "leaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "recursive", + "type": "checkbox", + "required": false, + "description": "If checked, the contents of the directory will be deleted.", + "defaultValue": "true" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { - "name": "appendFile", - "description": "Append text to a file in the file system", - "isHidden": false + "name": "updateMetadata", + "description": "Update Meta Data", + "isHidden": false, + "parameters": [ + { + "name": "filePathToAddMetaData", + "type": "expressionTextArea", + "required": true, + "description": "Path of the file to add meta data.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the file is located.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "leaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds after which the operation will time out.", + "defaultValue": "" + } + ] }, { - "name": "flushFile", - "description": "Flush the file after appending in the filesystem.", - "isHidden": false + "name": "deleteFile", + "description": "Delete File", + "isHidden": false, + "parameters": [ + { + "name": "directoryName", + "type": "expressionTextArea", + "required": true, + "description": "File path to be deleted.", + "defaultValue": "" + }, + { + "name": "fileSystemName", + "type": "expressionTextArea", + "required": true, + "description": "Name of the file system where the directory is located.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag matches the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifModifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource's ETag does not match the specified ETag value.", + "defaultValue": "" + }, + { + "name": "ifUnmodifiedSince", + "type": "stringOrExpression", + "required": false, + "description": "The operation will be performed only if the resource has not been modified since the specified time.", + "defaultValue": "" + }, + { + "name": "leaseId", + "type": "stringOrExpression", + "required": false, + "description": "This request will succeed only if the provided leaseId matches the actual lease on the resource", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Time in seconds after which the operation will time out.", + "defaultValue": "" + } + ] } ], "connections": [ { - "name": "azureDataLake", - "description": "Azure Data Lake Storage Gen2 Connection", - "iconUrl": "" + "name": "MSAzureDataLake", + "description": "Azure Data Lake Connector", + "iconUrl": "", + "parameters": [ + { + "name": "accessType", + "type": "combo", + "required": true, + "description": "The access key for the storage account. Supported values: Access Key, Shared Access Signature, OAuth2", + "defaultValue": "Access Key" + }, + { + "name": "accountKey", + "type": "stringOrExpression", + "required": true, + "description": "The access key for the storage account.", + "defaultValue": "" + }, + { + "name": "accountName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the azure storage account.", + "defaultValue": "" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "The client ID of the application.", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "The client secret of the application.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Azure Data Lake connection", + "defaultValue": "AZURE_CONNECTION_ACCESS_KEY" + }, + { + "name": "sasToken", + "type": "stringOrExpression", + "required": true, + "description": "The sas token for the storage account.", + "defaultValue": "" + }, + { + "name": "tenantId", + "type": "stringOrExpression", + "required": true, + "description": "The tenant ID of the application.", + "defaultValue": "" + } + ] } ] }, @@ -978,6 +8818,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-ceridiandayforce", + "id": "", "version": { "tagName": "1.0.2", "releaseId": "191449967", @@ -987,452 +8828,542 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "Init operation", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeDetails", "description": "Get employee details REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployees", "description": "Get employees REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployee", "description": "POST employees REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployee", "description": "PATCH employees REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getOrgUnits", "description": "Get Organization Units REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postOrgUnits", "description": "Post Organization Units REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchOrgUnits", "description": "Patch Organization Units REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getOrgUnitDetails", "description": "Get Organization Units Details REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getReportMetadata", "description": "Get Organization Units REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getReportMetadataDetails", "description": "Get Organization Units REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getReports", "description": "Get Organization Units REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeManagers", "description": "Get employee Managers REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeWorkAssignmentManagers", "description": "Get employee Managers REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeWorkAssignmentManagers", "description": "Post employee Managers REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeWorkAssignmentManagers", "description": "Patch employee Managers REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getDocumentManagementSecurityGroups", "description": "Retrieve Document Management Security Groups assigned to an employee that control access to documents REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeLocations", "description": "Retrieve locations, and their respective authority types, that an employee manages REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeLocations", "description": "Assign locations and authority types for an employee to manage REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeLocations", "description": "Update assigned locations and authority types for an employee to manage REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeRoles", "description": "Retrieve user roles assigned to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeRoles", "description": "Assign roles to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeRoles", "description": "Update the assigned roles to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeSSOAccounts", "description": "Retrieve Single Sign-On (SSO) accounts of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeSSOAccounts", "description": "Create Single Sign-On (SSO) accounts of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeSSOAccounts", "description": "Update Single Sign-On (SSO) accounts of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getUserPayAdjustCodeGroups", "description": "Retrieve User Pay Adjustment Groups assigned to an employee. These control which pay adjustment codes the employee can assign to timesheets REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeOrgInfo", "description": "Get employee Organization Info REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeWorkAssignments", "description": "Get employee work assignments REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeWorkAssignments", "description": "Post employee work assignments REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeWorkAssignments", "description": "Patch employee work assignments REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeEmploymentStatuses", "description": "Retrieve an employee's employment statuses that control how employee's pay, time-off, statutory holidays, etc. are calculated. REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeEmploymentStatuses", "description": "Create an employee's employment statuses that control how employee's pay, time-off, statutory holidays, etc. are calculated. REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeEmploymentStatuses", "description": "Update an employee's employment statuses that control how employee's pay, time-off, statutory holidays, etc. are calculated. REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeClockDeviceGroups", "description": "Retrieve an employee's clock device groups that control access to the clocks the employee can punch on. REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeCompensationSummary", "description": "Retrieve an employee's condensed status information based on compensation changes. REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeCourses", "description": "Retrieve courses associated to an employee. REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeEmploymentAgreements", "description": "Retrieve the employment agreement information of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeEmploymentAgreements", "description": "Retrieve the employment agreement information of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeEmploymentAgreements", "description": "Retrieve the employment agreement information of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeEmploymentTypes", "description": "Retrieve employee employment types (i.e: contractor, pensioner, etc.) REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeHighlyCompensatedEmployees", "description": "Retrieve highly compensated employee indicators REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeHRIncidents", "description": "Retrieve HR incidents attached to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeLabourDefaults", "description": "Retrieve employee labor defaults. Labor defaults specify an employee default postion, project, docket or other timesheet information. REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeOnboardingPolicies", "description": "Retrieve onboarding policies assigned to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeOnboardingPolicies", "description": "Assign onboarding policies to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeOnboardingPolicies", "description": "Update the onboarding policies assigned to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeePayAdjustmentGroups", "description": "Retrieve employee pay adjustment groups that control which pay codes can be used in an employee's timesheet REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeePayGradeRates", "description": "Retrieve employee pay grade rates related to their position rate policies REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeePerformanceRatings", "description": "Retrieve details on employee performance reviews REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeProperties", "description": "Retrieve employee properties that represent custom defined information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeProperties", "description": "Create employee properties that represent custom defined information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeProperties", "description": "Update employee properties that represent custom defined information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeSkills", "description": "Retrieve skills attached to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeTrainingPrograms", "description": "Retrieve training programs attached to an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeUnionMemberships", "description": "Retrieve employee union membership information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeWorkContracts", "description": "Retrieve work contracts used in UK to represent the employee contracted work duration REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeWorkContracts", "description": "Create work contracts used in UK to represent the employee contracted work duration REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeWorkContracts", "description": "Update work contracts used in UK to represent the employee contracted work duration REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeAddresses", "description": "Retrieve addresses of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeAddresses", "description": "Create addresses of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeAddresses", "description": "Update addresses of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeCANFederalTaxes", "description": "Retrieve a Canadian employee's total federal claim amount, resident status and authorized tax credits REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeCANStateTaxes", "description": "Retrieve a Canadian employee's total provincial claim amount, prescribed deductions and authorized tax credits REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeCANTaxStatuses", "description": "Retrieve a Canadian employee's provincial tax filing status (e.g. single, married) REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeContacts", "description": "Retrieve contacts of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeContacts", "description": "Create contacts of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeContacts", "description": "Update contacts of an employee REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeDirectDeposits", "description": "Retrieve an employee's direct deposit information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeEmergencyContacts", "description": "Retrieve an employee's emergency contacts REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeEmergencyContacts", "description": "Create an employee's emergency contacts REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeEmergencyContacts", "description": "Update an employee's emergency contacts REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeEthnicities", "description": "Retrieve an employee's ethnicity information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeHealthAndWellness", "description": "Retrieve an employee's tobacco use status REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeMaritalStatuses", "description": "Retrieve an employee's marital status information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeMaritalStatuses", "description": "Create an employee's marital status information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchEmployeeMaritalStatuses", "description": "Update an employee's marital status information REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeUSFederalTaxes", "description": "Retrieve a US employee's total federal claim amount, resident status and authorized tax credits REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeUSStateTaxes", "description": "Retrieve a US employee's total state claim amount, prescribed deductions and authorized tax credits REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeUSTaxStatuses", "description": "Retrieve a US employee's state tax filing status (e.g. single, married) REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getAListOfDocuments", "description": "This request allows to retrieve the list of documents attached to an employee. The response includes the document GUID used to retrieve contents with Get Document Details REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getDocumentDetails", "description": "This request allows to retrieve the contents of a particular document. It requires the document GUID that can be obtained with Get a List of Documents REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getAvailability", "description": "Availabilty represents the periods an employee is available to be scheduled for work. This request allows you to retrieve a single employee's daily availability between two dates. In order to use it, an employee XRefCodes is needed. Employee XRefCodes can be retrieved with GET Employees REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getSchedules", "description": "Retrieve the configured schedules for a single employee for every day within a defined period. In order to use this request, an employee XRefCodes is needed. Employee XRefCodes can be retrieved with GET Employees REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getTimeAwayFromWork", "description": "Retrieve the scheduled time away from work (TAFW) periods of a single employee. In order to use this request, an employee XRefCodes is needed. Employee XRefCodes can be retrieved with GET Employees REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeePunches", "description": "Extract the worked shift data for several employees at a time. Required parameters for the call include FilterTransactionStartTimeUTC and FilterTransactionEndTimeUTC. The system will search for all employee punch records that were modified between these two dates. The two dates must be 7 days apart or less. REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getEmployeeRawPunches", "description": "Retrieve raw punches as they are entered at the clock REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "postEmployeeRawPunches", "description": "Insert a raw punch. This raw punch record will be treated as a punch coming from the clock and be validated against configured punch policies REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getJobPostings", "description": "Availabilty represents the periods an employee is available to be scheduled for work. This request allows you to retrieve a single employee's daily availability between two dates. In order to use it, an employee XRefCodes is needed. Employee XRefCodes can be retrieved with GET Employees REST API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patchI9Order", "description": "Update I-9 employment eligibility verification order status REST API", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [] @@ -1441,6 +9372,25 @@ export const CONNECTOR_DB = [ "connectorRank": 56, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-dayforce.gif" }, + { + "connectorName": "Creatio", + "repoName": "", + "description": "The Creatio Connector allows you to work with almost all the entities and functionalities of Creatio through REST interface, a web-based service that allows organisations to manage Customer Relationship Management (CRM) data while integration with external services/applications. You can use the Creatio connector to create, query, retrieve, update, and delete any of the objects that are exposed through the Creatio REST API layer by adding the authentication. It contains Contact, Case and Account mediators to manage CRUD operations through REST APIs. The Creatio Connector was contributed by Mitra Innovation.", + "connectorType": "Connector", + "mavenGroupId": "", + "mavenArtifactId": "", + "version": { + "tagName": "", + "releaseId": "", + "isLatest": true, + "isDeprecated": false, + "operations": [], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 0, + "iconUrl": "" + }, { "connectorName": "CSV", "repoName": "mediation-csv-module", @@ -1448,44 +9398,409 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.module", "mavenArtifactId": "mi-module-csv", + "id": "", "version": { - "tagName": "2.0.0", - "releaseId": "214700833", + "tagName": "3.0.0", + "releaseId": "235130628", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "csvToCsv", - "description": "Transform a CSV payload", - "isHidden": false + "name": "csvToXml", + "description": "CSV to XML", + "isHidden": false, + "parameters": [ + { + "name": "columnsToSkip", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of column indexes to skip. Leave blank to skip no columns", + "defaultValue": "" + }, + { + "name": "dataRowsToSkip", + "type": "stringOrExpression", + "required": false, + "description": "Number of data rows to skip. Default is 0", + "defaultValue": "" + }, + { + "name": "description", + "type": "string", + "required": false, + "description": "Component description", + "defaultValue": "" + }, + { + "name": "groupElementNamespace", + "type": "stringOrExpression", + "required": false, + "description": "Namespace URI for group XML element", + "defaultValue": "" + }, + { + "name": "groupElementNamespaceURI", + "type": "stringOrExpression", + "required": false, + "description": "Namespace prefix group XML element", + "defaultValue": "" + }, + { + "name": "groupElementTag", + "type": "stringOrExpression", + "required": false, + "description": "Name of the group xml elements", + "defaultValue": "" + }, + { + "name": "headerPresent", + "type": "comboOrExpression", + "required": false, + "description": "Is there a header in the CSV payload ? Default is Absent Supported values: Present, Absent", + "defaultValue": "Absent" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "rootElementNamespace", + "type": "stringOrExpression", + "required": false, + "description": "Namespace URI for root XML element", + "defaultValue": "" + }, + { + "name": "rootElementNamespaceURI", + "type": "stringOrExpression", + "required": false, + "description": "Namespace prefix for root XML element", + "defaultValue": "" + }, + { + "name": "rootElementTag", + "type": "stringOrExpression", + "required": false, + "description": "Tag name of the root XML element", + "defaultValue": "" + }, + { + "name": "skipHeader", + "type": "booleanOrExpression", + "required": false, + "description": "Skip header from the content. Default is False", + "defaultValue": "False" + }, + { + "name": "tagNames", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of tag names for result XML", + "defaultValue": "" + }, + { + "name": "valueSeparator", + "type": "stringOrExpression", + "required": false, + "description": "Specify a value separator for CSV. Default is comma ( , )", + "defaultValue": "" + } + ] }, { "name": "csvToJson", - "description": "Convert CSV to Json", - "isHidden": false + "description": "CSV to Json", + "isHidden": false, + "parameters": [ + { + "name": "columnsToSkip", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of column indexes to skip. Leave blank to skip no columns", + "defaultValue": "" + }, + { + "name": "csvEmptyValues", + "type": "comboOrExpression", + "required": false, + "description": "Treat empty CSV values as null or empty strings. Default is to consider as null Supported values: Null, Empty", + "defaultValue": "Null" + }, + { + "name": "dataRowsToSkip", + "type": "stringOrExpression", + "required": false, + "description": "Number of data rows to skip. Default is 0", + "defaultValue": "" + }, + { + "name": "dataTypes", + "type": "keyValueTable", + "required": false, + "description": "Specify data types as comma separated values. Supporting: string,integer,number,boolean", + "defaultValue": "" + }, + { + "name": "description", + "type": "string", + "required": false, + "description": "Component description", + "defaultValue": "" + }, + { + "name": "headerPresent", + "type": "comboOrExpression", + "required": false, + "description": "Is there a header in the CSV payload ? Default is Absent Supported values: Present, Absent", + "defaultValue": "Absent" + }, + { + "name": "jsonKeys", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated keys to use in the JSON object. Using the CSV header or auto generated keys if not specified", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "rootJsonKey", + "type": "stringOrExpression", + "required": false, + "description": "Key for embedding JSON object. Leave blank to get the original result", + "defaultValue": "" + }, + { + "name": "skipHeader", + "type": "booleanOrExpression", + "required": false, + "description": "Skip header from the content. Default is False", + "defaultValue": "False" + }, + { + "name": "valueSeparator", + "type": "stringOrExpression", + "required": false, + "description": "Specify a value separator for CSV. Default is comma ( , )", + "defaultValue": "" + } + ] }, { - "name": "csvToXml", - "description": "Convert CSV to XML", - "isHidden": false + "name": "csvToCsv", + "description": "Remove CSV Header", + "isHidden": false, + "parameters": [ + { + "name": "columnOrdering", + "type": "comboOrExpression", + "required": false, + "description": "Order columns ascending or descending. Default is ascending Supported values: Ascending, Descending", + "defaultValue": "Ascending" + }, + { + "name": "columnsToSkip", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of column indexes to skip. Leave blank to skip no columns", + "defaultValue": "" + }, + { + "name": "customHeader", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of header to set as CSV payload header", + "defaultValue": "" + }, + { + "name": "customValueSeparator", + "type": "stringOrExpression", + "required": false, + "description": "Specify a value separator for CSV output. Default is comma ( , )", + "defaultValue": "" + }, + { + "name": "dataRowsToSkip", + "type": "stringOrExpression", + "required": false, + "description": "Number of data rows to skip. Default is 0", + "defaultValue": "" + }, + { + "name": "description", + "type": "string", + "required": false, + "description": "Component description", + "defaultValue": "CSV to CSV" + }, + { + "name": "headerPresent", + "type": "comboOrExpression", + "required": false, + "description": "Is there a header in the CSV payload ? Default is Absent Supported values: Present, Absent", + "defaultValue": "Absent" + }, + { + "name": "orderByColumn", + "type": "stringOrExpression", + "required": false, + "description": "Order the CSV content by the values of the given column", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "skipHeader", + "type": "booleanOrExpression", + "required": false, + "description": "Skip header from the content. Default is False", + "defaultValue": "False" + }, + { + "name": "suppressEscaping", + "type": "booleanOrExpression", + "required": false, + "description": "Specify whether to suppress all escaping in the output Csv payload. Default is false. (ie. Escape characters will be present)", + "defaultValue": "false" + }, + { + "name": "valueSeparator", + "type": "stringOrExpression", + "required": false, + "description": "Specify a value separator for CSV. Default is comma ( , )", + "defaultValue": "" + } + ] }, { "name": "jsonToCsv", - "description": "Convert Json to CSV", - "isHidden": false + "description": "JSON to CSV", + "isHidden": false, + "parameters": [ + { + "name": "customHeader", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated strings to set as the CSV header", + "defaultValue": "" + }, + { + "name": "customValueSeparator", + "type": "stringOrExpression", + "required": false, + "description": "Specify a value separator for CSV output. Default is comma ( , )", + "defaultValue": "" + }, + { + "name": "description", + "type": "string", + "required": false, + "description": "Component description", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "suppressEscaping", + "type": "booleanOrExpression", + "required": false, + "description": "Specify whether to suppress all escaping in the output Csv payload. Default is false. (ie. Escape characters will be present)", + "defaultValue": "false" + } + ] }, { "name": "xmlToCsv", - "description": "Transform XML to CSV", - "isHidden": false + "description": "XML to CSV", + "isHidden": false, + "parameters": [ + { + "name": "customHeader", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated strings to set as the CSV header", + "defaultValue": "" + }, + { + "name": "description", + "type": "string", + "required": false, + "description": "Component description", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "suppressEscaping", + "type": "booleanOrExpression", + "required": false, + "description": "Specify whether to suppress all escaping in the output Csv payload. Default is false. (ie. Escape characters will be present)", + "defaultValue": "false" + } + ] } ], "connections": [] }, - "otherVersions": { - "1.0.6": "191799733", - "1.0.7": "204643750" - }, + "otherVersions": {}, "connectorRank": 3, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/mediation-csv-module.png" }, @@ -1496,94 +9811,1299 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-email", + "id": "", "version": { - "tagName": "2.0.0", - "releaseId": "214089850", + "tagName": "2.0.1", + "releaseId": "233268390", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Init operation", - "isHidden": true - }, - { - "name": "list", - "description": "List all the emails.", - "isHidden": false + "name": "expungeFolder", + "description": "Expunge Folder", + "isHidden": false, + "parameters": [ + { + "name": "folder", + "type": "stringOrExpression", + "required": false, + "description": "Name of the mailbox folder where the emails with the DELETED flag are scheduled to be permanently deleted", + "defaultValue": "Inbox" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "expungeFolder", - "description": "Delete all the messages scheduled for deletion with the DELETED flag set from the mailbox.", - "isHidden": false + "name": "getEmailAttachment", + "description": "Get Email Attachment", + "isHidden": false, + "parameters": [ + { + "name": "attachmentIndex", + "type": "stringOrExpression", + "required": true, + "description": "Index of the attachment to be retrieved in the email response", + "defaultValue": "0" + }, + { + "name": "emailId", + "type": "stringOrExpression", + "required": true, + "description": "Index of the email to be retrieved in the email response", + "defaultValue": "" + }, + { + "name": "folder", + "type": "stringOrExpression", + "required": true, + "description": "Folder to be searched for the email", + "defaultValue": "Inbox" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "markAsDeleted", - "description": "Mark an incoming email as DELETED. Not physically deleted, only a state change.", - "isHidden": false + "name": "list", + "description": "List Emails", + "isHidden": false, + "parameters": [ + { + "name": "answered", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to retrieve 'answered' or 'unanswered' emails", + "defaultValue": "" + }, + { + "name": "deleteAfterRetrieve", + "type": "booleanOrExpression", + "required": true, + "description": "Whether the email should be deleted after retrieving", + "defaultValue": "false" + }, + { + "name": "deleted", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to retrieve 'deleted' or 'not deleted' emails", + "defaultValue": "" + }, + { + "name": "folder", + "type": "stringOrExpression", + "required": false, + "description": "Name of the Mailbox folder to retrieve emails from", + "defaultValue": "Inbox" + }, + { + "name": "fromRegex", + "type": "stringOrExpression", + "required": false, + "description": "From email address to match with the wanted emails", + "defaultValue": "" + }, + { + "name": "limit", + "type": "stringOrExpression", + "required": false, + "description": "The number of emails to be retrieved", + "defaultValue": "10" + }, + { + "name": "offset", + "type": "stringOrExpression", + "required": false, + "description": "The index from which to retrieve emails", + "defaultValue": "0" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "receivedSince", + "type": "stringOrExpression", + "required": false, + "description": "The date after which to retrieve received emails", + "defaultValue": "" + }, + { + "name": "receivedUntil", + "type": "stringOrExpression", + "required": false, + "description": "The date until which to retrieve received emails", + "defaultValue": "" + }, + { + "name": "recent", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to retrieve 'recent' or 'past' emails", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "seen", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to retrieve 'seen' or 'not seen' emails", + "defaultValue": "" + }, + { + "name": "sentSince", + "type": "stringOrExpression", + "required": false, + "description": "The date after which to retrieve sent emails", + "defaultValue": "" + }, + { + "name": "sentUntil", + "type": "stringOrExpression", + "required": false, + "description": "The date until which to retrieve sent emails", + "defaultValue": "" + }, + { + "name": "subjectRegex", + "type": "stringOrExpression", + "required": false, + "description": "Subject Regex to match with the wanted emails", + "defaultValue": "" + } + ] + }, + { + "name": "markAsDelete", + "description": "Mark As Delete", + "isHidden": false, + "parameters": [ + { + "name": "emailId", + "type": "stringOrExpression", + "required": true, + "description": "Email ID Number of the email to mark as deleted", + "defaultValue": "" + }, + { + "name": "folder", + "type": "stringOrExpression", + "required": false, + "description": "Name of the Mailbox folder to retrieve emails from", + "defaultValue": "Inbox" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "markAsRead", - "description": "Marks a single email as READ changing its state in the specified mailbox folder.", - "isHidden": false + "description": "Mark As Read", + "isHidden": false, + "parameters": [ + { + "name": "emailId", + "type": "stringOrExpression", + "required": true, + "description": "Email ID Number of the email to mark as read", + "defaultValue": "" + }, + { + "name": "folder", + "type": "stringOrExpression", + "required": false, + "description": "Name of the Mailbox folder to retrieve emails from", + "defaultValue": "Inbox" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "send", - "description": "Sends an email message.", - "isHidden": false + "description": "Send Email", + "isHidden": false, + "parameters": [ + { + "name": "attachments", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated file paths of the attachments that are sent along with the email body", + "defaultValue": "" + }, + { + "name": "bcc", + "type": "stringOrExpression", + "required": false, + "description": "The recipient addresses of 'BCC' (blind carbon copy) type", + "defaultValue": "" + }, + { + "name": "cc", + "type": "stringOrExpression", + "required": false, + "description": "The recipient addresses of 'CC' (carbon copy) type", + "defaultValue": "" + }, + { + "name": "content", + "type": "expressionTextArea", + "required": true, + "description": "Body of the message in any format", + "defaultValue": "" + }, + { + "name": "contentTransferEncoding", + "type": "stringOrExpression", + "required": false, + "description": "Encoding used to indicate the type of transformation that is used to represent the body in an acceptable manner for transport", + "defaultValue": "Base64" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "Content Type of the body", + "defaultValue": "text/html" + }, + { + "name": "encoding", + "type": "stringOrExpression", + "required": false, + "description": "The character encoding of the body", + "defaultValue": "UTF-8" + }, + { + "name": "from", + "type": "stringOrExpression", + "required": true, + "description": "The 'From' address of the message sender", + "defaultValue": "" + }, + { + "name": "inlineImages", + "type": "stringOrExpression", + "required": false, + "description": "Array of comma separated inline images that should be embedded inline to email body", + "defaultValue": "[]" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "personalName", + "type": "stringOrExpression", + "required": false, + "description": "The personal name of the message sender", + "defaultValue": "" + }, + { + "name": "replyTo", + "type": "stringOrExpression", + "required": false, + "description": "The email addresses to which to reply to this email", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "subject", + "type": "expressionTextArea", + "required": false, + "description": "The subject of the email", + "defaultValue": "" + }, + { + "name": "to", + "type": "stringOrExpression", + "required": true, + "description": "The recipient addresses of 'To' (primary) type", + "defaultValue": "" + } + ] }, { "name": "delete", - "description": "Deletes an email.", - "isHidden": false + "description": "Delete Email", + "isHidden": false, + "parameters": [ + { + "name": "emailId", + "type": "stringOrExpression", + "required": true, + "description": "Email ID Number of the email to delete", + "defaultValue": "" + }, + { + "name": "folder", + "type": "stringOrExpression", + "required": false, + "description": "Name of the Mailbox folder to retrieve emails from", + "defaultValue": "Inbox" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "getEmailBody", - "description": "Retrieves email body by index.", - "isHidden": false - }, - { - "name": "getEmailAttachment", - "description": "Retrieves email attachment by index.", - "isHidden": false + "description": "Get Email Body", + "isHidden": false, + "parameters": [ + { + "name": "emailId", + "type": "stringOrExpression", + "required": true, + "description": "Index of the email to be retrieved in the email response", + "defaultValue": "" + }, + { + "name": "folder", + "type": "stringOrExpression", + "required": true, + "description": "Folder to be searched for the email", + "defaultValue": "Inbox" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] } ], "connections": [ { - "name": "POP3", - "description": "Connection for retrieving emails via POP3.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_POP3.svg" + "name": "SMTP", + "description": "SMTP Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_SMTP.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the email connection", + "defaultValue": "EMAIL_CONNECTION_1" + }, + { + "name": "connectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket connection timeout value", + "defaultValue": "" + }, + { + "name": "evictionCheckInterval", + "type": "stringOrExpression", + "required": false, + "description": "The number of milliseconds between runs of the object evictor", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "stringOrExpression", + "required": false, + "description": "The behavior of the pool when the pool is exhausted", + "defaultValue": "" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "Host name of the mail server", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of active connections in the pool", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of idle connections in the pool", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time to wait for a pooled component to become available", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "stringOrExpression", + "required": false, + "description": "The minimum amount of time an object may sit idle in the pool before it is eligible for eviction", + "defaultValue": "" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": false, + "description": "Password to connect with the mail server", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port number of the mail server", + "defaultValue": "" + }, + { + "name": "readTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket read timeout value", + "defaultValue": "" + }, + { + "name": "requireAuthentication", + "type": "booleanOrExpression", + "required": true, + "description": "Whether authentication is required to connect with SMTP server", + "defaultValue": "true" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": false, + "description": "Username used to connect with the mail server", + "defaultValue": "" + }, + { + "name": "writeTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket write timeout value", + "defaultValue": "" + } + ] }, { - "name": "POP3S", - "description": "Secure connection for retrieving emails via POP3S.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_POP3S.svg" + "name": "IMAP", + "description": "IMAP Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_IMAP.svg", + "parameters": [ + { + "name": "clientId", + "type": "stringOrExpression", + "required": false, + "description": "Value of the Client ID you obtained when you register your application", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": false, + "description": "Value of the Client Secret you obtained when you register your application", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the email connection", + "defaultValue": "EMAIL_CONNECTION_1" + }, + { + "name": "connectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket connection timeout value", + "defaultValue": "" + }, + { + "name": "enableOAuth2", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to enable OAuth2 Authentication", + "defaultValue": "false" + }, + { + "name": "evictionCheckInterval", + "type": "stringOrExpression", + "required": false, + "description": "The number of milliseconds between runs of the object evictor", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "stringOrExpression", + "required": false, + "description": "The behavior of the pool when the pool is exhausted", + "defaultValue": "" + }, + { + "name": "grantType", + "type": "comboOrExpression", + "required": false, + "description": "Grant type to generate access token Supported values: AUTHORIZATION_CODE, CLIENT_CREDENTIALS", + "defaultValue": "" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "Host name of the mail server", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of active connections in the pool", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of idle connections in the pool", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time to wait for a pooled component to become available", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "stringOrExpression", + "required": false, + "description": "The minimum amount of time an object may sit idle in the pool before it is eligible for eviction", + "defaultValue": "" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": false, + "description": "Password to connect with the mail server", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port number of the mail server", + "defaultValue": "" + }, + { + "name": "readTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket read timeout value", + "defaultValue": "" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": false, + "description": "The refresh token generated (This is applicable for grant type AUTHORIZATION_CODE)", + "defaultValue": "" + }, + { + "name": "scope", + "type": "stringOrExpression", + "required": false, + "description": "Scope (This is applicable for grant type CLIENT_CREDENTIALS)", + "defaultValue": "" + }, + { + "name": "tokenUrl", + "type": "stringOrExpression", + "required": false, + "description": "The token endpoint URL to generate access token", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "Username used to connect with the mail server", + "defaultValue": "" + }, + { + "name": "writeTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket write timeout value", + "defaultValue": "" + } + ] }, { - "name": "IMAP", - "description": "Connection for accessing emails via IMAP.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_IMAP.svg" + "name": "POP3", + "description": "POP3 Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_POP3.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the email connection", + "defaultValue": "EMAIL_CONNECTION_1" + }, + { + "name": "connectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket connection timeout value", + "defaultValue": "" + }, + { + "name": "evictionCheckInterval", + "type": "stringOrExpression", + "required": false, + "description": "The number of milliseconds between runs of the object evictor", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "stringOrExpression", + "required": false, + "description": "The behavior of the pool when the pool is exhausted", + "defaultValue": "" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "Host name of the mail server", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of active connections in the pool", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of idle connections in the pool", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time to wait for a pooled component to become available", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "stringOrExpression", + "required": false, + "description": "The minimum amount of time an object may sit idle in the pool before it is eligible for eviction", + "defaultValue": "" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "Password to connect with the mail server", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port number of the mail server", + "defaultValue": "" + }, + { + "name": "readTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket read timeout value", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "Username used to connect with the mail server", + "defaultValue": "" + }, + { + "name": "writeTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket write timeout value", + "defaultValue": "" + } + ] }, { "name": "IMAPS", - "description": "Secure connection for accessing emails via IMAPS.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_IMAPS.svg" + "description": "IMAP Secured Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_IMAPS.svg", + "parameters": [ + { + "name": "checkServerIdentity", + "type": "booleanOrExpression", + "required": false, + "description": "Whether server identity should be checked", + "defaultValue": "" + }, + { + "name": "cipherSuites", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of Cipher Suites", + "defaultValue": "" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": false, + "description": "Value of the Client ID you obtained when you register your application", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": false, + "description": "Value of the Client Secret you obtained when you register your application", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the email connection", + "defaultValue": "EMAIL_CONNECTION_1" + }, + { + "name": "connectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket connection timeout value", + "defaultValue": "" + }, + { + "name": "enableOAuth2", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to enable OAuth2 Authentication", + "defaultValue": "false" + }, + { + "name": "evictionCheckInterval", + "type": "stringOrExpression", + "required": false, + "description": "The number of milliseconds between runs of the object evictor", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "stringOrExpression", + "required": false, + "description": "The behavior of the pool when the pool is exhausted", + "defaultValue": "" + }, + { + "name": "grantType", + "type": "comboOrExpression", + "required": false, + "description": "Grant type to generate access token Supported values: AUTHORIZATION_CODE, CLIENT_CREDENTIALS", + "defaultValue": "" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "Host name of the mail server", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of active connections in the pool", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of idle connections in the pool", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time to wait for a pooled component to become available", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "stringOrExpression", + "required": false, + "description": "The minimum amount of time an object may sit idle in the pool before it is eligible for eviction", + "defaultValue": "" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": false, + "description": "Password to connect with the mail server", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port number of the mail server", + "defaultValue": "" + }, + { + "name": "readTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket read timeout value", + "defaultValue": "" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": false, + "description": "The refresh token generated (This is applicable for grant type AUTHORIZATION_CODE)", + "defaultValue": "" + }, + { + "name": "requireTLS", + "type": "booleanOrExpression", + "required": true, + "description": "Whether the connection should be established using TLS", + "defaultValue": "" + }, + { + "name": "scope", + "type": "stringOrExpression", + "required": false, + "description": "Scope (This is applicable for grant type CLIENT_CREDENTIALS)", + "defaultValue": "" + }, + { + "name": "sslProtocols", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of SSL protocol", + "defaultValue": "" + }, + { + "name": "tokenUrl", + "type": "stringOrExpression", + "required": false, + "description": "The token endpoint URL to generate access token", + "defaultValue": "" + }, + { + "name": "trustedHosts", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of trust host names", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "Username used to connect with the mail server", + "defaultValue": "" + }, + { + "name": "writeTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket write timeout value", + "defaultValue": "" + } + ] }, { - "name": "SMTP", - "description": "Connection for sending emails via SMTP.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_SMTP.svg" + "name": "SMTPS", + "description": "SMTP Secured Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_SMTPS.svg", + "parameters": [ + { + "name": "checkServerIdentity", + "type": "booleanOrExpression", + "required": false, + "description": "Whether server identity should be checked", + "defaultValue": "" + }, + { + "name": "cipherSuites", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of Cipher Suites", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the email connection", + "defaultValue": "EMAIL_CONNECTION_1" + }, + { + "name": "connectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket connection timeout value", + "defaultValue": "" + }, + { + "name": "evictionCheckInterval", + "type": "stringOrExpression", + "required": false, + "description": "The number of milliseconds between runs of the object evictor", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "stringOrExpression", + "required": false, + "description": "The behavior of the pool when the pool is exhausted", + "defaultValue": "" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "Host name of the mail server", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of active connections in the pool", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of idle connections in the pool", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time to wait for a pooled component to become available", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "stringOrExpression", + "required": false, + "description": "The minimum amount of time an object may sit idle in the pool before it is eligible for eviction", + "defaultValue": "" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "Password to connect with the mail server", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port number of the mail server", + "defaultValue": "" + }, + { + "name": "readTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket read timeout value", + "defaultValue": "" + }, + { + "name": "requireTLS", + "type": "booleanOrExpression", + "required": true, + "description": "Whether the connection should be established using TLS", + "defaultValue": "" + }, + { + "name": "sslProtocols", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of SSL protocol", + "defaultValue": "" + }, + { + "name": "trustedHosts", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of trust host names", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "Username used to connect with the mail server", + "defaultValue": "" + }, + { + "name": "writeTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket write timeout value", + "defaultValue": "" + } + ] }, { - "name": "SMTPS", - "description": "Secure connection for sending emails via SMTPS.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_SMTPS.svg" + "name": "POP3S", + "description": "POP3 Secured Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-email_POP3S.svg", + "parameters": [ + { + "name": "checkServerIdentity", + "type": "stringOrExpression", + "required": false, + "description": "Whether server identity should be checked", + "defaultValue": "" + }, + { + "name": "cipherSuites", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of Cipher Suites", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the email connection", + "defaultValue": "EMAIL_CONNECTION_1" + }, + { + "name": "connectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket connection timeout value", + "defaultValue": "" + }, + { + "name": "evictionCheckInterval", + "type": "stringOrExpression", + "required": false, + "description": "The number of milliseconds between runs of the object evictor", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "stringOrExpression", + "required": false, + "description": "The behavior of the pool when the pool is exhausted", + "defaultValue": "" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "Host name of the mail server", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of active connections in the pool", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of idle connections in the pool", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time to wait for a pooled component to become available", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "stringOrExpression", + "required": false, + "description": "The minimum amount of time an object may sit idle in the pool before it is eligible for eviction", + "defaultValue": "" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "Password to connect with the mail server", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port number of the mail server", + "defaultValue": "" + }, + { + "name": "readTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket read timeout value", + "defaultValue": "" + }, + { + "name": "requireTLS", + "type": "stringOrExpression", + "required": true, + "description": "Whether the connection should be established using TLS", + "defaultValue": "" + }, + { + "name": "sslProtocols", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of SSL protocol", + "defaultValue": "" + }, + { + "name": "trustedHosts", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated string of trust host names", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "Username used to connect with the mail server", + "defaultValue": "" + }, + { + "name": "writeTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The socket write timeout value", + "defaultValue": "" + } + ] } ] }, - "otherVersions": { - "1.1.4": "198873772" - }, + "otherVersions": {}, "connectorRank": 6, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-email.png" }, @@ -1594,6 +11114,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-epic", + "id": "", "version": { "tagName": "2.0.1", "releaseId": "191923006", @@ -1603,292 +11124,350 @@ export const CONNECTOR_DB = [ { "name": "create", "description": "Create a new resource in the Epic FHIR server.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getCapabilityStatement", "description": "Retrieve the CapabilityStatement resource from the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "readById", "description": "Retrieve a resource by its ID from the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchAccount", "description": "Search for account resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchAdverseEvent", "description": "Search for adverse event resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchAllergyIntolerance", "description": "Search for allergy intolerance resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchAppointment", "description": "Search for appointment resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchBinary", "description": "Search for binary resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchBodyStructure", "description": "Search for body structure resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchCarePlan", "description": "Search for care plan resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchCareTeam", "description": "Search for care team resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchCommunication", "description": "Search for communication resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchCondition", "description": "Search for condition resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchConsent", "description": "Search for consent resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchContract", "description": "Search for contract resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchCoverage", "description": "Search for coverage resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchDevice", "description": "Search for device resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchDeviceRequest", "description": "Search for device request resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchDeviceUseStatement", "description": "Search for device use statement resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchDiagnosticReport", "description": "Search for diagnostic report resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchDocumentReference", "description": "Search for document reference resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchEncounter", "description": "Search for encounter resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchEpisodeOfCare", "description": "Search for episode of care resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchExplanationOfBenefit", "description": "Search for explanation of benefit resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchFamilyMemberHistory", "description": "Search for family member history resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchFlag", "description": "Search for flag resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchGoal", "description": "Search for goal resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchGroup", "description": "Search for group resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchImagingStudy", "description": "Search for imaging study resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchImmunization", "description": "Search for immunization resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchImmunizationRecommendation", "description": "Search for immunization recommendation resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchList", "description": "Search for list resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchLocation", "description": "Search for location resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchMeasure", "description": "Search for measure resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchMeasureReport", "description": "Search for measure report resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchMedia", "description": "Search for media resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchMedication", "description": "Search for medication resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchMedicationAdministration", "description": "Search for medication administration resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchMedicationDispense", "description": "Search for medication dispense resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchMedicationRequest", "description": "Search for medication request resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchNutritionOrder", "description": "Search for nutrition order resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchObservation", "description": "Search for observation resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchOrganization", "description": "Search for organization resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchPatient", "description": "Search for patient resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchPractitioner", "description": "Search for practitioner resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchPractitionerRole", "description": "Search for practitioner role resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchProcedure", "description": "Search for procedure resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchQuestionnaire", "description": "Search for questionnaire resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchQuestionnaireResponse", "description": "Search for questionnaire response resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchRelatedPerson", "description": "Search for related person resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchRequestGroup", "description": "Search for request group resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchRequestStudy", "description": "Search for research study resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchResearchSubject", "description": "Search for research subject resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchServiceRequest", "description": "Search for service request resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchSpecimen", "description": "Search for specimen resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchSubstance", "description": "Search for substance resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "searchTask", "description": "Search for task resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "update", "description": "Update resources in the Epic system.", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [] @@ -1904,128 +11483,882 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-facebookads", + "id": "", "version": { - "tagName": "1.1.0", - "releaseId": "191815211", + "tagName": "2.0.0", + "releaseId": "240149587", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Config operation", - "isHidden": true + "name": "updateAdSet", + "description": "Update Ad Set", + "isHidden": false, + "parameters": [ + { + "name": "adSetId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad set.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Ad set update properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "createAd", - "description": "Create an ad.", - "isHidden": false + "name": "createCampaign", + "description": "Create Campaign", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Campaign properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "createAdSet", - "description": "Creates an ad set.", - "isHidden": false + "name": "getCampaigns", + "description": "Get Campaigns", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "datePreset", + "type": "stringOrExpression", + "required": false, + "description": "Predefined date range used to aggregate insights metrics.", + "defaultValue": "" + }, + { + "name": "effectiveStatus", + "type": "stringOrExpression", + "required": false, + "description": "Effective status for the campaigns.", + "defaultValue": "" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Fields of the campaign.", + "defaultValue": "" + }, + { + "name": "isCompleted", + "type": "stringOrExpression", + "required": false, + "description": "If true, we return completed campaigns.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "timeRange", + "type": "stringOrExpression", + "required": false, + "description": "Date range used to aggregate insights metrics.", + "defaultValue": "" + } + ] }, { - "name": "createCampaign", - "description": "Create a campaign.", - "isHidden": false + "name": "getCustomAudiences", + "description": "Get Custom Audiences", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "filterByName", + "type": "stringOrExpression", + "required": false, + "description": "Name of the audience to filter by name.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "deleteAd", - "description": "Deletes an ad.", - "isHidden": false + "name": "updateCustomAudience", + "description": "Update Custom Audience", + "isHidden": false, + "parameters": [ + { + "name": "customAudienceId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad set.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Custom audience update properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "deleteAdSet", - "description": "Deletes an ad set.", - "isHidden": false + "name": "dissociateCampaign", + "description": "Dissociate Campaign", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "beforeDate", + "type": "stringOrExpression", + "required": false, + "description": "Set a before date to delete campaigns before this date.", + "defaultValue": "" + }, + { + "name": "deleteStrategy", + "type": "stringOrExpression", + "required": true, + "description": "Delete strategy.", + "defaultValue": "" + }, + { + "name": "objectCount", + "type": "stringOrExpression", + "required": false, + "description": "Object count.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "deleteCampaign", - "description": "Deletes a campaign.", - "isHidden": false + "name": "getAd", + "description": "Get Ad", + "isHidden": false, + "parameters": [ + { + "name": "adId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad.", + "defaultValue": "" + }, + { + "name": "datePreset", + "type": "stringOrExpression", + "required": false, + "description": "Predefined date range used to aggregate insights metrics.", + "defaultValue": "" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Fields of the Ad.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "timeRange", + "type": "stringOrExpression", + "required": false, + "description": "Date range used to aggregate insights metrics.", + "defaultValue": "" + } + ] }, { - "name": "dissociateCampaign", - "description": "Dissociate a campaign from an AdAccount.", - "isHidden": false + "name": "getAdSets", + "description": "Get Ad Sets", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "datePreset", + "type": "stringOrExpression", + "required": false, + "description": "Predefined date range used to aggregate insights metrics.", + "defaultValue": "" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Fields of the ad set.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "timeRange", + "type": "stringOrExpression", + "required": false, + "description": "Time Range. Note if time range is invalid, it will be ignored.", + "defaultValue": "" + } + ] }, { - "name": "getAd", - "description": "Returns data of an ad.", - "isHidden": false + "name": "addUsersToAudience", + "description": "Add Users To Custom Audience", + "isHidden": false, + "parameters": [ + { + "name": "customAudienceId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the custom audience.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "Structure of the user data to be added.", + "defaultValue": "JSON_ARRAY" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Custom audience users properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "getAdSet", - "description": "Return data related to an ad set.", - "isHidden": false + "name": "createAd", + "description": "Create Ad", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Ad properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "getAdSets", - "description": "Returns all ad sets from one ad account.", - "isHidden": false + "name": "updateAd", + "description": "Update Ad", + "isHidden": false, + "parameters": [ + { + "name": "adId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Ad set update properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "getAds", - "description": "Returns ads under this ad account.", - "isHidden": false + "name": "removeUsersFromAudience", + "description": "Remove Users From Custom Audience", + "isHidden": false, + "parameters": [ + { + "name": "customAudienceId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad set.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "Structure of the user data to be removed.", + "defaultValue": "JSON_ARRAY" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Custom audience users update properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "getCampaigns", - "description": "Returns campaigns under this ad account.", - "isHidden": false + "name": "deleteCampaign", + "description": "Delete Campaign", + "isHidden": false, + "parameters": [ + { + "name": "campaignId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the campaign.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "updateAd", - "description": "Updates an ad.", - "isHidden": false + "name": "createCustomAudience", + "description": "Create Custom Audience", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Custom audience properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "updateAdSet", - "description": "Updates an ad set.", - "isHidden": false + "name": "getAdSet", + "description": "Get Ad Set", + "isHidden": false, + "parameters": [ + { + "name": "adSetId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad set.", + "defaultValue": "" + }, + { + "name": "datePreset", + "type": "stringOrExpression", + "required": false, + "description": "Predefined date range used to aggregate insights metrics.", + "defaultValue": "" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Fields of the ad set.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "timeRange", + "type": "stringOrExpression", + "required": false, + "description": "Time Range. Note if time range is invalid, it will be ignored.", + "defaultValue": "" + } + ] }, { "name": "updateCampaign", - "description": "Updates a campaign.", - "isHidden": false + "description": "Update Campaign", + "isHidden": false, + "parameters": [ + { + "name": "campaignId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the campaign.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Campaign update properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { "name": "createAdCreative", - "description": "Creates an ad creative.", - "isHidden": false - }, - { - "name": "createCustomAudience", - "description": "Creates a custom audience.", - "isHidden": false + "description": "Create Ad Creative", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Ad creative properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "updateCustomAudience", - "description": "Updates a custom audience.", - "isHidden": false + "name": "deleteAdSet", + "description": "Delete Ad Set", + "isHidden": false, + "parameters": [ + { + "name": "adSetId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad set.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "addUsersToAudience", - "description": "Add users to your custom audience.", - "isHidden": false + "name": "getAds", + "description": "Get Ads", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "datePreset", + "type": "stringOrExpression", + "required": false, + "description": "Predefined date range used to aggregate insights metrics.", + "defaultValue": "" + }, + { + "name": "effectiveStatus", + "type": "stringOrExpression", + "required": false, + "description": "Filter ads by effective status.", + "defaultValue": "" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Fields of the ads.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "timeRange", + "type": "stringOrExpression", + "required": false, + "description": "Date range used to aggregate insights metrics.", + "defaultValue": "" + }, + { + "name": "updatedSince", + "type": "stringOrExpression", + "required": false, + "description": "Time since the Ad has been updated.", + "defaultValue": "" + } + ] }, { - "name": "removeUsersFromAudience", - "description": "Remove users from your custom audience.", - "isHidden": false + "name": "createAdSet", + "description": "Create Ad Set", + "isHidden": false, + "parameters": [ + { + "name": "adAccountId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad account.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Ad set properties.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { - "name": "getCustomAudiences", - "description": "Returns all the custom audiences.", - "isHidden": false + "name": "deleteAd", + "description": "Delete Ad", + "isHidden": false, + "parameters": [ + { + "name": "adId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the ad.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "facebookAds", - "description": "Connection for interacting with Facebook Ads.", - "iconUrl": "" + "description": "Facebook Ad Connection", + "iconUrl": "", + "parameters": [ + { + "name": "accessToken", + "type": "stringOrExpression", + "required": true, + "description": "The access token to authenticate the request.", + "defaultValue": "" + }, + { + "name": "base", + "type": "string", + "required": true, + "description": "The service root URL.", + "defaultValue": "https://graph.facebook.com/v20.0" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Facebook Ad connection.", + "defaultValue": "FB_AD_CONNECTION" + } + ] } ] }, @@ -2040,6 +12373,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.module", "mavenArtifactId": "mi-module-fhirbase", + "id": "", "version": { "tagName": "1.1.1", "releaseId": "191606985", @@ -2049,217 +12383,260 @@ export const CONNECTOR_DB = [ { "name": "addBundleEntry", "description": "Add an entry to the Bundle.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "addBundleLink", "description": "Add a link to the Bundle.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "addElement", "description": "Add an element datatype to a resource.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createAddress", "description": "Create an Address datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createAge", "description": "Create an Age datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createAnnotation", "description": "Create an Annotation datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createAttachment", "description": "Create an Attachment datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createBundle", "description": "Create a Bundle resource.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createCodeableConcept", "description": "Create a CodeableConcept datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createCoding", "description": "Create a Coding datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createContactDetail", "description": "Create a ContactDetail datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createContactPoint", "description": "Create a ContactPoint datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createCount", "description": "Create a Count datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createContributor", "description": "Create a Contributor datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createDataRequirement", "description": "Create a DataRequirement datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createDosage", "description": "Create a Dosage datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createDuration", "description": "Create a Duration datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createExpression", "description": "Create an Expression datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createHumanName", "description": "Create a HumanName datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createIdentifier", "description": "Create an Identifier datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createMeta", "description": "Create a Meta datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createNarrative", "description": "Create a Narrative datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createParameterDefinition", "description": "Create a ParameterDefinition datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createPeriod", "description": "Create a Period datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createQuantity", "description": "Create a Quantity datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createRange", "description": "Create a Range datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createRatio", "description": "Create a Ratio datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createReference", "description": "Create a Reference datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createRelatedArtifact", "description": "Create a RelatedArtifact datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createSampledData", "description": "Create a SampledData datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createSignature", "description": "Create a Signature datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createSimpleQuantity", "description": "Create a SimpleQuantity datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createTiming", "description": "Create a Timing datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createTriggerDefinition", "description": "Create a TriggerDefinition datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createUsageContext", "description": "Create a UsageContext datatype.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "evaluateFHIRPath", "description": "Evaluate a FHIRPath expression.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "serialize", "description": "Serialize a resource to a specific format.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "validate", "description": "Validate a resource.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setBundleIdentifier", "description": "Set the identifier for the Bundle.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setBundleType", "description": "Set the type for the Bundle.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setBundleTimestamp", "description": "Set the timestamp for the Bundle.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setBundleTotal", "description": "Set the total for the Bundle.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setBundleSignature", "description": "Set the signature for the Bundle.", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [] @@ -2275,6 +12652,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-fhirrepository", + "id": "", "version": { "tagName": "1.0.1", "releaseId": "178325455", @@ -2284,57 +12662,68 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "Init configuration for FHIR repository connector.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "batch", "description": "Create a new FHIR bundle.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "connect", "description": "Proxies a FHIR repository so that any type of API requests are routed intelligently.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "create", "description": "Create a new resource with a server-assigned ID.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "delete", "description": "Delete a resource.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getCapabilityStatement", "description": "Get a capability statement for the system.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "patch", "description": "Update an existing resource by posting a set of changes to it.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "readById", "description": "Retrieve a resource using its ID.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "search", "description": "Search resources by providing query parameters.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "update", "description": "Update an existing resource by its ID.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "vread", "description": "Read the state of a specific version of the resource.", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [] @@ -2350,124 +12739,2090 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-file", + "id": "", "version": { - "tagName": "5.0.0", - "releaseId": "220257963", + "tagName": "6.0.1", + "releaseId": "263929892", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Init operation", - "isHidden": true + "name": "checkExist", + "description": "Check Existence of a File or Directory", + "isHidden": false, + "parameters": [ + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "path", + "type": "stringOrExpression", + "required": true, + "description": "Path to zip file to extract", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "createDirectory", - "description": "Creates a new directory on directory path.", - "isHidden": false + "description": "Create Directory", + "isHidden": false, + "parameters": [ + { + "name": "autoCreate", + "type": "booleanOrExpression", + "required": false, + "description": "Automatically create missing parent directories if they don't exist.", + "defaultValue": "false" + }, + { + "name": "directoryPath", + "type": "stringOrExpression", + "required": true, + "description": "Path to new directory.", + "defaultValue": "" + }, + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "permissions", + "type": "comboOrExpression", + "required": false, + "description": "Permissions to set on the new directory in octal format. Common values: 700 (Read/Write/Execute - Owner Only), 755 (Read/Write/Execute - Owner, Read/Execute - Others), 750 (Read/Write/Execute - Owner, Read/Execute - Group), 644 (Read/Write - Owner, Read Only - Others). Mainly supported for local file systems. Supported values: 700, 755, 750, 644, 640, 600, 777, 770", + "defaultValue": "755" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listFiles", - "description": "Lists all the files in the directory path that match a matcher.", - "isHidden": false - }, - { - "name": "delete", - "description": "Deletes the file specified by the path.", - "isHidden": false + "name": "compress", + "description": "Archives a File or a Directory", + "isHidden": false, + "parameters": [ + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "excludeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to exclude (e.g., '*.tmp,*.log' for Ant-style or '.*\\.(tmp|log)' for regex)", + "defaultValue": "" + }, + { + "name": "fileFilterType", + "type": "comboOrExpression", + "required": false, + "description": "Type of file filtering pattern: 'ant' for Ant-style patterns or 'regex' for regular expressions Supported values: ant, regex", + "defaultValue": "ant" + }, + { + "name": "includeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to include (e.g., '*.txt,*.csv' for Ant-style or '.*\\.(txt|csv)' for regex)", + "defaultValue": "" + }, + { + "name": "includeSubDirectories", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to include sub-directories when compressing.", + "defaultValue": "true" + }, + { + "name": "maxFileAge", + "type": "stringOrExpression", + "required": false, + "description": "Maximum age of files to include (e.g., '7d', '2h', '30m', '60s'). Files older than this will be excluded. Supports units: s (seconds), m (minutes), h (hours), d (days).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sourceDirectoryPath", + "type": "stringOrExpression", + "required": true, + "description": "Path to file/folder to compress", + "defaultValue": "" + }, + { + "name": "subDirectoryMaxDepth", + "type": "stringOrExpression", + "required": false, + "description": "Maximum depth of subdirectories to traverse when includeSubDirectories is true (e.g., '3' for 3 levels deep)", + "defaultValue": "" + }, + { + "name": "targetFilePath", + "type": "stringOrExpression", + "required": true, + "description": "Path to the Zip file to create.", + "defaultValue": "" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time to wait between file size checks to ensure file stability in milliseconds (e.g., '2000', '5000'). Prevents processing files still being written.", + "defaultValue": "" + } + ] }, { "name": "copy", - "description": "Copies the file or folder specified by sourcePath into targetPath.", - "isHidden": false + "description": "Copies the File or Folder Specified by SourcePath into TargetPath", + "isHidden": false, + "parameters": [ + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "excludeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to exclude. Uses fileFilterType pattern matching. Exclude patterns take precedence over include patterns.", + "defaultValue": "" + }, + { + "name": "fileFilterType", + "type": "comboOrExpression", + "required": false, + "description": "Type of pattern matching: 'ant' for Ant-style patterns (e.g., *.txt, **/*.java) or 'regex' for regular expressions. Supported values: ant, regex", + "defaultValue": "ant" + }, + { + "name": "includeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to include. Uses fileFilterType pattern matching (e.g., '*.txt,*.pdf' for Ant or '.*\\.txt$,.*\\.pdf$' for regex).", + "defaultValue": "" + }, + { + "name": "includeParent", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to copy including parent folder of the source folder or only content inside.", + "defaultValue": "false" + }, + { + "name": "maxFileAge", + "type": "stringOrExpression", + "required": false, + "description": "Maximum age of files to copy (e.g., '2h', '30m', '1d'). Supports units: s (seconds), m (minutes), h (hours), d (days).", + "defaultValue": "" + }, + { + "name": "maxRetries", + "type": "integerOrExpression", + "required": false, + "description": "The maximum number of retries to be done in case of a failure.", + "defaultValue": "0" + }, + { + "name": "overwrite", + "type": "booleanOrExpression", + "required": false, + "description": "Whether or not to overwrite the file if the target destination already exists.", + "defaultValue": "false" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "renameTo", + "type": "stringOrExpression", + "required": false, + "description": "The new name for the copied file. If not provided, the original file name is kept.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "retryDelay", + "type": "integerOrExpression", + "required": false, + "description": "The time interval between retries in milliseconds.", + "defaultValue": "0" + }, + { + "name": "sourceFilePattern", + "type": "stringOrExpression", + "required": false, + "description": "The pattern (regex) of the files to be copied. (e.g., [a-zA-Z][a-zA-Z]*.(txt|xml|jar)). Note: Use fileFilterType for advanced filtering.", + "defaultValue": "" + }, + { + "name": "sourcePath", + "type": "stringOrExpression", + "required": true, + "description": "The path to the file to be copied.", + "defaultValue": "" + }, + { + "name": "targetPath", + "type": "stringOrExpression", + "required": true, + "description": "The target directory where to copy the file.", + "defaultValue": "" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds to wait between size checks for file stability verification. Ensures files are not actively being written before copying.", + "defaultValue": "" + } + ] }, { - "name": "move", - "description": "Moves the file or folder specified by sourcePath into targetPath.", - "isHidden": false + "name": "listFiles", + "description": "List Files In Directory", + "isHidden": false, + "parameters": [ + { + "name": "appendFileAttributes", + "type": "booleanOrExpression", + "required": false, + "description": "Get file attribute details", + "defaultValue": "false" + }, + { + "name": "directoryPath", + "type": "stringOrExpression", + "required": true, + "description": "Path to directory to list files in.", + "defaultValue": "" + }, + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "excludeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Pattern for files to exclude. Ant style: '*.xml,*.log' or Regex: '.*\\.(xml|log)'", + "defaultValue": "" + }, + { + "name": "fileFilterType", + "type": "comboOrExpression", + "required": false, + "description": "Type of file filtering: 'regex' for regular expressions or 'ant' for Ant-style patterns Supported values: regex, ant", + "defaultValue": "regex" + }, + { + "name": "includeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Pattern for files to include. Ant style: '*.txt,*.csv' or Regex: '.*\\.(txt|csv)'", + "defaultValue": "" + }, + { + "name": "matchingPattern", + "type": "stringOrExpression", + "required": false, + "description": "Legacy file pattern to match when listing (use Include Files for new implementations)", + "defaultValue": "" + }, + { + "name": "maxFileAge", + "type": "stringOrExpression", + "required": false, + "description": "Maximum age of files to include (e.g., '7d', '2h', '30m', '60s'). Supports units: s (seconds), m (minutes), h (hours), d (days).", + "defaultValue": "" + }, + { + "name": "maxRetries", + "type": "integerOrExpression", + "required": false, + "description": "The maximum number of retries to be done in case of a failure.", + "defaultValue": "0" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "recursive", + "type": "booleanOrExpression", + "required": false, + "description": "List files in sub-directories", + "defaultValue": "false" + }, + { + "name": "responseFormat", + "type": "comboOrExpression", + "required": true, + "description": "Response will be formatted as per this attribute. Supported values: Hierarchical, Flat", + "defaultValue": "Hierarchical" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "retryDelay", + "type": "integerOrExpression", + "required": false, + "description": "The time interval between retries in milliseconds.", + "defaultValue": "0" + }, + { + "name": "sortingAttribute", + "type": "comboOrExpression", + "required": true, + "description": "Files will be listed as per attribute. Supported values: Name, Size, LastModifiedTime", + "defaultValue": "Name" + }, + { + "name": "sortingOrder", + "type": "comboOrExpression", + "required": true, + "description": "Order you need to sort in ascending or descending order Supported values: Ascending, Descending", + "defaultValue": "Ascending" + }, + { + "name": "subDirectoryMaxDepth", + "type": "integerOrExpression", + "required": false, + "description": "Maximum depth of subdirectories to search when recursive is enabled. Leave empty for unlimited depth.", + "defaultValue": "" + } + ] }, { - "name": "rename", - "description": "Rename the file to the new name specified.", - "isHidden": false + "name": "splitFile", + "description": "Split a file into multiple smaller files", + "isHidden": false, + "parameters": [ + { + "name": "chunkSize", + "type": "stringOrExpression", + "required": false, + "description": "The chunk size in bytes to split the file.", + "defaultValue": "" + }, + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "lineCount", + "type": "stringOrExpression", + "required": false, + "description": "The number of lines per file.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sourceFilePath", + "type": "stringOrExpression", + "required": true, + "description": "Path to the file to split", + "defaultValue": "" + }, + { + "name": "splitMode", + "type": "comboOrExpression", + "required": true, + "description": "The chunk size in bytes to split the file. Supported values: Chunk Size, Line Count, XPATH Expression", + "defaultValue": "Chunk Size" + }, + { + "name": "targetDirectory", + "type": "stringOrExpression", + "required": true, + "description": "Folder to place split files. If already exists, it will get overwritten.", + "defaultValue": "" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds to wait between size checks for file stability verification. Ensures files are not actively being written before splitting.", + "defaultValue": "" + }, + { + "name": "xpathExpression", + "type": "stringOrExpression", + "required": false, + "description": "The XPATH expression used to split file.", + "defaultValue": "" + } + ] }, { - "name": "unzip", - "description": "Unzip file to target directory.", - "isHidden": false + "name": "mergeFiles", + "description": "Merge Multiple Files into a Single File", + "isHidden": false, + "parameters": [ + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "excludeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to exclude. Uses fileFilterType pattern matching. Exclude patterns take precedence over include patterns.", + "defaultValue": "" + }, + { + "name": "fileFilterType", + "type": "comboOrExpression", + "required": false, + "description": "Type of pattern matching: 'ant' for Ant-style patterns (e.g., *.txt, **/*.java) or 'regex' for regular expressions. Supported values: ant, regex", + "defaultValue": "ant" + }, + { + "name": "filePattern", + "type": "stringOrExpression", + "required": false, + "description": "Pattern of files include in merging. Note: Use fileFilterType for advanced filtering.", + "defaultValue": "" + }, + { + "name": "includeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to include. Uses fileFilterType pattern matching (e.g., '*.txt,*.pdf' for Ant or '.*\\.txt$,.*\\.pdf$' for regex).", + "defaultValue": "" + }, + { + "name": "maxFileAge", + "type": "stringOrExpression", + "required": false, + "description": "Maximum age of files to merge (e.g., '2h', '30m', '1d'). Supports units: s (seconds), m (minutes), h (hours), d (days).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sourceDirectoryPath", + "type": "stringOrExpression", + "required": true, + "description": "Path to the source folder containing files to be merged.", + "defaultValue": "" + }, + { + "name": "targetFilePath", + "type": "stringOrExpression", + "required": true, + "description": "Path to create merged file. If already exists, it will get overwritten.", + "defaultValue": "" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds to wait between size checks for file stability verification. Ensures files are not actively being written before merging.", + "defaultValue": "" + }, + { + "name": "writeMode", + "type": "comboOrExpression", + "required": true, + "description": "Pattern of files include in merging. Supported values: Overwrite, Append", + "defaultValue": "Overwrite" + } + ] }, { - "name": "splitFile", - "description": "Split a file into multiple smaller files.", - "isHidden": false + "name": "rename", + "description": "Rename the file to the new name specified", + "isHidden": false, + "parameters": [ + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "overwrite", + "type": "booleanOrExpression", + "required": false, + "description": "Whether or not to overwrite the file if a file with new name already exists", + "defaultValue": "false" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "path", + "type": "stringOrExpression", + "required": true, + "description": "The path to the file or folder to rename", + "defaultValue": "" + }, + { + "name": "renameTo", + "type": "stringOrExpression", + "required": true, + "description": "New name of the file or folder", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds to wait between size checks for file stability verification. Ensures files are not actively being written before renaming.", + "defaultValue": "" + } + ] }, { - "name": "mergeFiles", - "description": "Merge multiple files in a folder to a single file.", - "isHidden": false + "name": "delete", + "description": "Delete File Or Folder", + "isHidden": false, + "parameters": [ + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "excludeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Pattern for files to exclude from deletion. Ant style: '*.xml,*.log' or Regex: '.*\\.(xml|log)'", + "defaultValue": "" + }, + { + "name": "fileFilterType", + "type": "comboOrExpression", + "required": false, + "description": "Type of file filtering: 'regex' for regular expressions or 'ant' for Ant-style patterns Supported values: regex, ant", + "defaultValue": "regex" + }, + { + "name": "includeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Pattern for files to include in deletion. Ant style: '*.txt,*.csv' or Regex: '.*\\.(txt|csv)'", + "defaultValue": "" + }, + { + "name": "matchingPattern", + "type": "stringOrExpression", + "required": false, + "description": "Legacy pattern (regex) to match file name. Use Include Files for new implementations.", + "defaultValue": "" + }, + { + "name": "maxFileAge", + "type": "stringOrExpression", + "required": false, + "description": "Maximum age of files to include in deletion (e.g., '7d', '2h', '30m', '60s'). Supports units: s (seconds), m (minutes), h (hours), d (days).", + "defaultValue": "" + }, + { + "name": "maxRetries", + "type": "integerOrExpression", + "required": false, + "description": "The maximum number of retries to be done in case of a failure.", + "defaultValue": "0" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "path", + "type": "stringOrExpression", + "required": true, + "description": "Path to file or directory to delete.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "retryDelay", + "type": "integerOrExpression", + "required": false, + "description": "The time interval between retries in milliseconds.", + "defaultValue": "0" + } + ] }, { - "name": "checkExist", - "description": "Check if a file or directory exists.", - "isHidden": false + "name": "write", + "description": "create file and writes the content", + "isHidden": false, + "parameters": [ + { + "name": "appendNewLine", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to append a new line character the the end of written content.", + "defaultValue": "false" + }, + { + "name": "appendPosition", + "type": "stringOrExpression", + "required": false, + "description": "Position to append the content. Only used when WriteMode is APPEND.", + "defaultValue": "0" + }, + { + "name": "compress", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to compress as a zip and write. Available only when WriteMode is Create New or OverWrite.", + "defaultValue": "false" + }, + { + "name": "contentOrExpression", + "type": "expressionTextArea", + "required": false, + "description": "Static content or expression to receive content. If not given what is message body will get written.", + "defaultValue": "" + }, + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "enableLock", + "type": "booleanOrExpression", + "required": true, + "description": "Whether to lock the file when writing", + "defaultValue": "false" + }, + { + "name": "enableStreaming", + "type": "booleanOrExpression", + "required": true, + "description": "Write to the file in streaming manner.", + "defaultValue": "false" + }, + { + "name": "encoding", + "type": "stringOrExpression", + "required": false, + "description": "Content Encoding. Applied when a value for content/expression is present.", + "defaultValue": "UTF-8" + }, + { + "name": "filePath", + "type": "stringOrExpression", + "required": true, + "description": "Path of the file to be written.", + "defaultValue": "" + }, + { + "name": "maxRetries", + "type": "integerOrExpression", + "required": false, + "description": "The maximum number of retries to be done in case of a failure.", + "defaultValue": "0" + }, + { + "name": "mimeType", + "type": "comboOrExpression", + "required": true, + "description": "MIME Type of the message. When formatting message for writing this will be used. Supported values: Automatic, text/plain, application/xml, application/binary, application/json, text/xml", + "defaultValue": "Automatic" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "retryDelay", + "type": "integerOrExpression", + "required": false, + "description": "The time interval between retries in milliseconds.", + "defaultValue": "0" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time to wait between file size checks to ensure file stability in milliseconds (e.g., '2000', '5000'). Prevents writing to files still being modified.", + "defaultValue": "" + }, + { + "name": "updateFilePermission", + "type": "stringOrExpression", + "required": false, + "description": "File permission to set after writing (e.g., '755', '644'). Only supported for local file systems.", + "defaultValue": "" + }, + { + "name": "updateLastModified", + "type": "booleanOrExpression", + "required": false, + "description": "Set as false to skip updating the last modified timestamp", + "defaultValue": "true" + }, + { + "name": "writeMode", + "type": "comboOrExpression", + "required": true, + "description": "Write mode to use - overwrite, append or create new. Supported values: Overwrite, Append, Create New", + "defaultValue": "Overwrite" + } + ] }, { - "name": "exploreZipFile", - "description": "List Items In ZIP File Without Extracting.", - "isHidden": false + "name": "unzip", + "description": "Unzip File to Target Directory", + "isHidden": false, + "parameters": [ + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "fileNameEncoding", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the character encoding to interpret file names inside the ZIP archive.", + "defaultValue": "UTF-8" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sourceFilePath", + "type": "stringOrExpression", + "required": true, + "description": "Path to zip file to extract", + "defaultValue": "" + }, + { + "name": "targetDirectory", + "type": "stringOrExpression", + "required": true, + "description": "Folder to extract. If already exists, it will get overwritten.", + "defaultValue": "" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds to wait between size checks for file stability verification. Ensures files are not actively being written before unzipping.", + "defaultValue": "" + } + ] + }, + { + "name": "fetchDirectoryContent", + "description": "Fetch file content in a folder in to list of base64 encoded stream", + "isHidden": false, + "parameters": [ + { + "name": "directoryPath", + "type": "stringOrExpression", + "required": true, + "description": "The path to the directory to list files", + "defaultValue": "" + }, + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "matchingPattern", + "type": "stringOrExpression", + "required": false, + "description": "Pattern to match when listing files", + "defaultValue": "*.*" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the response of the operation.", + "defaultValue": "false" + }, + { + "name": "recursive", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to list files in sub-directories", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "resultPropertyName", + "type": "stringOrExpression", + "required": true, + "description": "Name of property to add the list of base64 encoded files operation result", + "defaultValue": "" + }, + { + "name": "sortingAttribute", + "type": "comboOrExpression", + "required": true, + "description": "Files will be listed as per attribute. Supported values: Name, Size, LastModifiedTime", + "defaultValue": "Name" + }, + { + "name": "sortingOrder", + "type": "comboOrExpression", + "required": false, + "description": "Order you need to sort in ascending or descending order Supported values: Ascending, Descending", + "defaultValue": "Ascending" + }, + { + "name": "storeResponseInVariable", + "type": "checkbox", + "required": false, + "description": "Store the response payload in the variable specified above.", + "defaultValue": "true" + } + ] }, { - "name": "compress", - "description": "Compress file or folder.", - "isHidden": false + "name": "move", + "description": "Moves the File or Folder Specified by SourcePath into TargetPath", + "isHidden": false, + "parameters": [ + { + "name": "createParentDirectories", + "type": "booleanOrExpression", + "required": false, + "description": "Whether or not to create parent directories if they don’t exist in the target path.", + "defaultValue": "true" + }, + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "excludeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to exclude. Uses fileFilterType pattern matching. Exclude patterns take precedence over include patterns.", + "defaultValue": "" + }, + { + "name": "fileFilterType", + "type": "comboOrExpression", + "required": false, + "description": "Type of pattern matching: 'ant' for Ant-style patterns (e.g., *.txt, **/*.java) or 'regex' for regular expressions. Supported values: ant, regex", + "defaultValue": "ant" + }, + { + "name": "filePattern", + "type": "stringOrExpression", + "required": false, + "description": "The pattern (regex) of the files to be moved. Note: Use fileFilterType for advanced filtering.", + "defaultValue": "" + }, + { + "name": "includeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to include. Uses fileFilterType pattern matching (e.g., '*.txt,*.pdf' for Ant or '.*\\.txt$,.*\\.pdf$' for regex).", + "defaultValue": "" + }, + { + "name": "includeParent", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to copy including parent folder of the source folder or only content inside.", + "defaultValue": "false" + }, + { + "name": "isSourceMounted", + "type": "stringOrExpression", + "required": false, + "description": "Whether the source path is a mounted path or not.", + "defaultValue": "" + }, + { + "name": "isTargetMounted", + "type": "stringOrExpression", + "required": false, + "description": "Whether the target path is a mounted path or not.", + "defaultValue": "" + }, + { + "name": "maxFileAge", + "type": "stringOrExpression", + "required": false, + "description": "Maximum age of files to move (e.g., '2h', '30m', '1d'). Supports units: s (seconds), m (minutes), h (hours), d (days).", + "defaultValue": "" + }, + { + "name": "overwrite", + "type": "booleanOrExpression", + "required": false, + "description": "Whether or not to overwrite the file if the target destination already exists.", + "defaultValue": "false" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "renameTo", + "type": "stringOrExpression", + "required": false, + "description": "The new name for the copied file. If not provided, the original file name is kept.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sourcePath", + "type": "stringOrExpression", + "required": true, + "description": "The path to the file to be copied.", + "defaultValue": "" + }, + { + "name": "targetPath", + "type": "stringOrExpression", + "required": true, + "description": "The target directory where to copy the file.", + "defaultValue": "" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time in milliseconds to wait between size checks for file stability verification. Ensures files are not actively being written before moving.", + "defaultValue": "" + } + ] }, { "name": "read", - "description": "Read a specific file or a file in a folder.", - "isHidden": false + "description": "Read a file or files in a directory", + "isHidden": false, + "parameters": [ + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "MIME type of the message generated. If not provided it will try to interpret.", + "defaultValue": "" + }, + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "enableLock", + "type": "booleanOrExpression", + "required": true, + "description": "Whether to lock the file when reading", + "defaultValue": "false" + }, + { + "name": "enableStreaming", + "type": "booleanOrExpression", + "required": true, + "description": "Read the file in streaming manner.", + "defaultValue": "false" + }, + { + "name": "encoding", + "type": "stringOrExpression", + "required": false, + "description": "Encoding of the message generated.", + "defaultValue": "UTF-8" + }, + { + "name": "endLineNum", + "type": "stringOrExpression", + "required": true, + "description": "Read file up to this line.", + "defaultValue": "0" + }, + { + "name": "excludeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to exclude (e.g., '*.tmp,*.log' for Ant-style or '.*\\.(tmp|log)' for regex). Only applicable when reading from directories.", + "defaultValue": "" + }, + { + "name": "fileFilterType", + "type": "comboOrExpression", + "required": false, + "description": "Type of file filtering pattern: 'ant' for Ant-style patterns or 'regex' for regular expressions. Only applicable when reading from directories. Supported values: ant, regex", + "defaultValue": "ant" + }, + { + "name": "filePattern", + "type": "stringOrExpression", + "required": false, + "description": "File pattern to match when choosing files to read in a folder. Not applicable when reading a file.", + "defaultValue": "" + }, + { + "name": "includeFiles", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated patterns for files to include (e.g., '*.txt,*.csv' for Ant-style or '.*\\.(txt|csv)' for regex). Only applicable when reading from directories.", + "defaultValue": "" + }, + { + "name": "lineNum", + "type": "stringOrExpression", + "required": true, + "description": "Specific line number to read", + "defaultValue": "0" + }, + { + "name": "maxFileAge", + "type": "stringOrExpression", + "required": false, + "description": "Maximum age of files to consider for reading (e.g., '7d', '2h', '30m', '60s'). Files older than this will be excluded. Supports units: s (seconds), m (minutes), h (hours), d (days). Only applicable when reading from directories.", + "defaultValue": "" + }, + { + "name": "maxRetries", + "type": "integerOrExpression", + "required": false, + "description": "The maximum number of retries to be done in case of a failure.", + "defaultValue": "0" + }, + { + "name": "metadataOutputFormat", + "type": "comboOrExpression", + "required": false, + "description": "Format for metadata output. Options: default (MM/dd/yyyy HH:mm:ss), simple (yyyy-MM-dd HH:mm:ss), detailed (includes extended properties), iso8601 (ISO 8601 format), unix (Unix timestamp) Supported values: default, simple, detailed, iso8601, unix", + "defaultValue": "default" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "path", + "type": "stringOrExpression", + "required": true, + "description": "Path to the file or folder to read.", + "defaultValue": "" + }, + { + "name": "readMode", + "type": "comboOrExpression", + "required": true, + "description": "Read mode to use. Supported values: Complete File, Starting From Line, Up To Line, Between Lines, Specific Line, Metadata Only", + "defaultValue": "Complete File" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "retryDelay", + "type": "integerOrExpression", + "required": false, + "description": "The time interval between retries in milliseconds.", + "defaultValue": "0" + }, + { + "name": "startLineNum", + "type": "stringOrExpression", + "required": true, + "description": "Read file starting from this line.", + "defaultValue": "0" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time to wait between file size checks to ensure file stability in milliseconds (e.g., '2000', '5000'). Prevents reading files still being written.", + "defaultValue": "" + } + ] }, { - "name": "write", - "description": "Create a file or write content to a file.", - "isHidden": false + "name": "exploreZipFile", + "description": "List Items In ZIP File Without Extracting", + "isHidden": false, + "parameters": [ + { + "name": "diskShareAccessMask", + "type": "stringOrExpression", + "required": false, + "description": "Comma separated access mask values for disk share. This is only applicable for SMB2 connection type.", + "defaultValue": "MAXIMUM_ALLOWED" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeBetweenSizeCheck", + "type": "stringOrExpression", + "required": false, + "description": "Time to wait between file size checks to ensure file stability (e.g., '2s', '1000ms'). This prevents processing files that are still being uploaded or modified.", + "defaultValue": "" + }, + { + "name": "zipFilePath", + "type": "stringOrExpression", + "required": true, + "description": "Path to zip file to explore", + "defaultValue": "" + } + ] } ], "connections": [ { - "name": "LOCAL", - "description": "Connection for the local file system.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_LOCAL.svg" + "name": "SFTP", + "description": "SFTP Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_SFTP.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the file connection", + "defaultValue": "FILE_CONNECTION_1" + }, + { + "name": "encodePassword", + "type": "booleanOrExpression", + "required": false, + "description": "Enable this to encode the password if it has special characters", + "defaultValue": "false" + }, + { + "name": "evictionCheckInterval", + "type": "string", + "required": false, + "description": "This parameter specifies how frequently the evictor thread scans the pool for idle connections eligible for eviction. By configuring this interval, developers can control the frequency of resource checks, optimizing performance without unnecessary overhead.", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "string", + "required": false, + "description": "Determines the action to take when the borrowObject() method is called, but the pool is exhausted.", + "defaultValue": "" + }, + { + "name": "fileCacheEnabled", + "type": "booleanOrExpression", + "required": false, + "description": "Enable file caching for better performance", + "defaultValue": "true" + }, + { + "name": "fileLockScheme", + "type": "comboOrExpression", + "required": true, + "description": "File Locking Behaviour to use in operations associated with this connection. Supported values: Local, Cluster", + "defaultValue": "Local" + }, + { + "name": "host", + "type": "string", + "required": true, + "description": "Host name of the FTP server", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "string", + "required": false, + "description": " The maximum number of objects (including both idle and active/borrowed) that can exist within the pool at the same time", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "string", + "required": false, + "description": "The maximum number of connections that can remain idle in the pool at any time, awaiting to be borrowed. Excess idle objects may be removed.", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "string", + "required": false, + "description": "This parameter determines how long the connector is willing to wait in the queue for a connection to become available. If the wait time exceeds the configured maximum wait time, the pool may throw an exception when it is exhausted and no connections are available.", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "string", + "required": false, + "description": "Connections in the pool must remain idle for at least this specified duration before the evictor considers them for removal. This ensures that only connections inactive beyond a defined threshold are evicted, preventing premature eviction of frequently used resources.", + "defaultValue": "" + }, + { + "name": "password", + "type": "string", + "required": false, + "description": "Password to connect with the FTP server", + "defaultValue": "" + }, + { + "name": "port", + "type": "string", + "required": true, + "description": "The port number of the FTP server", + "defaultValue": "22" + }, + { + "name": "privateKeyFilePath", + "type": "stringOrExpression", + "required": false, + "description": "The identity files (private key file used to ssh). Public key should be installed on the server.", + "defaultValue": "" + }, + { + "name": "privateKeyPassword", + "type": "stringOrExpression", + "required": false, + "description": "The passphrase of the private key. The security of a key (even if encrypted) is retained because it is not available to anyone else. You can specify the passphrase when generating keys.", + "defaultValue": "" + }, + { + "name": "retriesBeforeSuspension", + "type": "stringOrExpression", + "required": false, + "description": "Number of retries before suspending the connection", + "defaultValue": "0" + }, + { + "name": "setAvoidPermission", + "type": "booleanOrExpression", + "required": false, + "description": "Set to true if you want to avoid permission check.", + "defaultValue": "false" + }, + { + "name": "sftpConnectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The Jsch connection timeout in milli seconds.", + "defaultValue": "100000" + }, + { + "name": "sftpPathFromRoot", + "type": "booleanOrExpression", + "required": false, + "description": "Set to true to enable absolute path access from filesystem root", + "defaultValue": "false" + }, + { + "name": "sftpPoolConnectionAgedTimeout", + "type": "string", + "required": false, + "description": "Interval to close connections in the connection pool in seconds", + "defaultValue": "" + }, + { + "name": "sftpSessionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The Jsch session timeout in milli seconds.", + "defaultValue": "150000" + }, + { + "name": "strictHostKeyChecking", + "type": "booleanOrExpression", + "required": false, + "description": "Specifies whether the Host key should be checked. If set to 'true', the connector (JSch) will always verify the public key (fingerprint) of the SSH/SFTP server. Default 'no'", + "defaultValue": "false" + }, + { + "name": "suspendInitialDuration", + "type": "stringOrExpression", + "required": false, + "description": "Initial duration in milliseconds to suspend the connection", + "defaultValue": "1000" + }, + { + "name": "suspendMaximumDuration", + "type": "stringOrExpression", + "required": false, + "description": "Maximum duration in milliseconds to suspend the connection", + "defaultValue": "300000" + }, + { + "name": "suspendOnConnectionFailure", + "type": "booleanOrExpression", + "required": false, + "description": "Suspend connection on failure", + "defaultValue": "true" + }, + { + "name": "suspendProgressionFactor", + "type": "stringOrExpression", + "required": false, + "description": "Progression factor for suspension duration", + "defaultValue": "1.0" + }, + { + "name": "userDirIsRoot", + "type": "booleanOrExpression", + "required": true, + "description": "True if user directory is considered as root directory", + "defaultValue": "" + }, + { + "name": "username", + "type": "string", + "required": false, + "description": "Username used to connect with the FTP server", + "defaultValue": "" + }, + { + "name": "workingDir", + "type": "string", + "required": false, + "description": "Working directory. File paths in operations should be given w.r.t this folder. Eg: /Users/username/Downloads", + "defaultValue": "/" + } + ] }, { - "name": "FTP", - "description": "Connection for an FTP server.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_FTP.svg" + "name": "SMB2", + "description": "SMB Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_SMB2.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the file connection", + "defaultValue": "FILE_CONNECTION_1" + }, + { + "name": "enableEncryption", + "type": "booleanOrExpression", + "required": false, + "description": "Enable this to enable encryption when connecting to a file share that enforces encryption", + "defaultValue": "false" + }, + { + "name": "encodePassword", + "type": "booleanOrExpression", + "required": false, + "description": "Enable this to encode the password if it has special characters", + "defaultValue": "false" + }, + { + "name": "evictionCheckInterval", + "type": "string", + "required": false, + "description": "The time interval between runs of the idle object evictor thread", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "string", + "required": false, + "description": "Determines the action to take when the borrowObject() method is called, but the pool is exhausted", + "defaultValue": "" + }, + { + "name": "fileCacheEnabled", + "type": "booleanOrExpression", + "required": false, + "description": "Enable file caching for better performance", + "defaultValue": "true" + }, + { + "name": "fileLockScheme", + "type": "comboOrExpression", + "required": true, + "description": "File Locking Behaviour to use in operations associated with this connection. Supported values: Local, Cluster", + "defaultValue": "Local" + }, + { + "name": "host", + "type": "string", + "required": true, + "description": "Host name of the SMB server", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "string", + "required": false, + "description": " The maximum number of objects (including both idle and active/borrowed) that can exist within the pool at the same time", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "string", + "required": false, + "description": "The maximum number of objects that can remain idle in the pool", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "string", + "required": false, + "description": "The maximum amount of time that the borrowObject() method should block", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "string", + "required": false, + "description": "The minimum amount of time an object must sit idle in the pool before it is eligible for eviction by the idle object evictor ", + "defaultValue": "" + }, + { + "name": "password", + "type": "string", + "required": false, + "description": "Password to connect with the SMB server", + "defaultValue": "" + }, + { + "name": "port", + "type": "string", + "required": true, + "description": "The port number of the SMB server", + "defaultValue": "445" + }, + { + "name": "retriesBeforeSuspension", + "type": "stringOrExpression", + "required": false, + "description": "Number of retries before suspending the connection", + "defaultValue": "0" + }, + { + "name": "suspendInitialDuration", + "type": "stringOrExpression", + "required": false, + "description": "Initial duration in milliseconds to suspend the connection", + "defaultValue": "1000" + }, + { + "name": "suspendMaximumDuration", + "type": "stringOrExpression", + "required": false, + "description": "Maximum duration in milliseconds to suspend the connection", + "defaultValue": "300000" + }, + { + "name": "suspendOnConnectionFailure", + "type": "booleanOrExpression", + "required": false, + "description": "Suspend connection on failure", + "defaultValue": "true" + }, + { + "name": "suspendProgressionFactor", + "type": "stringOrExpression", + "required": false, + "description": "Progression factor for suspension duration", + "defaultValue": "1.0" + }, + { + "name": "username", + "type": "string", + "required": false, + "description": "Username used to connect with the SMB server", + "defaultValue": "" + }, + { + "name": "workingDir", + "type": "stringOrExpression", + "required": false, + "description": "Working directory (share name and path). File paths in operations should be given relative to this folder", + "defaultValue": "" + } + ] }, { "name": "FTPS", - "description": "Secure connection for an FTPS server.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_FTPS.svg" + "description": "Secured FTP Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_FTPS.svg", + "parameters": [ + { + "name": "channelProtectionLevel", + "type": "string", + "required": false, + "description": "FTP Data Channel protection level. Possible values C,S,E,P", + "defaultValue": "P" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the file connection", + "defaultValue": "FILE_CONNECTION_1" + }, + { + "name": "encodePassword", + "type": "booleanOrExpression", + "required": false, + "description": "Enable this to encode the password if it has special characters", + "defaultValue": "false" + }, + { + "name": "fileCacheEnabled", + "type": "booleanOrExpression", + "required": false, + "description": "Enable file caching for better performance", + "defaultValue": "true" + }, + { + "name": "fileLockScheme", + "type": "comboOrExpression", + "required": true, + "description": "File Locking Behaviour to use in operations associated with this connection. Supported values: Local, Cluster", + "defaultValue": "Local" + }, + { + "name": "ftpConnectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "Timeout in milisec for initial control connection", + "defaultValue": "100000" + }, + { + "name": "ftpSocketTimeout", + "type": "stringOrExpression", + "required": false, + "description": "Socket timeout for FTP client", + "defaultValue": "150000" + }, + { + "name": "host", + "type": "string", + "required": true, + "description": "Host name of the FTP server", + "defaultValue": "" + }, + { + "name": "implicitModeEnabled", + "type": "booleanOrExpression", + "required": false, + "description": "True if implicit mode is enabled (https://en.wikipedia.org/wiki/FTPS#Implicit)", + "defaultValue": "false" + }, + { + "name": "isPassive", + "type": "booleanOrExpression", + "required": false, + "description": "True if to enter into passive mode", + "defaultValue": "true" + }, + { + "name": "keyPassword", + "type": "stringOrExpression", + "required": false, + "description": "Password for the private key in the keystore", + "defaultValue": "" + }, + { + "name": "keyStorePassword", + "type": "stringOrExpression", + "required": false, + "description": "KeyStore password", + "defaultValue": "" + }, + { + "name": "keyStorePath", + "type": "stringOrExpression", + "required": false, + "description": "Path to keyStore", + "defaultValue": "" + }, + { + "name": "password", + "type": "string", + "required": false, + "description": "Password to connect with the FTP server", + "defaultValue": "" + }, + { + "name": "port", + "type": "string", + "required": true, + "description": "The port number of the FTP server", + "defaultValue": "" + }, + { + "name": "retriesBeforeSuspension", + "type": "stringOrExpression", + "required": false, + "description": "Number of retries before suspending the connection", + "defaultValue": "0" + }, + { + "name": "suspendInitialDuration", + "type": "stringOrExpression", + "required": false, + "description": "Initial duration in milliseconds to suspend the connection", + "defaultValue": "1000" + }, + { + "name": "suspendMaximumDuration", + "type": "stringOrExpression", + "required": false, + "description": "Maximum duration in milliseconds to suspend the connection", + "defaultValue": "300000" + }, + { + "name": "suspendOnConnectionFailure", + "type": "booleanOrExpression", + "required": false, + "description": "Suspend connection on failure", + "defaultValue": "true" + }, + { + "name": "suspendProgressionFactor", + "type": "stringOrExpression", + "required": false, + "description": "Progression factor for suspension duration", + "defaultValue": "1.0" + }, + { + "name": "trustStorePassword", + "type": "stringOrExpression", + "required": true, + "description": "TrustStore Password", + "defaultValue": "" + }, + { + "name": "trustStorePath", + "type": "stringOrExpression", + "required": true, + "description": "Path to trustStore", + "defaultValue": "" + }, + { + "name": "userDirIsRoot", + "type": "booleanOrExpression", + "required": true, + "description": "True if user directory is considered as root directory", + "defaultValue": "" + }, + { + "name": "username", + "type": "string", + "required": false, + "description": "Username used to connect with the FTP server", + "defaultValue": "" + }, + { + "name": "workingDir", + "type": "string", + "required": false, + "description": "Working directory. File paths in operations should be given w.r.t this folder. Eg: /Users/username/Downloads", + "defaultValue": "/" + } + ] }, { - "name": "SFTP", - "description": "Secure connection for an SFTP server.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_SFTP.svg" + "name": "FTP", + "description": "FTP Connection Config", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_FTP.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the file connection", + "defaultValue": "FILE_CONNECTION_1" + }, + { + "name": "encodePassword", + "type": "booleanOrExpression", + "required": false, + "description": "Enable this to encode the password if it has special characters", + "defaultValue": "false" + }, + { + "name": "fileCacheEnabled", + "type": "booleanOrExpression", + "required": false, + "description": "Enable file caching for better performance", + "defaultValue": "true" + }, + { + "name": "fileLockScheme", + "type": "comboOrExpression", + "required": true, + "description": "File Locking Behaviour to use in operations associated with this connection. Supported values: Local, Cluster", + "defaultValue": "Local" + }, + { + "name": "ftpConnectionTimeout", + "type": "stringOrExpression", + "required": false, + "description": "Timeout in milisec for initial control connection", + "defaultValue": "100000" + }, + { + "name": "ftpSocketTimeout", + "type": "stringOrExpression", + "required": false, + "description": "Socket timeout for FTP client", + "defaultValue": "150000" + }, + { + "name": "host", + "type": "string", + "required": true, + "description": "Host name of the FTP server", + "defaultValue": "" + }, + { + "name": "isPassive", + "type": "booleanOrExpression", + "required": false, + "description": "True if to enter into passive mode", + "defaultValue": "true" + }, + { + "name": "password", + "type": "string", + "required": false, + "description": "Password to connect with the FTP server", + "defaultValue": "" + }, + { + "name": "port", + "type": "string", + "required": true, + "description": "The port number of the FTP server", + "defaultValue": "" + }, + { + "name": "retriesBeforeSuspension", + "type": "stringOrExpression", + "required": false, + "description": "Number of retries before suspending the connection", + "defaultValue": "0" + }, + { + "name": "retryCount", + "type": "stringOrExpression", + "required": false, + "description": "Number of times to retry for FTP Connection", + "defaultValue": "5" + }, + { + "name": "suspendInitialDuration", + "type": "stringOrExpression", + "required": false, + "description": "Initial duration in milliseconds to suspend the connection", + "defaultValue": "1000" + }, + { + "name": "suspendMaximumDuration", + "type": "stringOrExpression", + "required": false, + "description": "Maximum duration in milliseconds to suspend the connection", + "defaultValue": "300000" + }, + { + "name": "suspendOnConnectionFailure", + "type": "booleanOrExpression", + "required": false, + "description": "Suspend connection on failure", + "defaultValue": "true" + }, + { + "name": "suspendProgressionFactor", + "type": "stringOrExpression", + "required": false, + "description": "Progression factor for suspension duration", + "defaultValue": "1.0" + }, + { + "name": "userDirIsRoot", + "type": "booleanOrExpression", + "required": true, + "description": "True if user directory is considered as root directory", + "defaultValue": "" + }, + { + "name": "username", + "type": "string", + "required": false, + "description": "Username used to connect with the FTP server", + "defaultValue": "" + }, + { + "name": "workingDir", + "type": "string", + "required": false, + "description": "Working directory. File paths in operations should be given w.r.t this folder. Eg: /Users/username/Downloads", + "defaultValue": "/" + } + ] }, { - "name": "SMB2", - "description": "Connection for an SMB2 file share.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_SMB2.svg" + "name": "LOCAL", + "description": "Local File", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-file_LOCAL.svg", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the file connection", + "defaultValue": "FILE_CONNECTION_1" + }, + { + "name": "fileCacheEnabled", + "type": "booleanOrExpression", + "required": false, + "description": "Enable file caching for better performance", + "defaultValue": "true" + }, + { + "name": "fileLockScheme", + "type": "comboOrExpression", + "required": true, + "description": "File Locking Behaviour to use in operations associated with this connection. Supported values: Local, Cluster", + "defaultValue": "Local" + }, + { + "name": "retriesBeforeSuspension", + "type": "stringOrExpression", + "required": false, + "description": "Number of retries before suspending the connection", + "defaultValue": "0" + }, + { + "name": "suspendInitialDuration", + "type": "stringOrExpression", + "required": false, + "description": "Initial duration in milliseconds to suspend the connection", + "defaultValue": "1000" + }, + { + "name": "suspendMaximumDuration", + "type": "stringOrExpression", + "required": false, + "description": "Maximum duration in milliseconds to suspend the connection", + "defaultValue": "300000" + }, + { + "name": "suspendOnConnectionFailure", + "type": "booleanOrExpression", + "required": false, + "description": "Suspend connection on failure", + "defaultValue": "true" + }, + { + "name": "suspendProgressionFactor", + "type": "stringOrExpression", + "required": false, + "description": "Progression factor for suspension duration", + "defaultValue": "1.0" + }, + { + "name": "workingDir", + "type": "string", + "required": false, + "description": "Working directory. File paths in operations should be given w.r.t this folder. Eg: /Users/username/Downloads", + "defaultValue": "/" + } + ] } ] }, - "otherVersions": { - "4.0.33": "191454532", - "4.0.34": "197719372", - "4.0.35": "201356411", - "4.0.36": "206446749", - "4.0.37": "206951834", - "4.0.40": "217219191" - }, + "otherVersions": {}, "connectorRank": 1, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-file.png" }, @@ -2478,160 +14833,1173 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-gmail", + "id": "", "version": { - "tagName": "4.0.9", - "releaseId": "221991138", + "tagName": "4.0.10", + "releaseId": "233198017", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "trashMessage", - "description": "Trash Message", - "isHidden": false + "name": "sendMailWithAttachment", + "description": "Send Message with Attachment", + "isHidden": false, + "parameters": [ + { + "name": "bcc", + "type": "stringOrExpression", + "required": false, + "description": "A comma separated list of bcc recipients", + "defaultValue": "" + }, + { + "name": "cc", + "type": "stringOrExpression", + "required": false, + "description": "A comma separated list of cc recipients", + "defaultValue": "" + }, + { + "name": "fileName", + "type": "stringOrExpression", + "required": false, + "description": "(Optional) A comma separated list of content IDs (should be same as the file names) of attachments", + "defaultValue": "" + }, + { + "name": "filePath", + "type": "stringOrExpression", + "required": false, + "description": "(Optional) A comma separated list of file paths", + "defaultValue": "" + }, + { + "name": "from", + "type": "stringOrExpression", + "required": true, + "description": "Sender's email address.", + "defaultValue": "" + }, + { + "name": "messageBody", + "type": "expressionTextArea", + "required": false, + "description": "(Optional) Text content of the mail", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned.", + "defaultValue": "" + }, + { + "name": "subject", + "type": "stringOrExpression", + "required": false, + "description": "(Optional) Subject of the e-mail message", + "defaultValue": "" + }, + { + "name": "to", + "type": "stringOrExpression", + "required": true, + "description": "A comma separated list of recipients", + "defaultValue": "" + } + ] }, { - "name": "createDraft", - "description": "Create Draft", - "isHidden": false + "name": "deleteLabel", + "description": "Delete Label", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the label to delete", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "untrashMessage", - "description": "Untrash Message", - "isHidden": false + "name": "deleteThread", + "description": "Delete Thread", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the thread to move to trash", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "listLabels", "description": "List Labels", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listHistory", - "description": "List History", - "isHidden": false + "name": "updateLabel", + "description": "Update Label", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the label to update", + "defaultValue": "" + }, + { + "name": "labelListVisibility", + "type": "stringOrExpression", + "required": true, + "description": "The visibility of the label in the label list", + "defaultValue": "" + }, + { + "name": "messageListVisibility", + "type": "stringOrExpression", + "required": true, + "description": "The visibility of messages with this label", + "defaultValue": "" + }, + { + "name": "messagesTotal", + "type": "stringOrExpression", + "required": false, + "description": "Total number of messages with this label", + "defaultValue": "" + }, + { + "name": "messagesUnread", + "type": "stringOrExpression", + "required": false, + "description": "Number of unread messages with this label", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The display name of the label", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "threadsTotal", + "type": "stringOrExpression", + "required": false, + "description": "Total number of threads with this label", + "defaultValue": "" + }, + { + "name": "threadsUnread", + "type": "stringOrExpression", + "required": false, + "description": "Number of unread threads with this label", + "defaultValue": "" + } + ] }, { - "name": "untrashThread", - "description": "Untrash Thread", - "isHidden": false + "name": "readMail", + "description": "Read Message", + "isHidden": false, + "parameters": [ + { + "name": "format", + "type": "stringOrExpression", + "required": false, + "description": "The format of the message", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the message to read", + "defaultValue": "" + }, + { + "name": "metadataHeaders", + "type": "stringOrExpression", + "required": false, + "description": "Metadata headers to include in the response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "sendMail", - "description": "Send Message", - "isHidden": false + "name": "trashThread", + "description": "Trash Thread", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the thread to move to trash", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listAllThreads", - "description": "List Threads", - "isHidden": false + "name": "sendMail", + "description": "Send Message", + "isHidden": false, + "parameters": [ + { + "name": "bcc", + "type": "stringOrExpression", + "required": false, + "description": "The recipient addresses of 'BCC' (blind carbon copy) type", + "defaultValue": "" + }, + { + "name": "cc", + "type": "stringOrExpression", + "required": false, + "description": "The recipient addresses of 'CC' (carbon copy) type", + "defaultValue": "" + }, + { + "name": "from", + "type": "stringOrExpression", + "required": false, + "description": "The 'From' address of the message sender", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier for the message", + "defaultValue": "" + }, + { + "name": "messageBody", + "type": "expressionTextArea", + "required": false, + "description": "Body of the message in any format", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "subject", + "type": "expressionTextArea", + "required": false, + "description": "The subject of the email", + "defaultValue": "" + }, + { + "name": "threadId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the thread this message belongs to", + "defaultValue": "" + }, + { + "name": "to", + "type": "stringOrExpression", + "required": true, + "description": "The recipient addresses of 'To' (primary) type", + "defaultValue": "" + } + ] }, { - "name": "modifyExistingThread", - "description": "Modify Thread", - "isHidden": false + "name": "modifyExistingMessage", + "description": "Modify Message", + "isHidden": false, + "parameters": [ + { + "name": "addLabelIds", + "type": "stringOrExpression", + "required": false, + "description": "Labels to add to the message", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "removeLabelIds", + "type": "stringOrExpression", + "required": false, + "description": "Labels to remove from the message", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "readThread", - "description": "Read Thread", - "isHidden": false + "name": "deleteDraft", + "description": "Delete Draft", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the draft to move to trash", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "updateLabel", - "description": "Update Label", - "isHidden": false + "name": "createDraft", + "description": "Create Draft", + "isHidden": false, + "parameters": [ + { + "name": "bcc", + "type": "stringOrExpression", + "required": false, + "description": "Blind carbon copy recipients", + "defaultValue": "" + }, + { + "name": "cc", + "type": "stringOrExpression", + "required": false, + "description": "Carbon copy recipients", + "defaultValue": "" + }, + { + "name": "messageBody", + "type": "expressionTextArea", + "required": false, + "description": "Content of the email draft", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "subject", + "type": "stringOrExpression", + "required": false, + "description": "Subject of the email draft", + "defaultValue": "" + }, + { + "name": "threadId", + "type": "stringOrExpression", + "required": false, + "description": "Thread ID to associate with this draft", + "defaultValue": "" + }, + { + "name": "to", + "type": "stringOrExpression", + "required": false, + "description": "Primary recipients", + "defaultValue": "" + } + ] }, { - "name": "getUserProfile", - "description": "Get User Profile", - "isHidden": false + "name": "createLabel", + "description": "Create Label", + "isHidden": false, + "parameters": [ + { + "name": "labelListVisibility", + "type": "stringOrExpression", + "required": true, + "description": "The visibility of the label in the label list", + "defaultValue": "" + }, + { + "name": "messageListVisibility", + "type": "stringOrExpression", + "required": true, + "description": "The visibility of messages with this label", + "defaultValue": "" + }, + { + "name": "messagesTotal", + "type": "stringOrExpression", + "required": false, + "description": "Total number of messages with this label", + "defaultValue": "" + }, + { + "name": "messagesUnread", + "type": "stringOrExpression", + "required": false, + "description": "Number of unread messages with this label", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The display name of the label", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "threadsTotal", + "type": "stringOrExpression", + "required": false, + "description": "Total number of threads with this label", + "defaultValue": "" + }, + { + "name": "threadsUnread", + "type": "stringOrExpression", + "required": false, + "description": "Number of unread threads with this label", + "defaultValue": "" + } + ] }, { - "name": "readLabel", - "description": "", - "isHidden": false + "name": "listAllThreads", + "description": "List Threads", + "isHidden": false, + "parameters": [ + { + "name": "includeSpamTrash", + "type": "stringOrExpression", + "required": false, + "description": "Include threads from SPAM and TRASH in the results", + "defaultValue": "false" + }, + { + "name": "labelIds", + "type": "stringOrExpression", + "required": false, + "description": "Only return threads with labels that match these IDs", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results to return", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Page token for pagination", + "defaultValue": "" + }, + { + "name": "q", + "type": "stringOrExpression", + "required": false, + "description": "Only return threads matching the specified query", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "modifyExistingMessage", - "description": "Modify Message", - "isHidden": false + "name": "listHistory", + "description": "List History", + "isHidden": false, + "parameters": [ + { + "name": "labelId", + "type": "stringOrExpression", + "required": false, + "description": "Only return messages with the specified label", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of history records to return", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Page token for pagination", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startHistoryId", + "type": "stringOrExpression", + "required": true, + "description": "Returns history records after this history ID", + "defaultValue": "" + } + ] }, { - "name": "deleteDraft", - "description": "Delete Draft", - "isHidden": false + "name": "readLabel", + "description": "", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the label to read", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createLabel", - "description": "Create Label", - "isHidden": false + "name": "readThread", + "description": "Read Thread", + "isHidden": false, + "parameters": [ + { + "name": "format", + "type": "stringOrExpression", + "required": false, + "description": "The format of the thread messages", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the thread to read", + "defaultValue": "" + }, + { + "name": "metadataHeaders", + "type": "stringOrExpression", + "required": false, + "description": "Metadata headers to include in the response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "getUserProfile", "description": "Get User Profile", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "attachmentId", + "type": "string", + "required": true, + "description": "Unique identifier for the attachment", + "defaultValue": "" + }, + { + "name": "id", + "type": "string", + "required": true, + "description": "Unique identifier for the email", + "defaultValue": "" + } + ] }, { - "name": "sendMailWithAttachment", - "description": "Send Message with Attachment", - "isHidden": false + "name": "untrashMessage", + "description": "Untrash Message", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the message to remove from trash", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "readDraft", - "description": "Read Draft", - "isHidden": false + "name": "listDrafts", + "description": "List Drafts", + "isHidden": false, + "parameters": [ + { + "name": "includeSpamTrash", + "type": "stringOrExpression", + "required": false, + "description": "Include drafts from SPAM and TRASH in the results", + "defaultValue": "false" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results to return", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Page token for pagination", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "listAllMails", + "description": "List Messages", + "isHidden": false, + "parameters": [ + { + "name": "includeSpamTrash", + "type": "stringOrExpression", + "required": false, + "description": "Include messages from SPAM and TRASH in the results", + "defaultValue": "false" + }, + { + "name": "labelIds", + "type": "stringOrExpression", + "required": false, + "description": "Only return messages with labels that match these IDs", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results to return", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Page token for pagination", + "defaultValue": "" + }, + { + "name": "q", + "type": "stringOrExpression", + "required": false, + "description": "Only return messages matching the specified query", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "deleteMessage", "description": "Delete Message", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the message to move to trash", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listDrafts", - "description": "List Drafts", - "isHidden": false + "name": "trashMessage", + "description": "Trash Message", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the message to move to trash", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "endSession", "description": "End Session", - "isHidden": false - }, - { - "name": "trashThread", - "description": "Trash Thread", - "isHidden": false + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listAllMails", - "description": "List Messages", - "isHidden": false + "name": "untrashThread", + "description": "Untrash Thread", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the thread to remove from trash", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteThread", - "description": "Delete Thread", - "isHidden": false + "name": "readDraft", + "description": "Read Draft", + "isHidden": false, + "parameters": [ + { + "name": "format", + "type": "stringOrExpression", + "required": false, + "description": "The format of the draft message", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the draft to read", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "readMail", - "description": "Read Message", - "isHidden": false - }, - { - "name": "deleteLabel", - "description": "Delete Label", - "isHidden": false + "name": "modifyExistingThread", + "description": "Modify Thread", + "isHidden": false, + "parameters": [ + { + "name": "addLabelIds", + "type": "stringOrExpression", + "required": false, + "description": "Labels to add to the thread", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "ID of the thread to modify", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "removeLabelIds", + "type": "stringOrExpression", + "required": false, + "description": "Labels to remove from the thread", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "GMAIL", "description": "GMAIL Connection", - "iconUrl": "" + "iconUrl": "", + "parameters": [ + { + "name": "apiUrl", + "type": "stringOrExpression", + "required": false, + "description": "API URL used to connect with the mail server", + "defaultValue": "https://www.googleapis.com/gmail" + }, + { + "name": "apiVersion", + "type": "stringOrExpression", + "required": false, + "description": "API Version used to connect with the mail server", + "defaultValue": "v1" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "Client ID used to connect with the mail server", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "Client Secret to connect with the mail server", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the email connection", + "defaultValue": "GMAIL_CONNECTION_1" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": true, + "description": "Refresh Token used to connect with the mail server", + "defaultValue": "" + }, + { + "name": "tokenEndpoint", + "type": "stringOrExpression", + "required": false, + "description": "Token URL used to connect with the mail server", + "defaultValue": "https://oauth2.googleapis.com/token" + }, + { + "name": "userId", + "type": "stringOrExpression", + "required": false, + "description": "User ID used to connect with the mail server", + "defaultValue": "me" + } + ] } ] }, - "otherVersions": { - "3.0.11": "206024903", - "4.0.0": "214691795" - }, + "otherVersions": {}, "connectorRank": 94, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-gmail.png" }, @@ -2642,103 +16010,1091 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-googleads", + "id": "", "version": { - "tagName": "1.1.0", - "releaseId": "191815650", + "tagName": "2.0.0", + "releaseId": "233811320", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Config operation", - "isHidden": true + "name": "customAudiencesMutate", + "description": "Customers Custom Audiences Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer whose custom audiences are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "The list of operations to perform on individual custom audiences.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "search", + "type": "searchBox", + "required": false, + "description": "Search for an attribute using the display name", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "adGroupAdsMutate", - "description": "Creates, updates, or removes ads. Operation statuses are returned.", - "isHidden": false + "name": "getUserLists", + "description": "List down all User Lists", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer being queried. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageSize", + "type": "stringOrExpression", + "required": false, + "description": "Number of elements to retrieve in a single page. When too large a page is requested, the server may decide to further limit the number of returned resources.", + "defaultValue": "" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from next Page Token in the previous response in order to request the next page of results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnTotalResultsCount", + "type": "stringOrExpression", + "required": false, + "description": "If true, the total number of results that match the query ignoring the LIMIT clause will be included in the response. Default is false.", + "defaultValue": "" + }, + { + "name": "summaryRowSetting", + "type": "stringOrExpression", + "required": false, + "description": "Determines whether a summary row will be returned. By default, summary row is not returned. If requested, the summary row will be sent in a response by itself after all other query results are returned.", + "defaultValue": "" + }, + { + "name": "userListName", + "type": "stringOrExpression", + "required": false, + "description": "Filter by UserList Name.", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed.", + "defaultValue": "" + } + ] }, { - "name": "adGroupsMutate", - "description": "Creates, updates, or removes ad groups. Operation statuses are returned.", - "isHidden": false + "name": "userDataMutate", + "description": "Customers Create/Remove User Data", + "isHidden": false, + "parameters": [ + { + "name": "consent", + "type": "stringOrExpression", + "required": false, + "description": "The consent for the user data to be uploaded.", + "defaultValue": "" + }, + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "Required. The ID of the customer for which to update the user data. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": true, + "description": "The type of input data structure.", + "defaultValue": "JSON_ARRAY" + }, + { + "name": "jsonArrayContent", + "type": "stringOrExpression", + "required": true, + "description": "User data to be uploaded.", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "Import the user data and operations to be performed as a JSON object.", + "defaultValue": "" + }, + { + "name": "operationType", + "type": "comboOrExpression", + "required": true, + "description": "The operation to be performed on the user list.", + "defaultValue": "create" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "transactionAttributes", + "type": "stringOrExpression", + "required": false, + "description": "The transaction attributes for the user data to be uploaded.", + "defaultValue": "" + }, + { + "name": "userAttributes", + "type": "stringOrExpression", + "required": false, + "description": "The user attributes for the user data to be uploaded.", + "defaultValue": "" + }, + { + "name": "userIdentifierSource", + "type": "comboOrExpression", + "required": true, + "description": "The source of the user identifiers.", + "defaultValue": "UNSPECIFIED" + }, + { + "name": "userListId", + "type": "stringOrExpression", + "required": true, + "description": "Required. The list id of the user list to add or remove users from.", + "defaultValue": "" + } + ] }, { - "name": "adsMutate", - "description": "Updates ads. Operation statuses are returned. Updating ads is not supported for TextAd, ExpandedDynamicSearchAd, GmailAd and ImageAd.", - "isHidden": false + "name": "campaignsMutate", + "description": "Customers Campaigns Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer whose campaigns are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "The list of operations to perform on individual campaigns.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "partialFailure", + "type": "stringOrExpression", + "required": false, + "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.", + "defaultValue": "" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "search", + "type": "searchBox", + "required": false, + "description": "Search for an attribute using the display name", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "campaignBudgets", - "description": "Creates, updates, or removes campaign budgets. Operation statuses are returned.", - "isHidden": false + "name": "campaignCriteriaMutate", + "description": "Customers Campaign Criteria Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer whose criteria are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "The list of operations to perform on individual criteria.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "partialFailure", + "type": "stringOrExpression", + "required": false, + "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.", + "defaultValue": "" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "search", + "type": "searchBox", + "required": false, + "description": "Search for an attribute using the display name", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "campaignsMutate", - "description": "Creates, updates, or removes campaigns. Operation statuses are returned.", - "isHidden": false + "name": "audiencesMutate", + "description": "Customers Audiences Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer whose audiences are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "The list of operations to perform on individual audiences.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "partialFailure", + "type": "stringOrExpression", + "required": false, + "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.", + "defaultValue": "" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "search", + "type": "searchBox", + "required": false, + "description": "Search for an attribute using the display name", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "createCustomerClient", - "description": "Creates a new client under manager. The new client customer is returned.", - "isHidden": false + "name": "getCampaigns", + "description": "List down all Campaigns", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer being queried. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageSize", + "type": "stringOrExpression", + "required": false, + "description": "Number of elements to retrieve in a single page. When too large a page is requested, the server may decide to further limit the number of returned resources.", + "defaultValue": "" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from next Page Token in the previous response in order to request the next page of results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnTotalResultsCount", + "type": "stringOrExpression", + "required": false, + "description": "If true, the total number of results that match the query ignoring the LIMIT clause will be included in the response. Default is false.", + "defaultValue": "" + }, + { + "name": "summaryRowSetting", + "type": "stringOrExpression", + "required": false, + "description": "Determines whether a summary row will be returned. By default, summary row is not returned. If requested, the summary row will be sent in a response by itself after all other query results are returned.", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed.", + "defaultValue": "" + } + ] }, { - "name": "search", - "description": "Returns all rows that match the search query.", - "isHidden": false + "name": "userListsMutate", + "description": "Customers User Lists Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "Required. The ID of the customer whose user lists are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "Required. The list of operations to perform on individual user lists. Type: object (UserListOperation)", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "partialFailure", + "type": "stringOrExpression", + "required": false, + "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { "name": "customersMutate", - "description": "Updates a customer. Operation statuses are returned.", - "isHidden": false + "description": "Customers Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operation", + "type": "stringOrExpression", + "required": true, + "description": "The operation to perform on the customer.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "search", + "type": "searchBox", + "required": false, + "description": "Search for an attribute using the display name", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "audiencesMutate", - "description": "Creates audiences. Operation statuses are returned.", - "isHidden": false + "name": "adGroupsMutate", + "description": "Ad Groups Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer whose ad groups are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "The list of operations to perform on individual ad groups.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "partialFailure", + "type": "stringOrExpression", + "required": false, + "description": "If true, successful operations will be carried out and invalid operations will return errors.", + "defaultValue": "" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "customAudiencesMutate", - "description": "Creates or updates custom audiences. Operation statuses are returned.", - "isHidden": false + "name": "campaignBudgets", + "description": "Customers Campaign Budgets Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer whose campaign budgets are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "The list of operations to perform on individual campaign budgets.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "partialFailure", + "type": "stringOrExpression", + "required": false, + "description": "If true, successful operations will be carried out and invalid operations will return errors. If false, all operations will be carried out in one transaction if and only if they are all valid. Default is false.", + "defaultValue": "" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "search", + "type": "searchBox", + "required": false, + "description": "Search for an attribute using the display name", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "campaignCriteriaMutate", - "description": "Creates, updates, or removes criteria. Operation statuses are returned.", - "isHidden": false + "name": "search", + "description": "Customers Google Ads Search", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer being queried. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageSize", + "type": "stringOrExpression", + "required": false, + "description": "Number of elements to retrieve in a single page. When too large a page is requested, the server may decide to further limit the number of returned resources.", + "defaultValue": "" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from next Page Token in the previous response in order to request the next page of results.", + "defaultValue": "" + }, + { + "name": "query", + "type": "stringOrExpression", + "required": true, + "description": "The query string.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnTotalResultsCount", + "type": "stringOrExpression", + "required": false, + "description": "If true, the total number of results that match the query ignoring the LIMIT clause will be included in the response. Default is false.", + "defaultValue": "" + }, + { + "name": "search", + "type": "searchBox", + "required": false, + "description": "Search for an attribute using the display name", + "defaultValue": "" + }, + { + "name": "summaryRowSetting", + "type": "stringOrExpression", + "required": false, + "description": "Determines whether a summary row will be returned. By default, summary row is not returned. If requested, the summary row will be sent in a response by itself after all other query results are returned.", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed.", + "defaultValue": "" + } + ] }, { - "name": "userListsMutate", - "description": "Creates or updates user lists. Operation statuses are returned.", - "isHidden": false + "name": "adGroupAdsMutate", + "description": "Ad Group Ads Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer whose ads are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "The list of operations to perform on individual ads.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "partialFailure", + "type": "stringOrExpression", + "required": false, + "description": "If true, successful operations will be carried out and invalid operations will return errors.", + "defaultValue": "" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "userDataMutate", - "description": "Add or remove users to an user list.", - "isHidden": false + "name": "adsMutate", + "description": "Ads Mutate", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer whose ads are being modified. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "operations", + "type": "stringOrExpression", + "required": true, + "description": "The list of operations to perform on individual ads.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "partialFailure", + "type": "stringOrExpression", + "required": false, + "description": "If true, successful operations will be carried out and invalid operations will return errors.", + "defaultValue": "" + }, + { + "name": "responseContentType", + "type": "stringOrExpression", + "required": false, + "description": "The response content type setting. Determines whether the mutable resource or just the resource name should be returned post mutation.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "getCustomers", - "description": "Returns all customers.", - "isHidden": false + "name": "createCustomerClient", + "description": "Customers Create Customer Client", + "isHidden": false, + "parameters": [ + { + "name": "accessRole", + "type": "stringOrExpression", + "required": false, + "description": "The proposed role of user on the created client customer. Accessible only to customers on the allow-list.", + "defaultValue": "" + }, + { + "name": "customerClient", + "type": "stringOrExpression", + "required": true, + "description": "The new client customer to create. The resource name on this customer will be ignored.", + "defaultValue": "" + }, + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Manager under whom client customer is being created. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "emailAddress", + "type": "stringOrExpression", + "required": false, + "description": "Email address of the user who should be invited on the created client customer. Accessible only to customers on the allow-list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "search", + "type": "searchBox", + "required": false, + "description": "Search for an attribute using the display name", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed. Only errors are returned, not results.", + "defaultValue": "" + } + ] }, { - "name": "getCampaigns", - "description": "Returns all campaigns.", - "isHidden": false + "name": "getCustomers", + "description": "List down all Customers", + "isHidden": false, + "parameters": [ + { + "name": "customerId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the customer being queried. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageSize", + "type": "stringOrExpression", + "required": false, + "description": "Number of elements to retrieve in a single page. When too large a page is requested, the server may decide to further limit the number of returned resources.", + "defaultValue": "" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Token of the page to retrieve. If not specified, the first page of results will be returned. Use the value obtained from next Page Token in the previous response in order to request the next page of results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnTotalResultsCount", + "type": "stringOrExpression", + "required": false, + "description": "If true, the total number of results that match the query ignoring the LIMIT clause will be included in the response. Default is false.", + "defaultValue": "" + }, + { + "name": "summaryRowSetting", + "type": "stringOrExpression", + "required": false, + "description": "Determines whether a summary row will be returned. By default, summary row is not returned. If requested, the summary row will be sent in a response by itself after all other query results are returned.", + "defaultValue": "" + }, + { + "name": "validateOnly", + "type": "stringOrExpression", + "required": false, + "description": "If true, the request is validated but not executed.", + "defaultValue": "" + } + ] }, { - "name": "getUserLists", - "description": "Returns all user lists.", - "isHidden": false + "name": "init", + "description": "Config operation", + "isHidden": true, + "parameters": [] } ], "connections": [ { "name": "googleAds", - "description": "Connection for interacting with Google Ads.", - "iconUrl": "" + "description": "Google Ads Connection", + "iconUrl": "", + "parameters": [ + { + "name": "apiVersion", + "type": "stringOrExpression", + "required": false, + "description": "API Version used to connect with the mail server", + "defaultValue": "v18" + }, + { + "name": "base", + "type": "stringOrExpression", + "required": true, + "description": "The service root URL.", + "defaultValue": "https://googleads.googleapis.com" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "Client ID of the registered application.", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "Client secret of the registered application.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Google Ads connection.", + "defaultValue": "GOOGLE_AD_NETWORK_CONNECTION_1" + }, + { + "name": "developerToken", + "type": "stringOrExpression", + "required": true, + "description": "The developer token for the Google Ads connection.", + "defaultValue": "" + }, + { + "name": "loginCustomerId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the Manager Account. Required when using a manager account to access an customer account. E.g., 1234567890", + "defaultValue": "" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": true, + "description": "The refresh token that can be used to obtain a new access token.", + "defaultValue": "" + }, + { + "name": "tokenEndpoint", + "type": "stringOrExpression", + "required": true, + "description": "An HTTP endpoint that can be uses to obtain an access token.", + "defaultValue": "https://www.googleapis.com/oauth2/v3/token" + } + ] } ] }, @@ -2753,74 +17109,555 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-bigquery", + "id": "", "version": { - "tagName": "1.0.11", - "releaseId": "191448469", + "tagName": "2.0.1", + "releaseId": "233198314", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Common method having the configurations applicable to all the business methods in the Connector.", - "isHidden": false - }, - { - "name": "getAccessTokenFromAuthorizationCode", - "description": "Get a new access token by negotiating the authorization code along with client_secret and client_id.", - "isHidden": false - }, - { - "name": "getAccessTokenFromRefreshToken", - "description": "Get a new access token by negotiating the refresh token along with client_secret and client_id.", - "isHidden": false + "name": "listTables", + "description": "List Tables", + "isHidden": false, + "parameters": [ + { + "name": "datasetId", + "type": "stringOrExpression", + "required": true, + "description": "Dataset ID of the tables to list", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results to return", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "Page token, returned by a previous call, to request the next page of results", + "defaultValue": "" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "Project ID of the tables to list", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getAccessTokenFromServiceAccount", - "description": "Get an access token from the service account..", - "isHidden": false + "name": "runQuery", + "description": "Run Query", + "isHidden": false, + "parameters": [ + { + "name": "defaultDatasetId", + "type": "stringOrExpression", + "required": false, + "description": "A unique ID for this dataset, without the project name. The ID must contain only letters (a-z, A-Z), numbers (0-9), or underscores (_). The maximum length is 1,024 characters", + "defaultValue": "" + }, + { + "name": "defaultProjectId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the project containing this dataset", + "defaultValue": "" + }, + { + "name": "dryRun", + "type": "checkbox", + "required": false, + "description": "If set to true, BigQuery doesn't run the job. Instead, if the query is valid, BigQuery returns statistics about the job. If the query is invalid, an error returns. The default value is false", + "defaultValue": "false" + }, + { + "name": "kind", + "type": "stringOrExpression", + "required": false, + "description": "The resource type of the request", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of rows of data to return per page of results. Responses are also limited to 10 MB. By default, there is no maximum row count, and only the byte limit applies", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "Project ID of the project billed for the query", + "defaultValue": "" + }, + { + "name": "query", + "type": "stringOrExpression", + "required": true, + "description": "A query string, following the BigQuery query syntax, of the query to execute", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "timeoutMs", + "type": "stringOrExpression", + "required": false, + "description": "How long to wait for the query to complete, in milliseconds, before the request times out and returns", + "defaultValue": "" + }, + { + "name": "useLegacySql", + "type": "checkbox", + "required": false, + "description": "Specifies whether to use BigQuery's legacy SQL dialect for this query. The default value is true. If set to false, the query will use BigQuery's standard SQL", + "defaultValue": "true" + }, + { + "name": "useQueryCache", + "type": "checkbox", + "required": false, + "description": "Whether to look for the result in the query cache. The default value is true", + "defaultValue": "true" + } + ] }, { "name": "getDataset", - "description": "Gets the specified dataset by dataset ID.", - "isHidden": false - }, - { - "name": "listDatasets", - "description": "List datasets of a project.", - "isHidden": false - }, - { - "name": "runQuery", - "description": "Execute query.", - "isHidden": false + "description": "Get Dataset", + "isHidden": false, + "parameters": [ + { + "name": "datasetId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the dataset", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the project which the dataset belongs to", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listProjects", - "description": "List projects.", - "isHidden": false + "name": "insertAllTableData", + "description": "Insert All Table Data", + "isHidden": false, + "parameters": [ + { + "name": "datasetId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the dataset which the table belongs to", + "defaultValue": "" + }, + { + "name": "ignoreUnknownValues", + "type": "checkbox", + "required": false, + "description": "Boolean value to check the validation of the values that match the table schema", + "defaultValue": "false" + }, + { + "name": "jsonPay", + "type": "stringOrExpression", + "required": true, + "description": "A JSON object that contains a row of data", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the project which the dataset belongs to", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "skipInvalidRows", + "type": "checkbox", + "required": false, + "description": "Boolean value to check whether the validation of row", + "defaultValue": "false" + }, + { + "name": "tableId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the table", + "defaultValue": "" + }, + { + "name": "templateSuffix", + "type": "stringOrExpression", + "required": false, + "description": "Instance table template suffix", + "defaultValue": "" + } + ] }, { "name": "listTabledata", - "description": "List available tabledata.", - "isHidden": false + "description": "List Table Data", + "isHidden": false, + "parameters": [ + { + "name": "datasetId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the dataset which the table belongs to", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of results per page", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "The page token value for pagination", + "defaultValue": "" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the project which the dataset belongs to", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startIndex", + "type": "stringOrExpression", + "required": false, + "description": "Zero-based index of the starting row to read", + "defaultValue": "" + }, + { + "name": "tableId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the table", + "defaultValue": "" + } + ] }, { - "name": "insertAllTableData", - "description": "Insert tabledata into a table.", - "isHidden": false + "name": "getTable", + "description": "Get Table", + "isHidden": false, + "parameters": [ + { + "name": "datasetId", + "type": "stringOrExpression", + "required": true, + "description": "Dataset ID of the requested table", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "Project ID of the requested table", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "tableId", + "type": "stringOrExpression", + "required": true, + "description": "Table ID of the requested table", + "defaultValue": "" + } + ] }, { - "name": "getTable", - "description": "Gets the specified table by table ID.", - "isHidden": false + "name": "listDatasets", + "description": "List Datasets", + "isHidden": false, + "parameters": [ + { + "name": "isAll", + "type": "checkbox", + "required": false, + "description": "Boolean value to determine whether to list all datasets, including hidden ones", + "defaultValue": "false" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of results per page", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "The page token value for pagination", + "defaultValue": "" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the project which the datasets belong to", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listTables", - "description": "List tables.", - "isHidden": false + "name": "listProjects", + "description": "List Projects", + "isHidden": false, + "parameters": [ + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of results per page", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "pageToken", + "type": "stringOrExpression", + "required": false, + "description": "The page token value for pagination", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] } ], - "connections": [] + "connections": [ + { + "name": "GOOGLEBIGQUERY", + "description": "Google BigQuery Connector", + "iconUrl": "", + "parameters": [ + { + "name": "apiUrl", + "type": "stringOrExpression", + "required": false, + "description": "API URL used to connect with Google Sheets", + "defaultValue": "https://www.googleapis.com/bigquery/v2/" + }, + { + "name": "callback", + "type": "stringOrExpression", + "required": false, + "description": "Name of the JavaScript callback function that handles the response. Used in JavaScript JSON-P requests.", + "defaultValue": "" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "Client ID used to connect with Google Sheets", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "Client Secret to connect with Google Sheets", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Google Sheets connection", + "defaultValue": "GOOGLESBIGQUERY_CONNECTION_1" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "List of fields to be returned in the response.", + "defaultValue": "" + }, + { + "name": "ifMatch", + "type": "stringOrExpression", + "required": false, + "description": "Used for caching purposes. If the content has changed, the server will return a 412 Precondition Failed response.", + "defaultValue": "" + }, + { + "name": "ifNoneMatch", + "type": "stringOrExpression", + "required": false, + "description": "Used for caching purposes. If the content has not changed, the server will return a 304 Not Modified response.", + "defaultValue": "" + }, + { + "name": "prettyPrint", + "type": "checkbox", + "required": false, + "description": "If true, the response will be formatted in a more readable way.", + "defaultValue": "true" + }, + { + "name": "quotaUser", + "type": "stringOrExpression", + "required": false, + "description": "An alternative to user IP for quota purposes.", + "defaultValue": "" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": true, + "description": "Refresh Token used to connect with Google Sheets", + "defaultValue": "" + }, + { + "name": "registryPath", + "type": "stringOrExpression", + "required": false, + "description": "Path to the registry where the connection details are stored.", + "defaultValue": "" + }, + { + "name": "tokenEndpoint", + "type": "stringOrExpression", + "required": false, + "description": "Token URL used to connect with Google Sheets", + "defaultValue": "https://oauth2.googleapis.com/token" + }, + { + "name": "userIp", + "type": "stringOrExpression", + "required": false, + "description": "IP address of the end user for quota purposes.", + "defaultValue": "" + } + ] + } + ] }, "otherVersions": {}, "connectorRank": 26, @@ -2833,6 +17670,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-googlefirebase", + "id": "", "version": { "tagName": "1.0.3", "releaseId": "191456144", @@ -2842,22 +17680,26 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "Get the basic details of Firebase API", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sendMessage", "description": "Send firebase message", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "subscribeToTopic", "description": "Subscribe a device to a topic", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "unsubscribeFromTopic", "description": "UnSubscribe devices from a topic", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [] @@ -2873,44 +17715,268 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-googlepubsub", + "id": "", "version": { - "tagName": "1.0.2", - "releaseId": "191488221", + "tagName": "2.0.0", + "releaseId": "233268216", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "configure google pub/sub connector", - "isHidden": false - }, - { - "name": "getAccessTokenFromRefreshToken", - "description": "Get the access token from refresh token", - "isHidden": false - }, - { - "name": "createTopicSubscription", - "description": "Creates a subscription to a given topic", - "isHidden": false - }, - { - "name": "pullMessage", - "description": "Pulls messages from the server", - "isHidden": false + "name": "publishMessage", + "description": "Publish Message", + "isHidden": false, + "parameters": [ + { + "name": "attributes", + "type": "stringOrExpression", + "required": false, + "description": "Additional attributes for the message (JSON object format)", + "defaultValue": "" + }, + { + "name": "data", + "type": "stringOrExpression", + "required": true, + "description": "The message payload to be published (will be base64 encoded automatically)", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "Google Cloud Project ID containing the topic", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "topicName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the topic to publish the message to", + "defaultValue": "" + } + ] }, { "name": "createTopic", - "description": "create a Topic.", - "isHidden": false + "description": "Create Topic", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "Google Cloud Project ID where the topic will be created", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "topicName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the topic to be created", + "defaultValue": "" + } + ] }, { - "name": "publishMessage", - "description": "Adds message to the topic", - "isHidden": false + "name": "pullMessage", + "description": "Pull Message", + "isHidden": false, + "parameters": [ + { + "name": "maxMessages", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of messages returned for this request", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the project", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "returnImmediately", + "type": "checkbox", + "required": false, + "description": "Return the respond immediately or not", + "defaultValue": "false" + }, + { + "name": "subscriptionName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the Subscription", + "defaultValue": "" + } + ] + }, + { + "name": "subscribeTopic", + "description": "Create Topic Subscription", + "isHidden": false, + "parameters": [ + { + "name": "ackDeadlineSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time after a subscriber receives a message before the subscriber must acknowledge the message (10-600 seconds)", + "defaultValue": "" + }, + { + "name": "attributes", + "type": "stringOrExpression", + "required": false, + "description": "Additional attributes for the subscription in JSON format (e.g., '{\"key\":\"value\"}')", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": true, + "description": "Google Cloud Project ID where the subscription will be created", + "defaultValue": "" + }, + { + "name": "pushEndpoint", + "type": "stringOrExpression", + "required": false, + "description": "URL for push delivery. If not specified, the subscription will use pull delivery", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "subscriptionName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the subscription to be created", + "defaultValue": "" + }, + { + "name": "topicName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the topic to subscribe to", + "defaultValue": "" + } + ] } ], - "connections": [] + "connections": [ + { + "name": "GOOGLEPUBSUB", + "description": "Google Pub/Sub Connection", + "iconUrl": "", + "parameters": [ + { + "name": "apiUrl", + "type": "stringOrExpression", + "required": false, + "description": "API URL used to connect with Google Pub/Sub", + "defaultValue": "https://pubsub.googleapis.com" + }, + { + "name": "apiVersion", + "type": "stringOrExpression", + "required": false, + "description": "API Version used to connect with Google Pub/Sub", + "defaultValue": "v1" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "Client ID used to connect with Google Pub/Sub", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "Client Secret to connect with Google Pub/Sub", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name of the connection to Google Pub/Sub", + "defaultValue": "GOOGLEPUBSUB_CONNECTION_1" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": true, + "description": "Refresh Token used to connect with Google Pub/Sub", + "defaultValue": "" + }, + { + "name": "tokenEndpoint", + "type": "stringOrExpression", + "required": false, + "description": "Token URL used to connect with Google Pub/Sub", + "defaultValue": "https://oauth2.googleapis.com/token" + } + ] + } + ] }, "otherVersions": {}, "connectorRank": 101, @@ -2923,153 +17989,1369 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-googlespreadsheet", + "id": "", "version": { - "tagName": "4.0.0", - "releaseId": "215546077", + "tagName": "4.0.2", + "releaseId": "233198215", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "Get Sheet Metadata", - "description": "provides a feed to access the sheet metadata contained within a given spreadsheet.", - "isHidden": false - }, - { - "name": "Create New Sheet", - "description": "creates a new spreadsheet.", - "isHidden": false - }, - { - "name": "Add Sheet", - "description": "Add a sheet or multiple sheets to a spreadsheet.", - "isHidden": false - }, - { - "name": "Delete Sheet", - "description": "Remove a sheet or multiple sheets from a given spreadsheet.", - "isHidden": false - }, - { - "name": "Copy Sheet", - "description": "Copies a single sheet from a spreadsheet to another spreadsheet.", - "isHidden": false - }, - { - "name": "Update Sheet Properties", - "description": "Update all sheet properties.", - "isHidden": false - }, - { - "name": "Add Rows And Columns", - "description": "Append row/rows/column/columns of data.", - "isHidden": false - }, - { - "name": "Delete Dimension", - "description": "removing rows, columns and remove part of a row or column.", - "isHidden": false - }, - { - "name": "Get Cell Data", - "description": "Retrieve any set of cell data from a sheet and cell contents as input values (as would be entered by a user at a keyboard) and/or the outputs of formula (if numeric)", - "isHidden": false - }, - { - "name": "Get Multiple Cell Data", - "description": "Retrieve any set of cell data including multiple ranges from a sheet and cell contents as input values (as would be entered by a user at a keyboard) and/or the outputs of formula (if numeric)", - "isHidden": false - }, - { - "name": "Edit Cell Data", - "description": "Edit the content of the cell with new values.", - "isHidden": false - }, - { - "name": "Update Multiple Cells", - "description": "Edit the content of multiple cell with new values.", - "isHidden": false - }, - { - "name": "Append Dimension", - "description": "Append empty rows or columns at the end of the sheet.", - "isHidden": false - }, - { - "name": "Update Cell Borders", - "description": "Edit cell borders", - "isHidden": false - }, - { - "name": "Repeat Cell Style", - "description": "Repeat formatting of the cell into over a range of cells.", - "isHidden": false - }, - { - "name": "Merge Cells", - "description": "Merge range of cells into a one cell.", - "isHidden": false - }, - { - "name": "Set Data Validation", - "description": "Apply data validation rule to a range.", - "isHidden": false - }, - { - "name": "Copy Range", - "description": "Copy cell formatting in one range and paste it into another range on the same sheet.", - "isHidden": false - }, - { - "name": "Cut Range", - "description": "cuts the one range and pastes its data, formats, formulas, and merges to the another range on the same sheet.", - "isHidden": false - }, - { - "name": "Update Conditional Format Rule", - "description": "Update a conditional formatting rule or its priority.", - "isHidden": false - }, - { - "name": "Add Conditional Format Rule", - "description": "Establishes a new conditional formatting rule.", - "isHidden": false - }, - { - "name": "Delete Conditional Format Rule", - "description": "Delete a conditional formatting rule.", - "isHidden": false - }, - { - "name": "Update Dimension Properties", - "description": "Adjust column width or row height.", - "isHidden": false - }, - { - "name": "Resize Dimension", - "description": "Automatically resize a column.", - "isHidden": false - }, - { - "name": "Insert Dimension", - "description": "Insert an empty row or column at the end or in the middle.", - "isHidden": false - }, - { - "name": "Move Dimension", - "description": "Move a row or column / range of rows or columns.", - "isHidden": false - }, - { - "name": "Sort Range", - "description": "Sort a range with multiple sorting specifications.", - "isHidden": false + "name": "getSheetMetadata", + "description": "Get Sheet Metadata", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "includeGridData", + "type": "checkbox", + "required": false, + "description": "Whether to include grid data in the response", + "defaultValue": "false" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "ranges", + "type": "stringOrExpression", + "required": false, + "description": "The ranges to retrieve metadata for (optional)", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "deleteDimension", + "description": "Delete Dimension", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of delete dimension requests. Format: [{deleteDimension: {range: {sheetId: 0, dimension: \"ROWS\", startIndex: 0, endIndex: 2}}}]", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "updateConditionalFormatRule", + "description": "Update Conditional Format Rule", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of update conditional format rule requests", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "getCellData", + "description": "Get Cell Content", + "isHidden": false, + "parameters": [ + { + "name": "cellId", + "type": "stringOrExpression", + "required": true, + "description": "The cell ID in A1 notation (e.g. A1, B2, etc)", + "defaultValue": "" + }, + { + "name": "configMode", + "type": "comboOrExpression", + "required": false, + "description": "Select the Configuration Mode. BASIC shows essential fields, ADVANCED shows all options. Supported values: BASIC, ADVANCED", + "defaultValue": "BASIC" + }, + { + "name": "dateTimeRenderOption", + "type": "comboOrExpression", + "required": false, + "description": "How dates, times, and durations should be represented Supported values: SERIAL_NUMBER, FORMATTED_STRING", + "defaultValue": "FORMATTED_STRING" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in partial response", + "defaultValue": "" + }, + { + "name": "majorDimension", + "type": "comboOrExpression", + "required": false, + "description": "The major dimension of the values Supported values: ROWS, COLUMNS", + "defaultValue": "ROWS" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "range", + "type": "stringOrExpression", + "required": true, + "description": "The A1 notation of the cell range to retrieve (e.g. Sheet1!A1)", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sheetName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the sheet (tab) containing the cell (e.g. Sheet1)", + "defaultValue": "Sheet1" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + }, + { + "name": "valueRenderOption", + "type": "comboOrExpression", + "required": false, + "description": "How values should be rendered in the output Supported values: FORMATTED_VALUE, UNFORMATTED_VALUE, FORMULA", + "defaultValue": "FORMATTED_VALUE" + } + ] + }, + { + "name": "updateCellBorders", + "description": "Update Cell Borders", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of border update requests specifying the range and border styles", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "copyRange", + "description": "Copy Range", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of copy requests specifying source and destination ranges. Format: [{source: {sheetId: 0, startRowIndex: 0, endRowIndex: 1, startColumnIndex: 0, endColumnIndex: 1}, destination: {sheetId: 0, startRowIndex: 1, endRowIndex: 2, startColumnIndex: 0, endColumnIndex: 1}}]", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "addConditionalFormatRule", + "description": "Add Conditional Format Rule", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of conditional format rules to add", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "deleteSheet", + "description": "Delete Sheet", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of delete sheet requests specifying the sheet IDs to delete", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "editCellData", + "description": "Edit Cell Content", + "isHidden": false, + "parameters": [ + { + "name": "cellId", + "type": "stringOrExpression", + "required": true, + "description": "The cell ID in A1 notation (e.g. A1, B2, etc)", + "defaultValue": "" + }, + { + "name": "configMode", + "type": "comboOrExpression", + "required": false, + "description": "Select the Configuration Mode. BASIC shows essential fields, ADVANCED shows all options. Supported values: BASIC, ADVANCED", + "defaultValue": "BASIC" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in partial response", + "defaultValue": "" + }, + { + "name": "majorDimension", + "type": "comboOrExpression", + "required": false, + "description": "The major dimension of the values Supported values: ROWS, COLUMNS", + "defaultValue": "ROWS" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "range", + "type": "stringOrExpression", + "required": true, + "description": "The A1 notation of the cell range to update (e.g. Sheet1!A1)", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sheetName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the sheet (tab) containing the cell (e.g. Sheet1)", + "defaultValue": "Sheet1" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + }, + { + "name": "value", + "type": "stringOrExpression", + "required": true, + "description": "The new value to set in the cell", + "defaultValue": "" + }, + { + "name": "valueInputOption", + "type": "comboOrExpression", + "required": false, + "description": "How the input data should be interpreted Supported values: RAW, USER_ENTERED", + "defaultValue": "USER_ENTERED" + }, + { + "name": "values", + "type": "stringOrExpression", + "required": false, + "description": "Array of arrays of values to update cells with. Format: [[\"value1\", \"value2\"]]", + "defaultValue": "" + } + ] + }, + { + "name": "updateMultipleCells", + "description": "Update Multiple Cells", + "isHidden": false, + "parameters": [ + { + "name": "data", + "type": "stringOrExpression", + "required": true, + "description": "The data to write. Should be an array of update objects containing range and values. Format: [{range: 'Sheet1!A1:B2', values: [[1,2],[3,4]]}, ...]", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + }, + { + "name": "valueInputOption", + "type": "combo", + "required": true, + "description": "How the input data should be interpreted Supported values: RAW, USER_ENTERED", + "defaultValue": "RAW" + } + ] + }, + { + "name": "createNewSheet", + "description": "Create a new spreadsheet", + "isHidden": false, + "parameters": [ + { + "name": "configMode", + "type": "comboOrExpression", + "required": false, + "description": "Select the Configuration Mode for the operation. BASIC will show only the basic attributes, while ADVANCED will show all attributes. Supported values: BASIC, ADVANCED", + "defaultValue": "BASIC" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "initialSheetName", + "type": "stringOrExpression", + "required": false, + "description": "Name of the initial sheet to be created in the spreadsheet.", + "defaultValue": "Sheet1" + }, + { + "name": "namedRanges", + "type": "stringOrExpression", + "required": false, + "description": "Named ranges to create in the spreadsheet", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": false, + "description": "Properties of the spreadsheet like title. Format: {\"title\": \"My Spreadsheet\"}", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sheets", + "type": "stringOrExpression", + "required": false, + "description": "List of sheets to create in the spreadsheet. Format: [{\"properties\": {\"title\": \"Sheet1\"}}]", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": false, + "description": "ID of the spreadsheet to be created. If not provided, a new spreadsheet will be created.", + "defaultValue": "" + }, + { + "name": "title", + "type": "stringOrExpression", + "required": false, + "description": "Title of the spreadsheet to be created.", + "defaultValue": "" + } + ] + }, + { + "name": "getMultipleCellData", + "description": "Get Multiple Cell Data", + "isHidden": false, + "parameters": [ + { + "name": "dateTimeRenderOption", + "type": "combo", + "required": false, + "description": "How dates, times, and durations should be rendered in the output Supported values: SERIAL_NUMBER, FORMATTED_STRING", + "defaultValue": "" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "majorDimension", + "type": "combo", + "required": false, + "description": "The major dimension that results should use Supported values: ROWS, COLUMNS", + "defaultValue": "ROWS" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "ranges", + "type": "stringOrExpression", + "required": true, + "description": "The A1 notations of the ranges to retrieve (comma-separated, e.g. 'Sheet1!A1:B2,Sheet1!D1:E2')", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + }, + { + "name": "valueRenderOption", + "type": "combo", + "required": false, + "description": "How values should be rendered in the output Supported values: FORMATTED_VALUE, UNFORMATTED_VALUE, FORMULA", + "defaultValue": "" + } + ] + }, + { + "name": "moveDimension", + "description": "Move Dimension", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of move dimension requests. Format: [{moveDimension: {source: {sheetId: 0, dimension: \"ROWS\", startIndex: 0, endIndex: 2}, destinationIndex: 3}}]", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "appendDimension", + "description": "Append Dimension", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of append dimension requests. Format: [{appendDimension: {sheetId: 0, dimension: \"ROWS\", length: 2}}]", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "repeatCellStyle", + "description": "Repeat Cell Style", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of repeat cell requests specifying the range and cell style to repeat", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "setDataValidation", + "description": "Set Data Validation", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of data validation rule requests", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "copySheet", + "description": "Copy Sheet", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of copy sheet requests specifying source sheet ID and destination properties", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "updateDimensionProperties", + "description": "Update Dimension Properties", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of update dimension property requests. Format: [{range: {sheetId: 0, dimension: 'COLUMNS', startIndex: 0, endIndex: 1}, properties: {pixelSize: 100}, fields: 'pixelSize'}]", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "sortRange", + "description": "Sort Range", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of sort requests. Each request should specify the range to sort and sort specifications. Format: [{range: {sheetId: 0, startRowIndex: 0, endRowIndex: 10, startColumnIndex: 0, endColumnIndex: 5}, sortSpecs: [{dimensionIndex: 0, sortOrder: 'ASCENDING'}]}]", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "mergeCells", + "description": "Merge Cells", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of merge cells requests. Format: [{mergeCells: {range: {sheetId: 0, startRowIndex: 0, endRowIndex: 2, startColumnIndex: 0, endColumnIndex: 2}, mergeType: \"MERGE_ALL\"}}]", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "updateSheetProperties", + "description": "Update Sheet Properties", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of update sheet properties requests", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "addSheet", + "description": "Add Sheet", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "JSON array of requests to apply to the spreadsheet. Each request should contain an addSheet field with properties like title, gridProperties, etc.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "resizeDimension", + "description": "Resize Dimension", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of resize dimension requests specifying the dimensions to resize", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "deleteConditionalFormatRule", + "description": "Delete Conditional Format Rule", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of delete conditional format rule requests", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "addRowsAndColumns", + "description": "Add Rows and Columns", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "insertDataOption", + "type": "combo", + "required": false, + "description": "How the input data should be inserted. OVERWRITE: Overwrites data. INSERT_ROWS: Inserts new rows for the data. Supported values: OVERWRITE, INSERT_ROWS", + "defaultValue": "INSERT_ROWS" + }, + { + "name": "majorDimension", + "type": "combo", + "required": false, + "description": "The major dimension that results should use Supported values: ROWS, COLUMNS", + "defaultValue": "ROWS" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "range", + "type": "stringOrExpression", + "required": true, + "description": "The A1 notation of where to append the data (e.g. 'Sheet1!A:B' for columns A-B)", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + }, + { + "name": "valueInputOption", + "type": "combo", + "required": true, + "description": "How the input data should be interpreted Supported values: RAW, USER_ENTERED", + "defaultValue": "RAW" + }, + { + "name": "values", + "type": "stringOrExpression", + "required": true, + "description": "The data to append. Should be an array of arrays. Each inner array represents a row.", + "defaultValue": "" + } + ] + }, + { + "name": "insertDimension", + "description": "Insert Dimension", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of insert dimension requests. Format: [{insertDimension: {range: {sheetId: 0, dimension: \"ROWS\", startIndex: 0, endIndex: 2}, inheritFromBefore: true}}]", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] + }, + { + "name": "cutRange", + "description": "Cut Range", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Specifying which fields to include in a partial response", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "requests", + "type": "stringOrExpression", + "required": true, + "description": "Array of cut requests specifying source and destination ranges", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "spreadsheetId", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the spreadsheet", + "defaultValue": "" + } + ] } ], - "connections": [] - }, - "otherVersions": { - "3.0.2": "191457103" + "connections": [ + { + "name": "GOOGLESPREADSHEET", + "description": "Google Sheets Connection", + "iconUrl": "", + "parameters": [ + { + "name": "apiUrl", + "type": "stringOrExpression", + "required": false, + "description": "API URL used to connect with Google Sheets", + "defaultValue": "https://sheets.googleapis.com/v4/spreadsheets" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "Client ID used to connect with Google Sheets", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "Client Secret to connect with Google Sheets", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Google Sheets connection", + "defaultValue": "GOOGLESPREADSHEET_CONNECTION_1" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": true, + "description": "Refresh Token used to connect with Google Sheets", + "defaultValue": "" + }, + { + "name": "tokenEndpoint", + "type": "stringOrExpression", + "required": false, + "description": "Token URL used to connect with Google Sheets", + "defaultValue": "https://oauth2.googleapis.com/token" + } + ] + } + ] }, + "otherVersions": {}, "connectorRank": 102, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-googlespreadsheet.png" }, @@ -3080,6 +19362,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.module", "mavenArtifactId": "mi-module-hl7v2tofhir", + "id": "", "version": { "tagName": "1.0.1", "releaseId": "191923371", @@ -3089,7 +19372,8 @@ export const CONNECTOR_DB = [ { "name": "createResources", "description": "Init configuration for FHIR repository connector.", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [] @@ -3105,63 +19389,861 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-http", + "id": "", "version": { - "tagName": "0.1.11", - "releaseId": "219717293", + "tagName": "0.1.14", + "releaseId": "255665655", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Config operation", - "isHidden": true - }, - { - "name": "get", - "description": "Send an HTTP GET request.", - "isHidden": false + "name": "head", + "description": "Send HEAD Request", + "isHidden": false, + "parameters": [ + { + "name": "disableChunking", + "type": "checkbox", + "required": false, + "description": "Disable HTTP chunking for outgoing messages, calculating content length before sending to the backend.", + "defaultValue": "False" + }, + { + "name": "forceHttp10", + "type": "checkbox", + "required": false, + "description": "Force HTTP 1.0 for outgoing HTTP messages.", + "defaultValue": "False" + }, + { + "name": "forceScAccepted", + "type": "checkbox", + "required": false, + "description": "Force a 202 HTTP response to the client immediately after the Micro Integrator receives the message.", + "defaultValue": "False" + }, + { + "name": "noKeepAlive", + "type": "checkbox", + "required": false, + "description": "Disable HTTP keep-alive for outgoing requests.", + "defaultValue": "False" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "true" + }, + { + "name": "relativePath", + "type": "stringWithParamManager", + "required": false, + "description": "Enter the relative path for the specific API endpoint, appended to the base URL.", + "defaultValue": "" + }, + { + "name": "requestBodyJson", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${payload}" + }, + { + "name": "requestBodyText", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "requestBodyType", + "type": "combo", + "required": false, + "description": "Supported values: JSON, XML, TEXT", + "defaultValue": "JSON" + }, + { + "name": "requestBodyXml", + "type": "expressionTextArea", + "required": true, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "delete", - "description": "Send an HTTP DELETE request.", - "isHidden": false + "name": "put", + "description": "Send PUT Request", + "isHidden": false, + "parameters": [ + { + "name": "disableChunking", + "type": "checkbox", + "required": false, + "description": "Disable HTTP chunking for outgoing messages, calculating content length before sending to the backend.", + "defaultValue": "False" + }, + { + "name": "forceHttp10", + "type": "checkbox", + "required": false, + "description": "Force HTTP 1.0 for outgoing HTTP messages.", + "defaultValue": "False" + }, + { + "name": "forcePostPutNobody", + "type": "checkbox", + "required": false, + "description": "Allow sending a request without a body for POST and PUT HTTP methods. Applicable only for HTTP PassThrough transport.", + "defaultValue": "False" + }, + { + "name": "forceScAccepted", + "type": "checkbox", + "required": false, + "description": "Force a 202 HTTP response to the client immediately after the Micro Integrator receives the message.", + "defaultValue": "False" + }, + { + "name": "noKeepAlive", + "type": "checkbox", + "required": false, + "description": "Disable HTTP keep-alive for outgoing requests.", + "defaultValue": "False" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "true" + }, + { + "name": "relativePath", + "type": "stringWithParamManager", + "required": false, + "description": "Enter the relative path for the specific API endpoint, appended to the base URL.", + "defaultValue": "" + }, + { + "name": "requestBodyJson", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${payload}" + }, + { + "name": "requestBodyText", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "requestBodyType", + "type": "combo", + "required": false, + "description": "Supported values: JSON, XML, TEXT", + "defaultValue": "JSON" + }, + { + "name": "requestBodyXml", + "type": "expressionTextArea", + "required": true, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "post", - "description": "Send an HTTP POST request.", - "isHidden": false + "name": "options", + "description": "Send OPTIONS Request", + "isHidden": false, + "parameters": [ + { + "name": "disableChunking", + "type": "checkbox", + "required": false, + "description": "Disable HTTP chunking for outgoing messages, calculating content length before sending to the backend.", + "defaultValue": "False" + }, + { + "name": "forceHttp10", + "type": "checkbox", + "required": false, + "description": "Force HTTP 1.0 for outgoing HTTP messages.", + "defaultValue": "False" + }, + { + "name": "forceScAccepted", + "type": "checkbox", + "required": false, + "description": "Force a 202 HTTP response to the client immediately after the Micro Integrator receives the message.", + "defaultValue": "False" + }, + { + "name": "noKeepAlive", + "type": "checkbox", + "required": false, + "description": "Disable HTTP keep-alive for outgoing requests.", + "defaultValue": "False" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "true" + }, + { + "name": "relativePath", + "type": "stringWithParamManager", + "required": false, + "description": "Enter the relative path for the specific API endpoint, appended to the base URL.", + "defaultValue": "" + }, + { + "name": "requestBodyJson", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${payload}" + }, + { + "name": "requestBodyText", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "requestBodyType", + "type": "combo", + "required": false, + "description": "Supported values: JSON, XML, TEXT", + "defaultValue": "JSON" + }, + { + "name": "requestBodyXml", + "type": "expressionTextArea", + "required": true, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "put", - "description": "Send an HTTP PUT request.", - "isHidden": false + "name": "patch", + "description": "Send PATCH Request", + "isHidden": false, + "parameters": [ + { + "name": "disableChunking", + "type": "checkbox", + "required": false, + "description": "Disable HTTP chunking for outgoing messages, calculating content length before sending to the backend.", + "defaultValue": "False" + }, + { + "name": "forceHttp10", + "type": "checkbox", + "required": false, + "description": "Force HTTP 1.0 for outgoing HTTP messages.", + "defaultValue": "False" + }, + { + "name": "forceScAccepted", + "type": "checkbox", + "required": false, + "description": "Force a 202 HTTP response to the client immediately after the Micro Integrator receives the message.", + "defaultValue": "False" + }, + { + "name": "noKeepAlive", + "type": "checkbox", + "required": false, + "description": "Disable HTTP keep-alive for outgoing requests.", + "defaultValue": "False" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "true" + }, + { + "name": "relativePath", + "type": "stringWithParamManager", + "required": false, + "description": "Enter the relative path for the specific API endpoint, appended to the base URL.", + "defaultValue": "" + }, + { + "name": "requestBodyJson", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${payload}" + }, + { + "name": "requestBodyText", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "requestBodyType", + "type": "combo", + "required": false, + "description": "Supported values: JSON, XML, TEXT", + "defaultValue": "JSON" + }, + { + "name": "requestBodyXml", + "type": "expressionTextArea", + "required": true, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "patch", - "description": "Send an HTTP PATCH request.", - "isHidden": false + "name": "get", + "description": "Send GET Request", + "isHidden": false, + "parameters": [ + { + "name": "disableChunking", + "type": "checkbox", + "required": false, + "description": "Disable HTTP chunking for outgoing messages, calculating content length before sending to the backend.", + "defaultValue": "False" + }, + { + "name": "forceHttp10", + "type": "checkbox", + "required": false, + "description": "Force HTTP 1.0 for outgoing HTTP messages.", + "defaultValue": "False" + }, + { + "name": "forceScAccepted", + "type": "checkbox", + "required": false, + "description": "Force a 202 HTTP response to the client immediately after the Micro Integrator receives the message.", + "defaultValue": "False" + }, + { + "name": "noKeepAlive", + "type": "checkbox", + "required": false, + "description": "Disable HTTP keep-alive for outgoing requests.", + "defaultValue": "False" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "true" + }, + { + "name": "relativePath", + "type": "stringWithParamManager", + "required": false, + "description": "Enter the relative path for the specific API endpoint, appended to the base URL.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "head", - "description": "Send an HTTP HEAD request.", - "isHidden": false + "name": "delete", + "description": "Send DELETE Request", + "isHidden": false, + "parameters": [ + { + "name": "disableChunking", + "type": "checkbox", + "required": false, + "description": "Disable HTTP chunking for outgoing messages, calculating content length before sending to the backend.", + "defaultValue": "False" + }, + { + "name": "forceHttp10", + "type": "checkbox", + "required": false, + "description": "Force HTTP 1.0 for outgoing HTTP messages.", + "defaultValue": "False" + }, + { + "name": "forceScAccepted", + "type": "checkbox", + "required": false, + "description": "Force a 202 HTTP response to the client immediately after the Micro Integrator receives the message.", + "defaultValue": "False" + }, + { + "name": "noKeepAlive", + "type": "checkbox", + "required": false, + "description": "Disable HTTP keep-alive for outgoing requests.", + "defaultValue": "False" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "true" + }, + { + "name": "relativePath", + "type": "stringWithParamManager", + "required": false, + "description": "Enter the relative path for the specific API endpoint, appended to the base URL.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "options", - "description": "Send an HTTP OPTIONS request.", - "isHidden": false + "name": "post", + "description": "Send POST Request", + "isHidden": false, + "parameters": [ + { + "name": "disableChunking", + "type": "checkbox", + "required": false, + "description": "Disable HTTP chunking for outgoing messages, calculating content length before sending to the backend.", + "defaultValue": "False" + }, + { + "name": "forceHttp10", + "type": "checkbox", + "required": false, + "description": "Force HTTP 1.0 for outgoing HTTP messages.", + "defaultValue": "False" + }, + { + "name": "forcePostPutNobody", + "type": "checkbox", + "required": false, + "description": "Allow sending a request without a body for POST and PUT HTTP methods. Applicable only for HTTP PassThrough transport.", + "defaultValue": "False" + }, + { + "name": "forceScAccepted", + "type": "checkbox", + "required": false, + "description": "Force a 202 HTTP response to the client immediately after the Micro Integrator receives the message.", + "defaultValue": "False" + }, + { + "name": "noKeepAlive", + "type": "checkbox", + "required": false, + "description": "Disable HTTP keep-alive for outgoing requests.", + "defaultValue": "False" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "true" + }, + { + "name": "relativePath", + "type": "stringWithParamManager", + "required": false, + "description": "Enter the relative path for the specific API endpoint, appended to the base URL.", + "defaultValue": "" + }, + { + "name": "requestBodyJson", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${payload}" + }, + { + "name": "requestBodyText", + "type": "expressionTextArea", + "required": false, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "requestBodyType", + "type": "combo", + "required": false, + "description": "Supported values: JSON, XML, TEXT", + "defaultValue": "JSON" + }, + { + "name": "requestBodyXml", + "type": "expressionTextArea", + "required": true, + "description": "", + "defaultValue": "${xpath('$body/node()')}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "HTTP", - "description": "Connection for interacting with HTTP endpoints.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-connector-http_HTTP.svg" + "description": "HTTP Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-connector-http_HTTP.svg", + "parameters": [ + { + "name": "additionalProperties", + "type": "string", + "required": false, + "description": "", + "defaultValue": "" + }, + { + "name": "authType", + "type": "combo", + "required": false, + "description": "Supported values: None, Basic Auth, OAuth", + "defaultValue": "None" + }, + { + "name": "baseUrl", + "type": "stringOrExpression", + "required": true, + "description": "Enter the base URL of the service, which serves as the root endpoint for all API requests.", + "defaultValue": "http://" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "oauthAuthorizationMode", + "type": "combo", + "required": true, + "description": "Supported values: Header, Payload", + "defaultValue": "Header" + }, + { + "name": "oauthGrantType", + "type": "combo", + "required": false, + "description": "Supported values: Authorization Code, Client Credentials, Password", + "defaultValue": "Authorization Code" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "Enter Password", + "defaultValue": "" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "retryCount", + "type": "string", + "required": false, + "description": "", + "defaultValue": "0" + }, + { + "name": "retryDelay", + "type": "string", + "required": false, + "description": "The time to wait between the last retry attempt and the next retry.", + "defaultValue": "0" + }, + { + "name": "retryErrorCodes", + "type": "string", + "required": false, + "description": "Provide a comma separated error codes list", + "defaultValue": "" + }, + { + "name": "suspendErrorCodes", + "type": "string", + "required": false, + "description": "Provide a comma separated error codes list", + "defaultValue": "" + }, + { + "name": "suspendInitialDuration", + "type": "string", + "required": false, + "description": "The initial suspend duration when the connection is marked as inactive", + "defaultValue": "-1" + }, + { + "name": "suspendMaximumDuration", + "type": "string", + "required": false, + "description": "Suspend duration = the minimum of maximum suspend duration and calculated suspend duration", + "defaultValue": "" + }, + { + "name": "suspendProgressionFactor", + "type": "string", + "required": false, + "description": "Next suspend duration = Previous suspend duration * Suspend duration ratio", + "defaultValue": "1" + }, + { + "name": "timeoutAction", + "type": "combo", + "required": false, + "description": "Never: No action performed, Discard: Discard the callback, Fault: Discard the callback and execute defined fault sequence Supported values: Never, Discard, Fault", + "defaultValue": "Never" + }, + { + "name": "timeoutDuration", + "type": "string", + "required": false, + "description": "", + "defaultValue": "" + }, + { + "name": "tokenUrl", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "Enter Username", + "defaultValue": "" + } + ] }, { "name": "HTTPS", - "description": "Connection for interacting with HTTPS endpoints.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-connector-http_HTTPS.svg" + "description": "HTTPS Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-connector-http_HTTPS.svg", + "parameters": [ + { + "name": "additionalProperties", + "type": "string", + "required": false, + "description": "", + "defaultValue": "" + }, + { + "name": "authType", + "type": "combo", + "required": false, + "description": "Supported values: None, Basic Auth, OAuth", + "defaultValue": "None" + }, + { + "name": "baseUrl", + "type": "stringOrExpression", + "required": true, + "description": "Enter the base URL of the service, which serves as the root endpoint for all API requests.", + "defaultValue": "https://" + }, + { + "name": "certificateConfigurable", + "type": "popUp", + "required": false, + "description": "Certificates are managed as configurables for the project. To add a certificate as a configurable, navigate to the Configurables section on the Project Overview page.", + "defaultValue": "" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "oauthAuthorizationMode", + "type": "combo", + "required": true, + "description": "Supported values: Header, Payload", + "defaultValue": "Header" + }, + { + "name": "oauthGrantType", + "type": "combo", + "required": false, + "description": "Supported values: Authorization Code, Client Credentials, Password", + "defaultValue": "Authorization Code" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "Enter Password", + "defaultValue": "" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "retryCount", + "type": "string", + "required": false, + "description": "", + "defaultValue": "0" + }, + { + "name": "retryDelay", + "type": "string", + "required": false, + "description": "The time to wait between the last retry attempt and the next retry.", + "defaultValue": "0" + }, + { + "name": "retryErrorCodes", + "type": "string", + "required": false, + "description": "Provide a comma separated error codes list", + "defaultValue": "" + }, + { + "name": "suspendErrorCodes", + "type": "string", + "required": false, + "description": "Provide a comma separated error codes list", + "defaultValue": "" + }, + { + "name": "suspendInitialDuration", + "type": "string", + "required": false, + "description": "The initial suspend duration when the connection is marked as inactive", + "defaultValue": "-1" + }, + { + "name": "suspendMaximumDuration", + "type": "string", + "required": false, + "description": "Suspend duration = the minimum of maximum suspend duration and calculated suspend duration", + "defaultValue": "" + }, + { + "name": "suspendProgressionFactor", + "type": "string", + "required": false, + "description": "Next suspend duration = Previous suspend duration * Suspend duration ratio", + "defaultValue": "1" + }, + { + "name": "timeoutAction", + "type": "combo", + "required": false, + "description": "Never: No action performed, Discard: Discard the callback, Fault: Discard the callback and execute defined fault sequence Supported values: Never, Discard, Fault", + "defaultValue": "Never" + }, + { + "name": "timeoutDuration", + "type": "string", + "required": false, + "description": "", + "defaultValue": "" + }, + { + "name": "tokenUrl", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "Enter Username", + "defaultValue": "" + } + ] } ] }, @@ -3169,6 +20251,189 @@ export const CONNECTOR_DB = [ "connectorRank": 5, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/mi-connector-http.png" }, + { + "connectorName": "Intelligent Document Processing", + "repoName": "mi-connector-idp", + "description": "The WSO2 Intelligent Document Processing connector allows you to extract structured data from unstructured documents.", + "connectorType": "Connector", + "mavenGroupId": "org.wso2.integration.connector", + "mavenArtifactId": "mi-connector-idp", + "id": "", + "version": { + "tagName": "1.0.0", + "releaseId": "242485351", + "isLatest": true, + "isDeprecated": false, + "operations": [ + { + "name": "processDocuments", + "description": "Scan a given image/document with AI", + "isHidden": false, + "parameters": [ + { + "name": "contentFormat", + "type": "combo", + "required": true, + "description": "Select the format of the content to be scanned. Data URI (e.g., data:image/png;base64,iVBORw0...) or Base64 (raw base64 encoded content only). Supported values: Data URI, Base64", + "defaultValue": "Data URI" + }, + { + "name": "fileContent", + "type": "stringOrExpression", + "required": true, + "description": "Give the content to be scanned.", + "defaultValue": "" + }, + { + "name": "idpSchema", + "type": "idpSchemaGenerateView", + "required": true, + "description": "Define the output schema for extracting the content from the documents.", + "defaultValue": "" + }, + { + "name": "maxTokens", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of tokens that can be generated in the chat completion.", + "defaultValue": "4096" + }, + { + "name": "mimeType", + "type": "stringOrExpression", + "required": true, + "description": "Specify the MIME type of the content to be scanned. Allowed values are: image/png, image/jpeg, image/gif, image/webp, application/pdf", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + } + ], + "connections": [ + { + "name": "OPEN_AI", + "description": "Open AI Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-connector-idp_OPEN_AI.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "API key for Open AI", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Open AI connection", + "defaultValue": "OPEN_AI_CONNECTION_1" + }, + { + "name": "endpointUrl", + "type": "stringOrExpression", + "required": false, + "description": "Define the Open AI v1 chat completions endpoint.", + "defaultValue": "https://api.openai.com/v1/chat/completions" + }, + { + "name": "model", + "type": "stringOrExpression", + "required": false, + "description": "Define the Open AI Model", + "defaultValue": "gpt-4.1-mini" + } + ] + }, + { + "name": "OLLAMA", + "description": "Ollama Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-connector-idp_OLLAMA.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "API key for Ollama", + "defaultValue": "ollama" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Ollama connection", + "defaultValue": "OLLAMA_CONNECTION_1" + }, + { + "name": "endpointUrl", + "type": "stringOrExpression", + "required": false, + "description": "Define the Ollama v1 chat completions endpoint.", + "defaultValue": "http://localhost:11434/v1/chat/completions" + }, + { + "name": "model", + "type": "stringOrExpression", + "required": false, + "description": "Define the Ollama Model", + "defaultValue": "qwen2.5vl:3b" + } + ] + }, + { + "name": "CUSTOM_LLM", + "description": "LLM Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/mi-connector-idp_CUSTOM_LLM.svg", + "parameters": [ + { + "name": "apiKey", + "type": "stringOrExpression", + "required": true, + "description": "Generate an API key from your LLM provider and enter it here.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the LLM connection", + "defaultValue": "LLM_CONNECTION_1" + }, + { + "name": "endpointUrl", + "type": "stringOrExpression", + "required": true, + "description": "Define the v1 chat completions endpoint for your LLM provider.", + "defaultValue": "https://api.openai.com/v1/chat/completions" + }, + { + "name": "model", + "type": "stringOrExpression", + "required": true, + "description": "Define the LLM Model", + "defaultValue": "gpt-4.1-mini" + } + ] + } + ] + }, + "otherVersions": {}, + "connectorRank": 15, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/mi-connector-idp.png" + }, { "connectorName": "ISO8583", "repoName": "esb-connector-iso8583", @@ -3176,6 +20441,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-iso8583", + "id": "", "version": { "tagName": "1.0.4", "releaseId": "191925856", @@ -3185,12 +20451,14 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "configure ISO8583 connector.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sendMessage", "description": "sendMessage (ISO8583 Message) method for ISO8583 Connector.", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [] @@ -3206,304 +20474,2291 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-jira", + "id": "", "version": { - "tagName": "1.0.6", - "releaseId": "191458827", + "tagName": "2.0.0", + "releaseId": "233266724", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "configure jira connector", - "isHidden": false + "name": "getIssueLinkById", + "description": "Get Issue Link By ID", + "isHidden": false, + "parameters": [ + { + "name": "linkId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the issue link to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getDashboards", - "description": "get available jira dashboards", - "isHidden": false + "name": "getComponentsOfProject", + "description": "Get Components of Project", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID or key of the Jira project for which to retrieve components.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getDashboardById", - "description": "get jira dashboard by ID", - "isHidden": false + "name": "getIssuePriorities", + "description": "Get Issue Priorities", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createFilter", - "description": "Creates a new filter, and returns newly created filter. Currently sets permissions just using the users default sharing permissions", - "isHidden": false + "name": "getDashboardById", + "description": "Get Dashboard by ID", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Jira dashboard to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteFilter", - "description": "Delete a filter.", - "isHidden": false + "name": "updateIssueAssignee", + "description": "Update Issue Assignee", + "isHidden": false, + "parameters": [ + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue to assign (e.g., 'JRA-123').", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The username of the user to be assigned to the issue.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getFavouriteFilters", - "description": "Returns the favourite filters of the logged-in user.", - "isHidden": false + "name": "postComment", + "description": "Post Comment to Issue", + "isHidden": false, + "parameters": [ + { + "name": "comment", + "type": "stringOrExpression", + "required": true, + "description": "The comment text to post on the issue.", + "defaultValue": "" + }, + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand (e.g., 'renderedBody').", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The Jira issue ID or key to which the comment will be added.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "visibleRole", + "type": "stringOrExpression", + "required": false, + "description": "Role name to restrict comment visibility (optional).", + "defaultValue": "" + } + ] }, { - "name": "getFilterById", - "description": "Returns a filter given an id", - "isHidden": false + "name": "assignIssueToUser", + "description": "Assign Issue to User", + "isHidden": false, + "parameters": [ + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue to assign.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The username of the user to whom the issue will be assigned.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "updateFilterById", - "description": "Updates an existing filter, and returns its new value.", - "isHidden": false + "name": "deleteFilter", + "description": "Delete Filter", + "isHidden": false, + "parameters": [ + { + "name": "filterId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Jira filter to delete.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "getGroup", - "description": "Returns REST representation for the requested group", - "isHidden": false + "description": "Get Group Information", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand (e.g., 'users').", + "defaultValue": "" + }, + { + "name": "groupName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the group to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listGroupPicker", - "description": "Returns groups with substrings matching a given query.", - "isHidden": false + "name": "doTransition", + "description": "Transition Issue", + "isHidden": false, + "parameters": [ + { + "name": "issueFields", + "type": "stringOrExpression", + "required": true, + "description": "A JSON object specifying the transition ID and optional fields (e.g., { \"transition\": { \"id\": \"31\" } }).", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue to be transitioned.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "listGroupUserPicker", - "description": "Returns a list of users and groups matching query with highlighting.", - "isHidden": false + "name": "updateComment", + "description": "Update Issue Comment", + "isHidden": false, + "parameters": [ + { + "name": "comment", + "type": "stringOrExpression", + "required": true, + "description": "The updated comment content.", + "defaultValue": "" + }, + { + "name": "commentId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the comment to be updated.", + "defaultValue": "" + }, + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated expand options, such as 'renderedBody' to get the HTML version of the comment.", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The Jira issue ID or key for which the comment is being updated.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "visibleRole", + "type": "stringOrExpression", + "required": false, + "description": "Restrict visibility of the comment to a specific Jira role (e.g., 'Administrators').", + "defaultValue": "" + } + ] }, { - "name": "createIssue", - "description": "creates jira issue", - "isHidden": false + "name": "getVersionsOfProject", + "description": "Get Versions of Project", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand in the response (optional).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier or key of the project.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getIssue", - "description": "get jira issue", - "isHidden": false + "name": "searchJira", + "description": "Search Issues", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of parameters to expand (e.g., 'names,schema').", + "defaultValue": "" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to include in the response.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of results to return.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "query", + "type": "stringOrExpression", + "required": true, + "description": "The JQL query string used to search for issues.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startAt", + "type": "stringOrExpression", + "required": false, + "description": "The index of the first issue to return (0-based).", + "defaultValue": "" + }, + { + "name": "validateQuery", + "type": "stringOrExpression", + "required": false, + "description": "Whether to validate the JQL query before execution (true/false).", + "defaultValue": "" + } + ] }, { - "name": "updateIssue", - "description": "update jira issue", - "isHidden": false + "name": "getIssue", + "description": "Get Issue", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Optional expansion flags (e.g., 'renderedFields,transitions').", + "defaultValue": "" + }, + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to return (e.g., 'summary,description,status').", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "updateIssueAssignee", - "description": "update jira issue assinee", - "isHidden": false + "name": "getAttachmentById", + "description": "Get Attachment Metadata", + "isHidden": false, + "parameters": [ + { + "name": "attachmentId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the Jira attachment.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getTransitions", - "description": "get transitions for the requested jira", - "isHidden": false + "name": "updateIssue", + "description": "Update Jira Issue", + "isHidden": false, + "parameters": [ + { + "name": "issueFields", + "type": "stringOrExpression", + "required": true, + "description": "The JSON object specifying the fields to update. Example: '{\"fields\": {\"summary\": \"New summary\"}}'.", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The Jira issue ID or key to update (e.g., 'JRA-123').", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "doTransition", - "description": "change transitions for the requested jira", - "isHidden": false + "name": "getRolesByIdOfProject", + "description": "Get Project Role by ID", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID or key of the Jira project.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "roleId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the role to retrieve from the project.", + "defaultValue": "" + } + ] }, { - "name": "deleteComment", - "description": "delete comment of the given jira issue", - "isHidden": false + "name": "getVotesForIssue", + "description": "Get Votes for Issue", + "isHidden": false, + "parameters": [ + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue for which votes are retrieved.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getComments", - "description": "get jira issue commnents", - "isHidden": false + "name": "getIssueTypeById", + "description": "Get Issue Type by ID", + "isHidden": false, + "parameters": [ + { + "name": "issueTypeId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Jira issue type to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "postComment", - "description": "Posting jira issue comment", - "isHidden": false + "name": "createBulkIssue", + "description": "Create Bulk Issues", + "isHidden": false, + "parameters": [ + { + "name": "issueUpdates", + "type": "stringOrExpression", + "required": true, + "description": "A JSON array of issue objects to be created. Each object must follow the Jira issue format.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "updateComment", - "description": "updating jira issue comment", - "isHidden": false + "name": "countComponentRelatedIssues", + "description": "Count Component Related Issues", + "isHidden": false, + "parameters": [ + { + "name": "componentId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the component.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getVotesForIssue", - "description": "get vote for the requested jira", - "isHidden": false + "name": "getRolesOfProject", + "description": "Get Project Roles", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID or key of the Jira project.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "addAttachmentToIssueId", - "description": "Add one or more attachments to an issue.", - "isHidden": false + "name": "createIssueLink", + "description": "Create Issue Link", + "isHidden": false, + "parameters": [ + { + "name": "commentBody", + "type": "stringOrExpression", + "required": false, + "description": "Optional comment to add to the issue link.", + "defaultValue": "" + }, + { + "name": "commentVisibility", + "type": "jsonOrExpression", + "required": false, + "description": "Visibility of the comment (e.g., {\"type\": \"role\", \"value\": \"Developers\"}).", + "defaultValue": "" + }, + { + "name": "inwardIssueKey", + "type": "stringOrExpression", + "required": true, + "description": "Key of the inward issue (e.g., JIRA-100).", + "defaultValue": "" + }, + { + "name": "outwardIssueKey", + "type": "stringOrExpression", + "required": true, + "description": "Key of the outward issue (e.g., JIRA-101).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "typeName", + "type": "stringOrExpression", + "required": true, + "description": "Name of the link type (e.g., 'Blocks', 'Relates').", + "defaultValue": "" + } + ] }, { - "name": "getIssuePriorities", - "description": "Get a list of issue priorities.", - "isHidden": false + "name": "getFavouriteFilters", + "description": "Get Favourite Filters", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand (e.g., 'sharedUsers,subscriptions').", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getIssuePriorityById", - "description": "Get information about issue priority by ID.", - "isHidden": false + "name": "getUserAssignableProjects", + "description": "Get User Assignable Projects", + "isHidden": false, + "parameters": [ + { + "name": "maxResults", + "type": "intOrExpression", + "required": false, + "description": "Maximum number of results to return.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectKeys", + "type": "stringOrExpression", + "required": true, + "description": "Comma-separated list of project keys to filter the results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startAt", + "type": "intOrExpression", + "required": false, + "description": "Index of the first item to return in the page of results.", + "defaultValue": "" + }, + { + "name": "usernameForSearch", + "type": "stringOrExpression", + "required": true, + "description": "Username of the user to search for assignable projects.", + "defaultValue": "" + } + ] }, { - "name": "getIssueTypes", - "description": "Get issue types defined in the system.", - "isHidden": false + "name": "updateFilterById", + "description": "Update Filter by ID", + "isHidden": false, + "parameters": [ + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "New description of the filter.", + "defaultValue": "" + }, + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand (e.g., 'sharedUsers,subscriptions').", + "defaultValue": "" + }, + { + "name": "favourite", + "type": "booleanOrExpression", + "required": false, + "description": "Set this filter as a favorite.", + "defaultValue": "false" + }, + { + "name": "filterId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the Jira filter to be updated.", + "defaultValue": "" + }, + { + "name": "filterName", + "type": "stringOrExpression", + "required": true, + "description": "New name of the filter.", + "defaultValue": "" + }, + { + "name": "jqlType", + "type": "stringOrExpression", + "required": true, + "description": "JQL query type used in the filter. The full query will be 'type = [jqlType]'.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getIssueTypeById", - "description": "Get information about issue type by ID.", - "isHidden": false + "name": "getAttachmentContent", + "description": "Get Attachment Content", + "isHidden": false, + "parameters": [ + { + "name": "attachmentUrl", + "type": "stringOrExpression", + "required": true, + "description": "The direct URL of the Jira attachment content.", + "defaultValue": "" + }, + { + "name": "fileType", + "type": "stringOrExpression", + "required": false, + "description": "MIME type of the file (e.g., application/pdf, image/png).", + "defaultValue": "application/octet-stream" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createBulkIssue", - "description": "Creates many issues in one bulk operation.", - "isHidden": false + "name": "createIssue", + "description": "Create Issue", + "isHidden": false, + "parameters": [ + { + "name": "issueFields", + "type": "stringOrExpression", + "required": true, + "description": "A JSON object containing the fields of the issue (e.g., summary, description, project, issuetype).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "assignIssueToUser", - "description": "Assigns an issue to a user.", - "isHidden": false + "name": "sendNotification", + "description": "Send Notification", + "isHidden": false, + "parameters": [ + { + "name": "htmlBody", + "type": "stringOrExpression", + "required": false, + "description": "HTML formatted content for the notification.", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The Jira issue ID or key associated with this notification.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "restrictGroups", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of group names to restrict notification visibility (e.g., ['support-team']).", + "defaultValue": "" + }, + { + "name": "restrictPermissions", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of permissions required to view this notification (e.g., ['Browse Projects']).", + "defaultValue": "" + }, + { + "name": "subject", + "type": "stringOrExpression", + "required": false, + "description": "Subject of the notification message.", + "defaultValue": "" + }, + { + "name": "textBody", + "type": "stringOrExpression", + "required": false, + "description": "Plain text body content of the notification.", + "defaultValue": "" + }, + { + "name": "toAssignee", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to notify the assignee.", + "defaultValue": "false" + }, + { + "name": "toGroups", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of group names to notify (e.g., ['jira-users','admins']).", + "defaultValue": "" + }, + { + "name": "toReporter", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to notify the issue reporter.", + "defaultValue": "false" + }, + { + "name": "toUsers", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of usernames to notify (e.g., ['user1','user2']).", + "defaultValue": "" + }, + { + "name": "toVoters", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to notify users who voted for the issue.", + "defaultValue": "false" + }, + { + "name": "toWatchers", + "type": "booleanOrExpression", + "required": false, + "description": "Whether to notify the watchers of the issue.", + "defaultValue": "false" + } + ] }, { - "name": "getCommentById", - "description": "Returns all comments for an issue.", - "isHidden": false + "name": "getComponent", + "description": "Get Component", + "isHidden": false, + "parameters": [ + { + "name": "componentId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the component to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "sendNotification", - "description": "Sends a notification (email) to the list or recipients defined in the request.", - "isHidden": false + "name": "searchAssignableUser", + "description": "Search Assignable User", + "isHidden": false, + "parameters": [ + { + "name": "actionDescriptorId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the workflow action descriptor for filtering assignable users.", + "defaultValue": "" + }, + { + "name": "issueKey", + "type": "stringOrExpression", + "required": false, + "description": "Key of the issue to refine the assignable user search.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "numberOrExpression", + "required": false, + "description": "Maximum number of users to return. Default is 50, maximum is 1000.", + "defaultValue": "50" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "project", + "type": "stringOrExpression", + "required": false, + "description": "Key of the project to filter assignable users.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startAt", + "type": "numberOrExpression", + "required": false, + "description": "Index of the first user to return (0-based).", + "defaultValue": "0" + }, + { + "name": "usernameForSearch", + "type": "stringOrExpression", + "required": false, + "description": "Username to search for assignable users.", + "defaultValue": "" + } + ] }, { "name": "addVotesForIssue", - "description": "Cast your vote in favour of an issue.", - "isHidden": false + "description": "Add Vote to Issue", + "isHidden": false, + "parameters": [ + { + "name": "issueId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Jira issue to vote on.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getWatchersForIssue", - "description": "Returns the list of watchers for the issue with the given key.", - "isHidden": false + "name": "getFilterById", + "description": "Get Filter by ID", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand (e.g., 'sharedUsers,subscriptions').", + "defaultValue": "" + }, + { + "name": "filterId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the Jira filter to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "removeUserFromWatcherList", - "description": "Removes a user from an issue's watcher list.", - "isHidden": false + "name": "getIssueTypes", + "description": "Get All Issue Types", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getProject", - "description": "Get Jira Project information.", - "isHidden": false + "name": "createComponent", + "description": "Create Component", + "isHidden": false, + "parameters": [ + { + "name": "assigneeType", + "type": "stringOrExpression", + "required": false, + "description": "Type of the default assignee (e.g., PROJECT_LEAD, COMPONENT_LEAD, UNASSIGNED).", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "Optional description for the component.", + "defaultValue": "" + }, + { + "name": "isAssigneeTypeValid", + "type": "booleanOrExpression", + "required": false, + "description": "Set to true if the given assignee type is valid.", + "defaultValue": "true" + }, + { + "name": "leadUserName", + "type": "stringOrExpression", + "required": false, + "description": "Username of the component lead.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The name of the component to be created.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "project", + "type": "stringOrExpression", + "required": true, + "description": "The key of the project to which the component belongs.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getAvatarsForProject", - "description": "returns all avatars which are visible for the currently logged in user. The avatars are grouped into system and custom.", - "isHidden": false + "name": "getWatchersForIssue", + "description": "Get Watchers for Issue", + "isHidden": false, + "parameters": [ + { + "name": "issueId", + "type": "stringOrExpression", + "required": true, + "description": "The Jira issue ID or key to retrieve the watchers list for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteAvatarForProject", - "description": "Deletes avatar", - "isHidden": false - }, - { - "name": "getComponentsOfProject", - "description": "Contains a full representation of a the specified project's components.", - "isHidden": false + "name": "addAttachmentToIssueId", + "description": "Add Attachment to Issue", + "isHidden": false, + "parameters": [ + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The Jira issue ID or key to which the attachment will be added.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getStatusesOfProject", - "description": "Get all issue types with valid status values for a project.", - "isHidden": false + "name": "setActorsToRoleOfProject", + "description": "Set Actors to Project Role", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The key or ID of the Jira project (e.g., 'PROJ').", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "roleId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the project role to assign actors to.", + "defaultValue": "" + }, + { + "name": "roles", + "type": "stringOrExpression", + "required": true, + "description": "JSON content specifying the actors to assign. Example: '{\"user\": [\"user1\"], \"group\": [\"dev-team\"]}'", + "defaultValue": "" + } + ] }, { - "name": "getVersionsOfProject", - "description": "Contains a full representation of a the specified project's versions.", - "isHidden": false + "name": "getUser", + "description": "Get User Details", + "isHidden": false, + "parameters": [ + { + "name": "key", + "type": "stringOrExpression", + "required": false, + "description": "The key of the user to look up. Optional if username is provided.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "usernameFilter", + "type": "stringOrExpression", + "required": false, + "description": "The username of the user to look up. Optional if key is provided.", + "defaultValue": "" + } + ] }, { - "name": "getRolesOfProject", - "description": "Contains a list of roles in this project with links to full details.", - "isHidden": false + "name": "getTransitions", + "description": "Get Issue Transitions", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand in the response (e.g., 'transitions.fields').", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue for which transitions will be retrieved.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getRolesByIdOfProject", - "description": "Details on a given project role.", - "isHidden": false + "name": "getUserPermissions", + "description": "Get User Permissions", + "isHidden": false, + "parameters": [ + { + "name": "issueId", + "type": "stringOrExpression", + "required": false, + "description": "ID of the issue to filter permissions.", + "defaultValue": "" + }, + { + "name": "issueKey", + "type": "stringOrExpression", + "required": false, + "description": "Key of the issue to filter permissions.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectId", + "type": "stringOrExpression", + "required": false, + "description": "ID of the project to filter permissions.", + "defaultValue": "" + }, + { + "name": "projectKey", + "type": "stringOrExpression", + "required": false, + "description": "Key of the project to filter permissions.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "setActorsToRoleOfProject", - "description": "Set actors to a given project role.", - "isHidden": false + "name": "listGroupPicker", + "description": "List Groups with Picker", + "isHidden": false, + "parameters": [ + { + "name": "exclude", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of group names to exclude from results.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "integerOrExpression", + "required": false, + "description": "Maximum number of groups to return.", + "defaultValue": "50" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "query", + "type": "stringOrExpression", + "required": false, + "description": "Text to match against group names.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getUserAssignableProjects", - "description": "Returns a list of users that match the search string and can be assigned issues for all the given projects. This resource cannot be accessed anonymously.", - "isHidden": false + "name": "searchIssueViewableUsers", + "description": "Search Issue Viewable Users", + "isHidden": false, + "parameters": [ + { + "name": "issueKey", + "type": "stringOrExpression", + "required": false, + "description": "Issue key to search viewable users for a specific issue.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "numberOrExpression", + "required": false, + "description": "Maximum number of users to return. Default is 50, max is 1000.", + "defaultValue": "50" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectKey", + "type": "stringOrExpression", + "required": false, + "description": "Project key to scope the user search.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startAt", + "type": "numberOrExpression", + "required": false, + "description": "Index of the first user to return (0-based).", + "defaultValue": "0" + }, + { + "name": "usernameForSearch", + "type": "stringOrExpression", + "required": false, + "description": "Username filter to search for viewable users.", + "defaultValue": "" + } + ] }, { - "name": "searchJira", - "description": "Search jira using JQL", - "isHidden": false + "name": "listGroupUserPicker", + "description": "List Group User Picker", + "isHidden": false, + "parameters": [ + { + "name": "isShowAvatar", + "type": "booleanOrExpression", + "required": false, + "description": "Boolean value indicating whether to include avatar information in results.", + "defaultValue": "false" + }, + { + "name": "maxResults", + "type": "integerOrExpression", + "required": false, + "description": "Maximum number of users to return.", + "defaultValue": "50" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "query", + "type": "stringOrExpression", + "required": false, + "description": "String to search usernames, names, or email addresses.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getUser", - "description": "Get Jira user information", - "isHidden": false + "name": "getAvatarsForProject", + "description": "Get Avatars for Project", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID or key of the Jira project for which to fetch avatars.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getUserPermissions", - "description": "Get permissions granted for current user", - "isHidden": false + "name": "getIssuePriorityById", + "description": "Get Issue Priority by ID", + "isHidden": false, + "parameters": [ + { + "name": "issuePriorityId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Jira issue priority to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "searchAssignableUser", - "description": "Returns a list of assignable users that match the given issue.", - "isHidden": false + "name": "getProject", + "description": "Get Jira Project", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand (e.g., 'description,lead,url').", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "A string containing the unique ID or key for a Jira project.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "searchIssueViewableUsers", - "description": "Given an issue key this resource will provide a list of users that match the search string and have the browse issue permission for the issue provided.", - "isHidden": false + "name": "removeUserFromWatcherList", + "description": "Remove User from Watcher List", + "isHidden": false, + "parameters": [ + { + "name": "issueId", + "type": "stringOrExpression", + "required": true, + "description": "The Jira issue ID or key from which the user will be removed as a watcher.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "Username of the user to remove from the watcher list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "searchUser", - "description": "Get Jira user information", - "isHidden": false + "name": "getStatusesOfProject", + "description": "Get Project Statuses", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID or key of the Jira project to fetch statuses for.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getAttachmentById", - "description": "Returns the meta-data for an attachment, including the URI of the actual attached file.", - "isHidden": false + "name": "deleteComment", + "description": "Delete Comment", + "isHidden": false, + "parameters": [ + { + "name": "commentId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the comment to be deleted.", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue containing the comment.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getAttachmentContent", - "description": "Returns the content of an attachment.", - "isHidden": false + "name": "createFilter", + "description": "Create Filter", + "isHidden": false, + "parameters": [ + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "A description for the filter.", + "defaultValue": "" + }, + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of fields to expand in the response.", + "defaultValue": "" + }, + { + "name": "favourite", + "type": "booleanOrExpression", + "required": false, + "description": "Set to true to mark this filter as a favorite.", + "defaultValue": "false" + }, + { + "name": "filterName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the filter to be created.", + "defaultValue": "" + }, + { + "name": "jqlType", + "type": "stringOrExpression", + "required": true, + "description": "The issue type to be used in the JQL query. For example, 'Bug'.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createComponent", - "description": "Create a component.", - "isHidden": false + "name": "getCommentById", + "description": "Get Comment by ID", + "isHidden": false, + "parameters": [ + { + "name": "commentId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the comment to retrieve.", + "defaultValue": "" + }, + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Optional expansion flags (e.g., 'renderedBody' to get HTML-formatted content).", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue that the comment belongs to.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getComponent", - "description": "Returns a project component.", - "isHidden": false + "name": "getComments", + "description": "Get Comments", + "isHidden": false, + "parameters": [ + { + "name": "expand", + "type": "stringOrExpression", + "required": false, + "description": "Optional expansion flags (e.g., 'renderedBody') to include additional comment metadata.", + "defaultValue": "" + }, + { + "name": "issueIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID or key of the Jira issue from which to retrieve comments.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "updateComponent", - "description": "Modify a component .", - "isHidden": false + "name": "searchUser", + "description": "Search Users", + "isHidden": false, + "parameters": [ + { + "name": "includeActive", + "type": "booleanOrExpression", + "required": false, + "description": "If true, active users are included in the result.", + "defaultValue": "true" + }, + { + "name": "includeInactive", + "type": "booleanOrExpression", + "required": false, + "description": "If true, inactive users are included in the result.", + "defaultValue": "false" + }, + { + "name": "maxResults", + "type": "numberOrExpression", + "required": false, + "description": "Maximum number of users to return. Default is 50, maximum allowed is 1000.", + "defaultValue": "50" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startAt", + "type": "numberOrExpression", + "required": false, + "description": "The index of the first user to return (0-based).", + "defaultValue": "0" + }, + { + "name": "usernameForSearch", + "type": "stringOrExpression", + "required": true, + "description": "The username string used to search for users.", + "defaultValue": "" + } + ] }, { - "name": "countComponentRelatedIssues", - "description": "Returns counts of issues related to this component.", - "isHidden": false + "name": "getDashboards", + "description": "Get Dashboards", + "isHidden": false, + "parameters": [ + { + "name": "filter", + "type": "stringOrExpression", + "required": false, + "description": "Optional filter to apply to the list of dashboards.", + "defaultValue": "" + }, + { + "name": "maxResults", + "type": "integerOrExpression", + "required": false, + "description": "Maximum number of dashboard results to return.", + "defaultValue": "20" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startAt", + "type": "integerOrExpression", + "required": false, + "description": "Index of the first dashboard to return (pagination).", + "defaultValue": "0" + } + ] }, { - "name": "createIssueLink", - "description": "Creates an issue link between two issues.", - "isHidden": false + "name": "deleteAvatarForProject", + "description": "Delete Avatar for Project", + "isHidden": false, + "parameters": [ + { + "name": "avatarId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the avatar to delete.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projectIdOrKey", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID or key for the Jira project.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getIssueLinkById", - "description": "Returns an issue link with the specified id.", - "isHidden": false + "name": "updateComponent", + "description": "Update Component", + "isHidden": false, + "parameters": [ + { + "name": "assigneeType", + "type": "stringOrExpression", + "required": false, + "description": "The assignee type for the component (e.g., PROJECT_LEAD, COMPONENT_LEAD, UNASSIGNED).", + "defaultValue": "" + }, + { + "name": "componentId", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the component to be updated.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "Description of the component.", + "defaultValue": "" + }, + { + "name": "isAssigneeTypeValid", + "type": "booleanOrExpression", + "required": false, + "description": "Specify whether the provided assignee type is valid.", + "defaultValue": "true" + }, + { + "name": "leadUserName", + "type": "stringOrExpression", + "required": false, + "description": "Username of the component lead.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": false, + "description": "Name of the component.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] } ], - "connections": [] + "connections": [ + { + "name": "JIRA", + "description": "Jira Connection", + "iconUrl": "", + "parameters": [ + { + "name": "blocking", + "type": "boolean", + "required": true, + "description": "Indicates whether the connector should perform blocking invocations to Jira.", + "defaultValue": "true" + }, + { + "name": "connectionName", + "type": "string", + "required": false, + "description": "The unique name of the connection to Jira.", + "defaultValue": "JIRA_CONNECTION_1" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "Password used to log in to Jira.", + "defaultValue": "" + }, + { + "name": "uri", + "type": "stringOrExpression", + "required": true, + "description": "URI of the Jira instance, e.g., https:///", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "Username used to log in to Jira.", + "defaultValue": "" + } + ] + } + ] }, "otherVersions": {}, "connectorRank": 113, @@ -3516,39 +22771,1005 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-kafka", + "id": "", "version": { - "tagName": "3.3.9", - "releaseId": "225638857", + "tagName": "3.3.11", + "releaseId": "286700737", "isLatest": true, "isDeprecated": false, "operations": [ - { - "name": "init", - "description": "Configure the Kafka producer", - "isHidden": true - }, { "name": "publishMessages", - "description": "Send the messages to the Kafka brokers", - "isHidden": false + "description": "Publish Messages", + "isHidden": false, + "parameters": [ + { + "name": "customHeaderExpression", + "type": "stringOrExpression", + "required": false, + "description": "Inject a list of headers via an expression that is evaluated at runtime. E.g., `json-eval($.headers)`.", + "defaultValue": "" + }, + { + "name": "dlqTopic", + "type": "stringOrExpression", + "required": false, + "description": "The topic name of the Dead Letter Queue to which the failed messages should be redirected. This is applicable only when the sendCallbackHandler class has support for Dead Letter Queue (DLQ) handling.", + "defaultValue": "" + }, + { + "name": "forwardExistingHeaders", + "type": "combo", + "required": false, + "description": "Specifies whether to include existing transport headers in the Kafka message; can be none, all, or filtered Supported values: None, All, Filtered", + "defaultValue": "None" + }, + { + "name": "kafkaHeaderPrefix", + "type": "stringOrExpression", + "required": false, + "description": "Specifies a prefix to filter out the Kafka related headers from the transport headers that start when forwardExistingHeaders is set to filtered", + "defaultValue": "" + }, + { + "name": "key", + "type": "stringOrExpression", + "required": false, + "description": "The key of the message.", + "defaultValue": "" + }, + { + "name": "keySchema", + "type": "stringOrExpression", + "required": false, + "description": "The Schema of the configured key.", + "defaultValue": "" + }, + { + "name": "keySchemaId", + "type": "stringOrExpression", + "required": false, + "description": "The Schema id of the key schema that is stored in the confluent schema registry.", + "defaultValue": "" + }, + { + "name": "keySchemaMetadata", + "type": "stringOrExpression", + "required": false, + "description": "The Schema metadata of the key schema that is stored in the confluent schema registry.", + "defaultValue": "" + }, + { + "name": "keySchemaSoftDeleted", + "type": "stringOrExpression", + "required": false, + "description": "Whether soft deleted key schemas also need to be considered.", + "defaultValue": "false" + }, + { + "name": "keySchemaSubject", + "type": "stringOrExpression", + "required": false, + "description": "The Subject of the key schema that is stored in the confluent schema registry.", + "defaultValue": "" + }, + { + "name": "keySchemaVersion", + "type": "stringOrExpression", + "required": false, + "description": "The Version of the key schema that is stored in the confluent schema registry.", + "defaultValue": "" + }, + { + "name": "partitionNo", + "type": "stringOrExpression", + "required": true, + "description": "The partition number of the topic.", + "defaultValue": "" + }, + { + "name": "removeFilteredAfterSend", + "type": "boolean", + "required": false, + "description": "Determines whether the filtered transport headers should be removed from the transport headers after being forwarded to Kafka.", + "defaultValue": "" + }, + { + "name": "removeHeaderPrefix", + "type": "boolean", + "required": false, + "description": "Indicates whether the configured prefix should be removed from header names before sending them to Kafka (applies when filtering).", + "defaultValue": "" + }, + { + "name": "topic", + "type": "stringOrExpression", + "required": true, + "description": "The name of the topic.", + "defaultValue": "" + }, + { + "name": "value", + "type": "stringOrExpression", + "required": false, + "description": "The value of the kafka message.", + "defaultValue": "" + }, + { + "name": "valueSchema", + "type": "stringOrExpression", + "required": false, + "description": "The Schema of the configured value.", + "defaultValue": "" + }, + { + "name": "valueSchemaId", + "type": "stringOrExpression", + "required": false, + "description": "The Schema id of the value schema that is stored in the confluent schema registry.", + "defaultValue": "" + }, + { + "name": "valueSchemaMetadata", + "type": "stringOrExpression", + "required": false, + "description": "The Schema metadata of the value schema that is stored in the confluent schema registry.", + "defaultValue": "" + }, + { + "name": "valueSchemaSoftDeleted", + "type": "stringOrExpression", + "required": false, + "description": "Whether soft deleted value schemas also need to be considered.", + "defaultValue": "false" + }, + { + "name": "valueSchemaSubject", + "type": "stringOrExpression", + "required": false, + "description": "The Subject of the value schema that is stored in the confluent schema registry.", + "defaultValue": "" + }, + { + "name": "valueSchemaVersion", + "type": "stringOrExpression", + "required": false, + "description": "The Version of the value schema that is stored in the confluent schema registry.", + "defaultValue": "" + } + ] } ], "connections": [ { - "name": "kafka", - "description": "Connection for a Kafka cluster.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-kafka_kafka.svg" + "name": "kafkaSecure", + "description": "Kafka Secured Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-kafka_kafkaSecure.svg", + "parameters": [ + { + "name": "acks", + "type": "combo", + "required": false, + "description": "The number of acknowledgments that the producer requires for the leader to receive before considering a request to be complete. Supported values: all, -1, 0, 1", + "defaultValue": "" + }, + { + "name": "autoRegisterSchemas", + "type": "boolean", + "required": false, + "description": "Serializer will/will not attempt to register new schemas.", + "defaultValue": "" + }, + { + "name": "basicAuthCredentialsSource", + "type": "stringOrExpression", + "required": false, + "description": "The credentials source, if the confluent Schema Registry is secured with basic authorization. ", + "defaultValue": "" + }, + { + "name": "basicAuthUserInfo", + "type": "stringOrExpression", + "required": false, + "description": "The credentials for Confluent Schema Registry URL, if basicAuthCredentialsSource is set to USER_INFO. ", + "defaultValue": "" + }, + { + "name": "batchSize", + "type": "stringOrExpression", + "required": false, + "description": "Specify how many records the producer should batch together when multiple records are sent to the same partition.", + "defaultValue": "" + }, + { + "name": "bootstrapServers", + "type": "stringOrExpression", + "required": true, + "description": "The Kafka brokers listed in the form host1:port1,host2:port2,...", + "defaultValue": "localhost:9092" + }, + { + "name": "bufferMemory", + "type": "stringOrExpression", + "required": false, + "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", + "defaultValue": "" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": false, + "description": "The client identifier that you pass to the server when making requests.", + "defaultValue": "" + }, + { + "name": "compressionType", + "type": "combo", + "required": false, + "description": "The compression type for the data generated by the producer. Supported values: none, gzip, snappy, lz4, zstd", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the kafka connection", + "defaultValue": "KAFKA_CONNECTION_1" + }, + { + "name": "connectionsMaxIdleTime", + "type": "stringOrExpression", + "required": false, + "description": "The duration in milliseconds after which idle connections should be closed.", + "defaultValue": "" + }, + { + "name": "enableIdempotence", + "type": "boolean", + "required": false, + "description": "When set to ‘true’, the producer will ensure that exactly one copy of each message is written in the stream. If ‘false’, producer retries due to broker failures, etc., may write duplicates of the retried message in the stream.", + "defaultValue": "true" + }, + { + "name": "evictionCheckInterval", + "type": "stringOrExpression", + "required": false, + "description": "The number of milliseconds between runs of the object evictor.", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "combo", + "required": false, + "description": "The behavior of the pool when the pool is exhausted. Supported values: 0, 1, 2", + "defaultValue": "" + }, + { + "name": "keySerializerClass", + "type": "stringOrExpression", + "required": true, + "description": "The serializer class for the key that implements the serializer interface.", + "defaultValue": "org.apache.kafka.common.serialization.StringSerializer" + }, + { + "name": "keySubjectNameStrategy", + "type": "stringOrExpression", + "required": false, + "description": "The strategy for determining the subject name under which the key schema is registered.", + "defaultValue": "" + }, + { + "name": "lingerTime", + "type": "stringOrExpression", + "required": false, + "description": "The time, in milliseconds, to wait before sending a record. Set this property when you want the client to reduce the number of requests sent when the load is moderate. This adds a small delay rather than immediately sending out a record. Therefore, the producer waits up to allow other records to be sent so that the requests can be batched together.", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of active connections.", + "defaultValue": "" + }, + { + "name": "maxBlockTime", + "type": "stringOrExpression", + "required": false, + "description": "The maximum time in milliseconds that the KafkaProducer.send() and the KafkaProducer.partitionsFor() methods can be blocked.", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of idle connections.", + "defaultValue": "" + }, + { + "name": "maxInFlightRequestsPerConnection", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of unacknowledged requests that the client can send via a single connection before blocking.", + "defaultValue": "" + }, + { + "name": "maxRequestSize", + "type": "stringOrExpression", + "required": false, + "description": "The maximum size of a request in bytes.", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time to wait for a pooled component to become available.", + "defaultValue": "" + }, + { + "name": "metadataFetchTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The maximum amount of time, in milliseconds, to block and wait for the metadata fetch to succeed before throwing an exception to the client.", + "defaultValue": "" + }, + { + "name": "metadataMaxAge", + "type": "stringOrExpression", + "required": false, + "description": "The period of time, in milliseconds, after which you should refresh metadata even if there was no partition leadership changes to proactively discover any new brokers or partitions.", + "defaultValue": "" + }, + { + "name": "metricReporters", + "type": "stringOrExpression", + "required": false, + "description": "A list of classes to use as metrics reporters.", + "defaultValue": "" + }, + { + "name": "metricsNumSamples", + "type": "stringOrExpression", + "required": false, + "description": "The number of samples maintained to compute metrics.", + "defaultValue": "" + }, + { + "name": "metricsSampleWindow", + "type": "stringOrExpression", + "required": false, + "description": "The window of time, in milliseconds, that a metrics sample is computed over.", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "stringOrExpression", + "required": false, + "description": "The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.", + "defaultValue": "" + }, + { + "name": "partitionerClass", + "type": "stringOrExpression", + "required": false, + "description": "The partitioner class that implements the partitioner interface.", + "defaultValue": "" + }, + { + "name": "poolingEnabled", + "type": "boolean", + "required": false, + "description": "Whether connection pooling is enabled or not.", + "defaultValue": "false" + }, + { + "name": "receiveBufferBytes", + "type": "stringOrExpression", + "required": false, + "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data.", + "defaultValue": "" + }, + { + "name": "reconnectBackoff", + "type": "stringOrExpression", + "required": false, + "description": "The amount of time to wait before attempting to reconnect to a given host.", + "defaultValue": "" + }, + { + "name": "reconnectBackoffMax", + "type": "stringOrExpression", + "required": false, + "description": "The maximum amount of time in milliseconds to wait when reconnecting to a broker that has repeatedly failed to connect.", + "defaultValue": "" + }, + { + "name": "requestTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The maximum amount of time, in milliseconds, that a client waits for the server to respond.", + "defaultValue": "" + }, + { + "name": "retries", + "type": "stringOrExpression", + "required": false, + "description": "Set a value greater than zero if you want the client to resent any records automatically when a request fails.", + "defaultValue": "" + }, + { + "name": "retryBackoff", + "type": "stringOrExpression", + "required": false, + "description": "The amount of time, in milliseconds, to wait before attempting to retry a failed request to a given topic partition.", + "defaultValue": "" + }, + { + "name": "saslJaasConfig", + "type": "stringOrExpression", + "required": false, + "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "defaultValue": "" + }, + { + "name": "saslKerberosKinitCmd", + "type": "stringOrExpression", + "required": false, + "description": "The kerberos kinit command path.", + "defaultValue": "" + }, + { + "name": "saslKerberosMinTimeBeforeRelogin", + "type": "stringOrExpression", + "required": false, + "description": "Login thread's sleep time, in milliseconds, between refresh attempts.", + "defaultValue": "" + }, + { + "name": "saslKerberosServiceName", + "type": "stringOrExpression", + "required": false, + "description": "The Kerberos principal name that Kafka runs as.", + "defaultValue": "" + }, + { + "name": "saslKerberosTicketRenewJitter", + "type": "stringOrExpression", + "required": false, + "description": "Percentage of random jitter added to the renewal time.", + "defaultValue": "" + }, + { + "name": "saslKerberosTicketRenewWindowFactor", + "type": "stringOrExpression", + "required": false, + "description": "The login thread sleeps until the specified window factor of time from the last refresh to the ticket's expiry is reached, after which it will try to renew the ticket.", + "defaultValue": "" + }, + { + "name": "saslLoginCallbackHandlerClass", + "type": "stringOrExpression", + "required": false, + "description": "The fully qualified name of a SASL login callback handler class that implements the AuthenticateCallbackHandler interface.", + "defaultValue": "" + }, + { + "name": "saslLoginConnectTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The duration, in milliseconds, for HTTPS connect timeout.", + "defaultValue": "" + }, + { + "name": "saslLoginReadTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The duration, in milliseconds, for HTTPS read timeout.", + "defaultValue": "" + }, + { + "name": "saslLoginRetryBackoff", + "type": "stringOrExpression", + "required": false, + "description": "The duration, in milliseconds, to wait between HTTPS call attempts.", + "defaultValue": "" + }, + { + "name": "saslLoginRetryBackoffMax", + "type": "stringOrExpression", + "required": false, + "description": "The maximum duration, in milliseconds, for HTTPS call attempts.", + "defaultValue": "" + }, + { + "name": "saslMechanism", + "type": "combo", + "required": false, + "description": "The SASL mechanism to use for authentication. Supported values: PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, GSSAPI, OAUTHBEARER", + "defaultValue": "" + }, + { + "name": "saslOauthbearerScopeClaimName", + "type": "stringOrExpression", + "required": false, + "description": "The override name of the scope claim.", + "defaultValue": "" + }, + { + "name": "saslOauthbearerTokenEndpointUrl", + "type": "stringOrExpression", + "required": false, + "description": "The URL for the OAuth/OIDC identity provider.", + "defaultValue": "" + }, + { + "name": "schemaRegistryUrl", + "type": "stringOrExpression", + "required": false, + "description": "The URL of the Confluent Schema Registry.", + "defaultValue": "http://localhost:8081" + }, + { + "name": "securityProtocol", + "type": "combo", + "required": false, + "description": "The protocol used to communicate with brokers. Supported values: PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL", + "defaultValue": "PLAINTEXT" + }, + { + "name": "sendBufferBytes", + "type": "stringOrExpression", + "required": false, + "description": "The size of the TCP send buffer (SO_SNDBUF) to use when sending data.", + "defaultValue": "" + }, + { + "name": "sendCallbackHandlerClass", + "type": "stringOrExpression", + "required": false, + "description": "The class name of the producer(send) callback handler implementation.", + "defaultValue": "" + }, + { + "name": "sslCipherSuites", + "type": "stringOrExpression", + "required": false, + "description": "A list of cipher suites.", + "defaultValue": "" + }, + { + "name": "sslEnabledProtocols", + "type": "stringOrExpression", + "required": false, + "description": "The list of protocols enabled for SSL connections.", + "defaultValue": "" + }, + { + "name": "sslEndpointIdentificationAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The endpoint identification algorithm to validate the server hostname using a server certificate.", + "defaultValue": "" + }, + { + "name": "sslKeymanagerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm used by the key manager factory for SSL connections. The default value is the key manager factory algorithm configured for the Java Virtual Machine.", + "defaultValue": "" + }, + { + "name": "sslKeyPassword", + "type": "stringOrExpression", + "required": false, + "description": "The password of the private key in the keystore file. Setting this for the client is optional.", + "defaultValue": "" + }, + { + "name": "sslKeystoreLocation", + "type": "stringOrExpression", + "required": false, + "description": "The location of the key store file. Setting this for the client is optional. Set this when you want to have two-way authentication for the client.", + "defaultValue": "" + }, + { + "name": "sslKeystorePassword", + "type": "stringOrExpression", + "required": false, + "description": "The store password for the keystore file. Setting this for the client is optional. Set it only if ssl.keystore.location is configured.", + "defaultValue": "" + }, + { + "name": "sslKeystoreType", + "type": "stringOrExpression", + "required": false, + "description": "The format of the keystore file. Setting this for the client is optional.", + "defaultValue": "" + }, + { + "name": "sslProtocol", + "type": "stringOrExpression", + "required": false, + "description": "The SSL protocol used to generate the SSLContext.", + "defaultValue": "" + }, + { + "name": "sslProvider", + "type": "stringOrExpression", + "required": false, + "description": "The name of the security provider used for SSL connections. The default value is the default security provider of the JVM.", + "defaultValue": "" + }, + { + "name": "sslSecureRandomImplementation", + "type": "stringOrExpression", + "required": false, + "description": "The SecureRandom PRNG implementation to use for SSL cryptography operations.", + "defaultValue": "" + }, + { + "name": "sslTrustmanagerAlgorithm", + "type": "stringOrExpression", + "required": false, + "description": "The algorithm used by the trust manager factory for SSL connections. The default value is the trust manager factory algorithm configured for the Java Virtual Machine.", + "defaultValue": "" + }, + { + "name": "sslTruststoreLocation", + "type": "stringOrExpression", + "required": false, + "description": "The location of the trust store file.", + "defaultValue": "" + }, + { + "name": "sslTruststorePassword", + "type": "stringOrExpression", + "required": false, + "description": "The password for the trust store file.", + "defaultValue": "" + }, + { + "name": "sslTruststoreType", + "type": "stringOrExpression", + "required": false, + "description": "The format of the trust store file.", + "defaultValue": "" + }, + { + "name": "subjectNameStrategy", + "type": "stringOrExpression", + "required": false, + "description": "The strategy for determining the subject name under which the value schema is registered.", + "defaultValue": "" + }, + { + "name": "useLatestVersion", + "type": "boolean", + "required": false, + "description": "Serializer retrieve the latest schema version for the subject.", + "defaultValue": "" + }, + { + "name": "valueSerializerClass", + "type": "stringOrExpression", + "required": true, + "description": "The serializer class for the value that implements the serializer interface.", + "defaultValue": "org.apache.kafka.common.serialization.StringSerializer" + } + ] }, { - "name": "kafkaSecure", - "description": "Secure connection for a Kafka cluster.", - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-kafka_kafkaSecure.svg" + "name": "kafka", + "description": "Kafka Connection", + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-connection-logos/esb-connector-kafka_kafka.svg", + "parameters": [ + { + "name": "acks", + "type": "combo", + "required": false, + "description": "The number of acknowledgments that the producer requires for the leader to receive before considering a request to be complete. Supported values: all, -1, 0, 1", + "defaultValue": "" + }, + { + "name": "autoRegisterSchemas", + "type": "boolean", + "required": false, + "description": "Serializer will/will not attempt to register new schemas.", + "defaultValue": "" + }, + { + "name": "basicAuthCredentialsSource", + "type": "stringOrExpression", + "required": false, + "description": "The credentials source, if the confluent Schema Registry is secured with basic authorization. ", + "defaultValue": "" + }, + { + "name": "basicAuthUserInfo", + "type": "stringOrExpression", + "required": false, + "description": "The credentials for Confluent Schema Registry URL, if basicAuthCredentialsSource is set to USER_INFO. ", + "defaultValue": "" + }, + { + "name": "batchSize", + "type": "stringOrExpression", + "required": false, + "description": "Specify how many records the producer should batch together when multiple records are sent to the same partition.", + "defaultValue": "" + }, + { + "name": "bootstrapServers", + "type": "stringOrExpression", + "required": true, + "description": "The Kafka brokers listed in the form host1:port1,host2:port2,...", + "defaultValue": "localhost:9092" + }, + { + "name": "bufferMemory", + "type": "stringOrExpression", + "required": false, + "description": "The total bytes of memory the producer can use to buffer records waiting to be sent to the server.", + "defaultValue": "" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": false, + "description": "The client identifier that you pass to the server when making requests.", + "defaultValue": "" + }, + { + "name": "compressionType", + "type": "combo", + "required": false, + "description": "The compression type for the data generated by the producer. Supported values: none, gzip, snappy, lz4, zstd", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the kafka connection", + "defaultValue": "KAFKA_CONNECTION_1" + }, + { + "name": "connectionsMaxIdleTime", + "type": "stringOrExpression", + "required": false, + "description": "The duration in milliseconds after which idle connections should be closed.", + "defaultValue": "" + }, + { + "name": "enableIdempotence", + "type": "boolean", + "required": false, + "description": "When set to ‘true’, the producer will ensure that exactly one copy of each message is written in the stream. If ‘false’, producer retries due to broker failures, etc., may write duplicates of the retried message in the stream.", + "defaultValue": "" + }, + { + "name": "evictionCheckInterval", + "type": "stringOrExpression", + "required": false, + "description": "The number of milliseconds between runs of the object evictor.", + "defaultValue": "" + }, + { + "name": "exhaustedAction", + "type": "combo", + "required": false, + "description": "The behavior of the pool when the pool is exhausted. Supported values: 0, 1, 2", + "defaultValue": "" + }, + { + "name": "keySerializerClass", + "type": "stringOrExpression", + "required": true, + "description": "The serializer class for the key that implements the serializer interface.", + "defaultValue": "org.apache.kafka.common.serialization.StringSerializer" + }, + { + "name": "keySubjectNameStrategy", + "type": "stringOrExpression", + "required": false, + "description": "The strategy for determining the subject name under which the key schema is registered.", + "defaultValue": "" + }, + { + "name": "lingerTime", + "type": "stringOrExpression", + "required": false, + "description": "The time, in milliseconds, to wait before sending a record. Set this property when you want the client to reduce the number of requests sent when the load is moderate. This adds a small delay rather than immediately sending out a record. Therefore, the producer waits up to allow other records to be sent so that the requests can be batched together.", + "defaultValue": "" + }, + { + "name": "maxActiveConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of active connections.", + "defaultValue": "" + }, + { + "name": "maxBlockTime", + "type": "stringOrExpression", + "required": false, + "description": "The maximum time in milliseconds that the KafkaProducer.send() and the KafkaProducer.partitionsFor() methods can be blocked.", + "defaultValue": "" + }, + { + "name": "maxIdleConnections", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of idle connections.", + "defaultValue": "" + }, + { + "name": "maxInFlightRequestsPerConnection", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of unacknowledged requests that the client can send via a single connection before blocking.", + "defaultValue": "" + }, + { + "name": "maxRequestSize", + "type": "stringOrExpression", + "required": false, + "description": "The maximum size of a request in bytes.", + "defaultValue": "" + }, + { + "name": "maxWaitTime", + "type": "stringOrExpression", + "required": false, + "description": "Maximum time to wait for a pooled component to become available.", + "defaultValue": "" + }, + { + "name": "metadataFetchTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The maximum amount of time, in milliseconds, to block and wait for the metadata fetch to succeed before throwing an exception to the client.", + "defaultValue": "" + }, + { + "name": "metadataMaxAge", + "type": "stringOrExpression", + "required": false, + "description": "The period of time, in milliseconds, after which you should refresh metadata even if there was no partition leadership changes to proactively discover any new brokers or partitions.", + "defaultValue": "" + }, + { + "name": "metricReporters", + "type": "stringOrExpression", + "required": false, + "description": "A list of classes to use as metrics reporters.", + "defaultValue": "" + }, + { + "name": "metricsNumSamples", + "type": "stringOrExpression", + "required": false, + "description": "The number of samples maintained to compute metrics.", + "defaultValue": "" + }, + { + "name": "metricsSampleWindow", + "type": "stringOrExpression", + "required": false, + "description": "The window of time, in milliseconds, that a metrics sample is computed over.", + "defaultValue": "" + }, + { + "name": "minEvictionTime", + "type": "stringOrExpression", + "required": false, + "description": "The minimum amount of time an object may sit idle in the pool before it is eligible for eviction.", + "defaultValue": "" + }, + { + "name": "partitionerClass", + "type": "stringOrExpression", + "required": false, + "description": "The partitioner class that implements the partitioner interface.", + "defaultValue": "" + }, + { + "name": "poolingEnabled", + "type": "boolean", + "required": false, + "description": "Whether connection pooling is enabled or not.", + "defaultValue": "false" + }, + { + "name": "receiveBufferBytes", + "type": "stringOrExpression", + "required": false, + "description": "The size of the TCP receive buffer (SO_RCVBUF) to use when reading data.", + "defaultValue": "" + }, + { + "name": "reconnectBackoff", + "type": "stringOrExpression", + "required": false, + "description": "The amount of time to wait before attempting to reconnect to a given host.", + "defaultValue": "" + }, + { + "name": "reconnectBackoffMax", + "type": "stringOrExpression", + "required": false, + "description": "The maximum amount of time in milliseconds to wait when reconnecting to a broker that has repeatedly failed to connect.", + "defaultValue": "" + }, + { + "name": "requestTimeout", + "type": "stringOrExpression", + "required": false, + "description": "The maximum amount of time, in milliseconds, that a client waits for the server to respond.", + "defaultValue": "" + }, + { + "name": "retries", + "type": "stringOrExpression", + "required": false, + "description": "Set a value greater than zero if you want the client to resent any records automatically when a request fails.", + "defaultValue": "" + }, + { + "name": "retryBackoff", + "type": "stringOrExpression", + "required": false, + "description": "The amount of time, in milliseconds, to wait before attempting to retry a failed request to a given topic partition.", + "defaultValue": "" + }, + { + "name": "schemaRegistryUrl", + "type": "stringOrExpression", + "required": false, + "description": "The URL of the Confluent Schema Registry.", + "defaultValue": "" + }, + { + "name": "sendBufferBytes", + "type": "stringOrExpression", + "required": false, + "description": "The size of the TCP send buffer (SO_SNDBUF) to use when sending data.", + "defaultValue": "" + }, + { + "name": "sendCallbackHandlerClass", + "type": "stringOrExpression", + "required": false, + "description": "The class name of the producer(send) callback handler implementation.", + "defaultValue": "" + }, + { + "name": "subjectNameStrategy", + "type": "stringOrExpression", + "required": false, + "description": "The strategy for determining the subject name under which the value schema is registered.", + "defaultValue": "" + }, + { + "name": "useLatestVersion", + "type": "boolean", + "required": false, + "description": "Serializer retrieve the latest schema version for the subject.", + "defaultValue": "" + }, + { + "name": "valueSerializerClass", + "type": "stringOrExpression", + "required": true, + "description": "The serializer class for the value that implements the serializer interface.", + "defaultValue": "org.apache.kafka.common.serialization.StringSerializer" + } + ] } ] }, - "otherVersions": { - "3.3.6": "211074981" - }, + "otherVersions": {}, "connectorRank": 2, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-kafka.png" }, @@ -3559,49 +23780,359 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-ldap", + "id": "", "version": { - "tagName": "1.0.14", - "releaseId": "191594149", + "tagName": "2.0.1", + "releaseId": "276636710", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "addEntry", - "description": "This adds new entries to ldap directory", - "isHidden": false + "name": "updateEntry", + "description": "Update LDAP Entry", + "isHidden": false, + "parameters": [ + { + "name": "attributes", + "type": "stringOrExpression", + "required": true, + "description": "The attributes to update for the LDAP entry, provided as key-value pairs. Example: {\"mail\":\"john.doe@example.com\",\"telephoneNumber\"=\"123456789\"}", + "defaultValue": "" + }, + { + "name": "dn", + "type": "stringOrExpression", + "required": true, + "description": "The distinguished name (DN) of the LDAP entry to update. Example: cn=John Doe,ou=Users,dc=example,dc=com", + "defaultValue": "" + }, + { + "name": "mode", + "type": "stringOrExpression", + "required": true, + "description": "The update mode: ADD to add new attributes, REPLACE to overwrite existing values, or REMOVE to delete attributes.", + "defaultValue": "REPLACE" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned.", + "defaultValue": "" + } + ] }, { "name": "searchEntry", - "description": "This searches entries in ldap directory", - "isHidden": false - }, - { - "name": "updateEntry", - "description": "This updates entries in ldap directory", - "isHidden": false + "description": "Search LDAP Entry", + "isHidden": false, + "parameters": [ + { + "name": "allowEmptySearchResult", + "type": "checkbox", + "required": false, + "description": "If true, no exception will be thrown when the search returns no result.", + "defaultValue": "true" + }, + { + "name": "attributes", + "type": "stringOrExpression", + "required": false, + "description": "Attributes to include in the search result. Example: cn,sn,mail", + "defaultValue": "" + }, + { + "name": "dn", + "type": "stringOrExpression", + "required": true, + "description": "The distinguished name (base DN) from where the search should begin. Example: ou=Users,dc=example,dc=com", + "defaultValue": "" + }, + { + "name": "filters", + "type": "stringOrExpression", + "required": true, + "description": "Search filters in comma-separated key-value format. Example: cn=John,mail=john.doe@example.com", + "defaultValue": "" + }, + { + "name": "limit", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of search results to return. Use 0 for unlimited.", + "defaultValue": "10" + }, + { + "name": "objectClass", + "type": "stringOrExpression", + "required": false, + "description": "The object class of the LDAP entry to search for. Example: inetOrgPerson", + "defaultValue": "" + }, + { + "name": "onlyOneReference", + "type": "checkbox", + "required": false, + "description": "If true, ensures only one reference is returned.", + "defaultValue": "false" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned.", + "defaultValue": "" + }, + { + "name": "scope", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the search depth: `base` searches only the specified entry, `one` searches its immediate children, and `sub` searches the entire subtree rooted at baseDN.", + "defaultValue": "" + } + ] }, { - "name": "updateName", - "description": "This updates names in ldap directory", - "isHidden": false + "name": "deleteEntry", + "description": "Delete LDAP Entry", + "isHidden": false, + "parameters": [ + { + "name": "dn", + "type": "stringOrExpression", + "required": true, + "description": "The distinguished name (DN) of the LDAP entry to be deleted. Example: cn=John Doe,ou=Users,dc=example,dc=com", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned.", + "defaultValue": "" + } + ] }, { - "name": "deleteEntry", - "description": "This deletes entries in ldap directory", - "isHidden": false + "name": "addEntry", + "description": "Add LDAP Entry", + "isHidden": false, + "parameters": [ + { + "name": "attributes", + "type": "stringOrExpression", + "required": true, + "description": "A set of attributes for the new LDAP entry in JSON format. Example: {\"sn\":\"Doe\", \"givenName\":\"John\", \"mail\":\"john.doe@example.com\"}", + "defaultValue": "" + }, + { + "name": "dn", + "type": "stringOrExpression", + "required": true, + "description": "The distinguished name of the LDAP entry to be added. Example: cn=John Doe,ou=Users,dc=example,dc=com", + "defaultValue": "" + }, + { + "name": "objectClass", + "type": "stringOrExpression", + "required": true, + "description": "The object class of the LDAP entry. Example: inetOrgPerson, organizationalUnit", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned.", + "defaultValue": "" + } + ] }, { - "name": "init", - "description": "This does initialization part", - "isHidden": false + "name": "updateName", + "description": "Rename LDAP Entry", + "isHidden": false, + "parameters": [ + { + "name": "newName", + "type": "stringOrExpression", + "required": true, + "description": "The new fully qualified distinguished name (DN) for the LDAP entry. Example: cn=John Smith,ou=Users,dc=example,dc=com", + "defaultValue": "" + }, + { + "name": "oldName", + "type": "stringOrExpression", + "required": true, + "description": "The current fully qualified distinguished name (DN) of the LDAP entry. Example: cn=John Doe,ou=Users,dc=example,dc=com", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned.", + "defaultValue": "" + } + ] }, { "name": "authenticate", - "description": "This does authentication of a given user", - "isHidden": false + "description": "Authenticate LDAP User", + "isHidden": false, + "parameters": [ + { + "name": "dn", + "type": "stringOrExpression", + "required": true, + "description": "The distinguished name (DN) of the LDAP entry to authenticate. Example: cn=John Doe,ou=Users,dc=example,dc=com", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "Password of the LDAP user for authentication.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned.", + "defaultValue": "" + } + ] } ], - "connections": [] + "connections": [ + { + "name": "LDAP", + "description": "LDAP Connection", + "iconUrl": "", + "parameters": [ + { + "name": "connectionName", + "type": "string", + "required": false, + "description": "The unique name of the connection to LDAP.", + "defaultValue": "LDAP_CONNECTION_1" + }, + { + "name": "connectionPoolingEnabled", + "type": "boolean", + "required": false, + "description": "Enable or disable connection pooling for LDAP.", + "defaultValue": "false" + }, + { + "name": "connectionPoolingInitSize", + "type": "string", + "required": false, + "description": "Number of connections per connection identity to create initially.", + "defaultValue": "5" + }, + { + "name": "connectionPoolingMaxSize", + "type": "string", + "required": false, + "description": "Maximum number of connections per connection identity that can be maintained concurrently.", + "defaultValue": "20" + }, + { + "name": "connectionPoolingProtocol", + "type": "string", + "required": false, + "description": "Space-separated protocol types for connection pooling. Valid values: 'plain', 'ssl'.", + "defaultValue": "plain" + }, + { + "name": "disableSSLCertificateChecking", + "type": "boolean", + "required": true, + "description": "Boolean value to disable or enable SSL certificate checking for LDAP.", + "defaultValue": "false" + }, + { + "name": "providerUrl", + "type": "stringOrExpression", + "required": true, + "description": "URI of the LDAP directory, e.g., ldap://:/", + "defaultValue": "" + }, + { + "name": "secureConnection", + "type": "boolean", + "required": true, + "description": "Boolean value to enable or disable secure connection to LDAP.", + "defaultValue": "false" + }, + { + "name": "securityCredentials", + "type": "stringOrExpression", + "required": true, + "description": "Password used to log in to LDAP.", + "defaultValue": "" + }, + { + "name": "securityPrincipal", + "type": "stringOrExpression", + "required": true, + "description": "Username used to log in to LDAP.", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Timeout duration of the LDAP request in milliseconds.", + "defaultValue": "30000" + } + ] + } + ] }, "otherVersions": {}, "connectorRank": 18, @@ -3614,6 +24145,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-msazurestorage", + "id": "", "version": { "tagName": "2.0.1", "releaseId": "191462545", @@ -3623,59 +24155,70 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "Init operation for ms azure storage connector.", - "isHidden": true + "isHidden": true, + "parameters": [] }, { "name": "listBlobs", "description": "Gets the list of all blobs.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "uploadBlob", "description": "Uploads the blob into the Azure storage.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "deleteBlob", "description": "Deletes the blob from the Azure storage.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "downloadBlob", "description": "Downloads the blob from the Azure storage.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "listContainers", "description": "Gets the list of all containers.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createContainer", "description": "Creates a container into the Azure storage.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "deleteContainer", "description": "Deletes the container from the Azure storage.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "listMetadata", "description": "Downloads the metadata from the blob from Azure storage.", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "uploadMetadata", "description": "Uploads metadata to a blob in Azure storage.", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [ { "name": "msazurestorage", "description": "Connection for accessing Microsoft Azure Storage.", - "iconUrl": "" + "iconUrl": "", + "parameters": [] } ] }, @@ -3690,75 +24233,746 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-mongodb", + "id": "", "version": { - "tagName": "3.0.1", - "releaseId": "224033950", + "tagName": "3.0.3", + "releaseId": "285938795", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "MongoDB connection configuration.", - "isHidden": true - }, - { - "name": "deleteOne", - "description": "Removes a single document from a collection.", - "isHidden": false + "name": "find", + "description": "FindDocuments", + "isHidden": false, + "parameters": [ + { + "name": "collation", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the collation to use for the operation.", + "defaultValue": "" + }, + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "limit", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the maximum number of returned documents.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projection", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the fields to return in the documents that match the query filter.", + "defaultValue": "" + }, + { + "name": "query", + "type": "textAreaOrExpression", + "required": true, + "description": "Specifies selection filter using query operators.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sort", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the order in which the query returns matching documents.", + "defaultValue": "" + } + ] }, { - "name": "deleteMany", - "description": "Removes all documents that match the filter from a collection.", - "isHidden": false + "name": "findOne", + "description": "DeleteManyDocuments", + "isHidden": false, + "parameters": [ + { + "name": "collation", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the collation to use for the operation.", + "defaultValue": "" + }, + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "projection", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the fields to return in the documents that match the query filter.", + "defaultValue": "" + }, + { + "name": "query", + "type": "textAreaOrExpression", + "required": true, + "description": "Specifies selection filter using query operators.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "findOne", - "description": "Finds a single document in a collection.", - "isHidden": false + "name": "updateOne", + "description": "UpdateOneDocument", + "isHidden": false, + "parameters": [ + { + "name": "arrayFilters", + "type": "textAreaOrExpression", + "required": false, + "description": "Determines which array elements to modify.", + "defaultValue": "" + }, + { + "name": "collation", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the collation to use for the operation.", + "defaultValue": "" + }, + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "query", + "type": "textAreaOrExpression", + "required": true, + "description": "The selection criteria for the update.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "update", + "type": "textAreaOrExpression", + "required": true, + "description": "The modifications to apply.", + "defaultValue": "" + }, + { + "name": "upsert", + "type": "comboOrExpression", + "required": true, + "description": "Creates a new document if no documents match the filter/query.", + "defaultValue": "False" + } + ] }, { - "name": "find", - "description": "Finds several documents in a collection.", - "isHidden": false + "name": "deleteMany", + "description": "DeleteManyDocuments", + "isHidden": false, + "parameters": [ + { + "name": "collation", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the collation to use for the operation.", + "defaultValue": "" + }, + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "query", + "type": "textAreaOrExpression", + "required": true, + "description": "Specifies deletion criteria using query operators.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "insertOne", - "description": "Inserts a document into a collection.", - "isHidden": false + "description": "InsertOneDocument", + "isHidden": false, + "parameters": [ + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "document", + "type": "textAreaOrExpression", + "required": true, + "description": "A document to insert into the collection.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "insertMany", - "description": "Inserts several documents into a collection.", - "isHidden": false + "name": "deleteOne", + "description": "DeleteOneDocument", + "isHidden": false, + "parameters": [ + { + "name": "collation", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the collation to use for the operation.", + "defaultValue": "" + }, + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "query", + "type": "textAreaOrExpression", + "required": true, + "description": "Specifies deletion criteria using query operators.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "updateOne", - "description": "Modifies an existing document in a collection.", - "isHidden": false + "name": "updateMany", + "description": "UpdateManyDocuments", + "isHidden": false, + "parameters": [ + { + "name": "arrayFilters", + "type": "textAreaOrExpression", + "required": false, + "description": "Determines which array elements to modify.", + "defaultValue": "" + }, + { + "name": "collation", + "type": "textAreaOrExpression", + "required": false, + "description": "Specifies the collation to use for the operation.", + "defaultValue": "" + }, + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "query", + "type": "textAreaOrExpression", + "required": true, + "description": "The selection criteria for the update.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "update", + "type": "textAreaOrExpression", + "required": true, + "description": "The modifications to apply.", + "defaultValue": "" + }, + { + "name": "upsert", + "type": "comboOrExpression", + "required": true, + "description": "Creates a new document if no documents match the filter/query.", + "defaultValue": "False" + } + ] }, { - "name": "updateMany", - "description": "Modifies several documents in a collection.", - "isHidden": false + "name": "insertMany", + "description": "InsertManyDocuments", + "isHidden": false, + "parameters": [ + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "documents", + "type": "textAreaOrExpression", + "required": true, + "description": "An array of documents to insert into the collection.", + "defaultValue": "" + }, + { + "name": "ordered", + "type": "comboOrExpression", + "required": true, + "description": "Specifies whether the insert should be ordered or unordered.", + "defaultValue": "True" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "aggregate", - "description": "Aggregation to process multiple documents and return result.", - "isHidden": false + "description": "Aggregate", + "isHidden": false, + "parameters": [ + { + "name": "collection", + "type": "stringOrExpression", + "required": true, + "description": "A grouping of MongoDB documents.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "stages", + "type": "stringOrExpression", + "required": true, + "description": "Aggregation stages in json array format.", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "MONGODB", - "description": "Standard MongoDB connection with explicit parameters.", - "iconUrl": "" + "description": "MongoDB Connection", + "iconUrl": "", + "parameters": [ + { + "name": "appName", + "type": "stringOrExpression", + "required": false, + "description": "Specify a custom app name.", + "defaultValue": "" + }, + { + "name": "authMechanism", + "type": "stringOrExpression", + "required": false, + "description": "Specify the authentication mechanism that MongoDB will use to authenticate the connection.", + "defaultValue": "" + }, + { + "name": "authMechanismProperties", + "type": "stringOrExpression", + "required": false, + "description": "Specify properties for the specified authMechanism as a comma-separated list of colon-separated key-value pairs.", + "defaultValue": "" + }, + { + "name": "authSource", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the database name associated with the user's credentials.", + "defaultValue": "" + }, + { + "name": "compressors", + "type": "stringOrExpression", + "required": false, + "description": "Comma-delimited string of compressors to enable network compression for communication between this client and a mongod/mongos instance.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the MongoDB connection", + "defaultValue": "MONGODB_CONNECTION" + }, + { + "name": "connectionURI", + "type": "stringOrExpression", + "required": true, + "description": "The complete connection URI containing the server details, credentials, and the connection options. [prefix]://[username:password@]host1[:port1][,...hostN[:portN]][/[defaultauthdb][?options]]", + "defaultValue": "" + }, + { + "name": "connectTimeoutMS", + "type": "stringOrExpression", + "required": false, + "description": "The time in milliseconds to attempt a connection before timing out.", + "defaultValue": "" + }, + { + "name": "database", + "type": "stringOrExpression", + "required": true, + "description": "The name of the database.", + "defaultValue": "" + }, + { + "name": "gssapiServiceName", + "type": "stringOrExpression", + "required": false, + "description": "Set the Kerberos service name when connecting to Kerberized MongoDB instances.", + "defaultValue": "" + }, + { + "name": "heartbeatFrequencyMS", + "type": "stringOrExpression", + "required": false, + "description": "Controls when the driver checks the state of the MongoDB deployment.", + "defaultValue": "" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": false, + "description": "The host where the MongoDB instance is running.", + "defaultValue": "" + }, + { + "name": "inputType", + "type": "comboOrExpression", + "required": true, + "description": "Method to construct the connection URI. The connection string URI is a single string that contains all the information needed to connect to the database. The connection parameters are individual fields that can be used to construct the connection URI.", + "defaultValue": "Connection String URI" + }, + { + "name": "journal", + "type": "stringOrExpression", + "required": false, + "description": "Corresponds to the write concern j Option option.", + "defaultValue": "" + }, + { + "name": "localThresholdMS", + "type": "stringOrExpression", + "required": false, + "description": "The size (in milliseconds) of the latency window for selecting among multiple suitable MongoDB instances.", + "defaultValue": "" + }, + { + "name": "maxIdleTimeMS", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of milliseconds that a connection can remain idle in the pool before being removed and closed.", + "defaultValue": "" + }, + { + "name": "maxPoolSize", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of connections in the connection pool.", + "defaultValue": "" + }, + { + "name": "maxStalenessSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Specifies, in seconds, how stale a secondary can be before the client stops using it for read operations.", + "defaultValue": "" + }, + { + "name": "minPoolSize", + "type": "stringOrExpression", + "required": false, + "description": "The minimum number of connections in the connection pool.", + "defaultValue": "" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": false, + "description": "User's authentication credentials.", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": false, + "description": "The port where the MongoDB instance is running.", + "defaultValue": "" + }, + { + "name": "readConcernLevel", + "type": "stringOrExpression", + "required": false, + "description": "The level of isolation.", + "defaultValue": "" + }, + { + "name": "readPreference", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the read preferences for this connection.", + "defaultValue": "" + }, + { + "name": "readPreferenceTags", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the tags document as a comma-separated list of colon-separated key-value pairs.", + "defaultValue": "" + }, + { + "name": "replicaSet", + "type": "stringOrExpression", + "required": false, + "description": "Specifies the name of the replica set.", + "defaultValue": "" + }, + { + "name": "retryReads", + "type": "stringOrExpression", + "required": false, + "description": "Enables retryable reads.", + "defaultValue": "" + }, + { + "name": "retryWrites", + "type": "stringOrExpression", + "required": false, + "description": "Enable retryable writes.", + "defaultValue": "" + }, + { + "name": "seedList", + "type": "stringOrExpression", + "required": false, + "description": "The list of host and port pairs.", + "defaultValue": "" + }, + { + "name": "serverSelectionTimeoutMS", + "type": "stringOrExpression", + "required": false, + "description": "Specifies how long (in milliseconds) to block for server selection before throwing an exception.", + "defaultValue": "" + }, + { + "name": "serverSelectionTryOnce", + "type": "stringOrExpression", + "required": false, + "description": "Single-threaded drivers only.", + "defaultValue": "" + }, + { + "name": "socketTimeoutMS", + "type": "stringOrExpression", + "required": false, + "description": "The time in milliseconds to attempt a send or receive on a socket before the attempt times out.", + "defaultValue": "" + }, + { + "name": "ssl", + "type": "stringOrExpression", + "required": false, + "description": "The boolean to enable or disables TLS/SSL for the connection.", + "defaultValue": "" + }, + { + "name": "sslInvalidHostNamesAllowed", + "type": "stringOrExpression", + "required": false, + "description": "Disables hostname validation of the certificate presented by the mongod/mongos instance.", + "defaultValue": "" + }, + { + "name": "useDnsSrvLookup", + "type": "checkbox", + "required": false, + "description": "Enable DNS SRV lookup for automatic server discovery. If not selected, you have to provide a seed list of hosts (if there are multiple hosts). If selected, the you have to provide the cluster root domain name (e.g. mongodb.example.com) in the host field. The driver will then use DNS SRV records to discover the hosts in the cluster.", + "defaultValue": "false" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": false, + "description": "User's authentication credentials.", + "defaultValue": "" + }, + { + "name": "uuidRepresentation", + "type": "stringOrExpression", + "required": false, + "description": "The type of UUID representation.", + "defaultValue": "" + }, + { + "name": "w", + "type": "stringOrExpression", + "required": false, + "description": "Corresponds to the write concern w Option.", + "defaultValue": "" + }, + { + "name": "waitQueueMultiple", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of threads allowed to wait for a connection to become available from the pool.", + "defaultValue": "" + }, + { + "name": "waitQueueTimeoutMS", + "type": "stringOrExpression", + "required": false, + "description": "The maximum time in milliseconds that a thread can wait for a connection to become available.", + "defaultValue": "" + }, + { + "name": "wtimeoutMS", + "type": "stringOrExpression", + "required": false, + "description": "Specifies a time limit, in milliseconds, for the write concern.", + "defaultValue": "" + }, + { + "name": "zlibCompressionLevel", + "type": "stringOrExpression", + "required": false, + "description": "An integer that specifies the compression level if using zlib for network compression.", + "defaultValue": "" + } + ] } ] }, - "otherVersions": { - "1.0.3": "191463975", - "2.0.1": "198555576" - }, + "otherVersions": {}, "connectorRank": 4, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-mongodb.png" }, @@ -3769,33 +24983,595 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-pulsar", + "id": "", "version": { - "tagName": "0.9.4", - "releaseId": "225752727", + "tagName": "0.9.5", + "releaseId": "233268790", "isLatest": true, "isDeprecated": false, "operations": [ - { - "name": "init", - "description": "Configure the Apache Pulsar Client Connection", - "isHidden": true - }, { "name": "publishMessage", - "description": "Publish message to the Apache Pulsar cluster", - "isHidden": false + "description": "Publish Message", + "isHidden": false, + "parameters": [ + { + "name": "batchingEnabled", + "type": "boolean", + "required": false, + "description": "Whether message batching is enabled for the producer. Batching can improve throughput by sending multiple messages in a single request.", + "defaultValue": "true" + }, + { + "name": "batchingMaxBytes", + "type": "string", + "required": false, + "description": "The maximum size of a batch in bytes", + "defaultValue": "131072" + }, + { + "name": "batchingMaxMessages", + "type": "string", + "required": false, + "description": "The maximum number of messages permitted in a batch.", + "defaultValue": "1000" + }, + { + "name": "batchingMaxPublishDelayMicros", + "type": "string", + "required": false, + "description": "The maximum delay in microseconds for batching messages before they are published.", + "defaultValue": "1000" + }, + { + "name": "blockIfQueueFull", + "type": "boolean", + "required": false, + "description": "Whether the producer should block when the outgoing message queue is full. If false, send operations will fail immediately when the queue is full.", + "defaultValue": "false" + }, + { + "name": "chunkingEnabled", + "type": "boolean", + "required": false, + "description": "Whether chunking is enabled for large messages. If enabled, large messages are split into smaller chunks.", + "defaultValue": "false" + }, + { + "name": "chunkMaxMessageSize", + "type": "string", + "required": false, + "description": "The maximum size (in bytes) of a single message before it gets chunked.", + "defaultValue": "" + }, + { + "name": "compressionType", + "type": "combo", + "required": false, + "description": "The compression type to use for messages. Supported values: NONE, LZ4, ZLIB, ZSTD, SNAPPY. Supported values: NONE, LZ4, ZLIB, ZSTD, SNAPPY", + "defaultValue": "NONE" + }, + { + "name": "deliverAfter", + "type": "stringOrExpression", + "required": false, + "description": "The delay in milliseconds after which the message will be delivered.", + "defaultValue": "" + }, + { + "name": "hashingScheme", + "type": "combo", + "required": false, + "description": "The hashing scheme used to determine the partition for a message. Supported values: JavaStringHash, Murmur3_32Hash, BoostHash. Supported values: JavaStringHash, Murmur3_32Hash, BoostHash", + "defaultValue": "JavaStringHash" + }, + { + "name": "key", + "type": "stringOrExpression", + "required": false, + "description": "The key associated with the message, used for partition routing.", + "defaultValue": "" + }, + { + "name": "maxPendingMessages", + "type": "string", + "required": false, + "description": "The maximum number of messages allowed to be pending in the outgoing queue.", + "defaultValue": "" + }, + { + "name": "maxPendingMessagesAcrossPartitions", + "type": "string", + "required": false, + "description": "The maximum number of pending messages across all partitions. This is useful for partitioned topics.", + "defaultValue": "" + }, + { + "name": "messageRoutingMode", + "type": "combo", + "required": false, + "description": "The message routing mode for partitioned topics. Supported values: SinglePartition, RoundRobinPartition, CustomPartition. Supported values: SinglePartition, RoundRobinPartition, CustomPartition", + "defaultValue": "RoundRobinPartition" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sendMode", + "type": "combo", + "required": false, + "description": "Whether to send the message synchronously or asynchronously. In synchronous mode, the operation waits for the message to be acknowledged by the broker. In asynchronous mode, the operation returns immediately. Supported values: Sync, Async", + "defaultValue": "Sync" + }, + { + "name": "sendTimeoutMs", + "type": "string", + "required": false, + "description": "The timeout in milliseconds for a message to be sent. If the message is not acknowledged within this time, it is marked as failed.", + "defaultValue": "" + }, + { + "name": "sequenceId", + "type": "stringOrExpression", + "required": false, + "description": "The custom sequence ID to assign to the message.", + "defaultValue": "" + }, + { + "name": "topicName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the Pulsar topic to which messages will be published.", + "defaultValue": "" + }, + { + "name": "value", + "type": "stringOrExpression", + "required": true, + "description": "The payload or content of the message to be published.", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "pulsar", - "description": "Connection for a Apache Pulsar cluster.", - "iconUrl": "" - }, - { - "name": "pulsarsecure", - "description": "Secure Connection for a Apache Pulsar cluster.", - "iconUrl": "" + "description": "Pulsar Connection", + "iconUrl": "", + "parameters": [ + { + "name": "concurrentLookupRequest", + "type": "stringOrExpression", + "required": false, + "description": "Number of concurrent lookup requests allowed.", + "defaultValue": "" + }, + { + "name": "connectionMaxIdleSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Maximum idle time for connections (in seconds).", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the pulsar connection", + "defaultValue": "PULSAR_CONNECTION_1" + }, + { + "name": "connectionsPerBroker", + "type": "stringOrExpression", + "required": false, + "description": "Number of connections per broker.", + "defaultValue": "" + }, + { + "name": "connectionTimeoutMs", + "type": "stringOrExpression", + "required": false, + "description": "Timeout for establishing a connection (in milliseconds).", + "defaultValue": "" + }, + { + "name": "enableBusyWait", + "type": "boolean", + "required": false, + "description": "Enable busy-wait for IO threads.", + "defaultValue": "" + }, + { + "name": "enableTransaction", + "type": "boolean", + "required": false, + "description": "Enable transaction support in Pulsar client.", + "defaultValue": "" + }, + { + "name": "initialBackoffInterval", + "type": "stringOrExpression", + "required": false, + "description": "Initial backoff interval for reconnection attempts (in milliseconds).", + "defaultValue": "" + }, + { + "name": "keepAliveIntervalSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Keep-alive interval for broker connections (in seconds).", + "defaultValue": "" + }, + { + "name": "listenerName", + "type": "stringOrExpression", + "required": false, + "description": "Listener name for the Pulsar client.", + "defaultValue": "" + }, + { + "name": "lookupTimeoutMs", + "type": "stringOrExpression", + "required": false, + "description": "Timeout for lookup requests (in milliseconds).", + "defaultValue": "" + }, + { + "name": "maxBackoffInterval", + "type": "stringOrExpression", + "required": false, + "description": "Maximum backoff interval for reconnection attempts (in milliseconds).", + "defaultValue": "" + }, + { + "name": "maxConcurrentLookupRequests", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of concurrent lookup requests allowed.", + "defaultValue": "" + }, + { + "name": "maxLookupRedirects", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of lookup redirects allowed.", + "defaultValue": "" + }, + { + "name": "maxLookupRequest", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of lookup requests.", + "defaultValue": "" + }, + { + "name": "maxNumberOfRejectedRequestPerConnection", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of rejected requests per connection.", + "defaultValue": "" + }, + { + "name": "memoryLimitBytes", + "type": "stringOrExpression", + "required": false, + "description": "Memory limit for Pulsar client (in bytes).", + "defaultValue": "" + }, + { + "name": "numIoThreads", + "type": "stringOrExpression", + "required": false, + "description": "Number of IO threads for Pulsar client.", + "defaultValue": "" + }, + { + "name": "numListenerThreads", + "type": "stringOrExpression", + "required": false, + "description": "Number of listener threads for Pulsar client.", + "defaultValue": "" + }, + { + "name": "operationTimeoutSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Timeout for client operations (in seconds).", + "defaultValue": "" + }, + { + "name": "requestTimeoutMs", + "type": "stringOrExpression", + "required": false, + "description": "Timeout for requests (in milliseconds).", + "defaultValue": "" + }, + { + "name": "serviceUrl", + "type": "stringOrExpression", + "required": true, + "description": "The Pulsar service URL to connect to (e.g., pulsar://localhost:6650).", + "defaultValue": "pulsar://localhost:6650/" + }, + { + "name": "statsIntervalSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Interval for statistics collection (in seconds).", + "defaultValue": "" + }, + { + "name": "useTcpNoDelay", + "type": "boolean", + "required": false, + "description": "Enable TCP no delay for network connections.", + "defaultValue": "" + } + ] + }, + { + "name": "pulsarSecure", + "description": "Pulsar Connection", + "iconUrl": "", + "parameters": [ + { + "name": "authenticationType", + "type": "combo", + "required": false, + "description": "The authentication mechanism to use for authenticating with Pulsar. Supported values: None, JWT, TLS, OAuth2. Supported values: None, JWT", + "defaultValue": "None" + }, + { + "name": "concurrentLookupRequest", + "type": "stringOrExpression", + "required": false, + "description": "Number of concurrent lookup requests allowed.", + "defaultValue": "" + }, + { + "name": "connectionMaxIdleSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Maximum idle time for connections (in seconds).", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the pulsar connection", + "defaultValue": "PULSAR_CONNECTION_1" + }, + { + "name": "connectionsPerBroker", + "type": "stringOrExpression", + "required": false, + "description": "Number of connections per broker.", + "defaultValue": "" + }, + { + "name": "connectionTimeoutMs", + "type": "stringOrExpression", + "required": false, + "description": "Timeout for establishing a connection (in milliseconds).", + "defaultValue": "" + }, + { + "name": "enableBusyWait", + "type": "boolean", + "required": false, + "description": "Enable busy-wait for IO threads.", + "defaultValue": "" + }, + { + "name": "enableTlsHostnameVerification", + "type": "boolean", + "required": false, + "description": "Enable hostname verification for TLS connections.", + "defaultValue": "" + }, + { + "name": "enableTransaction", + "type": "boolean", + "required": false, + "description": "Enable transaction support in Pulsar client.", + "defaultValue": "" + }, + { + "name": "initialBackoffInterval", + "type": "stringOrExpression", + "required": false, + "description": "Initial backoff interval for reconnection attempts (in milliseconds).", + "defaultValue": "" + }, + { + "name": "jwtToken", + "type": "stringOrExpression", + "required": false, + "description": "The JSON Web Token (JWT) used for authenticating with the Pulsar broker.", + "defaultValue": "" + }, + { + "name": "keepAliveIntervalSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Keep-alive interval for broker connections (in seconds).", + "defaultValue": "" + }, + { + "name": "listenerName", + "type": "stringOrExpression", + "required": false, + "description": "Listener name for the Pulsar client.", + "defaultValue": "" + }, + { + "name": "lookupTimeoutMs", + "type": "stringOrExpression", + "required": false, + "description": "Timeout for lookup requests (in milliseconds).", + "defaultValue": "" + }, + { + "name": "maxBackoffInterval", + "type": "stringOrExpression", + "required": false, + "description": "Maximum backoff interval for reconnection attempts (in milliseconds).", + "defaultValue": "" + }, + { + "name": "maxConcurrentLookupRequests", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of concurrent lookup requests allowed.", + "defaultValue": "" + }, + { + "name": "maxLookupRedirects", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of lookup redirects allowed.", + "defaultValue": "" + }, + { + "name": "maxLookupRequest", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of lookup requests.", + "defaultValue": "" + }, + { + "name": "maxNumberOfRejectedRequestPerConnection", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of rejected requests per connection.", + "defaultValue": "" + }, + { + "name": "memoryLimitBytes", + "type": "stringOrExpression", + "required": false, + "description": "Memory limit for Pulsar client (in bytes).", + "defaultValue": "" + }, + { + "name": "numIoThreads", + "type": "stringOrExpression", + "required": false, + "description": "Number of IO threads for Pulsar client.", + "defaultValue": "" + }, + { + "name": "numListenerThreads", + "type": "stringOrExpression", + "required": false, + "description": "Number of listener threads for Pulsar client.", + "defaultValue": "" + }, + { + "name": "operationTimeoutSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Timeout for client operations (in seconds).", + "defaultValue": "" + }, + { + "name": "requestTimeoutMs", + "type": "stringOrExpression", + "required": false, + "description": "Timeout for requests (in milliseconds).", + "defaultValue": "" + }, + { + "name": "serviceUrl", + "type": "stringOrExpression", + "required": true, + "description": "The Pulsar service URL to connect to (e.g., pulsar+ssl://localhost:6651/).", + "defaultValue": "pulsar+ssl://localhost:6651/" + }, + { + "name": "statsIntervalSeconds", + "type": "stringOrExpression", + "required": false, + "description": "Interval for statistics collection (in seconds).", + "defaultValue": "" + }, + { + "name": "tlsAllowInsecureConnection", + "type": "boolean", + "required": false, + "description": "Allow insecure TLS connections by skipping certificate validation.", + "defaultValue": "false" + }, + { + "name": "tlsCiphers", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of enabled TLS cipher suites. (e.g., TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256)", + "defaultValue": "" + }, + { + "name": "tlsProtocols", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of enabled TLS protocols (e.g., TLSv1.2,TLSv1.3).", + "defaultValue": "" + }, + { + "name": "tlsTrustCertsFilePath", + "type": "stringOrExpression", + "required": true, + "description": "Path to the trusted TLS certificate file.", + "defaultValue": "" + }, + { + "name": "tlsTrustStorePassword", + "type": "stringOrExpression", + "required": true, + "description": "Password for the TLS trust store.", + "defaultValue": "" + }, + { + "name": "tlsTrustStorePath", + "type": "stringOrExpression", + "required": true, + "description": "Path to the TLS trust store file.", + "defaultValue": "" + }, + { + "name": "tlsTrustStoreType", + "type": "stringOrExpression", + "required": true, + "description": "Type of the TLS trust store (e.g., JKS, PKCS12).", + "defaultValue": "" + }, + { + "name": "useKeyStoreTls", + "type": "boolean", + "required": false, + "description": "Enable TLS using a Java KeyStore.", + "defaultValue": "false" + }, + { + "name": "useTcpNoDelay", + "type": "boolean", + "required": false, + "description": "Enable TCP no delay for network connections.", + "defaultValue": "" + } + ] } ] }, @@ -3803,6 +25579,25 @@ export const CONNECTOR_DB = [ "connectorRank": 50, "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/mi-connector-pulsar.png" }, + { + "connectorName": "RabbitMQ", + "repoName": "", + "description": "The RabbitMQ connector enables WSO2 Micro Integrator (MI) to publish messages and perform RPC interactions with a RabbitMQ broker. It supports reliable, asynchronous communication, allowing you to send messages to queues or exchanges, use the RPC pattern, and manage acknowledgments by accepting, discarding, or requeuing messages.", + "connectorType": "Connector", + "mavenGroupId": "", + "mavenArtifactId": "", + "version": { + "tagName": "", + "releaseId": "", + "isLatest": true, + "isDeprecated": false, + "operations": [], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 0, + "iconUrl": "" + }, { "connectorName": "Redis", "repoName": "mi-connector-redis", @@ -3810,6 +25605,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-redis", + "id": "", "version": { "tagName": "3.1.6", "releaseId": "200018815", @@ -3819,429 +25615,514 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "configure Redis connector", - "isHidden": true + "isHidden": true, + "parameters": [] }, { "name": "echo", "description": "echo the given string", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "ping", "description": "ping the server", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "quit", "description": "close the connection", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hDel", "description": "delete one or more hash fields", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hExists", "description": "determine if a hash field exists", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hGet", "description": "get the value of a hash field", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hGetAll", "description": "get all the fields and values in a hash", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hIncrBy", "description": "increment the integer value of a hash field by the given number", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hKeys", "description": "get all the fields in a hash", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hLen", "description": "get the number of fields in a hash", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hMGet", "description": "get the values of all the given hash fields", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hMSet", "description": "set multiple hash fields to multiple values", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hSet", "description": "set the string value of a hash field", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hSetnX", "description": "set the value of a hash field, only if the field does not exist", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "hVals", "description": "get all the values in a hash", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "del", "description": "delete a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "exists", "description": "determine if a key exists", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "expire", "description": "set a key's time to live in seconds", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "expireAt", "description": "set the expiration for an existing key as a UNIX timestamp", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "keys", "description": "find all keys matching the given pattern", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "randomKey", "description": "return a random key from the keyspace", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "rename", "description": "rename a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "renamenX", "description": "rename a key, only if the new key does not exist", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "ttl", "description": "get the time to live for a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "type", "description": "determine the type stored at key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "blPop", "description": "remove and get the first element in a list or block until one is available", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "brPop", "description": "remove an get the element in a list or block one is available", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lInsert", "description": "insert an element before or after another element in a list", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lLen", "description": "get a length of a list", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lPop", "description": "remove and get the first element in a list", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lPush", "description": "prepend one or multiple values to a list", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lPushX", "description": "prepend a value of an element in a list by its index", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lRange", "description": "get a range of elements from a list", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lRem", "description": "remove element from a list", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lSet", "description": "set the value of an element in a list by it's index", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "lTrim", "description": "trim a list to the specified range", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "rPopLPush", "description": "remove the list element in a list, prepend it to another list and return it", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "rPush", "description": "append one or more multiple values to a list", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "rPushX", "description": "append a value to a list, only if the list exists", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "flushAll", "description": "delete all the keys of all the existing databases", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "flushDB", "description": "delete all the keys of the currently selected database", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sadd", "description": "add one or more members to a set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sDiffStore", "description": "subtract multiple sets and store the resulting set in a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sInter", "description": "intersect multiple sets", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sInterStore", "description": "intersect multiple sets and store the resulting set in a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sIsMember", "description": "determine if a given value is a member of a set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sMembers", "description": "get the all members in a set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sMove", "description": "move a member from one set to another", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sPop", "description": "remove and return one or multiple random members from a set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sRandMember", "description": "get one or multiple random members from a set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sRem", "description": "remove one or more members from a set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sUnion", "description": "add multiple sets", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sUnionStore", "description": "add multiple sets and store the resulting set in a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zadd", "description": "add one or more members to a sorted set or update its score if it already exist", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zCount", "description": "count the members in a sorted set with scores within the given values", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zIncrBy", "description": "increment the score of a member in a sorted set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zInterStore", "description": "intersect multiple sorted sets and store the resulting stored set in a new key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRange", "description": "return a range of members in a sorted set by index", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRangeByScore", "description": "return a range of members in a sorted set by score with scores ordered from high to low", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRank", "description": "determine the index of a member in a sorted set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRem", "description": "remove one or more members from a sorted set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRemRangeByRank", "description": "remove all members in a sorted set within the given indexes", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRemRangeByScore", "description": "remove all members in a sorted set within the given scores", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRevRange", "description": "return a range of members in a sorted set by index with scores ordered from high to low", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRevRangeByScore", "description": "return a range of members in a sorted set by score with score ordered form high to low", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zRevRank", "description": "determine the index of a member in a sorted set with scores ordered from high to low", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zScore", "description": "get the score associated with the given member in a sorted set", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "zUnionStore", "description": "add multiple stored sets and store the resulting stored set in a new key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "append", "description": "append a value to a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "decrBy", "description": "decrement the integer value of key by the given number", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "get", "description": "get the value of a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getObjectIdleTime", "description": "get the OBJECT IDLE TIME", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getRange", "description": "get the sub string of the key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getSet", "description": "set the string value of a key and return its old value", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "incrBy", "description": "increment the integer value of a key by the given amount", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "mGet", "description": "get the values of all given keys", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "mSet", "description": "set multiple keys to multiple values", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "mSetnX", "description": "set multiple keys to multiple values, only if none of the key exist", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "set", "description": "set the string value of a key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setBit", "description": "sets of clears the bit at offset in the string value stored at key", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setnX", "description": "set the value of a key, only if the key does not exist", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setRange", "description": "overwrite part of a string at key stating at the specified offset", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "strLen", "description": "get the length of the value stored in a key", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [ { "name": "Redis", "description": "Connection for Redis data operations.", - "iconUrl": "" + "iconUrl": "", + "parameters": [] } ] }, @@ -4256,6 +26137,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-salesforce", + "id": "", "version": { "tagName": "2.1.2", "releaseId": "193421565", @@ -4265,149 +26147,178 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "Login synapse library", - "isHidden": true + "isHidden": true, + "parameters": [] }, { "name": "logout", "description": "Logout synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "query", "description": "Query (SQL) synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "queryAll", "description": "Query all (SQL) synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "queryMore", "description": "Query more synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "create", "description": "Insert sObject(s) synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "update", "description": "Update or update sObject(s) synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "upsert", "description": "Insert or update sObject(s) synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "delete", "description": "Delete sObject(s) synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "search", "description": "Search using SOSL synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "emptyRecycleBin", "description": "Empty RecycleBin synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "undelete", "description": "Restore sObject(s) synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "describeSObject", "description": "Describe SObject synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "describeSObjects", "description": "Describe SObjects synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "describeGlobal", "description": "Describe global synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "setPassword", "description": "Set password synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sendEmailMessage", "description": "Send email message synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "sendEmail", "description": "Send email synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "retrieve", "description": "Retrieve synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "resetPassword", "description": "Reset Password synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getUserInfo", "description": "Get User Information synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getDeleted", "description": "Get Deleted Records synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getUpdated", "description": "Get Updated Records synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getServerTimestamp", "description": "Get Server Timestamp synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "findDuplicates", "description": "Find duplicates for a set of sObjects synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "findDuplicatesByIds", "description": "Find duplicates for a set of sObjects using record ids synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "merge", "description": "Merge and update a set of sObjects based on object id synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "convertLead", "description": "Convert a set of leads synapse library", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [ { "name": "salesforce", "description": "Connection for interacting with Salesforce CRM.", - "iconUrl": "" + "iconUrl": "", + "parameters": [] } ] }, @@ -4422,6 +26333,7 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-salesforcebulk", + "id": "", "version": { "tagName": "2.1.2", "releaseId": "193421906", @@ -4431,109 +26343,130 @@ export const CONNECTOR_DB = [ { "name": "init", "description": "Init operation", - "isHidden": true + "isHidden": true, + "parameters": [] }, { "name": "callBulkApi", "description": "Call Salesforce Bulk API endpoints", - "isHidden": true + "isHidden": true, + "parameters": [] }, { "name": "callUsingOauth", "description": "Call endpoint using OAUTH credentials", - "isHidden": true + "isHidden": true, + "parameters": [] }, { "name": "callUsingAccessToken", "description": "Call endpoint using OAUTH access token", - "isHidden": true + "isHidden": true, + "parameters": [] }, { "name": "createJob", "description": "A operation to create a job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "uploadJobData", "description": "An operation to upload data to a job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "closeJob", "description": "An operation to close a job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "abortJob", "description": "An operation to abort a job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getAllJobInfo", "description": "An operation to get all job info in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getJobInfo", "description": "An operation to get job info in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "deleteJob", "description": "An operation to delete a job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getSuccessfulResults", "description": "An operation to get successful results of a job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getUnprocessedResults", "description": "An operation to get unprocessed results of a job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getFailedResults", "description": "An operation to get failed results of a job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "abortQueryJob", "description": "An operation to abort a running query job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "createQueryJob", "description": "An operation to create a new query job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "deleteQueryJob", "description": "An operation to delete a query job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getQueryJobInfo", "description": "An operation to get information about a query job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getQueryJobResults", "description": "An operation to get the results of a query job in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] }, { "name": "getAllQueryJobInfo", "description": "An operation to get the information of all the query jobs in Salesforce using bulk api 2.0", - "isHidden": false + "isHidden": false, + "parameters": [] } ], "connections": [ { "name": "salesforcebulk", "description": "Connection for bulk data operations in Salesforce.", - "iconUrl": "" + "iconUrl": "", + "parameters": [] } ] }, @@ -4548,123 +26481,1757 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-salesforcemarketingcloud", + "id": "", "version": { - "tagName": "1.0.0", - "releaseId": "217099789", + "tagName": "1.0.1", + "releaseId": "233268674", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "createAsset", - "description": "Creates a new content asset.", - "isHidden": false + "name": "getJourneys", + "description": "Retrieve a list of journeys.", + "isHidden": false, + "parameters": [ + { + "name": "orderBy", + "type": "stringOrExpression", + "required": false, + "description": "The field and sort method to use to sort the results. You can sort on these fields: ModifiedDate, Name, Performance.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "page", + "type": "stringOrExpression", + "required": false, + "description": "The page number of results to retrieve.", + "defaultValue": "" + }, + { + "name": "pageSize", + "type": "stringOrExpression", + "required": false, + "description": "The number of items to return on a page of results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createCampaign", - "description": "Establishes a new marketing campaign with defined objectives, target audience, and parameters.", - "isHidden": false + "name": "getContactDeleteRequests", + "description": "Retrieves details of contact delete requests for a date range.", + "isHidden": false, + "parameters": [ + { + "name": "enddateutc", + "type": "stringOrExpression", + "required": false, + "description": "End date and time in UTC of the date range.", + "defaultValue": "" + }, + { + "name": "orderBy", + "type": "stringOrExpression", + "required": false, + "description": "Determines which asset property to use for sorting, and also determines the direction in which to sort the data.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "page", + "type": "stringOrExpression", + "required": false, + "description": "Page number to return from the paged results.", + "defaultValue": "" + }, + { + "name": "pagesize", + "type": "stringOrExpression", + "required": false, + "description": "Number of results per page to return.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "startdateutc", + "type": "stringOrExpression", + "required": false, + "description": "Start date and time in UTC of the date range.", + "defaultValue": "" + }, + { + "name": "statusid", + "type": "stringOrExpression", + "required": false, + "description": "Delete request status ID.", + "defaultValue": "" + } + ] }, { - "name": "createCategory", - "description": "Creates a category (folder) in Content Builder.", - "isHidden": false + "name": "deleteAsset", + "description": "Deletes an asset.", + "isHidden": false, + "parameters": [ + { + "name": "assetId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the asset to delete.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createContact", - "description": "Adds a new contact.", - "isHidden": false + "name": "updateContact", + "description": "Update Contact", + "isHidden": false, + "parameters": [ + { + "name": "attributeSets", + "type": "array", + "required": true, + "description": "Array of information used to create a new contact.", + "defaultValue": "" + }, + { + "name": "attributeSets.name", + "type": "stringOrExpression", + "required": true, + "description": "Required. Name of attribute group to which to add the contact information.", + "defaultValue": "" + }, + { + "name": "attributeSets.values", + "type": "array", + "required": false, + "description": "Name and value pairs indicating the attribute and applicable value.", + "defaultValue": "" + }, + { + "name": "contactID", + "type": "stringOrExpression", + "required": false, + "description": "Unique ID for the contact. You must provide either a value for contactKey or contactID.", + "defaultValue": "" + }, + { + "name": "contactKey", + "type": "stringOrExpression", + "required": true, + "description": "Primary address for the contact. You must provide either a value for contactKey or contactID.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to create a new contact.", + "defaultValue": "{\n \"contactKey\": \"acruz@example.com\",\n \"contactId\": 12345678,\n \"attributeSets\": [\n {\n \"name\": \"Email Addresses\",\n \"items\": [\n {\n \"values\": [\n {\n \"name\": \"Email Address\",\n \"value\": \"acruz@example.com\"\n },\n {\n \"name\": \"HTML Enabled\",\n \"value\": true\n }\n ]\n }\n ]\n },\n {\n \"name\": \"Email Demographics\",\n \"items\": [\n {\n \"values\": [\n {\n \"name\": \"Last Name\",\n \"value\": \"Cruz\"\n },\n {\n \"name\": \"First Name\",\n \"value\": \"Angela\"\n },\n {\n \"name\": \"Text Profile Attribute\",\n \"value\": \"value 1\"\n },\n {\n \"name\": \"Number Profile Attribute\",\n \"value\": 12345\n }\n ]\n }\n ]\n }\n ]\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createEmailDefinition", - "description": "Creates a send definition referencing email templates and sending options.", - "isHidden": false + "name": "getCategories", + "description": "Get Content Categories", + "isHidden": false, + "parameters": [ + { + "name": "filter", + "type": "stringOrExpression", + "required": false, + "description": "Filter by ParentId using a simple operator and value.", + "defaultValue": "" + }, + { + "name": "orderBy", + "type": "stringOrExpression", + "required": false, + "description": "Determines which category property to use for sorting, and also determines the direction in which to sort the data.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "page", + "type": "stringOrExpression", + "required": false, + "description": "Page number to return from the paged results.", + "defaultValue": "" + }, + { + "name": "pagesize", + "type": "stringOrExpression", + "required": false, + "description": "Number of results per page to return.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createJourney", - "description": "Creates a new journey interaction.", - "isHidden": false + "name": "getAssets", + "description": "Get an asset collection by simple filter parameters.", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-delimited string of asset properties used to reduce the size of your results to only the properties you need.", + "defaultValue": "" + }, + { + "name": "filter", + "type": "stringOrExpression", + "required": false, + "description": "Filter by an asset's property using a simple operator and value.", + "defaultValue": "" + }, + { + "name": "orderBy", + "type": "stringOrExpression", + "required": false, + "description": "Determines which asset property to use for sorting, and also determines the direction in which to sort the data.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "page", + "type": "stringOrExpression", + "required": false, + "description": "Page number to return from the paged results.", + "defaultValue": "" + }, + { + "name": "pagesize", + "type": "stringOrExpression", + "required": false, + "description": "Number of results per page to return.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createSmsDefinition", - "description": "Creates an SMS send definition.", - "isHidden": false + "name": "createContact", + "description": "Create Contact", + "isHidden": false, + "parameters": [ + { + "name": "attributeSets", + "type": "array", + "required": true, + "description": "Array of information used to create a new contact.", + "defaultValue": "" + }, + { + "name": "attributeSets.name", + "type": "stringOrExpression", + "required": true, + "description": "Required. Name of attribute group to which to add the contact information.", + "defaultValue": "" + }, + { + "name": "attributeSets.values", + "type": "array", + "required": false, + "description": "Name and value pairs indicating the attribute and applicable value.", + "defaultValue": "" + }, + { + "name": "contactID", + "type": "stringOrExpression", + "required": false, + "description": "Unique ID for the contact. You must provide either a value for contactKey or contactID.", + "defaultValue": "" + }, + { + "name": "contactKey", + "type": "stringOrExpression", + "required": true, + "description": "Primary address for the contact. You must provide either a value for contactKey or contactID.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to create a new contact.", + "defaultValue": "{\n \"contactKey\": \"acruz@example.com\",\n \"contactId\": 12345678,\n \"attributeSets\": [\n {\n \"name\": \"Email Addresses\",\n \"items\": [\n {\n \"values\": [\n {\n \"name\": \"Email Address\",\n \"value\": \"acruz@example.com\"\n },\n {\n \"name\": \"HTML Enabled\",\n \"value\": true\n }\n ]\n }\n ]\n },\n {\n \"name\": \"Email Demographics\",\n \"items\": [\n {\n \"values\": [\n {\n \"name\": \"Last Name\",\n \"value\": \"Cruz\"\n },\n {\n \"name\": \"First Name\",\n \"value\": \"Angela\"\n },\n {\n \"name\": \"Text Profile Attribute\",\n \"value\": \"value 1\"\n },\n {\n \"name\": \"Number Profile Attribute\",\n \"value\": 12345\n }\n ]\n }\n ]\n }\n ]\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteAsset", - "description": "Deletes an asset.", - "isHidden": false + "name": "getCampaigns", + "description": "Retrieve a list of campaigns in your account.", + "isHidden": false, + "parameters": [ + { + "name": "orderBy", + "type": "stringOrExpression", + "required": false, + "description": "The field and sort method to use to sort the results.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "page", + "type": "stringOrExpression", + "required": false, + "description": "Page number to return from the paged results.", + "defaultValue": "" + }, + { + "name": "pagesize", + "type": "stringOrExpression", + "required": false, + "description": "Number of results per page to return.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteCampaign", - "description": "Deletes an existing marketing campaign.", - "isHidden": false + "name": "createJourney", + "description": "Creates or saves a journey.", + "isHidden": false, + "parameters": [ + { + "name": "activities", + "type": "array", + "required": false, + "description": "The activities which compose this particular journey. Expressed as objects of types supported by the Journey Spec.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "A description of this journey.", + "defaultValue": "" + }, + { + "name": "goals", + "type": "array", + "required": false, + "description": "The goal for this particular journey. Expressed as an object of type ContactDecision from the Journey Spec.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "key", + "type": "stringOrExpression", + "required": true, + "description": "Required. The customer key as a GUID (UUID) to be used while referencing this journey.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "Required. The name of this journey.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to create a new journey.", + "defaultValue": "{\n \"key\": \"ixn-created-via-the-api\",\n \"name\": \"API-Created journey\",\n \"workflowApiVersion\": 1.0,\n \"triggers\": [],\n \"goals\": [],\n \"activities\": []\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "triggers", + "type": "array", + "required": false, + "description": "The trigger for this particular journey. Expressed as an object of type ContactEvent from the Journey Spec.", + "defaultValue": "" + }, + { + "name": "workflowApiVersion", + "type": "number", + "required": true, + "description": "Required. The Journey Spec version to use for this journey. Possible values: 0.5, 1.0.", + "defaultValue": "" + } + ] }, { - "name": "deleteContact", - "description": "Deletes a contact record.", - "isHidden": false + "name": "insertDataExtensionRowSet", + "description": "Insert Data Extension RowSet.", + "isHidden": false, + "parameters": [ + { + "name": "externalKey", + "type": "stringOrExpression", + "required": false, + "description": "The external ID, also known as the customer key, for the data extension.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to insert data extension row set.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getAssets", - "description": "Fetches a list of all content assets.", - "isHidden": false + "name": "sendEmailMessage", + "description": "Send Email Message", + "isHidden": false, + "parameters": [ + { + "name": "attributes", + "type": "object", + "required": false, + "description": "Personalization attributes for the message as key-value pairs.", + "defaultValue": "" + }, + { + "name": "definitionKey", + "type": "string", + "required": true, + "description": "The ID of the send definition.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to send an e-mail message.", + "defaultValue": "{\n \"definitionKey\": \"2FA_order_accounts\",\n \"recipients\": [\n {\n \"contactKey\": \"recipient1\",\n \"to\": \"recipient1@example.com\",\n \"messageKey\": \"nFL4ULgheUeaGbPIMzJJSw\",\n \"attributes\": {\n \"RequestAttribute_1\": \"value_1\",\n \"RequestAttribute_2\": \"value_2\",\n \"Attribute1\": \"This is one for recipient1\",\n \"Attribute2\": \"This is two for recipient1\"\n }\n },\n {\n \"contactKey\": \"recipient2\",\n \"to\": \"recipient2@example.com\",\n \"messageKey\": \"GV1LhQ6NFkqFUAE1IsoQ9Q\",\n \"attributes\": {\n \"UserAttribute\": \"value_3\"\n }\n }\n ],\n \"attributes\": {\n \"UserAttribute_a\": \"value_a\",\n \"UserAttribute_b\": \"value_b\"\n }\n}" + }, + { + "name": "recipients", + "type": "object", + "required": true, + "description": "Recipient parameters and metadata. Cannot be used with single recipient array.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getCampaigns", - "description": "Retrieves details of existing marketing campaigns.", - "isHidden": false + "name": "updateAsset", + "description": "Update Asset", + "isHidden": false, + "parameters": [ + { + "name": "allowedBlocks", + "type": "stringOrExpression", + "required": false, + "description": "List of blocks that are allowed in the asset.", + "defaultValue": "" + }, + { + "name": "assetId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the asset to be updated.", + "defaultValue": "" + }, + { + "name": "assetType", + "type": "stringOrExpression", + "required": false, + "description": "The type of the asset saved as a name/ID pair.", + "defaultValue": "" + }, + { + "name": "blocks", + "type": "stringOrExpression", + "required": false, + "description": "Blocks within the asset.", + "defaultValue": "" + }, + { + "name": "businessUnitAvailability", + "type": "stringOrExpression", + "required": false, + "description": "A dictionary of member IDs that have been granted access to the asset.", + "defaultValue": "" + }, + { + "name": "category", + "type": "stringOrExpression", + "required": false, + "description": "ID of the category the asset belongs to.", + "defaultValue": "" + }, + { + "name": "channels", + "type": "stringOrExpression", + "required": false, + "description": "List of channels that are allowed to use this asset.", + "defaultValue": "" + }, + { + "name": "content", + "type": "stringOrExpression", + "required": false, + "description": "The actual content of the asset.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "The type that the content attribute will be in.", + "defaultValue": "" + }, + { + "name": "customerKey", + "type": "stringOrExpression", + "required": false, + "description": "Reference to customer's private ID/name for the asset.", + "defaultValue": "" + }, + { + "name": "customFields", + "type": "stringOrExpression", + "required": false, + "description": "Custom fields within an asset.", + "defaultValue": "" + }, + { + "name": "data", + "type": "stringOrExpression", + "required": false, + "description": "Property bag containing the asset data.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "Description of the asset, set by the client.", + "defaultValue": "" + }, + { + "name": "design", + "type": "stringOrExpression", + "required": false, + "description": "Fallback for display when neither content nor supercontent are provided.", + "defaultValue": "" + }, + { + "name": "file", + "type": "stringOrExpression", + "required": false, + "description": "Base64-encoded string of a file associated with an asset.", + "defaultValue": "" + }, + { + "name": "fileProperties", + "type": "stringOrExpression", + "required": false, + "description": "Stores the different properties that this asset refers to if it is a file type.", + "defaultValue": "" + }, + { + "name": "generateFrom", + "type": "stringOrExpression", + "required": false, + "description": "Tells the sending compiler what view to use for generating this view's content.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "locked", + "type": "stringOrExpression", + "required": false, + "description": "Specifies if the asset can be modified or not.", + "defaultValue": "" + }, + { + "name": "maxBlocks", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of blocks within an asset.", + "defaultValue": "" + }, + { + "name": "minBlocks", + "type": "stringOrExpression", + "required": false, + "description": "Minimum number of blocks within an asset.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": false, + "description": "Name of the asset, set by the client. 200 character maximum.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": false, + "description": "The JSON payload required to create a new asset.", + "defaultValue": "{\n \"assetType\": {\n \"name\": \"htmlemail\",\n \"id\": 208\n },\n \"name\": \"Example Email Created via API\",\n \"customerKey\": \"MyUniqueEmailAssetKey\",\n \"views\": {\n \"html\": {\n \"content\": \"

Hello, this is an email from the SFMC API!

\"\n }\n }\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sharingProperties", + "type": "stringOrExpression", + "required": false, + "description": "Allows you to share content with one or more business units that have Content Builder Sharing enabled.", + "defaultValue": "" + }, + { + "name": "sharingProperties.sharedWith", + "type": "stringOrExpression", + "required": false, + "description": "List of MID IDs the asset is shared with.", + "defaultValue": "" + }, + { + "name": "sharingProperties.sharingType", + "type": "stringOrExpression", + "required": false, + "description": "Indicates the permission that you are granting to the list of MIDs in sharedWith. Possible values are view, edit, or local.", + "defaultValue": "" + }, + { + "name": "slots", + "type": "stringOrExpression", + "required": false, + "description": "Slots within the asset.", + "defaultValue": "" + }, + { + "name": "superContent", + "type": "stringOrExpression", + "required": false, + "description": "Content that supersedes content in terms of display.", + "defaultValue": "" + }, + { + "name": "tags", + "type": "stringOrExpression", + "required": false, + "description": "List of tags associated with the asset.", + "defaultValue": "" + }, + { + "name": "template", + "type": "stringOrExpression", + "required": false, + "description": "Template the asset follows.", + "defaultValue": "" + }, + { + "name": "version", + "type": "stringOrExpression", + "required": false, + "description": "The version of the asset.", + "defaultValue": "" + }, + { + "name": "views", + "type": "stringOrExpression", + "required": false, + "description": "Views within an asset.", + "defaultValue": "" + } + ] }, { - "name": "getCategories", - "description": "Retrieves a list of Content Builder categories (folders).", - "isHidden": false + "name": "createAsset", + "description": "Creates a new asset.", + "isHidden": false, + "parameters": [ + { + "name": "allowedBlocks", + "type": "stringOrExpression", + "required": false, + "description": "List of blocks that are allowed in the asset.", + "defaultValue": "" + }, + { + "name": "assetType", + "type": "stringOrExpression", + "required": false, + "description": "The type of the asset saved as a name/ID pair.", + "defaultValue": "" + }, + { + "name": "blocks", + "type": "stringOrExpression", + "required": false, + "description": "Blocks within the asset.", + "defaultValue": "" + }, + { + "name": "businessUnitAvailability", + "type": "stringOrExpression", + "required": false, + "description": "A dictionary of member IDs that have been granted access to the asset.", + "defaultValue": "" + }, + { + "name": "category", + "type": "stringOrExpression", + "required": false, + "description": "ID of the category the asset belongs to.", + "defaultValue": "" + }, + { + "name": "channels", + "type": "stringOrExpression", + "required": false, + "description": "List of channels that are allowed to use this asset.", + "defaultValue": "" + }, + { + "name": "content", + "type": "stringOrExpression", + "required": false, + "description": "The actual content of the asset.", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "stringOrExpression", + "required": false, + "description": "The type that the content attribute will be in.", + "defaultValue": "" + }, + { + "name": "customerKey", + "type": "stringOrExpression", + "required": false, + "description": "Reference to customer's private ID/name for the asset.", + "defaultValue": "" + }, + { + "name": "customFields", + "type": "stringOrExpression", + "required": false, + "description": "Custom fields within an asset.", + "defaultValue": "" + }, + { + "name": "data", + "type": "stringOrExpression", + "required": false, + "description": "Property bag containing the asset data.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "Description of the asset, set by the client.", + "defaultValue": "" + }, + { + "name": "design", + "type": "stringOrExpression", + "required": false, + "description": "Fallback for display when neither content nor supercontent are provided.", + "defaultValue": "" + }, + { + "name": "file", + "type": "stringOrExpression", + "required": false, + "description": "Base64-encoded string of a file associated with an asset.", + "defaultValue": "" + }, + { + "name": "fileProperties", + "type": "stringOrExpression", + "required": false, + "description": "Stores the different properties that this asset refers to if it is a file type.", + "defaultValue": "" + }, + { + "name": "generateFrom", + "type": "stringOrExpression", + "required": false, + "description": "Tells the sending compiler what view to use for generating this view's content.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "locked", + "type": "stringOrExpression", + "required": false, + "description": "Specifies if the asset can be modified or not.", + "defaultValue": "" + }, + { + "name": "maxBlocks", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of blocks within an asset.", + "defaultValue": "" + }, + { + "name": "minBlocks", + "type": "stringOrExpression", + "required": false, + "description": "Minimum number of blocks within an asset.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": false, + "description": "Name of the asset, set by the client. 200 character maximum.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The JSON payload required to create a new asset.", + "defaultValue": "{\n \"assetType\": {\n \"name\": \"htmlemail\",\n \"id\": 208\n },\n \"name\": \"Example Email Created via API\",\n \"customerKey\": \"MyUniqueEmailAssetKey\",\n \"views\": {\n \"html\": {\n \"content\": \"

Hello, this is an email from the SFMC API!

\"\n }\n }\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sharingProperties", + "type": "stringOrExpression", + "required": false, + "description": "Allows you to share content with one or more business units that have Content Builder Sharing enabled.", + "defaultValue": "" + }, + { + "name": "sharingProperties.sharedWith", + "type": "stringOrExpression", + "required": false, + "description": "List of MID IDs the asset is shared with.", + "defaultValue": "" + }, + { + "name": "sharingProperties.sharingType", + "type": "stringOrExpression", + "required": false, + "description": "Indicates the permission that you are granting to the list of MIDs in sharedWith. Possible values are view, edit, or local.", + "defaultValue": "" + }, + { + "name": "slots", + "type": "stringOrExpression", + "required": false, + "description": "Slots within the asset.", + "defaultValue": "" + }, + { + "name": "superContent", + "type": "stringOrExpression", + "required": false, + "description": "Content that supersedes content in terms of display.", + "defaultValue": "" + }, + { + "name": "tags", + "type": "stringOrExpression", + "required": false, + "description": "List of tags associated with the asset.", + "defaultValue": "" + }, + { + "name": "template", + "type": "stringOrExpression", + "required": false, + "description": "Template the asset follows.", + "defaultValue": "" + }, + { + "name": "version", + "type": "stringOrExpression", + "required": false, + "description": "The version of the asset.", + "defaultValue": "" + }, + { + "name": "views", + "type": "stringOrExpression", + "required": false, + "description": "Views within an asset.", + "defaultValue": "" + } + ] }, { - "name": "getContactDeleteRequests", - "description": "Retrieves contact data deletion requests for GDPR compliance.", - "isHidden": false + "name": "updateCampaign", + "description": "Update Campaign", + "isHidden": false, + "parameters": [ + { + "name": "campaignCode", + "type": "stringOrExpression", + "required": false, + "description": "A campaign code to associate with the campaign.", + "defaultValue": "" + }, + { + "name": "campaignId", + "type": "stringOrExpression", + "required": true, + "description": "ID of the campaign to be updated.", + "defaultValue": "" + }, + { + "name": "color", + "type": "stringOrExpression", + "required": false, + "description": "The color used to identify the campaign in the Marketing Cloud Engagement web interface, expressed as an HTML color code.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "A description of the campaign.", + "defaultValue": "" + }, + { + "name": "favorite", + "type": "stringOrExpression", + "required": false, + "description": "Indicates whether to identify the campaign as a favorite.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The name of the campaign.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to create a new campaign.", + "defaultValue": "{\n \"name\": \"Final Hours for Summer Sale\",\n \"description\": \"Invite our most engaged customers to shop our Summer Sale before it ends.\",\n \"campaignCode\": \"summer2023\",\n \"color\": \"800080\",\n \"favorite\": false\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getJourneys", - "description": "Retrieves all journey interactions.", - "isHidden": false + "name": "createCategory", + "description": "Create Category", + "isHidden": false, + "parameters": [ + { + "name": "categoryType", + "type": "stringOrExpression", + "required": false, + "description": "The type of category, either asset or asset-shared, which is automatically set to the CategoryType of the parent category. If set to asset-shared, include the SharingProperties in the call.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "Description of the category.", + "defaultValue": "" + }, + { + "name": "enterpriseId", + "type": "number", + "required": false, + "description": "ID of the enterprise this business unit belongs to.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "memberId", + "type": "number", + "required": false, + "description": "ID of the member who creates the category.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "Required. Name of the category.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "parentId", + "type": "number", + "required": true, + "description": "Required. ID of the parent category.", + "defaultValue": "" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to create a new category.", + "defaultValue": "{\n \"Id\": 27,\n \"Name\": \"My Pictures\",\n \"ParentId\": 99,\n \"CategoryType\": \"asset\",\n \"MemberId\": 1500,\n \"EnterpriseId\": 1575\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sharingProperties", + "type": "object", + "required": false, + "description": "Allows you to share categories with one or more business units that have Content Builder Sharing enabled. Stores the MIDs of business units this category is shared with and the sharing type.", + "defaultValue": "" + }, + { + "name": "sharingProperties.sharedWith", + "type": "object", + "required": false, + "description": "List of up to 100 MID IDs the category is shared with. To share the category with all business units in the enterprise, and if your account has access to Content Builder Across Enterprise Sharing, set this to 0.", + "defaultValue": "" + }, + { + "name": "sharingProperties.sharingType", + "type": "stringOrExpression", + "required": false, + "description": "Indicates the permission that you are granting to the list of MIDs in SharedWith. The only possible value for categories is edit.", + "defaultValue": "" + } + ] }, { - "name": "insertDataExtensionRowSet", - "description": "Upserts rows in a data extension using its external key.", - "isHidden": false + "name": "createCampaign", + "description": "Create Campaign.", + "isHidden": false, + "parameters": [ + { + "name": "campaignCode", + "type": "stringOrExpression", + "required": false, + "description": "A campaign code to associate with the campaign.", + "defaultValue": "" + }, + { + "name": "color", + "type": "stringOrExpression", + "required": false, + "description": "The color used to identify the campaign in the Marketing Cloud Engagement web interface, expressed as an HTML color code.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "A description of the campaign.", + "defaultValue": "" + }, + { + "name": "favorite", + "type": "stringOrExpression", + "required": false, + "description": "Indicates whether to identify the campaign as a favorite.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The name of the campaign.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to create a new campaign.", + "defaultValue": "{\n \"name\": \"Final Hours for Summer Sale\",\n \"description\": \"Invite our most engaged customers to shop our Summer Sale before it ends.\",\n \"campaignCode\": \"summer2023\",\n \"color\": \"800080\",\n \"favorite\": false\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "sendEmailMessage", - "description": "Sends an email message.", - "isHidden": false + "name": "createEmailDefinition", + "description": "Create Email Definition", + "isHidden": false, + "parameters": [ + { + "name": "classification", + "type": "stringOrExpression", + "required": false, + "description": "The external key of a sending classification defined in Email Studio Administration. Only transactional classifications are permitted. Default is default transactional.", + "defaultValue": "" + }, + { + "name": "content.customerKey", + "type": "stringOrExpression", + "required": true, + "description": "Required. Unique identifier of the content asset.", + "defaultValue": "" + }, + { + "name": "definitionKey", + "type": "stringOrExpression", + "required": true, + "description": "Required. Unique, user-generated key to access the definition object.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "User-provided description of the send definition.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "Required. Name of the definition. Must be unique.", + "defaultValue": "" + }, + { + "name": "options.bcc", + "type": "array", + "required": false, + "description": "Include BCC email addresses with every send. To BCC dynamically at send time, create a profile attribute and use the %%attribute%% syntax.", + "defaultValue": "" + }, + { + "name": "options.cc", + "type": "array", + "required": false, + "description": "Include CC email addresses with every send. To CC dynamically at send time, create a profile attribute and use the %%attribute%% syntax.", + "defaultValue": "" + }, + { + "name": "options.createJourney", + "type": "boolean", + "required": false, + "description": "A value of true updates the send definition to make it available in Journey Builder as a Transactional Send Journey. After the definition is tied to a Transactional Send Journey, the definition remains part of Journey Builder. You can’t unlink a journey from a definition without recreating the transactional send definition.", + "defaultValue": "" + }, + { + "name": "options.trackLinks", + "type": "boolean", + "required": false, + "description": "Wraps links for tracking and reporting. Default is true.", + "defaultValue": "true" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to create a new email definition.", + "defaultValue": "{\n \"definitionKey\": \"2FA_order_accounts\",\n \"status\": \"Active\",\n \"name\": \"My Unique Definition Name\",\n \"description\": \"Created via REST\",\n \"classification\": \"Default Transactional\",\n \"content\": {\n \"customerKey\": \"bebf8650-137a-494c-8727-cdeb32534961\"\n },\n \"subscriptions\": {\n \"list\": \"test-list\",\n \"dataExtension\": \"test-de\",\n \"autoAddSubscriber\": true,\n \"updateSubscriber\": true\n },\n \"options\": {\n \"trackLinks\": true,\n \"cc\": [\n \"cc_address@example.com\"\n ],\n \"bcc\": [\n \"bcc_address@example.com\"\n ],\n \"createJourney\": true\n }\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "status", + "type": "stringOrExpression", + "required": false, + "description": "Operational state of the definition: active, inactive, or deleted. A message sent to an active definition is processed and delivered. A message sent to an inactive definition isn’t processed or delivered. Instead, the message is queued for later processing for up to three days.", + "defaultValue": "" + }, + { + "name": "subscriptions.autoAddSubscriber", + "type": "boolean", + "required": false, + "description": "Adds the recipient’s email address and contact key as a subscriber key to subscriptions.list. Default is true.", + "defaultValue": "true" + }, + { + "name": "subscriptions.dataExtension", + "type": "stringOrExpression", + "required": false, + "description": "The external key of the triggered send data extension. Each request inserts as a new row in the data extension. To deduplicate at send time, use messageKey. Don’t use a primary key on the triggered send data extension.", + "defaultValue": "" + }, + { + "name": "subscriptions.list", + "type": "stringOrExpression", + "required": true, + "description": "Required. The external key of the list or all subscribers. Contains the subscriber keys and profile attributes.", + "defaultValue": "" + }, + { + "name": "subscriptions.updateSubscriber", + "type": "boolean", + "required": false, + "description": "Updates the recipient’s contact key as a subscriber key with the provided email address and profile attributes to subscriptions.list. Default is true.", + "defaultValue": "true" + } + ] }, { - "name": "sendSmsMessage", - "description": "Sends an SMS message.", - "isHidden": false + "name": "deleteCampaign", + "description": "Delete Campaign.", + "isHidden": false, + "parameters": [ + { + "name": "campaignId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the campaign to delete.", + "defaultValue": "" + } + ] }, { - "name": "updateAsset", - "description": "Updates a full asset.", - "isHidden": false + "name": "deleteContact", + "description": "Deletes Contact.", + "isHidden": false, + "parameters": [ + { + "name": "deleteOperationType", + "type": "stringOrExpression", + "required": true, + "description": "Type of delete operation to perform.", + "defaultValue": "ContactAndAttributes" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "values", + "type": "stringOrExpression", + "required": true, + "description": "Array of contact ID values to delete.", + "defaultValue": "" + } + ] }, { - "name": "updateCampaign", - "description": "Updates an existing marketing campaign.", - "isHidden": false + "name": "createSmsDefinition", + "description": "Create SMS Definition", + "isHidden": false, + "parameters": [ + { + "name": "content.message", + "type": "stringOrExpression", + "required": true, + "description": "Required. The message content that you want sent with each message. Use substitution strings and AMPscript to personalize the message.", + "defaultValue": "" + }, + { + "name": "definitionKey", + "type": "stringOrExpression", + "required": true, + "description": "Required. Unique, user-generated key to access the definition object.", + "defaultValue": "" + }, + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "User-provided description of the send definition.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "Required. Name of the definition. Must be unique.", + "defaultValue": "" + }, + { + "name": "options.SmsMessageRegulatoryAuthorityTemplateId", + "type": "stringOrExpression", + "required": false, + "description": "The ID of the DLT template used in the SMS. This attribute is available only for customers in India.", + "defaultValue": "" + }, + { + "name": "options.urlShortenerOptions.IsLinkShorteningEnabled", + "type": "boolean", + "required": false, + "description": "Indicates if URL shortening is enabled for URLs in the message body. The values are true and false.", + "defaultValue": "" + }, + { + "name": "options.urlShortenerOptions.isSubscriberTrackingEnabled", + "type": "boolean", + "required": false, + "description": "Indicates if subscriber level tracking is enabled for URLs in the message body. The values are true and false. The value is true if the value of shortenerType is SFMC.", + "defaultValue": "" + }, + { + "name": "options.urlShortenerOptions.shortenerType", + "type": "stringOrExpression", + "required": false, + "description": "The type of URL shortener. The value is SFMC.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to create a new SMS definition.", + "defaultValue": "{\n \"definitionKey\": \"account-reset\",\n \"name\": \"account-reset\",\n \"description\": \"Using SMS Transactional API\",\n \"content\": {\n \"message\": \"%%FirstName%%, your 2FA token is %%password%%\"\n },\n \"subscriptions\": {\n \"shortCode\": \"8201221\",\n \"countryCode\": \"US\",\n \"keyword\": \"PASSWORD\"\n },\n \"options\": {\n \"urlShortenerOptions\": {\n \"isLinkShorteningEnabled\": true,\n \"isSubscriberTrackingEnabled\": true,\n \"shortenerType\": \"SFMC\"\n },\n \"smsMessageRegulatoryAuthorityTemplateId\": \"1107170833298425627\"\n }\n}" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "status", + "type": "stringOrExpression", + "required": false, + "description": "Operational state of the definition: active, inactive, or deleted. A message sent to an active definition is processed and delivered. A message sent to an inactive definition isn’t processed or delivered. Instead, the message is queued for later processing for up to three days.", + "defaultValue": "" + }, + { + "name": "subscriptions.autoAddSubscriber", + "type": "boolean", + "required": false, + "description": "Allows you to add a recipient as subscriber against the shortCode using contactKey. When false, the message is rejected if contactKey doesn’t exist as a subscriber. Default is true.", + "defaultValue": "true" + }, + { + "name": "subscriptions.countryCode", + "type": "stringOrExpression", + "required": false, + "description": "The country code associated with the shortCode for the mobile transmissions for each message on this definition. Don't use for long codes, unless your account configuration requires it.", + "defaultValue": "" + }, + { + "name": "subscriptions.keyword", + "type": "stringOrExpression", + "required": true, + "description": "Required. The keyword used to track messages.", + "defaultValue": "" + }, + { + "name": "subscriptions.shortCode", + "type": "stringOrExpression", + "required": true, + "description": "Required. The short or long code for the mobile transmissions for each message on this definition.", + "defaultValue": "" + } + ] }, { - "name": "updateContact", - "description": "Updates a contact record.", - "isHidden": false + "name": "sendSmsMessage", + "description": "Send SMS Message", + "isHidden": false, + "parameters": [ + { + "name": "attributes", + "type": "stringOrExpression", + "required": false, + "description": "Key-value pairs used to personalize the message globally.", + "defaultValue": "" + }, + { + "name": "content", + "type": "stringOrExpression", + "required": false, + "description": "Overrides content in send definition. Supports substitution strings.", + "defaultValue": "" + }, + { + "name": "definitionKey", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the send definition.", + "defaultValue": "" + }, + { + "name": "inputStructure", + "type": "comboOrExpression", + "required": false, + "description": "The type of input data structure. Supported values: FORM, INLINE", + "defaultValue": "FORM" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "payload", + "type": "stringOrExpression", + "required": true, + "description": "The properties required to send SMS message.", + "defaultValue": "{\n \"definitionKey\": \"SEND_DEFINITION\",\n \"recipients\": [\n {\n \"contactKey\": \"Astro25\",\n \"to\": \"15555551234\",\n \"messageKey\": \"nFL4ULgheUeaGbPIMzJJSw\",\n \"attributes\": {\n \"FirstName\": \"Astro\",\n \"Password\": \"1234567\"\n }\n },\n {\n \"contactKey\": \"Codey36\",\n \"to\": \"15555554321\",\n \"messageKey\": \"GV1LhQ6NFkqFUAE1IsoQ9Q\",\n \"attributes\": {\n \"FirstName\": \"Code\",\n \"Password\": \"2345678\"\n }\n }\n ],\n \"attributes\": {\n \"RequestTrackingAttribute\": \"2\"\n }\n}" + }, + { + "name": "recipients", + "type": "stringOrExpression", + "required": true, + "description": "An array of recipient objects that contain tracking and personalization metadata.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "subscriptions", + "type": "stringOrExpression", + "required": false, + "description": "Resubscribe the recipient even if previously opted out.", + "defaultValue": "false" + } + ] } ], "connections": [ { "name": "SalesforceMarketingCloud", - "description": "Connection to Salesforce Marketing Cloud using subdomain, client ID, and client secret.", - "iconUrl": "" + "description": "Salesforce Marketing Cloud Connection", + "iconUrl": "", + "parameters": [ + { + "name": "accountId", + "type": "stringOrExpression", + "required": false, + "description": "Account identifier, or MID, of the target business unit.", + "defaultValue": "" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "Client ID issued when you create the API integration in Installed Packages.", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "Client secret issued when you create the API integration in Installed Packages.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Salesforce Marketing Cloud connection.", + "defaultValue": "SFMC_1" + }, + { + "name": "subdomain", + "type": "string", + "required": true, + "description": "Your Salesforce Marketing Cloud sub domain.", + "defaultValue": "" + } + ] } ] }, @@ -4679,33 +28246,168 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-salesforcepubsub", + "id": "", "version": { - "tagName": "0.1.2", - "releaseId": "219670190", + "tagName": "0.1.4", + "releaseId": "233382244", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "Get Schema", - "description": "This is getSchema operation.", - "isHidden": false - }, - { - "name": "Get Topic", - "description": "This is getTopic operation.", - "isHidden": false - }, - { - "name": "Publish", - "description": "This is publish operation.", - "isHidden": false + "name": "getSchema", + "description": "GetSchema", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "schema_id", + "type": "stringOrExpression", + "required": true, + "description": "Schema Id for this event.", + "defaultValue": "" + } + ] + }, + { + "name": "publish", + "description": "Publish", + "isHidden": false, + "parameters": [ + { + "name": "events", + "type": "stringOrExpression", + "required": true, + "description": "Batch of ProducerEvent(s) to send", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "topic_name", + "type": "stringOrExpression", + "required": true, + "description": "Topic to publish on", + "defaultValue": "" + } + ] + }, + { + "name": "getTopic", + "description": "GetTopic", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "topic_name", + "type": "stringOrExpression", + "required": true, + "description": "The name of the topic to retrieve", + "defaultValue": "" + } + ] } ], "connections": [ { "name": "salesforcePubSub", - "description": "Connection for Salesforce Pub/Sub API operations.", - "iconUrl": "" + "description": "salesforce pubSub connection", + "iconUrl": "", + "parameters": [ + { + "name": "authType", + "type": "combo", + "required": true, + "description": "The authentication type for the connection. Supported values: None, Basic Auth", + "defaultValue": "None" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the pubsub connection.", + "defaultValue": "salesforcePubSub_CONNECTION" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "The password for the root URL.", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "The port for the root URL.", + "defaultValue": "" + }, + { + "name": "securityToken", + "type": "stringOrExpression", + "required": true, + "description": "User's security token.", + "defaultValue": "" + }, + { + "name": "server", + "type": "stringOrExpression", + "required": true, + "description": "The service root URL.", + "defaultValue": "" + }, + { + "name": "tlsEnabled", + "type": "checkbox", + "required": false, + "description": "Enabling the secure channel using TLS", + "defaultValue": "false" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "The username for the connection.", + "defaultValue": "" + } + ] } ] }, @@ -4720,1102 +28422,6105 @@ export const CONNECTOR_DB = [ "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", "mavenArtifactId": "mi-connector-salesforcerest", + "id": "", "version": { - "tagName": "2.0.1", - "releaseId": "191924791", + "tagName": "3.0.0", + "releaseId": "243385304", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Initial configuration file for salesforce rest connector", - "isHidden": true - }, - { - "name": "callWithRetry", - "description": "Templating the retry call", - "isHidden": true - }, - { - "name": "callOptions", - "description": "Templating the http call types GET, POST, etc.", - "isHidden": true + "name": "soapQueryMore", + "description": "Query More", + "isHidden": false, + "parameters": [ + { + "name": "batchSize", + "type": "integerOrExpression", + "required": true, + "description": "The number of records to return.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "describeGlobal", - "description": "Lists the available objects and their metadata for your organization’s data", - "isHidden": false + "name": "getUnprocessedResults", + "description": "Get Unprocessed Results", + "isHidden": false, + "parameters": [ + { + "name": "filePath", + "type": "stringOrExpression", + "required": false, + "description": "The path to the file to write the results to.", + "defaultValue": "" + }, + { + "name": "includeResultTo", + "type": "comboOrExpression", + "required": true, + "description": "Supported values: FILE, BODY", + "defaultValue": "BODY" + }, + { + "name": "jobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job that you want to get the unprocessed results for.", + "defaultValue": "" + }, + { + "name": "outputType", + "type": "comboOrExpression", + "required": true, + "description": "Output Content Type Supported values: JSON, CSV", + "defaultValue": "JSON" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "describeSObject", - "description": "Completely describes the individual metadata at all levels for the specified object", - "isHidden": false - }, - { - "name": "listResourcesByApiVersion", - "description": "Lists available resources for the specified API version", - "isHidden": false + "description": "Describe sObject", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The type of sObject", + "defaultValue": "" + } + ] }, { - "name": "sObjectBasicInfo", - "description": "Describes the individual metadata for the specified object", - "isHidden": false + "name": "createQueryJob", + "description": "Create Query Job", + "isHidden": false, + "parameters": [ + { + "name": "columnDelimiter", + "type": "comboOrExpression", + "required": true, + "description": "The path of the file to be uploaded Supported values: COMMA, SEMICOLON, TAB, PIPE, CARET, BACKQUOTE", + "defaultValue": "COMMA" + }, + { + "name": "lineEnding", + "type": "comboOrExpression", + "required": true, + "description": "The path of the file to be uploaded Supported values: CRLF, LF", + "defaultValue": "" + }, + { + "name": "operation", + "type": "comboOrExpression", + "required": true, + "description": "The path of the file to be uploaded Supported values: QUERY, QUERY_ALL", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "query", + "type": "stringOrExpression", + "required": true, + "description": "The path of the file to be uploaded", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapGetDeleted", + "description": "Get Delete Records", + "isHidden": false, + "parameters": [ + { + "name": "endDate", + "type": "stringOrExpression", + "required": true, + "description": "The end date for deleted records lookup", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectType", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + }, + { + "name": "startDate", + "type": "stringOrExpression", + "required": true, + "description": "The start date for deleted records lookup", + "defaultValue": "" + } + ] }, { - "name": "sObjectRows", - "description": "Accesses records based on the specified object ID", - "isHidden": false + "name": "createJob", + "description": "Create Job", + "isHidden": false, + "parameters": [ + { + "name": "assignmentRuleId", + "type": "stringOrExpression", + "required": false, + "description": "Optional ID of an assignment rule to apply when processing Case or Lead records.", + "defaultValue": "" + }, + { + "name": "columnDelimiter", + "type": "comboOrExpression", + "required": true, + "description": "Character used to separate column values in the CSV file. Supported values: COMMA, SEMICOLON, TAB, PIPE, CARET, BACKQUOTE", + "defaultValue": "COMMA" + }, + { + "name": "externalIdFieldName", + "type": "stringOrExpression", + "required": false, + "description": "API name of the external ID field used for matching records during UPSERT operations.", + "defaultValue": "" + }, + { + "name": "lineEnding", + "type": "comboOrExpression", + "required": true, + "description": "Line terminator used in the CSV file: CRLF (Windows) or LF (Unix). Supported values: CRLF, LF", + "defaultValue": "" + }, + { + "name": "object", + "type": "stringOrExpression", + "required": true, + "description": "API name of the Salesforce object (e.g., Account, Contact) that the job targets.", + "defaultValue": "" + }, + { + "name": "operation", + "type": "comboOrExpression", + "required": true, + "description": "Bulk data action to perform on the records in this job. Supported values: insert, update, upsert, delete, hardDelete", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "When enabled, replaces the original message body with the operation result.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable that will store the API response payload.", + "defaultValue": "" + } + ] + }, + { + "name": "soapDescribeSObjects", + "description": "Describe SObjects", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobjects", + "type": "stringOrExpression", + "required": true, + "description": "The sobject types", + "defaultValue": "" + } + ] }, { - "name": "listAvailableApiVersion", - "description": "List summary information about each REST API version currently available.", - "isHidden": false + "name": "abortJob", + "description": "Abort Job", + "isHidden": false, + "parameters": [ + { + "name": "jobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to abort", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapSearch", + "description": "Search", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "searchString", + "type": "stringOrExpression", + "required": true, + "description": "The searchString to get the Result.", + "defaultValue": "" + } + ] + }, + { + "name": "soapUndelete", + "description": "Un-Delete Records", + "isHidden": false, + "parameters": [ + { + "name": "allOrNone", + "type": "integerOrExpression", + "required": true, + "description": "Whether to rollback changes if an object fails(Default value is 0).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobjects", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + } + ] + }, + { + "name": "soapFindDuplicatesByIds", + "description": "Find Duplicates By IDs", + "isHidden": false, + "parameters": [ + { + "name": "ids", + "type": "stringOrExpression", + "required": true, + "description": "Record ids", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "sObjectPlatformAction", - "description": "PlatformAction is a virtual read-only object that enables you to query for actions—such as standard and custom buttons, quick actions, and productivity actions—that should be displayed in a UI, given a user, a context, device format, and a record ID.", - "isHidden": false + "name": "deleteJob", + "description": "Delete Job", + "isHidden": false, + "parameters": [ + { + "name": "jobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to delete", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapRetrieve", + "description": "Retrieve Field Values of Salesforce Record", + "isHidden": false, + "parameters": [ + { + "name": "fieldList", + "type": "stringOrExpression", + "required": true, + "description": "A comma-separated list of the fields you want to retrieve from the records.", + "defaultValue": "" + }, + { + "name": "objectIDS", + "type": "stringOrExpression", + "required": true, + "description": "XML representation of the records to retrieve, as shown in the following example.", + "defaultValue": "" + }, + { + "name": "objectType", + "type": "stringOrExpression", + "required": true, + "description": "The object type of the records.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapDescribeSObject", + "description": "Describe SObject", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobject", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + } + ] }, { - "name": "listOrganizationLimits", - "description": "List the organization limits", - "isHidden": false + "name": "upsert", + "description": "Upsert", + "isHidden": false, + "parameters": [ + { + "name": "externalIDField", + "type": "stringOrExpression", + "required": true, + "description": "The external Id Field of the sobject", + "defaultValue": "" + }, + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "The value of the field of a particular sObject.", + "defaultValue": "" + }, + { + "name": "Id", + "type": "stringOrExpression", + "required": true, + "description": "The Id of the sobject will be update", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The object type whose metadata you want to use.", + "defaultValue": "" + } + ] }, { - "name": "sObjectRowsByExternalId", - "description": "SObject Rows by External ID resource to retrieve records with a specific external ID", - "isHidden": false + "name": "compositeBatch", + "description": "Composite Batch", + "isHidden": false, + "parameters": [ + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "returnHeadersOfSObjectRowsByExternalId", - "description": "Return headers that are returned by sending a GET request to the sObject Rows by External ID resource.", - "isHidden": false + "name": "getQueryJobResults", + "description": "Get Job Info", + "isHidden": false, + "parameters": [ + { + "name": "filePath", + "type": "stringOrExpression", + "required": false, + "description": "The path to the file to write the results to.", + "defaultValue": "" + }, + { + "name": "includeResultTo", + "type": "comboOrExpression", + "required": true, + "description": "Supported values: FILE, BODY", + "defaultValue": "BODY" + }, + { + "name": "locator", + "type": "stringOrExpression", + "required": false, + "description": "The locator of the result set to get the information for", + "defaultValue": "" + }, + { + "name": "maxRecords", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of records to return in the response.", + "defaultValue": "" + }, + { + "name": "outputType", + "type": "comboOrExpression", + "required": true, + "description": "Output Content Type Supported values: JSON, CSV", + "defaultValue": "JSON" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queryJobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to get the information for.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "viewRelevantItems", - "description": "Retrieves the current user’s most relevant items that include up to 50 of the most recently viewed or updated records for each object in the user’s global search scope.", - "isHidden": false + "name": "describeGlobal", + "description": "Describe Global", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { "name": "create", - "description": "Insert sObject(s) synapse library", - "isHidden": false + "description": "Create", + "isHidden": false, + "parameters": [ + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "The value of the field of a particular sObject.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The object type whose metadata you want to use.", + "defaultValue": "" + } + ] }, { - "name": "delete", - "description": "Delete sObject(s) synapse library", - "isHidden": false + "name": "getQueryJobInfo", + "description": "Get Job Info", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queryJobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to get the information for.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapCreate", + "description": "Create Records", + "isHidden": false, + "parameters": [ + { + "name": "allOrNone", + "type": "integerOrExpression", + "required": true, + "description": "Whether to rollback changes if an object fails(Default value is 0).", + "defaultValue": "" + }, + { + "name": "allowFieldTruncate", + "type": "integerOrExpression", + "required": true, + "description": "Whether to truncates strings that exceed the field length(Default value is 0).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobjects", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + } + ] }, { - "name": "getDeleted", - "description": "Retrieves the list of individual records that have been deleted within the given timespan for the specified object.", - "isHidden": false + "name": "getFailedResults", + "description": "Get Failed Results", + "isHidden": false, + "parameters": [ + { + "name": "filePath", + "type": "stringOrExpression", + "required": false, + "description": "The path to the file to write the results to.", + "defaultValue": "" + }, + { + "name": "includeResultTo", + "type": "comboOrExpression", + "required": true, + "description": "Supported values: FILE, BODY", + "defaultValue": "BODY" + }, + { + "name": "jobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job that you want to get the failed results for.", + "defaultValue": "" + }, + { + "name": "outputType", + "type": "comboOrExpression", + "required": true, + "description": "Output Content Type Supported values: JSON, CSV", + "defaultValue": "JSON" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapLogout", + "description": "Logout", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "retrieveSObject", + "description": "sObject Rows", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "rowId", + "type": "stringOrExpression", + "required": true, + "description": "Specific object ID to access the record.", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The type of sObject", + "defaultValue": "" + } + ] }, { "name": "getUpdated", - "description": "Retrieves the list of individual records that have been updated within the given timespan for the specified object.", - "isHidden": false - }, - { - "name": "update", - "description": "Update or update sObject(s) synapse library", - "isHidden": false - }, - { - "name": "recentlyViewedItem", - "description": "Gets the most recently accessed items that were viewed or referenced by the current user", - "isHidden": false - }, - { - "name": "retrieveFieldValues", - "description": "Retrieve specific field values from a record", - "isHidden": false - }, - { - "name": "createMultipleRecords", - "description": "Insert multiple sObject(s)", - "isHidden": false - }, - { - "name": "createNestedRecords", - "description": "Insert nested sObject(s)", - "isHidden": false + "description": "Get Updated", + "isHidden": false, + "parameters": [ + { + "name": "end", + "type": "stringOrExpression", + "required": true, + "description": "The end date and time for deleted lookup", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The object type whose metadata you want to retrieve.", + "defaultValue": "" + }, + { + "name": "start", + "type": "stringOrExpression", + "required": true, + "description": "The start date and time for deleted lookup", + "defaultValue": "" + } + ] + }, + { + "name": "soapQueryAll", + "description": "Query All", + "isHidden": false, + "parameters": [ + { + "name": "batchSize", + "type": "integerOrExpression", + "required": true, + "description": "The number of records to return.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queryString", + "type": "stringOrExpression", + "required": true, + "description": "The queryString to get the results from API.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "retrieveFieldValuesFromExternalObject", - "description": "Retrieve specific field values from an External Object", - "isHidden": false + "name": "getSuccessfulResults", + "description": "Get Successful Results", + "isHidden": false, + "parameters": [ + { + "name": "filePath", + "type": "stringOrExpression", + "required": false, + "description": "The path to the file to write the results to.", + "defaultValue": "" + }, + { + "name": "includeResultTo", + "type": "comboOrExpression", + "required": true, + "description": "Supported values: FILE, BODY", + "defaultValue": "BODY" + }, + { + "name": "jobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job that you want to get the successful results for.", + "defaultValue": "" + }, + { + "name": "outputType", + "type": "comboOrExpression", + "required": true, + "description": "Output Content Type Supported values: JSON, CSV", + "defaultValue": "JSON" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapDelete", + "description": "Delete Records", + "isHidden": false, + "parameters": [ + { + "name": "allOrNone", + "type": "integerOrExpression", + "required": true, + "description": "Whether to rollback changes if an object fails(Default value is 0).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobjects", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + } + ] }, { - "name": "retrieveStandardFieldValuesFromExternalObjectWithExternalId", - "description": "Retrieve specific Standard field values from an External Object using External Id", - "isHidden": false + "name": "getAllQueryJobInfo", + "description": "Get All Job Info", + "isHidden": false, + "parameters": [ + { + "name": "isPkChunkingEnabled", + "type": "booleanOrExpression", + "required": false, + "description": "Is PK Chunking Enabled", + "defaultValue": "" + }, + { + "name": "jobType", + "type": "comboOrExpression", + "required": false, + "description": "Job Type Supported values: Classic, V2Query, V2Ingest, All", + "defaultValue": "All" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queryLocator", + "type": "stringOrExpression", + "required": false, + "description": "Query Locator", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapFindDuplicates", + "description": "Find Duplicates", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobjects", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + } + ] }, { - "name": "upsert", - "description": "Updating a record or Insert a new Record if there is no record associate with the Id using External ID.", - "isHidden": false + "name": "resetPassword", + "description": "Reset Password", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "userId", + "type": "stringOrExpression", + "required": true, + "description": "The Id of the user.", + "defaultValue": "" + } + ] + }, + { + "name": "soapConvertLead", + "description": "Convert Lead", + "isHidden": false, + "parameters": [ + { + "name": "leadconvertrequests", + "type": "stringOrExpression", + "required": true, + "description": "The convert lead requests", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapGetServerTimestamp", + "description": "Get Server Timestamp", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createUsingExternalId", - "description": "Creating a new record based on the field values included in the request body. This resource does not require the use of an external ID field.", - "isHidden": false + "name": "closeJob", + "description": "Close Job", + "isHidden": false, + "parameters": [ + { + "name": "jobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to abort", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteUsingExternalId", - "description": "Deleting a record based on the value of the specified external ID field.", - "isHidden": false + "name": "update", + "description": "Update", + "isHidden": false, + "parameters": [ + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "The value of the field of a particular sObject.", + "defaultValue": "" + }, + { + "name": "Id", + "type": "stringOrExpression", + "required": true, + "description": "The Id of the sobject will be update", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The object type whose metadata you want to use.", + "defaultValue": "" + } + ] }, { - "name": "createUsingSpecificSObjectQuickAction", - "description": "Creating a record via the specified quick action based on the field values included in the request body", - "isHidden": false + "name": "deleteQueryJob", + "description": "Delete Query Job", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queryJobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to delete", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapSetPassword", + "description": "Set Password", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "If using setPassword, the new password to assign to the user.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "userId", + "type": "stringOrExpression", + "required": true, + "description": "The user's Salesforce ID.", + "defaultValue": "" + } + ] + }, + { + "name": "soapGetUpdated", + "description": "Get Updated Records", + "isHidden": false, + "parameters": [ + { + "name": "endDate", + "type": "stringOrExpression", + "required": true, + "description": "The end date for deleted records lookup", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectType", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + }, + { + "name": "startDate", + "type": "stringOrExpression", + "required": true, + "description": "The start date for deleted records lookup", + "defaultValue": "" + } + ] }, { - "name": "getRecordsUsingRelationships", - "description": "Gets a record based on the specified object, record ID, and relationship field", - "isHidden": false + "name": "getDeleted", + "description": "Get Deleted", + "isHidden": false, + "parameters": [ + { + "name": "end", + "type": "stringOrExpression", + "required": true, + "description": "The end date and time for deleted lookup", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The object type whose metadata you want to retrieve.", + "defaultValue": "" + }, + { + "name": "start", + "type": "stringOrExpression", + "required": true, + "description": "The start date and time for deleted lookup", + "defaultValue": "" + } + ] + }, + { + "name": "soapQuery", + "description": "Query", + "isHidden": false, + "parameters": [ + { + "name": "batchSize", + "type": "integerOrExpression", + "required": true, + "description": "The number of records to return.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queryString", + "type": "stringOrExpression", + "required": true, + "description": "The queryString to get the results from API.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "updateUsingRelationships", - "description": "Updates a parent record based on the specified object, record ID, and relationship field name", - "isHidden": false + "name": "setPassword", + "description": "Set Password", + "isHidden": false, + "parameters": [ + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "Provide a JSON string with the new password, e.g. {\"NewPassword\":\"MyNewP@ssw0rd\"}.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "userId", + "type": "stringOrExpression", + "required": true, + "description": "Specify the Salesforce user’s 15- or 18-character ID.", + "defaultValue": "" + } + ] + }, + { + "name": "soapMerge", + "description": "Merge Records", + "isHidden": false, + "parameters": [ + { + "name": "mergerequests", + "type": "stringOrExpression", + "required": true, + "description": "WThe merge requests.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "deleteUsingRelationships", - "description": "Deletes a parent record based on the specified object, record ID, and relationship field name", - "isHidden": false + "name": "compositeGraph", + "description": "Composite Graph", + "isHidden": false, + "parameters": [ + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "createTree", + "description": "Create Nested Records", + "isHidden": false, + "parameters": [ + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "The value of the field of a particular sObject.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The object type whose metadata you want to retrieve.", + "defaultValue": "" + } + ] }, { - "name": "getObjectRecordCounts", - "description": "Lists information about object record counts in your organization.", - "isHidden": false + "name": "search", + "description": "Search", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "q", + "type": "stringOrExpression", + "required": true, + "description": "The SOQL query to execute the search", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "createUsingSObjectCollections", - "description": "Creates records using sObject collections. Can add up to 200 records", - "isHidden": false + "name": "abortQueryJob", + "description": "Abort Query Job", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queryJobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to abort", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapResetPassword", + "description": "Reset Password", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "userId", + "type": "stringOrExpression", + "required": true, + "description": "The user's Salesforce ID.", + "defaultValue": "" + } + ] + }, + { + "name": "soapDescribeGlobal", + "description": "DescribeGlobal", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapGetUserInfo", + "description": "Get User Info", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapUpsert", + "description": "Update or Insert Records", + "isHidden": false, + "parameters": [ + { + "name": "allOrNone", + "type": "integerOrExpression", + "required": true, + "description": "Whether to rollback changes if an object fails(Default value is 0).", + "defaultValue": "" + }, + { + "name": "allowFieldTruncate", + "type": "integerOrExpression", + "required": true, + "description": "Whether to truncates strings that exceed the field length(Default value is 0).", + "defaultValue": "" + }, + { + "name": "externalId", + "type": "stringOrExpression", + "required": true, + "description": "The field containing the record ID", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobjects", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + } + ] }, { - "name": "deleteRecordsUsingSObjectCollections", - "description": "Deletes records using sObject collections. Can delete up to 200 records", - "isHidden": false + "name": "getJobInfo", + "description": "Get Job Info", + "isHidden": false, + "parameters": [ + { + "name": "jobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to get the information for.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "soapSendEmail", + "description": "Send Email", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sendEmail", + "type": "stringOrExpression", + "required": true, + "description": "XML representation of the email, as shown in the example.", + "defaultValue": "" + } + ] + }, + { + "name": "soapUpdate", + "description": "Update Records", + "isHidden": false, + "parameters": [ + { + "name": "allOrNone", + "type": "integerOrExpression", + "required": true, + "description": "Whether to rollback changes if an object fails(Default value is 0).", + "defaultValue": "" + }, + { + "name": "allowFieldTruncate", + "type": "integerOrExpression", + "required": true, + "description": "Whether to truncates strings that exceed the field length(Default value is 0).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobjects", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + } + ] }, { - "name": "getRecordsUsingSObjectCollections", - "description": "Gets one or more records of the same object type using sObject collections.", - "isHidden": false + "name": "uploadJobData", + "description": "Upload Job Data", + "isHidden": false, + "parameters": [ + { + "name": "inputData", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to upload data to", + "defaultValue": "" + }, + { + "name": "jobId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the job to upload data to", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "getRecordsWithARequestBodyUsingSObjectCollections", - "description": "Gets one or more records of the same object type using sObject collections with a request body.", - "isHidden": false + "name": "getAllJobInfo", + "description": "Get All Job Info", + "isHidden": false, + "parameters": [ + { + "name": "isPkChunkingEnabled", + "type": "booleanOrExpression", + "required": false, + "description": "Is PK Chunking Enabled", + "defaultValue": "" + }, + { + "name": "jobType", + "type": "comboOrExpression", + "required": false, + "description": "Job Type Supported values: Classic, BigObjectIngest, V2Ingest, All", + "defaultValue": "All" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "queryLocator", + "type": "stringOrExpression", + "required": false, + "description": "Query Locator", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "createBulk", + "description": "Create Multiple Records", + "isHidden": false, + "parameters": [ + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "The value of the field of a particular sObject.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The object type whose metadata you want to retrieve.", + "defaultValue": "" + } + ] + }, + { + "name": "compositeRequest", + "description": "Send Multiple Requests Using Composite", + "isHidden": false, + "parameters": [ + { + "name": "fieldAndValue", + "type": "stringOrExpression", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "updateRecordsUsingSObjectCollections", - "description": "Updates records using sObject collections. Can update up to 200 records.", - "isHidden": false + "name": "getUserInformation", + "description": "Get User Information", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "userId", + "type": "stringOrExpression", + "required": true, + "description": "The Id of the user.", + "defaultValue": "" + } + ] + }, + { + "name": "soapEmptyRecycleBin", + "description": "Empty Recycle Bin", + "isHidden": false, + "parameters": [ + { + "name": "allOrNone", + "type": "integerOrExpression", + "required": true, + "description": "Whether to rollback changes if an object fails(Default value is 0).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sobjects", + "type": "stringOrExpression", + "required": true, + "description": "The sobject type", + "defaultValue": "" + } + ] }, { - "name": "upsertRecordsUsingSObjectCollections", - "description": "Either creates or updates (upsert) up to 200 records based on an external ID field using sObject collections", - "isHidden": false - }, + "name": "delete", + "description": "Delete", + "isHidden": false, + "parameters": [ + { + "name": "idToDelete", + "type": "stringOrExpression", + "required": true, + "description": "The Id of the object will be going to delete.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sObjectName", + "type": "stringOrExpression", + "required": true, + "description": "The object type whose metadata you want to retrieve.", + "defaultValue": "" + } + ] + }, + { + "name": "soapSendEmailMessage", + "description": "Send Email Message", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "sendEmailMessage", + "type": "stringOrExpression", + "required": true, + "description": "XML representation of the email IDs to send, as shown in the example.", + "defaultValue": "" + } + ] + } + ], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 13, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-salesforcerest.png" + }, + { + "connectorName": "ServiceNow", + "repoName": "esb-connector-servicenow", + "description": "The ServiceNow connector allows you to access the ServiceNow REST API through WSO2 MI. ServiceNow is a software platform that supports IT service management and automates common business processes. This software as a service (SaaS) platform contains a number of modular applications that can vary by instance and user. ", + "connectorType": "Connector", + "mavenGroupId": "org.wso2.integration.connector", + "mavenArtifactId": "mi-connector-servicenow", + "id": "", + "version": { + "tagName": "1.0.3", + "releaseId": "191494819", + "isLatest": true, + "isDeprecated": false, + "operations": [ { - "name": "createUsingQuickAction", - "description": "Creates a record via a quick action.", - "isHidden": false + "name": "init", + "description": "Service-Now configuration.", + "isHidden": false, + "parameters": [] }, { - "name": "getUserInformation", - "description": "Get User Information From Salesforce.", - "isHidden": false + "name": "getRecords", + "description": "Retrieves set of records from table.", + "isHidden": false, + "parameters": [] }, { - "name": "resetPassword", - "description": "Reset Password for Salesforce account for a specific User.", - "isHidden": false + "name": "getRecordById", + "description": "Retrieves record according to the system ID from table.", + "isHidden": false, + "parameters": [] }, { - "name": "setPassword", - "description": "Set new password for Salesforce account for a specific User.", - "isHidden": false + "name": "postRecord", + "description": "Insert a record into a table.", + "isHidden": false, + "parameters": [] }, { - "name": "getUserPasswordExpirationStatus", - "description": "Gets a user’s password expiration status based on the specified user ID", - "isHidden": false + "name": "patchRecordById", + "description": "Patch a record from table by specifying system ID.", + "isHidden": false, + "parameters": [] }, { - "name": "returnHeadersForUserPassword", - "description": "Returns only the headers that are returned by sending a GET request to the sObject User Password resource.", - "isHidden": false + "name": "deleteRecordById", + "description": "Delete a record from table by specifying system ID.", + "isHidden": false, + "parameters": [] }, { - "name": "getSelfServiceUserPasswordExpirationStatus", - "description": "Retrieves a self-service user’s password expiration status based on the specified user ID.", - "isHidden": false + "name": "putRecordById", + "description": "Put a record to table by specifying system ID.", + "isHidden": false, + "parameters": [] }, { - "name": "resetSelfServiceUserPassword", - "description": "Reset Password for Salesforce account for a specific self-service.", - "isHidden": false + "name": "postRecordStagingTable", + "description": "This method inserts incoming data into a specified staging table and triggers transformation based on predefined transform maps in the import set table.", + "isHidden": false, + "parameters": [] }, { - "name": "returnHeadersForSelfServiceUserPassword", - "description": "Returns only the headers that are returned by sending a GET request to the sObject Self-Service User Password resource.", - "isHidden": false + "name": "getRecordsStagingTable", + "description": "This method retrieves the associated record and resulting transformation result.", + "isHidden": false, + "parameters": [] }, { - "name": "setSelfServiceUserPassword", - "description": "Sets a self-service user’s password based on the specified user ID. The password provided in the request body replaces the user’s existing password.", - "isHidden": false - }, - { - "name": "listApprovals", - "description": "Get the List of Approvals.", - "isHidden": false - }, - { - "name": "returnHeadersForApprovals", - "description": "Returns only the headers that are returned by the listApprovals operation.", - "isHidden": false - }, - { - "name": "submitApproveOrRejectApprovals", - "description": "Submits a particular record if that entity supports an approval process and one has already been defined. Records can be approved and rejected if the current user is an assigned approver.", - "isHidden": false - }, - { - "name": "listViews", - "description": "Returns the list of list views for the specified sObject, including the ID and other basic information about each list view", - "isHidden": false - }, - { - "name": "listViewById", - "description": "get basic information for a specific list view by ID", - "isHidden": false - }, - { - "name": "recentListViews", - "description": "Returns the list of recently used list views for the given sObject type", - "isHidden": false - }, - { - "name": "describeListViewById", - "description": "Returns detailed information about a list view, including the ID, the columns, and the SOQL query.", - "isHidden": false - }, - { - "name": "listViewResults", - "description": "Executes the SOQL query for the list view and returns the resulting data and presentation information.", - "isHidden": false - }, - { - "name": "query", - "description": "Executes the specified SOQL query to retrieve", - "isHidden": false - }, - { - "name": "queryPerformanceFeedback", - "description": "Retrieving query performance feedback without executing the query", - "isHidden": false - }, - { - "name": "listviewQueryPerformanceFeedback", - "description": "Retrieving query performance feedback on a report or list view", - "isHidden": false - }, - { - "name": "queryMore", - "description": "Retrieving additional query results if the initial results are too large", - "isHidden": false - }, - { - "name": "queryAll", - "description": "Executes the specified SOQL query to retrieve details with deleted records", - "isHidden": false - }, - { - "name": "queryAllMore", - "description": "For retrieving additional query results if the initial results are too large", - "isHidden": false - }, - { - "name": "sObjectAction", - "description": "Return a specific object’s actions as well as global actions", - "isHidden": false - }, - { - "name": "getSpecificQuickAction", - "description": "Return a specific action for an object", - "isHidden": false - }, - { - "name": "quickActions", - "description": "Returns a list of global actions", - "isHidden": false - }, - { - "name": "getDescribeSpecificAction", - "description": "Return a specific action’s descriptive detail", - "isHidden": false - }, - { - "name": "getDefaultValueOfAction", - "description": "Return a specific action’s default values, including default field values", - "isHidden": false - }, - { - "name": "returnHeadersForDescribeSpecificAction", - "description": "Returns only the headers that are returned by the getDescribeSpecificAction operation", - "isHidden": false - }, - { - "name": "returnHeadersForSObjectAction", - "description": "Returns only the headers that are returned by the sObjectAction operation", - "isHidden": false - }, - { - "name": "returnHeadersForQuickAction", - "description": "Returns only the headers that are returned by the quickActions operation", - "isHidden": false - }, - { - "name": "returnHeadersForSpecificQuickAction", - "description": "Returns only the headers that are returned by the getSpecificAction operation", - "isHidden": false - }, - { - "name": "returnHeadersForDefaultValueOfAction", - "description": "Returns only the headers that are returned by the getDefaultValueOfAction operation", - "isHidden": false - }, - { - "name": "getDefaultValueOfActionById", - "description": "Returns the default values for an action specific to the context_id object", - "isHidden": false - }, + "name": "getAggregateRecord", + "description": "Allow to compute aggregate statistics about existing table and column data.", + "isHidden": false, + "parameters": [] + } + ], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 154, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-servicenow.png" + }, + { + "connectorName": "SharePoint", + "repoName": "esb-connector-sharepoint", + "description": "The sharePoint connector allows you to access the SharePoint REST API. SharePoint is a web application platform.SharePoint combines various functions which are traditionally separate applications: intranet, extranet, content management, document management, enterprise search, workflow management and web content management.", + "connectorType": "Connector", + "mavenGroupId": "org.wso2.integration.connector", + "mavenArtifactId": "mi-connector-sharepoint", + "id": "", + "version": { + "tagName": "2.0.1", + "releaseId": "233873767", + "isLatest": true, + "isDeprecated": false, + "operations": [ { - "name": "returnHeadersForDefaultValueOfActionById", - "description": "Returns only the headers that are returned by the getDefaultValueOfActionById operation", - "isHidden": false + "name": "createFolder", + "description": "Create Folder", + "isHidden": false, + "parameters": [ + { + "name": "folder", + "type": "stringOrExpression", + "required": true, + "description": "Empty object to indicate this item is a folder.", + "defaultValue": "" + }, + { + "name": "MicrosoftGraphConflictBehavior", + "type": "stringOrExpression", + "required": false, + "description": "Accepts the input values fail (default), replace, or rename to specify how to handle naming conflicts when creating files or folders.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The name of the folder to be created.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "parentItemId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the parent folder. Use 'root' for the root directory.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "search", - "description": "Executes the specified SOSL search", - "isHidden": false + "name": "getFolderChildren", + "description": "Get Folder Children", + "isHidden": false, + "parameters": [ + { + "name": "itemId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the item (file or folder).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "searchScopeAndOrder", - "description": "Returns an ordered list of objects in the default global search scope of a logged-in user.", - "isHidden": false + "name": "getDriveItemById", + "description": "Get Drive Item By Id", + "isHidden": false, + "parameters": [ + { + "name": "itemId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the item (file or folder).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "searchResultLayout", - "description": "Returns search result layout information for the objects in the query string", - "isHidden": false + "name": "deleteListItem", + "description": "Delete List Item", + "isHidden": false, + "parameters": [ + { + "name": "itemId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the item (file or folder).", + "defaultValue": "" + }, + { + "name": "listId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "searchSuggestedRecords", - "description": "Returns a list of suggested records whose names match the user’s search string", - "isHidden": false + "name": "getListItems", + "description": "Get List Items", + "isHidden": false, + "parameters": [ + { + "name": "listId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "searchSuggestedArticleTitle", - "description": "Returns a list of Salesforce Knowledge articles whose titles match the user’s search query string", - "isHidden": false + "name": "getGroupSite", + "description": "Get Group Site", + "isHidden": false, + "parameters": [ + { + "name": "groupId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the Microsoft 365 Group.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] }, { - "name": "searchSuggestedQueries", - "description": "Returns a list of suggested searches based on the user’s query string text matching searches that other users have performed in Salesforce Knowledge", - "isHidden": false + "name": "updateListItemFields", + "description": "Update List Item Fields", + "isHidden": false, + "parameters": [ + { + "name": "itemId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the item (file or folder).", + "defaultValue": "" + }, + { + "name": "listId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Specifies the properties of the item to be updated.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "sObjectLayouts", - "description": "Returns a list of layouts and descriptions, including for actions for a specific object.", - "isHidden": false + "name": "createListItem", + "description": "Create List Item", + "isHidden": false, + "parameters": [ + { + "name": "fields", + "type": "stringOrExpression", + "required": true, + "description": "The object containing the data for the new list item.", + "defaultValue": "" + }, + { + "name": "listId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "compactLayouts", - "description": "Returns a list of compact layouts for multiple objects.", - "isHidden": false + "name": "uploadFile", + "description": "Upload File", + "isHidden": false, + "parameters": [ + { + "name": "fileName", + "type": "stringOrExpression", + "required": true, + "description": "The name of the file.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "parentItemId", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the parent folder. Use 'root' for the root directory.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "sObjectCompactLayouts", - "description": "Returns a list of compact layouts for a specific object.", - "isHidden": false + "name": "createGroup", + "description": "Create Group", + "isHidden": false, + "parameters": [ + { + "name": "description", + "type": "stringOrExpression", + "required": true, + "description": "A brief description of the group, outlining its purpose and intended use.", + "defaultValue": "" + }, + { + "name": "displayName", + "type": "stringOrExpression", + "required": true, + "description": "The display name of the group, visible in Microsoft 365 applications and directories.", + "defaultValue": "" + }, + { + "name": "groupTypes", + "type": "stringOrExpression", + "required": true, + "description": "An array specifying the types of the group. For Microsoft 365 groups, set this to ['Unified']", + "defaultValue": "" + }, + { + "name": "mailEnabled", + "type": "stringOrExpression", + "required": true, + "description": "Indicates whether the group is mail-enabled. Set to true to enable email functionalities for the group.", + "defaultValue": "" + }, + { + "name": "mailNickname", + "type": "stringOrExpression", + "required": true, + "description": "The mail alias for the group, used in its email address. This must be unique within the organization.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "securityEnabled", + "type": "stringOrExpression", + "required": true, + "description": "Determines whether the group is a security group. For Microsoft 365 groups, set this to false.", + "defaultValue": "" + }, + { + "name": "visibility", + "type": "stringOrExpression", + "required": false, + "description": "Defines the visibility of the group. Acceptable values are 'Private' or 'Public'.", + "defaultValue": "" + } + ] }, { - "name": "sObjectNamedLayouts", - "description": "Retrieves information about alternate named layouts for a given object.", - "isHidden": false + "name": "createList", + "description": "Create List", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "properties", + "type": "stringOrExpression", + "required": true, + "description": "Specifies the name and the properties of the new list.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "globalSObjectLayouts", - "description": "To return descriptions of global publisher layouts.", - "isHidden": false + "name": "updateList", + "description": "Update List", + "isHidden": false, + "parameters": [ + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "The new description text for the list.", + "defaultValue": "" + }, + { + "name": "displayName", + "type": "stringOrExpression", + "required": false, + "description": "The new display name you wish to assign to the list.", + "defaultValue": "" + }, + { + "name": "listId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "sObjectApprovalLayouts", - "description": "Returns a list of approval layouts for a specified object", - "isHidden": false + "name": "updateFileContent", + "description": "Update File Content", + "isHidden": false, + "parameters": [ + { + "name": "itemId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the item (file or folder).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "sObjectApprovalLayoutsForSpecifiedApprovalProcess", - "description": "Returns an approval layout for a named approval process on a specified object.", - "isHidden": false + "name": "updateFolder", + "description": "Update Folder", + "isHidden": false, + "parameters": [ + { + "name": "itemId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the item (file or folder).", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "The new name for the folder.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "returnHeadersForSObjectApprovalLayouts", - "description": "Returns only the headers that are returned by the sObjectApprovalLayouts operation", - "isHidden": false + "name": "getRootChildren", + "description": "Get Root Children", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "returnHeadersForSObjectApprovalLayoutsForSpecifiedApprovalProcess", - "description": "Returns only the headers that are returned by the sObjectApprovalLayoutsForSpecifiedApprovalProcess operation", - "isHidden": false + "name": "deleteList", + "description": "Delete List", + "isHidden": false, + "parameters": [ + { + "name": "listId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "returnHeadersForSObjectCompactLayouts", - "description": "Returns only the headers that are returned by the sObjectCompactLayouts operation", - "isHidden": false + "name": "getListById", + "description": "Get List By Id", + "isHidden": false, + "parameters": [ + { + "name": "listId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "returnHeadersForSObjectLayouts", - "description": "Returns only the headers that are returned by the sObjectLayouts operation", - "isHidden": false + "name": "deleteDriveItem", + "description": "Delete Drive Item", + "isHidden": false, + "parameters": [ + { + "name": "itemId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the item (file or folder).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "sObjectLayoutsForObjectWithMultipleRecordTypes", - "description": "Retrieves lists of page layouts and their descriptions for objects that have more than one record type defined.", - "isHidden": false + "name": "getListItemById", + "description": "Get List Item By Id", + "isHidden": false, + "parameters": [ + { + "name": "itemId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the item (file or folder).", + "defaultValue": "" + }, + { + "name": "listId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the list.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] }, { - "name": "returnHeadersForSObjectLayoutsForObjectWithMultipleRecordTypes", - "description": "Returns only the headers that are returned by the sObjectLayoutsForObjectWithMultipleRecordTypes operation", - "isHidden": false - }, + "name": "getLists", + "description": "Get Lists", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "siteId", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier of the site.", + "defaultValue": "" + } + ] + } + ], + "connections": [ { - "name": "returnHeadersForGlobalSObjectLayouts", - "description": "Returns only the headers that are returned by the globalSObjectLayouts operation", - "isHidden": false - }, + "name": "sharepoint", + "description": "Sharepoint Connection", + "iconUrl": "", + "parameters": [ + { + "name": "base", + "type": "string", + "required": true, + "description": "The service root URL.", + "defaultValue": "https://graph.microsoft.com/v1.0" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "Client ID of the registered application.", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "Client secret of the registered application.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Sharepoint connection.", + "defaultValue": "SHAREPOINT_CONNECTION_1" + }, + { + "name": "tenant", + "type": "string", + "required": true, + "description": "Enter 'common', 'organizations', 'consumers', or your Azure AD tenant ID or domain name.", + "defaultValue": "" + } + ] + } + ] + }, + "otherVersions": {}, + "connectorRank": 52, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-sharepoint.gif" + }, + { + "connectorName": "SMPP", + "repoName": "esb-connector-smpp", + "description": "SMPP Connector allows you to send SMS through the WSO2 EI. It uses jsmpp API to communicate with a SMSC (Short Message service center) which is useful for storing, forwarding, converting and delivering Short Message Service (SMS) messages. jsmpp is a java implementation of SMPP. protocol.", + "connectorType": "Connector", + "mavenGroupId": "org.wso2.integration.connector", + "mavenArtifactId": "mi-connector-smpp", + "id": "", + "version": { + "tagName": "2.0.1", + "releaseId": "233267768", + "isLatest": true, + "isDeprecated": false, + "operations": [ { - "name": "listItemsInMenu", - "description": "Returns a list of items in either the Salesforce app drop-down menu or the Salesforce1 navigation menu.", - "isHidden": false + "name": "unbind", + "description": "Unbind SMSC Connection", + "isHidden": false, + "parameters": [] }, { - "name": "tabs", - "description": "Returns a list of all tabs.", - "isHidden": false + "name": "sendSMS", + "description": "Send SMS", + "isHidden": false, + "parameters": [ + { + "name": "alphabet", + "type": "stringOrExpression", + "required": false, + "description": "Encoding scheme of the SMS message", + "defaultValue": "" + }, + { + "name": "charset", + "type": "stringOrExpression", + "required": false, + "description": "Character encoding of the SMS message", + "defaultValue": "" + }, + { + "name": "destinationAddress", + "type": "stringOrExpression", + "required": true, + "description": "Destination address of the short message", + "defaultValue": "" + }, + { + "name": "destinationAddressNpi", + "type": "stringOrExpression", + "required": false, + "description": "Numbering plan for destination", + "defaultValue": "" + }, + { + "name": "destinationAddressTon", + "type": "stringOrExpression", + "required": false, + "description": "Type of number for destination", + "defaultValue": "" + }, + { + "name": "esmclass", + "type": "stringOrExpression", + "required": false, + "description": "Messaging mode and message type", + "defaultValue": "" + }, + { + "name": "isCompressed", + "type": "stringOrExpression", + "required": false, + "description": "Message body is compressed or not", + "defaultValue": "" + }, + { + "name": "message", + "type": "stringOrExpression", + "required": true, + "description": "Message to be sent", + "defaultValue": "" + }, + { + "name": "messageClass", + "type": "stringOrExpression", + "required": false, + "description": "Type of the message", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "priorityflag", + "type": "stringOrExpression", + "required": false, + "description": "Priority level of the message", + "defaultValue": "" + }, + { + "name": "protocolid", + "type": "stringOrExpression", + "required": false, + "description": "Protocol identifier of the SMSC protocol to be used", + "defaultValue": "" + }, + { + "name": "replaceIfPresentFlag", + "type": "stringOrExpression", + "required": false, + "description": "Indicates whether an existing message should be replaced or not", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "scheduleDeliveryTime", + "type": "stringOrExpression", + "required": false, + "description": "Scheduled time at which the message delivery should be first attempted", + "defaultValue": "" + }, + { + "name": "serviceType", + "type": "stringOrExpression", + "required": false, + "description": "SMS application service", + "defaultValue": "" + }, + { + "name": "smscDeliveryReceipt", + "type": "stringOrExpression", + "required": false, + "description": "Indicates if an SMSC delivery receipt or acknowledgment is required", + "defaultValue": "" + }, + { + "name": "sourceAddress", + "type": "stringOrExpression", + "required": true, + "description": "Source address", + "defaultValue": "" + }, + { + "name": "sourceAddressNpi", + "type": "stringOrExpression", + "required": false, + "description": "Numbering plan for source address", + "defaultValue": "" + }, + { + "name": "sourceAddressTon", + "type": "stringOrExpression", + "required": false, + "description": "Type of number for source address", + "defaultValue": "" + }, + { + "name": "submitDefaultMsgId", + "type": "stringOrExpression", + "required": false, + "description": "Message ID to be used for the submitted message", + "defaultValue": "" + }, + { + "name": "validityPeriod", + "type": "stringOrExpression", + "required": false, + "description": "Time period during which an SMS message can be delivered", + "defaultValue": "" + } + ] }, { - "name": "themes", - "description": "Gets the list of icons and colors used by themes in the Salesforce application.", - "isHidden": false - }, + "name": "sendBulkSMS", + "description": "Send Bulk SMS", + "isHidden": false, + "parameters": [ + { + "name": "alphabet", + "type": "stringOrExpression", + "required": false, + "description": "Encoding scheme of the SMS message", + "defaultValue": "" + }, + { + "name": "charset", + "type": "stringOrExpression", + "required": false, + "description": "Character encoding of the SMS message", + "defaultValue": "" + }, + { + "name": "destinationAddresses", + "type": "stringOrExpression", + "required": true, + "description": "Destination addresses of the short message. Eg: {\"mobileNumbers\": [\"+94715XXXXXX\", \"+1434XXXXXX\"]}", + "defaultValue": "" + }, + { + "name": "esmclass", + "type": "stringOrExpression", + "required": false, + "description": "Indicates the messaging mode and message type", + "defaultValue": "" + }, + { + "name": "isCompressed", + "type": "stringOrExpression", + "required": false, + "description": "Message body is compressed or not", + "defaultValue": "" + }, + { + "name": "message", + "type": "stringOrExpression", + "required": true, + "description": "Content of the SMS message.", + "defaultValue": "" + }, + { + "name": "messageClass", + "type": "stringOrExpression", + "required": false, + "description": "Type of the message", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the Message Body in Message Context with the output of the operation (This will remove the payload from the above variable).", + "defaultValue": "false" + }, + { + "name": "priorityflag", + "type": "stringOrExpression", + "required": false, + "description": "Priority level of the message", + "defaultValue": "" + }, + { + "name": "protocolid", + "type": "stringOrExpression", + "required": false, + "description": "Protocol identifier of the SMSC protocol to be used", + "defaultValue": "" + }, + { + "name": "replaceIfPresentFlag", + "type": "stringOrExpression", + "required": false, + "description": "Indicates whether an existing message should be replaced or not", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + }, + { + "name": "scheduleDeliveryTime", + "type": "stringOrExpression", + "required": false, + "description": "Scheduled time at which the message delivery should be first attempted", + "defaultValue": "" + }, + { + "name": "serviceType", + "type": "stringOrExpression", + "required": false, + "description": "Indicates SMS application service. Default is empty string. Possible values are: \"CMT\", \"CPT\", \"VMN\", \"VMA\", \"WAP\", \"USSD\"", + "defaultValue": "" + }, + { + "name": "smscDeliveryReceipt", + "type": "stringOrExpression", + "required": false, + "description": "Indicates if an SMSC delivery receipt or acknowledgment is required", + "defaultValue": "" + }, + { + "name": "sourceAddress", + "type": "stringOrExpression", + "required": true, + "description": "Source address", + "defaultValue": "" + }, + { + "name": "sourceAddressNpi", + "type": "stringOrExpression", + "required": false, + "description": "Numbering plan for source address", + "defaultValue": "" + }, + { + "name": "sourceAddressTon", + "type": "stringOrExpression", + "required": false, + "description": "Type of number for source address", + "defaultValue": "" + }, + { + "name": "submitDefaultMsgId", + "type": "stringOrExpression", + "required": false, + "description": "Message ID to be used for the submitted message", + "defaultValue": "" + }, + { + "name": "validityPeriod", + "type": "stringOrExpression", + "required": false, + "description": "Time period during which an SMS message can be delivered", + "defaultValue": "" + } + ] + } + ], + "connections": [ { - "name": "listAppMenuTypes", - "description": "Retrieves a list of App Menu types in the Salesforce app dropdown menu.", - "isHidden": false - }, + "name": "SMPP", + "description": "SMPP", + "iconUrl": "", + "parameters": [ + { + "name": "addressNpi", + "type": "stringOrExpression", + "required": false, + "description": "Numbering plan indicator for user", + "defaultValue": "" + }, + { + "name": "addressTon", + "type": "stringOrExpression", + "required": false, + "description": "User type of number", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "Name of the SMSC Connection", + "defaultValue": "SMSC_CONFIG_1" + }, + { + "name": "enquireLinkTimer", + "type": "stringOrExpression", + "required": false, + "description": "SMSC is connected or not", + "defaultValue": "" + }, + { + "name": "host", + "type": "stringOrExpression", + "required": true, + "description": "Hostname of the SMSC", + "defaultValue": "localhost" + }, + { + "name": "password", + "type": "stringOrExpression", + "required": true, + "description": "Password to allow access", + "defaultValue": "" + }, + { + "name": "port", + "type": "stringOrExpression", + "required": true, + "description": "Port to access the SMSC", + "defaultValue": "2775" + }, + { + "name": "sessionBindTimeout", + "type": "stringOrExpression", + "required": false, + "description": "session binding timeout,max time to wait for a response after sending a bind request", + "defaultValue": "" + }, + { + "name": "systemId", + "type": "stringOrExpression", + "required": true, + "description": "User requesting to bind (username)", + "defaultValue": "" + }, + { + "name": "systemType", + "type": "stringOrExpression", + "required": false, + "description": "System type", + "defaultValue": "" + }, + { + "name": "transactionTimer", + "type": "stringOrExpression", + "required": false, + "description": "Time elapsed between SMSC request and the corresponding response", + "defaultValue": "" + } + ] + } + ] + }, + "otherVersions": {}, + "connectorRank": 19, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-smpp.png" + }, + { + "connectorName": "Snowflake", + "repoName": "esb-connector-snowflake", + "description": "The Snowflake Connector offers a complete range of Snowflake operations using WSO2 MI. It provides functionalities to execute a set of standard Snowflake DDL, DML and query commands.", + "connectorType": "Connector", + "mavenGroupId": "org.wso2.integration.connector", + "mavenArtifactId": "mi-connector-snowflake", + "id": "", + "version": { + "tagName": "1.0.4", + "releaseId": "211443998", + "isLatest": true, + "isDeprecated": false, + "operations": [ { - "name": "listAppMenuItems", - "description": "Retrieves a list of the App Menu items in the Salesforce Lightning dropdown menu.", - "isHidden": false + "name": "init", + "description": "Init operation", + "isHidden": true, + "parameters": [] }, { - "name": "listAppMenuMobileItems", - "description": "Retrieves a list of the App Menu items in the Salesforce mobile app for Android and iOS and the mobile web navigation menu.", - "isHidden": false + "name": "query", + "description": "Query a given SQL statement.", + "isHidden": false, + "parameters": [] }, { - "name": "returnHeadersForAppMenuItems", - "description": "Retrieves only the headers that are returned by the listAppMenuItems operation.", - "isHidden": false + "name": "execute", + "description": "Execute a given SQL statement.", + "isHidden": false, + "parameters": [] }, { - "name": "returnHeadersForAppMenuMobileItems", - "description": "Retrieves only the headers that are returned by the listAppMenuMobileItems operation.", - "isHidden": false - }, + "name": "batchExecute", + "description": "Batch execute a given SQL statement.", + "isHidden": false, + "parameters": [] + } + ], + "connections": [ { - "name": "returnHeadersForTabs", - "description": "Retrieves only the headers that are returned by the tabs operation.", - "isHidden": false - }, + "name": "Snowflake", + "description": "Connection for querying Snowflake data warehouse.", + "iconUrl": "", + "parameters": [] + } + ] + }, + "otherVersions": {}, + "connectorRank": 162, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-snowflake.png" + }, + { + "connectorName": "Twilio", + "repoName": "esb-connector-twilio", + "description": "The Twilio connector allows you to connect to Twilio, an online service that lets you embed phones, VoIP, and messaging in web, desktop, and mobile software. The connector uses the Twilio REST API to connect to Twilio and work with accounts, applications, calls, messages, and more. The underlying Java classes in the connector use the Twilio Java Helper Library to make the HTTP requests to the Twilio API.", + "connectorType": "Connector", + "mavenGroupId": "org.wso2.integration.connector", + "mavenArtifactId": "mi-connector-twilio", + "id": "", + "version": { + "tagName": "1.1.1", + "releaseId": "191921793", + "isLatest": true, + "isDeprecated": false, + "operations": [ { - "name": "getListOfAction", - "description": "Retrieving a list of general action types for the current organization", - "isHidden": false + "name": "getConference", + "description": "Get a conference by its Sid", + "isHidden": false, + "parameters": [] }, { - "name": "getSpecificListOfAction", - "description": "Retrieving a list of standard actions for the current organization", - "isHidden": false + "name": "getConferenceList", + "description": "Get a conference list by parameters", + "isHidden": false, + "parameters": [] }, { - "name": "getAttributeOfSpecificAction", - "description": "Retrieving the details of a given attributes of a single standard action.", - "isHidden": false + "name": "getParticipant", + "description": "Get a participant of a given conference by call sid of the participant", + "isHidden": false, + "parameters": [] }, { - "name": "returnHTTPHeadersForListOfAction", - "description": "Retrieves only the headers that are returned by the getListOfAction operation", - "isHidden": false + "name": "getParticipantList", + "description": "Get a participant list of a conference", + "isHidden": false, + "parameters": [] }, { - "name": "returnHTTPHeadersForSpecificListOfAction", - "description": "Retrieves only the headers that are returned by the getSpecificListOfAction operation", - "isHidden": false + "name": "updateParticipant", + "description": "Updates a participant", + "isHidden": false, + "parameters": [] }, { - "name": "listProcessRules", - "description": "Get the List of Process Rules.", - "isHidden": false + "name": "removeParticipant", + "description": "Removes a participant", + "isHidden": false, + "parameters": [] }, { - "name": "getSpecificProcessRule", - "description": "get the metadata for a specific sObject Process rule", - "isHidden": false + "name": "init", + "description": "Configure Twilio Account with AccountSid and AuthToken", + "isHidden": false, + "parameters": [] }, { - "name": "getSpecificProcessRuleList", - "description": "Gets all active workflow rules for an sObject.", - "isHidden": false + "name": "getAccount", + "description": "Get the details associated with the account", + "isHidden": false, + "parameters": [] }, { - "name": "returnHeadersForProcessRules", - "description": "Returns only the headers that are returned by the listProcessRules operation.", - "isHidden": false + "name": "getAccountsList", + "description": "Get the details of all accounts associated with the configured account with the given list filters", + "isHidden": false, + "parameters": [] }, { - "name": "returnHeadersForSpecificProcessRule", - "description": "Returns only the headers that are returned by the getSpecificProcessRule operation.", - "isHidden": false + "name": "updateAccount", + "description": "Updates the account (Status can be only changed in sub accounts)", + "isHidden": false, + "parameters": [] }, { - "name": "returnHeadersForSpecificProcessRuleList", - "description": "Returns only the headers that are returned by the getSpecificProcessRuleList operation.", - "isHidden": false + "name": "createSubAccount", + "description": "Creates a sub account under the pre configured main account", + "isHidden": false, + "parameters": [] }, { - "name": "triggerProcessRules", - "description": "Triggers all active workflow rules. All rules associated with the specified ID are evaluated, regardless of the evaluation criteria. All IDs must be for records on the same object.", - "isHidden": false + "name": "createApplication", + "description": "Create a new application given a FriendlyName", + "isHidden": false, + "parameters": [] }, { - "name": "getBlobBodyForAttachmentRecord", - "description": "Retrieving blob body for an Attachment record", - "isHidden": false + "name": "getApplication", + "description": "Get an application", + "isHidden": false, + "parameters": [] }, { - "name": "getBlobBodyForDocumentRecord", - "description": "Retrieving blob body for a Document record", - "isHidden": false + "name": "getApplicationList", + "description": "Get a list of applications bound to the account", + "isHidden": false, + "parameters": [] }, { - "name": "getBlobDataForSpecificObject", - "description": "Retrieves the specified blob field from an individual record and returns it as binary data", - "isHidden": false + "name": "updateApplication", + "description": "Update the parameters of an existing application", + "isHidden": false, + "parameters": [] }, { - "name": "getSObjectRichTextImage", - "description": "Retrieves the specified image data from a specific rich text area field in a given record", - "isHidden": false + "name": "removeApplication", + "description": "Remove an application from the account", + "isHidden": false, + "parameters": [] }, { - "name": "describeEventMonitoring", - "description": "Use the SObject Describe resource to retrieve all metadata for an object, including information about fields, URLs, and child relationships.", - "isHidden": false + "name": "getConnectApp", + "description": "Get a connect app from the Sid reference", + "isHidden": false, + "parameters": [] }, { - "name": "queryEventMonitoringData", - "description": "Use the Query resource to retrieve field values from a record. Specify the fields you want to retrieve in the fields parameter and use the GET method of the resource.", - "isHidden": false + "name": "updateConnectApp", + "description": "Update a connect app from the Sid reference", + "isHidden": false, + "parameters": [] }, { - "name": "getEventMonitoringContentFromRecord", - "description": "Retrieves event monitoring content in binary format.", - "isHidden": false + "name": "getConnectAppList", + "description": "Get a list of all connect app for the account", + "isHidden": false, + "parameters": [] }, { - "name": "getReport", - "description": "Returns the report for a specific report id.", - "isHidden": false + "name": "getAuthorizedConnectApp", + "description": "Get an authorized connect app from the Sid reference", + "isHidden": false, + "parameters": [] }, { - "name": "listCompositeResources", - "description": "Retrieves a list of URIs for other composite resources.", - "isHidden": false + "name": "getAuthorizedConnectAppList", + "description": "Get a list of authorized connect apps for the account", + "isHidden": false, + "parameters": [] }, { - "name": "sendMultipleRequestsUsingComposite", - "description": "Executes a series of REST API requests in a single call.", - "isHidden": false + "name": "sendSms", + "description": "Send SMS", + "isHidden": false, + "parameters": [] }, { - "name": "compositeGraph", - "description": "Submit composite graph operations.", - "isHidden": false + "name": "getSms", + "description": "Returns Incoming and Outgoing SMS by Message Sid", + "isHidden": false, + "parameters": [] }, { - "name": "compositeBatch", - "description": "Executes up to 25 subrequests in a single request.", - "isHidden": false + "name": "getSmsList", + "description": "Returns a list of Incoming and Outgoing SMS Records", + "isHidden": false, + "parameters": [] }, { - "name": "createProductSchedules", - "description": "Establishes or reestablishes a product schedule with multiple installments for an opportunity product.", - "isHidden": false + "name": "getShortCode", + "description": "Returns the details of a Short Code associated with your account", + "isHidden": false, + "parameters": [] }, { - "name": "deleteProductSchedules", - "description": "Deletes all installments in a revenue or quantity schedule for opportunity products.", - "isHidden": false + "name": "updateShortCodeProperties", + "description": "Updates the short code's properties", + "isHidden": false, + "parameters": [] }, { - "name": "getProductSchedules", - "description": "Retrieves revenue and quantity schedules for opportunity products.", - "isHidden": false + "name": "getShortCodeList", + "description": "Returns the short codes list associated to an account", + "isHidden": false, + "parameters": [] }, { - "name": "consentDetailsOnSingleAction", - "description": "Retrieves consent details based on a single action, like email or track, across specific consent management objects when the records have a lookup relationship.", - "isHidden": false + "name": "makeCall", + "description": "Make A Call", + "isHidden": false, + "parameters": [] }, { - "name": "consentDetailsOnMultipleAction", - "description": "Retrieves consent details based on multiple actions, like email and track, across specific consent management objects when the records have a lookup relationship.", - "isHidden": false + "name": "getCall", + "description": "Get details of a single Incoming or Outgoing Call", + "isHidden": false, + "parameters": [] }, { - "name": "embeddedServiceConfig", - "description": "Retrieves the values for your Embedded Service deployment configuration, including the branding colors, font, and site URL", - "isHidden": false + "name": "getCallList", + "description": "Get a list of incoming and outgoing calls", + "isHidden": false, + "parameters": [] }, { - "name": "returnHeadersForEmbeddedServiceConfig", - "description": "Retrieves only the headers that are returned by the embeddedServiceConfig operation.", - "isHidden": false + "name": "modifyLiveCall", + "description": "Modify a live call", + "isHidden": false, + "parameters": [] }, { - "name": "listKnowledgeRESTApis", - "description": "Retrieves knowledge support REST APIs that allow both authorized and guest users to retrieve the user’s visible data categories and their associated articles.", - "isHidden": false + "name": "getTranscription", + "description": "Get recorded transcriptions by Transcription SID", + "isHidden": false, + "parameters": [] }, { - "name": "listDataCategoryGroups", - "description": "Retrieves data category groups that are visible to the current user.", - "isHidden": false + "name": "getTranscriptionList", + "description": "Get a list of recorded transcriptions", + "isHidden": false, + "parameters": [] }, { - "name": "getDataCategoryDetails", - "description": "Retrieves data category details and the child categories by a given category.", - "isHidden": false + "name": "getRecording", + "description": "Get a recording", + "isHidden": false, + "parameters": [] }, { - "name": "listArticles", - "description": "Retrieves a page of online articles for the given language and category through either search or query.", - "isHidden": false + "name": "getRecordingList", + "description": "Get a list of recordings", + "isHidden": false, + "parameters": [] }, { - "name": "getArticleDetails", - "description": "Retrieves all online article fields, accessible to the user.", - "isHidden": false + "name": "deleteRecording", + "description": "Delete a recording", + "isHidden": false, + "parameters": [] }, { - "name": "getKnowledgeLanguageSettings", - "description": "Retrieves the existing Knowledge language settings, including the default knowledge language and a list of supported Knowledge language information.", - "isHidden": false + "name": "getQueue", + "description": "Retrieve a call queue as represented by an SID", + "isHidden": false, + "parameters": [] }, { - "name": "platformEventSchemaByEventName", - "description": "Retrieves the definition of a platform event for an event name", - "isHidden": false + "name": "updateQueue", + "description": "Retrieve a call queue as represented by an SID and update its parameters", + "isHidden": false, + "parameters": [] }, { - "name": "platformEventSchemaByEventNameAndSpecifiedPayloadFormat", - "description": "Retrieves the definition of a platform event for an event name in specified payload format", - "isHidden": false + "name": "getQueueList", + "description": "Retrieve the list of queues from the specified account", + "isHidden": false, + "parameters": [] }, { - "name": "platformEventSchemaBySchemaId", - "description": "Retrieves the definition of a platform event for a schema ID", - "isHidden": false + "name": "createQueue", + "description": "Create a new queue instance and add it to the current account's list of queues", + "isHidden": false, + "parameters": [] }, { - "name": "platformEventSchemaBySchemaIdAndSpecifiedPayloadFormat", - "description": "Retrieves the definition of a platform event for a schema ID in specified payload format", - "isHidden": false + "name": "getMember", + "description": "Retrieve a member instance from a queue", + "isHidden": false, + "parameters": [] }, { - "name": "compileDataForPortabilityRequest", - "description": "Aggregates your data subject's personally identifiable information (PII) into one file and sends a response with a URL to download the file, a policy file ID, and information on the objects and fields you selected when creating the policy.", - "isHidden": false + "name": "dequeueMember", + "description": "Dequeue a member instance from a queue", + "isHidden": false, + "parameters": [] }, { - "name": "statusOfPortabilityRequest", - "description": "Retrieves the status of the request done by compileDataForPortabilityRequest operation.", - "isHidden": false + "name": "getMemberList", + "description": "Retrieve a list of member instance from a queue", + "isHidden": false, + "parameters": [] }, { - "name": "addOrChangeTranslationOfSurveyField", - "description": "Add or change the translated value of the survey field if a survey field can be translated or is already translated into a particular language.", - "isHidden": false + "name": "getAvailableLocalNumbers", + "description": "Get available local numbers", + "isHidden": false, + "parameters": [] }, { - "name": "addOrUpdateTranslatedValueOfMultipleSurveyFieldsInOneOrMoreLanguages", - "description": "If one or more survey fields can be translated or are already translated, adds or updates the translated values of the survey fields in the languages into which survey fields can be translated.", - "isHidden": false + "name": "getAvailableTollFreeNumbers", + "description": "Get available toll-free numbers", + "isHidden": false, + "parameters": [] }, { - "name": "deleteTheTranslatedValueOfSurveyField", - "description": "Deletes the translated value of the survey field after a survey field is translated into a particular language.", - "isHidden": false + "name": "getIncomingPhoneNumber", + "description": "Get Incoming Phone number allocated to the Account by its Sid", + "isHidden": false, + "parameters": [] }, { - "name": "deleteTranslatedValueOfMultipleSurveyFieldsInOneOrMoreLanguages", - "description": "Delete the translated values of multiple survey fields after survey fields are translated into one or more languages.", - "isHidden": false + "name": "getIncomingPhoneNumberList", + "description": "Get Incoming Phone numbers list allocated to the Account", + "isHidden": false, + "parameters": [] }, { - "name": "getTranslatedValueOfSurveyField", - "description": "Retrieves the translated value of the survey field after a survey field is translated into a particular language.", - "isHidden": false + "name": "removeIncomingPhoneNumber", + "description": "Remove an Incoming Phone number allocated to the Account", + "isHidden": false, + "parameters": [] }, { - "name": "getTranslatedValuesOfMultipleSurveyFieldsInOneOrMoreLanguages", - "description": "Retrieves the translated values of multiple survey fields in the translated languages after survey fields are translated into one or more languages.", - "isHidden": false + "name": "updateIncomingPhoneNumber", + "description": "Updates the Incoming Phone number", + "isHidden": false, + "parameters": [] }, { - "name": "listSchedulerRESTResourcesAndURIs", - "description": "Retrieves a list of available Salesforce Scheduler REST resources and corresponding URIs.", - "isHidden": false + "name": "purchasePhoneNumber", + "description": "Purchases a Phone number", + "isHidden": false, + "parameters": [] }, { - "name": "listAppointmentSlots", - "description": "Retrieves a list of available appointment time slots for a resource based on given work type group or work type and service territories.", - "isHidden": false + "name": "getOutgoingPhoneNumber", + "description": "get outgoing phone number", + "isHidden": false, + "parameters": [] }, { - "name": "listAppointmentCandidates", - "description": "Retrieves a list of service resources (appointment candidates) based on work type group or work type and service territories.", - "isHidden": false - } - ], - "connections": [ - { - "name": "salesforcerest", - "description": "Connection for using the Salesforce REST API.", - "iconUrl": "" - } - ] - }, - "otherVersions": {}, - "connectorRank": 13, - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-salesforcerest.png" - }, - { - "connectorName": "ServiceNow", - "repoName": "esb-connector-servicenow", - "description": "The ServiceNow connector allows you to access the ServiceNow REST API through WSO2 MI. ServiceNow is a software platform that supports IT service management and automates common business processes. This software as a service (SaaS) platform contains a number of modular applications that can vary by instance and user. ", - "connectorType": "Connector", - "mavenGroupId": "org.wso2.integration.connector", - "mavenArtifactId": "mi-connector-servicenow", - "version": { - "tagName": "1.0.3", - "releaseId": "191494819", - "isLatest": true, - "isDeprecated": false, - "operations": [ - { - "name": "init", - "description": "Service-Now configuration.", - "isHidden": false + "name": "getOutgoingPhoneNumberList", + "description": "get outgoing phone number list", + "isHidden": false, + "parameters": [] }, { - "name": "getRecords", - "description": "Retrieves set of records from table.", - "isHidden": false + "name": "addOutgoingPhoneNumber", + "description": "add outgoing phone number", + "isHidden": false, + "parameters": [] }, { - "name": "getRecordById", - "description": "Retrieves record according to the system ID from table.", - "isHidden": false + "name": "updateOutgoingPhoneNumber", + "description": "update outgoing phone number", + "isHidden": false, + "parameters": [] }, { - "name": "postRecord", - "description": "Insert a record into a table.", - "isHidden": false + "name": "removeOutgoingPhoneNumber", + "description": "remove outgoing phone number", + "isHidden": false, + "parameters": [] }, { - "name": "patchRecordById", - "description": "Patch a record from table by specifying system ID.", - "isHidden": false + "name": "getUsageRecordList", + "description": "Get usage record list", + "isHidden": false, + "parameters": [] }, { - "name": "deleteRecordById", - "description": "Delete a record from table by specifying system ID.", - "isHidden": false + "name": "getUsageTriggerList", + "description": "Get usage trigger list", + "isHidden": false, + "parameters": [] }, { - "name": "putRecordById", - "description": "Put a record to table by specifying system ID.", - "isHidden": false + "name": "getUsageTrigger", + "description": "Get usage trigger", + "isHidden": false, + "parameters": [] }, { - "name": "postRecordStagingTable", - "description": "This method inserts incoming data into a specified staging table and triggers transformation based on predefined transform maps in the import set table.", - "isHidden": false + "name": "updateUsageTrigger", + "description": "Update usage trigger", + "isHidden": false, + "parameters": [] }, { - "name": "getRecordsStagingTable", - "description": "This method retrieves the associated record and resulting transformation result.", - "isHidden": false + "name": "removeUsageTrigger", + "description": "Remove usage trigger", + "isHidden": false, + "parameters": [] }, { - "name": "getAggregateRecord", - "description": "Allow to compute aggregate statistics about existing table and column data.", - "isHidden": false + "name": "addUsageTrigger", + "description": "Add usage trigger", + "isHidden": false, + "parameters": [] } ], "connections": [] }, "otherVersions": {}, - "connectorRank": 154, - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-servicenow.png" + "connectorRank": 175, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-twilio.gif" }, { - "connectorName": "SharePoint", - "repoName": "esb-connector-sharepoint", - "description": "The sharePoint connector allows you to access the SharePoint REST API. SharePoint is a web application platform.SharePoint combines various functions which are traditionally separate applications: intranet, extranet, content management, document management, enterprise search, workflow management and web content management.", + "connectorName": "Twitter", + "repoName": "esb-connector-twitter", + "description": "The Twitter Connector allows you to work with Twitter, a social networking site where users broadcast short posts with 280 characters known as 'Tweets'. The connector uses the Twitter REST API v2.0 to work with Tweets, users, lists, and direct messages.", "connectorType": "Connector", "mavenGroupId": "org.wso2.integration.connector", - "mavenArtifactId": "mi-connector-sharepoint", + "mavenArtifactId": "mi-connector-twitter", + "id": "", "version": { - "tagName": "2.0.0", - "releaseId": "218529104", + "tagName": "4.0.0", + "releaseId": "243386017", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Config operation", - "isHidden": true - }, - { - "name": "createFolder", - "description": "Create a new folder within the specified parent folder.", - "isHidden": false - }, - { - "name": "createGroup", - "description": "Creates a new Microsoft 365 Group, which provisions a connected SharePoint site.", - "isHidden": false + "name": "getTweetsLookup", + "description": "Get Tweets Lookup", + "isHidden": false, + "parameters": [ + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional fields required in the response.", + "defaultValue": "" + }, + { + "name": "ids", + "type": "stringOrExpression", + "required": true, + "description": "A comma separated list of Tweet IDs. Up to 100 are allowed in a single request.", + "defaultValue": "" + }, + { + "name": "media_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific media fields will deliver.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "place_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific place fields will deliver.", + "defaultValue": "" + }, + { + "name": "poll_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific poll fields will deliver.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific Tweet fields will deliver.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "getUsersLookup", + "description": "Get Users Lookup", + "isHidden": false, + "parameters": [ + { + "name": "ids", + "type": "stringOrExpression", + "required": false, + "description": "A comma separated list of User IDs. Up to 100 comma-separated User IDs can be looked up using this method.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] + }, + { + "name": "getDirectMessages", + "description": "Get Direct Messages", + "isHidden": false, + "parameters": [ + { + "name": "dm_event_fields", + "type": "stringOrExpression", + "required": false, + "description": "Direct Message event fields to include in the response.", + "defaultValue": "" + }, + { + "name": "event_types", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of Direct Message event types to return (e.g., message_create).", + "defaultValue": "" + }, + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional resource expansions to include in the response.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of events to return per page (10-100).", + "defaultValue": "" + }, + { + "name": "media_fields", + "type": "stringOrExpression", + "required": false, + "description": "Media object fields to include in the response.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the response.", + "defaultValue": "false" + }, + { + "name": "pagination_token", + "type": "stringOrExpression", + "required": false, + "description": "Token used to navigate forward or backward through result pages.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "Tweet fields to include when events reference Tweets.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "User object fields to include in the response.", + "defaultValue": "" + } + ] + }, + { + "name": "getUserHomeTimeline", + "description": "Get User Home Timeline", + "isHidden": false, + "parameters": [ + { + "name": "end_time", + "type": "stringOrExpression", + "required": false, + "description": "The newest, most recent UTC timestamp to which the Tweets will be provided.", + "defaultValue": "" + }, + { + "name": "exclude", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of the types of Tweets to exclude from the response.", + "defaultValue": "" + }, + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional fields required in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of results to be returned per page.", + "defaultValue": "" + }, + { + "name": "media_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific media fields will deliver.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "pagination_token", + "type": "stringOrExpression", + "required": false, + "description": "This parameter is used to move forwards or backwards through 'pages' of results.", + "defaultValue": "" + }, + { + "name": "place_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific place fields will deliver.", + "defaultValue": "" + }, + { + "name": "poll_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific poll fields will deliver.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "since_id", + "type": "stringOrExpression", + "required": false, + "description": "Returns results with a Tweet ID greater (more recent) than the specified ID.", + "defaultValue": "" + }, + { + "name": "start_time", + "type": "stringOrExpression", + "required": false, + "description": "The oldest UTC timestamp (from most recent 7 days) from which the Tweets will be given.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific Tweet fields will deliver.", + "defaultValue": "" + }, + { + "name": "until_id", + "type": "stringOrExpression", + "required": false, + "description": "Returns results with a Tweet ID less than (that is, older than) the specified ID.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "unlikeTweet", + "description": "Unlike Tweet", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "tweet_id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Tweet to unlike.", + "defaultValue": "" + }, + { + "name": "user_id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the user who is unliking the Tweet.", + "defaultValue": "" + } + ] + }, + { + "name": "getFollowingUsers", + "description": "Get Following Users", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the user whose following list you would like to retrieve.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] + }, + { + "name": "getMutedUsers", + "description": "Get Muted Users", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the user.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { "name": "createList", - "description": "Creates a new list in the specified site.", - "isHidden": false - }, - { - "name": "createListItem", - "description": "Creates a new item in the specified list.", - "isHidden": false - }, - { - "name": "deleteDriveItem", - "description": "Deletes the specified file or folder.", - "isHidden": false - }, - { - "name": "deleteList", - "description": "Deletes the specified list.", - "isHidden": false - }, - { - "name": "deleteListItem", - "description": "Deletes the specified list item.", - "isHidden": false - }, - { - "name": "getDriveItemById", - "description": "Retrieves metadata about the specified file or folder.", - "isHidden": false - }, - { - "name": "getFolderChildren", - "description": "Retrieves all items within the specified folder.", - "isHidden": false - }, - { - "name": "getGroupSite", - "description": "Retrieves the root SharePoint site associated with the specified Microsoft 365 Group.", - "isHidden": false + "description": "Create List", + "isHidden": false, + "parameters": [ + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "Optional description of the List.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": true, + "description": "Name of the List you wish to create.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "private", + "type": "checkbox", + "required": false, + "description": "Check to make the List private.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] + }, + { + "name": "unmuteUser", + "description": "Unmute User", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "source_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID who is unmuting.", + "defaultValue": "" + }, + { + "name": "target_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID of the user that you would like to unmute.", + "defaultValue": "" + } + ] }, { "name": "getListById", - "description": "Retrieves a list by its ID or Title/Display name.", - "isHidden": false - }, - { - "name": "getListItemById", - "description": "Retrieves a list item by its ID.", - "isHidden": false - }, - { - "name": "getListItems", - "description": "Retrieves all items in the specified list.", - "isHidden": false - }, - { - "name": "getLists", - "description": "Retrieves all lists in the specified site.", - "isHidden": false - }, - { - "name": "getRootChildren", - "description": "Retrieves all items in the root directory of the drive.", - "isHidden": false - }, - { - "name": "updateFileContent", - "description": "Updates the content of the specified file.", - "isHidden": false - }, - { - "name": "updateFolder", - "description": "Updates the properties of the specified folder.", - "isHidden": false + "description": "Get List By ID", + "isHidden": false, + "parameters": [ + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional fields required in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the List to lookup.", + "defaultValue": "" + }, + { + "name": "list_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific List fields will deliver.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "getBlockedUsers", + "description": "Get Blocked Users", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the user.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] }, { "name": "updateList", - "description": "Updates properties of the specified list.", - "isHidden": false - }, - { - "name": "updateListItemFields", - "description": "Updates the fields of the specified list item.", - "isHidden": false - }, - { - "name": "uploadFile", - "description": "Uploads a new file to the specified folder.", - "isHidden": false - } - ], - "connections": [ - { - "name": "sharepoint", - "description": "Connection for accessing SharePoint data and files.", - "iconUrl": "" - } - ] - }, - "otherVersions": { - "1.1.1": "191920908" - }, - "connectorRank": 52, - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-sharepoint.gif" - }, - { - "connectorName": "SMPP", - "repoName": "esb-connector-smpp", - "description": "SMPP Connector allows you to send SMS through the WSO2 EI. It uses jsmpp API to communicate with a SMSC (Short Message service center) which is useful for storing, forwarding, converting and delivering Short Message Service (SMS) messages. jsmpp is a java implementation of SMPP. protocol.", - "connectorType": "Connector", - "mavenGroupId": "org.wso2.integration.connector", - "mavenArtifactId": "mi-connector-smpp", - "version": { - "tagName": "2.0.0", - "releaseId": "220935974", - "isLatest": true, - "isDeprecated": false, - "operations": [ - { - "name": "init", - "description": "Initialize SMSC configuration variables", - "isHidden": true + "description": "Update List", + "isHidden": false, + "parameters": [ + { + "name": "description", + "type": "stringOrExpression", + "required": false, + "description": "New description for the List.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Twitter List to update.", + "defaultValue": "" + }, + { + "name": "name", + "type": "stringOrExpression", + "required": false, + "description": "New name for the List (leave blank to keep unchanged).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "private", + "type": "checkbox", + "required": false, + "description": "Check to make the List private; uncheck to make it public.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] + }, + { + "name": "followUser", + "description": "Follow User", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "target_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID of the user that you would like to follow.", + "defaultValue": "" + } + ] + }, + { + "name": "getMe", + "description": "Get Me", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "addDirectMessage", + "description": "Add Direct Message", + "isHidden": false, + "parameters": [ + { + "name": "attachments", + "type": "stringOrExpression", + "required": false, + "description": "A JSON array containing media objects to attach. Example: `[ { \"media_id\": \"1456789\" } ]`", + "defaultValue": "" + }, + { + "name": "dm_conversation_id", + "type": "stringOrExpression", + "required": true, + "description": "The unique identifier (dm_conversation_id) of the conversation that will receive the Direct Message.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response (removes it from the above variable).", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the operation response will be assigned.", + "defaultValue": "" + }, + { + "name": "text", + "type": "stringOrExpression", + "required": false, + "description": "Text content of the Direct Message.", + "defaultValue": "" + } + ] + }, + { + "name": "getFollowingLists", + "description": "Get Following Lists", + "isHidden": false, + "parameters": [ + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional resource expansions to include in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "list_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated List object fields to return.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of Lists to return per page (10-100).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "pagination_token", + "type": "stringOrExpression", + "required": false, + "description": "Token to request the next or previous page of results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated User object fields to include.", + "defaultValue": "" + } + ] + }, + { + "name": "getUserTweetsTimeline", + "description": "Get User Tweets Timeline", + "isHidden": false, + "parameters": [ + { + "name": "end_time", + "type": "stringOrExpression", + "required": false, + "description": "The newest, most recent UTC timestamp to which the Tweets will be provided.", + "defaultValue": "" + }, + { + "name": "exclude", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated list of the types of Tweets to exclude from the response.", + "defaultValue": "" + }, + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional fields required in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of results to be returned per page.", + "defaultValue": "" + }, + { + "name": "media_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific media fields will deliver.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "pagination_token", + "type": "stringOrExpression", + "required": false, + "description": "This parameter is used to move forwards or backwards through 'pages' of results.", + "defaultValue": "" + }, + { + "name": "place_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific place fields will deliver.", + "defaultValue": "" + }, + { + "name": "poll_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific poll fields will deliver.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "since_id", + "type": "stringOrExpression", + "required": false, + "description": "Returns results with a Tweet ID greater (more recent) than the specified ID.", + "defaultValue": "" + }, + { + "name": "start_time", + "type": "stringOrExpression", + "required": false, + "description": "The oldest UTC timestamp (from most recent 7 days) from which the Tweets will be given.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific Tweet fields will deliver.", + "defaultValue": "" + }, + { + "name": "until_id", + "type": "stringOrExpression", + "required": false, + "description": "Returns results with a Tweet ID less than (that is, older than) the specified ID.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "deleteTweet", + "description": "Delete Tweet", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Tweet to delete.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] + }, + { + "name": "getLikedTweetsList", + "description": "Get Liked Tweets List", + "isHidden": false, + "parameters": [ + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional resource expansions to include in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of Tweets to return per page (10-100).", + "defaultValue": "" + }, + { + "name": "media_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated media object fields to return.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "pagination_token", + "type": "stringOrExpression", + "required": false, + "description": "Token to request the next or previous page of results.", + "defaultValue": "" + }, + { + "name": "place_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated place object fields to return.", + "defaultValue": "" + }, + { + "name": "poll_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated poll object fields to return.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated Tweet object fields to return.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated user object fields to include.", + "defaultValue": "" + } + ] + }, + { + "name": "getUserMentionsTimeline", + "description": "Get User Mentions Timeline", + "isHidden": false, + "parameters": [ + { + "name": "end_time", + "type": "stringOrExpression", + "required": false, + "description": "The newest, most recent UTC timestamp to which the Tweets will be provided.", + "defaultValue": "" + }, + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional fields required in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of results to be returned per page.", + "defaultValue": "" + }, + { + "name": "media_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific media fields will deliver.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "pagination_token", + "type": "stringOrExpression", + "required": false, + "description": "This parameter is used to move forwards or backwards through 'pages' of results.", + "defaultValue": "" + }, + { + "name": "place_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific place fields will deliver.", + "defaultValue": "" + }, + { + "name": "poll_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific poll fields will deliver.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "since_id", + "type": "stringOrExpression", + "required": false, + "description": "Returns results with a Tweet ID greater (more recent) than the specified ID.", + "defaultValue": "" + }, + { + "name": "start_time", + "type": "stringOrExpression", + "required": false, + "description": "The oldest UTC timestamp (from most recent 7 days) from which the Tweets will be given.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific Tweet fields will deliver.", + "defaultValue": "" + }, + { + "name": "until_id", + "type": "stringOrExpression", + "required": false, + "description": "Returns results with a Tweet ID less than (that is, older than) the specified ID.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "createRetweet", + "description": "Create Retweet", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "tweet_id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Tweet to retweet.", + "defaultValue": "" + }, + { + "name": "user_id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Twitter user performing the Retweet.", + "defaultValue": "" + } + ] }, { - "name": "sendSMS", - "description": "Send SMS message", - "isHidden": false - }, - { - "name": "sendBulkSMS", - "description": "Send Bulk SMS messages", - "isHidden": false - }, - { - "name": "unbind", - "description": "Unbind the SMSC connection", - "isHidden": false + "name": "deleteList", + "description": "Delete List", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Twitter List to delete.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + } + ] + }, + { + "name": "getListsMemberships", + "description": "Get Lists Memberships", + "isHidden": false, + "parameters": [ + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional resource expansions to include in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The unique ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "list_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated List object fields to return.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "Maximum number of Lists to return per page (10-100).", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "pagination_token", + "type": "stringOrExpression", + "required": false, + "description": "Token to request the next or previous page of results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated User object fields to include.", + "defaultValue": "" + } + ] + }, + { + "name": "getUserById", + "description": "Get User By ID", + "isHidden": false, + "parameters": [ + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional fields required in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific Tweet fields will deliver.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "getUserByUsername", + "description": "Get User By Username", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "username", + "type": "stringOrExpression", + "required": true, + "description": "The username of the Twitter user.", + "defaultValue": "" + } + ] + }, + { + "name": "createTweet", + "description": "Create Tweet", + "isHidden": false, + "parameters": [ + { + "name": "direct_message_deep_link", + "type": "stringOrExpression", + "required": false, + "description": "URL that opens a Direct Message conversation with an account.", + "defaultValue": "" + }, + { + "name": "for_super_followers_only", + "type": "checkbox", + "required": false, + "description": "Tweet exclusively for Super Followers.", + "defaultValue": "false" + }, + { + "name": "geo", + "type": "stringOrExpression", + "required": false, + "description": "JSON object with location information for the Tweet.", + "defaultValue": "" + }, + { + "name": "media", + "type": "stringOrExpression", + "required": false, + "description": "JSON object describing media IDs attached to the Tweet.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "poll", + "type": "stringOrExpression", + "required": false, + "description": "JSON object defining poll options and duration.", + "defaultValue": "" + }, + { + "name": "quote_tweet_id", + "type": "stringOrExpression", + "required": false, + "description": "ID of the Tweet being quoted.", + "defaultValue": "" + }, + { + "name": "reply", + "type": "stringOrExpression", + "required": false, + "description": "JSON object containing information about the Tweet being replied to.", + "defaultValue": "" + }, + { + "name": "reply_settings", + "type": "stringOrExpression", + "required": false, + "description": "Who can reply: everyone (default), mentionedUsers, or following.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "text", + "type": "stringOrExpression", + "required": false, + "description": "Text content of the Tweet (280-character limit).", + "defaultValue": "" + } + ] + }, + { + "name": "unfollowUser", + "description": "Unfollow User", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "source_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID who is unfollowing.", + "defaultValue": "" + }, + { + "name": "target_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID of the user that you would like to unfollow.", + "defaultValue": "" + } + ] + }, + { + "name": "sendNewDirectMessage", + "description": "Send New Direct Message", + "isHidden": false, + "parameters": [ + { + "name": "attachments", + "type": "stringOrExpression", + "required": false, + "description": "JSON array of media objects to attach. Example: `[ { \"media_id\": \"1456789\" } ]`", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "participant_id", + "type": "stringOrExpression", + "required": true, + "description": "User ID of the account to receive this Direct Message.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "text", + "type": "stringOrExpression", + "required": false, + "description": "Text content of the Direct Message.", + "defaultValue": "" + } + ] + }, + { + "name": "getFollowers", + "description": "Get Followers", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the user whose followers you would like to retrieve.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of results to be returned per page.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "pagination_token", + "type": "stringOrExpression", + "required": false, + "description": "This parameter is used to move forwards or backwards through 'pages' of results.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "getTweetById", + "description": "Get Tweet by ID", + "isHidden": false, + "parameters": [ + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional resource expansions to include in the response.", + "defaultValue": "" + }, + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "Unique identifier of the Tweet to retrieve.", + "defaultValue": "" + }, + { + "name": "media_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated media object fields to include.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "place_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated place object fields to include.", + "defaultValue": "" + }, + { + "name": "poll_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated poll object fields to include.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated Tweet object fields to include.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "Comma-separated user object fields to include.", + "defaultValue": "" + } + ] + }, + { + "name": "searchTweets", + "description": "Search Tweets", + "isHidden": false, + "parameters": [ + { + "name": "end_time", + "type": "stringOrExpression", + "required": false, + "description": "The newest, most recent UTC timestamp to which the Tweets will be provided.", + "defaultValue": "" + }, + { + "name": "expansions", + "type": "stringOrExpression", + "required": false, + "description": "Additional fields required in the response.", + "defaultValue": "" + }, + { + "name": "max_results", + "type": "stringOrExpression", + "required": false, + "description": "The maximum number of results to be returned per page.", + "defaultValue": "" + }, + { + "name": "media_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific media fields will deliver.", + "defaultValue": "" + }, + { + "name": "next_token", + "type": "stringOrExpression", + "required": false, + "description": "This parameter is used to get the next 'page' of results.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "place_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific place fields will deliver.", + "defaultValue": "" + }, + { + "name": "poll_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific poll fields will deliver.", + "defaultValue": "" + }, + { + "name": "query", + "type": "stringOrExpression", + "required": true, + "description": "Query for matching Tweets.", + "defaultValue": "" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "since_id", + "type": "stringOrExpression", + "required": false, + "description": "Returns results with a Tweet ID greater (more recent) than the specified ID.", + "defaultValue": "" + }, + { + "name": "sort_order", + "type": "stringOrExpression", + "required": false, + "description": "This parameter is used to specify the order in which you want the Tweets returned.", + "defaultValue": "" + }, + { + "name": "start_time", + "type": "stringOrExpression", + "required": false, + "description": "The oldest UTC timestamp (from most recent 7 days) from which the Tweets will be given.", + "defaultValue": "" + }, + { + "name": "tweet_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific Tweet fields will deliver.", + "defaultValue": "" + }, + { + "name": "until_id", + "type": "stringOrExpression", + "required": false, + "description": "Returns results with a Tweet ID less than (that is, older than) the specified ID.", + "defaultValue": "" + }, + { + "name": "user_fields", + "type": "stringOrExpression", + "required": false, + "description": "This fields parameter enables you to select which specific user fields will deliver.", + "defaultValue": "" + } + ] + }, + { + "name": "likeTweet", + "description": "Like Tweet", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "tweet_id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Tweet that you would like the user id to Like.", + "defaultValue": "" + }, + { + "name": "user_id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Twitter user.", + "defaultValue": "" + } + ] + }, + { + "name": "muteUser", + "description": "Mute User", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "target_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID of the user that you would like to mute.", + "defaultValue": "" + } + ] + }, + { + "name": "blockUser", + "description": "Block User", + "isHidden": false, + "parameters": [ + { + "name": "id", + "type": "stringOrExpression", + "required": true, + "description": "The ID of the Twitter user.", + "defaultValue": "" + }, + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "target_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID of the user that you would like to block.", + "defaultValue": "" + } + ] + }, + { + "name": "unblockUser", + "description": "Unblock User", + "isHidden": false, + "parameters": [ + { + "name": "overwriteBody", + "type": "checkbox", + "required": false, + "description": "Replace the current message payload with the operation response.", + "defaultValue": "false" + }, + { + "name": "responseVariable", + "type": "string", + "required": true, + "description": "Variable name to store the response payload.", + "defaultValue": "" + }, + { + "name": "source_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID who is unblocking.", + "defaultValue": "" + }, + { + "name": "target_user_id", + "type": "stringOrExpression", + "required": true, + "description": "The user ID of the user that you would like to unblock.", + "defaultValue": "" + } + ] } ], "connections": [ { - "name": "SMPP", - "description": "Connection for exchanging messages via SMPP protocol.", - "iconUrl": "" + "name": "twitter", + "description": "Twitter Connection", + "iconUrl": "", + "parameters": [ + { + "name": "accessToken", + "type": "stringOrExpression", + "required": false, + "description": "Value of the Access Token to access the API via request. If not provided, will be obtained using refresh token", + "defaultValue": "" + }, + { + "name": "apiUrl", + "type": "string", + "required": true, + "description": "The URL of the Twitter REST API. If not specified, defaults to https://api.twitter.com", + "defaultValue": "https://api.twitter.com" + }, + { + "name": "clientId", + "type": "stringOrExpression", + "required": true, + "description": "User ID that allows you to use OAuth 2.0 as an authentication method.", + "defaultValue": "" + }, + { + "name": "clientSecret", + "type": "stringOrExpression", + "required": true, + "description": "Client secret for OAuth 2.0 authentication. Required for automatic token refresh functionality.", + "defaultValue": "" + }, + { + "name": "connectionName", + "type": "string", + "required": true, + "description": "The name for the Twitter connection.", + "defaultValue": "TWITTER_CONNECTION_1" + }, + { + "name": "refreshToken", + "type": "stringOrExpression", + "required": false, + "description": "Value of the refresh token used to obtain new access tokens when the current one expires", + "defaultValue": "" + }, + { + "name": "timeout", + "type": "stringOrExpression", + "required": false, + "description": "Timeout duration of the API request in milliseconds. If not specified, defaults to 5000ms", + "defaultValue": "5000" + } + ] } ] }, - "otherVersions": { - "1.1.4": "193423969" - }, - "connectorRank": 19, - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-smpp.png" + "otherVersions": {}, + "connectorRank": 29, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-twitter.gif" }, { - "connectorName": "Snowflake", - "repoName": "esb-connector-snowflake", - "description": "The Snowflake Connector offers a complete range of Snowflake operations using WSO2 MI. It provides functionalities to execute a set of standard Snowflake DDL, DML and query commands.", + "connectorName": "Utility", + "repoName": "mediation-utility-module", + "description": "Utility connector allows you to perform utility functions on string, date, math, and signature. It has utility functions such as manipulating strings, performing math functions, working with dates, and generating and verifying payload signatures.", "connectorType": "Connector", - "mavenGroupId": "org.wso2.integration.connector", - "mavenArtifactId": "mi-connector-snowflake", + "mavenGroupId": "org.wso2.integration.module", + "mavenArtifactId": "mi-module-utility", + "id": "", "version": { - "tagName": "1.0.4", - "releaseId": "211443998", + "tagName": "2.0.1", + "releaseId": "233268285", "isLatest": true, "isDeprecated": false, "operations": [ { - "name": "init", - "description": "Init operation", - "isHidden": true - }, - { - "name": "query", - "description": "Query a given SQL statement.", - "isHidden": false - }, - { - "name": "execute", - "description": "Execute a given SQL statement.", - "isHidden": false - }, - { - "name": "batchExecute", - "description": "Batch execute a given SQL statement.", - "isHidden": false + "name": "sign", + "description": "Generate Signature", + "isHidden": false, + "parameters": [ + { + "name": "algorithm", + "type": "comboOrExpression", + "required": false, + "description": "The algorithm to use for generating the signature", + "defaultValue": "HMACSHA1" + }, + { + "name": "customPayload", + "type": "stringOrExpression", + "required": false, + "description": "The custom payload to be signed", + "defaultValue": "" + }, + { + "name": "payload", + "type": "comboOrExpression", + "required": false, + "description": "Source of the payload to sign - either message Body or a Custom value", + "defaultValue": "Body" + }, + { + "name": "secret", + "type": "stringOrExpression", + "required": true, + "description": "The secret key used to generate the signature", + "defaultValue": "" + }, + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the signature output should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "toLowerCase", + "description": "Transform String to Lowercase", + "isHidden": false, + "parameters": [ + { + "name": "inputString", + "type": "stringOrExpression", + "required": true, + "description": "The string to be converted to lowercase", + "defaultValue": "" + }, + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the lowercase string will be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "randomUUID", + "description": "Generate Random UUID", + "isHidden": false, + "parameters": [ + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the generated UUID will be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "getRandomInt", + "description": "Generate Random Integer", + "isHidden": false, + "parameters": [ + { + "name": "lowerBound", + "type": "stringOrExpression", + "required": false, + "description": "The minimum value (inclusive) for the random integer. Default is 0 if not specified.", + "defaultValue": "0" + }, + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the generated random integer should be assigned", + "defaultValue": "" + }, + { + "name": "upperBound", + "type": "stringOrExpression", + "required": false, + "description": "The maximum value (inclusive) for the random integer. Default is Integer.MAX_VALUE if not specified.", + "defaultValue": "100" + } + ] + }, + { + "name": "toUpperCase", + "description": "Transform String to Uppercase", + "isHidden": false, + "parameters": [ + { + "name": "inputString", + "type": "stringOrExpression", + "required": true, + "description": "The string to be converted to uppercase", + "defaultValue": "" + }, + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the uppercase string will be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "length", + "description": "Get String Length", + "isHidden": false, + "parameters": [ + { + "name": "inputString", + "type": "stringOrExpression", + "required": true, + "description": "The string whose length will be calculated", + "defaultValue": "" + }, + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the string length will be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "getDate", + "description": "Get Date", + "isHidden": false, + "parameters": [ + { + "name": "format", + "type": "string", + "required": false, + "description": "Enter the date format. (default: yyyy-MM-dd HH:mm:ss)", + "defaultValue": "yyyy-MM-dd HH:mmm:ss" + }, + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the output of the operation should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "verify", + "description": "Verify Signature", + "isHidden": false, + "parameters": [ + { + "name": "algorithm", + "type": "comboOrExpression", + "required": false, + "description": "The algorithm to use for signature verification", + "defaultValue": "HMACSHA1" + }, + { + "name": "customPayload", + "type": "stringOrExpression", + "required": false, + "description": "The custom payload to be verified against the signature", + "defaultValue": "" + }, + { + "name": "payload", + "type": "comboOrExpression", + "required": false, + "description": "Source of the payload to verify - either message Body or a Custom value", + "defaultValue": "Body" + }, + { + "name": "secret", + "type": "stringOrExpression", + "required": true, + "description": "The secret key used to verify the signature", + "defaultValue": "" + }, + { + "name": "signature", + "type": "stringOrExpression", + "required": true, + "description": "The signature that needs to be verified against the payload", + "defaultValue": "" + }, + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the verification result (true/false) should be assigned", + "defaultValue": "" + } + ] + }, + { + "name": "regexMatcher", + "description": "Match Regular Expression", + "isHidden": false, + "parameters": [ + { + "name": "inputString", + "type": "stringOrExpression", + "required": true, + "description": "The string to check against the regular expression", + "defaultValue": "" + }, + { + "name": "regex", + "type": "stringOrExpression", + "required": true, + "description": "The regular expression pattern to match against the input string", + "defaultValue": "" + }, + { + "name": "targetVariable", + "type": "string", + "required": true, + "description": "Name of the variable to which the matching result (true/false) will be assigned", + "defaultValue": "" + } + ] } ], - "connections": [ - { - "name": "Snowflake", - "description": "Connection for querying Snowflake data warehouse.", - "iconUrl": "" - } - ] - }, - "otherVersions": { - "1.0.2": "191493228" + "connections": [] }, - "connectorRank": 162, - "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/esb-connector-snowflake.png" + "otherVersions": {}, + "connectorRank": 12, + "iconUrl": "https://stprodinternalapps.blob.core.windows.net/connector-store-integration-vscode-logos/mediation-utility-module.png" } ] diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/connectors_guide.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/connectors_guide.ts index 5b3651e12cf..841bf08bfeb 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/connectors_guide.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/connectors_guide.ts @@ -1,13 +1,41 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { CONNECTOR_TOOL_NAME } from "../tools/types"; + export const CONNECTOR_DOCUMENTATION = ` - -When using connectors, follow these rules: -1. Only use operations defined in the connector JSON signatures. -2. For connectors with \`connectionLocalEntryNeeded\`: true - - You must define a local entry for each connection type. - - Always include the name parameter in the init operation. - - Pass the key of the local entry via configKey in the connector operation for using the connection. - - If a connector connection has been initialized via a local entry, do not initialize it again elsewhere. -Example: Defining and using a connector with connectionBasedSupport +When using connectors, follow these rules. + +### 1) Resolve initialization mode first (authoritative) +This is the single source of truth for connector/inbound initialization behavior. +If any generic Synapse examples appear to conflict, follow this section. + +Use connector summary fields (\`connectionLocalEntryNeeded\`, \`noInitializationNeeded\`) and then apply the matching flow below. + +#### A. \`connectionLocalEntryNeeded: true\` +- First fetch connection details using ${CONNECTOR_TOOL_NAME}. +- Define a local entry for the connection type you want to use. +- Always include the \`name\` parameter in the \`init\` operation. +- Pass the local entry key through \`configKey\` in connector operations. +- If a connector connection is initialized via local entry, do not initialize it again elsewhere. +- This rule applies to all connectors, including HTTP. + +Example: Define connection via local entry and use it with \`configKey\` \`\`\`xml @@ -23,42 +51,48 @@ Example: Defining and using a connector with connectionBasedSupport \`\`\`xml \`\`\` -3. For connectors with \`connectionLocalEntryNeeded\`: false - - You must initialize the connection via the init operation everytime you use a connector operation in the synaose seqence itself. -4. For connectors with \`noInitializationNeeded\`: true - - You do not need to initialize the connection via the init operation or a local entry. - - You can directly use the connector operation. +#### B. \`connectionLocalEntryNeeded: false\` +- Fetch \`init\` operation details using ${CONNECTOR_TOOL_NAME}. +- Initialize the connection with \`init\` each time you use a connector operation in the Synapse sequence itself. + +#### C. \`noInitializationNeeded: true\` +- Do not initialize via \`init\` or local entry. +- Use connector operations directly. + Example: \`\`\`xml - - Absent - - - - Null - - - - + + Absent + + + + Null + + + + \`\`\` -5. Never use in connector definitions—use the proper connector syntax instead. -6. Implement a complete and functional solution without placeholder comments or partial implementations. -7. Ensure all required parameters for each operation are explicitly included. -8. Do not use the utility connector unless absolutely necessary. - -##### Revamped Connector operation response handling: -With the latest updates to **certain connectors**, operations now support two additional parameters: -1. \`responseVariable\` – Use this to store the connector operation response into a named variable. - - This variable can be referenced later using Synapse expressions. ( \${vars.variable_name_you_defined} ) - - For operations where the response is required later, prefer responseVariable. -2. \`overwriteBody\` – Use this to directly replace the message body/payload with the connector's response. - - This is useful when you want to pass the response from one connector operation as the request payload for the next. ( \${payload} ) - - For flows where the response must be forwarded, use overwriteBody. - -**This connector update is an ongoing effort. So if you get validation errors with some connectors just don't use \`responseVariable\` or \`overwriteBody\` parameters for those connectors. Instead use the old way of handling the response.** - +### 2) General connector rules +1. Only use operations defined in connector JSON signatures. +2. Never use \`\` in connector definitions. Use proper connector syntax. +3. Implement complete, functional solutions without placeholders or partial code. +4. Explicitly include all required parameters for each operation. +5. Do not use the utility connector unless absolutely necessary. + +### 3) Revamped response handling (supported only by certain connectors) +Now some connectors support two additional operation parameters ( ongoing connector improvement by WSO2 team ) : +1. \`responseVariable\` + - Stores connector response in a named variable. + - Reference later using Synapse expressions (for example, \`\${vars.my_variable}\`). + - Prefer this when the response is needed later in the flow. +2. \`overwriteBody\` + - Replaces the message payload/body directly with connector response. + - Useful when next operation should consume previous response as \`\${payload}\`. + - Prefer this when response must be forwarded through the flow. + +For other connectors, use the older response-handling approach instead. `; export const AI_CONNECTOR_DOCUMENTATION = ` diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/inbound_db.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/inbound_db.ts index 07a9c13f86a..cbd065fe56f 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/inbound_db.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/inbound_db.ts @@ -26,8 +26,8 @@ export const INBOUND_DB = [ "mavenArtifactId": "mi-inbound-amazonsqs", "id": "", "version": { - "tagName": "2.0.1", - "releaseId": "233149909", + "tagName": "2.0.2", + "releaseId": "255699560", "isLatest": true, "isDeprecated": false, "operations": [ @@ -145,7 +145,7 @@ export const INBOUND_DB = [ "name": "suspend", "type": "checkbox", "required": false, - "description": "Suspend Inbound", + "description": "Enable this option to suspend the inbound endpoint immediately after deployment.", "defaultValue": "False" }, { @@ -160,9 +160,7 @@ export const INBOUND_DB = [ ], "connections": [] }, - "otherVersions": { - "1.1.5": "204041910" - }, + "otherVersions": {}, "connectorRank": 11, "iconUrl": "" }, @@ -175,8 +173,8 @@ export const INBOUND_DB = [ "mavenArtifactId": "mi-inbound-cdc", "id": "", "version": { - "tagName": "2.0.2", - "releaseId": "233149423", + "tagName": "2.0.4", + "releaseId": "255692382", "isLatest": true, "isDeprecated": false, "operations": [ @@ -406,7 +404,7 @@ export const INBOUND_DB = [ "name": "suspend", "type": "checkbox", "required": false, - "description": "Suspend Inbound", + "description": "Enable this option to suspend the inbound endpoint immediately after deployment.", "defaultValue": "False" }, { @@ -428,29 +426,27 @@ export const INBOUND_DB = [ ], "connections": [] }, - "otherVersions": { - "1.2.2": "204041909" - }, + "otherVersions": {}, "connectorRank": 14, "iconUrl": "" }, { - "connectorName": "ISO8583 (Inbound)", - "repoName": "esb-inbound-iso8583", - "description": "ISO8583 inbound allows you to listen for ISO8583 standard messages through WSO2 ESB", + "connectorName": "File Event Listener", + "repoName": "mi-inbound-file", + "description": "File Event Listener", "connectorType": "Inbound", "mavenGroupId": "org.wso2.integration.inbound", - "mavenArtifactId": "mi-inbound-iso8583", - "id": "org.wso2.carbon.inbound.iso8583.listening.ISO8583MessageConsumer", + "mavenArtifactId": "mi-inbound-file", + "id": "", "version": { - "tagName": "1.1.5", - "releaseId": "233150249", + "tagName": "0.9.3", + "releaseId": "256332293", "isLatest": true, "isDeprecated": false, "operations": [ { "name": "init", - "description": "Initialize Kafka Inbound Endpoint", + "description": "Initialize File Inbound Endpoint", "isHidden": false, "parameters": [ { @@ -458,1259 +454,2533 @@ export const INBOUND_DB = [ "type": "string", "required": true, "description": "", - "defaultValue": "org.wso2.carbon.inbound.iso8583.listening.ISO8583MessageConsumer" + "defaultValue": "org.wso2.carbon.inbound.vfs.VFSConsumer" }, { "name": "coordination", "type": "checkbox", "required": false, - "description": "In a clustered setup, this will run the inbound only in a single worker node.", - "defaultValue": "True" - }, - { - "name": "coreThreads", - "type": "string", - "required": false, - "description": "Number of core threads in the thread pool.", - "defaultValue": "1" - }, - { - "name": "generateSequences", - "type": "checkbox", - "required": false, "description": "", "defaultValue": "True" }, { - "name": "headerLength", + "name": "cronExpression", "type": "string", - "required": false, - "description": "Length of the ISO header", - "defaultValue": "0" + "required": true, + "description": "The cron for the connection.", + "defaultValue": "" }, { - "name": "inbound.behavior", - "type": "string", + "name": "fileThrottlingType", + "type": "combo", "required": true, - "description": "Inbound behavior", - "defaultValue": "listening" + "description": "Choose how file processing is controlled.", + "defaultValue": "Count" }, { - "name": "isProxy", + "name": "generateSequences", "type": "checkbox", "required": false, - "description": "ISO8583 Inbound endpoint act as a proxy to another service.", - "defaultValue": "False" - }, - { - "name": "keepAlive", - "type": "string", - "required": false, - "description": "Maximum time that excess idle threads will wait for new tasks before terminating.", - "defaultValue": "1" + "description": "", + "defaultValue": "True" }, { - "name": "maxThreads", + "name": "interval", "type": "string", - "required": false, - "description": "Maximum number of threads in the thread pool.", - "defaultValue": "3" + "required": true, + "description": "The interval for the connection.", + "defaultValue": "" }, { "name": "name", "type": "string", "required": true, - "description": "Unique identifier for the ISO8583 event integration.", + "description": "", "defaultValue": "" }, { "name": "onError", "type": "keyOrExpression", "required": true, - "description": "Error sequence to invoke on fault", + "description": "", "defaultValue": "" }, { - "name": "port", - "type": "string", + "name": "scheduleType", + "type": "combo", "required": true, - "description": "Port number on which to listen for incoming messages.", - "defaultValue": "" - }, - { - "name": "queueLength", - "type": "string", - "required": false, - "description": "Number of tasks that can be queued before the thread pool starts rejecting tasks.", - "defaultValue": "1" + "description": "The polling type for the connection.", + "defaultValue": "Polling" }, { "name": "sequence", "type": "keyOrExpression", "required": true, - "description": "Sequence to inject the ISO8583 message", + "description": "", "defaultValue": "" }, { "name": "sequential", "type": "checkbox", "required": false, - "description": "The behaviour when executing the given sequence.", + "description": "", "defaultValue": "True" }, { "name": "suspend", "type": "checkbox", "required": false, - "description": "Suspend Inbound", + "description": "", "defaultValue": "False" - } - ] - } - ], - "connections": [] - }, - "otherVersions": { - "1.1.2": "168855518", - "1.1.1": "147636915" - }, - "connectorRank": 12, - "iconUrl": "" - }, - { - "connectorName": "Kafka (Inbound)", - "repoName": "esb-inbound-kafka", - "description": "Kafka inbound endpoint acts as a message consumer for Kafka. It receives messages from configured topics of Kafka platform and inject them into the mediation flow.", - "connectorType": "Inbound", - "mavenGroupId": "org.wso2.integration.inbound", - "mavenArtifactId": "mi-inbound-kafka", - "id": "", - "version": { - "tagName": "2.0.4", - "releaseId": "232863938", - "isLatest": true, - "isDeprecated": false, - "operations": [ - { - "name": "init", - "description": "Initialize Kafka Inbound Endpoint", - "isHidden": false, - "parameters": [ + }, { - "name": "auto.commit.interval.ms", - "type": "string", + "name": "transport.vfs.ActionAfterFailure", + "type": "combo", "required": false, - "description": "Offsets are committed automatically with a frequency controlled by the config.", - "defaultValue": "5000" + "description": "", + "defaultValue": "MOVE" }, { - "name": "auto.offset.reset", + "name": "transport.vfs.ActionAfterProcess", + "type": "combo", + "required": false, + "description": "", + "defaultValue": "MOVE" + }, + { + "name": "transport.vfs.AutoLockRelease", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "False" + }, + { + "name": "transport.vfs.AutoLockReleaseInterval", "type": "string", + "required": true, + "description": "", + "defaultValue": "" + }, + { + "name": "transport.vfs.Build", + "type": "checkbox", "required": false, - "description": "Defines what to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server.", - "defaultValue": "latest" + "description": "", + "defaultValue": "False" }, { - "name": "avro.use.logical.type.converters", - "type": "boolean", + "name": "transport.vfs.CheckSizeIgnoreEmpty", + "type": "checkbox", "required": false, - "description": "Whether to enable the use of logical type converters in Avro.", + "description": "When true, empty files are ignored during file size checks.", "defaultValue": "False" }, { - "name": "basic.auth.credentials.source", + "name": "transport.vfs.CheckSizeInterval", "type": "string", "required": false, - "description": "Specify how to pick the credentials for the Basic authentication header.", + "description": "Duration in milliseconds between file size checks.", "defaultValue": "" }, { - "name": "basic.auth.user.info", + "name": "transport.vfs.ContentType", "type": "string", "required": false, - "description": "Specify the user info for the Basic authentication in the form of {username}:{password}.", + "description": "", "defaultValue": "" }, { - "name": "bootstrap.servers", + "name": "transport.vfs.FailedRecordNextRetryDuration", "type": "string", - "required": true, - "description": "Comma-separated list of host:port pairs of Kafka brokers.", - "defaultValue": "localhost:9092" + "required": false, + "description": "", + "defaultValue": "3000" }, { - "name": "check.crcs", - "type": "boolean", + "name": "transport.vfs.FailedRecordsFileDestination", + "type": "string", "required": false, - "description": "Automatically check the CRC32 of the records consumed.", - "defaultValue": "true" + "description": "", + "defaultValue": "" }, { - "name": "class", + "name": "transport.vfs.FailedRecordsFileName", "type": "string", - "required": true, + "required": false, "description": "", - "defaultValue": "org.wso2.carbon.inbound.kafka.KafkaMessageConsumer" + "defaultValue": "vfs-move-failed-records.properties" }, { - "name": "client.id", + "name": "transport.vfs.FileNamePattern", "type": "string", "required": false, - "description": "An id string to pass to the server when making requests.", + "description": "", "defaultValue": "" }, { - "name": "connections.max.idle.ms", + "name": "transport.vfs.FileProcessCount", "type": "string", - "required": false, - "description": "Close idle connections after the number of milliseconds specified by this config.", - "defaultValue": "540000" + "required": true, + "description": "Maximum number of files to process in a single polling cycle.", + "defaultValue": "" }, { - "name": "contentType", + "name": "transport.vfs.FileProcessInterval", "type": "string", "required": true, - "description": "Consumer group ID to use when consuming messages.", - "defaultValue": "application/json" + "description": "Delay (in milliseconds) between processing consecutive files.", + "defaultValue": "0" }, { - "name": "coordination", - "type": "boolean", + "name": "transport.vfs.FileSizeLimit", + "type": "string", "required": false, - "description": "In a clustered setup, this will run the inbound only in a single worker node.", - "defaultValue": "True" + "description": "Process files whose size is ≤ this value (in bytes). Use -1 for unlimited.", + "defaultValue": "-1" }, { - "name": "enable.auto.commit", - "type": "boolean", + "name": "transport.vfs.FileSortAscending", + "type": "checkbox", "required": false, - "description": "Whether the consumer will automatically commit offsets periodically at the interval set by auto.commit.interval.ms.", + "description": "", "defaultValue": "True" }, { - "name": "exclude.internal.topics", - "type": "checkbox", + "name": "transport.vfs.FileSortAttribute", + "type": "combo", "required": false, - "description": "Whether internal topics matching a subscribed pattern should be excluded from the subscription.", - "defaultValue": "true" + "description": "", + "defaultValue": "" }, { - "name": "failure.retry.count", + "name": "transport.vfs.FileURI", "type": "string", - "required": false, - "description": "The maximum attempts the same Kafka message should be retried in a failure scenario.", + "required": true, + "description": "", "defaultValue": "" }, { - "name": "failure.retry.interval", - "type": "string", + "name": "transport.vfs.Locking", + "type": "combo", "required": false, - "description": "The interval between retries in a failure scenario.", - "defaultValue": "" + "description": "", + "defaultValue": "enable" }, { - "name": "fetch.max.bytes", + "name": "transport.vfs.LockReleaseSameNode", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "False" + }, + { + "name": "transport.vfs.MaximumAge", "type": "string", "required": false, - "description": "The maximum amount of data the server should return for a fetch request.", + "description": "Maximum age in seconds since the last modification; older files will be skipped.", "defaultValue": "" }, { - "name": "fetch.max.wait.ms", + "name": "transport.vfs.MaxRetryCount", "type": "string", "required": false, - "description": "The maximum amount of time the server will block before answering the fetch request if there isn’t sufficient data to immediately satisfy the requirement given by fetch.min.bytes.", - "defaultValue": "500" + "description": "", + "defaultValue": "" }, { - "name": "fetch.min.bytes", + "name": "transport.vfs.MinimumAge", "type": "string", "required": false, - "description": "The minimum amount of data the server should return for a fetch request.", + "description": "Minimum age in seconds since the last modification before processing a file.", "defaultValue": "" }, { - "name": "generateSequences", - "type": "checkbox", + "name": "transport.vfs.MoveAfterFailedMove", + "type": "string", "required": false, "description": "", - "defaultValue": "True" + "defaultValue": "" }, { - "name": "group.id", + "name": "transport.vfs.MoveAfterFailure", "type": "string", "required": true, - "description": "Consumer group ID to use when consuming messages.", - "defaultValue": "group1" + "description": "URI for the target location for failed files.", + "defaultValue": "" }, { - "name": "heartbeat.interval.ms", + "name": "transport.vfs.MoveAfterProcess", "type": "string", - "required": false, - "description": "The expected time between heartbeats to the consumer coordinator when using Kafka’s group management facilities.", + "required": true, + "description": "URI for the target location.", "defaultValue": "" }, { - "name": "interceptor.classes", + "name": "transport.vfs.MoveFailedRecordTimestampFormat", "type": "string", "required": false, - "description": "A list of classes to use as interceptors.", - "defaultValue": "" + "description": "", + "defaultValue": "dd-MM-yyyy HH:mm:ss" }, { - "name": "interval", + "name": "transport.vfs.MoveTimestampFormat", "type": "string", - "required": true, - "description": "The polling interval for the Kafka inbound endpoint in milliseconds.", - "defaultValue": "100" + "required": false, + "description": "", + "defaultValue": "" }, { - "name": "kafka.header.prefix", + "name": "transport.vfs.ReconnectTimeout", "type": "string", "required": false, - "description": "The prefix for Kafka headers.", + "description": "", "defaultValue": "" }, { - "name": "key.delegate.deserializer", + "name": "transport.vfs.SFTPIdentities", "type": "string", "required": false, - "description": "The actual key deserializer that the error handling deserializer should delegate to.", + "description": "", + "defaultValue": "" + }, + { + "name": "transport.vfs.SFTPIdentityPassPhrase", + "type": "string", + "required": false, + "description": "", + "defaultValue": "" + }, + { + "name": "transport.vfs.SFTPUserDirIsRoot", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "False" + }, + { + "name": "transport.vfs.Streaming", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "False" + }, + { + "name": "transport.vfs.SubFolderTimestampFormat", + "type": "string", + "required": false, + "description": "", + "defaultValue": "" + }, + { + "name": "transport.vfs.UpdateLastModified", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "True" + } + ] + } + ], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 15, + "iconUrl": "" + }, + { + "connectorName": "Google PubSub (Inbound)", + "repoName": "mi-inbound-googlepubsub", + "description": "Inbuilt Google Pub/Sub Event Listener", + "connectorType": "Inbound", + "mavenGroupId": "org.wso2.integration.inbound", + "mavenArtifactId": "mi-inbound-googlepubsub", + "id": "", + "version": { + "tagName": "1.0.0", + "releaseId": "239938464", + "isLatest": true, + "isDeprecated": false, + "operations": [], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 15, + "iconUrl": "" + }, + { + "connectorName": "ISO8583 (Inbound)", + "repoName": "esb-inbound-iso8583", + "description": "ISO8583 inbound allows you to listen for ISO8583 standard messages through WSO2 ESB", + "connectorType": "Inbound", + "mavenGroupId": "org.wso2.integration.inbound", + "mavenArtifactId": "mi-inbound-iso8583", + "id": "org.wso2.carbon.inbound.iso8583.listening.ISO8583MessageConsumer", + "version": { + "tagName": "1.1.5", + "releaseId": "233150249", + "isLatest": true, + "isDeprecated": false, + "operations": [ + { + "name": "init", + "description": "Initialize Kafka Inbound Endpoint", + "isHidden": false, + "parameters": [ + { + "name": "class", + "type": "string", + "required": true, + "description": "", + "defaultValue": "org.wso2.carbon.inbound.iso8583.listening.ISO8583MessageConsumer" + }, + { + "name": "coordination", + "type": "checkbox", + "required": false, + "description": "In a clustered setup, this will run the inbound only in a single worker node.", + "defaultValue": "True" + }, + { + "name": "coreThreads", + "type": "string", + "required": false, + "description": "Number of core threads in the thread pool.", + "defaultValue": "1" + }, + { + "name": "generateSequences", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "True" + }, + { + "name": "headerLength", + "type": "string", + "required": false, + "description": "Length of the ISO header", + "defaultValue": "0" + }, + { + "name": "inbound.behavior", + "type": "string", + "required": true, + "description": "Inbound behavior", + "defaultValue": "listening" + }, + { + "name": "isProxy", + "type": "checkbox", + "required": false, + "description": "ISO8583 Inbound endpoint act as a proxy to another service.", + "defaultValue": "False" + }, + { + "name": "keepAlive", + "type": "string", + "required": false, + "description": "Maximum time that excess idle threads will wait for new tasks before terminating.", + "defaultValue": "1" + }, + { + "name": "maxThreads", + "type": "string", + "required": false, + "description": "Maximum number of threads in the thread pool.", + "defaultValue": "3" + }, + { + "name": "name", + "type": "string", + "required": true, + "description": "Unique identifier for the ISO8583 event integration.", + "defaultValue": "" + }, + { + "name": "onError", + "type": "keyOrExpression", + "required": true, + "description": "Error sequence to invoke on fault", + "defaultValue": "" + }, + { + "name": "port", + "type": "string", + "required": true, + "description": "Port number on which to listen for incoming messages.", + "defaultValue": "" + }, + { + "name": "queueLength", + "type": "string", + "required": false, + "description": "Number of tasks that can be queued before the thread pool starts rejecting tasks.", + "defaultValue": "1" + }, + { + "name": "sequence", + "type": "keyOrExpression", + "required": true, + "description": "Sequence to inject the ISO8583 message", + "defaultValue": "" + }, + { + "name": "sequential", + "type": "checkbox", + "required": false, + "description": "The behaviour when executing the given sequence.", + "defaultValue": "True" + }, + { + "name": "suspend", + "type": "checkbox", + "required": false, + "description": "Suspend Inbound", + "defaultValue": "False" + } + ] + } + ], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 12, + "iconUrl": "" + }, + { + "connectorName": "Kafka (Inbound)", + "repoName": "esb-inbound-kafka", + "description": "Kafka inbound endpoint acts as a message consumer for Kafka. It receives messages from configured topics of Kafka platform and inject them into the mediation flow.", + "connectorType": "Inbound", + "mavenGroupId": "org.wso2.integration.inbound", + "mavenArtifactId": "mi-inbound-kafka", + "id": "", + "version": { + "tagName": "2.0.6", + "releaseId": "256275858", + "isLatest": true, + "isDeprecated": false, + "operations": [ + { + "name": "init", + "description": "Initialize Kafka Inbound Endpoint", + "isHidden": false, + "parameters": [ + { + "name": "auto.commit.interval.ms", + "type": "string", + "required": false, + "description": "Offsets are committed automatically with a frequency controlled by the config.", + "defaultValue": "5000" + }, + { + "name": "auto.offset.reset", + "type": "string", + "required": false, + "description": "Defines what to do when there is no initial offset in Kafka or if the current offset does not exist any more on the server.", + "defaultValue": "latest" + }, + { + "name": "avro.use.logical.type.converters", + "type": "boolean", + "required": false, + "description": "Whether to enable the use of logical type converters in Avro.", + "defaultValue": "False" + }, + { + "name": "basic.auth.credentials.source", + "type": "string", + "required": false, + "description": "Specify how to pick the credentials for the Basic authentication header.", + "defaultValue": "" + }, + { + "name": "basic.auth.user.info", + "type": "string", + "required": false, + "description": "Specify the user info for the Basic authentication in the form of {username}:{password}.", + "defaultValue": "" + }, + { + "name": "bootstrap.servers", + "type": "string", + "required": true, + "description": "Comma-separated list of host:port pairs of Kafka brokers.", + "defaultValue": "localhost:9092" + }, + { + "name": "check.crcs", + "type": "boolean", + "required": false, + "description": "Automatically check the CRC32 of the records consumed.", + "defaultValue": "true" + }, + { + "name": "class", + "type": "string", + "required": true, + "description": "", + "defaultValue": "org.wso2.carbon.inbound.kafka.KafkaMessageConsumer" + }, + { + "name": "client.id", + "type": "string", + "required": false, + "description": "An id string to pass to the server when making requests.", + "defaultValue": "" + }, + { + "name": "connections.max.idle.ms", + "type": "string", + "required": false, + "description": "Close idle connections after the number of milliseconds specified by this config.", + "defaultValue": "540000" + }, + { + "name": "contentType", + "type": "string", + "required": true, + "description": "Consumer group ID to use when consuming messages.", + "defaultValue": "application/json" + }, + { + "name": "coordination", + "type": "boolean", + "required": false, + "description": "In a clustered setup, this will run the inbound only in a single worker node.", + "defaultValue": "True" + }, + { + "name": "enable.auto.commit", + "type": "boolean", + "required": false, + "description": "Whether the consumer will automatically commit offsets periodically at the interval set by auto.commit.interval.ms.", + "defaultValue": "True" + }, + { + "name": "exclude.internal.topics", + "type": "checkbox", + "required": false, + "description": "Whether internal topics matching a subscribed pattern should be excluded from the subscription.", + "defaultValue": "true" + }, + { + "name": "failure.retry.count", + "type": "string", + "required": false, + "description": "The maximum attempts the same Kafka message should be retried in a failure scenario.", + "defaultValue": "" + }, + { + "name": "failure.retry.interval", + "type": "string", + "required": false, + "description": "The interval between retries in a failure scenario.", + "defaultValue": "" + }, + { + "name": "fetch.max.bytes", + "type": "string", + "required": false, + "description": "The maximum amount of data the server should return for a fetch request.", + "defaultValue": "" + }, + { + "name": "fetch.max.wait.ms", + "type": "string", + "required": false, + "description": "The maximum amount of time the server will block before answering the fetch request if there isn’t sufficient data to immediately satisfy the requirement given by fetch.min.bytes.", + "defaultValue": "500" + }, + { + "name": "fetch.min.bytes", + "type": "string", + "required": false, + "description": "The minimum amount of data the server should return for a fetch request.", + "defaultValue": "" + }, + { + "name": "generateSequences", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "True" + }, + { + "name": "group.id", + "type": "string", + "required": true, + "description": "Consumer group ID to use when consuming messages.", + "defaultValue": "group1" + }, + { + "name": "heartbeat.interval.ms", + "type": "string", + "required": false, + "description": "The expected time between heartbeats to the consumer coordinator when using Kafka’s group management facilities.", + "defaultValue": "" + }, + { + "name": "interceptor.classes", + "type": "string", + "required": false, + "description": "A list of classes to use as interceptors.", + "defaultValue": "" + }, + { + "name": "interval", + "type": "string", + "required": true, + "description": "The polling interval for the Kafka inbound endpoint in milliseconds.", + "defaultValue": "100" + }, + { + "name": "kafka.header.prefix", + "type": "string", + "required": false, + "description": "The prefix for Kafka headers.", + "defaultValue": "" + }, + { + "name": "key.delegate.deserializer", + "type": "string", + "required": false, + "description": "The actual key deserializer that the error handling deserializer should delegate to.", "defaultValue": "" }, { "name": "key.deserializer", "type": "string", "required": true, - "description": "Deserializer class for key that implements the org.apache.kafka.common.serialization.Deserializer interface.", - "defaultValue": "org.apache.kafka.common.serialization.StringDeserializer" + "description": "Deserializer class for key that implements the org.apache.kafka.common.serialization.Deserializer interface.", + "defaultValue": "org.apache.kafka.common.serialization.StringDeserializer" + }, + { + "name": "max.partition.fetch.bytes", + "type": "string", + "required": false, + "description": "The maximum amount of data per-partition the server will return.", + "defaultValue": "" + }, + { + "name": "max.poll.interval.ms", + "type": "string", + "required": false, + "description": "The maximum delay between polls when using consumer group management.", + "defaultValue": "300000" + }, + { + "name": "max.poll.records", + "type": "string", + "required": false, + "description": "The maximum number of records returned in a single poll", + "defaultValue": "500" + }, + { + "name": "metadata.max.age.ms", + "type": "string", + "required": false, + "description": "The period of time in milliseconds after which we force a refresh of metadata", + "defaultValue": "" + }, + { + "name": "metric.reporters", + "type": "string", + "required": false, + "description": "A list of classes to use as metrics reporters.", + "defaultValue": "" + }, + { + "name": "metrics.num.samples", + "type": "string", + "required": false, + "description": "The number of samples maintained to compute metrics.", + "defaultValue": "2" + }, + { + "name": "metrics.recording.level", + "type": "string", + "required": false, + "description": "The highest recording level for metrics.", + "defaultValue": "INFO" + }, + { + "name": "metrics.sample.window.ms", + "type": "string", + "required": false, + "description": "The window of time a metrics sample is computed over.", + "defaultValue": "30000" + }, + { + "name": "name", + "type": "string", + "required": true, + "description": "Unique identifier for the Kafka event integration.", + "defaultValue": "" + }, + { + "name": "onError", + "type": "keyOrExpression", + "required": true, + "description": "Error sequence to invoke on fault", + "defaultValue": "" + }, + { + "name": "partition.assignment.strategy", + "type": "string", + "required": false, + "description": "A list of class names or class types, ordered by preference, of supported partition assignment strategies.", + "defaultValue": "org.apache.kafka.clients.consumer.RangeAssignor" + }, + { + "name": "poll.timeout", + "type": "string", + "required": true, + "description": "The timeout in milliseconds when polling for consumer data.", + "defaultValue": "1000" + }, + { + "name": "receive.buffer.bytes", + "type": "string", + "required": false, + "description": "The size of the TCP receive buffer to use when reading data.", + "defaultValue": "65536" + }, + { + "name": "reconnect.backoff.ms", + "type": "string", + "required": false, + "description": "The amount of time to wait before attempting to reconnect to a given host.", + "defaultValue": "50" + }, + { + "name": "request.timeout.ms", + "type": "string", + "required": false, + "description": "The maximum amount of time the client will wait for the response of a request.", + "defaultValue": "305000" + }, + { + "name": "retry.backoff.ms", + "type": "string", + "required": false, + "description": "The amount of time to wait before attempting to retry a failed request to a given topic partition.", + "defaultValue": "100" + }, + { + "name": "sasl.client.callback.handler.class", + "type": "string", + "required": false, + "description": "The fully qualified name of a SASL client callback handler class that implements the AuthenticateCallbackHandler interface.", + "defaultValue": "" + }, + { + "name": "sasl.jaas.config", + "type": "string", + "required": false, + "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "defaultValue": "" + }, + { + "name": "sasl.kerberos.kinit.cmd", + "type": "string", + "required": false, + "description": "Kerberos kinit command path.", + "defaultValue": "" + }, + { + "name": "sasl.kerberos.min.time.before.relogin", + "type": "string", + "required": false, + "description": "Login thread sleep time between refresh attempts.", + "defaultValue": "" + }, + { + "name": "sasl.kerberos.service.name", + "type": "string", + "required": false, + "description": "The Kerberos principal name that Kafka runs as.", + "defaultValue": "" + }, + { + "name": "sasl.kerberos.ticket.renew.jitter", + "type": "string", + "required": false, + "description": "Percentage of random jitter added to the renewal time.", + "defaultValue": "" + }, + { + "name": "sasl.kerberos.ticket.renew.window.factor", + "type": "string", + "required": false, + "description": "Login thread will sleep until the specified window factor of time from last refresh to ticket’s expiry has been reached, at which time it will try to renew the ticket.", + "defaultValue": "" + }, + { + "name": "sasl.login.callback.handler.class", + "type": "string", + "required": false, + "description": "The fully qualified name of a SASL login callback handler class that implements the AuthenticateCallbackHandler interface.", + "defaultValue": "" + }, + { + "name": "sasl.login.class", + "type": "string", + "required": false, + "description": "The fully qualified name of a class that implements the Login interface.", + "defaultValue": "" + }, + { + "name": "sasl.login.connect.timeout.ms", + "type": "string", + "required": false, + "description": "The value in milliseconds for the external authentication provider connection timeout.", + "defaultValue": "" + }, + { + "name": "sasl.login.read.timeout.ms", + "type": "string", + "required": false, + "description": "The value in milliseconds for the external authentication provider read timeout.", + "defaultValue": "" + }, + { + "name": "sasl.login.retry.backoff.max.ms", + "type": "string", + "required": false, + "description": "The value in milliseconds for the maximum wait between login attempts to the external authentication provider.", + "defaultValue": "" + }, + { + "name": "sasl.login.retry.backoff.ms", + "type": "string", + "required": false, + "description": "The value in milliseconds for the initial wait between login attempts to the external authentication provider.", + "defaultValue": "" + }, + { + "name": "sasl.mechanism", + "type": "string", + "required": false, + "description": "SASL mechanism used for client connections.", + "defaultValue": "" + }, + { + "name": "sasl.oauthbearer.scope.claim.name", + "type": "string", + "required": false, + "description": "The OAuth claim for the scope is often named ‘scope’, but this setting can provide a different name to use for the scope included in the JWT payload’s claims.", + "defaultValue": "" + }, + { + "name": "sasl.oauthbearer.token.endpoint.url", + "type": "string", + "required": false, + "description": "The URL for the OAuth/OIDC identity provider.", + "defaultValue": "" + }, + { + "name": "schema.registry.url", + "type": "string", + "required": false, + "description": "Comma-separated list of URLs for Schema Registry instances that can be used to register or look up schemas.", + "defaultValue": "" + }, + { + "name": "security.protocol", + "type": "combo", + "required": false, + "description": "Protocol used to communicate with brokers.", + "defaultValue": "PLAINTEXT" + }, + { + "name": "send.buffer.bytes", + "type": "string", + "required": false, + "description": "The size of the TCP send buffer (SO_SNDBUF) to use when sending data.", + "defaultValue": "131072" + }, + { + "name": "sequence", + "type": "keyOrExpression", + "required": true, + "description": "Sequence to inject the Kafka message", + "defaultValue": "" + }, + { + "name": "sequential", + "type": "boolean", + "required": false, + "description": "The behaviour when executing the given sequence.", + "defaultValue": "True" + }, + { + "name": "session.timeout.ms", + "type": "string", + "required": false, + "description": "The timeout used to detect client failures when using Kafka’s group management facility.", + "defaultValue": "" + }, + { + "name": "ssl.cipher.suites", + "type": "string", + "required": false, + "description": "A list of cipher suites.", + "defaultValue": "" + }, + { + "name": "ssl.enabled.protocols", + "type": "string", + "required": false, + "description": "The list of protocols enabled for SSL connections.", + "defaultValue": "" + }, + { + "name": "ssl.endpoint.identification.algorithm", + "type": "string", + "required": false, + "description": "The endpoint identification algorithm to validate server hostname using server certificate.", + "defaultValue": "" + }, + { + "name": "ssl.key.password", + "type": "string", + "required": false, + "description": "The password of the private key in the key store file or the PEM key.", + "defaultValue": "" + }, + { + "name": "ssl.keymanager.algorithm", + "type": "string", + "required": false, + "description": "The algorithm used by key manager factory for SSL connections.", + "defaultValue": "" + }, + { + "name": "ssl.keystore.location", + "type": "string", + "required": false, + "description": "The location of the key store file.", + "defaultValue": "" + }, + { + "name": "ssl.keystore.password", + "type": "string", + "required": false, + "description": "The store password for the key store file.", + "defaultValue": "" + }, + { + "name": "ssl.keystore.type", + "type": "string", + "required": false, + "description": "The file format of the key store file.", + "defaultValue": "" + }, + { + "name": "ssl.protocol", + "type": "string", + "required": false, + "description": "The SSL protocol used to generate the SSLContext.", + "defaultValue": "" + }, + { + "name": "ssl.provider", + "type": "string", + "required": false, + "description": "The name of the security provider used for SSL connections.", + "defaultValue": "" + }, + { + "name": "ssl.secure.random.implementation", + "type": "string", + "required": false, + "description": "The SecureRandom PRNG implementation to use for SSL cryptography operations.", + "defaultValue": "" + }, + { + "name": "ssl.trustmanager.algorithm", + "type": "string", + "required": false, + "description": "The algorithm used by trust manager factory for SSL connections.", + "defaultValue": "" + }, + { + "name": "ssl.truststore.location", + "type": "string", + "required": false, + "description": "The location of the trust store file.", + "defaultValue": "" + }, + { + "name": "ssl.truststore.password", + "type": "string", + "required": false, + "description": "The password for the trust store file.", + "defaultValue": "" + }, + { + "name": "ssl.truststore.type", + "type": "string", + "required": false, + "description": "The file format of the trust store file.", + "defaultValue": "" + }, + { + "name": "suspend", + "type": "boolean", + "required": false, + "description": "Enable this option to suspend the inbound endpoint immediately after deployment.", + "defaultValue": "False" + }, + { + "name": "topic.name", + "type": "string", + "required": true, + "description": "Name of the Kafka topic to subscribe to.", + "defaultValue": "" + }, + { + "name": "topic.partitions", + "type": "string", + "required": false, + "description": "Comma separated list of partitions of the topic which the consumer has subscribed to.", + "defaultValue": "" + }, + { + "name": "topic.pattern", + "type": "string", + "required": false, + "description": "The name pattern of the topic.", + "defaultValue": "" + }, + { + "name": "value.delegate.deserializer", + "type": "string", + "required": false, + "description": "The actual value deserializer that the error handling deserializer should delegate to.", + "defaultValue": "" + }, + { + "name": "value.deserializer", + "type": "string", + "required": true, + "description": "Deserializer class for value that implements the org.apache.kafka.common.serialization.Deserializer interface.", + "defaultValue": "org.apache.kafka.common.serialization.StringDeserializer" + } + ] + } + ], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 15, + "iconUrl": "" + }, + { + "connectorName": "Pulsar (Inbound)", + "repoName": "mi-inbound-pulsar", + "description": "Apache Pulsar inbound endpoint acts as a message consumer for Apache Pulsar. It receives messages from configured topics of Apache Pulsar platform and inject them into the mediation flow.", + "connectorType": "Inbound", + "mavenGroupId": "org.wso2.integration.inbound", + "mavenArtifactId": "mi-inbound-pulsar", + "id": "", + "version": { + "tagName": "0.9.3", + "releaseId": "233149635", + "isLatest": true, + "isDeprecated": false, + "operations": [ + { + "name": "init", + "description": "Initialize Kafka Inbound Endpoint", + "isHidden": false, + "parameters": [ + { + "name": "ackTimeoutMillis", + "type": "string", + "required": false, + "description": "Timeout for acknowledging messages (in milliseconds).", + "defaultValue": "" + }, + { + "name": "authenticationType", + "type": "combo", + "required": false, + "description": "The authentication mechanism to use for authenticating with Pulsar. Supported values: None, JWT, TLS, OAuth2.", + "defaultValue": "None" + }, + { + "name": "autoAckOldestChunkedMessageOnQueueFull", + "type": "boolean", + "required": false, + "description": "Automatically acknowledge the oldest chunked message when the queue is full.", + "defaultValue": "" + }, + { + "name": "autoUpdatePartitions", + "type": "boolean", + "required": false, + "description": "Enable automatic partition updates.", + "defaultValue": "" + }, + { + "name": "autoUpdatePartitionsIntervalSeconds", + "type": "string", + "required": false, + "description": "Interval for automatic partition updates (in seconds).", + "defaultValue": "" + }, + { + "name": "batchIndexAckEnabled", + "type": "boolean", + "required": false, + "description": "Enable batch index acknowledgment.", + "defaultValue": "true" + }, + { + "name": "batchingMaxBytes", + "type": "string", + "required": false, + "description": "Maximum size of a batch in bytes.", + "defaultValue": "" + }, + { + "name": "batchingMaxMessages", + "type": "string", + "required": false, + "description": "Maximum number of messages in a batch.", + "defaultValue": "" + }, + { + "name": "batchingTimeout", + "type": "string", + "required": false, + "description": "Timeout for batching messages (in milliseconds).", + "defaultValue": "1000" + }, + { + "name": "batchReceiveEnabled", + "type": "boolean", + "required": false, + "description": "Enable batch receiving of messages.", + "defaultValue": "false" + }, + { + "name": "class", + "type": "string", + "required": true, + "description": "", + "defaultValue": "org.wso2.integration.inbound.PulsarMessageConsumer" }, { - "name": "max.partition.fetch.bytes", + "name": "concurrentLookupRequest", "type": "string", "required": false, - "description": "The maximum amount of data per-partition the server will return.", + "description": "Number of concurrent lookup requests allowed.", "defaultValue": "" }, { - "name": "max.poll.interval.ms", + "name": "connectionMaxIdleSeconds", "type": "string", "required": false, - "description": "The maximum delay between polls when using consumer group management.", - "defaultValue": "300000" + "description": "Maximum idle time for connections (in seconds).", + "defaultValue": "" }, { - "name": "max.poll.records", + "name": "connectionsPerBroker", "type": "string", "required": false, - "description": "The maximum number of records returned in a single poll", - "defaultValue": "500" + "description": "Number of connections per broker.", + "defaultValue": "" }, { - "name": "metadata.max.age.ms", + "name": "connectionTimeoutMs", "type": "string", "required": false, - "description": "The period of time in milliseconds after which we force a refresh of metadata", + "description": "Timeout for establishing a connection (in milliseconds).", + "defaultValue": "" + }, + { + "name": "contentType", + "type": "combo", + "required": true, + "description": "The content type of the incoming Pulsar message (e.g., application/json, text/xml).", + "defaultValue": "text/plain" + }, + { + "name": "coordination", + "type": "boolean", + "required": false, + "description": "In a clustered setup, this will run the inbound only in a single worker node.", + "defaultValue": "True" + }, + { + "name": "dlqMaxRedeliverCount", + "type": "string", + "required": false, + "description": "Maximum number of times a message will be redelivered before being sent to the DLQ.", + "defaultValue": "5" + }, + { + "name": "dlqTopic", + "type": "string", + "required": false, + "description": "Name of the Dead Letter Queue (DLQ) topic.", + "defaultValue": "" + }, + { + "name": "enableBusyWait", + "type": "boolean", + "required": false, + "description": "Enable busy-wait for IO threads.", + "defaultValue": "" + }, + { + "name": "enableTlsHostnameVerification", + "type": "boolean", + "required": false, + "description": "Enable hostname verification for TLS connections.", + "defaultValue": "" + }, + { + "name": "enableTransaction", + "type": "boolean", + "required": false, + "description": "Enable transaction support in Pulsar client.", + "defaultValue": "" + }, + { + "name": "expiryTimeOfIncompleteChunkedMessageMillis", + "type": "string", + "required": false, + "description": "Expiry time for incomplete chunked messages (in milliseconds).", + "defaultValue": "" + }, + { + "name": "generateSequences", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "True" + }, + { + "name": "initialBackoffIntervalNanos", + "type": "string", + "required": false, + "description": "Initial backoff interval for reconnection attempts (in nanoseconds).", + "defaultValue": "" + }, + { + "name": "interval", + "type": "string", + "required": true, + "description": "The polling interval for the Apache Pulsar inbound endpoint in milliseconds.", + "defaultValue": "100" + }, + { + "name": "jwtToken", + "type": "string", + "required": false, + "description": "The JSON Web Token (JWT) used for authenticating with the Pulsar broker.", + "defaultValue": "" + }, + { + "name": "keepAliveIntervalSeconds", + "type": "string", + "required": false, + "description": "Keep-alive interval for broker connections (in seconds).", + "defaultValue": "" + }, + { + "name": "listenerName", + "type": "string", + "required": false, + "description": "Listener name for the Pulsar client.", + "defaultValue": "" + }, + { + "name": "lookupTimeoutMs", + "type": "string", + "required": false, + "description": "Timeout for lookup requests (in milliseconds).", + "defaultValue": "" + }, + { + "name": "maxBackoffIntervalNanos", + "type": "string", + "required": false, + "description": "Maximum backoff interval for reconnection attempts (in nanoseconds).", + "defaultValue": "" + }, + { + "name": "maxLookupRedirects", + "type": "string", + "required": false, + "description": "Maximum number of lookup redirects allowed.", + "defaultValue": "" + }, + { + "name": "maxLookupRequest", + "type": "string", + "required": false, + "description": "Maximum number of lookup requests.", + "defaultValue": "" + }, + { + "name": "maxNumberOfRejectedRequestPerConnection", + "type": "string", + "required": false, + "description": "Maximum number of rejected requests per connection.", + "defaultValue": "" + }, + { + "name": "maxPendingChunkedMessage", + "type": "string", + "required": false, + "description": "Maximum number of pending chunked messages allowed.", + "defaultValue": "" + }, + { + "name": "maxTotalReceiverQueueSizeAcrossPartitions", + "type": "string", + "required": false, + "description": "Maximum total receiver queue size across all partitions.", + "defaultValue": "" + }, + { + "name": "memoryLimitBytes", + "type": "string", + "required": false, + "description": "Memory limit for Pulsar client (in bytes).", + "defaultValue": "" + }, + { + "name": "messageWaitTimeout", + "type": "string", + "required": false, + "description": "The maximum time to wait for a message before timing out (in milliseconds).", + "defaultValue": "1000" + }, + { + "name": "nackRedeliveryDelay", + "type": "string", + "required": false, + "description": "Delay before redelivering negatively acknowledged messages.", + "defaultValue": "" + }, + { + "name": "name", + "type": "string", + "required": true, + "description": "Unique identifier for the Pulsar event integration.", + "defaultValue": "" + }, + { + "name": "numIoThreads", + "type": "string", + "required": false, + "description": "Number of IO threads for Pulsar client.", + "defaultValue": "" + }, + { + "name": "numListenerThreads", + "type": "string", + "required": false, + "description": "Number of listener threads for Pulsar client.", + "defaultValue": "" + }, + { + "name": "onError", + "type": "keyOrExpression", + "required": true, + "description": "Error sequence to invoke on fault", + "defaultValue": "" + }, + { + "name": "operationTimeoutSeconds", + "type": "string", + "required": false, + "description": "Timeout for client operations (in seconds).", "defaultValue": "" }, { - "name": "metric.reporters", - "type": "string", + "name": "processingMode", + "type": "combo", + "required": false, + "description": "Message processing mode (e.g., Sync, Async).", + "defaultValue": "Sync" + }, + { + "name": "readCompacted", + "type": "boolean", "required": false, - "description": "A list of classes to use as metrics reporters.", + "description": "Read messages from the compacted topic.", "defaultValue": "" }, { - "name": "metrics.num.samples", + "name": "receiverQueueSize", "type": "string", "required": false, - "description": "The number of samples maintained to compute metrics.", - "defaultValue": "2" + "description": "Size of the consumer's receiver queue.", + "defaultValue": "" }, { - "name": "metrics.recording.level", - "type": "string", + "name": "replicateSubscriptionState", + "type": "boolean", "required": false, - "description": "The highest recording level for metrics.", - "defaultValue": "INFO" + "description": "Replicate the subscription state across clusters.", + "defaultValue": "" }, { - "name": "metrics.sample.window.ms", + "name": "requestTimeoutMs", "type": "string", "required": false, - "description": "The window of time a metrics sample is computed over.", - "defaultValue": "30000" + "description": "Timeout for requests (in milliseconds).", + "defaultValue": "" }, { - "name": "name", - "type": "string", + "name": "sequence", + "type": "keyOrExpression", "required": true, - "description": "Unique identifier for the Kafka event integration.", + "description": "Sequence to inject the Pulsar message", "defaultValue": "" }, { - "name": "onError", - "type": "keyOrExpression", + "name": "serviceUrl", + "type": "string", "required": true, - "description": "Error sequence to invoke on fault", + "description": "The Pulsar service URL to connect to. For a plain (non-secure) connection, use pulsar://:. For a secure (TLS) connection, use pulsar+ssl://:.", "defaultValue": "" }, { - "name": "partition.assignment.strategy", + "name": "statsIntervalSeconds", "type": "string", "required": false, - "description": "A list of class names or class types, ordered by preference, of supported partition assignment strategies.", - "defaultValue": "org.apache.kafka.clients.consumer.RangeAssignor" + "description": "Interval for statistics collection (in seconds).", + "defaultValue": "" }, { - "name": "poll.timeout", + "name": "subscriptionInitialPosition", + "type": "combo", + "required": false, + "description": "Initial position for the subscription (e.g., Latest, Earliest).", + "defaultValue": "Latest" + }, + { + "name": "subscriptionName", "type": "string", "required": true, - "description": "The timeout in milliseconds when polling for consumer data.", - "defaultValue": "1000" + "description": "Name of the subscription.", + "defaultValue": "" }, { - "name": "receive.buffer.bytes", - "type": "string", + "name": "subscriptionTopicsMode", + "type": "combo", "required": false, - "description": "The size of the TCP receive buffer to use when reading data.", - "defaultValue": "65536" + "description": "Mode for subscribing to topics (e.g., AllTopics, PersistentOnly, NonPersistentOnly).", + "defaultValue": "PersistentOnly" }, { - "name": "reconnect.backoff.ms", - "type": "string", + "name": "subscriptionType", + "type": "combo", "required": false, - "description": "The amount of time to wait before attempting to reconnect to a given host.", - "defaultValue": "50" + "description": "Type of subscription (e.g., Exclusive, Shared, Failover, Key_Shared).", + "defaultValue": "Exclusive" }, { - "name": "request.timeout.ms", - "type": "string", + "name": "suspend", + "type": "boolean", "required": false, - "description": "The maximum amount of time the client will wait for the response of a request.", - "defaultValue": "305000" + "description": "Suspend Inbound", + "defaultValue": "False" }, { - "name": "retry.backoff.ms", - "type": "string", + "name": "tlsAllowInsecureConnection", + "type": "boolean", "required": false, - "description": "The amount of time to wait before attempting to retry a failed request to a given topic partition.", - "defaultValue": "100" + "description": "Allow insecure TLS connections by skipping certificate validation.", + "defaultValue": "false" }, { - "name": "sasl.client.callback.handler.class", + "name": "tlsCiphers", "type": "string", "required": false, - "description": "The fully qualified name of a SASL client callback handler class that implements the AuthenticateCallbackHandler interface.", + "description": "Comma-separated list of enabled TLS cipher suites.", "defaultValue": "" }, { - "name": "sasl.jaas.config", + "name": "tlsProtocols", "type": "string", "required": false, - "description": "JAAS login context parameters for SASL connections in the format used by JAAS configuration files.", + "description": "Comma-separated list of enabled TLS protocols (e.g., TLSv1.2,TLSv1.3).", "defaultValue": "" }, { - "name": "sasl.kerberos.kinit.cmd", + "name": "tlsTrustCertsFilePath", "type": "string", "required": false, - "description": "Kerberos kinit command path.", + "description": "Path to the trusted TLS certificate file.", "defaultValue": "" }, { - "name": "sasl.kerberos.min.time.before.relogin", + "name": "tlsTrustStorePassword", "type": "string", "required": false, - "description": "Login thread sleep time between refresh attempts.", + "description": "Password for the TLS trust store.", "defaultValue": "" }, { - "name": "sasl.kerberos.service.name", + "name": "tlsTrustStorePath", "type": "string", "required": false, - "description": "The Kerberos principal name that Kafka runs as.", + "description": "Path to the TLS trust store file.", "defaultValue": "" }, { - "name": "sasl.kerberos.ticket.renew.jitter", + "name": "tlsTrustStoreType", "type": "string", "required": false, - "description": "Percentage of random jitter added to the renewal time.", + "description": "Type of the TLS trust store (e.g., JKS, PKCS12).", "defaultValue": "" }, { - "name": "sasl.kerberos.ticket.renew.window.factor", + "name": "topicNames", "type": "string", "required": false, - "description": "Login thread will sleep until the specified window factor of time from last refresh to ticket’s expiry has been reached, at which time it will try to renew the ticket.", + "description": "Comma-separated list of topic names to subscribe to.", "defaultValue": "" }, { - "name": "sasl.login.callback.handler.class", + "name": "topicsPattern", "type": "string", "required": false, - "description": "The fully qualified name of a SASL login callback handler class that implements the AuthenticateCallbackHandler interface.", + "description": "Pattern to match topic names for subscription.", "defaultValue": "" }, { - "name": "sasl.login.class", - "type": "string", + "name": "useKeyStoreTls", + "type": "boolean", "required": false, - "description": "The fully qualified name of a class that implements the Login interface.", + "description": "Enable TLS using a Java KeyStore.", + "defaultValue": "false" + }, + { + "name": "useTcpNoDelay", + "type": "boolean", + "required": false, + "description": "Enable TCP no delay for network connections.", "defaultValue": "" }, { - "name": "sasl.login.connect.timeout.ms", + "name": "useTLS", + "type": "boolean", + "required": true, + "description": "Enable TLS to secure the connection between the client and Pulsar broker.", + "defaultValue": "false" + } + ] + } + ], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 15, + "iconUrl": "" + }, + { + "connectorName": "RabbitMQ (Inbound)", + "repoName": "mi-inbound-rabbitmq", + "description": "RabbitMQ Message Listener", + "connectorType": "Inbound", + "mavenGroupId": "org.wso2.integration.inbound", + "mavenArtifactId": "mi-inbound-rabbitmq", + "id": "", + "version": { + "tagName": "1.0.1", + "releaseId": "", + "isLatest": true, + "isDeprecated": false, + "operations": [ + { + "name": "init", + "description": "Initialize RabbitMQ Inbound Endpoint", + "isHidden": false, + "parameters": [ + { + "name": "name", "type": "string", - "required": false, - "description": "The value in milliseconds for the external authentication provider connection timeout.", + "required": true, + "description": "A unique name for this RabbitMQ Inbound Endpoint configuration.", "defaultValue": "" }, { - "name": "sasl.login.read.timeout.ms", + "name": "class", "type": "string", - "required": false, - "description": "The value in milliseconds for the external authentication provider read timeout.", + "required": true, + "description": "", + "defaultValue": "org.wso2.carbon.inbound.rabbitmq.RabbitMQListener" + }, + { + "name": "sequence", + "type": "string", + "required": true, + "description": "The name of the **mediation sequence** that will process the consumed RabbitMQ messages.", "defaultValue": "" }, { - "name": "sasl.login.retry.backoff.max.ms", + "name": "onError", "type": "string", - "required": false, - "description": "The value in milliseconds for the maximum wait between login attempts to the external authentication provider.", + "required": true, + "description": "The name of the **error handling sequence** to execute if an error occurs during message consumption or processing.", "defaultValue": "" }, { - "name": "sasl.login.retry.backoff.ms", + "name": "suspend", + "type": "checkbox", + "required": false, + "description": "", + "defaultValue": "False" + }, + { + "name": "inbound.behavior", "type": "string", + "required": true, + "description": "Defines the message consumption mode (e.g., event-based for immediate processing).", + "defaultValue": "eventBased" + }, + { + "name": "sequential", + "type": "boolean", "required": false, - "description": "The value in milliseconds for the initial wait between login attempts to the external authentication provider.", + "description": "If enabled, messages will be processed one after the other within the injection sequence, preserving message order.", + "defaultValue": "True" + }, + { + "name": "coordination", + "type": "boolean", + "required": false, + "description": "In a clustered environment, set this to true to ensure that only a **single worker node** is consuming messages from the queue at any given time.", + "defaultValue": "True" + }, + { + "name": "rabbitmq.server.host.name", + "type": "string", + "required": true, + "description": "Enter RabbitMQ server Hostnames as a comma-separated list (e.g., host1,host2).", + "defaultValue": "localhost" + }, + { + "name": "rabbitmq.server.port", + "type": "string", + "required": true, + "description": "Enter RabbitMQ server ports as a comma-separated list (e.g., port1,port2). Default is 5672 for non-SSL.", + "defaultValue": "5672" + }, + { + "name": "rabbitmq.queue.name", + "type": "string", + "required": true, + "description": "The name of the RabbitMQ queue to consume messages from.", "defaultValue": "" }, { - "name": "sasl.mechanism", + "name": "rabbitmq.queue.type", + "type": "combo", + "required": true, + "description": "Queue type to interact with: **CLASSIC**, **QUORUM** (high availability), or **STREAM** (large, continuous flow).", + "defaultValue": "QUORUM" + }, + { + "name": "rabbitmq.queue.auto.declare", + "type": "checkbox", + "required": false, + "description": "If enabled, the inbound endpoint will attempt to declare the queue if it doesn't exist.", + "defaultValue": "True" + }, + { + "name": "rabbitmq.exchange.name", "type": "string", "required": false, - "description": "SASL mechanism used for client connections.", + "description": "Name of the exchange to bind the queue to. Leave empty to consume directly from the queue.", "defaultValue": "" }, { - "name": "sasl.oauthbearer.scope.claim.name", + "name": "rabbitmq.exchange.type", + "type": "combo", + "required": false, + "description": "Type of the exchange: **DIRECT**, **FANOUT**, **TOPIC**, or **HEADERS**.", + "defaultValue": "DIRECT" + }, + { + "name": "rabbitmq.exchange.auto.declare", + "type": "checkbox", + "required": false, + "description": "If enabled, the inbound endpoint will attempt to declare the exchange if it doesn't exist.", + "defaultValue": "True" + }, + { + "name": "rabbitmq.routing.key", "type": "string", "required": false, - "description": "The OAuth claim for the scope is often named ‘scope’, but this setting can provide a different name to use for the scope included in the JWT payload’s claims.", + "description": "Routing key for binding the queue to a **DIRECT** or **TOPIC** exchange. Queue name is used if omitted.", "defaultValue": "" }, { - "name": "sasl.oauthbearer.token.endpoint.url", + "name": "rabbitmq.connection.sasl.mechanism", + "type": "combo", + "required": true, + "description": "Select the SASL mechanism for connection authentication.", + "defaultValue": "PLAIN" + }, + { + "name": "rabbitmq.connection.oauth2.enabled", + "type": "checkbox", + "required": false, + "description": "Enable OAuth 2.0 (e.g., Client Credentials or Password Grant) for authentication.", + "defaultValue": "False" + }, + { + "name": "rabbitmq.server.user.name", + "type": "string", + "required": false, + "description": "Username for PLAIN authentication.", + "defaultValue": "guest" + }, + { + "name": "rabbitmq.server.password", "type": "string", "required": false, - "description": "The URL for the OAuth/OIDC identity provider.", - "defaultValue": "" + "description": "Password for PLAIN authentication.", + "defaultValue": "guest" }, { - "name": "schema.registry.url", + "name": "rabbitmq.connection.oauth2.token.endpoint", "type": "string", "required": false, - "description": "Comma-separated list of URLs for Schema Registry instances that can be used to register or look up schemas.", + "description": "The OAuth 2.0 token endpoint URL to retrieve the access token.", "defaultValue": "" }, { - "name": "security.protocol", + "name": "rabbitmq.connection.oauth2.grant.type", "type": "combo", "required": false, - "description": "Protocol used to communicate with brokers.", - "defaultValue": "PLAINTEXT" + "description": "The OAuth 2.0 grant type to use for token retrieval.", + "defaultValue": "client_credentials" }, { - "name": "send.buffer.bytes", + "name": "rabbitmq.connection.oauth2.client.id", "type": "string", "required": false, - "description": "The size of the TCP send buffer (SO_SNDBUF) to use when sending data.", - "defaultValue": "131072" + "description": "The client ID for OAuth 2.0 authentication.", + "defaultValue": "" }, { - "name": "sequence", - "type": "keyOrExpression", - "required": true, - "description": "Sequence to inject the Kafka message", + "name": "rabbitmq.connection.oauth2.client.secret", + "type": "string", + "required": false, + "description": "The client secret for OAuth 2.0 authentication.", "defaultValue": "" }, { - "name": "sequential", - "type": "boolean", + "name": "rabbitmq.connection.oauth2.username", + "type": "string", "required": false, - "description": "The behaviour when executing the given sequence.", - "defaultValue": "True" + "description": "Username required when using the **password** OAuth 2.0 grant type.", + "defaultValue": "" }, { - "name": "session.timeout.ms", + "name": "rabbitmq.connection.oauth2.password", "type": "string", "required": false, - "description": "The timeout used to detect client failures when using Kafka’s group management facility.", + "description": "Password required when using the **password** OAuth 2.0 grant type.", "defaultValue": "" }, { - "name": "ssl.cipher.suites", + "name": "rabbitmq.connection.idle.timeout", "type": "string", "required": false, - "description": "A list of cipher suites.", - "defaultValue": "" + "description": "Maximum period (in milliseconds) the connection can remain idle before being closed.", + "defaultValue": "60000" }, { - "name": "ssl.enabled.protocols", + "name": "rabbitmq.connection.establish.retry.count", "type": "string", "required": false, - "description": "The list of protocols enabled for SSL connections.", + "description": "Number of times to retry establishing the connection. Leave blank for default.", "defaultValue": "" }, { - "name": "ssl.endpoint.identification.algorithm", + "name": "rabbitmq.connection.establish.retry.interval", "type": "string", "required": false, - "description": "The endpoint identification algorithm to validate server hostname using server certificate.", + "description": "Interval (in milliseconds) between retries when establishing the connection.", "defaultValue": "" }, { - "name": "ssl.key.password", + "name": "rabbitmq.connection.recovery.policy.type", + "type": "combo", + "required": false, + "description": "Defines the strategy for automatic connection recovery after a disconnection.", + "defaultValue": "FIXED_WITH_INITIAL_DELAY_AND_TIMEOUT" + }, + { + "name": "rabbitmq.connection.recovery.initial.delay", "type": "string", "required": false, - "description": "The password of the private key in the key store file or the PEM key.", + "description": "Initial delay (in milliseconds) before the first recovery attempt starts.", "defaultValue": "" }, { - "name": "ssl.keymanager.algorithm", + "name": "rabbitmq.connection.recovery.retry.interval", "type": "string", "required": false, - "description": "The algorithm used by key manager factory for SSL connections.", + "description": "Fixed interval (in milliseconds) between connection recovery retries.", "defaultValue": "" }, { - "name": "ssl.keystore.location", + "name": "rabbitmq.connection.recovery.retry.timeout", "type": "string", "required": false, - "description": "The location of the key store file.", + "description": "Total time (in milliseconds) allowed for the connection recovery process before giving up.", "defaultValue": "" }, { - "name": "ssl.keystore.password", + "name": "rabbitmq.queue.arguments", "type": "string", "required": false, - "description": "The store password for the key store file.", + "description": "Additional arguments (comma-separated key=value) to use when declaring the queue.", "defaultValue": "" }, { - "name": "ssl.keystore.type", - "type": "string", + "name": "rabbitmq.classic.version", + "type": "combo", "required": false, - "description": "The file format of the key store file.", + "description": "For Classic Queues: select the queue version (V1 or V2). V2 offers better performance.", "defaultValue": "" }, { - "name": "ssl.protocol", + "name": "rabbitmq.classic.dead.letter.strategy", + "type": "combo", + "required": false, + "description": "Strategy for failed messages: retry and discard, or discard immediately.", + "defaultValue": "NON_RETRYABLE_DISCARD" + }, + { + "name": "rabbitmq.classic.max.priority", "type": "string", "required": false, - "description": "The SSL protocol used to generate the SSLContext.", + "description": "For Classic Queues: the maximum priority level the queue should support (0-255).", "defaultValue": "" }, { - "name": "ssl.provider", + "name": "rabbitmq.quorum.initial.member.count", "type": "string", "required": false, - "description": "The name of the security provider used for SSL connections.", + "description": "For Quorum Queues: the initial number of replica nodes required.", "defaultValue": "" }, { - "name": "ssl.secure.random.implementation", + "name": "rabbitmq.quorum.delivery.limit", "type": "string", "required": false, - "description": "The SecureRandom PRNG implementation to use for SSL cryptography operations.", + "description": "For Quorum Queues: maximum times a message can be redelivered before dead-lettering.", "defaultValue": "" }, { - "name": "ssl.trustmanager.algorithm", - "type": "string", + "name": "rabbitmq.quorum.dead.letter.strategy", + "type": "combo", "required": false, - "description": "The algorithm used by trust manager factory for SSL connections.", + "description": "For Quorum Queues: defines the acknowledgment and redelivery behavior for failed messages.", "defaultValue": "" }, { - "name": "ssl.truststore.location", + "name": "rabbitmq.stream.initial.member.count", "type": "string", "required": false, - "description": "The location of the trust store file.", + "description": "For STREAM queues: the initial number of stream members. Leave blank for default.", "defaultValue": "" }, { - "name": "ssl.truststore.password", + "name": "rabbitmq.stream.max.age", "type": "string", "required": false, - "description": "The password for the trust store file.", + "description": "For STREAM queues: maximum retention time for stream data (e.g., '300').", "defaultValue": "" }, { - "name": "ssl.truststore.type", + "name": "rabbitmq.stream.max.segment.size", "type": "string", "required": false, - "description": "The file format of the trust store file.", + "description": "For STREAM queues: maximum size (in bytes) of a single segment file.", "defaultValue": "" }, { - "name": "suspend", - "type": "boolean", + "name": "rabbitmq.queue.exclusive", + "type": "checkbox", "required": false, - "description": "Suspend Inbound", + "description": "If enabled, the queue is deleted when the declaring connection closes. Only one consumer can use it.", "defaultValue": "False" }, { - "name": "topic.name", - "type": "string", - "required": true, - "description": "Name of the Kafka topic to subscribe to.", - "defaultValue": "" + "name": "rabbitmq.queue.auto.delete", + "type": "checkbox", + "required": false, + "description": "If enabled, the queue is deleted when the last consumer disconnects.", + "defaultValue": "False" }, { - "name": "topic.partitions", + "name": "rabbitmq.header.exchange.binding.arguments", "type": "string", "required": false, - "description": "Comma separated list of partitions of the topic which the consumer has subscribed to.", + "description": "For **HEADERS** exchanges: set binding headers (e.g., `x-match=any`).", "defaultValue": "" }, { - "name": "topic.pattern", + "name": "rabbitmq.exchange.arguments", "type": "string", "required": false, - "description": "The name pattern of the topic.", + "description": "Additional arguments (comma-separated key=value) to use when declaring the exchange.", "defaultValue": "" }, { - "name": "value.delegate.deserializer", + "name": "rabbitmq.exchange.auto.delete", + "type": "checkbox", + "required": false, + "description": "If enabled, the exchange is deleted when the last queue is unbound.", + "defaultValue": "False" + }, + { + "name": "rabbitmq.stream.filters", "type": "string", "required": false, - "description": "The actual value deserializer that the error handling deserializer should delegate to.", + "description": "For STREAM queues: filters (comma-separated values) to apply when consuming messages. Only matching messages are consumed.", "defaultValue": "" }, { - "name": "value.deserializer", - "type": "string", - "required": true, - "description": "Deserializer class for value that implements the org.apache.kafka.common.serialization.Deserializer interface.", - "defaultValue": "org.apache.kafka.common.serialization.StringDeserializer" - } - ] - } - ], - "connections": [] - }, - "otherVersions": { - "1.2.6": "204041583", - "1.2.4": "189378349" - }, - "connectorRank": 15, - "iconUrl": "" - }, - { - "connectorName": "Pulsar (Inbound)", - "repoName": "mi-inbound-pulsar", - "description": "Apache Pulsar inbound endpoint acts as a message consumer for Apache Pulsar. It receives messages from configured topics of Apache Pulsar platform and inject them into the mediation flow.", - "connectorType": "Inbound", - "mavenGroupId": "org.wso2.integration.inbound", - "mavenArtifactId": "mi-inbound-pulsar", - "id": "", - "version": { - "tagName": "0.9.3", - "releaseId": "233149635", - "isLatest": true, - "isDeprecated": false, - "operations": [ - { - "name": "init", - "description": "Initialize Kafka Inbound Endpoint", - "isHidden": false, - "parameters": [ + "name": "rabbitmq.stream.filter.match.unfiltered", + "type": "checkbox", + "required": false, + "description": "If checked, messages without a filter value will also be consumed.", + "defaultValue": "False" + }, { - "name": "ackTimeoutMillis", + "name": "rabbitmq.stream.offset.starting.value", "type": "string", "required": false, - "description": "Timeout for acknowledging messages (in milliseconds).", + "description": "Message consumption starts from this specific offset value (e.g., message position). This value overrides the Offset Strategy.", "defaultValue": "" }, { - "name": "authenticationType", + "name": "rabbitmq.stream.offset.starting.strategy", "type": "combo", "required": false, - "description": "The authentication mechanism to use for authenticating with Pulsar. Supported values: None, JWT, TLS, OAuth2.", - "defaultValue": "None" + "description": "Where consumption starts: **FIRST**, **LAST**, or **NEXT** (for new chunks).", + "defaultValue": "NEXT" }, { - "name": "autoAckOldestChunkedMessageOnQueueFull", - "type": "boolean", + "name": "rabbitmq.stream.offset.tracker.flush.interval", + "type": "string", "required": false, - "description": "Automatically acknowledge the oldest chunked message when the queue is full.", - "defaultValue": "" + "description": "Frequency (in seconds) to persist the consumer's current offset.", + "defaultValue": "10" }, { - "name": "autoUpdatePartitions", - "type": "boolean", + "name": "rabbitmq.stream.offset.tracker.shutdown.timeout", + "type": "string", "required": false, - "description": "Enable automatic partition updates.", - "defaultValue": "" + "description": "Time (in seconds) to wait for the offset tracker to safely flush state on shutdown.", + "defaultValue": "5" }, { - "name": "autoUpdatePartitionsIntervalSeconds", - "type": "string", + "name": "rabbitmq.connection.ssl.enabled", + "type": "checkbox", "required": false, - "description": "Interval for automatic partition updates (in seconds).", - "defaultValue": "" + "description": "Enable SSL/TLS for the RabbitMQ connection.", + "defaultValue": "False" }, { - "name": "batchIndexAckEnabled", - "type": "boolean", + "name": "rabbitmq.connection.ssl.trust.everything", + "type": "checkbox", "required": false, - "description": "Enable batch index acknowledgment.", - "defaultValue": "true" + "description": "If enabled, all server certificates are accepted. **Not recommended for production.**", + "defaultValue": "False" }, { - "name": "batchingMaxBytes", + "name": "rabbitmq.connection.ssl.keystore.location", "type": "string", "required": false, - "description": "Maximum size of a batch in bytes.", + "description": "File path to the Keystore containing the client's private key and certificate.", "defaultValue": "" }, { - "name": "batchingMaxMessages", + "name": "rabbitmq.connection.ssl.keystore.type", "type": "string", "required": false, - "description": "Maximum number of messages in a batch.", - "defaultValue": "" + "description": "The type of the Keystore (e.g., JKS).", + "defaultValue": "JKS" }, { - "name": "batchingTimeout", + "name": "rabbitmq.connection.ssl.keystore.password", "type": "string", "required": false, - "description": "Timeout for batching messages (in milliseconds).", - "defaultValue": "1000" + "description": "The password to access the Keystore.", + "defaultValue": "" }, { - "name": "batchReceiveEnabled", - "type": "boolean", + "name": "rabbitmq.connection.ssl.truststore.location", + "type": "string", "required": false, - "description": "Enable batch receiving of messages.", - "defaultValue": "false" + "description": "File path to the Truststore containing trusted server certificates.", + "defaultValue": "" }, { - "name": "class", + "name": "rabbitmq.connection.ssl.truststore.type", "type": "string", - "required": true, - "description": "", - "defaultValue": "org.wso2.integration.inbound.PulsarMessageConsumer" + "required": false, + "description": "The type of the Truststore (e.g., JKS).", + "defaultValue": "JKS" }, { - "name": "concurrentLookupRequest", + "name": "rabbitmq.connection.ssl.truststore.password", "type": "string", "required": false, - "description": "Number of concurrent lookup requests allowed.", + "description": "The password to access the Truststore.", "defaultValue": "" }, { - "name": "connectionMaxIdleSeconds", + "name": "rabbitmq.connection.ssl.version", "type": "string", "required": false, - "description": "Maximum idle time for connections (in seconds).", + "description": "The preferred SSL/TLS protocol version (e.g., 'TLSv1.2', 'TLSv1.3').", "defaultValue": "" }, { - "name": "connectionsPerBroker", - "type": "string", + "name": "rabbitmq.connection.ssl.hostname.verification.enabled", + "type": "checkbox", "required": false, - "description": "Number of connections per broker.", - "defaultValue": "" + "description": "If enabled, verifies the hostname in the server's certificate against the connected host name.", + "defaultValue": "False" }, { - "name": "connectionTimeoutMs", + "name": "rabbitmq.dead.letter.queue.name", "type": "string", "required": false, - "description": "Timeout for establishing a connection (in milliseconds).", + "description": "The name of the Dead Letter Queue (DLQ) for failed messages.", "defaultValue": "" }, { - "name": "contentType", + "name": "rabbitmq.dead.letter.queue.type", "type": "combo", - "required": true, - "description": "The content type of the incoming Pulsar message (e.g., application/json, text/xml).", - "defaultValue": "text/plain" - }, - { - "name": "coordination", - "type": "boolean", "required": false, - "description": "In a clustered setup, this will run the inbound only in a single worker node.", - "defaultValue": "True" + "description": "The type of the Dead Letter Queue.", + "defaultValue": "CLASSIC" }, { - "name": "dlqMaxRedeliverCount", - "type": "string", + "name": "rabbitmq.dead.letter.queue.auto.declare", + "type": "checkbox", "required": false, - "description": "Maximum number of times a message will be redelivered before being sent to the DLQ.", - "defaultValue": "5" + "description": "If enabled, the inbound endpoint will attempt to declare the Dead Letter Queue.", + "defaultValue": "False" }, { - "name": "dlqTopic", + "name": "rabbitmq.dead.letter.exchange.name", "type": "string", "required": false, - "description": "Name of the Dead Letter Queue (DLQ) topic.", + "description": "The name of the Dead Letter Exchange (DLX) to route dead-lettered messages.", "defaultValue": "" }, { - "name": "enableBusyWait", - "type": "boolean", + "name": "rabbitmq.dead.letter.exchange.type", + "type": "combo", "required": false, - "description": "Enable busy-wait for IO threads.", - "defaultValue": "" + "description": "The type of the Dead Letter Exchange.", + "defaultValue": "DIRECT" }, { - "name": "enableTlsHostnameVerification", - "type": "boolean", + "name": "rabbitmq.dead.letter.exchange.auto.declare", + "type": "checkbox", "required": false, - "description": "Enable hostname verification for TLS connections.", - "defaultValue": "" + "description": "If enabled, the inbound endpoint will attempt to declare the Dead Letter Exchange.", + "defaultValue": "False" }, { - "name": "enableTransaction", - "type": "boolean", + "name": "rabbitmq.dead.letter.routing.key", + "type": "string", "required": false, - "description": "Enable transaction support in Pulsar client.", + "description": "The routing key for messages sent to the Dead Letter Exchange (for DIRECT DLXs only).", "defaultValue": "" }, { - "name": "expiryTimeOfIncompleteChunkedMessageMillis", + "name": "rabbitmq.max.dead.lettered.count", "type": "string", "required": false, - "description": "Expiry time for incomplete chunked messages (in milliseconds).", + "description": "Maximum times a message can be dead-lettered and retried before being sent to the final DLQ.", "defaultValue": "" }, { - "name": "generateSequences", - "type": "checkbox", - "required": false, - "description": "", - "defaultValue": "True" - }, - { - "name": "initialBackoffIntervalNanos", + "name": "rabbitmq.final.dead.letter.queue.name", "type": "string", "required": false, - "description": "Initial backoff interval for reconnection attempts (in nanoseconds).", + "description": "The name of the final DLQ for messages that exceed the Max Dead Lettered Count.", "defaultValue": "" }, { - "name": "interval", - "type": "string", - "required": true, - "description": "The polling interval for the Apache Pulsar inbound endpoint in milliseconds.", - "defaultValue": "100" + "name": "rabbitmq.final.dead.letter.queue.type", + "type": "combo", + "required": false, + "description": "The type of the final Dead Letter Queue.", + "defaultValue": "CLASSIC" }, { - "name": "jwtToken", - "type": "string", + "name": "rabbitmq.final.dead.letter.queue.auto.declare", + "type": "checkbox", "required": false, - "description": "The JSON Web Token (JWT) used for authenticating with the Pulsar broker.", - "defaultValue": "" + "description": "If enabled, the inbound endpoint will attempt to declare the final Dead Letter Queue.", + "defaultValue": "False" }, { - "name": "keepAliveIntervalSeconds", + "name": "rabbitmq.final.dead.letter.exchange.name", "type": "string", "required": false, - "description": "Keep-alive interval for broker connections (in seconds).", + "description": "The name of the final Dead Letter Exchange to route messages exceeding retry limits.", "defaultValue": "" }, { - "name": "listenerName", - "type": "string", + "name": "rabbitmq.final.dead.letter.exchange.type", + "type": "combo", "required": false, - "description": "Listener name for the Pulsar client.", - "defaultValue": "" + "description": "The type of the final Dead Letter Exchange.", + "defaultValue": "DIRECT" + }, + { + "name": "rabbitmq.final.dead.letter.exchange.auto.declare", + "type": "checkbox", + "required": false, + "description": "If enabled, the inbound endpoint will attempt to declare the final Dead Letter Exchange.", + "defaultValue": "False" }, { - "name": "lookupTimeoutMs", + "name": "rabbitmq.final.dead.letter.routing.key", "type": "string", "required": false, - "description": "Timeout for lookup requests (in milliseconds).", + "description": "The routing key for messages sent to the final Dead Letter Exchange (for DIRECT DLXs only).", "defaultValue": "" }, { - "name": "maxBackoffIntervalNanos", + "name": "rabbitmq.dead.letter.publisher.retry.interval", "type": "string", "required": false, - "description": "Maximum backoff interval for reconnection attempts (in nanoseconds).", - "defaultValue": "" + "description": "Interval (in milliseconds) between retries when publishing to a Dead Letter Queue.", + "defaultValue": "10000" }, { - "name": "maxLookupRedirects", + "name": "rabbitmq.dead.letter.publisher.retry.count", "type": "string", "required": false, - "description": "Maximum number of lookup redirects allowed.", - "defaultValue": "" + "description": "Number of times to retry publishing a message to a Dead Letter Queue.", + "defaultValue": "3" }, { - "name": "maxLookupRequest", + "name": "rabbitmq.dead.letter.publisher.retry.exponential.factor", "type": "string", "required": false, - "description": "Maximum number of lookup requests.", - "defaultValue": "" + "description": "Exponential backoff factor applied to the retry interval (e.g., 2.0 doubles the interval).", + "defaultValue": "2.0" }, { - "name": "maxNumberOfRejectedRequestPerConnection", + "name": "rabbitmq.dead.letter.publisher.ack.wait.time", "type": "string", "required": false, - "description": "Maximum number of rejected requests per connection.", - "defaultValue": "" + "description": "Maximum time (in milliseconds) to wait for the broker to acknowledge a dead-letter message.", + "defaultValue": "30000" }, { - "name": "maxPendingChunkedMessage", + "name": "rabbitmq.dead.letter.publisher.shutdown.timeout", "type": "string", "required": false, - "description": "Maximum number of pending chunked messages allowed.", - "defaultValue": "" + "description": "Time (in milliseconds) to wait for the dead letter publisher to shut down gracefully.", + "defaultValue": "180000" }, { - "name": "maxTotalReceiverQueueSizeAcrossPartitions", - "type": "string", + "name": "rabbitmq.throttle.enabled", + "type": "checkbox", "required": false, - "description": "Maximum total receiver queue size across all partitions.", - "defaultValue": "" + "description": "If enabled, message consumption will be throttled to a specified rate.", + "defaultValue": "false" }, { - "name": "memoryLimitBytes", - "type": "string", + "name": "rabbitmq.throttle.mode", + "type": "combo", "required": false, - "description": "Memory limit for Pulsar client (in bytes).", - "defaultValue": "" + "description": "Mode of throttling: **FIXED_INTERVAL** or **BATCH**.", + "defaultValue": "BATCH" }, { - "name": "messageWaitTimeout", - "type": "string", + "name": "rabbitmq.throttle.timeUnit", + "type": "combo", "required": false, - "description": "The maximum time to wait for a message before timing out (in milliseconds).", - "defaultValue": "1000" + "description": "The time unit for the throttling rate: per **MINUTE**, **HOUR**, or **DAY**.", + "defaultValue": "MINUTE" }, { - "name": "nackRedeliveryDelay", + "name": "rabbitmq.throttle.count", "type": "string", "required": false, - "description": "Delay before redelivering negatively acknowledged messages.", + "description": "Maximum number of messages to consume within the specified time unit.", "defaultValue": "" }, { - "name": "name", + "name": "rabbitmq.server.virtual.host", "type": "string", - "required": true, - "description": "Unique identifier for the Pulsar event integration.", + "required": false, + "description": "The virtual host (vhost) to connect to. Leave blank for the default '/' vhost.", "defaultValue": "" }, { - "name": "numIoThreads", + "name": "rabbitmq.message.content.type", "type": "string", "required": false, - "description": "Number of IO threads for Pulsar client.", + "description": "The Content-Type header to set for the consumed message if the content-type cannot be determined from the consumed message.", "defaultValue": "" }, { - "name": "numListenerThreads", + "name": "rabbitmq.message.content.encoding", "type": "string", "required": false, - "description": "Number of listener threads for Pulsar client.", + "description": "The content encoding/character set (e.g., UTF-8) used for the message body if the encoding/character set cannot be determined from the consumed message.", "defaultValue": "" }, { - "name": "onError", - "type": "keyOrExpression", - "required": true, - "description": "Error sequence to invoke on fault", - "defaultValue": "" + "name": "rabbitmq.queue.overflow.strategy", + "type": "combo", + "required": false, + "description": "What happens when queue is full: **DROP_HEAD** (oldest discarded), **REJECT_PUBLISH**, or **REJECT_PUBLISH_DLX**.", + "defaultValue": "DROP_HEAD" }, { - "name": "operationTimeoutSeconds", + "name": "rabbitmq.message.requeue.delay", "type": "string", "required": false, - "description": "Timeout for client operations (in seconds).", + "description": "Delay (in milliseconds) before a failed message is automatically requeued.", "defaultValue": "" }, { - "name": "processingMode", - "type": "combo", + "name": "rabbitmq.auto.ack.enabled", + "type": "checkbox", "required": false, - "description": "Message processing mode (e.g., Sync, Async).", - "defaultValue": "Sync" + "description": "If enabled, messages are automatically acknowledged (ACKed) upon receipt.", + "defaultValue": "false" }, { - "name": "readCompacted", - "type": "boolean", + "name": "rabbitmq.ack.wait.time", + "type": "string", "required": false, - "description": "Read messages from the compacted topic.", - "defaultValue": "" + "description": "Maximum time (in milliseconds) to wait for a message acknowledgment (ACK).", + "defaultValue": "180000" }, { - "name": "receiverQueueSize", + "name": "rabbitmq.concurrent.consumers.count", "type": "string", "required": false, - "description": "Size of the consumer's receiver queue.", - "defaultValue": "" + "description": "The number of concurrent consumers to create for processing messages.", + "defaultValue": "1" }, { - "name": "replicateSubscriptionState", - "type": "boolean", + "name": "rabbitmq.message.receiver.thread.pool.size", + "type": "string", "required": false, - "description": "Replicate the subscription state across clusters.", - "defaultValue": "" + "description": "Size of the thread pool for receiving messages. Recommended to be greater than the number of concurrent consumers.", + "defaultValue": "1" }, { - "name": "requestTimeoutMs", + "name": "rabbitmq.consumer.initial.credit", "type": "string", "required": false, - "description": "Timeout for requests (in milliseconds).", - "defaultValue": "" + "description": "The prefetch count, limiting unacknowledged messages sent to the consumer (QoS).", + "defaultValue": "1" }, { - "name": "sequence", - "type": "keyOrExpression", + "name": "rabbitmq.classic.override.requeue.with.discard", + "type": "checkbox", + "required": false, + "description": "For Classic Queues: if enabled, any requeue attempt for a failed message will result in discard instead.", + "defaultValue": "False" + } + ] + } + ], + "connections": [] + }, + "otherVersions": {}, + "connectorRank": 15, + "iconUrl": "" + }, + { + "connectorName": "Salesforce (Inbound)", + "repoName": "esb-inbound-salesforce", + "description": "The Salesforce streaming Inbound Endpoint allows you to perform various operations such as push topics and platform events on Salesforce streaming data via WSO2 EI.", + "connectorType": "Inbound", + "mavenGroupId": "org.wso2.integration.inbound", + "mavenArtifactId": "mi-inbound-salesforce", + "id": "", + "version": { + "tagName": "3.0.4", + "releaseId": "255692225", + "isLatest": true, + "isDeprecated": false, + "operations": [ + { + "name": "init", + "description": "Initialize Kafka Inbound Endpoint", + "isHidden": false, + "parameters": [ + { + "name": "class", + "type": "string", "required": true, - "description": "Sequence to inject the Pulsar message", - "defaultValue": "" + "description": "", + "defaultValue": "org.wso2.carbon.inbound.salesforce.poll.SalesforceStreamData" }, { - "name": "serviceUrl", + "name": "connection.salesforce.connectionTimeout", "type": "string", - "required": true, - "description": "The Pulsar service URL to connect to. For a plain (non-secure) connection, use pulsar://:. For a secure (TLS) connection, use pulsar+ssl://:.", - "defaultValue": "" + "required": false, + "description": "Connection timeout in milliseconds.", + "defaultValue": "10000" }, { - "name": "statsIntervalSeconds", + "name": "connection.salesforce.EventIDStoredFilePath", "type": "string", "required": false, - "description": "Interval for statistics collection (in seconds).", + "description": "Specify the file path of a text file to start replaying from the event ID stored in it.", "defaultValue": "" }, { - "name": "subscriptionInitialPosition", - "type": "combo", + "name": "connection.salesforce.initialEventId", + "type": "string", "required": false, - "description": "Initial position for the subscription (e.g., Latest, Earliest).", - "defaultValue": "Latest" + "description": "Initial event ID to start reading messages.", + "defaultValue": "-1" }, { - "name": "subscriptionName", + "name": "connection.salesforce.loginEndpoint", "type": "string", "required": true, - "description": "Name of the subscription.", - "defaultValue": "" + "description": "Salesforce login URL endpoint.", + "defaultValue": "https://login.salesforce.com" }, { - "name": "subscriptionTopicsMode", - "type": "combo", - "required": false, - "description": "Mode for subscribing to topics (e.g., AllTopics, PersistentOnly, NonPersistentOnly).", - "defaultValue": "PersistentOnly" + "name": "connection.salesforce.packageVersion", + "type": "string", + "required": true, + "description": "Version of the Salesforce package.", + "defaultValue": "" }, { - "name": "subscriptionType", - "type": "combo", - "required": false, - "description": "Type of subscription (e.g., Exclusive, Shared, Failover, Key_Shared).", - "defaultValue": "Exclusive" + "name": "connection.salesforce.password", + "type": "string", + "required": true, + "description": "Salesforce login password.", + "defaultValue": "" }, { - "name": "suspend", - "type": "boolean", + "name": "connection.salesforce.replay", + "type": "checkbox", "required": false, - "description": "Suspend Inbound", + "description": "Enabling this will read the event ID stored in the Registry or from the text file provided via Event ID File Path parameter.", "defaultValue": "False" }, { - "name": "tlsAllowInsecureConnection", - "type": "boolean", + "name": "connection.salesforce.replayWithMultipleInbounds", + "type": "checkbox", "required": false, - "description": "Allow insecure TLS connections by skipping certificate validation.", - "defaultValue": "false" + "description": "When enabled, supports replaying messages with multiple inbound endpoints.", + "defaultValue": "False" }, { - "name": "tlsCiphers", + "name": "connection.salesforce.salesforceObject", "type": "string", - "required": false, - "description": "Comma-separated list of enabled TLS cipher suites.", + "required": true, + "description": "Name of the Salesforce object to interact with.", "defaultValue": "" }, { - "name": "tlsProtocols", + "name": "connection.salesforce.soapApiVersion", "type": "string", "required": false, - "description": "Comma-separated list of enabled TLS protocols (e.g., TLSv1.2,TLSv1.3).", - "defaultValue": "" + "description": "Version of the Salesforce SOAP API to use.", + "defaultValue": "22.0" }, { - "name": "tlsTrustCertsFilePath", + "name": "connection.salesforce.userName", "type": "string", - "required": false, - "description": "Path to the trusted TLS certificate file.", + "required": true, + "description": "Salesforce login user name.", "defaultValue": "" }, { - "name": "tlsTrustStorePassword", + "name": "connection.salesforce.waitTime", "type": "string", "required": false, - "description": "Password for the TLS trust store.", - "defaultValue": "" + "description": "Wait time in milliseconds before making a new request in case of server delays.", + "defaultValue": "86400000" }, { - "name": "tlsTrustStorePath", - "type": "string", + "name": "coordination", + "type": "checkbox", "required": false, - "description": "Path to the TLS trust store file.", - "defaultValue": "" + "description": "This will ensure that the inbound endpoint is only executed by one node in the clustered environment.", + "defaultValue": "True" }, { - "name": "tlsTrustStoreType", - "type": "string", + "name": "generateSequences", + "type": "checkbox", "required": false, - "description": "Type of the TLS trust store (e.g., JKS, PKCS12).", - "defaultValue": "" + "description": "", + "defaultValue": "True" }, { - "name": "topicNames", + "name": "interval", "type": "string", - "required": false, - "description": "Comma-separated list of topic names to subscribe to.", + "required": true, + "description": "The polling interval for the Salesforce inbound endpoint.", "defaultValue": "" }, { - "name": "topicsPattern", + "name": "name", "type": "string", - "required": false, - "description": "Pattern to match topic names for subscription.", + "required": true, + "description": "Unique identifier for the Salesforce event integration.", "defaultValue": "" }, { - "name": "useKeyStoreTls", - "type": "boolean", - "required": false, - "description": "Enable TLS using a Java KeyStore.", - "defaultValue": "false" + "name": "onError", + "type": "keyOrExpression", + "required": true, + "description": "Error sequence to invoke on fault", + "defaultValue": "" }, { - "name": "useTcpNoDelay", - "type": "boolean", - "required": false, - "description": "Enable TCP no delay for network connections.", + "name": "sequence", + "type": "keyOrExpression", + "required": true, + "description": "Sequence to inject the Salesforce message", "defaultValue": "" }, { - "name": "useTLS", - "type": "boolean", - "required": true, - "description": "Enable TLS to secure the connection between the client and Pulsar broker.", - "defaultValue": "false" + "name": "sequential", + "type": "checkbox", + "required": false, + "description": "The behaviour when executing the given sequence.", + "defaultValue": "True" + }, + { + "name": "suspend", + "type": "checkbox", + "required": false, + "description": "Enable this option to suspend the inbound endpoint immediately after deployment.", + "defaultValue": "False" } ] } @@ -1718,39 +2988,13 @@ export const INBOUND_DB = [ "connections": [] }, "otherVersions": {}, - "connectorRank": 15, - "iconUrl": "" - }, - { - "connectorName": "Salesforce (Inbound)", - "repoName": "esb-inbound-salesforce", - "description": "The Salesforce streaming Inbound Endpoint allows you to perform various operations such as push topics and platform events on Salesforce streaming data via WSO2 EI.", - "connectorType": "Inbound", - "mavenGroupId": "org.wso2.integration.inbound", - "mavenArtifactId": "mi-inbound-salesforce", - "id": "", - "version": { - "tagName": "3.0.0", - "releaseId": "221723352", - "isLatest": true, - "isDeprecated": false, - "operations": [], - "connections": [] - }, - "otherVersions": { - "2.1.13": "220036413", - "2.1.11": "218982716", - "2.1.0": "204308186", - "2.0.20": "204045099", - "2.0.17": "199568764" - }, "connectorRank": 16, "iconUrl": "" }, { - "connectorName": "Salesforce PubSub", + "connectorName": "Salesforce PubSub (Inbound)", "repoName": "mi-inbound-salesforcepubsub", - "description": "Inbuilt Salesforce Pub/Sub Event Listener", + "description": "Salesforce Pub/Sub Event Listener", "connectorType": "Inbound", "mavenGroupId": "org.wso2.integration.inbound", "mavenArtifactId": "mi-inbound-salesforcepubsub", @@ -1776,8 +3020,8 @@ export const INBOUND_DB = [ "mavenArtifactId": "mi-inbound-smpp", "id": "", "version": { - "tagName": "2.0.1", - "releaseId": "233149626", + "tagName": "2.0.2", + "releaseId": "255699403", "isLatest": true, "isDeprecated": false, "operations": [ @@ -1930,7 +3174,7 @@ export const INBOUND_DB = [ "name": "suspend", "type": "checkbox", "required": false, - "description": "Suspend Inbound", + "description": "Enable this option to suspend the inbound endpoint immediately after deployment.", "defaultValue": "False" }, { @@ -1959,9 +3203,7 @@ export const INBOUND_DB = [ ], "connections": [] }, - "otherVersions": { - "1.0.3": "204042048" - }, + "otherVersions": {}, "connectorRank": 13, "iconUrl": "" } diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_expression_examples.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_expression_examples.ts index 35cc44598e1..48c591bb494 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_expression_examples.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_expression_examples.ts @@ -17,7 +17,10 @@ */ export const SYNAPSE_EXPRESSION_EXAMPLES = ` -- Example filter mediator configuration: +These are concise usage samples that complement SYNAPSE_EXPRESSIONS_DOCS. +Use SYNAPSE_EXPRESSIONS_DOCS as the source of truth for syntax and constraints. + +### Example filter mediator configuration: \`\`\`xml @@ -33,7 +36,7 @@ export const SYNAPSE_EXPRESSION_EXAMPLES = ` \`\`\` -- Example switch mediator configuration: +### Example switch mediator configuration: \`\`\`xml @@ -49,7 +52,7 @@ export const SYNAPSE_EXPRESSION_EXAMPLES = ` \`\`\` -- Example of complex filtering using Synapse expressions: +### Example of complex filtering using Synapse expressions: \`\`\`xml @@ -67,33 +70,50 @@ export const SYNAPSE_EXPRESSION_EXAMPLES = ` \`\`\` -- You can use Synapse expressions to provide dynamic values to any connector operation or mediator. -- Example of using Synapse expressions in the new HTTP connector to provide query parameters dynamically. -\`\`\`xml - - /getQuote?userId=\${vars.userId} - [] - XML - {\${xpath('$body/node()')}} - false - false - false - false - false - false - -\`\`\` - -- Do not use the old payloadFactory mediator. Use the new payloadFactory mediator which supports Synapse expressions. -- Example of using synapse expressions inside the new PayloadFactory. +### PayloadFactory with Synapse expressions: +- If you select default as the Template Type, you can define the payload using inline synapse expressions as shown below. This example defines a JSON payload. \`\`\`xml - + { - "coordinates": null, - "id_str": "\${payload.entities.hashtags[0].text}" + "AddInteger": { + "Arg1": \${payload.grocery.arg1}, + "Arg2": \${payload.grocery.arg2} + } } \`\`\` + +- Now the Payload mediator supports FreeMarker Templates. If you select freemarker as the Template Type, you can define the payload as a FreeMarker template. The following example defines a JSON payload. +\`\`\`xml + + + + + +\`\`\` + +### Deprecated pattern +- NEVER use with $1/$2 placeholders in payloadFactory. This is a deprecated pattern. Always embed Synapse expressions directly inside . Using will fail at runtime with an XPath parse error because only accepts XPath, not Synapse expressions. +- Wrong deprecated syntax: +\`\`\`xml + + $1 + + + + +\`\`\` +- Correct syntax: +\`\`\`xml + + \${vars.myValue} + +\`\`\` `; diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_expression_guide.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_expression_guide.ts index b1b600eaf21..4db17b4610e 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_expression_guide.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_expression_guide.ts @@ -261,27 +261,24 @@ You can do the following operations with Synapse Expressions #### XPath in Synapse Expressions — Rules -1. **No \\\`\\\\'\\\` escaping**: \\\`\\\\'\\\` is invalid XML. Single quotes inside a - double-quoted XML attribute don't need escaping. - -2. **Quote nesting in xpath()**: The xpath() function parameter uses either - single OR double quotes as outer delimiter. String literals inside the - XPath must use the opposite quote type. Since the XML attribute is - double-quoted, use " to embed double-quote delimiters: - CORRECT: \\\`expression="\\\${xpath("string(\\$body//*[local-name()='El'])")}"\\\` - WRONG: \\\`expression="\\\${xpath('//*[local-name()=\\\\'El\\\\']/text()')}"\\\` - -3. **No nested function calls with xpath()**: trim(xpath(...)) silently - returns empty. Always extract to a variable first, then apply functions: - \\\`\\\` - ... then use \\\`\\\${trim(vars.raw)}\\\` in payloadFactory. - -4. **SOAP response XPath**: Always use \\$body context and string() to - reliably extract text from SOAP responses: - \\\`\\\${xpath("string(\\$body//*[local-name()='ElementName'])")}\\\` - -5. **Null variable checks in filter**: \\\`\\\${vars.x == null or vars.x == ''}\\\` - can throw WARN when the variable is truly null. Prefer \\\`\\\${not(exists(vars.x))}\\\`. +1. **Do not escape single quotes as \`\\'\`** in XML attributes. In a double-quoted XML attribute, plain single quotes are valid. + +2. **Use opposite quote types in \`xpath()\`**: + - Use \`"..."\` as the outer xpath string and single quotes inside XPath literals. + - Correct example: + \`\`\`xml + + \`\`\` + +3. **Avoid nested function calls around \`xpath()\`**. Extract first, then transform: + \`\`\`xml + + + \`\`\` + +4. **SOAP response XPath**: use \`$body\` context with \`string()\` for reliable text extraction. + +5. **Null checks in filter**: prefer \`\${not(exists(vars.x))}\` over \`\${vars.x == null or vars.x == ''}\` to avoid WARNs on truly null values. #### Where can you use Synapse Expressions? - You can use synapse expressions literally anywhere in the synapse configuration to provide dynamic inputs. diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_guide.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_guide.ts index 44cdea73886..3d0c0c17241 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_guide.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_guide.ts @@ -26,7 +26,7 @@ export const SYNAPSE_GUIDE = ` ## Steps for developing integration solutions: - Make necessary assumptions to complete the solution. - Identify the necessary mediators from the following list of supported mediators - - Core Mediators: call, call-template, drop, log, loopback, property(deprecated), variable, propertyGroup(deprecated), respond, send, sequence, store + - Core Mediators: call, call-template, drop, log, loopback, property(deprecated), variable, propertyGroup(deprecated), respond, send(legacy; prefer HTTP connector for new REST integrations), sequence, store - Routing & Conditional Processing: filter, switch, validate - Custom & External Service Invocation: class, script - Message Transformation: enrich, header, payloadFactory, smooks, rewrite, xquery, xslt, datamapper, fastXSLT, jsontransform @@ -46,7 +46,6 @@ export const SYNAPSE_GUIDE = ` - Adhere to Synapse best practices. - Create a separate file for each endpoint. - Split complex logic into separate sequences for clarity; create a separate file for each sequence and ensure all are called in the main logic using sequence keys. - - Do not use \`outSequence\` as it is deprecated. - Give meaningful names to Synapse artifacts. - Provide a meaningful path in the uri-template in APIs. - Use & instead of & in XML. @@ -55,13 +54,20 @@ export const SYNAPSE_GUIDE = ` - Use WSO2 Connectors whenever possible instead of directly calling APIs. - Do not use new class mediators unless it is absolutely necessary. - Define driver, username, dburl, and passwords inside the dbreport or dblookup mediator tag instead of generating deployment toml file changes. - - Do not use <> tags as placeholders. + - Do not use fake XML placeholders (for example, , , or <...>) in generated artifacts. - To include an API key in uri-template, define: \`\`\`xml - \`\`\` + \`\`\` - The respond mediator should be empty; it does not support child elements. +## Deprecated patterns quick reference + - \`outSequence\` is deprecated. Use \`inSequence\` and explicit sequence flow. + - \`property\` / \`propertyGroup\` mediators are deprecated for new flows. Use \`variable\`. + - In \`log\` mediator, \`level\` and \`\` children are deprecated. Use \`category\` + \`\`. + - \`clone\` mediator is deprecated. Use \`scatter-gather\`. + - For new REST integrations, prefer the HTTP connector over \`send\` or generic \`call\`. For SOAP, prefer \`call\` with named endpoints. + ## WSO2 Synapse Connector Guidelines: - You can use WSO2 Synapse Connectors to integrate with WSO2 services and third-party services. - Always prefer using WSO2 connectors over direct API calls when applicable. @@ -80,7 +86,9 @@ export const SYNAPSE_GUIDE = ` \`\`\` -## WSO2 has introduced Synapse Expressions, which should be used instead of JsonPath or XPath. Refer to the following documentation. +## WSO2 has introduced Synapse Expressions, which should be used instead of JsonPath or XPath. + - \`SYNAPSE_EXPRESSIONS_DOCS\` is the authoritative source for syntax and rules. + - \`SYNAPSE_EXPRESSION_EXAMPLES\` provides short usage patterns only. ${SYNAPSE_EXPRESSION_GUIDE} @@ -93,8 +101,11 @@ export const SYNAPSE_GUIDE = ` ## Use the new variable mediator instead of the deprecated property mediator: - Syntax \`\`\`xml - + + \`\`\` + - Supported types: \`STRING\`, \`BOOLEAN\`, \`INTEGER\`, \`DOUBLE\`, \`LONG\`, \`XML\`, \`JSON\`. + - Use either \`value\` or \`expression\` in a single variable definition (not both). - Examples \`\`\`xml @@ -123,23 +134,15 @@ export const SYNAPSE_GUIDE = ` \`\`\` -## Do not use \`level\` in log mediator. It is deprecated. Use \`category\` instead. - - - Incorrect syntax: - \`\`\`xml - - Message - - \`\`\` - - - Correct syntax: +## Log mediator rules (single source of truth) + - \`level\` is deprecated. Use \`category\`. + - \`\` children inside \`\` are deprecated. Use \`\` with Synapse expressions. + - Canonical syntax: \`\`\`xml \`\`\` - - - Do not use properties inside log mediators. It is deprecated. Use Synapse Expressions directly: - Deprecated syntax: \`\`\`xml @@ -147,42 +150,17 @@ export const SYNAPSE_GUIDE = ` \`\`\` - - Correct syntax: \`\`\`xml - - \${payload.name} - - - - Hello \${payload.name}, Welcome to the system + + Hello \${payload.name}, RequestID=\${vars.requestId} \`\`\` -## Prefer using the new HTTP connector over call or send mediators unless absolutely necessary or legacy compatibility requires it or if you encounter issues with the new HTTP connector. - - First, define a local entry using http.init: - \`\`\`xml - - - http - http://localhost:9090 - Basic Auth - user - 1234 - 10 - Never - 500 - 1 - 5 - 406 - -1 - 1 - 5000 - balSampleConn - - - \`\`\` - - Always create a separate file for each local entry +## Prefer using the new HTTP connector over call or send mediators unless absolutely necessary, legacy compatibility requires it, or you encounter issues with the new HTTP connector. + - Resolve initialization mode from connector summary fields (\`connectionLocalEntryNeeded\`, \`noInitializationNeeded\`) and follow \`CONNECTOR_DEVELOPMENT_GUIDELINES\`. + - Do not assume all HTTP usage requires local entry + \`configKey\`; that is required only when \`connectionLocalEntryNeeded=true\`. + - If local entry is required, keep each local entry in a separate file. - Example GET: \`\`\`xml @@ -213,6 +191,7 @@ export const SYNAPSE_GUIDE = ` false \`\`\` + - How to add query parameters: \`\`\`xml @@ -230,16 +209,24 @@ export const SYNAPSE_GUIDE = ` \`\`\` - Supported methods: GET, POST, PUT, DELETE, HEAD, PATCH, OPTIONS -## SOAP / XML Integration Rules - - For SOAP services, always prefer the \\\`call\\\` mediator with a named endpoint over the HTTP connector. The HTTP connector is designed for REST; it can cause stream-building failures with SOAP responses. - - Before using any external service URL, verify whether it uses HTTP or HTTPS (e.g., test with curl -L). Never assume HTTP — many services redirect to HTTPS. Use an HTTPS endpoint URI when the service requires it. +## SOAP / XML Integration Recommendations + - For SOAP, use the \\\`call\\\` mediator with a named endpoint. Avoid the HTTP connector as it does not support SOAP. + - Never assume HTTP for external services. Prefer HTTPS unless the service is explicitly HTTP-only. -### SOAP Response Handling After \\\`call\\\` Mediator (MI 4.x) - - After a \\\`call\\\` mediator to a SOAP endpoint with \\\`format="soap11"\\\`, WSO2 MI 4.x automatically converts the SOAP XML response body to JSON in the message context. - - ALWAYS access the SOAP response using the JSON payload path: \\\`\\\${payload.ResponseElementName.ChildElement}\\\` - - DO NOT use XPath as the first access after a SOAP call: \\\`\\\${xpath("string($body//*[local-name()='Element'])")}\\\` ← may return empty - - Reason: The SOAP response is in deferred/pass-through (unbuilt) mode until something forces message building. Accessing \\\`\\\${payload}\\\` forces the build; raw XPath may silently evaluate against an unbuilt message and return empty. - - If XPath is unavoidable, force message building first by setting an intermediate variable: \\\`\\\` then use XPath in a subsequent expression. +### SOAP response access after \`call\` (MI 4.x) + - \`\${payload}\` is ALWAYS JSON — including after a SOAP \`call\`. The Synapse expression engine converts all payloads to JSON for \`\${payload}\` access. + - ALWAYS extract SOAP response values using JSON paths. The JSON key names match the XML element local names (namespace prefix is stripped): + \`\`\`xml + + + \`\`\` + - NEVER store \`\${payload}\` as \`type="XML"\` after a SOAP call — it will always fail with \`WstxUnexpectedCharException: Unexpected character '{'\` because the value is already JSON, not XML. + - AVOID \`xpath()\` on SOAP responses. The underlying XML body may not be materialized, causing \`xpath()\` to silently return empty strings with no error. Prefer JSON paths. + +### SOAP namespace accuracy + - Never infer SOAP operation namespace from service URL. + - Always use WSDL \\\`targetNamespace\\\` when building SOAP bodies (especially in \\\`payloadFactory\\\`). + - Wrong namespace can cause silent SOAP Fault behavior (empty results without explicit MI exception). ## For the new filter mediator, do not use source. Use only xpath: \`\`\`xml @@ -370,7 +357,7 @@ export const SYNAPSE_GUIDE = ` - + \`\`\` - Example: \`\`\`xml @@ -384,7 +371,7 @@ export const SYNAPSE_GUIDE = ` - + @@ -399,6 +386,8 @@ export const SYNAPSE_GUIDE = ` \`\`\` ## Data Mappers +**Important runtime requirement:** Data mapper artifacts and the \`\` mediator require MI runtime \`4.4.0\` or newer. If runtime is below \`4.4.0\`, do not use data mapper generation. + Data mappers transform data between input and output schemas using TypeScript. They are used with the \`\` mediator in Synapse integrations. Always use ${CREATE_DATA_MAPPER_TOOL_NAME} tool to create a data mapper. Do not create data mappers manually. @@ -453,7 +442,7 @@ export function mapFunction(input: InputRoot): OutputRoot { - Property access: \`dmUtils.getPropertyValue(scope, name)\` ## Registry Resources -When creating supportive resources that are needed for the Integration inside src/main/java/wso2mi/resources, an entry should be added to the src/main/java/wso2mi/resources/artifact.xml. If an artifacts.xml doesn't exist, then create one and add the entry. The format should be as follows: +When creating supportive resources that are needed for the Integration inside src/main/wso2mi/resources, an entry should be added to the src/main/wso2mi/resources/artifact.xml. If an artifacts.xml doesn't exist, then create one and add the entry. The format should be as follows: For data mappers this is get automatically done by the ${CREATE_DATA_MAPPER_TOOL_NAME} tool. But for other resources, you need to add the entry manually. \`\`\`xml @@ -471,7 +460,7 @@ For data mappers this is get automatically done by the ${CREATE_DATA_MAPPER_TOOL \`\`\` Here the path artifact name should be unique and generally resembles the file path inside the resources folder. The file element should be the name of the file inside the resources folder. The path element should be the registry path where the resource will be added when the integration is deployed. Generally resources are added inside '/_system/governance/mi-resources'. The mediaType should be the media type of the resource. The properties element can be used to add any additional properties to the resource, but it can be left empty if there are no additional properties to add. -For an example if an XSLT file is added inside src/main/java/wso2mi/resources/xslt/conversion.xslt, then the artifact entry can be as follows: +For an example if an XSLT file is added inside src/main/wso2mi/resources/xslt/conversion.xslt, then the artifact entry can be as follows: \`\`\`xml @@ -484,5 +473,5 @@ For an example if an XSLT file is added inside src/main/java/wso2mi/resources/xs \`\`\` -Content under api-definitions, conf, connectors and metadata are not added as registry resources and hence do not require an entry in the artifact.xml. Only supportive resources that are needed for the integration and are added inside src/main/java/wso2mi/resources need to be added as registry resources and require an entry in the artifact.xml. +Content under api-definitions, conf, connectors and metadata are not added as registry resources and hence do not require an entry in the artifact.xml. Only supportive resources that are needed for the integration and are added inside src/main/wso2mi/resources need to be added as registry resources and require an entry in the artifact.xml. `; diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_guide_old.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_guide_old.ts index 5b4f8eaf0bc..9246a6878ca 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_guide_old.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/context/synapse_guide_old.ts @@ -56,7 +56,7 @@ export const SYNAPSE_GUIDE = ` - Use WSO2 Connectors whenever possible instead of directly calling APIs. - Do not use new class mediators unless it is absolutely necessary. - Define driver, username, dburl, and passwords inside the dbreport or dblookup mediator tag instead of generating deployment toml file changes. - - Do not use <> tags as placeholders. + - Do not use fake XML placeholders (for example, , , or <...>) in generated artifacts. - To include an API key in uri-template, define: \`\`\`xml diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/stream_guard.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/stream_guard.ts new file mode 100644 index 00000000000..d00504f1de9 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/stream_guard.ts @@ -0,0 +1,264 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +export const DEFAULT_STREAM_IDLE_TIMEOUT_MS = 3 * 60 * 1000; +export const DEFAULT_STREAM_TOTAL_TIMEOUT_MS = 15 * 60 * 1000; +export const DEFAULT_FINAL_RESPONSE_WAIT_TIMEOUT_MS = 5000; +export const STREAM_WATCHDOG_TICK_MS = 5000; + +export const STREAM_IDLE_TIMEOUT_ERROR_CODE = 'AGENT_STREAM_IDLE_TIMEOUT'; +export const STREAM_TOTAL_TIMEOUT_ERROR_CODE = 'AGENT_STREAM_TOTAL_TIMEOUT'; +export const RESPONSE_WAIT_TIMEOUT_ERROR_CODE = 'AGENT_RESPONSE_WAIT_TIMEOUT'; +export const PROXY_STREAM_TERMINATED_ERROR_CODE = 'AGENT_PROXY_STREAM_TERMINATED'; + +type StreamTimeoutCode = + | typeof STREAM_IDLE_TIMEOUT_ERROR_CODE + | typeof STREAM_TOTAL_TIMEOUT_ERROR_CODE; + +export function createStreamTimeoutError(code: StreamTimeoutCode, message: string): Error & { code: string } { + const error = new Error(message) as Error & { code: string }; + error.code = code; + return error; +} + +export function createResponseWaitTimeoutError(timeoutMs: number): Error & { code: string } { + const error = new Error(`Timed out waiting ${Math.round(timeoutMs / 1000)}s for final model response metadata.`) as Error & { code: string }; + error.code = RESPONSE_WAIT_TIMEOUT_ERROR_CODE; + return error; +} + +export function isStreamTimeoutError(error: unknown): boolean { + if (!error || typeof error !== 'object') { + return false; + } + + const code = (error as { code?: unknown }).code; + return code === STREAM_IDLE_TIMEOUT_ERROR_CODE || code === STREAM_TOTAL_TIMEOUT_ERROR_CODE; +} + +export async function awaitWithTimeout(promise: Promise, timeoutMs: number): Promise { + return new Promise((resolve, reject) => { + const timeoutError = createResponseWaitTimeoutError(timeoutMs); + const timer = setTimeout(() => reject(timeoutError), timeoutMs); + (timer as NodeJS.Timeout).unref?.(); + + promise.then( + (value) => { + clearTimeout(timer); + resolve(value); + }, + (error) => { + clearTimeout(timer); + reject(error); + } + ); + }); +} + +export function getErrorMessage(error: unknown): string { + if (error instanceof Error) { + return error.message; + } + if (typeof error === 'string') { + return error; + } + if (error && typeof error === 'object' && 'message' in error) { + return String((error as { message?: unknown }).message); + } + return 'An unknown error occurred'; +} + +function getErrorCode(error: unknown): string | undefined { + if (!error || typeof error !== 'object') { + return undefined; + } + + const code = (error as { code?: unknown }).code; + if (typeof code === 'string' || typeof code === 'number') { + return String(code); + } + + return undefined; +} + +function getErrorName(error: unknown): string | undefined { + if (error instanceof Error) { + return error.name; + } + + if (!error || typeof error !== 'object') { + return undefined; + } + + const name = (error as { name?: unknown }).name; + return typeof name === 'string' ? name : undefined; +} + +export function getErrorDiagnostics(error: unknown): string { + if (error instanceof Error) { + const topOfStack = typeof error.stack === 'string' + ? error.stack.split('\n').slice(0, 3).join(' | ') + : undefined; + const cause = (error as { cause?: unknown }).cause; + return JSON.stringify({ + name: error.name, + code: getErrorCode(error), + message: error.message, + cause: cause ? getErrorMessage(cause) : undefined, + stack: topOfStack, + }); + } + + if (error && typeof error === 'object') { + const record = error as Record; + return JSON.stringify({ + name: getErrorName(error), + code: getErrorCode(error), + message: typeof record.message === 'string' ? record.message : undefined, + type: typeof record.type === 'string' ? record.type : undefined, + }); + } + + return JSON.stringify({ value: String(error) }); +} + +export function isProxyTerminatedStreamError(message?: string): boolean { + if (!message) { + return false; + } + + const normalized = message.toLowerCase(); + return ( + normalized === 'terminated' || + normalized.includes('terminated') || + normalized.includes('econnreset') || + normalized.includes('connection reset') || + normalized.includes('socket hang up') || + normalized.includes('fetch failed') || + normalized.includes('network error') || + normalized.includes('stream closed') + ); +} + +export function createProxyTerminatedError(message: string): Error & { code: string } { + const error = new Error(message) as Error & { code: string }; + error.code = PROXY_STREAM_TERMINATED_ERROR_CODE; + return error; +} + +export interface StreamWatchdog { + abortSignal: AbortSignal; + markActivity: () => void; + abort: (reason: unknown) => void; + getAbortReason: () => unknown; + isUserAbortRequested: () => boolean; + cleanup: () => void; +} + +interface StreamWatchdogParams { + requestAbortSignal?: AbortSignal; + idleTimeoutMs: number; + totalTimeoutMs: number; + shouldPauseIdleTimeout: () => boolean; + onTimeout?: (kind: 'idle' | 'total', error: Error & { code: string }) => void; +} + +function normalizeAbortReason(reason: unknown): Error { + if (reason instanceof Error) { + return reason; + } + + if (typeof reason === 'string' && reason.trim().length > 0) { + return new Error(reason); + } + + return new Error('AbortError: Stream aborted'); +} + +export function createStreamWatchdog(params: StreamWatchdogParams): StreamWatchdog { + const controller = new AbortController(); + let lastStreamActivityAt = Date.now(); + const streamStartedAt = Date.now(); + let userAbortRequested = false; + let requestAbortListener: (() => void) | undefined; + + const abort = (reason: unknown) => { + if (controller.signal.aborted) { + return; + } + controller.abort(normalizeAbortReason(reason)); + }; + + if (params.requestAbortSignal) { + requestAbortListener = () => { + userAbortRequested = true; + abort(params.requestAbortSignal?.reason || new Error('AbortError: Operation aborted by user')); + }; + + if (params.requestAbortSignal.aborted) { + requestAbortListener(); + } else { + params.requestAbortSignal.addEventListener('abort', requestAbortListener, { once: true }); + } + } + + const watchdog = setInterval(() => { + if (controller.signal.aborted) { + return; + } + + const now = Date.now(); + const idleElapsed = now - lastStreamActivityAt; + const totalElapsed = now - streamStartedAt; + + if (!params.shouldPauseIdleTimeout() && idleElapsed >= params.idleTimeoutMs) { + const timeoutError = createStreamTimeoutError( + STREAM_IDLE_TIMEOUT_ERROR_CODE, + `Agent stream timed out after ${Math.round(params.idleTimeoutMs / 1000)} seconds of inactivity.` + ); + params.onTimeout?.('idle', timeoutError); + abort(timeoutError); + return; + } + + if (totalElapsed >= params.totalTimeoutMs) { + const timeoutError = createStreamTimeoutError( + STREAM_TOTAL_TIMEOUT_ERROR_CODE, + `Agent stream exceeded maximum runtime of ${Math.round(params.totalTimeoutMs / 1000)} seconds.` + ); + params.onTimeout?.('total', timeoutError); + abort(timeoutError); + } + }, STREAM_WATCHDOG_TICK_MS); + + return { + abortSignal: controller.signal, + markActivity: () => { + lastStreamActivityAt = Date.now(); + }, + abort, + getAbortReason: () => controller.signal.reason, + isUserAbortRequested: () => userAbortRequested, + cleanup: () => { + clearInterval(watchdog); + if (params.requestAbortSignal && requestAbortListener) { + params.requestAbortSignal.removeEventListener('abort', requestAbortListener); + } + }, + }; +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tool-action-mapper.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tool-action-mapper.ts index 21e3287bcf1..58affa719f0 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tool-action-mapper.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tool-action-mapper.ts @@ -68,8 +68,17 @@ export function getToolAction(toolName: string, toolResult?: any, toolInput?: an case FILE_GLOB_TOOL_NAME: return { loading: 'finding files', completed: 'found files', failed: 'failed to find files' }; - case CONNECTOR_TOOL_NAME: - return { loading: 'fetching connectors', completed: 'fetched connectors', failed: 'failed to fetch connectors' }; + case CONNECTOR_TOOL_NAME: { + const targetName = toolInput?.name; + if (typeof targetName === 'string' && targetName.trim().length > 0) { + return { + loading: `fetching ${targetName}`, + completed: `fetched ${targetName}`, + failed: `failed to fetch ${targetName}` + }; + } + return { loading: 'fetching connector details', completed: 'fetched connector details', failed: 'failed to fetch connector details' }; + } case SKILL_TOOL_NAME: return { loading: 'loading skill context', completed: 'loaded skill context', failed: 'failed to load skill context' }; diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/bash_tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/bash_tools.ts index b05f9dce6f4..13f736135f7 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/bash_tools.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/bash_tools.ts @@ -19,12 +19,20 @@ import { tool } from 'ai'; import { z } from 'zod'; import * as childProcess from 'child_process'; -import * as path from 'path'; import { v4 as uuidv4 } from 'uuid'; -import { BashResult, ToolResult, BashExecuteFn, KillTaskExecuteFn, TaskOutputExecuteFn, TaskOutputResult, BASH_TOOL_NAME, KILL_TASK_TOOL_NAME, TASK_OUTPUT_TOOL_NAME } from './types'; -import { logDebug, logError, logInfo } from '../../copilot/logger'; +import { AgentEvent } from '@wso2/mi-core'; +import { BashResult, ToolResult, BashExecuteFn, KillTaskExecuteFn, TaskOutputExecuteFn, TaskOutputResult, BASH_TOOL_NAME, KILL_TASK_TOOL_NAME, TASK_OUTPUT_TOOL_NAME, ShellApprovalRuleStore } from './types'; +import { logError, logInfo } from '../../copilot/logger'; import { getBackgroundSubagents } from './subagent_tool'; import { setJavaHomeInEnvironmentAndPath } from '../../../debugger/debugHelper'; +import { PendingPlanApproval } from './plan_mode_tools'; +import { + analyzeShellCommand, + buildShellCommandDeniedResult, + buildShellSandboxBlockedResult, + isAnalysisCoveredByRules, + normalizePrefixRule, +} from './shell_sandbox'; import treeKill = require('tree-kill'); // ============================================================================ @@ -83,6 +91,71 @@ function generateShellTaskId(): string { return `task-shell-${uuidv4().split('-')[0]}`; } +type AgentEventHandler = (event: AgentEvent) => void; + +function formatApprovalReasons(reasons: string[]): string { + if (reasons.length === 0) { + return '- Shell policy requires explicit user approval for this command.'; + } + + return reasons.map((reason) => `- ${reason}`).join('\n'); +} + +function buildShellApprovalContent(command: string, reasons: string[], suggestedPrefixRule: string[]): string { + const lines: string[] = [ + 'Agent wants to run this shell command:', + `\`${command}\``, + '', + 'Why approval is required:', + formatApprovalReasons(reasons), + ]; + + if (suggestedPrefixRule.length > 0) { + lines.push('', `Suggested session rule prefix: \`${suggestedPrefixRule.join(' ')}\``); + } + + return lines.join('\n'); +} + +async function requestShellApproval( + eventHandler: AgentEventHandler, + pendingApprovals: Map, + request: { + command: string; + reasons: string[]; + suggestedPrefixRule: string[]; + } +): Promise<{ approved: boolean; feedback?: string; rememberForSession?: boolean; suggestedPrefixRule?: string[] }> { + const approvalId = uuidv4(); + + eventHandler({ + type: 'plan_approval_requested', + approvalId, + approvalKind: 'shell_command', + approvalTitle: 'Allow Shell Command?', + approveLabel: 'Allow', + rejectLabel: 'Deny', + allowFeedback: false, + content: buildShellApprovalContent(request.command, request.reasons, request.suggestedPrefixRule), + suggestedPrefixRule: request.suggestedPrefixRule, + }); + + return new Promise((resolve, reject) => { + pendingApprovals.set(approvalId, { + approvalId, + approvalKind: 'shell_command', + resolve: (result) => { + pendingApprovals.delete(approvalId); + resolve(result); + }, + reject: (error: Error) => { + pendingApprovals.delete(approvalId); + reject(error); + } + }); + }); +} + // ============================================================================ // Shell Tool // ============================================================================ @@ -90,7 +163,12 @@ function generateShellTaskId(): string { /** * Creates the execute function for the shell tool */ -export function createBashExecute(projectPath: string): BashExecuteFn { +export function createBashExecute( + projectPath: string, + eventHandler?: AgentEventHandler, + pendingApprovals?: Map, + shellApprovalRuleStore?: ShellApprovalRuleStore +): BashExecuteFn { return async (args: { command: string; description?: string; @@ -104,6 +182,54 @@ export function createBashExecute(projectPath: string): BashExecuteFn { run_in_background = false } = args; + const analysis = analyzeShellCommand(command, process.platform, projectPath, run_in_background); + if (analysis.blocked) { + return buildShellSandboxBlockedResult(analysis.reasons); + } + + const sessionRules = shellApprovalRuleStore?.getRules() ?? []; + const approvalBypassedByRule = analysis.requiresApproval + && !analysis.isDestructive + && isAnalysisCoveredByRules(analysis, sessionRules); + + if (analysis.requiresApproval && !approvalBypassedByRule) { + if (!eventHandler || !pendingApprovals) { + return { + success: false, + message: 'Shell command requires user approval, but approval flow is unavailable in this context.', + error: 'SHELL_APPROVAL_UNAVAILABLE', + }; + } + + const approvalResult = await requestShellApproval(eventHandler, pendingApprovals, { + command, + reasons: analysis.reasons, + suggestedPrefixRule: analysis.suggestedPrefixRule, + }); + + if (!approvalResult.approved) { + return buildShellCommandDeniedResult(); + } + + const rememberForSession = approvalResult.rememberForSession === true; + if (rememberForSession && shellApprovalRuleStore && !analysis.isDestructive) { + const selectedRule = normalizePrefixRule( + (approvalResult.suggestedPrefixRule && approvalResult.suggestedPrefixRule.length > 0) + ? approvalResult.suggestedPrefixRule + : analysis.suggestedPrefixRule + ); + if (selectedRule.length > 0) { + try { + await shellApprovalRuleStore.addRule(selectedRule); + } catch (error) { + logError('[ShellTool] Failed to persist shell approval rule', error); + } + } + } + } else if (approvalBypassedByRule) { + logInfo(`[ShellTool] Approval bypassed by session rule for command: ${command}`); + } + logInfo(`[ShellTool] Executing: ${command}${description ? ` (${description})` : ''}`); // Validate timeout @@ -269,7 +395,7 @@ const bashInputSchema = z.object({ `Optional timeout in milliseconds (default: ${DEFAULT_TIMEOUT}ms, max: ${MAX_TIMEOUT}ms)` ), run_in_background: z.boolean().optional().default(false).describe( - 'Set to true to run the command in the background. Returns a task_id that can be used with kill_task tool.' + `Set to true to run the command in the background. Returns a task_id that can be checked with ${TASK_OUTPUT_TOOL_NAME} and terminated with ${KILL_TASK_TOOL_NAME}.` ), }); @@ -280,7 +406,7 @@ export function createBashTool(execute: BashExecuteFn) { return (tool as any)({ description: `Execute shell commands in the MI project directory (JAVA_HOME pre-configured). Always provide platform-specific commands according to (Windows: PowerShell syntax, macOS/Linux: bash syntax). - Use run_in_background=true for long-running commands; use ${KILL_TASK_TOOL_NAME} to terminate. + Use run_in_background=true for long-running commands; this returns a task_id usable with ${TASK_OUTPUT_TOOL_NAME} and ${KILL_TASK_TOOL_NAME}. Do NOT use shell for file reading (use file_read), content search (use grep), or file search (use glob). No interactive commands (vim, nano, etc.).`, inputSchema: bashInputSchema, diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/connector_store_cache.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/connector_store_cache.ts index 90dc9dd8495..b96f2f14674 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/connector_store_cache.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/connector_store_cache.ts @@ -16,276 +16,666 @@ * under the License. */ +import * as crypto from 'crypto'; import * as fs from 'fs'; +import * as os from 'os'; import * as path from 'path'; import { parseStringPromise } from 'xml2js'; -import { APIS } from '../../../constants'; -import { logDebug, logError, logInfo } from '../../copilot/logger'; -import { getCopilotProjectStorageDir } from '../storage-paths'; +import { logDebug, logError, logInfo, logWarn } from '../../copilot/logger'; const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24 hours const STORE_FETCH_TIMEOUT_MS = 5000; -const CONNECTOR_CACHE_FILE_NAME = 'connector-store-connectors.json'; -const INBOUND_CACHE_FILE_NAME = 'connector-store-inbounds.json'; +const DEFAULT_RUNTIME_VERSION = '4.5.0'; +const DEFAULT_SUMMARY_ENDPOINT_TEMPLATE = + 'https://apis.wso2.com/qgpf/connector-store-backend/endpoint-9090-803/v1.0/connectors/summaries?type=${type}&limit=100&offset=0&product=MI'; +const DEFAULT_DETAILS_ENDPOINT = + 'https://apis.wso2.com/qgpf/connector-store-backend/endpoint-9090-803/v1.0/connectors/details/filter'; -interface StoreCacheFile { +export type ConnectorStoreItemType = 'connector' | 'inbound'; +export type ConnectorStoreSource = 'fresh-cache' | 'stale-cache' | 'store' | 'local-db'; +export type ConnectorStoreStatus = 'healthy' | 'degraded'; + +interface CatalogCacheFile { + fetchedAt: string; + runtimeVersion: string; + type: ConnectorStoreItemType; + data: CatalogItem[]; +} + +interface DefinitionCacheFile { fetchedAt: string; - runtimeVersion: string | null; - items: any[]; + runtimeVersion: string; + type: ConnectorStoreItemType; + name: string; + data: any; } -interface LoadStoreItemsParams { - projectPath: string; - cacheFileName: string; - urlTemplate: string | undefined; - runtimeVersion: string | null; - fallbackItems: any[]; - label: 'connectors' | 'inbound endpoints'; +interface CatalogLoadResult { + items: CatalogItem[]; + source: ConnectorStoreSource; + warnings: string[]; +} + +export interface CatalogItem { + connectorName: string; + description: string; + connectorType: string; } export interface ConnectorStoreCatalog { - connectors: any[]; - inbounds: any[]; + connectors: CatalogItem[]; + inbounds: CatalogItem[]; + storeStatus: ConnectorStoreStatus; + warnings: string[]; + runtimeVersionUsed: string; + source: { + connectors: ConnectorStoreSource; + inbounds: ConnectorStoreSource; + }; } -export async function getRuntimeVersionFromPom(projectPath: string): Promise { - const pomPath = path.join(projectPath, 'pom.xml'); +export interface ConnectorDefinitionLookupResult { + definitionsByName: Record; + missingNames: string[]; + fallbackUsedNames: string[]; + storeFailureNames: string[]; + warnings: string[]; + runtimeVersionUsed: string; +} - try { - const pomContent = await fs.promises.readFile(pomPath, 'utf8'); - const parsedPom = await parseStringPromise(pomContent, { - explicitArray: false, - ignoreAttrs: true, - }); - const runtimeVersion = parsedPom?.project?.properties?.['project.runtime.version']; - if (typeof runtimeVersion !== 'string') { - return null; - } +interface CacheReadResult { + fresh?: any; + stale?: any; +} - const trimmedVersion = runtimeVersion.trim(); - return trimmedVersion.length > 0 ? trimmedVersion : null; - } catch { - return null; +const CACHE_ROOT_DIR = path.join(os.homedir(), '.wso2-mi', 'copilot', 'cache'); +const CATALOG_FILE_NAME = 'catalog.json'; + +function normalizeName(value: unknown): string { + if (typeof value !== 'string') { + return ''; } + + return value.trim().toLowerCase(); } -async function readCacheFile(cachePath: string): Promise { - try { - const content = await fs.promises.readFile(cachePath, 'utf8'); - const parsed = JSON.parse(content); +function stripConnectorPrefix(value: unknown): string { + if (typeof value !== 'string') { + return ''; + } - if (Array.isArray(parsed)) { - // Backward compatibility for plain-array cache files. - return { - fetchedAt: new Date(0).toISOString(), - runtimeVersion: null, - items: parsed, - }; - } + return value.replace(/^mi-(connector|module|inbound)-/i, ''); +} - if ( - typeof parsed === 'object' && - parsed !== null && - Array.isArray((parsed as StoreCacheFile).items) && - typeof (parsed as StoreCacheFile).fetchedAt === 'string' - ) { - const runtimeVersion = typeof (parsed as StoreCacheFile).runtimeVersion === 'string' - ? (parsed as StoreCacheFile).runtimeVersion - : null; +function getRuntimeVersionUsed(runtimeVersion: string | null): string { + return runtimeVersion ?? DEFAULT_RUNTIME_VERSION; +} - return { - fetchedAt: (parsed as StoreCacheFile).fetchedAt, - runtimeVersion, - items: (parsed as StoreCacheFile).items, - }; - } - } catch { - return null; +function sanitizeFileNameSegment(value: string): string { + return value + .replace(/[^a-zA-Z0-9._-]/g, '-') + .replace(/-+/g, '-') + .replace(/^-|-$/g, '') + .slice(0, 96) || 'item'; +} + +function buildItemDirectory(itemType: ConnectorStoreItemType, runtimeVersion: string): string { + return path.join(CACHE_ROOT_DIR, itemType, runtimeVersion); +} + +function buildCatalogFilePath(itemType: ConnectorStoreItemType, runtimeVersion: string): string { + return path.join(buildItemDirectory(itemType, runtimeVersion), CATALOG_FILE_NAME); +} + +function buildDefinitionFilePath(itemType: ConnectorStoreItemType, runtimeVersion: string, name: string): string { + const normalized = normalizeName(name); + const displayPart = sanitizeFileNameSegment(normalized); + const hash = crypto.createHash('sha256').update(normalized).digest('hex').slice(0, 12); + const fileName = `${displayPart}-${hash}.json`; + return path.join(buildItemDirectory(itemType, runtimeVersion), fileName); +} + +function toRequestAliases(name: string): string[] { + const aliases = new Set(); + const normalized = normalizeName(name); + if (normalized.length > 0) { + aliases.add(normalized); } - return null; + const stripped = normalizeName(stripConnectorPrefix(name)); + if (stripped.length > 0) { + aliases.add(stripped); + } + + return Array.from(aliases); +} + +function getDefinitionAliases(definition: any): string[] { + const aliases = new Set(); + const connectorName = normalizeName(definition?.connectorName); + const artifactId = normalizeName(definition?.mavenArtifactId); + const strippedArtifact = normalizeName(stripConnectorPrefix(definition?.mavenArtifactId)); + + if (connectorName.length > 0) { + aliases.add(connectorName); + } + if (artifactId.length > 0) { + aliases.add(artifactId); + } + if (strippedArtifact.length > 0) { + aliases.add(strippedArtifact); + } + + return Array.from(aliases); +} + +function dedupeWarnings(warnings: string[]): string[] { + return Array.from(new Set(warnings.filter((warning) => warning.trim().length > 0))); } -function isCacheFresh(cache: StoreCacheFile, runtimeVersion: string | null): boolean { - const fetchedAtMs = Date.parse(cache.fetchedAt); +function isEntryFresh(fetchedAt: string): boolean { + const fetchedAtMs = Date.parse(fetchedAt); if (Number.isNaN(fetchedAtMs)) { return false; } - if (Date.now() - fetchedAtMs >= CACHE_TTL_MS) { + return Date.now() - fetchedAtMs < CACHE_TTL_MS; +} + +function toCatalogItem(raw: any): CatalogItem | null { + const connectorName = typeof raw?.connector_name === 'string' + ? raw.connector_name + : (typeof raw?.connectorName === 'string' ? raw.connectorName : ''); + if (connectorName.trim().length === 0) { + return null; + } + + const description = typeof raw?.description === 'string' ? raw.description : ''; + const connectorType = typeof raw?.connector_type === 'string' + ? raw.connector_type + : (typeof raw?.connectorType === 'string' ? raw.connectorType : ''); + + return { + connectorName, + description, + connectorType, + }; +} + +function toCatalogFallbackItems(fallbackItems: any[], itemType: ConnectorStoreItemType): CatalogItem[] { + return fallbackItems + .map((item) => { + const connectorName = typeof item?.connectorName === 'string' ? item.connectorName : ''; + if (connectorName.trim().length === 0) { + return null; + } + + return { + connectorName, + description: typeof item?.description === 'string' ? item.description : '', + connectorType: typeof item?.connectorType === 'string' + ? item.connectorType + : (itemType === 'connector' ? 'Connector' : 'Inbound'), + } as CatalogItem; + }) + .filter((item): item is CatalogItem => item !== null); +} + +function matchesDefinition(definition: any, requestedName: string): boolean { + const normalizedRequested = normalizeName(requestedName); + if (normalizedRequested.length === 0) { return false; } - // If runtime version cannot be resolved from pom.xml, accept cache recency only. - if (runtimeVersion === null) { - return true; + const connectorName = normalizeName(definition?.connectorName); + const artifactId = normalizeName(definition?.mavenArtifactId); + const strippedArtifact = normalizeName(stripConnectorPrefix(definition?.mavenArtifactId)); + + return normalizedRequested === connectorName + || normalizedRequested === artifactId + || normalizedRequested === strippedArtifact; +} + +function findFallbackDefinition(requestedName: string, fallbackItems: any[]): any | null { + for (const item of fallbackItems) { + if (matchesDefinition(item, requestedName)) { + return item; + } } - return cache.runtimeVersion === runtimeVersion; + return null; } -function isCacheForRuntime(cache: StoreCacheFile, runtimeVersion: string | null): boolean { - // When runtime cannot be resolved, allow using available cache. - if (runtimeVersion === null) { - return true; +async function readJsonFile(filePath: string): Promise { + try { + const content = await fs.promises.readFile(filePath, 'utf8'); + return JSON.parse(content) as T; + } catch { + return null; + } +} + +async function writeJsonFile(filePath: string, content: unknown): Promise { + await fs.promises.mkdir(path.dirname(filePath), { recursive: true }); + await fs.promises.writeFile(filePath, JSON.stringify(content, null, 2), 'utf8'); +} + +async function readCatalogCache(filePath: string): Promise { + const parsed = await readJsonFile(filePath); + if ( + parsed + && typeof parsed.fetchedAt === 'string' + && typeof parsed.runtimeVersion === 'string' + && (parsed.type === 'connector' || parsed.type === 'inbound') + && Array.isArray(parsed.data) + ) { + return parsed; + } + + return null; +} + +async function readDefinitionCache(filePath: string): Promise { + const parsed = await readJsonFile(filePath); + if ( + parsed + && typeof parsed.fetchedAt === 'string' + && typeof parsed.runtimeVersion === 'string' + && (parsed.type === 'connector' || parsed.type === 'inbound') + && typeof parsed.name === 'string' + && Object.prototype.hasOwnProperty.call(parsed, 'data') + ) { + return parsed; } - return cache.runtimeVersion === runtimeVersion; + return null; } -async function writeCacheFile( - cachePath: string, - runtimeVersion: string | null, - items: any[] +async function writeCatalogCache( + filePath: string, + itemType: ConnectorStoreItemType, + runtimeVersion: string, + data: CatalogItem[] ): Promise { - const content: StoreCacheFile = { + const content: CatalogCacheFile = { fetchedAt: new Date().toISOString(), runtimeVersion, - items, + type: itemType, + data, }; - - await fs.promises.mkdir(path.dirname(cachePath), { recursive: true }); - await fs.promises.writeFile(cachePath, JSON.stringify(content, null, 2), 'utf8'); + await writeJsonFile(filePath, content); } -function resolveStoreUrl(urlTemplate: string, runtimeVersion: string | null): string { - return urlTemplate.replace('${version}', runtimeVersion ?? ''); +async function writeDefinitionCaches( + itemType: ConnectorStoreItemType, + runtimeVersion: string, + definition: any, + aliases: string[] +): Promise { + const uniqueAliases = new Set(aliases.map((alias) => normalizeName(alias)).filter((alias) => alias.length > 0)); + for (const alias of uniqueAliases) { + const filePath = buildDefinitionFilePath(itemType, runtimeVersion, alias); + const content: DefinitionCacheFile = { + fetchedAt: new Date().toISOString(), + runtimeVersion, + type: itemType, + name: alias, + data: definition, + }; + await writeJsonFile(filePath, content); + } } -function enhanceStoreUrl(rawUrl: string, label: LoadStoreItemsParams['label']): string { - try { - const url = new URL(rawUrl); - - // Connector store returns operation/parameter fields only when params=True. - url.searchParams.set('params', 'True'); - - // Backend expects this casing for inbound type values. - if (label === 'inbound endpoints') { - const typeValue = url.searchParams.get('type'); - if (typeValue && typeValue.toLowerCase() === 'inbound') { - url.searchParams.set('type', 'Inbound'); - } - } +function getSummaryUrl(itemType: ConnectorStoreItemType): string { + const template = process.env.MI_CONNECTOR_STORE_BACKEND_SUMMARIES || DEFAULT_SUMMARY_ENDPOINT_TEMPLATE; + const typeValue = itemType === 'connector' ? 'Connector' : 'Inbound'; + return template.replace('${type}', typeValue); +} - return url.toString(); - } catch { - return rawUrl; - } +function getDetailsUrl(): string { + return process.env.MI_CONNECTOR_STORE_BACKEND_DETAILS_FILTER + || process.env.MI_CONNECTOR_STORE_BACKEND_DETAILS + || DEFAULT_DETAILS_ENDPOINT; } -async function fetchStoreItems( - urlTemplate: string, - runtimeVersion: string | null, - label: LoadStoreItemsParams['label'] -): Promise { - const resolvedUrl = resolveStoreUrl(urlTemplate, runtimeVersion); - const storeUrl = enhanceStoreUrl(resolvedUrl, label); +async function fetchWithTimeout(url: string, init: RequestInit): Promise { const controller = new AbortController(); const timeoutHandle = setTimeout(() => controller.abort(), STORE_FETCH_TIMEOUT_MS); - let response: Response; try { - response = await fetch(storeUrl, { signal: controller.signal }); + return await fetch(url, { ...init, signal: controller.signal }); } finally { clearTimeout(timeoutHandle); } +} + +async function fetchCatalogFromStore(itemType: ConnectorStoreItemType): Promise { + const summaryUrl = getSummaryUrl(itemType); + const response = await fetchWithTimeout(summaryUrl, { method: 'GET' }); + if (!response.ok) { + throw new Error(`HTTP ${response.status} ${response.statusText}`); + } + + const payload = await response.json(); + if (!Array.isArray(payload)) { + throw new Error('Connector summary response is not an array'); + } + + return payload + .map((item) => toCatalogItem(item)) + .filter((item): item is CatalogItem => item !== null); +} + +async function fetchDefinitionsFromStore(names: string[], runtimeVersion: string): Promise { + const detailsUrl = getDetailsUrl(); + const response = await fetchWithTimeout(detailsUrl, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + connectorNames: names, + runtimeVersion, + product: 'MI', + latest: true, + }), + }); if (!response.ok) { throw new Error(`HTTP ${response.status} ${response.statusText}`); } - const storeData = await response.json(); - if (!Array.isArray(storeData)) { - throw new Error('Store API response is not an array'); + const payload = await response.json(); + if (!Array.isArray(payload)) { + throw new Error('Connector details response is not an array'); } - return storeData; + return payload; } -async function loadStoreItems(params: LoadStoreItemsParams): Promise { - const { projectPath, cacheFileName, urlTemplate, runtimeVersion, fallbackItems, label } = params; - const cachePath = path.join(getCopilotProjectStorageDir(projectPath), cacheFileName); - const cached = await readCacheFile(cachePath); +async function loadCatalog( + itemType: ConnectorStoreItemType, + runtimeVersion: string, + fallbackItems: any[] +): Promise { + const cachePath = buildCatalogFilePath(itemType, runtimeVersion); + const cached = await readCatalogCache(cachePath); + const label = itemType === 'connector' ? 'connectors' : 'inbound endpoints'; + const warnings: string[] = []; + + if (cached && isEntryFresh(cached.fetchedAt)) { + logDebug(`[ConnectorStoreCache] Using fresh ${label} summary cache (${cachePath})`); + return { + items: cached.data, + source: 'fresh-cache', + warnings, + }; + } + + try { + const fetchedItems = await fetchCatalogFromStore(itemType); + await writeCatalogCache(cachePath, itemType, runtimeVersion, fetchedItems); + logDebug(`[ConnectorStoreCache] Refreshed ${label} summary cache with ${fetchedItems.length} item(s)`); + return { + items: fetchedItems, + source: 'store', + warnings, + }; + } catch (error) { + if (error instanceof Error && error.name === 'AbortError') { + logError(`[ConnectorStoreCache] Timed out fetching ${label} summaries after ${STORE_FETCH_TIMEOUT_MS}ms`, error); + } else { + logError(`[ConnectorStoreCache] Failed to fetch ${label} summaries from connector store`, error); + } + + const warning = `[ConnectorStoreCache] Connector store summaries unavailable for ${label}.`; + warnings.push(warning); + + if (cached && Array.isArray(cached.data) && cached.data.length > 0) { + logWarn(`[ConnectorStoreCache] Using stale ${label} summary cache due to store failure.`); + warnings.push(`[ConnectorStoreCache] Using stale cached ${label}.`); + return { + items: cached.data, + source: 'stale-cache', + warnings, + }; + } - if (cached && isCacheFresh(cached, runtimeVersion)) { - logDebug(`[ConnectorStoreCache] Using fresh ${label} cache (${cachePath})`); - return cached.items; + const fallbackCatalog = toCatalogFallbackItems(fallbackItems, itemType); + logWarn(`[ConnectorStoreCache] Falling back to local ${label} list (${fallbackCatalog.length} item(s)).`); + warnings.push(`[ConnectorStoreCache] Using local fallback ${label}.`); + return { + items: fallbackCatalog, + source: 'local-db', + warnings, + }; } +} + +async function readDefinitionCacheForName( + itemType: ConnectorStoreItemType, + runtimeVersion: string, + requestedName: string +): Promise { + const aliases = toRequestAliases(requestedName); + let freshestStale: { fetchedAtMs: number; data: any } | null = null; + + for (const alias of aliases) { + const filePath = buildDefinitionFilePath(itemType, runtimeVersion, alias); + const cached = await readDefinitionCache(filePath); + if (!cached) { + continue; + } - if (!urlTemplate) { - if (cached?.items.length && isCacheForRuntime(cached, runtimeVersion)) { - logInfo(`[ConnectorStoreCache] ${label} store URL not configured. Using cached ${label}.`); - return cached.items; + if (isEntryFresh(cached.fetchedAt)) { + return { fresh: cached.data }; } - if (cached?.items.length) { - logInfo(`[ConnectorStoreCache] ${label} cached data runtime mismatch. Skipping cached ${label}.`); + const fetchedAtMs = Date.parse(cached.fetchedAt); + const staleScore = Number.isNaN(fetchedAtMs) ? 0 : fetchedAtMs; + if (!freshestStale || staleScore > freshestStale.fetchedAtMs) { + freshestStale = { + fetchedAtMs: staleScore, + data: cached.data, + }; } - logInfo(`[ConnectorStoreCache] ${label} store URL not configured. Using static fallback ${label}.`); - return fallbackItems; } - if (runtimeVersion === null) { - if (cached?.items.length) { - logInfo(`[ConnectorStoreCache] Runtime version unavailable. Using cached ${label}.`); - return cached.items; + if (freshestStale) { + return { stale: freshestStale.data }; + } + + return {}; +} + +async function resolveDefinitions( + projectPath: string, + itemType: ConnectorStoreItemType, + names: string[], + fallbackItems: any[] +): Promise { + const trimmedNames = names.map((name) => name.trim()).filter((name) => name.length > 0); + const requestedNames = Array.from(new Set(trimmedNames)); + const detectedRuntimeVersion = await getRuntimeVersionFromPom(projectPath); + const runtimeVersionUsed = getRuntimeVersionUsed(detectedRuntimeVersion); + + const definitionsByName: Record = {}; + const missingNames: string[] = []; + const fallbackUsedNames: string[] = []; + const storeFailureNames: string[] = []; + const warnings: string[] = []; + const staleByName: Record = {}; + const namesToFetch: string[] = []; + + for (const name of requestedNames) { + const cached = await readDefinitionCacheForName(itemType, runtimeVersionUsed, name); + if (cached.fresh) { + definitionsByName[name] = cached.fresh; + continue; + } + + if (cached.stale) { + staleByName[name] = cached.stale; } - logInfo(`[ConnectorStoreCache] Runtime version unavailable. Using static fallback ${label}.`); - return fallbackItems; + + namesToFetch.push(name); + } + + if (namesToFetch.length === 0) { + return { + definitionsByName, + missingNames, + fallbackUsedNames, + storeFailureNames, + warnings, + runtimeVersionUsed, + }; } + const label = itemType === 'connector' ? 'connector' : 'inbound endpoint'; + let fetchedDefinitions: any[] = []; + let storeFailed = false; try { - const storeItems = await fetchStoreItems(urlTemplate, runtimeVersion, label); - await writeCacheFile(cachePath, runtimeVersion, storeItems); - logDebug(`[ConnectorStoreCache] Refreshed ${label} cache with ${storeItems.length} item(s)`); - return storeItems; + fetchedDefinitions = await fetchDefinitionsFromStore(namesToFetch, runtimeVersionUsed); } catch (error) { + storeFailed = true; if (error instanceof Error && error.name === 'AbortError') { - logError( - `[ConnectorStoreCache] Timed out fetching ${label} from store after ${STORE_FETCH_TIMEOUT_MS}ms`, - error - ); + logError(`[ConnectorStoreCache] Timed out fetching ${label} details after ${STORE_FETCH_TIMEOUT_MS}ms`, error); } else { - logError(`[ConnectorStoreCache] Failed to refresh ${label} from store`, error); + logError(`[ConnectorStoreCache] Failed to fetch ${label} details from connector store`, error); } + warnings.push(`[ConnectorStoreCache] Connector store details unavailable for ${label} lookups.`); + } + + if (storeFailed) { + for (const name of namesToFetch) { + if (staleByName[name]) { + definitionsByName[name] = staleByName[name]; + warnings.push(`[ConnectorStoreCache] Using stale cached ${label} definition for '${name}'.`); + continue; + } + + const fallbackDefinition = findFallbackDefinition(name, fallbackItems); + if (fallbackDefinition) { + definitionsByName[name] = fallbackDefinition; + fallbackUsedNames.push(name); + storeFailureNames.push(name); + const aliases = [...toRequestAliases(name), ...getDefinitionAliases(fallbackDefinition)]; + await writeDefinitionCaches(itemType, runtimeVersionUsed, fallbackDefinition, aliases); + continue; + } + + missingNames.push(name); + storeFailureNames.push(name); + } + } else { + for (const name of namesToFetch) { + const fromStore = fetchedDefinitions.find((definition) => matchesDefinition(definition, name)); + if (fromStore) { + definitionsByName[name] = fromStore; + const aliases = [...toRequestAliases(name), ...getDefinitionAliases(fromStore)]; + await writeDefinitionCaches(itemType, runtimeVersionUsed, fromStore, aliases); + continue; + } + + const fallbackDefinition = findFallbackDefinition(name, fallbackItems); + if (fallbackDefinition) { + definitionsByName[name] = fallbackDefinition; + fallbackUsedNames.push(name); + warnings.push(`[ConnectorStoreCache] '${name}' was not returned by connector store. Using local fallback definition.`); + const aliases = [...toRequestAliases(name), ...getDefinitionAliases(fallbackDefinition)]; + await writeDefinitionCaches(itemType, runtimeVersionUsed, fallbackDefinition, aliases); + continue; + } + + if (staleByName[name]) { + definitionsByName[name] = staleByName[name]; + warnings.push(`[ConnectorStoreCache] '${name}' was not returned by connector store. Using stale cached definition.`); + continue; + } - if (cached?.items.length && isCacheForRuntime(cached, runtimeVersion)) { - logInfo(`[ConnectorStoreCache] Using stale cached ${label} due to refresh failure.`); - return cached.items; + missingNames.push(name); } + } + + return { + definitionsByName, + missingNames, + fallbackUsedNames, + storeFailureNames, + warnings: dedupeWarnings(warnings), + runtimeVersionUsed, + }; +} + +export async function getRuntimeVersionFromPom(projectPath: string): Promise { + const pomPath = path.join(projectPath, 'pom.xml'); - if (cached?.items.length) { - logInfo(`[ConnectorStoreCache] Stale ${label} cache runtime mismatch. Using fallback ${label}.`); + try { + const pomContent = await fs.promises.readFile(pomPath, 'utf8'); + const parsedPom = await parseStringPromise(pomContent, { + explicitArray: false, + ignoreAttrs: true, + }); + const runtimeVersion = parsedPom?.project?.properties?.['project.runtime.version']; + if (typeof runtimeVersion !== 'string') { + return null; } - logInfo(`[ConnectorStoreCache] Using static fallback ${label} due to refresh failure.`); - return fallbackItems; + + const trimmedVersion = runtimeVersion.trim(); + return trimmedVersion.length > 0 ? trimmedVersion : null; + } catch { + return null; } } +export async function getConnectorDefinitions( + projectPath: string, + connectorNames: string[], + fallbackConnectors: any[] +): Promise { + return resolveDefinitions(projectPath, 'connector', connectorNames, fallbackConnectors); +} + +export async function getInboundDefinitions( + projectPath: string, + inboundNames: string[], + fallbackInbounds: any[] +): Promise { + return resolveDefinitions(projectPath, 'inbound', inboundNames, fallbackInbounds); +} + export async function getConnectorStoreCatalog( projectPath: string, fallbackConnectors: any[], fallbackInbounds: any[] ): Promise { const runtimeVersion = await getRuntimeVersionFromPom(projectPath); + const runtimeVersionUsed = getRuntimeVersionUsed(runtimeVersion); - const [connectors, inbounds] = await Promise.all([ - loadStoreItems({ - projectPath, - cacheFileName: CONNECTOR_CACHE_FILE_NAME, - urlTemplate: APIS.MI_CONNECTOR_STORE_BACKEND, - runtimeVersion, - fallbackItems: fallbackConnectors, - label: 'connectors', - }), - loadStoreItems({ - projectPath, - cacheFileName: INBOUND_CACHE_FILE_NAME, - urlTemplate: process.env.MI_CONNECTOR_STORE_BACKEND_INBOUND_ENDPOINTS, - runtimeVersion, - fallbackItems: fallbackInbounds, - label: 'inbound endpoints', - }), + if (runtimeVersion === null) { + logInfo(`[ConnectorStoreCache] Runtime version unavailable. Defaulting connector store runtime to ${DEFAULT_RUNTIME_VERSION}.`); + } + + const [connectorResult, inboundResult] = await Promise.all([ + loadCatalog('connector', runtimeVersionUsed, fallbackConnectors), + loadCatalog('inbound', runtimeVersionUsed, fallbackInbounds), ]); - return { connectors, inbounds }; + const warnings = dedupeWarnings([...connectorResult.warnings, ...inboundResult.warnings]); + const degradedSources = new Set(['stale-cache', 'local-db']); + const storeStatus: ConnectorStoreStatus = degradedSources.has(connectorResult.source) || degradedSources.has(inboundResult.source) + ? 'degraded' + : 'healthy'; + + return { + connectors: connectorResult.items, + inbounds: inboundResult.items, + storeStatus, + warnings, + runtimeVersionUsed, + source: { + connectors: connectorResult.source, + inbounds: inboundResult.source, + }, + }; } diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/connector_tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/connector_tools.ts index f7da3709d16..d35e37c9925 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/connector_tools.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/connector_tools.ts @@ -20,45 +20,222 @@ import { tool } from 'ai'; import { z } from 'zod'; import { CONNECTOR_DB } from '../context/connector_db'; import { INBOUND_DB } from '../context/inbound_db'; -import { CONNECTOR_DOCUMENTATION } from '../context/connectors_guide'; import { ToolResult } from './types'; import { logInfo, logDebug } from '../../copilot/logger'; -import { getConnectorStoreCatalog } from './connector_store_cache'; +import { + getConnectorStoreCatalog, + getConnectorDefinitions as getConnectorDefinitionLookup, + getInboundDefinitions as getInboundDefinitionLookup, + ConnectorDefinitionLookupResult, + ConnectorStoreSource, +} from './connector_store_cache'; // ============================================================================ // Utility Functions // ============================================================================ -/** - * Get full connector definitions by names - */ -function getConnectorDefinitions(connectorNames: string[], connectors: any[]): Record { - const definitions: Record = {}; +type ConnectorTargetType = 'connector' | 'inbound endpoint'; +type ParameterAvailabilityStatus = 'available' | 'partial' | 'unavailable' | 'unknown'; + +function normalizeIdentifier(value: unknown): string { + if (typeof value !== 'string') { + return ''; + } + + return value.trim().toLowerCase(); +} + +function getOperationList(definition: any): any[] { + if (Array.isArray(definition?.version?.operations)) { + return definition.version.operations; + } + + if (Array.isArray(definition?.operations)) { + return definition.operations; + } - for (const name of connectorNames) { - const connector = connectors.find(c => c.connectorName === name); - if (connector) { - definitions[name] = connector; + return []; +} + +function getConnectionList(definition: any): any[] { + if (Array.isArray(definition?.version?.connections)) { + return definition.version.connections; + } + + if (Array.isArray(definition?.connections)) { + return definition.connections; + } + + return []; +} + +function getMavenCoordinate(definition: any): string { + const groupId = typeof definition?.mavenGroupId === 'string' ? definition.mavenGroupId : 'unknown-group'; + const artifactId = typeof definition?.mavenArtifactId === 'string' ? definition.mavenArtifactId : 'unknown-artifact'; + return `${groupId}:${artifactId}`; +} + +function normalizeSelectionNames(names: unknown): string[] { + if (!Array.isArray(names)) { + return []; + } + + return Array.from( + new Set( + names + .map((name) => normalizeIdentifier(name)) + .filter((name) => name.length > 0) + ) + ); +} + +function getParameterAvailability(definition: any): { + status: ParameterAvailabilityStatus; + withParameters: number; + total: number; + summary: string; +} { + const operations = getOperationList(definition); + const total = operations.length; + + if (total === 0) { + return { + status: 'unknown', + withParameters: 0, + total: 0, + summary: 'unknown (operations list unavailable)', + }; + } + + let withParameters = 0; + for (const operation of operations) { + const parameters = Array.isArray(operation?.parameters) ? operation.parameters : []; + if (parameters.length > 0) { + withParameters += 1; } } - return definitions; + if (withParameters === 0) { + return { + status: 'unavailable', + withParameters, + total, + summary: `unavailable (${withParameters}/${total} operations have parameter data)`, + }; + } + + if (withParameters === total) { + return { + status: 'available', + withParameters, + total, + summary: `available (${withParameters}/${total} operations have parameter data)`, + }; + } + + return { + status: 'partial', + withParameters, + total, + summary: `partial (${withParameters}/${total} operations have parameter data)`, + }; } -/** - * Get full inbound endpoint definitions by names - */ -function getInboundEndpointDefinitions(inboundNames: string[], inbounds: any[]): Record { - const definitions: Record = {}; +function getInitializationGuidance( + connectionLocalEntryNeeded: boolean, + noInitializationNeeded: boolean +): string { + if (noInitializationNeeded) { + return 'noInitializationNeeded=true. Use connector operations directly; do not configure localEntry or init.'; + } - for (const name of inboundNames) { - const inbound = inbounds.find(i => i.connectorName === name); - if (inbound) { - definitions[name] = inbound; + if (connectionLocalEntryNeeded) { + return 'connectionLocalEntryNeeded=true. Configure a localEntry using init and use configKey in operations; do not re-init in-sequence.'; + } + + return 'connectionLocalEntryNeeded=false. Fetch init details and call init in-sequence before connector operations (no localEntry configKey flow).'; +} + +function buildSelectedOperationDetail( + name: string, + definition: any, + requestedOperationNames: string[], + requestedConnectionNames: string[], + warnings: Set +): Record | null { + const operations = getOperationList(definition); + const connections = getConnectionList(definition); + const selectedOperations: any[] = []; + const selectedConnections: any[] = []; + + for (const requestedOperation of requestedOperationNames) { + const operation = operations.find( + (candidate) => normalizeIdentifier(candidate?.name) === requestedOperation + ); + + if (!operation) { + warnings.add(`Requested operation '${requestedOperation}' was not found for '${name}'.`); + continue; + } + + const parameters = Array.isArray(operation?.parameters) ? operation.parameters : []; + if (parameters.length === 0) { + warnings.add( + `Parameter details are not available for '${name}.${operation?.name || requestedOperation}' in connector store/local fallback data.` + ); } + + selectedOperations.push({ + name: operation?.name || requestedOperation, + description: typeof operation?.description === 'string' ? operation.description : '', + parameters, + }); } - return definitions; + for (const requestedConnection of requestedConnectionNames) { + const connection = connections.find( + (candidate) => normalizeIdentifier(candidate?.name) === requestedConnection + ); + + if (!connection) { + warnings.add(`Requested connection '${requestedConnection}' was not found for '${name}'.`); + continue; + } + + const parameters = Array.isArray(connection?.parameters) ? connection.parameters : []; + if (parameters.length === 0) { + warnings.add( + `Connection parameter details are not available for '${name}.${connection?.name || requestedConnection}' in connector store/local fallback data.` + ); + } + + selectedConnections.push({ + name: connection?.name || requestedConnection, + description: typeof connection?.description === 'string' ? connection.description : '', + parameters, + }); + } + + const connectionNames = connections + .map((connection) => (typeof connection?.name === 'string' ? connection.name : '')) + .filter((connectionName) => connectionName.length > 0); + const hasInitOperation = operations.some((operation) => normalizeIdentifier(operation?.name) === 'init'); + const noInitializationNeeded = connectionNames.length === 0; + const connectionLocalEntryNeeded = noInitializationNeeded ? false : !hasInitOperation; + + if (selectedOperations.length === 0 && selectedConnections.length === 0) { + return null; + } + + return { + name: definition?.connectorName || name, + maven: getMavenCoordinate(definition), + version: definition?.version?.tagName || 'unknown', + operations: selectedOperations, + connections: selectedConnections, + connectionLocalEntryNeeded, + noInitializationNeeded, + }; } function toNames(items: any[]): string[] { @@ -75,13 +252,24 @@ function toNames(items: any[]): string[] { export interface AvailableConnectorCatalog { connectors: string[]; inboundEndpoints: string[]; + storeStatus: 'healthy' | 'degraded'; + warnings: string[]; + runtimeVersionUsed: string; + source: { + connectors: ConnectorStoreSource; + inbounds: ConnectorStoreSource; + }; } export async function getAvailableConnectorCatalog(projectPath: string): Promise { - const { connectors, inbounds } = await getConnectorStoreCatalog(projectPath, CONNECTOR_DB, INBOUND_DB); + const catalog = await getConnectorStoreCatalog(projectPath, CONNECTOR_DB, INBOUND_DB); return { - connectors: toNames(connectors), - inboundEndpoints: toNames(inbounds), + connectors: toNames(catalog.connectors), + inboundEndpoints: toNames(catalog.inbounds), + storeStatus: catalog.storeStatus, + warnings: catalog.warnings, + runtimeVersionUsed: catalog.runtimeVersionUsed, + source: catalog.source, }; } @@ -106,9 +294,10 @@ export async function getAvailableInboundEndpoints(projectPath: string): Promise // ============================================================================ export type ConnectorExecuteFn = (args: { - connector_names?: string[]; - inbound_endpoint_names?: string[]; - include_documentation?: boolean; + name?: string; + include_full_descriptions?: boolean; + operation_names?: string[]; + connection_names?: string[]; }) => Promise; // ============================================================================ @@ -120,98 +309,174 @@ export type ConnectorExecuteFn = (args: { */ export function createConnectorExecute(projectPath: string): ConnectorExecuteFn { return async (args: { - connector_names?: string[]; - inbound_endpoint_names?: string[]; - include_documentation?: boolean; + name?: string; + include_full_descriptions?: boolean; + operation_names?: string[]; + connection_names?: string[]; }): Promise => { const { - connector_names = [], - inbound_endpoint_names = [], - include_documentation = true, + name, + include_full_descriptions = false, + operation_names = [], + connection_names = [], } = args; - - logInfo(`[ConnectorTool] Fetching ${connector_names.length} connectors and ${inbound_endpoint_names.length} inbound endpoints`); - // Validate that at least one array has items - if (connector_names.length === 0 && inbound_endpoint_names.length === 0) { + const requestedName = typeof name === 'string' ? name.trim() : ''; + if (requestedName.length === 0) { return { success: false, - message: 'At least one connector name or inbound endpoint name must be provided.', - error: 'Error: No connector or inbound endpoint names provided' + message: 'Provide name for a connector or inbound endpoint.', + error: 'Error: Missing name for get_connector_definitions' }; } - const { connectors, inbounds } = await getConnectorStoreCatalog(projectPath, CONNECTOR_DB, INBOUND_DB); - - // Get connector definitions - const connectorDefinitions = connector_names.length > 0 - ? getConnectorDefinitions(connector_names, connectors) - : {}; - - // Get inbound endpoint definitions - const inboundDefinitions = inbound_endpoint_names.length > 0 - ? getInboundEndpointDefinitions(inbound_endpoint_names, inbounds) - : {}; - - // Count found vs requested - const connectorsFound = Object.keys(connectorDefinitions).length; - const inboundsFound = Object.keys(inboundDefinitions).length; - const connectorsNotFound = connector_names.filter(name => !connectorDefinitions[name]); - const inboundsNotFound = inbound_endpoint_names.filter(name => !inboundDefinitions[name]); - - // Build response message - let message = ''; + const firstLookupType: ConnectorTargetType = /\(inbound\)/i.test(requestedName) + ? 'inbound endpoint' + : 'connector'; + const secondLookupType: ConnectorTargetType = firstLookupType === 'connector' + ? 'inbound endpoint' + : 'connector'; + + logInfo(`[ConnectorTool] Fetching definition for name: ${requestedName}`); + + const firstLookup: ConnectorDefinitionLookupResult = firstLookupType === 'connector' + ? await getConnectorDefinitionLookup(projectPath, [requestedName], CONNECTOR_DB) + : await getInboundDefinitionLookup(projectPath, [requestedName], INBOUND_DB); + const firstDefinition = firstLookup.definitionsByName[requestedName]; + + let secondLookup: ConnectorDefinitionLookupResult | null = null; + let targetType: ConnectorTargetType | null = null; + let definition: any | null = firstDefinition || null; + + if (definition) { + targetType = firstLookupType; + } else { + secondLookup = secondLookupType === 'connector' + ? await getConnectorDefinitionLookup(projectPath, [requestedName], CONNECTOR_DB) + : await getInboundDefinitionLookup(projectPath, [requestedName], INBOUND_DB); + const secondDefinition = secondLookup.definitionsByName[requestedName]; + if (secondDefinition) { + definition = secondDefinition; + targetType = secondLookupType; + } + } - if (connectorsFound > 0) { - message += `Found ${connectorsFound} connector(s):\n`; - Object.entries(connectorDefinitions).forEach(([name, def]: [string, any]) => { - const versionTag = def?.version?.tagName || 'unknown'; - const operations = Array.isArray(def?.version?.operations) - ? def.version.operations - : (Array.isArray(def?.operations) ? def.operations : []); - message += `\n### ${name}\n`; - message += `- Description: ${def.description}\n`; - message += `- Maven: ${def.mavenGroupId}:${def.mavenArtifactId}\n`; - message += `- Version: ${versionTag}\n`; - if (operations.length > 0) { - message += `- Operations: ${operations.map((op: any) => op.name).join(', ')}\n`; - } else { - message += `- Operations: unavailable\n`; - } - message += `\nFull Definition:\n\`\`\`json\n${JSON.stringify(def, null, 2)}\n\`\`\`\n`; - }); + const resolvedType = targetType || 'connector or inbound endpoint'; + const warningSet = new Set([ + ...firstLookup.warnings, + ...(secondLookup?.warnings || []), + ]); + const requestedOperations = normalizeSelectionNames(operation_names); + const requestedConnections = normalizeSelectionNames(connection_names); + + if (include_full_descriptions && requestedOperations.length === 0 && requestedConnections.length === 0) { + warningSet.add( + 'include_full_descriptions=true but both operation_names and connection_names are empty. ' + + 'Provide exact names to retrieve detailed parameter descriptions.' + ); } - if (inboundsFound > 0) { - message += `\nFound ${inboundsFound} inbound endpoint(s):\n`; - Object.entries(inboundDefinitions).forEach(([name, def]: [string, any]) => { - const versionTag = def?.version?.tagName || 'unknown'; - message += `\n### ${name}\n`; - message += `- Description: ${def.description}\n`; - message += `- Maven: ${def.mavenGroupId}:${def.mavenArtifactId}\n`; - message += `- Version: ${versionTag}\n`; - message += `\nFull Definition:\n\`\`\`json\n${JSON.stringify(def, null, 2)}\n\`\`\`\n`; - }); + let message = ''; + const storeUnavailable = firstLookup.storeFailureNames.includes(requestedName) + || !!secondLookup?.storeFailureNames.includes(requestedName); + const fallbackUsed = firstLookup.fallbackUsedNames.includes(requestedName) + || !!secondLookup?.fallbackUsedNames.includes(requestedName); + const missingTarget = !definition; + + if (storeUnavailable) { + message += `\n`; + message += `Connector store was unavailable for '${requestedName}' (${resolvedType}).\n`; + message += `Used stale cache/local fallback where available.\n`; + message += `\n\n`; + message += `Connector store unavailable for '${requestedName}' (${resolvedType}).\n`; } - if (connectorsNotFound.length > 0) { - message += `\n Connectors not found: ${connectorsNotFound.join(', ')}`; + if (fallbackUsed) { + message += `Used local fallback definition for '${requestedName}' (${resolvedType}).\n`; } - if (inboundsNotFound.length > 0) { - message += `\n Inbound endpoints not found: ${inboundsNotFound.join(', ')}`; + if (!missingTarget && definition) { + const versionTag = definition?.version?.tagName || 'unknown'; + const maven = getMavenCoordinate(definition); + const operations = getOperationList(definition); + const connections = getConnectionList(definition); + const parameterAvailability = getParameterAvailability(definition); + const operationList = operations + .map((op: any) => (typeof op?.name === 'string' ? op.name : '')) + .filter((name: string) => name.length > 0); + const connectionList = connections + .map((connection: any) => (typeof connection?.name === 'string' ? connection.name : '')) + .filter((name: string) => name.length > 0); + const hasInitOperation = operations.some((operation: any) => normalizeIdentifier(operation?.name) === 'init'); + const noInitializationNeeded = connectionList.length === 0; + const connectionLocalEntryNeeded = noInitializationNeeded ? false : !hasInitOperation; + const initializationGuidance = getInitializationGuidance( + connectionLocalEntryNeeded, + noInitializationNeeded + ); + + message += `\n`; + message += `Initialization guidance for '${requestedName}': ${initializationGuidance}\n`; + message += `\n`; + + message += `\n### ${requestedName}\n`; + message += `- Maven: ${maven}\n`; + message += `- Version: ${versionTag}\n`; + message += `- Parameter Details: ${parameterAvailability.summary}\n`; + message += `- connectionLocalEntryNeeded: ${connectionLocalEntryNeeded}\n`; + message += `- noInitializationNeeded: ${noInitializationNeeded}\n`; + if (operationList.length > 0) { + message += `- Operations: ${operationList.join(', ')}\n`; + } else { + message += `- Operations: unavailable\n`; + } + if (connectionList.length > 0) { + message += `- Connections: ${connectionList.join(', ')}\n`; + } else { + message += `- Connections: unavailable\n`; + } + + if (parameterAvailability.status === 'unavailable') { + warningSet.add( + `Parameter details are currently unavailable for '${requestedName}' in store/fallback data. ` + + `Avoid include_full_descriptions calls for this item; they will not provide parameter data.` + ); + } else if (parameterAvailability.status === 'partial') { + warningSet.add( + `Parameter details are only partially available for '${requestedName}' ` + + `(${parameterAvailability.withParameters}/${parameterAvailability.total} operations). ` + + `Use include_full_descriptions only for selected operations.` + ); + } + + if (include_full_descriptions && (requestedOperations.length > 0 || requestedConnections.length > 0)) { + const detailPayload = buildSelectedOperationDetail( + requestedName, + definition, + requestedOperations, + requestedConnections, + warningSet + ); + if (detailPayload) { + message += `\nSelected Operation Details:\n\`\`\`json\n${JSON.stringify(detailPayload, null, 2)}\n\`\`\`\n`; + } + } + } else { + message += `\nMissing ${resolvedType}: ${requestedName}\n`; } - // Append general connector documentation by default, unless explicitly disabled. - if (include_documentation) { - message += `\n\n---\n\n${CONNECTOR_DOCUMENTATION}`; + const warnings = Array.from(warningSet); + if (warnings.length > 0) { + message = `Warnings: ${warnings.join(' | ')}\n\n${message}`; } - const success = connectorsFound > 0 || inboundsFound > 0; + const success = !missingTarget && !!definition; logDebug( - `[ConnectorTool] Retrieved ${connectorsFound} connectors and ${inboundsFound} inbound endpoints` + - `${include_documentation ? ' (with connector docs)' : ' (without docs)'}` + `[ConnectorTool] Retrieved ${resolvedType}: ${requestedName}` + + ` | found=${success}` + + ` | fallbackUsed=${fallbackUsed}, storeFailures=${storeUnavailable}` + + ` | includeFull=${include_full_descriptions}` ); return { @@ -226,16 +491,19 @@ export function createConnectorExecute(projectPath: string): ConnectorExecuteFn // ============================================================================ const connectorInputSchema = z.object({ - connector_names: z.array(z.string()) + name: z.string() + .min(1) + .describe('Name of a single connector or inbound endpoint to fetch (e.g., "Gmail" or "Kafka (Inbound)"). Use the exact name from available catalogs; inbound endpoints usually include "(Inbound)".'), + include_full_descriptions: z.boolean() .optional() - .describe('Array of connector names to fetch definitions for (e.g., ["AI", "Salesforce", "Gmail"])'), - inbound_endpoint_names: z.array(z.string()) + .default(false) + .describe('When true, returns detailed parameter descriptions for selected operation_names and/or connection_names. Use this only after checking summary availability lines to avoid unnecessary detail calls.'), + operation_names: z.array(z.string()) .optional() - .describe('Array of inbound endpoint names to fetch definitions for (e.g., ["Kafka (Inbound)", "HTTP (Inbound)"])'), - include_documentation: z.boolean() + .describe('Operation names for targeted detailed output when include_full_descriptions=true. Example: ["sendMail","readMail"].'), + connection_names: z.array(z.string()) .optional() - .default(true) - .describe('Whether to append connector usage documentation to the response. Defaults to true. Set false to save context when docs are already available.'), + .describe('Connection names for targeted detailed output when include_full_descriptions=true. Example: ["IMAP","SMTP"].'), }); /** @@ -244,12 +512,10 @@ const connectorInputSchema = z.object({ export function createConnectorTool(execute: ConnectorExecuteFn) { // Type assertion to avoid TypeScript deep instantiation issues with Zod return (tool as any)({ - description: `Retrieves full definitions for MI connectors and/or inbound endpoints by name. - Returns: operations, parameters, Maven coordinates, and connector usage documentation. - Available names are listed in and sections of the user prompt. - At least one of connector_names or inbound_endpoint_names must be provided. - include_documentation defaults to true; set it to false when connector documentation is already in context to save tokens. - For specialized guidance (for example, AI connector app development), use load_skill_context on demand.`, + description: `Retrieves definition for exactly one MI connector or inbound endpoint by name. + Default output is a compact summary with Maven coordinate, version, operations, connections, and initialization flags. + Set include_full_descriptions=true to include detailed parameter metadata for selected operation_names and/or connection_names. + Call this tool in parallel for multiple connector or inbound names.`, inputSchema: connectorInputSchema, execute }); diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/data_mapper_tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/data_mapper_tools.ts index 18c508fbdbc..5dd9bfc3d5f 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/data_mapper_tools.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/data_mapper_tools.ts @@ -85,7 +85,14 @@ function resolveProjectBoundPath(projectPath: string, requestedPath: string): st async function getUnsupportedRuntimeToolResult(projectPath: string, toolName: string): Promise { const runtimeVersion = await getRuntimeVersionFromPom(projectPath); if (!runtimeVersion) { - return undefined; + const message = `${toolName} requires MI runtime version information, but it was not found in pom.xml. ` + + `Set to ${RUNTIME_VERSION_440} or newer, then retry.`; + logWarn(`[DataMapperTools] ${message}`); + return { + success: false, + message, + error: 'Error: MI runtime version not configured', + }; } if (compareVersions(runtimeVersion, RUNTIME_VERSION_440) >= 0) { diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_edit_patch.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_edit_patch.ts new file mode 100644 index 00000000000..ba8ed071771 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_edit_patch.ts @@ -0,0 +1,297 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import { FileEditHunk } from './types'; + +export type PatchApplyErrorCode = + | 'INVALID_HUNK' + | 'HUNK_NOT_FOUND' + | 'HUNK_AMBIGUOUS' + | 'HUNK_OVERLAP' + | 'PATCH_APPLY_FAILED'; + +export interface PatchApplySuccess { + success: true; + newContent: string; + appliedHunks: number; +} + +export interface PatchApplyFailure { + success: false; + code: PatchApplyErrorCode; + message: string; + hunkIndex?: number; +} + +export type PatchApplyResult = PatchApplySuccess | PatchApplyFailure; + +interface CandidateRange { + start: number; + endExclusive: number; +} + +interface ResolvedHunk { + hunkIndex: number; + start: number; + endExclusive: number; + oldLineCount: number; + replacementLines: string[]; +} + +function normalizeLineEndings(content: string): string { + return content.replace(/\r\n?/g, '\n'); +} + +function trimTrailingWhitespace(line: string): string { + return line.replace(/[ \t]+$/g, ''); +} + +function toNormalizedLines(content: string): string[] { + return normalizeLineEndings(content).split('\n').map(trimTrailingWhitespace); +} + +function toRawLfLines(content: string): string[] { + return normalizeLineEndings(content).split('\n'); +} + +function splitReplacementLines(content: string): string[] { + if (content.length === 0) { + return []; + } + return normalizeLineEndings(content).split('\n'); +} + +function linesMatchAt(fileLines: string[], start: number, blockLines: string[]): boolean { + if (start < 0 || start + blockLines.length > fileLines.length) { + return false; + } + for (let i = 0; i < blockLines.length; i++) { + if (fileLines[start + i] !== blockLines[i]) { + return false; + } + } + return true; +} + +function findOldTextCandidates(fileLines: string[], oldTextLines: string[]): CandidateRange[] { + if (oldTextLines.length === 0 || oldTextLines.length > fileLines.length) { + return []; + } + + const candidates: CandidateRange[] = []; + const upperBound = fileLines.length - oldTextLines.length; + for (let start = 0; start <= upperBound; start++) { + if (linesMatchAt(fileLines, start, oldTextLines)) { + candidates.push({ + start, + endExclusive: start + oldTextLines.length, + }); + } + } + return candidates; +} + +function applyContextFilter( + fileLines: string[], + candidates: CandidateRange[], + contextBeforeLines?: string[], + contextAfterLines?: string[] +): CandidateRange[] { + return candidates.filter((candidate) => { + const beforeMatches = !contextBeforeLines || contextBeforeLines.length === 0 + || linesMatchAt(fileLines, candidate.start - contextBeforeLines.length, contextBeforeLines); + if (!beforeMatches) { + return false; + } + + const afterMatches = !contextAfterLines || contextAfterLines.length === 0 + || linesMatchAt(fileLines, candidate.endExclusive, contextAfterLines); + return afterMatches; + }); +} + +function applyLineHintFilter(candidates: CandidateRange[], lineHint?: number): CandidateRange[] { + if (lineHint === undefined || candidates.length <= 1) { + return candidates; + } + + const hintLine = lineHint; + let minDistance = Number.POSITIVE_INFINITY; + for (const candidate of candidates) { + const distance = Math.abs((candidate.start + 1) - hintLine); + if (distance < minDistance) { + minDistance = distance; + } + } + + return candidates.filter((candidate) => Math.abs((candidate.start + 1) - hintLine) === minDistance); +} + +function validateHunk(hunk: FileEditHunk, hunkIndex: number): PatchApplyFailure | undefined { + if (!hunk.old_text || hunk.old_text.length === 0) { + return { + success: false, + code: 'INVALID_HUNK', + hunkIndex, + message: `Hunk #${hunkIndex + 1} is invalid: old_text must be non-empty.`, + }; + } + + if (hunk.old_text === hunk.new_text) { + return { + success: false, + code: 'INVALID_HUNK', + hunkIndex, + message: `Hunk #${hunkIndex + 1} is invalid: old_text and new_text are identical.`, + }; + } + + if (hunk.line_hint !== undefined && (!Number.isInteger(hunk.line_hint) || hunk.line_hint <= 0)) { + return { + success: false, + code: 'INVALID_HUNK', + hunkIndex, + message: `Hunk #${hunkIndex + 1} is invalid: line_hint must be a positive integer.`, + }; + } + + return undefined; +} + +function resolveHunks(fileContent: string, hunks: FileEditHunk[]): PatchApplyFailure | ResolvedHunk[] { + const normalizedFileLines = toNormalizedLines(fileContent); + const resolvedHunks: ResolvedHunk[] = []; + + for (let hunkIndex = 0; hunkIndex < hunks.length; hunkIndex++) { + const hunk = hunks[hunkIndex]; + const hunkValidationFailure = validateHunk(hunk, hunkIndex); + if (hunkValidationFailure) { + return hunkValidationFailure; + } + + const oldTextNormalizedLines = toNormalizedLines(hunk.old_text); + const contextBeforeNormalizedLines = hunk.context_before !== undefined + ? toNormalizedLines(hunk.context_before) + : undefined; + const contextAfterNormalizedLines = hunk.context_after !== undefined + ? toNormalizedLines(hunk.context_after) + : undefined; + + let candidates = findOldTextCandidates(normalizedFileLines, oldTextNormalizedLines); + candidates = applyContextFilter( + normalizedFileLines, + candidates, + contextBeforeNormalizedLines, + contextAfterNormalizedLines + ); + candidates = applyLineHintFilter(candidates, hunk.line_hint); + + if (candidates.length === 0) { + return { + success: false, + code: 'HUNK_NOT_FOUND', + hunkIndex, + message: `Could not locate hunk #${hunkIndex + 1}. Re-read the file and provide a more specific old_text or context.`, + }; + } + + if (candidates.length > 1) { + return { + success: false, + code: 'HUNK_AMBIGUOUS', + hunkIndex, + message: `Hunk #${hunkIndex + 1} is ambiguous (${candidates.length} matches). Add context_before/context_after or line_hint to disambiguate.`, + }; + } + + const matchedRange = candidates[0]; + resolvedHunks.push({ + hunkIndex, + start: matchedRange.start, + endExclusive: matchedRange.endExclusive, + oldLineCount: oldTextNormalizedLines.length, + replacementLines: splitReplacementLines(hunk.new_text), + }); + } + + const orderedByStart = [...resolvedHunks].sort((a, b) => a.start - b.start); + for (let i = 1; i < orderedByStart.length; i++) { + const previous = orderedByStart[i - 1]; + const current = orderedByStart[i]; + if (current.start < previous.endExclusive) { + return { + success: false, + code: 'HUNK_OVERLAP', + hunkIndex: current.hunkIndex, + message: `Hunk #${previous.hunkIndex + 1} overlaps with hunk #${current.hunkIndex + 1}. Adjust hunk ranges to be non-overlapping.`, + }; + } + } + + return resolvedHunks; +} + +function detectPreferredNewline(content: string): '\r\n' | '\n' { + return content.includes('\r\n') ? '\r\n' : '\n'; +} + +export function applyStructuredFilePatch(fileContent: string, hunks: FileEditHunk[]): PatchApplyResult { + try { + if (!Array.isArray(hunks) || hunks.length === 0) { + return { + success: false, + code: 'INVALID_HUNK', + message: 'At least one hunk is required.', + }; + } + + const resolvedHunks = resolveHunks(fileContent, hunks); + if (!Array.isArray(resolvedHunks)) { + return resolvedHunks; + } + + const outputNewline = detectPreferredNewline(fileContent); + const mutableLines = toRawLfLines(fileContent); + const applyOrder = [...resolvedHunks].sort((a, b) => b.start - a.start); + + for (const resolvedHunk of applyOrder) { + mutableLines.splice( + resolvedHunk.start, + resolvedHunk.oldLineCount, + ...resolvedHunk.replacementLines + ); + } + + const patchedLfContent = mutableLines.join('\n'); + const newContent = outputNewline === '\r\n' + ? patchedLfContent.replace(/\n/g, '\r\n') + : patchedLfContent; + + return { + success: true, + newContent, + appliedHunks: resolvedHunks.length, + }; + } catch (error) { + return { + success: false, + code: 'PATCH_APPLY_FAILED', + message: `Failed to apply structured patch: ${error instanceof Error ? error.message : String(error)}`, + }; + } +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_tools.ts index dd62d831eef..2862244104f 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_tools.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/file_tools.ts @@ -25,11 +25,11 @@ import * as vscode from 'vscode'; import { ValidationResult, + FileEditHunk, ToolResult, VALID_FILE_EXTENSIONS, VALID_SPECIAL_FILE_NAMES, MAX_LINE_LENGTH, - PREVIEW_LENGTH, ErrorMessages, FILE_READ_TOOL_NAME, FILE_WRITE_TOOL_NAME, @@ -44,6 +44,7 @@ import { logDebug, logError } from '../../copilot/logger'; import { validateXmlFile, formatValidationMessage } from './validation-utils'; import { AgentUndoCheckpointManager } from '../undo/checkpoint-manager'; import { getCopilotProjectsRootDir } from '../storage-paths'; +import { applyStructuredFilePatch } from './file_edit_patch'; // ============================================================================ // Validation Functions @@ -645,37 +646,6 @@ function validateLineRange( // Utility Functions // ============================================================================ -/** - * Replace all occurrences of a string (ES2020 compatible) - */ -function replaceAll(text: string, search: string, replacement: string): string { - return text.split(search).join(replacement); -} - -/** - * Counts non-overlapping occurrences of a search string in text - */ -function countOccurrences(text: string, searchString: string): number { - // Handle edge case of empty strings - if (searchString.trim().length === 0 && text.trim().length === 0) { - return 1; - } - - if (!searchString) { - return 0; - } - - let count = 0; - let position = 0; - - while ((position = text.indexOf(searchString, position)) !== -1) { - count++; - position += searchString.length; - } - - return count; -} - /** * Truncates lines that exceed maximum length */ @@ -997,12 +967,10 @@ export function createEditExecute( ): EditExecuteFn { return async (args: { file_path: string; - old_string: string; - new_string: string; - replace_all?: boolean; + hunks: FileEditHunk[]; }): Promise => { - const { file_path, old_string, new_string, replace_all = false } = args; - logDebug(`[FileEditTool] Editing ${file_path}, replace_all: ${replace_all}`); + const { file_path, hunks } = args; + logDebug(`[FileEditTool] Editing ${file_path}, hunks: ${hunks?.length ?? 0}`); // Validate file path const pathValidation = validateFilePath(projectPath, file_path); @@ -1015,13 +983,12 @@ export function createEditExecute( }; } - // Check if old_string and new_string are identical - if (old_string === new_string) { - logError(`[FileEditTool] old_string and new_string are identical`); + if (!Array.isArray(hunks) || hunks.length === 0) { + logError(`[FileEditTool] No hunks provided for file: ${file_path}`); return { success: false, - message: 'old_string and new_string are identical. No changes to make.', - error: `Error: ${ErrorMessages.IDENTICAL_STRINGS}` + message: 'No hunks were provided. Provide at least one patch hunk.', + error: `Error: ${ErrorMessages.NO_EDITS}` }; } @@ -1037,43 +1004,22 @@ export function createEditExecute( }; } - await undoCheckpointManager?.captureBeforeChange(file_path); - // Read file content const content = fs.readFileSync(fullPath, 'utf-8'); - // Count occurrences - const occurrenceCount = countOccurrences(content, old_string); - - if (occurrenceCount === 0) { - const preview = content.substring(0, PREVIEW_LENGTH); - logError(`[FileEditTool] No occurrences of old_string found in file: ${file_path}`); + const patchResult = applyStructuredFilePatch(content, hunks); + if (!patchResult.success) { + const errorCode = ErrorMessages[patchResult.code as keyof typeof ErrorMessages] ?? patchResult.code; + logError(`[FileEditTool] Failed to apply hunk patch for: ${file_path}. ${patchResult.message}`); return { success: false, - message: `String to replace was not found in '${file_path}'. Please verify the exact text to replace, including whitespace and indentation.\n\nFile Preview:\n${preview}${content.length > PREVIEW_LENGTH ? '...' : ''}`, - error: `Error: ${ErrorMessages.NO_MATCH_FOUND}`, + message: patchResult.message, + error: `Error: ${errorCode}`, }; } - // If not replace_all, ensure exactly one match - if (!replace_all && occurrenceCount > 1) { - logError(`[FileEditTool] Multiple occurrences (${occurrenceCount}) found`); - return { - success: false, - message: `Found ${occurrenceCount} occurrences of the text in '${file_path}'. Either make old_string more specific to match exactly one occurrence, or set replace_all to true to replace all occurrences.`, - error: `Error: ${ErrorMessages.MULTIPLE_MATCHES}`, - }; - } - - // Perform replacement - let newContent: string; - if (content.trim() === '' && old_string.trim() === '') { - newContent = new_string; - } else { - newContent = replace_all - ? replaceAll(content, old_string, new_string) - : content.replace(old_string, new_string); - } + await undoCheckpointManager?.captureBeforeChange(file_path); + const newContent = patchResult.newContent; // Use WorkspaceEdit for LSP synchronization const uri = vscode.Uri.file(fullPath); @@ -1104,19 +1050,19 @@ export function createEditExecute( // Track modified file trackModifiedFile(modifiedFiles, file_path); - const replacedCount = replace_all ? occurrenceCount : 1; + const appliedHunkCount = patchResult.appliedHunks; // Give language services a brief moment to settle before automatic validation. await delay(POST_WRITE_VALIDATION_DELAY_MS); // Automatically validate the file and get structured diagnostics const validation = await validateXmlFile(fullPath, projectPath, false); - logDebug(`[FileEditTool] Successfully replaced ${replacedCount} occurrence(s) and synced file: ${file_path}`); + logDebug(`[FileEditTool] Successfully applied ${appliedHunkCount} hunk(s) and synced file: ${file_path}`); // Build result with structured validation data const result: ToolResult = { success: true, - message: `Successfully replaced ${replacedCount} occurrence(s) in '${file_path}'.${validation ? formatValidationMessage(validation) : ''}` + message: `Successfully applied ${appliedHunkCount} hunk(s) in '${file_path}'.${validation ? formatValidationMessage(validation) : ''}` }; if (validation) { @@ -1505,9 +1451,7 @@ export function createReadTool(execute: ReadExecuteFn, projectPath: string) { description: `Reads a file from the project. Text files return line-numbered content (supports offset/limit). Image files (.png, .jpg, .jpeg, .gif, .webp) are provided for multimodal analysis. - PDFs can be read with pages ("N" or "N-M"). For PDFs over ${PDF_MAX_PAGES_PER_REQUEST} pages, pages is required. Maximum ${PDF_MAX_PAGES_PER_REQUEST} pages per request. - ALWAYS read a file before editing it. - You can speculatively read multiple files in parallel.`, + PDFs can be read with pages ("N" or "N-M"). For PDFs over ${PDF_MAX_PAGES_PER_REQUEST} pages, pages is required. Maximum ${PDF_MAX_PAGES_PER_REQUEST} pages per request.`, inputSchema: readInputSchema, execute, toModelOutput: async ({ input, output }: { input: { file_path?: string; pages?: string }; output: unknown }) => { @@ -1522,17 +1466,22 @@ export function createReadTool(execute: ReadExecuteFn, projectPath: string) { const editInputSchema = z.object({ file_path: z.string().describe(`The file path to edit. Use a path relative to the project root, or an absolute path under ~/.wso2-mi/copilot/projects for copilot session artifacts.`), - old_string: z.string().describe(`The exact text to replace (must match file contents exactly, including whitespace)`), - new_string: z.string().describe(`The replacement text (must be different from old_string)`), - replace_all: z.boolean().optional().describe(`Replace all occurrences (default false)`) + hunks: z.array(z.object({ + old_text: z.string().describe(`Exact text block to replace (non-empty). Matching ignores trailing whitespace and line ending style.`), + new_text: z.string().describe(`Replacement text block. Use empty string to delete matched content.`), + context_before: z.string().optional().describe(`Optional stable text immediately before old_text to disambiguate repeated matches.`), + context_after: z.string().optional().describe(`Optional stable text immediately after old_text to disambiguate repeated matches.`), + line_hint: z.number().int().positive().optional().describe(`Optional 1-based approximate start line for old_text. Used only as a tie-breaker.`), + })).min(1).describe(`One or more patch hunks for this file. Hunks must not overlap.`) }); export function createEditTool(execute: EditExecuteFn) { // Type assertion to avoid TypeScript deep instantiation issues with Zod return (tool as any)({ - description: `Find-and-replace on an existing file. ALWAYS read the file first. - old_string must match EXACTLY (whitespace, indentation, line breaks). - Fails if old_string is not unique - provide more context or set replace_all=true. + description: `Apply structured patch hunks to an existing file (single file per call). + Use minimal old_text blocks with stable context_before/context_after for repeated sections. + Use line_hint only for disambiguation when multiple matches remain. + Matching is strict but normalizes line endings and ignores trailing whitespace. Cannot create new files - use ${FILE_WRITE_TOOL_NAME} for that. XML files are automatically validated after editing (results included in response). LemMinx may reports "Premature end of file". This is a known false positive when LemMinx is not synchronized with the file system. Ignore it and verify by building the project instead if needed.`, diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/plan_mode_tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/plan_mode_tools.ts index baad78ce261..70f8e61d439 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/plan_mode_tools.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/plan_mode_tools.ts @@ -226,7 +226,7 @@ export interface PendingQuestion { export interface PendingPlanApproval { approvalId: string; approvalKind: PlanApprovalKind; - resolve: (result: { approved: boolean; feedback?: string }) => void; + resolve: (result: { approved: boolean; feedback?: string; rememberForSession?: boolean; suggestedPrefixRule?: string[] }) => void; reject: (error: Error) => void; } @@ -244,7 +244,7 @@ async function requestPlanApproval( rejectLabel: string; allowFeedback: boolean; } -): Promise<{ approved: boolean; feedback?: string }> { +): Promise<{ approved: boolean; feedback?: string; rememberForSession?: boolean; suggestedPrefixRule?: string[] }> { const approvalId = uuidv4(); const approvalEvent: PlanApprovalRequestedEvent = { @@ -456,10 +456,9 @@ const askUserInputSchema = z.object({ export function createAskUserTool(execute: AskUserExecuteFn) { return (tool as any)({ - description: `Ask the user 1-4 questions with 2-4 options each. BLOCKS until user responds. - Use to clarify requirements, get preferences, or confirm implementation choices. - Put recommended option first with "(Recommended)" in label. Users can always select "Other" for free text. - Use multiSelect=true when choices are not mutually exclusive.`, + description: `Ask the user 1-4 multiple-choice questions and wait for a response. + Supports 2-4 options per question and optional multiSelect mode for non-mutually-exclusive choices. + Use this to clarify requirements, confirm assumptions, or collect preferences before implementation.`, inputSchema: askUserInputSchema, execute }); @@ -737,26 +736,21 @@ export function createExitPlanModeExecute( const exitPlanModeInputSchema = z.object({ summary: z.string().optional().describe( - 'Optional short summary shown while requesting approval. The actual plan is read from the plan file.' - ), - plan: z.string().optional().describe( - 'Deprecated alias for summary. The actual plan is always read from the plan file.' + 'Optional short note shown in the approval request. The plan content is read from the assigned plan file.' ), force_exit_without_plan: z.boolean().optional().describe( - 'Set true to request exiting plan mode without requiring a plan file update. Use only when planning is unnecessary.' + 'If true, requests user approval to exit plan mode without requiring a plan file approval flow.' ), reason: z.string().optional().describe( - 'Short reason for why exiting plan mode without a plan is acceptable.' + 'Optional reason shown to the user when force_exit_without_plan=true.' ), }); export function createExitPlanModeTool(execute: ExitPlanModeExecuteFn) { return (tool as any)({ - description: `Signal that your implementation plan is ready for user approval. BLOCKS until user approves or rejects. - Write/update your plan in the assigned plan file BEFORE calling this tool. - If planning is not required, set force_exit_without_plan=true (with optional reason) to request user consent to exit plan mode without a plan. - Use only when planning implementation work; do NOT use for research/exploration-only tasks. - Resolve open requirement questions with ask_user first. Do NOT ask "Is this plan okay?" via ask_user - this tool handles plan approval.`, + description: `Request to exit plan mode and wait for user approval. + Default flow submits the current assigned plan file for plan approval. + Set force_exit_without_plan=true to request an explicit exit approval without plan-file approval, optionally with a reason.`, inputSchema: exitPlanModeInputSchema, execute }); @@ -819,10 +813,9 @@ const todoWriteInputSchema = z.object({ export function createTodoWriteTool(execute: TodoWriteExecuteFn) { return (tool as any)({ - description: `Track task progress with a structured todo list (in-memory, not persisted). - Each call REPLACES the entire list - always include ALL tasks (completed + pending). - Only ONE task should be in_progress at a time. Mark tasks completed immediately after finishing. - Use for multi-step tasks (3+ steps). Each task needs content (imperative) and activeForm (present continuous).`, + description: `Update the structured in-memory todo list shown in the UI. + Each call replaces the full list and accepts tasks with content, status, and activeForm fields. + Todo state is session-scoped and not persisted to project files.`, inputSchema: todoWriteInputSchema, execute }); diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/project_tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/project_tools.ts index 96e32d3b700..1f73b687e10 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/project_tools.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/project_tools.ts @@ -26,7 +26,12 @@ import { logDebug, logError } from '../../copilot/logger'; import { AgentUndoCheckpointManager } from '../undo/checkpoint-manager'; import { CONNECTOR_DB } from '../context/connector_db'; import { INBOUND_DB } from '../context/inbound_db'; -import { getConnectorStoreCatalog, getRuntimeVersionFromPom } from './connector_store_cache'; +import { + getConnectorDefinitions, + getInboundDefinitions, + ConnectorDefinitionLookupResult, + getRuntimeVersionFromPom, +} from './connector_store_cache'; // ============================================================================ // Execute Function Types @@ -38,6 +43,15 @@ export type ManageConnectorExecuteFn = (args: { inbound_endpoint_names?: string[]; }) => Promise; +interface ProcessItemResult { + name: string; + type: 'connector' | 'inbound'; + success: boolean; + alreadyAdded?: boolean; + usedFallback?: boolean; + error?: string; +} + // ============================================================================ // Execute Functions // ============================================================================ @@ -83,9 +97,28 @@ export function createManageConnectorExecute( logDebug(`[${toolName}] Existing connector dependencies: ${existingDependencies.connectorDependencies?.length || 0}`); } - const results: Array<{ name: string; type: 'connector' | 'inbound'; success: boolean; alreadyAdded?: boolean; error?: string }> = []; - const { connectors, inbounds } = await getConnectorStoreCatalog(projectPath, CONNECTOR_DB, INBOUND_DB); - logDebug(`[${toolName}] Loaded connector catalog with ${connectors.length} connectors and ${inbounds.length} inbound endpoints`); + const emptyLookup: ConnectorDefinitionLookupResult = { + definitionsByName: {}, + missingNames: [], + fallbackUsedNames: [], + storeFailureNames: [], + warnings: [], + runtimeVersionUsed: runtimeVersion || 'unknown', + }; + + const results: ProcessItemResult[] = []; + const [connectorLookup, inboundLookup] = await Promise.all([ + connector_names.length > 0 + ? getConnectorDefinitions(projectPath, connector_names, CONNECTOR_DB) + : Promise.resolve(emptyLookup), + inbound_endpoint_names.length > 0 + ? getInboundDefinitions(projectPath, inbound_endpoint_names, INBOUND_DB) + : Promise.resolve(emptyLookup), + ]); + + if (connectorLookup.warnings.length > 0 || inboundLookup.warnings.length > 0) { + logDebug(`[${toolName}] Connector lookup warnings: ${[...connectorLookup.warnings, ...inboundLookup.warnings].join(' | ')}`); + } // Process connectors if any if (connector_names.length > 0) { @@ -93,7 +126,9 @@ export function createManageConnectorExecute( const result = await processItem( connectorName, 'connector', - connectors, + connectorLookup.definitionsByName[connectorName] ?? null, + connectorLookup.fallbackUsedNames.includes(connectorName), + connectorLookup.storeFailureNames.includes(connectorName), existingDependencies, miVisualizerRpcManager, isAdd, @@ -110,7 +145,9 @@ export function createManageConnectorExecute( const result = await processItem( inboundName, 'inbound', - inbounds, + inboundLookup.definitionsByName[inboundName] ?? null, + inboundLookup.fallbackUsedNames.includes(inboundName), + inboundLookup.storeFailureNames.includes(inboundName), existingDependencies, miVisualizerRpcManager, isAdd, @@ -142,9 +179,19 @@ export function createManageConnectorExecute( // Build response message const successful = results.filter(r => r.success); const failed = results.filter(r => !r.success); + const fallbackUsed = results.filter(r => r.success && r.usedFallback); + const storeFailedUnavailable = results.filter(r => !r.success && r.error?.includes('connector store is unavailable')); let message = ''; + if (fallbackUsed.length > 0) { + message += `Used local fallback definitions for ${fallbackUsed.length} item(s):\n`; + fallbackUsed.forEach(r => { + message += ` - ${r.name} (${r.type})\n`; + }); + message += '\n'; + } + if (isAdd) { const alreadyAdded = results.filter(r => r.success && r.alreadyAdded); const newlyAdded = results.filter(r => r.success && !r.alreadyAdded); @@ -184,6 +231,11 @@ export function createManageConnectorExecute( }); } + if (storeFailedUnavailable.length > 0) { + message += `\nConnector store outage impacted ${storeFailedUnavailable.length} item(s). `; + message += `Those items were not in cache or fallback data.`; + } + return { success: successful.length > 0, message: message.trim() @@ -205,35 +257,35 @@ export function createManageConnectorExecute( async function processItem( itemName: string, itemType: 'connector' | 'inbound', - storeData: any[], + resolvedItem: any | null, + usedFallback: boolean, + storeFailure: boolean, existingDependencies: any, miVisualizerRpcManager: MiVisualizerRpcManager, isAdd: boolean, operation: 'add' | 'remove', toolName: string -): Promise<{ name: string; type: 'connector' | 'inbound'; success: boolean; alreadyAdded?: boolean; error?: string }> { +): Promise { try { - const normalizedInput = normalizeConnectorIdentifier(itemName); - - // Match by connectorName and artifact identifiers (case-insensitive) - const item = storeData.find( - (c: any) => { - const connectorName = normalizeConnectorIdentifier(c?.connectorName); - const artifactId = normalizeConnectorIdentifier(c?.mavenArtifactId); - const artifactShortName = normalizeConnectorIdentifier(stripConnectorPrefix(c?.mavenArtifactId)); - - return normalizedInput === connectorName || - normalizedInput === artifactId || - normalizedInput === artifactShortName; - } - ); + if (!resolvedItem) { + return { + name: itemName, + type: itemType, + success: false, + error: storeFailure + ? `${itemType === 'connector' ? 'Connector' : 'Inbound endpoint'} is unavailable because connector store is unavailable and no cache/fallback definition exists` + : `${itemType === 'connector' ? 'Connector' : 'Inbound endpoint'} not found in connector store or fallback` + }; + } - if (!item) { + const item = resolvedItem; + + if (typeof item?.mavenGroupId !== 'string' || typeof item?.mavenArtifactId !== 'string') { return { name: itemName, type: itemType, success: false, - error: `${itemType === 'connector' ? 'Connector' : 'Inbound endpoint'} not found in store` + error: `${itemType === 'connector' ? 'Connector' : 'Inbound endpoint'} definition is missing Maven coordinates` }; } @@ -251,7 +303,8 @@ async function processItem( name: itemName, type: itemType, success: true, - alreadyAdded: true + alreadyAdded: true, + usedFallback }; } } @@ -273,7 +326,7 @@ async function processItem( }); if (response) { - return { name: itemName, type: itemType, success: true }; + return { name: itemName, type: itemType, success: true, usedFallback }; } else { return { name: itemName, @@ -292,22 +345,6 @@ async function processItem( } } -function stripConnectorPrefix(value: unknown): string { - if (typeof value !== 'string') { - return ''; - } - - return value.replace(/^mi-(connector|module)-/i, ''); -} - -function normalizeConnectorIdentifier(value: unknown): string { - if (typeof value !== 'string') { - return ''; - } - - return value.trim().toLowerCase(); -} - // ============================================================================ // Tool Definitions (Vercel AI SDK format) diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox.ts new file mode 100644 index 00000000000..966694e5c06 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox.ts @@ -0,0 +1,1234 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { analyzePowerShellCommand } from './shell_sandbox_powershell'; + +/** + * Shell sandbox policy summary: + * - Allows read-only commands, network calls, and background execution by default. + * - Requires approval for potentially mutating commands that are allowed to run, except /tmp-only writes. + * - Hard-blocks interactive/elevated commands (e.g., sudo, shells, editors). + * - Hard-blocks access to sensitive secret paths (for example ~/.ssh, ~/.aws, shell rc files, and .env files). + * - Hard-blocks file mutations outside the project, except explicitly allowed roots (currently /tmp). + * - Resolves paths via realpath (or nearest existing parent) to prevent symlink/path-escape bypasses. + */ +export interface ShellSegmentAnalysis { + raw: string; + command: string; + tokens: string[]; + requiresApproval: boolean; + reasons: string[]; + isDestructive: boolean; + blocked: boolean; +} + +export interface ShellCommandAnalysis { + requiresApproval: boolean; + blocked: boolean; + reasons: string[]; + suggestedPrefixRule: string[]; + isDestructive: boolean; + isComplexSyntax: boolean; + runInBackground: boolean; + segments: ShellSegmentAnalysis[]; + analysisEngine?: string; + classificationMetadata?: Record; +} + +export function buildShellCommandDeniedResult(): { + success: false; + message: string; + error: 'SHELL_COMMAND_DENIED'; +} { + return { + success: false, + message: [ + 'User denied permission to execute shell command.', + '', + '', + 'Do not retry the same shell command. Use other tools or ask the user for an alternative approach.', + '', + ].join('\n'), + error: 'SHELL_COMMAND_DENIED', + }; +} + +export function buildShellSandboxBlockedResult(reasons: string[]): { + success: false; + message: string; + error: 'SHELL_SANDBOX_BLOCKED'; +} { + const blockedReasons = reasons.length > 0 + ? reasons.map((reason) => `- ${reason}`).join('\n') + : '- Command is blocked by shell sandbox policy.'; + + return { + success: false, + message: [ + 'Shell command blocked by sandbox policy.', + blockedReasons, + '', + '', + 'Do not retry blocked shell commands. Keep file mutations inside the project or use /tmp.', + '', + ].join('\n'), + error: 'SHELL_SANDBOX_BLOCKED', + }; +} + +const SAFE_READ_COMMANDS = new Set([ + 'cat', + 'cd', + 'cut', + 'dir', + 'dirname', + 'du', + 'echo', + 'env', + 'find', + 'git', + 'grep', + 'head', + 'id', + 'ls', + 'pwd', + 'readlink', + 'realpath', + 'rg', + 'select-string', + 'sort', + 'stat', + 'tail', + 'tree', + 'type', + 'uniq', + 'wc', + 'where', + 'which', + 'whoami', +]); + +const NETWORK_COMMANDS = new Set([ + 'curl', + 'dig', + 'ftp', + 'invoke-restmethod', + 'invoke-webrequest', + 'nc', + 'netcat', + 'nmap', + 'nslookup', + 'ping', + 'scp', + 'sftp', + 'ssh', + 'telnet', + 'traceroute', + 'wget', +]); + +const MUTATION_COMMANDS = new Set([ + 'add-content', + 'clear-content', + 'copy-item', + 'cp', + 'dd', + 'del', + 'install', + 'ln', + 'mkdir', + 'move-item', + 'mv', + 'new-item', + 'npm', + 'out-file', + 'perl', + 'pip', + 'pip3', + 'pnpm', + 'poetry', + 'python', + 'python3', + 'remove-item', + 'rename-item', + 'rm', + 'rmdir', + 'sed', + 'set-content', + 'tee', + 'touch', + 'truncate', + 'yarn', +]); + +const DESTRUCTIVE_COMMANDS = new Set([ + 'chmod', + 'chown', + 'chgrp', + 'del', + 'move-item', + 'mv', + 'rd', + 'remove-item', + 'rename-item', + 'rm', + 'rmdir', + 'truncate', +]); + +const BLOCKED_INTERACTIVE_OR_ELEVATED_COMMANDS = new Set([ + 'bash', + 'cmd', + 'cmd.exe', + 'doas', + 'emacs', + 'htop', + 'less', + 'man', + 'more', + 'nano', + 'nvim', + 'passwd', + 'powershell', + 'powershell.exe', + 'pwsh', + 'sh', + 'su', + 'sudo', + 'top', + 'vi', + 'vim', + 'watch', + 'zsh', +]); + +const ALLOWED_EXTERNAL_MUTATION_ROOTS = process.platform === 'win32' + ? [path.resolve(os.tmpdir())] + : ['/tmp']; + +const SENSITIVE_PATH_SEGMENTS = new Set([ + '.aws', + '.azure', + '.gnupg', + '.kube', + '.npm', + '.pypirc', + '.ssh', +]); + +const SENSITIVE_FILE_BASENAMES = new Set([ + '.bash_profile', + '.bashrc', + '.env', + '.git-credentials', + '.netrc', + '.npmrc', + '.profile', + '.zprofile', + '.zsh_history', + '.zshrc', + 'authorized_keys', + 'credentials', + 'id_dsa', + 'id_ecdsa', + 'id_ed25519', + 'id_rsa', + 'known_hosts', +]); + +function dedupe(values: string[]): string[] { + return Array.from(new Set(values)); +} + +function normalizePathForComparison(targetPath: string): string { + const normalized = path.resolve(targetPath).replace(/\\/g, '/').replace(/\/+$/, ''); + return process.platform === 'win32' ? normalized.toLowerCase() : normalized; +} + +function tryRealpath(targetPath: string): string | undefined { + try { + return fs.realpathSync.native(targetPath); + } catch { + try { + return fs.realpathSync(targetPath); + } catch { + return undefined; + } + } +} + +function resolvePathWithRealpath(targetPath: string): string { + const absolutePath = path.resolve(targetPath); + const directRealPath = tryRealpath(absolutePath); + if (directRealPath) { + return normalizePathForComparison(directRealPath); + } + + const tailSegments: string[] = []; + let cursor = absolutePath; + while (true) { + const parent = path.dirname(cursor); + if (parent === cursor) { + break; + } + tailSegments.unshift(path.basename(cursor)); + const realParentPath = tryRealpath(parent); + if (realParentPath) { + return normalizePathForComparison(path.join(realParentPath, ...tailSegments)); + } + cursor = parent; + } + + return normalizePathForComparison(absolutePath); +} + +function isPathWithin(basePath: string, targetPath: string): boolean { + const normalizedBase = normalizePathForComparison(basePath); + const normalizedTarget = normalizePathForComparison(targetPath); + return normalizedTarget === normalizedBase || normalizedTarget.startsWith(`${normalizedBase}/`); +} + +function normalizeToken(token: string): string { + return token.trim().toLowerCase(); +} + +function tokenizeSegment(segment: string): { tokens: string[]; parseFailed: boolean } { + const tokens: string[] = []; + let current = ''; + let inSingleQuote = false; + let inDoubleQuote = false; + let escapeNext = false; + + for (let i = 0; i < segment.length; i++) { + const ch = segment[i]; + + if (escapeNext) { + current += ch; + escapeNext = false; + continue; + } + + if (ch === '\\' && !inSingleQuote) { + escapeNext = true; + continue; + } + + if (ch === '\'' && !inDoubleQuote) { + inSingleQuote = !inSingleQuote; + continue; + } + + if (ch === '"' && !inSingleQuote) { + inDoubleQuote = !inDoubleQuote; + continue; + } + + if (!inSingleQuote && !inDoubleQuote && /\s/.test(ch)) { + if (current.trim().length > 0) { + tokens.push(current); + current = ''; + } + continue; + } + + current += ch; + } + + if (escapeNext || inSingleQuote || inDoubleQuote) { + return { tokens: [], parseFailed: true }; + } + + if (current.trim().length > 0) { + tokens.push(current); + } + + return { + tokens: tokens.map((token) => token.trim()).filter((token) => token.length > 0), + parseFailed: false, + }; +} + +function splitTopLevelSegments(command: string): { segments: string[]; parseFailed: boolean } { + const segments: string[] = []; + let current = ''; + let inSingleQuote = false; + let inDoubleQuote = false; + let escapeNext = false; + + const pushSegment = () => { + const trimmed = current.trim(); + if (trimmed.length > 0) { + segments.push(trimmed); + } + current = ''; + }; + + for (let i = 0; i < command.length; i++) { + const ch = command[i]; + const next = command[i + 1]; + + if (escapeNext) { + current += ch; + escapeNext = false; + continue; + } + + if (ch === '\\' && !inSingleQuote) { + current += ch; + escapeNext = true; + continue; + } + + if (ch === '\'' && !inDoubleQuote) { + inSingleQuote = !inSingleQuote; + current += ch; + continue; + } + + if (ch === '"' && !inSingleQuote) { + inDoubleQuote = !inDoubleQuote; + current += ch; + continue; + } + + if (!inSingleQuote && !inDoubleQuote) { + if (ch === '&' && next === '&') { + pushSegment(); + i++; + continue; + } + if (ch === '|' && next === '|') { + pushSegment(); + i++; + continue; + } + if (ch === '|' || ch === ';') { + pushSegment(); + continue; + } + } + + current += ch; + } + + if (escapeNext || inSingleQuote || inDoubleQuote) { + return { segments: [], parseFailed: true }; + } + + pushSegment(); + return { segments, parseFailed: false }; +} + +function detectComplexSyntax(command: string): { isComplex: boolean; reason?: string } { + if (command.includes('\n')) { + return { + isComplex: true, + reason: 'Multiline shell commands require explicit approval.', + }; + } + + if (/(^|[^\\])`/.test(command)) { + return { + isComplex: true, + reason: 'Backtick command substitution requires explicit approval.', + }; + } + + if (/\$\(/.test(command)) { + return { + isComplex: true, + reason: 'Subshell command substitution ($( ... )) requires explicit approval.', + }; + } + + if (/<<]\(/.test(command)) { + return { + isComplex: true, + reason: 'Process substitution syntax requires explicit approval.', + }; + } + + let inSingleQuote = false; + let inDoubleQuote = false; + let escapeNext = false; + for (let i = 0; i < command.length; i++) { + const ch = command[i]; + + if (escapeNext) { + escapeNext = false; + continue; + } + if (ch === '\\' && !inSingleQuote) { + escapeNext = true; + continue; + } + if (ch === '\'' && !inDoubleQuote) { + inSingleQuote = !inSingleQuote; + continue; + } + if (ch === '"' && !inSingleQuote) { + inDoubleQuote = !inDoubleQuote; + continue; + } + if (!inSingleQuote && !inDoubleQuote && (ch === '(' || ch === ')')) { + return { + isComplex: true, + reason: 'Nested shell grouping syntax requires explicit approval.', + }; + } + } + + return { isComplex: false }; +} + +function looksLikePathToken(token: string): boolean { + const normalizedToken = stripWrappingQuotes(token); + if (!normalizedToken || normalizedToken.length === 0) { + return false; + } + + if (normalizedToken.includes('://')) { + return false; + } + + if (/^[A-Za-z_][A-Za-z0-9_]*=/.test(normalizedToken)) { + return false; + } + + if (normalizedToken.startsWith('$')) { + return false; + } + + if (normalizedToken.startsWith('-')) { + return false; + } + + if (path.isAbsolute(normalizedToken)) { + return true; + } + + if (normalizedToken.startsWith('~') || normalizedToken.startsWith('./') || normalizedToken.startsWith('../')) { + return true; + } + + if (/^[A-Za-z]:[\\/]/.test(normalizedToken)) { + return true; + } + + return normalizedToken.includes('/') || normalizedToken.includes('\\'); +} + +function stripWrappingQuotes(token: string): string { + if (token.length >= 2) { + if ((token.startsWith('"') && token.endsWith('"')) || (token.startsWith('\'') && token.endsWith('\''))) { + return token.slice(1, -1); + } + } + return token; +} + +function isLikelyFilePathValue(token: string): boolean { + const normalizedToken = stripWrappingQuotes(token.trim()); + if (!normalizedToken || normalizedToken.length === 0) { + return false; + } + + if (normalizedToken === '-' || normalizedToken === '--') { + return false; + } + + if (normalizedToken.includes('://')) { + return false; + } + + if (/^[0-9]+$/.test(normalizedToken)) { + return false; + } + + if (/^[A-Za-z_][A-Za-z0-9_]*=/.test(normalizedToken)) { + return false; + } + + if (normalizedToken.startsWith('$')) { + return false; + } + + return true; +} + +function isSensitiveTokenName(token: string): boolean { + const normalizedToken = stripWrappingQuotes(token.trim()); + if (!normalizedToken) { + return false; + } + + const normalizedLower = normalizeToken(normalizedToken); + const normalizedWithForwardSlashes = normalizedLower.replace(/\\/g, '/'); + const basename = normalizeToken(path.basename(normalizedToken)); + if (!basename) { + return false; + } + + if (basename === '.env' || basename.startsWith('.env.')) { + return true; + } + + if (SENSITIVE_FILE_BASENAMES.has(basename)) { + return true; + } + + if (/^id_(rsa|dsa|ecdsa|ed25519)(\.pub)?$/i.test(basename)) { + return true; + } + + if (normalizedWithForwardSlashes.includes('/.aws/') || normalizedWithForwardSlashes.endsWith('/.aws')) { + return true; + } + + if (normalizedWithForwardSlashes.includes('/.ssh/') || normalizedWithForwardSlashes.endsWith('/.ssh')) { + return true; + } + + if (/(^|\/)\.(bashrc|bash_profile|zshrc|zprofile|profile|env(\..+)?)$/i.test(normalizedWithForwardSlashes)) { + return true; + } + + return false; +} + +function isNullDevicePath(token: string): boolean { + const normalizedToken = normalizeToken(stripWrappingQuotes(token)); + return normalizedToken === '/dev/null' || normalizedToken === 'nul'; +} + +function resolvePathCandidate(projectPath: string, token: string): string { + const normalizedToken = stripWrappingQuotes(token.trim()); + if (normalizedToken.startsWith('~')) { + const homeDir = os.homedir(); + const relative = normalizedToken.slice(1).replace(/^[/\\]+/, ''); + return resolvePathWithRealpath(path.resolve(homeDir, relative)); + } + + if (path.isAbsolute(normalizedToken) || /^[A-Za-z]:[\\/]/.test(normalizedToken)) { + return resolvePathWithRealpath(path.resolve(normalizedToken)); + } + + return resolvePathWithRealpath(path.resolve(projectPath, normalizedToken)); +} + +function extractOutputRedirectionPaths(segment: string): string[] { + const paths: string[] = []; + let inSingleQuote = false; + let inDoubleQuote = false; + let escapeNext = false; + + for (let i = 0; i < segment.length; i++) { + const ch = segment[i]; + + if (escapeNext) { + escapeNext = false; + continue; + } + + if (ch === '\\' && !inSingleQuote) { + escapeNext = true; + continue; + } + + if (ch === '\'' && !inDoubleQuote) { + inSingleQuote = !inSingleQuote; + continue; + } + + if (ch === '"' && !inSingleQuote) { + inDoubleQuote = !inDoubleQuote; + continue; + } + + if (inSingleQuote || inDoubleQuote || ch !== '>') { + continue; + } + + if (segment[i + 1] === '>') { + i++; + } + + let cursor = i + 1; + while (cursor < segment.length && /\s/.test(segment[cursor])) { + cursor++; + } + if (cursor >= segment.length) { + break; + } + + let token = ''; + const opener = segment[cursor]; + if (opener === '\'' || opener === '"') { + const closer = opener; + cursor++; + while (cursor < segment.length && segment[cursor] !== closer) { + token += segment[cursor]; + cursor++; + } + } else { + while ( + cursor < segment.length && + !/\s/.test(segment[cursor]) && + segment[cursor] !== ';' && + segment[cursor] !== '|' && + segment[cursor] !== '&' + ) { + token += segment[cursor]; + cursor++; + } + } + + const cleaned = stripWrappingQuotes(token.trim()); + if (cleaned && !cleaned.startsWith('&') && isLikelyFilePathValue(cleaned) && !isNullDevicePath(cleaned)) { + paths.push(cleaned); + } + + i = cursor - 1; + } + + return dedupe(paths); +} + +function extractOptionValues(tokens: string[], optionNames: string[]): string[] { + const values: string[] = []; + for (let i = 1; i < tokens.length; i++) { + const token = tokens[i]; + for (const optionName of optionNames) { + if (token === optionName && i + 1 < tokens.length) { + values.push(tokens[i + 1]); + break; + } + if (token.startsWith(`${optionName}=`)) { + values.push(token.slice(optionName.length + 1)); + break; + } + } + } + return values; +} + +function extractPathOptions(tokens: string[]): string[] { + return extractOptionValues(tokens, [ + '-C', + '-f', + '-t', + '--config', + '--cwd', + '--destination', + '--file', + '--git-dir', + '--out', + '--output', + '--path', + '--prefix', + '--target', + '--target-directory', + '--work-tree', + ]); +} + +function extractTeeWritePaths(tokens: string[]): string[] { + if (normalizeToken(tokens[0] || '') !== 'tee') { + return []; + } + + const writePaths = tokens.slice(1) + .filter((token) => !token.startsWith('-')) + .map((token) => stripWrappingQuotes(token)) + .filter((token) => isLikelyFilePathValue(token) && !isNullDevicePath(token)); + + return dedupe(writePaths); +} + +function extractMutationWritePathTokens(command: string, tokens: string[], rawSegment: string): string[] { + const writePaths: string[] = []; + writePaths.push(...extractOutputRedirectionPaths(rawSegment)); + writePaths.push(...extractTeeWritePaths(tokens)); + + if (['cp', 'copy-item', 'mv', 'move-item', 'rename-item', 'ln'].includes(command)) { + const targetDirectory = extractOptionValues(tokens, ['-t', '--target-directory']); + if (targetDirectory.length > 0) { + writePaths.push(targetDirectory[targetDirectory.length - 1]); + } else { + const positionalArgs = tokens.slice(1).filter((token) => !token.startsWith('-')); + if (positionalArgs.length > 0) { + writePaths.push(positionalArgs[positionalArgs.length - 1]); + } + } + } else if (command === 'dd') { + for (const token of tokens.slice(1)) { + if (token.startsWith('of=')) { + writePaths.push(token.slice(3)); + } + } + } else if (command === 'git') { + writePaths.push(...extractOptionValues(tokens, ['-C', '--git-dir', '--work-tree'])); + } else if (['bun', 'npm', 'pnpm', 'pip', 'pip3', 'poetry', 'yarn'].includes(command)) { + writePaths.push(...extractOptionValues(tokens, ['-C', '--prefix', '--cwd'])); + } else { + const positionalArgs = tokens.slice(1) + .filter((token) => !token.startsWith('-')) + .map((token) => stripWrappingQuotes(token)) + .filter((token) => looksLikePathToken(token)); + writePaths.push(...positionalArgs); + writePaths.push( + ...extractOptionValues(tokens, ['--path', '--output', '--out', '--file', '--target', '--destination']) + .map((token) => stripWrappingQuotes(token)) + .filter((token) => looksLikePathToken(token)) + ); + } + + return dedupe( + writePaths + .map((token) => stripWrappingQuotes(token)) + .filter((token) => isLikelyFilePathValue(token) && !isNullDevicePath(token)) + ); +} + +function extractSegmentPathTokens(command: string, tokens: string[], rawSegment: string, isMutation: boolean): string[] { + const pathTokens: string[] = []; + if (isMutation) { + pathTokens.push(...extractMutationWritePathTokens(command, tokens, rawSegment)); + } + + const optionPathValues = extractPathOptions(tokens); + pathTokens.push(...optionPathValues); + + const positionalArgs = tokens.slice(1).filter((token) => !token.startsWith('-')); + let positionalPathCandidates = positionalArgs; + + if (['grep', 'rg', 'select-string'].includes(command)) { + positionalPathCandidates = positionalArgs.slice(1); + } + + for (const token of positionalPathCandidates) { + const strippedToken = stripWrappingQuotes(token); + if (looksLikePathToken(strippedToken) || isSensitiveTokenName(strippedToken)) { + pathTokens.push(strippedToken); + } + } + + return dedupe(pathTokens); +} + +function findDisallowedMutationPaths( + projectPath: string, + allowedMutationRoots: string[], + writePathTokens: string[] +): string[] { + const disallowedPaths: string[] = []; + for (const writePathToken of writePathTokens) { + try { + const resolvedPath = resolvePathCandidate(projectPath, writePathToken); + const isAllowed = allowedMutationRoots.some((allowedRoot) => isPathWithin(allowedRoot, resolvedPath)); + if (!isAllowed) { + disallowedPaths.push(resolvedPath); + } + } catch { + disallowedPaths.push(writePathToken); + } + } + return dedupe(disallowedPaths); +} + +function resolveMutationPaths(projectPath: string, writePathTokens: string[]): string[] { + const resolvedPaths: string[] = []; + for (const writePathToken of writePathTokens) { + try { + resolvedPaths.push(resolvePathCandidate(projectPath, writePathToken)); + } catch { + // Ignore; unresolved paths are treated as disallowed by caller logic. + } + } + return dedupe(resolvedPaths); +} + +function findSensitivePaths(projectPath: string, pathTokens: string[]): string[] { + const sensitivePaths: string[] = []; + for (const pathToken of pathTokens) { + const tokenIsSensitive = isSensitiveTokenName(pathToken); + if (!tokenIsSensitive && !looksLikePathToken(pathToken)) { + continue; + } + + try { + const resolvedPath = resolvePathCandidate(projectPath, pathToken); + const normalizedPath = normalizePathForComparison(resolvedPath); + const segments = normalizedPath.split('/').filter((segment) => segment.length > 0); + const basename = segments.length > 0 ? segments[segments.length - 1] : ''; + + if ( + basename === '.env' || + basename.startsWith('.env.') || + SENSITIVE_FILE_BASENAMES.has(basename) || + segments.some((segment) => SENSITIVE_PATH_SEGMENTS.has(segment)) || + tokenIsSensitive + ) { + sensitivePaths.push(normalizedPath); + } + } catch { + if (tokenIsSensitive) { + sensitivePaths.push(pathToken); + } + } + } + + return dedupe(sensitivePaths); +} + +function hasOutputRedirection(segment: string): boolean { + return extractOutputRedirectionPaths(segment).length > 0; +} + +function isGitMutation(tokens: string[]): boolean { + if (tokens.length < 2 || normalizeToken(tokens[0]) !== 'git') { + return false; + } + + const gitAction = normalizeToken(tokens[1]); + return [ + 'add', + 'apply', + 'am', + 'checkout', + 'cherry-pick', + 'clean', + 'commit', + 'fetch', + 'merge', + 'pull', + 'push', + 'rebase', + 'reset', + 'restore', + 'revert', + 'stash', + 'switch', + ].includes(gitAction); +} + +function isGitDestructive(tokens: string[]): boolean { + if (tokens.length < 2 || normalizeToken(tokens[0]) !== 'git') { + return false; + } + + const gitAction = normalizeToken(tokens[1]); + return ['checkout', 'clean', 'reset', 'restore', 'switch'].includes(gitAction); +} + +function isPackageManagerMutation(tokens: string[]): boolean { + if (tokens.length < 2) { + return false; + } + + const manager = normalizeToken(tokens[0]); + if (!['bun', 'npm', 'pip', 'pip3', 'pnpm', 'poetry', 'yarn'].includes(manager)) { + return false; + } + + const action = normalizeToken(tokens[1]); + return [ + 'add', + 'build', + 'install', + 'init', + 'publish', + 'remove', + 'run', + 'test', + 'uninstall', + 'update', + 'upgrade', + ].includes(action); +} + +function isSedOrPerlInPlaceMutation(tokens: string[]): boolean { + const command = normalizeToken(tokens[0] || ''); + if (!['perl', 'sed'].includes(command)) { + return false; + } + + return tokens.some((token) => token === '-i' || token.startsWith('-i')); +} + +function isDestructiveCommand(command: string, tokens: string[]): boolean { + if (DESTRUCTIVE_COMMANDS.has(command)) { + return true; + } + + if (isGitDestructive(tokens)) { + return true; + } + + return false; +} + +function buildSuggestedPrefixRule(tokens: string[]): string[] { + if (tokens.length === 0) { + return []; + } + + const prefix: string[] = [normalizeToken(tokens[0])]; + if (tokens.length > 1) { + const second = normalizeToken(tokens[1]); + if ( + second.length > 0 && + !second.startsWith('-') && + !second.includes('://') && + !looksLikePathToken(second) + ) { + prefix.push(second); + } + } + + return prefix; +} + +function analyzeSegment( + rawSegment: string, + projectPath: string, + allowedMutationRoots: string[], + externalAllowedMutationRoots: string[] +): ShellSegmentAnalysis { + const tokenized = tokenizeSegment(rawSegment); + if (tokenized.parseFailed) { + return { + raw: rawSegment, + command: '', + tokens: [], + requiresApproval: true, + reasons: ['Failed to parse shell segment safely; explicit approval is required.'], + isDestructive: false, + blocked: false, + }; + } + + const tokens = tokenized.tokens; + if (tokens.length === 0) { + return { + raw: rawSegment, + command: '', + tokens: [], + requiresApproval: false, + reasons: [], + isDestructive: false, + blocked: false, + }; + } + + const command = normalizeToken(tokens[0]); + const reasons: string[] = []; + let blocked = false; + + if (BLOCKED_INTERACTIVE_OR_ELEVATED_COMMANDS.has(command)) { + blocked = true; + reasons.push('Interactive/elevated commands are blocked in the shell sandbox.'); + } + + const isNetwork = NETWORK_COMMANDS.has(command); + const isMutation = MUTATION_COMMANDS.has(command) + || isGitMutation(tokens) + || isPackageManagerMutation(tokens) + || isSedOrPerlInPlaceMutation(tokens) + || hasOutputRedirection(rawSegment); + const isDestructive = isDestructiveCommand(command, tokens); + const segmentPathTokens = extractSegmentPathTokens(command, tokens, rawSegment, isMutation); + const sensitivePaths = findSensitivePaths(projectPath, segmentPathTokens); + const writePathTokens = isMutation ? extractMutationWritePathTokens(command, tokens, rawSegment) : []; + const disallowedMutationPaths = isMutation + ? findDisallowedMutationPaths(projectPath, allowedMutationRoots, writePathTokens) + : []; + const resolvedMutationPaths = isMutation ? resolveMutationPaths(projectPath, writePathTokens) : []; + const writesOnlyToExternalAllowedRoots = resolvedMutationPaths.length > 0 + && resolvedMutationPaths.every((resolvedPath) => + !isPathWithin(projectPath, resolvedPath) + && ( + externalAllowedMutationRoots.some((allowedRoot) => isPathWithin(allowedRoot, resolvedPath)) + ) + ); + + if (sensitivePaths.length > 0) { + blocked = true; + reasons.push( + `Access to sensitive paths is blocked by shell sandbox policy. Sensitive path(s): ${sensitivePaths.join(', ')}.` + ); + } else if (disallowedMutationPaths.length > 0) { + blocked = true; + const outsideRoots = ALLOWED_EXTERNAL_MUTATION_ROOTS.join(', '); + reasons.push( + `Mutating paths outside allowed roots is blocked. Disallowed path(s): ${disallowedMutationPaths.join(', ')}. ` + + `Allowed roots: project root${outsideRoots ? `, ${outsideRoots}` : ''}.` + ); + } else if (isMutation && !writesOnlyToExternalAllowedRoots) { + reasons.push('Commands that may modify files or system state require approval.'); + } + if (!SAFE_READ_COMMANDS.has(command) && !isNetwork && !isMutation) { + reasons.push('Command is outside the read-only allowlist and requires approval.'); + } + + return { + raw: rawSegment, + command, + tokens, + requiresApproval: reasons.length > 0 || blocked, + reasons: dedupe(reasons), + isDestructive, + blocked, + }; +} + +export function normalizePrefixRule(rule: string[]): string[] { + return rule + .map((token) => normalizeToken(token)) + .filter((token) => token.length > 0); +} + +export function matchesPrefixRule(tokens: string[], rule: string[]): boolean { + const normalizedTokens = normalizePrefixRule(tokens); + const normalizedRule = normalizePrefixRule(rule); + if (normalizedRule.length === 0 || normalizedRule.length > normalizedTokens.length) { + return false; + } + + for (let i = 0; i < normalizedRule.length; i++) { + if (normalizedTokens[i] !== normalizedRule[i]) { + return false; + } + } + + return true; +} + +export function isAnalysisCoveredByRules(analysis: ShellCommandAnalysis, rules: string[][]): boolean { + if (analysis.blocked || analysis.isDestructive || analysis.isComplexSyntax) { + return false; + } + + const normalizedRules = rules.map((rule) => normalizePrefixRule(rule)).filter((rule) => rule.length > 0); + if (normalizedRules.length === 0) { + return false; + } + + const segmentsNeedingApproval = analysis.segments.filter((segment) => segment.requiresApproval && !segment.blocked); + if (segmentsNeedingApproval.length === 0) { + return false; + } + + return segmentsNeedingApproval.every((segment) => + normalizedRules.some((rule) => matchesPrefixRule(segment.tokens, rule)) + ); +} + +function analyzeGenericShellCommand( + command: string, + projectPath: string, + runInBackground: boolean +): ShellCommandAnalysis { + const trimmedCommand = command.trim(); + if (!trimmedCommand) { + return { + requiresApproval: false, + blocked: true, + reasons: ['Shell command cannot be empty.'], + suggestedPrefixRule: [], + isDestructive: false, + isComplexSyntax: false, + runInBackground, + segments: [], + }; + } + + const complexSyntax = detectComplexSyntax(trimmedCommand); + const splitSegments = splitTopLevelSegments(trimmedCommand); + const segmentsToAnalyze = splitSegments.parseFailed + ? [trimmedCommand] + : (splitSegments.segments.length > 0 ? splitSegments.segments : [trimmedCommand]); + + const resolvedProjectPath = resolvePathWithRealpath(projectPath); + const resolvedExternalMutationRoots = ALLOWED_EXTERNAL_MUTATION_ROOTS.map((mutationRoot) => + resolvePathWithRealpath(mutationRoot) + ); + const allowedMutationRoots = dedupe([ + resolvedProjectPath, + ...resolvedExternalMutationRoots, + ]); + + const analyzedSegments = segmentsToAnalyze.map((segment) => + analyzeSegment(segment, resolvedProjectPath, allowedMutationRoots, resolvedExternalMutationRoots) + ); + + const blocked = analyzedSegments.some((segment) => segment.blocked); + const isDestructive = analyzedSegments.some((segment) => segment.isDestructive); + const segmentReasons = analyzedSegments.flatMap((segment) => segment.reasons); + const reasons: string[] = [...segmentReasons]; + + let isComplexSyntax = complexSyntax.isComplex || splitSegments.parseFailed; + if (splitSegments.parseFailed) { + reasons.push('Failed to parse shell operators safely; explicit approval is required.'); + } + if (complexSyntax.reason) { + reasons.push(complexSyntax.reason); + } + + const requiresApproval = isComplexSyntax + || analyzedSegments.some((segment) => segment.requiresApproval); + + const preferredSegment = analyzedSegments.find((segment) => + segment.requiresApproval && !segment.blocked && !segment.isDestructive && segment.tokens.length > 0 + ); + const suggestedPrefixRule = preferredSegment ? buildSuggestedPrefixRule(preferredSegment.tokens) : []; + + return { + requiresApproval, + blocked, + reasons: dedupe(reasons), + suggestedPrefixRule, + isDestructive, + isComplexSyntax, + runInBackground, + segments: analyzedSegments, + analysisEngine: 'generic', + }; +} + +export function analyzeShellCommand( + command: string, + platform: NodeJS.Platform, + projectPath: string, + runInBackground: boolean +): ShellCommandAnalysis { + if (platform === 'win32') { + return analyzePowerShellCommand(command, projectPath, runInBackground); + } + return analyzeGenericShellCommand(command, projectPath, runInBackground); +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox_powershell.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox_powershell.ts new file mode 100644 index 00000000000..0abfcc3c983 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox_powershell.ts @@ -0,0 +1,848 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { parsePowerShellAst, PowerShellAstCommand, PowerShellAstResult } from './shell_sandbox_powershell_ast'; + +interface ShellSegmentAnalysisLike { + raw: string; + command: string; + tokens: string[]; + requiresApproval: boolean; + reasons: string[]; + isDestructive: boolean; + blocked: boolean; +} + +interface ShellCommandAnalysisLike { + requiresApproval: boolean; + blocked: boolean; + reasons: string[]; + suggestedPrefixRule: string[]; + isDestructive: boolean; + isComplexSyntax: boolean; + runInBackground: boolean; + segments: ShellSegmentAnalysisLike[]; + analysisEngine?: string; + classificationMetadata?: Record; +} + +interface PowerShellAnalyzerOptions { + parseAst?: (command: string) => PowerShellAstResult; +} + +interface ResolvedPathInfo { + rawToken: string; + resolvedPath?: string; + providerPrefix?: string; + unresolvedEnv: boolean; + isDriveRelative: boolean; + isRootRelative: boolean; +} + +const POWERSHELL_SAFE_READ_COMMANDS = new Set([ + 'cat', + 'dir', + 'get-childitem', + 'get-content', + 'get-item', + 'get-location', + 'get-process', + 'git', + 'ls', + 'measure-object', + 'pwd', + 'resolve-path', + 'select-string', + 'sort-object', + 'split-path', + 'test-path', + 'type', + 'whoami', +]); + +const POWERSHELL_NETWORK_COMMANDS = new Set([ + 'curl', + 'invoke-restmethod', + 'invoke-webrequest', + 'iwr', + 'irm', + 'nslookup', + 'ping', + 'scp', + 'sftp', + 'ssh', + 'telnet', + 'tracert', + 'traceroute', + 'wget', + 'test-netconnection', +]); + +const POWERSHELL_MUTATION_COMMANDS = new Set([ + 'add-content', + 'clear-content', + 'copy-item', + 'cp', + 'del', + 'erase', + 'export-clixml', + 'export-csv', + 'export-xml', + 'mkdir', + 'move-item', + 'mv', + 'new-item', + 'ni', + 'out-file', + 'remove-item', + 'rename-item', + 'rm', + 'rmdir', + 'set-content', + 'set-itemproperty', + 'tee-object', +]); + +const POWERSHELL_DESTRUCTIVE_COMMANDS = new Set([ + 'clear-content', + 'del', + 'erase', + 'remove-item', + 'remove-itemproperty', + 'rm', + 'rmdir', +]); + +const POWERSHELL_PROCESS_COMMANDS = new Set([ + 'invoke-command', + 'start-job', + 'start-process', +]); + +const POWERSHELL_SCHEDULED_TASK_COMMANDS = new Set([ + 'disable-scheduledtask', + 'enable-scheduledtask', + 'new-scheduledtask', + 'register-scheduledtask', + 'set-scheduledtask', + 'start-scheduledtask', + 'stop-scheduledtask', + 'unregister-scheduledtask', +]); + +const WRITE_PARAMETER_NAMES = new Set([ + 'destination', + 'filepath', + 'literalpath', + 'outfile', + 'path', + 'workingdirectory', +]); + +const PATH_PARAMETER_NAMES = new Set([ + ...Array.from(WRITE_PARAMETER_NAMES), + 'filter', + 'include', + 'exclude', + 'source', + 'target', +]); + +const NON_FILESYSTEM_PROVIDER_PREFIXES = new Set([ + 'cert', + 'env', + 'registry', + 'hklm', + 'hkcu', + 'hkcr', + 'hku', + 'hkcc', +]); + +const SENSITIVE_PATH_SEGMENTS = new Set([ + '.aws', + '.azure', + '.gnupg', + '.kube', + '.npm', + '.pypirc', + '.ssh', +]); + +const SENSITIVE_FILE_BASENAMES = new Set([ + '.bash_profile', + '.bashrc', + '.env', + '.git-credentials', + '.netrc', + '.npmrc', + '.profile', + '.zprofile', + '.zsh_history', + '.zshrc', + 'authorized_keys', + 'credentials', + 'id_dsa', + 'id_ecdsa', + 'id_ed25519', + 'id_rsa', + 'known_hosts', +]); + +function dedupe(values: string[]): string[] { + return Array.from(new Set(values)); +} + +function normalizeToken(value: string): string { + return value.trim().toLowerCase(); +} + +function stripWrappingQuotes(value: string): string { + const trimmed = value.trim(); + if (trimmed.length >= 2) { + if ((trimmed.startsWith('"') && trimmed.endsWith('"')) || (trimmed.startsWith('\'') && trimmed.endsWith('\''))) { + return trimmed.slice(1, -1); + } + } + return trimmed; +} + +function normalizeWindowsPathForComparison(inputPath: string): string { + let normalized = inputPath.trim().replace(/\//g, '\\'); + if (normalized.startsWith('\\\\')) { + normalized = `\\\\${normalized.slice(2).replace(/\\+/g, '\\')}`; + } else { + normalized = normalized.replace(/\\+/g, '\\'); + } + if (/^[A-Za-z]:/.test(normalized)) { + normalized = `${normalized[0].toLowerCase()}${normalized.slice(1)}`; + } + normalized = normalized.replace(/\\+$/, ''); + return normalized.length > 0 ? normalized : '\\'; +} + +function isPathWithinWindows(basePath: string, targetPath: string): boolean { + const normalizedBase = normalizeWindowsPathForComparison(basePath); + const normalizedTarget = normalizeWindowsPathForComparison(targetPath); + return normalizedTarget === normalizedBase || normalizedTarget.startsWith(`${normalizedBase}\\`); +} + +function resolveWindowsPathWithRealpath(inputPath: string): string { + const normalizedInput = normalizeWindowsPathForComparison(path.win32.resolve(inputPath)); + if (process.platform !== 'win32') { + return normalizedInput; + } + + const tryRealpath = (candidate: string): string | undefined => { + try { + return normalizeWindowsPathForComparison(fs.realpathSync.native(candidate)); + } catch { + try { + return normalizeWindowsPathForComparison(fs.realpathSync(candidate)); + } catch { + return undefined; + } + } + }; + + const directRealpath = tryRealpath(normalizedInput); + if (directRealpath) { + return directRealpath; + } + + const tailSegments: string[] = []; + let cursor = normalizedInput; + while (true) { + const parent = normalizeWindowsPathForComparison(path.win32.dirname(cursor)); + if (parent === cursor) { + break; + } + tailSegments.unshift(path.win32.basename(cursor)); + const parentRealpath = tryRealpath(parent); + if (parentRealpath) { + return normalizeWindowsPathForComparison(path.win32.join(parentRealpath, ...tailSegments)); + } + cursor = parent; + } + + return normalizedInput; +} + +function detectProviderPrefix(pathToken: string): string | undefined { + const normalizedToken = stripWrappingQuotes(pathToken); + if (!normalizedToken || normalizedToken.includes('://')) { + return undefined; + } + + const prefixMatch = /^([A-Za-z][A-Za-z0-9_.-]*):/.exec(normalizedToken); + if (!prefixMatch) { + return undefined; + } + + const prefix = normalizeToken(prefixMatch[1]); + if (prefix.length === 1) { + return undefined; + } + return prefix; +} + +function expandWindowsEnvVariables(pathToken: string): { expanded: string; unresolved: boolean } { + let unresolved = false; + const resolveVariable = (variableName: string): string | undefined => { + return process.env[variableName] + ?? process.env[variableName.toUpperCase()] + ?? process.env[variableName.toLowerCase()]; + }; + + let expanded = pathToken; + expanded = expanded.replace(/\$\{env:([A-Za-z_][A-Za-z0-9_]*)\}/gi, (fullMatch, variableName) => { + const value = resolveVariable(variableName); + if (value === undefined) { + unresolved = true; + return fullMatch; + } + return value; + }); + expanded = expanded.replace(/\$env:([A-Za-z_][A-Za-z0-9_]*)/gi, (fullMatch, variableName) => { + const value = resolveVariable(variableName); + if (value === undefined) { + unresolved = true; + return fullMatch; + } + return value; + }); + expanded = expanded.replace(/%([^%]+)%/g, (fullMatch, variableName) => { + const value = resolveVariable(variableName.trim()); + if (value === undefined) { + unresolved = true; + return fullMatch; + } + return value; + }); + + return { expanded, unresolved }; +} + +function looksLikePowerShellPathToken(pathToken: string): boolean { + const normalizedToken = stripWrappingQuotes(pathToken); + if (!normalizedToken) { + return false; + } + if (normalizedToken.includes('://')) { + return false; + } + if (detectProviderPrefix(normalizedToken)) { + return true; + } + if (/^[A-Za-z]:/.test(normalizedToken)) { + return true; + } + if (/^(~|\.{1,2}[\\/]|[\\/]{1,2})/.test(normalizedToken)) { + return true; + } + if (/\$env:|\$\{env:|%[^%]+%/i.test(normalizedToken)) { + return true; + } + return normalizedToken.includes('\\') || normalizedToken.includes('/'); +} + +function isSensitiveTokenName(pathToken: string): boolean { + const normalizedToken = normalizeToken(stripWrappingQuotes(pathToken)).replace(/\\/g, '/'); + if (!normalizedToken) { + return false; + } + + const basename = normalizeToken(path.posix.basename(normalizedToken)); + if (!basename) { + return false; + } + + if (basename === '.env' || basename.startsWith('.env.')) { + return true; + } + if (SENSITIVE_FILE_BASENAMES.has(basename)) { + return true; + } + if (/^id_(rsa|dsa|ecdsa|ed25519)(\.pub)?$/.test(basename)) { + return true; + } + if (normalizedToken.includes('/.aws/') || normalizedToken.endsWith('/.aws')) { + return true; + } + if (normalizedToken.includes('/.ssh/') || normalizedToken.endsWith('/.ssh')) { + return true; + } + if (/(^|\/)\.(bashrc|bash_profile|zshrc|zprofile|profile|env(\..+)?)$/i.test(normalizedToken)) { + return true; + } + return false; +} + +function resolvePowerShellPathToken(projectPath: string, pathToken: string): ResolvedPathInfo { + const strippedToken = stripWrappingQuotes(pathToken); + const providerPrefix = detectProviderPrefix(strippedToken); + if (providerPrefix) { + return { + rawToken: pathToken, + providerPrefix, + unresolvedEnv: false, + isDriveRelative: false, + isRootRelative: false, + }; + } + + const expanded = expandWindowsEnvVariables(strippedToken); + const expandedToken = stripWrappingQuotes(expanded.expanded); + const expandedProviderPrefix = detectProviderPrefix(expandedToken); + if (expandedProviderPrefix) { + return { + rawToken: pathToken, + providerPrefix: expandedProviderPrefix, + unresolvedEnv: expanded.unresolved, + isDriveRelative: false, + isRootRelative: false, + }; + } + + const isDriveRelative = /^[A-Za-z]:(?![\\/])/.test(expandedToken); + const isRootRelative = /^[\\/](?![\\/])/.test(expandedToken); + + if (isDriveRelative || isRootRelative) { + return { + rawToken: pathToken, + unresolvedEnv: expanded.unresolved, + isDriveRelative, + isRootRelative, + }; + } + + const windowsHomePath = process.env.USERPROFILE || process.env.HOME || os.homedir(); + let absolutePath = ''; + if (expandedToken.startsWith('~')) { + const homeRelative = expandedToken.slice(1).replace(/^[/\\]+/, ''); + absolutePath = path.win32.resolve(windowsHomePath, homeRelative); + } else if (/^\\\\/.test(expandedToken) || /^[A-Za-z]:[\\/]/.test(expandedToken)) { + absolutePath = path.win32.resolve(expandedToken); + } else { + absolutePath = path.win32.resolve(projectPath, expandedToken); + } + + return { + rawToken: pathToken, + resolvedPath: resolveWindowsPathWithRealpath(absolutePath), + unresolvedEnv: expanded.unresolved, + isDriveRelative: false, + isRootRelative: false, + }; +} + +function normalizePowerShellCommandName(commandName: string): string { + let normalizedName = stripWrappingQuotes(commandName); + if (!normalizedName) { + return ''; + } + normalizedName = normalizedName.replace(/^&\s*/, '').replace(/^\.\s*/, ''); + if (normalizedName.includes('\\') || normalizedName.includes('/')) { + normalizedName = path.win32.basename(normalizedName); + } + return normalizeToken(normalizedName); +} + +function buildPowerShellSuggestedPrefixRule(commands: PowerShellAstCommand[]): string[] { + if (commands.length === 0) { + return []; + } + const firstCommandName = normalizePowerShellCommandName(commands[0].name); + return firstCommandName.length > 0 ? [firstCommandName] : []; +} + +function extractPathTokens(commandNodes: PowerShellAstCommand[], redirectionTargets: string[]): { + allPathTokens: string[]; + mutationPathTokens: string[]; + unresolvedPathLikeTokens: string[]; +} { + const allPathTokens: string[] = []; + const mutationPathTokens: string[] = []; + const unresolvedPathLikeTokens: string[] = []; + + for (const commandNode of commandNodes) { + const commandName = normalizePowerShellCommandName(commandNode.name); + const isMutationCommand = POWERSHELL_MUTATION_COMMANDS.has(commandName) + || commandName.startsWith('export-'); + + for (const parameter of commandNode.parameters) { + const parameterName = normalizeToken(parameter.name || ''); + const argumentText = parameter.argumentText || ''; + if (!argumentText) { + continue; + } + + if (PATH_PARAMETER_NAMES.has(parameterName) || isSensitiveTokenName(argumentText)) { + allPathTokens.push(argumentText); + } + if (WRITE_PARAMETER_NAMES.has(parameterName)) { + mutationPathTokens.push(argumentText); + } + } + + for (const positionalArgument of commandNode.positionalArguments) { + if (looksLikePowerShellPathToken(positionalArgument) || isSensitiveTokenName(positionalArgument)) { + allPathTokens.push(positionalArgument); + if (isMutationCommand) { + mutationPathTokens.push(positionalArgument); + } + } else if (isMutationCommand) { + unresolvedPathLikeTokens.push(positionalArgument); + } + } + } + + allPathTokens.push(...redirectionTargets); + mutationPathTokens.push(...redirectionTargets); + + return { + allPathTokens: dedupe(allPathTokens), + mutationPathTokens: dedupe(mutationPathTokens), + unresolvedPathLikeTokens: dedupe(unresolvedPathLikeTokens), + }; +} + +function detectNetworkFromDotNet(command: string): boolean { + const dotNetNetworkPatterns = [ + /System\.Net\.Http\.HttpClient/i, + /System\.Net\.WebClient/i, + /System\.Net\.WebRequest/i, + /new-object\s+System\.Net\.(Http\.HttpClient|WebClient|WebRequest)/i, + /\[System\.Net\.Http\.HttpClient\]::new\(/i, + ]; + return dotNetNetworkPatterns.some((pattern) => pattern.test(command)); +} + +function detectScriptBlockCreateInvocation(command: string): boolean { + return /\[scriptblock\]\s*::\s*Create\s*\(/i.test(command); +} + +function buildSensitivePaths(resolvedPathInfos: ResolvedPathInfo[]): string[] { + const sensitivePaths: string[] = []; + for (const resolvedPathInfo of resolvedPathInfos) { + if (!resolvedPathInfo.resolvedPath) { + if (isSensitiveTokenName(resolvedPathInfo.rawToken)) { + sensitivePaths.push(resolvedPathInfo.rawToken); + } + continue; + } + + const normalized = normalizeWindowsPathForComparison(resolvedPathInfo.resolvedPath).replace(/\\/g, '/'); + const segments = normalized.split('/').filter((segment) => segment.length > 0); + const basename = segments.length > 0 ? normalizeToken(segments[segments.length - 1]) : ''; + + if ( + basename === '.env' + || basename.startsWith('.env.') + || SENSITIVE_FILE_BASENAMES.has(basename) + || segments.some((segment) => SENSITIVE_PATH_SEGMENTS.has(normalizeToken(segment))) + || isSensitiveTokenName(resolvedPathInfo.rawToken) + ) { + sensitivePaths.push(normalized); + } + } + return dedupe(sensitivePaths); +} + +function createSegment(command: string, commandNames: string[], reasons: string[], blocked: boolean, isDestructive: boolean): ShellSegmentAnalysisLike { + return { + raw: command, + command: commandNames[0] || '', + tokens: commandNames, + requiresApproval: reasons.length > 0 || blocked, + reasons: dedupe(reasons), + isDestructive, + blocked, + }; +} + +function buildSegmentTokens(commandNodes: PowerShellAstCommand[]): string[] { + if (commandNodes.length === 0) { + return []; + } + + const firstCommand = commandNodes[0]; + const firstCommandName = normalizePowerShellCommandName(firstCommand.name); + if (!firstCommandName) { + return []; + } + + const tokens: string[] = [firstCommandName]; + for (const argument of firstCommand.arguments) { + const normalizedArgument = normalizeToken(stripWrappingQuotes(argument)); + if ( + normalizedArgument.length > 0 + && !normalizedArgument.startsWith('-') + && !looksLikePowerShellPathToken(normalizedArgument) + && !normalizedArgument.includes('://') + ) { + tokens.push(normalizedArgument); + } + } + + return dedupe(tokens); +} + +function buildFailClosedAnalysis(command: string, runInBackground: boolean, reason: string, parserBinary?: string): ShellCommandAnalysisLike { + const reasons = [reason]; + return { + requiresApproval: true, + blocked: false, + reasons, + suggestedPrefixRule: [], + isDestructive: false, + isComplexSyntax: false, + runInBackground, + segments: [createSegment(command, [], reasons, false, false)], + analysisEngine: 'powershell_ast_fail_closed', + classificationMetadata: { + parserBinary, + failClosed: true, + }, + }; +} + +export function analyzePowerShellCommand( + command: string, + projectPath: string, + runInBackground: boolean, + options?: PowerShellAnalyzerOptions +): ShellCommandAnalysisLike { + const trimmedCommand = command.trim(); + if (!trimmedCommand) { + const reasons = ['Shell command cannot be empty.']; + return { + requiresApproval: false, + blocked: true, + reasons, + suggestedPrefixRule: [], + isDestructive: false, + isComplexSyntax: false, + runInBackground, + segments: [createSegment(command, [], reasons, true, false)], + analysisEngine: 'powershell_ast', + }; + } + + const parseAst = options?.parseAst ?? parsePowerShellAst; + const parseResult = parseAst(trimmedCommand); + if (parseResult.failureReason) { + return buildFailClosedAnalysis( + trimmedCommand, + runInBackground, + `PowerShell AST parser is unavailable; explicit approval is required (${parseResult.failureReason}).`, + parseResult.parserBinary + ); + } + + const commandNames = parseResult.commands + .map((commandNode) => normalizePowerShellCommandName(commandNode.name)) + .filter((commandName) => commandName.length > 0); + + const reasons: string[] = []; + let blocked = false; + + if (parseResult.parseFailed || parseResult.parseErrors.length > 0) { + reasons.push('PowerShell AST parse errors were detected; explicit approval is required.'); + } + + const hasInvokeExpression = commandNames.includes('invoke-expression') || commandNames.includes('iex'); + const hasEncodedCommand = parseResult.commands.some((commandNode) => + commandNode.parameters.some((parameter) => normalizeToken(parameter.name || '') === 'encodedcommand') + ) || /(^|\s)-EncodedCommand(\s|$)/i.test(trimmedCommand); + const hasStopParsingToken = parseResult.tokens.some((token) => token.text === '--%') || /(^|\s)--%(\s|$)/.test(trimmedCommand); + const hasScriptBlockCreate = detectScriptBlockCreateInvocation(trimmedCommand); + + if (hasInvokeExpression) { + blocked = true; + reasons.push('Escape hatch usage is blocked: Invoke-Expression.'); + } + if (hasEncodedCommand) { + blocked = true; + reasons.push('Escape hatch usage is blocked: -EncodedCommand.'); + } + if (hasScriptBlockCreate) { + blocked = true; + reasons.push('Escape hatch usage is blocked: [scriptblock]::Create(...) invocation pattern.'); + } + if (hasStopParsingToken) { + blocked = true; + reasons.push('Escape hatch usage is blocked: stop-parsing token (--%).'); + } + + const processCommands = commandNames.filter((commandName) => + POWERSHELL_PROCESS_COMMANDS.has(commandName) || POWERSHELL_SCHEDULED_TASK_COMMANDS.has(commandName) + ); + const invokeCommandAsJobDetected = parseResult.commands.some((commandNode) => + normalizePowerShellCommandName(commandNode.name) === 'invoke-command' + && commandNode.parameters.some((parameter) => normalizeToken(parameter.name || '') === 'asjob') + ); + if (invokeCommandAsJobDetected && !processCommands.includes('invoke-command')) { + processCommands.push('invoke-command'); + } + + const networkFromCommands = commandNames.some((commandName) => POWERSHELL_NETWORK_COMMANDS.has(commandName)); + const networkFromDotNet = detectNetworkFromDotNet(trimmedCommand); + const networkDetected = networkFromCommands || networkFromDotNet; + + const mutationFromCommands = commandNames.some((commandName) => + POWERSHELL_MUTATION_COMMANDS.has(commandName) || commandName.startsWith('export-') + ); + const mutationFromRedirection = parseResult.redirections.length > 0; + const isMutation = mutationFromCommands || mutationFromRedirection; + const isDestructive = commandNames.some((commandName) => POWERSHELL_DESTRUCTIVE_COMMANDS.has(commandName)); + + const redirectionTargets = parseResult.redirections + .map((redirectionNode) => redirectionNode.targetText || '') + .filter((targetText) => targetText.length > 0); + + const extractedPathTokens = extractPathTokens(parseResult.commands, redirectionTargets); + const resolvedPathInfos = extractedPathTokens.allPathTokens.map((pathToken) => + resolvePowerShellPathToken(projectPath, pathToken) + ); + const resolvedMutationPathInfos = extractedPathTokens.mutationPathTokens.map((pathToken) => + resolvePowerShellPathToken(projectPath, pathToken) + ); + + const providerPaths = resolvedPathInfos + .filter((pathInfo) => pathInfo.providerPrefix && NON_FILESYSTEM_PROVIDER_PREFIXES.has(pathInfo.providerPrefix)) + .map((pathInfo) => `${pathInfo.providerPrefix}:`); + if (providerPaths.length > 0) { + blocked = true; + reasons.push( + `Access to non-filesystem providers is blocked: ${dedupe(providerPaths).join(', ')}.` + ); + } + + const unresolvedEnvPathTokens = resolvedPathInfos + .filter((pathInfo) => pathInfo.unresolvedEnv) + .map((pathInfo) => pathInfo.rawToken); + if (unresolvedEnvPathTokens.length > 0) { + reasons.push( + `Path resolution requires approval because environment variables could not be resolved: ${dedupe(unresolvedEnvPathTokens).join(', ')}.` + ); + } + + const driveRelativePathTokens = resolvedPathInfos + .filter((pathInfo) => pathInfo.isDriveRelative || pathInfo.isRootRelative) + .map((pathInfo) => pathInfo.rawToken); + if (driveRelativePathTokens.length > 0) { + reasons.push( + `Drive-relative or root-relative Windows paths are ambiguous and require approval: ${dedupe(driveRelativePathTokens).join(', ')}.` + ); + } + + const sensitivePaths = buildSensitivePaths(resolvedPathInfos); + if (sensitivePaths.length > 0) { + blocked = true; + reasons.push(`Access to sensitive paths is blocked by shell sandbox policy. Sensitive path(s): ${sensitivePaths.join(', ')}.`); + } + + const normalizedProjectPath = normalizeWindowsPathForComparison(path.win32.resolve(projectPath)); + const normalizedExternalAllowedRoots = [ + normalizeWindowsPathForComparison(path.win32.resolve(os.tmpdir())), + ]; + const normalizedAllowedMutationRoots = dedupe([normalizedProjectPath, ...normalizedExternalAllowedRoots]); + + const disallowedMutationPaths = resolvedMutationPathInfos + .filter((pathInfo) => pathInfo.resolvedPath && !pathInfo.providerPrefix) + .map((pathInfo) => normalizeWindowsPathForComparison(pathInfo.resolvedPath!)) + .filter((resolvedPath) => + !normalizedAllowedMutationRoots.some((allowedRoot) => isPathWithinWindows(allowedRoot, resolvedPath)) + ); + + if (disallowedMutationPaths.length > 0) { + blocked = true; + reasons.push( + `Mutating paths outside allowed roots is blocked. Disallowed path(s): ${dedupe(disallowedMutationPaths).join(', ')}. ` + + `Allowed roots: project root, ${normalizedExternalAllowedRoots.join(', ')}.` + ); + } + + const resolvedMutationPaths = resolvedMutationPathInfos + .filter((pathInfo) => pathInfo.resolvedPath && !pathInfo.providerPrefix) + .map((pathInfo) => normalizeWindowsPathForComparison(pathInfo.resolvedPath!)); + const writesOnlyToExternalAllowedRoots = resolvedMutationPaths.length > 0 + && resolvedMutationPaths.every((resolvedPath) => + !isPathWithinWindows(normalizedProjectPath, resolvedPath) + && normalizedExternalAllowedRoots.some((allowedRoot) => isPathWithinWindows(allowedRoot, resolvedPath)) + ); + + if (isMutation && !blocked && !writesOnlyToExternalAllowedRoots) { + reasons.push('Commands that may modify files or system state require approval.'); + } + + if (isMutation && extractedPathTokens.unresolvedPathLikeTokens.length > 0) { + reasons.push( + `Potential mutation target paths are ambiguous and require approval: ${extractedPathTokens.unresolvedPathLikeTokens.join(', ')}.` + ); + } + + if (!networkDetected && !isMutation) { + if (commandNames.length === 0) { + reasons.push('Unable to classify PowerShell command intent; explicit approval is required.'); + } else { + const unsupportedReadCommands = commandNames.filter((commandName) => !POWERSHELL_SAFE_READ_COMMANDS.has(commandName)); + if (unsupportedReadCommands.length > 0) { + reasons.push( + `Command is outside the read-only allowlist and requires approval: ${dedupe(unsupportedReadCommands).join(', ')}.` + ); + } + } + } + + const suggestedPrefixRule = buildPowerShellSuggestedPrefixRule(parseResult.commands); + + const finalReasons = dedupe(reasons); + const segmentTokens = buildSegmentTokens(parseResult.commands); + const segment = createSegment(trimmedCommand, segmentTokens, finalReasons, blocked, isDestructive); + + return { + requiresApproval: finalReasons.length > 0 || blocked, + blocked, + reasons: finalReasons, + suggestedPrefixRule, + isDestructive, + isComplexSyntax: false, + runInBackground, + segments: [segment], + analysisEngine: 'powershell_ast', + classificationMetadata: { + parserBinary: parseResult.parserBinary, + parseErrorsCount: parseResult.parseErrors.length, + commandNames, + networkDetected, + processBackgroundDetected: processCommands.length > 0, + processCommands: dedupe(processCommands), + invokeCommandAsJobDetected, + mutationPathTokens: extractedPathTokens.mutationPathTokens, + resolvedMutationPaths: dedupe(resolvedMutationPaths), + redirectionCount: parseResult.redirections.length, + writesOnlyToExternalAllowedRoots, + runInBackground, + }, + }; +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox_powershell_ast.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox_powershell_ast.ts new file mode 100644 index 00000000000..01bd6c5d0b3 --- /dev/null +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/shell_sandbox_powershell_ast.ts @@ -0,0 +1,311 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as childProcess from 'child_process'; + +export interface PowerShellAstParameter { + name: string; + text: string; + argumentText?: string; +} + +export interface PowerShellAstCommand { + name: string; + text: string; + invocationOperator?: string; + parameters: PowerShellAstParameter[]; + arguments: string[]; + positionalArguments: string[]; +} + +export interface PowerShellAstRedirection { + text: string; + targetText?: string; + append?: boolean; + fromStream?: string; + toStream?: string; +} + +export interface PowerShellAstToken { + kind: string; + text: string; +} + +export interface PowerShellAstParseError { + message: string; + errorId?: string; + line?: number; + column?: number; + text?: string; +} + +export interface PowerShellAstResult { + parseFailed: boolean; + parserEngine: 'powershell_ast'; + parserBinary?: string; + timedOut: boolean; + failureReason?: string; + parseErrors: PowerShellAstParseError[]; + commands: PowerShellAstCommand[]; + redirections: PowerShellAstRedirection[]; + tokens: PowerShellAstToken[]; + invocationOperators: string[]; + elapsedMs: number; +} + +const PARSER_TIMEOUT_MS = 1500; +const PARSER_MAX_BUFFER = 1024 * 1024; +const PARSER_BINARIES = ['powershell.exe', 'pwsh']; + +const POWERSHELL_AST_SCRIPT = ` +$ErrorActionPreference = 'Stop' +$commandText = [Environment]::GetEnvironmentVariable('WSO2_MI_SHELL_COMMAND') +if ($null -eq $commandText) { $commandText = '' } + +$tokens = $null +$errors = $null +$ast = [System.Management.Automation.Language.Parser]::ParseInput($commandText, [ref]$tokens, [ref]$errors) + +$commands = @() +foreach ($commandAst in $ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.CommandAst] }, $true)) { + $elements = @($commandAst.CommandElements) + $commandName = '' + if ($elements.Count -gt 0) { + $commandName = [string]$elements[0].Extent.Text + } + + $parameters = @() + $arguments = @() + $positionalArguments = @() + for ($i = 0; $i -lt $elements.Count; $i++) { + $element = $elements[$i] + if ($element -is [System.Management.Automation.Language.CommandParameterAst]) { + $argText = $null + if ($element.Argument) { + $argText = [string]$element.Argument.Extent.Text + } + + $parameters += [ordered]@{ + name = [string]$element.ParameterName + text = [string]$element.Extent.Text + argumentText = $argText + } + } elseif ($i -gt 0) { + $arg = [string]$element.Extent.Text + $arguments += $arg + $positionalArguments += $arg + } + } + + $commands += [ordered]@{ + name = $commandName + text = [string]$commandAst.Extent.Text + invocationOperator = [string]$commandAst.InvocationOperator + parameters = $parameters + arguments = $arguments + positionalArguments = $positionalArguments + } +} + +$redirections = @() +foreach ($redirectionAst in $ast.FindAll({ param($node) $node -is [System.Management.Automation.Language.RedirectionAst] }, $true)) { + $targetText = $null + if ($redirectionAst.PSObject.Properties['Location'] -and $redirectionAst.Location) { + $targetText = [string]$redirectionAst.Location.Extent.Text + } elseif ($redirectionAst.PSObject.Properties['File'] -and $redirectionAst.File) { + $targetText = [string]$redirectionAst.File.Extent.Text + } + + $append = $false + if ($redirectionAst.PSObject.Properties['Append']) { + $append = [bool]$redirectionAst.Append + } + + $fromStream = $null + if ($redirectionAst.PSObject.Properties['FromStream']) { + $fromStream = [string]$redirectionAst.FromStream + } + + $toStream = $null + if ($redirectionAst.PSObject.Properties['ToStream']) { + $toStream = [string]$redirectionAst.ToStream + } + + $redirections += [ordered]@{ + text = [string]$redirectionAst.Extent.Text + targetText = $targetText + append = $append + fromStream = $fromStream + toStream = $toStream + } +} + +$tokenItems = @() +if ($tokens) { + foreach ($token in $tokens) { + $tokenItems += [ordered]@{ + kind = [string]$token.Kind + text = [string]$token.Text + } + } +} + +$errorItems = @() +if ($errors) { + foreach ($error in $errors) { + $line = $null + $column = $null + $extentText = $null + if ($error.Extent) { + $line = [int]$error.Extent.StartLineNumber + $column = [int]$error.Extent.StartColumnNumber + $extentText = [string]$error.Extent.Text + } + + $errorItems += [ordered]@{ + message = [string]$error.Message + errorId = [string]$error.ErrorId + line = $line + column = $column + text = $extentText + } + } +} + +$invocationOperators = @() +foreach ($parsedCommand in $commands) { + if ($parsedCommand.invocationOperator -and $parsedCommand.invocationOperator -ne 'None') { + $invocationOperators += [string]$parsedCommand.invocationOperator + } +} + +$result = [ordered]@{ + parseFailed = ($errorItems.Count -gt 0) + parserEngine = 'powershell_ast' + parseErrors = $errorItems + commands = $commands + redirections = $redirections + tokens = $tokenItems + invocationOperators = @($invocationOperators | Select-Object -Unique) +} + +$result | ConvertTo-Json -Depth 30 -Compress +`; + +function buildFailureResult(startTimeMs: number, options: { + reason: string; + parserBinary?: string; + timedOut?: boolean; +}): PowerShellAstResult { + return { + parseFailed: true, + parserEngine: 'powershell_ast', + parserBinary: options.parserBinary, + timedOut: options.timedOut === true, + failureReason: options.reason, + parseErrors: [], + commands: [], + redirections: [], + tokens: [], + invocationOperators: [], + elapsedMs: Date.now() - startTimeMs, + }; +} + +function normalizeParsedJson(startTimeMs: number, parserBinary: string, parsed: any): PowerShellAstResult { + return { + parseFailed: parsed?.parseFailed === true, + parserEngine: 'powershell_ast', + parserBinary, + timedOut: false, + parseErrors: Array.isArray(parsed?.parseErrors) ? parsed.parseErrors : [], + commands: Array.isArray(parsed?.commands) ? parsed.commands : [], + redirections: Array.isArray(parsed?.redirections) ? parsed.redirections : [], + tokens: Array.isArray(parsed?.tokens) ? parsed.tokens : [], + invocationOperators: Array.isArray(parsed?.invocationOperators) ? parsed.invocationOperators : [], + elapsedMs: Date.now() - startTimeMs, + }; +} + +function tryParseWithBinary(startTimeMs: number, parserBinary: string, command: string): PowerShellAstResult | undefined { + const parseResult = childProcess.spawnSync( + parserBinary, + ['-NoProfile', '-NonInteractive', '-Command', POWERSHELL_AST_SCRIPT], + { + env: { ...process.env, WSO2_MI_SHELL_COMMAND: command }, + encoding: 'utf8', + timeout: PARSER_TIMEOUT_MS, + maxBuffer: PARSER_MAX_BUFFER, + } + ); + + if (parseResult.error) { + const errorCode = (parseResult.error as NodeJS.ErrnoException).code; + if (errorCode === 'ENOENT') { + return undefined; + } + return buildFailureResult(startTimeMs, { + parserBinary, + reason: `PowerShell AST parser failed: ${parseResult.error.message}`, + timedOut: errorCode === 'ETIMEDOUT', + }); + } + + if ((parseResult.status ?? 1) !== 0) { + const stderrText = (parseResult.stderr || '').trim(); + return buildFailureResult(startTimeMs, { + parserBinary, + reason: stderrText.length > 0 + ? `PowerShell AST parser exited with non-zero status: ${stderrText}` + : 'PowerShell AST parser exited with non-zero status.', + }); + } + + const stdoutText = (parseResult.stdout || '').trim(); + if (stdoutText.length === 0) { + return buildFailureResult(startTimeMs, { + parserBinary, + reason: 'PowerShell AST parser returned an empty result.', + }); + } + + try { + const parsed = JSON.parse(stdoutText); + return normalizeParsedJson(startTimeMs, parserBinary, parsed); + } catch (error) { + return buildFailureResult(startTimeMs, { + parserBinary, + reason: `PowerShell AST parser returned invalid JSON: ${(error as Error).message}`, + }); + } +} + +export function parsePowerShellAst(command: string): PowerShellAstResult { + const startTimeMs = Date.now(); + + for (const parserBinary of PARSER_BINARIES) { + const result = tryParseWithBinary(startTimeMs, parserBinary, command); + if (result) { + return result; + } + } + + return buildFailureResult(startTimeMs, { + reason: 'PowerShell AST parser is unavailable in this environment.', + }); +} diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/subagent_tool.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/subagent_tool.ts index 0696fdad090..df85aa4d1b6 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/subagent_tool.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/subagent_tool.ts @@ -331,7 +331,7 @@ const subagentInputSchema = z.object({ ), run_in_background: z.boolean().optional().describe( `Set to true to run the subagent in the background. - Returns a task_id (subagentId). Use ${TASK_OUTPUT_TOOL_NAME} later to check results using that task_id, or ${KILL_TASK_TOOL_NAME} to terminate it.` + Returns a task_id (subagentId). Use ${TASK_OUTPUT_TOOL_NAME} to check results or ${KILL_TASK_TOOL_NAME} to terminate it (same task workflow used by background shell commands).` ), resume: z.string().optional().describe( 'Optional subagent ID to resume from (format: task-subagent-xxxxxxxx). If provided, the subagent will continue from its previous execution. Use this to continue a previously started exploration.' @@ -346,7 +346,7 @@ export function createSubagentTool(execute: SubagentToolExecuteFn) { description: `Spawn an Explore subagent for codebase exploration without filling your context window. The subagent uses grep/glob/file_read to search and understand code, then returns a summary. Supports background execution (run_in_background=true) and resuming previous subagents (resume=subagentId). - Use ${TASK_OUTPUT_TOOL_NAME} to check background subagent results and ${KILL_TASK_TOOL_NAME} to terminate a running one.`, + Background executions return task IDs compatible with ${TASK_OUTPUT_TOOL_NAME} and ${KILL_TASK_TOOL_NAME} (same pattern as background shell tasks).`, inputSchema: subagentInputSchema, execute }); diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/types.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/types.ts index 11f128ce6ee..de2bdf1d736 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/types.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/types.ts @@ -48,6 +48,14 @@ export interface ToolResult { validation?: ValidationDiagnostics; } +export interface FileEditHunk { + old_text: string; + new_text: string; + context_before?: string; + context_after?: string; + line_hint?: number; +} + // ============================================================================ // Constants // ============================================================================ @@ -179,9 +187,11 @@ export const ErrorMessages = { INVALID_FILE_PATH: 'Invalid file path', INVALID_EXTENSION: 'Invalid file extension', EMPTY_CONTENT: 'Content cannot be empty', - NO_MATCH_FOUND: 'No match found for old_string', - MULTIPLE_MATCHES: 'Multiple matches found - old_string must be unique', - IDENTICAL_STRINGS: 'old_string and new_string are identical', + INVALID_HUNK: 'Invalid hunk', + HUNK_NOT_FOUND: 'Hunk not found in target file', + HUNK_AMBIGUOUS: 'Hunk match is ambiguous', + HUNK_OVERLAP: 'Hunks overlap', + PATCH_APPLY_FAILED: 'Failed to apply patch', INVALID_LINE_RANGE: 'Invalid line range', INVALID_READ_OPTIONS: 'Invalid read options', EDIT_FAILED: 'Edit operation failed', @@ -206,9 +216,7 @@ export type ReadExecuteFn = (args: { export type EditExecuteFn = (args: { file_path: string; - old_string: string; - new_string: string; - replace_all?: boolean; + hunks: FileEditHunk[]; }) => Promise; export type GrepExecuteFn = (args: { @@ -340,6 +348,11 @@ export interface BashResult extends ToolResult { taskId?: string; } +export interface ShellApprovalRuleStore { + getRules: () => string[][]; + addRule: (rule: string[]) => Promise; +} + export type BashExecuteFn = (args: { command: string; description?: string; diff --git a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/web_tools.ts b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/web_tools.ts index eafdc3faa84..910b0978e4b 100644 --- a/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/web_tools.ts +++ b/workspaces/mi/mi-extension/src/ai-features/agent-mode/tools/web_tools.ts @@ -311,7 +311,7 @@ const webSearchSchema = z.object({ export function createWebSearchTool(execute: WebSearchExecuteFn) { return (tool as any)({ - description: 'Search the web for up-to-date information. Use when local project files are insufficient. To constrain to official MI docs, set allowed_domains to ["mi.docs.wso2.com"] (https://mi.docs.wso2.com/en/{version}/ or /en/latest/). Requires user consent before execution.', + description: 'Search the web for up-to-date information when local project context is insufficient. Supports domain allow/block filters. For MI docs, use allowed_domains=["mi.docs.wso2.com"]. Requires user consent before execution; if denied, continue without web access.', inputSchema: webSearchSchema, execute, }); @@ -326,7 +326,7 @@ const webFetchSchema = z.object({ export function createWebFetchTool(execute: WebFetchExecuteFn) { return (tool as any)({ - description: 'Fetch and analyze content from a specific URL. Note: web_fetch does not support JavaScript-rendered websites. MI docs (mi.docs.wso2.com) is JS-rendered, so prefer web_search constrained to allowed_domains=["mi.docs.wso2.com"] for MI docs research. Requires user consent before execution.', + description: 'Fetch and analyze content from a specific URL. Supports domain allow/block filters. web_fetch does not support JavaScript-rendered pages (including MI docs), so use web_search with allowed_domains=["mi.docs.wso2.com"] for MI docs. Requires user consent before execution; if denied, continue without web access.', inputSchema: webFetchSchema, execute, }); diff --git a/workspaces/mi/mi-extension/src/ai-features/aiMachine.ts b/workspaces/mi/mi-extension/src/ai-features/aiMachine.ts index 540c06fbd3a..992fdee1a8f 100644 --- a/workspaces/mi/mi-extension/src/ai-features/aiMachine.ts +++ b/workspaces/mi/mi-extension/src/ai-features/aiMachine.ts @@ -24,20 +24,59 @@ import { AiPanelWebview } from './webview'; import { extension } from '../MIExtensionContext'; import { getAuthCredentials, + getPlatformExtensionAPI, initiateInbuiltAuth, logout, validateApiKey, - isPlatformExtensionAvailable, isDevantUserLoggedIn, getPlatformStsToken, exchangeStsToCopilotToken, - storeAuthCredentials, - PLATFORM_EXTENSION_ID + storeAuthCredentials } from './auth'; import { PromptObject } from '@wso2/mi-core'; -import { IWso2PlatformExtensionAPI } from '@wso2/wso2-platform-core'; import { logError } from './copilot/logger'; +let silentPlatformBootstrapInFlight = false; + +const trySilentPlatformBootstrap = async (): Promise => { + if (silentPlatformBootstrapInFlight) { + return; + } + + // Only bootstrap when the machine is currently unauthenticated. + if (aiStateService.getSnapshot().value !== 'Unauthenticated') { + return; + } + + silentPlatformBootstrapInFlight = true; + try { + const isLoggedIn = await isDevantUserLoggedIn(); + if (!isLoggedIn) { + return; + } + + const stsToken = await getPlatformStsToken(); + if (!stsToken) { + return; + } + + const secrets = await exchangeStsToCopilotToken(stsToken); + await storeAuthCredentials({ + loginMethod: LoginMethod.MI_INTEL, + secrets + }); + + // Transition to authenticated only if state is still unauthenticated. + if (aiStateService.getSnapshot().value === 'Unauthenticated') { + aiStateService.send({ type: AI_EVENT_TYPE.SIGN_IN_SUCCESS }); + } + } catch (error) { + logError('Silent platform auth bootstrap failed', error); + } finally { + silentPlatformBootstrapInFlight = false; + } +}; + export const openAIWebview = (initialPrompt?: PromptObject) => { extension.initialPrompt = initialPrompt; if (!AiPanelWebview.currentPanel) { @@ -45,6 +84,9 @@ export const openAIWebview = (initialPrompt?: PromptObject) => { } else { AiPanelWebview.currentPanel!.getWebview()?.reveal(); } + + // If platform session is already active, silently bootstrap auth for the AI panel. + void trySilentPlatformBootstrap(); }; export const closeAIWebview = () => { @@ -150,6 +192,18 @@ const aiMachine = createMachine({ actions: assign({ loginMethod: (_ctx) => LoginMethod.ANTHROPIC_KEY }) + }, + [AI_EVENT_TYPE.COMPLETE_AUTH]: { + target: 'Authenticated', + actions: assign({ + errorMessage: (_ctx) => undefined, + }) + }, + [AI_EVENT_TYPE.SIGN_IN_SUCCESS]: { + target: 'Authenticated', + actions: assign({ + errorMessage: (_ctx) => undefined, + }) } } }, @@ -421,17 +475,16 @@ const openLogin = async () => { const isLoggedIn = await isDevantUserLoggedIn(); if (isLoggedIn) { const stsToken = await getPlatformStsToken(); - if (!stsToken) { - throw new Error('Failed to get STS token from platform extension'); + if (stsToken) { + const secrets = await exchangeStsToCopilotToken(stsToken); + await storeAuthCredentials({ + loginMethod: LoginMethod.MI_INTEL, + secrets + }); + aiStateService.send({ type: AI_EVENT_TYPE.COMPLETE_AUTH }); + return true; } - - const secrets = await exchangeStsToCopilotToken(stsToken); - await storeAuthCredentials({ - loginMethod: LoginMethod.MI_INTEL, - secrets - }); - aiStateService.send({ type: AI_EVENT_TYPE.COMPLETE_AUTH }); - return true; + // Platform state can race during session transitions; continue with interactive sign-in. } // Otherwise trigger platform login; completion is handled by the platform login listener. @@ -501,19 +554,14 @@ const isExtendedEvent = ( let platformLoginListenerSetup = false; const setupPlatformExtensionListener = async () => { - if (platformLoginListenerSetup || !isPlatformExtensionAvailable()) { + if (platformLoginListenerSetup) { return; } platformLoginListenerSetup = true; - const platformExt = vscode.extensions.getExtension(PLATFORM_EXTENSION_ID); - if (!platformExt) { - return; - } - try { - const api = await platformExt.activate() as IWso2PlatformExtensionAPI; - if (!api.subscribeIsLoggedIn) { + const api = await getPlatformExtensionAPI(); + if (!api || !api.subscribeIsLoggedIn) { return; } diff --git a/workspaces/mi/mi-extension/src/ai-features/auth.ts b/workspaces/mi/mi-extension/src/ai-features/auth.ts index 304fcccef41..a669ba030e8 100644 --- a/workspaces/mi/mi-extension/src/ai-features/auth.ts +++ b/workspaces/mi/mi-extension/src/ai-features/auth.ts @@ -37,6 +37,7 @@ import { CommandIds as PlatformExtCommandIds, IWso2PlatformExtensionAPI } from ' import { logInfo, logWarn, logError } from './copilot/logger'; export const TOKEN_NOT_AVAILABLE_ERROR_MESSAGE = 'Access token is not available.'; +export const STS_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE = 'Failed to get STS token from platform extension'; export const PLATFORM_EXTENSION_ID = 'wso2.wso2-platform'; export const TOKEN_REFRESH_ONLY_SUPPORTED_FOR_MI_INTEL = 'Token refresh is only supported for MI Intelligence authentication'; export const DEFAULT_ANTHROPIC_MODEL = 'claude-haiku-4-5'; @@ -49,6 +50,7 @@ const LEGACY_ACCESS_TOKEN_SECRET_KEY = 'MIAIUser'; const LEGACY_REFRESH_TOKEN_SECRET_KEY = 'MIAIRefreshToken'; const TOKEN_EXPIRY_BUFFER_MS = 5 * 60 * 1000; +const PLATFORM_USER_NOT_LOGGED_IN_MESSAGE = 'user not logged in'; interface MIIntelTokenSecrets { accessToken: string; @@ -86,6 +88,18 @@ export const getCopilotLlmApiBaseUrl = (): string | undefined => { return undefined; }; +/** + * Resolve usage API URL. + */ +export const getCopilotUsageApiUrl = (): string | undefined => { + const rootUrl = getCopilotRootUrl(); + if (rootUrl) { + return `${rootUrl}/llm-api/v1.0/usage`; + } + + return undefined; +}; + /** * Resolve token exchange URL. * Prefers COPILOT_ROOT_URL-derived endpoint and falls back to explicit env vars. @@ -116,14 +130,17 @@ export const isPlatformExtensionAvailable = (): boolean => { return !!vscode.extensions.getExtension(PLATFORM_EXTENSION_ID); }; -const getPlatformExtensionAPI = async (): Promise => { +export const getPlatformExtensionAPI = async (): Promise => { const platformExt = vscode.extensions.getExtension(PLATFORM_EXTENSION_ID); if (!platformExt) { return undefined; } try { - return await platformExt.activate() as IWso2PlatformExtensionAPI; + if (!platformExt.isActive) { + await platformExt.activate(); + } + return platformExt.exports as IWso2PlatformExtensionAPI; } catch (error) { logError('Failed to activate platform extension', error); return undefined; @@ -140,8 +157,15 @@ export const getPlatformStsToken = async (): Promise => { } try { + if (!api.isLoggedIn()) { + return undefined; + } return await api.getStsToken(); } catch (error) { + if (error instanceof Error && error.message.toLowerCase().includes(PLATFORM_USER_NOT_LOGGED_IN_MESSAGE)) { + // Expected when platform session is not active. + return undefined; + } logError('Error getting STS token from platform extension', error); return undefined; } @@ -208,12 +232,20 @@ export const exchangeStsToCopilotToken = async (stsToken: string): Promise => { const stsToken = await getPlatformStsToken(); if (!stsToken) { - throw new Error('Failed to get STS token from platform extension'); + throw new Error(STS_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE); } return await exchangeStsToCopilotToken(stsToken); }; +export const isStsTokenUnavailableError = (error: unknown): boolean => { + if (!(error instanceof Error)) { + return false; + } + + return error.message.includes(STS_TOKEN_NOT_AVAILABLE_ERROR_MESSAGE); +}; + // ================================== // Credential Storage (Core) // ================================== diff --git a/workspaces/mi/mi-extension/src/ai-features/connection.ts b/workspaces/mi/mi-extension/src/ai-features/connection.ts index 8d50a89f27d..f7139c4da4e 100644 --- a/workspaces/mi/mi-extension/src/ai-features/connection.ts +++ b/workspaces/mi/mi-extension/src/ai-features/connection.ts @@ -16,7 +16,13 @@ import { createAnthropic } from "@ai-sdk/anthropic"; import * as vscode from "vscode"; -import { getAccessToken, getCopilotLlmApiBaseUrl, getLoginMethod, getRefreshedAccessToken } from "./auth"; +import { + getAccessToken, + getCopilotLlmApiBaseUrl, + getLoginMethod, + getRefreshedAccessToken, + isStsTokenUnavailableError +} from "./auth"; import { StateMachineAI, openAIWebview } from "./aiMachine"; import { AI_EVENT_TYPE, LoginMethod } from "@wso2/mi-core"; import { logInfo, logDebug, logError } from "./copilot/logger"; @@ -182,6 +188,9 @@ export async function fetchWithAuth(input: string | URL | Request, options: Requ } catch (refreshError) { StateMachineAI.sendEvent(AI_EVENT_TYPE.SILENT_LOGOUT); promptReLogin(); + if (isStsTokenUnavailableError(refreshError)) { + throw new Error("Authentication failed: Please sign in again."); + } throw new Error(`Authentication failed: ${refreshError instanceof Error ? refreshError.message : 'Unable to refresh token'}`); } } else if (loginMethod === LoginMethod.ANTHROPIC_KEY) { @@ -195,6 +204,12 @@ export async function fetchWithAuth(input: string | URL | Request, options: Requ if (error?.message === "TOKEN_EXPIRED") { StateMachineAI.sendEvent(AI_EVENT_TYPE.SILENT_LOGOUT); throw new Error("Authentication failed: Token expired"); + } + + if (isStsTokenUnavailableError(error)) { + StateMachineAI.sendEvent(AI_EVENT_TYPE.SILENT_LOGOUT); + promptReLogin(); + throw new Error("Authentication failed: Please sign in again."); } else { throw error; } diff --git a/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-manager.ts index ee21e994b6f..b1068e02b41 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/agent-mode/rpc-manager.ts @@ -68,6 +68,7 @@ import { validateAttachments } from '../../ai-features/agent-mode/attachment-uti import { VALID_FILE_EXTENSIONS, VALID_SPECIAL_FILE_NAMES } from '../../ai-features/agent-mode/tools/types'; import { AgentUndoCheckpointManager, StoredUndoCheckpoint } from '../../ai-features/agent-mode/undo/checkpoint-manager'; import { MiDiagramRpcManager } from '../mi-diagram/rpc-manager'; +import { getCopilotSessionDir } from '../../ai-features/agent-mode/storage-paths'; const AUTO_COMPACT_TOKEN_THRESHOLD = 180000; const AUTO_COMPACT_TOOL_NAME = 'compact_conversation'; @@ -78,6 +79,8 @@ const MAX_MENTION_SEARCH_LIMIT = 100; const DEFAULT_MENTION_SEARCH_LIMIT = 30; const MENTION_MAX_CACHE_DEPTH = 8; const MENTION_MAX_CACHE_ITEMS = 5000; +const SHELL_APPROVAL_RULES_FILE_NAME = 'shell-approval-rules.json'; +const CONTINUATION_COMMAND_MAX_LENGTH = 120; const MENTION_ROOT_DIRS = ['deployment', 'src']; const MENTION_POM_FILE = 'pom.xml'; const MENTION_SKIP_DIRS = new Set([ @@ -93,6 +96,12 @@ const MENTION_SKIP_DIRS = new Set([ 'target', ]); +// Per extension-host lifetime, create one fresh startup session per project. +// This gives a new session after VSCode restart, but not when reopening only the AI panel. +const startupSessionInitializedProjects: Set = new Set(); + +type LimitContinuationReason = 'max_output_tokens' | 'max_tool_calls'; + export class MIAgentPanelRpcManager implements MIAgentPanelAPI { private eventHandler: AgentEventHandler; private currentAbortController: AbortController | null = null; @@ -111,6 +120,8 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { private mentionablePathCacheBuiltAt = 0; private undoCheckpointManager: AgentUndoCheckpointManager | null = null; private undoCheckpointManagerSessionId: string | null = null; + private shellApprovalRules: string[][] = []; + private pendingLimitContinuation: { reason: LimitContinuationReason } | null = null; constructor(private projectUri: string) { this.eventHandler = new AgentEventHandler(projectUri); @@ -153,6 +164,214 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { return this.pendingQuestions; } + private normalizeShellApprovalRule(rule: string[]): string[] { + return rule + .map((token) => token.trim().toLowerCase()) + .filter((token) => token.length > 0); + } + + private getShellApprovalRulesFilePath(sessionId: string): string { + return path.join(getCopilotSessionDir(this.projectUri, sessionId), SHELL_APPROVAL_RULES_FILE_NAME); + } + + private clearShellApprovalRules(): void { + this.shellApprovalRules = []; + } + + private getShellApprovalRulesSnapshot(): string[][] { + return this.shellApprovalRules.map((rule) => [...rule]); + } + + private async loadShellApprovalRulesForSession(sessionId: string): Promise { + this.clearShellApprovalRules(); + const rulesPath = this.getShellApprovalRulesFilePath(sessionId); + + try { + const content = await fs.readFile(rulesPath, 'utf8'); + const parsed = JSON.parse(content); + const rawRules = Array.isArray(parsed) + ? parsed + : (Array.isArray(parsed?.rules) ? parsed.rules : []); + + const dedupedRules = new Map(); + for (const rawRule of rawRules) { + if (!Array.isArray(rawRule)) { + continue; + } + const normalizedRule = this.normalizeShellApprovalRule(rawRule); + if (normalizedRule.length === 0) { + continue; + } + dedupedRules.set(normalizedRule.join('\u0000'), normalizedRule); + } + + this.shellApprovalRules = Array.from(dedupedRules.values()); + logInfo(`[AgentPanel] Loaded ${this.shellApprovalRules.length} shell approval rule(s) for session ${sessionId}`); + } catch (error) { + const nodeError = error as NodeJS.ErrnoException; + if (nodeError.code !== 'ENOENT') { + logError(`[AgentPanel] Failed to load shell approval rules for session ${sessionId}`, error); + } + this.clearShellApprovalRules(); + } + } + + private async persistShellApprovalRulesForSession(sessionId: string): Promise { + const rulesPath = this.getShellApprovalRulesFilePath(sessionId); + const payload = { + updatedAt: new Date().toISOString(), + rules: this.shellApprovalRules, + }; + + await fs.mkdir(path.dirname(rulesPath), { recursive: true }); + await fs.writeFile(rulesPath, JSON.stringify(payload, null, 2), 'utf8'); + } + + private async addShellApprovalRule(rule: string[]): Promise { + if (!this.currentSessionId) { + return; + } + + const normalizedRule = this.normalizeShellApprovalRule(rule); + if (normalizedRule.length === 0) { + return; + } + + const existingKeys = new Set(this.shellApprovalRules.map((currentRule) => currentRule.join('\u0000'))); + const ruleKey = normalizedRule.join('\u0000'); + if (existingKeys.has(ruleKey)) { + return; + } + + this.shellApprovalRules.push(normalizedRule); + await this.persistShellApprovalRulesForSession(this.currentSessionId); + logInfo(`[AgentPanel] Added shell approval rule for session ${this.currentSessionId}: ${normalizedRule.join(' ')}`); + } + + private async deleteShellApprovalRulesForSession(sessionId: string): Promise { + const rulesPath = this.getShellApprovalRulesFilePath(sessionId); + try { + await fs.unlink(rulesPath); + } catch (error) { + const nodeError = error as NodeJS.ErrnoException; + if (nodeError.code !== 'ENOENT') { + logError(`[AgentPanel] Failed to delete shell approval rules for session ${sessionId}`, error); + } + } + } + + private clearPendingLimitContinuation(): void { + this.pendingLimitContinuation = null; + } + + private setPendingLimitContinuation(reason: LimitContinuationReason): void { + this.pendingLimitContinuation = { reason }; + } + + private isContinuationIntent(message: string): boolean { + const normalized = message.trim().toLowerCase(); + if (!normalized || normalized.length > CONTINUATION_COMMAND_MAX_LENGTH) { + return false; + } + + if (normalized.includes('\n')) { + return false; + } + + const compact = normalized + .replace(/[`"']/g, '') + .replace(/[.!?]+$/g, '') + .replace(/\s+/g, ' ') + .trim(); + + const continuationPatterns = [ + /^continue$/, + /^continue please$/, + /^continue the task$/, + /^continue from (here|there|where you (left off|stopped))$/, + /^resume$/, + /^resume please$/, + /^resume the task$/, + /^go on$/, + /^go ahead$/, + /^proceed$/, + /^carry on$/, + /^keep going$/, + /^keep working$/, + ]; + + return continuationPatterns.some((pattern) => pattern.test(compact)); + } + + private buildContinuationReminder(reason: LimitContinuationReason): string { + const reasonText = reason === 'max_tool_calls' + ? 'the previous run reached the maximum step limit' + : 'the previous run reached the maximum token/output limit'; + + return [ + '', + `Continuation request detected: ${reasonText}.`, + 'Resume from the existing conversation state in this session.', + 'Do not repeat already completed tool calls, file edits, or long explanations.', + 'Start with a brief 1-2 sentence status update (done vs remaining), then continue with the remaining work.', + '', + ].join('\n'); + } + + private buildQueryWithContinuationReminder(message: string): string { + if (!this.pendingLimitContinuation) { + return message; + } + + const reminder = this.buildContinuationReminder(this.pendingLimitContinuation.reason); + return `${reminder}\n\n${message}`; + } + + private buildContinuationApprovalContent(reason: LimitContinuationReason): string { + const reasonText = reason === 'max_tool_calls' + ? 'maximum step limit' + : 'maximum token/output limit'; + + return [ + 'We noticed Copilot has been running for a while.', + 'Do you want to continue?', + '', + `It paused after reaching the ${reasonText}.`, + ].join('\n'); + } + + private async requestContinuationApproval( + reason: LimitContinuationReason + ): Promise<{ approved: boolean; feedback?: string; rememberForSession?: boolean; suggestedPrefixRule?: string[] }> { + const approvalId = `continuation-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`; + + this.eventHandler.handleEvent({ + type: 'plan_approval_requested', + approvalId, + approvalKind: 'continue_after_limit', + approvalTitle: 'Continue Agent Run?', + approveLabel: 'Continue', + rejectLabel: 'Stop', + allowFeedback: false, + content: this.buildContinuationApprovalContent(reason), + }); + + return new Promise((resolve, reject) => { + this.pendingApprovals.set(approvalId, { + approvalId, + approvalKind: 'continue_after_limit', + resolve: (result) => { + this.pendingApprovals.delete(approvalId); + resolve(result); + }, + reject: (error: Error) => { + this.pendingApprovals.delete(approvalId); + reject(error); + }, + }); + }); + } + /** * Detect context-window related model errors from AI SDK / provider messages. */ @@ -247,6 +466,7 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { await this.chatHistoryManager.initialize(); this.currentSessionId = this.chatHistoryManager.getSessionId(); this.currentMode = await this.chatHistoryManager.getLatestMode(DEFAULT_AGENT_MODE); + await this.loadShellApprovalRulesForSession(this.currentSessionId); await cleanupPersistedToolResultsForProject(this.projectUri); if (sessionId) { @@ -272,6 +492,8 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { this.chatHistoryManager = null; this.currentSessionId = null; this.currentMode = DEFAULT_AGENT_MODE; + this.clearShellApprovalRules(); + this.clearPendingLimitContinuation(); this.undoCheckpointManager = null; this.undoCheckpointManagerSessionId = null; } @@ -533,11 +755,25 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { await this.runAutoCompact(historyManager, 'threshold'); } + const hasPendingContinuation = this.pendingLimitContinuation !== null; + const shouldApplyContinuationReminder = hasPendingContinuation && + this.isContinuationIntent(request.message); + + if (hasPendingContinuation && !shouldApplyContinuationReminder) { + this.clearPendingLimitContinuation(); + } + + const effectiveQuery = shouldApplyContinuationReminder + ? this.buildQueryWithContinuationReminder(request.message) + : request.message; + + if (shouldApplyContinuationReminder) { + logInfo('[AgentPanel] Applying continuation reminder for resumed run'); + this.clearPendingLimitContinuation(); + } + await undoCheckpointManager.beginRun('agent'); - // Use these flags to recover from context-limit failures once per request. - let suppressedContextErrorFromStream = false; - let retriedAfterContextCompact = false; const persistModeChange = (mode: AgentMode) => { if (this.currentMode === mode) { return; @@ -548,81 +784,111 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { }); }; - const runAgentOnce = async () => { - const abortController = createAgentAbortController(); - this.activeAbortControllers.add(abortController); - this.currentAbortController = abortController; - - try { - return await executeAgent( - { - query: request.message, - chatId: request.chatId, - mode: effectiveMode, - files: request.files, - images: request.images, - thinking: request.thinking ?? true, - webAccessPreapproved: request.webAccessPreapproved, - projectPath: this.projectUri, - sessionId: this.currentSessionId || undefined, - abortSignal: abortController.signal, - chatHistoryManager: historyManager, - pendingQuestions: this.pendingQuestions, - pendingApprovals: this.pendingApprovals, - undoCheckpointManager, - }, - (event: AgentEvent) => { - if (event.type === 'plan_mode_entered') { - persistModeChange('plan'); - } else if (event.type === 'plan_mode_exited') { - persistModeChange('edit'); - } - - // When context is exceeded, suppress the immediate error event, - // compact, and retry once for seamless UX. - if (event.type === 'error' && this.isContextLimitError(event.error)) { - suppressedContextErrorFromStream = true; - logInfo('[AgentPanel] Suppressed context-limit error event; attempting compact-and-retry'); - return; + const executeRunWithContextRetry = async (query: string) => { + let suppressedContextErrorFromStream = false; + let retriedAfterContextCompact = false; + + const runAgentOnce = async () => { + const abortController = createAgentAbortController(); + this.activeAbortControllers.add(abortController); + this.currentAbortController = abortController; + + try { + return await executeAgent( + { + query, + chatId: request.chatId, + mode: effectiveMode, + files: request.files, + images: request.images, + thinking: request.thinking ?? true, + webAccessPreapproved: request.webAccessPreapproved, + projectPath: this.projectUri, + sessionId: this.currentSessionId || undefined, + abortSignal: abortController.signal, + chatHistoryManager: historyManager, + pendingQuestions: this.pendingQuestions, + pendingApprovals: this.pendingApprovals, + shellApprovalRuleStore: { + getRules: () => this.getShellApprovalRulesSnapshot(), + addRule: async (rule: string[]) => this.addShellApprovalRule(rule), + }, + undoCheckpointManager, + }, + (event: AgentEvent) => { + if (event.type === 'plan_mode_entered') { + persistModeChange('plan'); + } else if (event.type === 'plan_mode_exited') { + persistModeChange('edit'); + } + + // When context is exceeded, suppress the immediate error event, + // compact, and retry once for seamless UX. + if (event.type === 'error' && this.isContextLimitError(event.error)) { + suppressedContextErrorFromStream = true; + logInfo('[AgentPanel] Suppressed context-limit error event; attempting compact-and-retry'); + return; + } + this.eventHandler.handleEvent(event); } - this.eventHandler.handleEvent(event); + ); + } finally { + this.activeAbortControllers.delete(abortController); + if (this.currentAbortController === abortController) { + this.currentAbortController = null; } - ); - } finally { - this.activeAbortControllers.delete(abortController); - if (this.currentAbortController === abortController) { - this.currentAbortController = null; + } + }; + + let runResult = await runAgentOnce(); + + const hitContextLimit = () => + suppressedContextErrorFromStream || this.isContextLimitError(runResult.error); + + if (!runResult.success && hitContextLimit() && !retriedAfterContextCompact) { + retriedAfterContextCompact = true; + logInfo('[AgentPanel] Context limit reached mid-run. Triggering auto compact and retrying once'); + + const compacted = await this.runAutoCompact(historyManager, 'context_error'); + if (compacted) { + await undoCheckpointManager.discardPendingRun(); + await undoCheckpointManager.beginRun('agent'); + suppressedContextErrorFromStream = false; + runResult = await runAgentOnce(); } } - }; - let result = await runAgentOnce(); + // If context-limit error was suppressed but we still failed, surface it now. + if (!runResult.success && (suppressedContextErrorFromStream || this.isContextLimitError(runResult.error))) { + this.eventHandler.handleEvent({ + type: 'error', + error: runResult.error || 'Context window exceeded', + }); + } - const hitContextLimit = () => - suppressedContextErrorFromStream || this.isContextLimitError(result.error); + return runResult; + }; - if (!result.success && hitContextLimit() && !retriedAfterContextCompact) { - retriedAfterContextCompact = true; - logInfo('[AgentPanel] Context limit reached mid-run. Triggering auto compact and retrying once'); + let result = await executeRunWithContextRetry(effectiveQuery); - const compacted = await this.runAutoCompact(historyManager, 'context_error'); - if (compacted) { - await undoCheckpointManager.discardPendingRun(); - await undoCheckpointManager.beginRun('agent'); - suppressedContextErrorFromStream = false; - result = await runAgentOnce(); + while (result.success && result.continuationSuggested && result.continuationReason) { + this.setPendingLimitContinuation(result.continuationReason); + const approval = await this.requestContinuationApproval(result.continuationReason); + if (!approval.approved) { + logInfo('[AgentPanel] User denied automatic continuation after run limit'); + this.clearPendingLimitContinuation(); + break; } - } - // If context-limit error was suppressed but we still failed, surface it now. - if (!result.success && (suppressedContextErrorFromStream || this.isContextLimitError(result.error))) { - this.eventHandler.handleEvent({ - type: 'error', - error: result.error || 'Context window exceeded', - }); + const continuationQuery = this.buildQueryWithContinuationReminder('continue'); + logInfo('[AgentPanel] User approved automatic continuation after run limit'); + this.clearPendingLimitContinuation(); + result = await executeRunWithContextRetry(continuationQuery); } if (result.success) { + this.clearPendingLimitContinuation(); + const undoCheckpoint = await undoCheckpointManager.commitRun(); if (undoCheckpoint) { await historyManager.saveUndoCheckpoint(undoCheckpoint, request.chatId); @@ -636,6 +902,7 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { modelMessages: result.modelMessages }; } else { + this.clearPendingLimitContinuation(); await undoCheckpointManager.discardPendingRun(); logError(`[AgentPanel] Agent failed: ${result.error}`); return { @@ -648,6 +915,7 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { logError('[AgentPanel] Error executing agent', error); this.currentAbortController = null; this.activeAbortControllers.clear(); + this.clearPendingLimitContinuation(); if (this.undoCheckpointManager) { try { await this.undoCheckpointManager.discardPendingRun(); @@ -827,7 +1095,7 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { * This resolves the pending promise in the exit_plan_mode tool */ async respondToPlanApproval(response: PlanApprovalResponse): Promise { - const { approvalId, approved, feedback } = response; + const { approvalId, approved, feedback, rememberForSession, suggestedPrefixRule } = response; logInfo(`[AgentPanel] Received plan approval response: ${approvalId}, approved: ${approved}`); const pending = this.pendingApprovals.get(approvalId); @@ -839,7 +1107,7 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { } logDebug(`[AgentPanel] Resolving pending plan approval: ${approvalId}`); - pending.resolve({ approved, feedback }); + pending.resolve({ approved, feedback, rememberForSession, suggestedPrefixRule }); // Note: The pendingApprovals.delete is handled in the resolve callback } else { logError(`[AgentPanel] No pending plan approval found for ID: ${approvalId}`); @@ -851,6 +1119,16 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { */ async loadChatHistory(_request: LoadChatHistoryRequest): Promise { try { + if (!startupSessionInitializedProjects.has(this.projectUri)) { + logInfo('[AgentPanel] Creating startup fresh session for project'); + const freshSessionResult = await this.createNewSession({}); + if (freshSessionResult.success) { + startupSessionInitializedProjects.add(this.projectUri); + } else { + logError('[AgentPanel] Failed to create startup fresh session', freshSessionResult.error); + } + } + // Initialize chat history manager (finds latest session or creates new) const historyManager = await this.getChatHistoryManager(); @@ -960,6 +1238,7 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { this.chatHistoryManager = new ChatHistoryManager(this.projectUri, sessionId); await this.chatHistoryManager.initialize(); this.currentSessionId = sessionId; + await this.loadShellApprovalRulesForSession(sessionId); const { events, lastTotalInputTokens, mode } = await this.loadAndNormalizeSessionEvents(this.chatHistoryManager); this.currentMode = mode; logInfo(`[AgentPanel] Switched to session: ${sessionId}, loaded ${events.length} events`); @@ -997,6 +1276,7 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { await this.chatHistoryManager.initialize(); this.currentSessionId = this.chatHistoryManager.getSessionId(); this.currentMode = DEFAULT_AGENT_MODE; + await this.loadShellApprovalRulesForSession(this.currentSessionId); logInfo(`[AgentPanel] Created new session: ${this.currentSessionId}`); @@ -1033,6 +1313,7 @@ export class MIAgentPanelRpcManager implements MIAgentPanelAPI { // Delete the session await ChatHistoryManager.deleteSession(this.projectUri, sessionId); + await this.deleteShellApprovalRulesForSession(sessionId); logInfo(`[AgentPanel] Deleted session: ${sessionId}`); diff --git a/workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-manager.ts index 61855238950..41c935bf3c7 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/ai-features/rpc-manager.ts @@ -47,7 +47,7 @@ import { MiDiagramRpcManager } from "../mi-diagram/rpc-manager"; import { generateSuggestions as generateSuggestionsFromLLM } from "../../ai-features/copilot/suggestions/suggestions"; import { fillIdpSchema } from '../../ai-features/copilot/idp/fill_schema'; import { codeDiagnostics } from "../../ai-features/copilot/diagnostics/diagnostics"; -import { getCopilotLlmApiBaseUrl, getLoginMethod } from '../../ai-features/auth'; +import { getCopilotUsageApiUrl, getLoginMethod } from '../../ai-features/auth'; import { LoginMethod } from '@wso2/mi-core'; import { logInfo, logWarn, logError, logDebug } from '../../ai-features/copilot/logger'; import { MILanguageClient } from '../../lang-client/activator'; @@ -112,6 +112,144 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { return null; } + private toUsageValue(payload: unknown): { remainingUsagePercentage: number; resetsIn?: number } | undefined { + if (Array.isArray(payload)) { + for (const item of payload) { + const usage = this.toUsageValue(item); + if (usage) { + return usage; + } + } + return undefined; + } + + if (!payload || typeof payload !== 'object') { + return undefined; + } + + const record = payload as Record; + const remaining = record.remainingUsagePercentage; + const resetsIn = record.resetsIn; + + if (typeof remaining === 'number' && Number.isFinite(remaining)) { + return { + remainingUsagePercentage: remaining, + resetsIn: typeof resetsIn === 'number' && Number.isFinite(resetsIn) + ? resetsIn + : undefined + }; + } + + const nestedKeys = ['usage', 'data', 'result', 'payload']; + for (const key of nestedKeys) { + const nestedUsage = this.toUsageValue(record[key]); + if (nestedUsage) { + return nestedUsage; + } + } + + return undefined; + } + + private parseUsageFromResponseBody(responseBody: string): { remainingUsagePercentage: number; resetsIn?: number } | undefined { + const trimmedBody = responseBody.trim(); + if (!trimmedBody) { + return undefined; + } + + // 1) Try plain JSON first. + try { + const parsed = JSON.parse(trimmedBody); + const usage = this.toUsageValue(parsed); + if (usage) { + return usage; + } + } catch { + // Not plain JSON; continue with line-based parsing. + } + + // 2) Handle SSE / NDJSON style payloads (e.g. "data: {...}"). + const lines = trimmedBody.split(/\r?\n/); + for (const rawLine of lines) { + const line = rawLine.trim(); + if (!line || line.startsWith(':')) { + continue; + } + + const candidate = line.startsWith('data:') ? line.slice(5).trim() : line; + if (!candidate || candidate === '[DONE]') { + continue; + } + + try { + const parsed = JSON.parse(candidate); + const usage = this.toUsageValue(parsed); + if (usage) { + return usage; + } + } catch { + // Ignore malformed line and continue. + } + } + + return undefined; + } + + private async readUsageResponseBody(response: Response, readTimeoutMs: number = 1500): Promise { + if (!response.body) { + return response.text(); + } + + const reader = response.body.getReader(); + const decoder = new TextDecoder(); + const timeoutMarker = Symbol('usage-read-timeout'); + let responseBody = ''; + + try { + while (responseBody.length < 32768) { + const readResult = await Promise.race([ + reader.read(), + new Promise((resolve) => { + setTimeout(() => resolve(timeoutMarker), readTimeoutMs); + }) + ]); + + if (readResult === timeoutMarker) { + break; + } + + if (readResult.done) { + responseBody += decoder.decode(); + break; + } + + responseBody += decoder.decode(readResult.value, { stream: true }); + + // For event streams / chunked responses, stop early once usage payload is parseable. + if (this.parseUsageFromResponseBody(responseBody)) { + responseBody += decoder.decode(); + break; + } + } + } finally { + try { + await reader.cancel(); + } catch { + // Ignore reader cancellation errors. + } + } + + return responseBody; + } + + private getUsageBodyPreview(responseBody: string, maxLength: number = 200): string { + const normalized = responseBody.replace(/\s+/g, ' ').trim(); + if (normalized.length <= maxLength) { + return normalized; + } + return `${normalized.slice(0, maxLength)}...`; + } + async generateSuggestions(request: GenerateSuggestionsRequest): Promise { try { let context: string[] = []; @@ -503,54 +641,54 @@ export class MIAIPanelRpcManager implements MIAIPanelAPI { const { StateMachineAI } = await import('../../ai-features/aiMachine'); const { AI_EVENT_TYPE } = await import('@wso2/mi-core'); - const backendUrl = getCopilotLlmApiBaseUrl(); - if (!backendUrl) { - logWarn('Copilot LLM API URL is not configured; skipping usage fetch.'); + const usageUrl = getCopilotUsageApiUrl(); + if (!usageUrl) { + logWarn('Copilot usage API URL is not configured; skipping usage fetch.'); return undefined; } - const USER_CHECK_BACKEND_URL = '/usage'; - const response = await fetchWithAuth(`${backendUrl}${USER_CHECK_BACKEND_URL}`); - if (response.ok) { - const usageResponse = await response.json(); - const remainingUsagePercentage = typeof usageResponse?.remainingUsagePercentage === 'number' - ? usageResponse.remainingUsagePercentage - : undefined; - const resetsIn = typeof usageResponse?.resetsIn === 'number' - ? usageResponse.resetsIn - : undefined; - if (remainingUsagePercentage === undefined) { - logWarn('Usage response missing remainingUsagePercentage; skipping usage update.'); - return undefined; - } - const usage = { remainingUsagePercentage, resetsIn }; + const response = await fetchWithAuth(usageUrl); + const contentType = response.headers.get('content-type') || 'unknown'; + const responseBody = await this.readUsageResponseBody(response); - // Get current state before updating - const currentState = StateMachineAI.state(); + if (!response.ok) { + const failureSummary = `status ${response.status} (${contentType}). Body preview: ${this.getUsageBodyPreview(responseBody)}`; + logWarn(`Usage fetch failed with ${failureSummary}`); + return undefined; + } - // Update usage via state machine event (proper XState pattern) - if (currentState === 'Authenticated' || currentState === 'UsageExceeded') { - StateMachineAI.sendEvent({ type: AI_EVENT_TYPE.UPDATE_USAGE, payload: { usage } }); - } + const usage = this.parseUsageFromResponseBody(responseBody); + if (!usage) { + logWarn(`Unable to parse usage response (${contentType}). Body preview: ${this.getUsageBodyPreview(responseBody)}`); + return undefined; + } - // Check if quota is exceeded and transition to UsageExceeded state - const isUsageExceeded = usage.remainingUsagePercentage <= 0; + // Get current state before updating + const currentState = StateMachineAI.state(); - if (isUsageExceeded && currentState === 'Authenticated') { - logInfo('Quota exceeded. Transitioning to UsageExceeded state.'); - StateMachineAI.sendEvent(AI_EVENT_TYPE.USAGE_EXCEEDED); - } + // Update usage via state machine event (proper XState pattern) + if (currentState === 'Authenticated' || currentState === 'UsageExceeded') { + StateMachineAI.sendEvent({ type: AI_EVENT_TYPE.UPDATE_USAGE, payload: { usage } }); + } - // Check if we're in UsageExceeded state and if usage has reset - const isUsageReset = usage.remainingUsagePercentage > 0; + // Check if quota is exceeded and transition to UsageExceeded state + const isUnlimitedUsage = usage.remainingUsagePercentage === -1; + const isUsageExceeded = !isUnlimitedUsage && usage.remainingUsagePercentage <= 0; - if (currentState === 'UsageExceeded' && isUsageReset) { - logInfo('Usage has reset. Transitioning back to Authenticated state.'); - StateMachineAI.sendEvent(AI_EVENT_TYPE.USAGE_RESET); - } + if (isUsageExceeded && currentState === 'Authenticated') { + logInfo('Quota exceeded. Transitioning to UsageExceeded state.'); + StateMachineAI.sendEvent(AI_EVENT_TYPE.USAGE_EXCEEDED); + } - return usage; + // Check if we're in UsageExceeded state and if usage has reset + const isUsageReset = isUnlimitedUsage || usage.remainingUsagePercentage > 0; + + if (currentState === 'UsageExceeded' && isUsageReset) { + logInfo('Usage has reset. Transitioning back to Authenticated state.'); + StateMachineAI.sendEvent(AI_EVENT_TYPE.USAGE_RESET); } + + return usage; } catch (error) { logError('Failed to fetch usage', error); } diff --git a/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts b/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts index 5aa18c88621..582ec221ed9 100644 --- a/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts +++ b/workspaces/mi/mi-extension/src/rpc-managers/mi-diagram/rpc-manager.ts @@ -305,7 +305,7 @@ import { Transform } from 'stream'; import * as tmp from 'tmp'; import { v4 as uuidv4 } from 'uuid'; import * as vscode from 'vscode'; -import { Position, Range, Selection, TextEdit, Uri, ViewColumn, WorkspaceEdit, commands, extensions, window, workspace } from "vscode"; +import { Position, Range, Selection, TextEdit, Uri, ViewColumn, WorkspaceEdit, commands, window, workspace } from "vscode"; import { parse, stringify } from "yaml"; import { DiagramService, APIResource, NamedSequence, UnitTest, Proxy } from "../../../../syntax-tree/lib/src"; import { extension } from '../../MIExtensionContext'; @@ -313,6 +313,7 @@ import { RPCLayer } from "../../RPCLayer"; import { StateMachineAI } from '../../ai-features/aiMachine'; import { getAccessToken as getCopilotAccessToken, + getPlatformExtensionAPI, getCopilotLlmApiBaseUrl, getLoginMethod as getCopilotLoginMethod, getRefreshedAccessToken as refreshCopilotAccessToken, @@ -344,7 +345,7 @@ import { compareVersions, filterConnectorVersion, generateInitialDependencies, g import { Range as STRange } from '@wso2/mi-syntax-tree/lib/src'; import { checkForDevantExt } from "../../extension"; import { getAPIMetadata } from "../../util/template-engine/mustach-templates/API"; -import { DevantScopes, IWso2PlatformExtensionAPI } from "@wso2/wso2-platform-core"; +import { DevantScopes } from "@wso2/wso2-platform-core"; import { ICreateComponentCmdParams, CommandIds as PlatformExtCommandIds } from "@wso2/wso2-platform-core"; import { MiVisualizerRpcManager } from "../mi-visualizer/rpc-manager"; import { DebuggerConfig } from "../../debugger/config"; @@ -4921,11 +4922,10 @@ ${keyValuesXML}`; } } - const platformExt = extensions.getExtension("wso2.wso2-platform"); - if (!platformExt) { + const platformExtAPI = await getPlatformExtensionAPI(); + if (!platformExtAPI) { return { hasComponent: hasContextYaml, isLoggedIn: false }; } - const platformExtAPI: IWso2PlatformExtensionAPI = await platformExt.activate(); hasLocalChanges = await platformExtAPI.localRepoHasChanges(this.projectUri); isLoggedIn = platformExtAPI.isLoggedIn(); if (isLoggedIn) { diff --git a/workspaces/mi/mi-extension/src/test/suite/file-edit.patch.test.ts b/workspaces/mi/mi-extension/src/test/suite/file-edit.patch.test.ts new file mode 100644 index 00000000000..abefaa3225e --- /dev/null +++ b/workspaces/mi/mi-extension/src/test/suite/file-edit.patch.test.ts @@ -0,0 +1,163 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as assert from 'assert'; +import { applyStructuredFilePatch } from '../../ai-features/agent-mode/tools/file_edit_patch'; + +suite('File Edit Patch Tests', () => { + test('unique hunk replacement applies successfully', () => { + const result = applyStructuredFilePatch('a\nb\nc', [ + { old_text: 'b', new_text: 'B' }, + ]); + + assert.strictEqual(result.success, true); + if (result.success) { + assert.strictEqual(result.newContent, 'a\nB\nc'); + assert.strictEqual(result.appliedHunks, 1); + } + }); + + test('multiple hunks apply in one file', () => { + const result = applyStructuredFilePatch('a\nb\nc\nd', [ + { old_text: 'a', new_text: 'A' }, + { old_text: 'd', new_text: 'D' }, + ]); + + assert.strictEqual(result.success, true); + if (result.success) { + assert.strictEqual(result.newContent, 'A\nb\nc\nD'); + assert.strictEqual(result.appliedHunks, 2); + } + }); + + test('trailing whitespace differences do not break matching', () => { + const result = applyStructuredFilePatch('key = value \nnext', [ + { old_text: 'key = value', new_text: 'key = changed' }, + ]); + + assert.strictEqual(result.success, true); + if (result.success) { + assert.strictEqual(result.newContent, 'key = changed\nnext'); + } + }); + + test('CRLF content preserves CRLF output', () => { + const result = applyStructuredFilePatch('a\r\nb\r\nc', [ + { old_text: 'b\nc', new_text: 'B\nC' }, + ]); + + assert.strictEqual(result.success, true); + if (result.success) { + assert.strictEqual(result.newContent, 'a\r\nB\r\nC'); + assert.ok(result.newContent.includes('\r\n')); + } + }); + + test('repeated match without context is ambiguous', () => { + const result = applyStructuredFilePatch('x\nneedle\nx\nneedle\nx', [ + { old_text: 'needle', new_text: 'N' }, + ]); + + assert.strictEqual(result.success, false); + if (!result.success) { + assert.strictEqual(result.code, 'HUNK_AMBIGUOUS'); + } + }); + + test('repeated match with context resolves uniquely', () => { + const content = 'first\nneedle\nafter-first\nsecond\nneedle\nafter-second'; + const result = applyStructuredFilePatch(content, [ + { + old_text: 'needle', + new_text: 'NEEDLE', + context_before: 'second', + context_after: 'after-second', + }, + ]); + + assert.strictEqual(result.success, true); + if (result.success) { + assert.strictEqual(result.newContent, 'first\nneedle\nafter-first\nsecond\nNEEDLE\nafter-second'); + } + }); + + test('line_hint disambiguates nearest match', () => { + const content = 'alpha\nneedle\nbeta\nneedle\ngamma'; + const result = applyStructuredFilePatch(content, [ + { + old_text: 'needle', + new_text: 'NEEDLE', + line_hint: 4, + }, + ]); + + assert.strictEqual(result.success, true); + if (result.success) { + assert.strictEqual(result.newContent, 'alpha\nneedle\nbeta\nNEEDLE\ngamma'); + } + }); + + test('missing target returns not found', () => { + const result = applyStructuredFilePatch('a\nb\nc', [ + { old_text: 'missing', new_text: 'x' }, + ]); + + assert.strictEqual(result.success, false); + if (!result.success) { + assert.strictEqual(result.code, 'HUNK_NOT_FOUND'); + } + }); + + test('overlapping hunks are rejected', () => { + const result = applyStructuredFilePatch('a\nb\nc\nd', [ + { old_text: 'b\nc', new_text: 'B\nC' }, + { old_text: 'c\nd', new_text: 'C\nD' }, + ]); + + assert.strictEqual(result.success, false); + if (!result.success) { + assert.strictEqual(result.code, 'HUNK_OVERLAP'); + } + }); + + test('failed multi-hunk patch is atomic in-memory', () => { + const original = 'a\nb\nc'; + const result = applyStructuredFilePatch(original, [ + { old_text: 'a', new_text: 'A' }, + { old_text: 'missing', new_text: 'X' }, + ]); + + assert.strictEqual(result.success, false); + if (!result.success) { + assert.strictEqual(result.code, 'HUNK_NOT_FOUND'); + assert.strictEqual((result as any).newContent, undefined); + } + assert.strictEqual(original, 'a\nb\nc'); + }); + + test('invalid hunk with empty old_text is rejected', () => { + const result = applyStructuredFilePatch('a\nb\nc', [ + { old_text: '', new_text: 'x' }, + ]); + + assert.strictEqual(result.success, false); + if (!result.success) { + assert.strictEqual(result.code, 'INVALID_HUNK'); + } + }); +}); diff --git a/workspaces/mi/mi-extension/src/test/suite/shell-sandbox.powershell.test.ts b/workspaces/mi/mi-extension/src/test/suite/shell-sandbox.powershell.test.ts new file mode 100644 index 00000000000..ed8e1b98a51 --- /dev/null +++ b/workspaces/mi/mi-extension/src/test/suite/shell-sandbox.powershell.test.ts @@ -0,0 +1,160 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as assert from 'assert'; +import { analyzeShellCommand } from '../../ai-features/agent-mode/tools/shell_sandbox'; +import { analyzePowerShellCommand } from '../../ai-features/agent-mode/tools/shell_sandbox_powershell'; + +const WINDOWS_PROJECT_PATH = 'C:\\mi-shell-sandbox-project'; + +suite('Shell Sandbox PowerShell Tests', () => { + test('win32 dispatch uses powershell analyzer path', () => { + const analysis = analyzeShellCommand('Get-ChildItem', 'win32', WINDOWS_PROJECT_PATH, false); + assert.ok( + analysis.analysisEngine === 'powershell_ast' || analysis.analysisEngine === 'powershell_ast_fail_closed' + ); + }); + + test('powershell analyzer fail-closed when parser fails', () => { + const analysis = analyzePowerShellCommand('Get-ChildItem', WINDOWS_PROJECT_PATH, false, { + parseAst: () => ({ + parseFailed: true, + parserEngine: 'powershell_ast', + parserBinary: 'powershell.exe', + timedOut: true, + failureReason: 'simulated timeout', + parseErrors: [], + commands: [], + redirections: [], + tokens: [], + invocationOperators: [], + elapsedMs: 1, + }), + }); + + assert.strictEqual(analysis.analysisEngine, 'powershell_ast_fail_closed'); + assert.strictEqual(analysis.requiresApproval, true); + assert.strictEqual(analysis.blocked, false); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('explicit approval'))); + }); + + test('powershell write target extraction blocks outside project paths', function () { + if (process.platform !== 'win32') { + this.skip(); + return; + } + + const analysis = analyzeShellCommand( + 'Set-Content -Path "C:\\Windows\\Temp\\blocked-by-policy.txt" -Value "hello"', + 'win32', + WINDOWS_PROJECT_PATH, + false + ); + + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('outside allowed roots'))); + }); + + test('powershell redirection target extraction blocks outside project paths', function () { + if (process.platform !== 'win32') { + this.skip(); + return; + } + + const analysis = analyzeShellCommand( + '"hello" *> "C:\\Windows\\Temp\\redirect-blocked.txt"', + 'win32', + WINDOWS_PROJECT_PATH, + false + ); + + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('outside allowed roots'))); + }); + + test('powershell escape hatches are hard-blocked', function () { + if (process.platform !== 'win32') { + this.skip(); + return; + } + + const analysis = analyzeShellCommand( + 'Invoke-Expression "Get-ChildItem"', + 'win32', + WINDOWS_PROJECT_PATH, + false + ); + + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('escape hatch'))); + }); + + test('powershell non-filesystem providers are hard-blocked', function () { + if (process.platform !== 'win32') { + this.skip(); + return; + } + + const analysis = analyzeShellCommand( + 'Get-Item Env:PATH', + 'win32', + WINDOWS_PROJECT_PATH, + false + ); + + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('non-filesystem providers'))); + }); + + test('powershell drive-relative paths require approval', function () { + if (process.platform !== 'win32') { + this.skip(); + return; + } + + const analysis = analyzeShellCommand( + 'Set-Content -Path C:temp.txt -Value "hello"', + 'win32', + WINDOWS_PROJECT_PATH, + false + ); + + assert.strictEqual(analysis.blocked, false); + assert.strictEqual(analysis.requiresApproval, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('drive-relative'))); + }); + + test('powershell .NET HTTP usage is classified as network-capable', function () { + if (process.platform !== 'win32') { + this.skip(); + return; + } + + const analysis = analyzeShellCommand( + '$client = [System.Net.Http.HttpClient]::new()', + 'win32', + WINDOWS_PROJECT_PATH, + false + ); + + assert.strictEqual(analysis.blocked, false); + assert.strictEqual(analysis.requiresApproval, false); + assert.strictEqual(analysis.analysisEngine, 'powershell_ast'); + assert.strictEqual(analysis.classificationMetadata?.networkDetected, true); + }); +}); diff --git a/workspaces/mi/mi-extension/src/test/suite/shell-sandbox.test.ts b/workspaces/mi/mi-extension/src/test/suite/shell-sandbox.test.ts new file mode 100644 index 00000000000..142e7161c62 --- /dev/null +++ b/workspaces/mi/mi-extension/src/test/suite/shell-sandbox.test.ts @@ -0,0 +1,187 @@ +/** + * Copyright (c) 2026, WSO2 LLC. (https://www.wso2.com/) All Rights Reserved. + * + * WSO2 LLC. licenses this file to you under the Apache License, + * Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import * as assert from 'assert'; +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { + analyzeShellCommand, + buildShellCommandDeniedResult, + buildShellSandboxBlockedResult, + isAnalysisCoveredByRules, +} from '../../ai-features/agent-mode/tools/shell_sandbox'; + +const PROJECT_PATH = path.resolve('/tmp/mi-shell-sandbox-project'); + +suite('Shell Sandbox Tests', () => { + test('safe read command does not require approval', () => { + const analysis = analyzeShellCommand('git status', process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, false); + assert.strictEqual(analysis.requiresApproval, false); + }); + + test('network command does not require approval', () => { + const analysis = analyzeShellCommand('curl https://example.com', process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.requiresApproval, false); + assert.strictEqual(analysis.blocked, false); + }); + + test('outside-project read command does not require approval', () => { + const command = process.platform === 'win32' + ? 'type C:\\Windows\\System32\\drivers\\etc\\hosts' + : 'cat /etc/hosts'; + const analysis = analyzeShellCommand(command, process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, false); + assert.strictEqual(analysis.requiresApproval, false); + }); + + test('sensitive home shell rc read is hard-blocked', () => { + const command = process.platform === 'win32' + ? 'type $HOME\\.bashrc' + : 'cat ~/.zshrc'; + const analysis = analyzeShellCommand(command, process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('sensitive paths'))); + }); + + test('project .env read is hard-blocked', () => { + const analysis = analyzeShellCommand('cat .env', process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('sensitive paths'))); + }); + + test('outside-project mutation path is hard-blocked', () => { + const disallowedTarget = process.platform === 'win32' + ? 'C:\\Windows\\System32\\mi-shell-sandbox.txt' + : '/etc/mi-shell-sandbox.txt'; + const analysis = analyzeShellCommand(`echo hello > ${disallowedTarget}`, process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, true); + assert.strictEqual(analysis.requiresApproval, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('outside allowed roots'))); + }); + + test('outside-project mutation to allowed /tmp root is not blocked and does not require approval', () => { + const tmpTarget = process.platform === 'win32' + ? path.join(os.tmpdir(), 'mi-shell-sandbox.txt') + : '/tmp/mi-shell-sandbox.txt'; + const escapedTarget = tmpTarget.includes(' ') ? `"${tmpTarget}"` : tmpTarget; + const analysis = analyzeShellCommand(`echo hello > ${escapedTarget}`, process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, false); + assert.strictEqual(analysis.requiresApproval, false); + }); + + test('destructive commands always require approval', () => { + const analysis = analyzeShellCommand('rm -rf src', process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.requiresApproval, true); + assert.strictEqual(analysis.isDestructive, true); + }); + + test('remembered rule can bypass approval for non-destructive command', () => { + const analysis = analyzeShellCommand('npm install lodash', process.platform, PROJECT_PATH, false); + const covered = isAnalysisCoveredByRules(analysis, [['npm', 'install']]); + assert.strictEqual(covered, true); + }); + + test('remembered rule does not bypass destructive command', () => { + const analysis = analyzeShellCommand('rm -rf src', process.platform, PROJECT_PATH, false); + const covered = isAnalysisCoveredByRules(analysis, [['rm']]); + assert.strictEqual(analysis.isDestructive, true); + assert.strictEqual(covered, false); + }); + + test('complex syntax falls back to approval', () => { + const analysis = analyzeShellCommand('echo $(date)', process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.isComplexSyntax, true); + assert.strictEqual(analysis.requiresApproval, true); + }); + + test('background execution does not require approval by itself', () => { + const analysis = analyzeShellCommand('pwd', process.platform, PROJECT_PATH, true); + assert.strictEqual(analysis.runInBackground, true); + assert.strictEqual(analysis.requiresApproval, false); + }); + + test('tee write outside project is hard-blocked', () => { + const disallowedTarget = process.platform === 'win32' + ? 'C:\\Windows\\System32\\mi-shell-sandbox.log' + : '/etc/mi-shell-sandbox.log'; + const analysis = analyzeShellCommand(`cat /etc/hosts | tee ${disallowedTarget}`, process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('outside allowed roots'))); + }); + + test('sensitive .env write is hard-blocked', () => { + const analysis = analyzeShellCommand('echo KEY=VALUE > .env', process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('sensitive paths'))); + }); + + test('symlink escapes are blocked for mutation paths', function () { + const tempRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'mi-shell-sandbox-')); + const projectDir = path.join(tempRoot, 'project'); + const outsideDir = path.join(tempRoot, 'outside'); + + fs.mkdirSync(projectDir, { recursive: true }); + fs.mkdirSync(outsideDir, { recursive: true }); + + const linkPath = path.join(projectDir, 'link-out'); + try { + fs.symlinkSync(outsideDir, linkPath, 'dir'); + } catch { + fs.rmSync(tempRoot, { recursive: true, force: true }); + this.skip(); + return; + } + + try { + const analysis = analyzeShellCommand('touch link-out/file.txt', process.platform, projectDir, false); + assert.strictEqual(analysis.blocked, true); + assert.ok(analysis.reasons.some((reason) => reason.toLowerCase().includes('outside allowed roots'))); + } finally { + fs.rmSync(tempRoot, { recursive: true, force: true }); + } + }); + + test('interactive/elevated commands are blocked', () => { + const analysis = analyzeShellCommand('sudo ls', process.platform, PROJECT_PATH, false); + assert.strictEqual(analysis.blocked, true); + }); + + test('shell approval denial result contains explicit error and system reminder', () => { + const result = buildShellCommandDeniedResult(); + assert.strictEqual(result.success, false); + assert.strictEqual(result.error, 'SHELL_COMMAND_DENIED'); + assert.ok(result.message.includes('')); + }); + + test('shell sandbox blocked result contains explicit error and system reminder', () => { + const result = buildShellSandboxBlockedResult(['Mutating paths outside allowed roots is blocked.']); + assert.strictEqual(result.success, false); + assert.strictEqual(result.error, 'SHELL_SANDBOX_BLOCKED'); + assert.ok(result.message.includes('')); + }); + + test('rule matching remains session-scoped by rule set', () => { + const analysis = analyzeShellCommand('npm install lodash', process.platform, PROJECT_PATH, false); + const firstSessionCoverage = isAnalysisCoveredByRules(analysis, [['npm', 'install']]); + const secondSessionCoverage = isAnalysisCoveredByRules(analysis, []); + assert.strictEqual(firstSessionCoverage, true); + assert.strictEqual(secondSessionCoverage, false); + }); +}); diff --git a/workspaces/mi/mi-visualizer/src/views/AIPanel/component/AIChatFooter.tsx b/workspaces/mi/mi-visualizer/src/views/AIPanel/component/AIChatFooter.tsx index c3a383548b9..4e04db468cf 100644 --- a/workspaces/mi/mi-visualizer/src/views/AIPanel/component/AIChatFooter.tsx +++ b/workspaces/mi/mi-visualizer/src/views/AIPanel/component/AIChatFooter.tsx @@ -724,6 +724,7 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) setPendingPlanApproval(null); setShowRejectionInput(false); setPlanRejectionFeedback(""); + setRememberShellApprovalForSession(false); setAnswers(new Map()); setOtherAnswers(new Map()); setMessages((prevMessages) => { @@ -874,7 +875,9 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) | 'exit_plan_mode' | 'exit_plan_mode_without_plan' | 'web_search' - | 'web_fetch'; + | 'web_fetch' + | 'shell_command' + | 'continue_after_limit'; const planContent = typeof planEvent.content === "string" ? planEvent.content.trim() : ""; if (approvalKind === 'exit_plan_mode' && planContent) { setMessages((prev) => { @@ -899,6 +902,10 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) ? 'Agent wants permission to run a web search.' : approvalKind === 'web_fetch' ? 'Agent wants permission to fetch a web page.' + : approvalKind === 'shell_command' + ? 'Agent wants permission to run a shell command.' + : approvalKind === 'continue_after_limit' + ? 'Agent paused because it reached a run limit. Continue in a new run?' : getPlanApprovalPrompt(planContent, planEvent.planFilePath); const dialogContent = approvalKind === 'exit_plan_mode' @@ -912,6 +919,7 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) approveLabel: planEvent.approveLabel, rejectLabel: planEvent.rejectLabel, allowFeedback: planEvent.allowFeedback, + suggestedPrefixRule: planEvent.suggestedPrefixRule, planFilePath: planEvent.planFilePath, content: dialogContent, }); @@ -941,6 +949,7 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) setOtherAnswers(new Map()); setShowRejectionInput(false); setPlanRejectionFeedback(""); + setRememberShellApprovalForSession(false); }; // Handle user response to ask_user questions @@ -990,11 +999,18 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) await rpcClient.getMiAgentPanelRpcClient().respondToPlanApproval({ approvalId: pendingPlanApproval.approvalId, approved, - feedback + feedback, + rememberForSession: pendingPlanApproval.approvalKind === 'shell_command' + ? rememberShellApprovalForSession + : undefined, + suggestedPrefixRule: pendingPlanApproval.approvalKind === 'shell_command' && rememberShellApprovalForSession + ? pendingPlanApproval.suggestedPrefixRule + : undefined, }); setPendingPlanApproval(null); setShowRejectionInput(false); setPlanRejectionFeedback(""); + setRememberShellApprovalForSession(false); } catch (error) { console.error("Error responding to plan approval:", error); } @@ -1010,6 +1026,7 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) setPendingPlanApproval(null); setShowRejectionInput(false); setPlanRejectionFeedback(""); + setRememberShellApprovalForSession(false); setAnswers(new Map()); setOtherAnswers(new Map()); try { @@ -1396,6 +1413,7 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) // State for plan rejection feedback const [planRejectionFeedback, setPlanRejectionFeedback] = useState(""); const [showRejectionInput, setShowRejectionInput] = useState(false); + const [rememberShellApprovalForSession, setRememberShellApprovalForSession] = useState(false); const [activeQuestionTab, setActiveQuestionTab] = useState(0); const handlePlanApprovalCancel = async () => { @@ -1429,6 +1447,7 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) useEffect(() => { setShowRejectionInput(false); setPlanRejectionFeedback(""); + setRememberShellApprovalForSession(false); }, [pendingPlanApproval?.approvalId]); // Close mode menu on click outside @@ -1582,6 +1601,10 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) ? 'Plan Approval' : pendingPlanApproval?.approvalKind === 'web_search' || pendingPlanApproval?.approvalKind === 'web_fetch' ? 'Web Access Approval' + : pendingPlanApproval?.approvalKind === 'shell_command' + ? 'Shell Access Approval' + : pendingPlanApproval?.approvalKind === 'continue_after_limit' + ? 'Continue Agent Run?' : 'Approval Required'); const planApproveLabel = pendingPlanApproval?.approveLabel || 'Approve'; const planRejectLabel = pendingPlanApproval?.rejectLabel || 'Reject'; @@ -1953,7 +1976,9 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) fontSize: "12.5px", marginBottom: "8px", color: "var(--vscode-foreground)", - lineHeight: "1.4" + lineHeight: "1.4", + whiteSpace: pendingPlanApproval.approvalKind === 'shell_command' || pendingPlanApproval.approvalKind === 'continue_after_limit' ? "pre-wrap" : "normal", + overflowWrap: pendingPlanApproval.approvalKind === 'shell_command' || pendingPlanApproval.approvalKind === 'continue_after_limit' ? "anywhere" : "normal" }}> {pendingPlanApproval.content || "The plan is ready for your review."} @@ -1973,6 +1998,40 @@ const AIChatFooter: React.FC = ({ isUsageExceeded = false }) )} + {pendingPlanApproval.approvalKind === 'shell_command' && ( +
+ + {pendingPlanApproval.suggestedPrefixRule && pendingPlanApproval.suggestedPrefixRule.length > 0 && ( +
+ Suggested rule prefix: {pendingPlanApproval.suggestedPrefixRule.join(" ")} +
+ )} +
+ )} + {planApprovalAllowsFeedback && showRejectionInput && (
)} - +