@mcp-ts/sdk 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/agui-adapter.d.mts +2 -2
- package/dist/adapters/agui-adapter.d.ts +2 -2
- package/dist/adapters/agui-middleware.d.mts +2 -2
- package/dist/adapters/agui-middleware.d.ts +2 -2
- package/dist/adapters/ai-adapter.d.mts +2 -2
- package/dist/adapters/ai-adapter.d.ts +2 -2
- package/dist/adapters/langchain-adapter.d.mts +2 -2
- package/dist/adapters/langchain-adapter.d.ts +2 -2
- package/dist/client/index.d.mts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/client/react.d.mts +4 -4
- package/dist/client/react.d.ts +4 -4
- package/dist/client/react.js +96 -44
- package/dist/client/react.js.map +1 -1
- package/dist/client/react.mjs +96 -44
- package/dist/client/react.mjs.map +1 -1
- package/dist/client/vue.d.mts +4 -4
- package/dist/client/vue.d.ts +4 -4
- package/dist/{index-GfC_eNEv.d.ts → index-DhA-OEAe.d.ts} +1 -1
- package/dist/{index-DcYfpY3H.d.mts → index-bFL4ZF2N.d.mts} +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +12 -2
- package/dist/index.mjs.map +1 -1
- package/dist/server/index.d.mts +2 -2
- package/dist/server/index.d.ts +2 -2
- package/dist/server/index.js +12 -2
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +12 -2
- package/dist/server/index.mjs.map +1 -1
- package/dist/shared/index.d.mts +4 -4
- package/dist/shared/index.d.ts +4 -4
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/index.mjs.map +1 -1
- package/dist/{tool-router-_O2tIwf7.d.mts → tool-router-BVaV1udm.d.mts} +1 -1
- package/dist/{tool-router-Bn9R0KWr.d.ts → tool-router-Dh2804tM.d.ts} +1 -1
- package/dist/{types-CfCoIsWI.d.mts → types-rIuN1CQi.d.mts} +1 -0
- package/dist/{types-CfCoIsWI.d.ts → types-rIuN1CQi.d.ts} +1 -0
- package/package.json +1 -1
- package/src/client/react/oauth-popup.tsx +111 -51
- package/src/server/handlers/sse-handler.ts +12 -0
- package/src/server/mcp/oauth-client.ts +6 -2
- package/src/shared/types.ts +1 -0
package/dist/client/vue.d.mts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { c as SSEClient } from '../index-
|
|
2
|
-
export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-
|
|
1
|
+
import { c as SSEClient } from '../index-bFL4ZF2N.mjs';
|
|
2
|
+
export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-bFL4ZF2N.mjs';
|
|
3
3
|
import { c as McpConnectionState, M as McpConnectionEvent } from '../events-CK3N--3g.mjs';
|
|
4
4
|
export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-CK3N--3g.mjs';
|
|
5
|
-
import { v as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-
|
|
6
|
-
export { p as McpRpcRequest, q as McpRpcResponse } from '../types-
|
|
5
|
+
import { v as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-rIuN1CQi.mjs';
|
|
6
|
+
export { p as McpRpcRequest, q as McpRpcResponse } from '../types-rIuN1CQi.mjs';
|
|
7
7
|
import '@modelcontextprotocol/ext-apps/app-bridge';
|
|
8
8
|
import '@modelcontextprotocol/sdk/types.js';
|
|
9
9
|
|
package/dist/client/vue.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { c as SSEClient } from '../index-
|
|
2
|
-
export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-
|
|
1
|
+
import { c as SSEClient } from '../index-DhA-OEAe.js';
|
|
2
|
+
export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, d as SSEClientOptions } from '../index-DhA-OEAe.js';
|
|
3
3
|
import { c as McpConnectionState, M as McpConnectionEvent } from '../events-CK3N--3g.js';
|
|
4
4
|
export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, d as McpObservabilityEvent } from '../events-CK3N--3g.js';
|
|
5
|
-
import { v as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-
|
|
6
|
-
export { p as McpRpcRequest, q as McpRpcResponse } from '../types-
|
|
5
|
+
import { v as ToolInfo, k as FinishAuthResult, n as ListToolsRpcResult, L as ListPromptsResult, l as ListResourcesResult } from '../types-rIuN1CQi.js';
|
|
6
|
+
export { p as McpRpcRequest, q as McpRpcResponse } from '../types-rIuN1CQi.js';
|
|
7
7
|
import '@modelcontextprotocol/ext-apps/app-bridge';
|
|
8
8
|
import '@modelcontextprotocol/sdk/types.js';
|
|
9
9
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { M as McpConnectionEvent, d as McpObservabilityEvent, e as McpAppsUIEvent } from './events-CK3N--3g.js';
|
|
2
|
-
import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, n as ListToolsRpcResult, r as RestoreSessionResult, k as FinishAuthResult, L as ListPromptsResult, l as ListResourcesResult } from './types-
|
|
2
|
+
import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, n as ListToolsRpcResult, r as RestoreSessionResult, k as FinishAuthResult, L as ListPromptsResult, l as ListResourcesResult } from './types-rIuN1CQi.js';
|
|
3
3
|
import { AppBridge } from '@modelcontextprotocol/ext-apps/app-bridge';
|
|
4
4
|
import { LoggingMessageNotification } from '@modelcontextprotocol/sdk/types.js';
|
|
5
5
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { M as McpConnectionEvent, d as McpObservabilityEvent, e as McpAppsUIEvent } from './events-CK3N--3g.mjs';
|
|
2
|
-
import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, n as ListToolsRpcResult, r as RestoreSessionResult, k as FinishAuthResult, L as ListPromptsResult, l as ListResourcesResult } from './types-
|
|
2
|
+
import { s as SessionListResult, e as ConnectParams, h as ConnectResult, j as DisconnectResult, n as ListToolsRpcResult, r as RestoreSessionResult, k as FinishAuthResult, L as ListPromptsResult, l as ListResourcesResult } from './types-rIuN1CQi.mjs';
|
|
3
3
|
import { AppBridge } from '@modelcontextprotocol/ext-apps/app-bridge';
|
|
4
4
|
import { LoggingMessageNotification } from '@modelcontextprotocol/sdk/types.js';
|
|
5
5
|
|
package/dist/index.d.mts
CHANGED
|
@@ -2,11 +2,11 @@ export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvide
|
|
|
2
2
|
export { A as AuthenticationError, C as ConfigurationError, a as ConnectionError, I as InvalidStateError, M as McpError, N as NotConnectedError, R as RpcErrorCode, b as RpcErrorCodes, S as SessionNotFoundError, c as SessionValidationError, T as ToolExecutionError, U as UnauthorizedError, s as sanitizeServerLabel } from './utils-0qmYrqoa.mjs';
|
|
3
3
|
export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, StorageBackend, createNextMcpHandler, createSSEHandler, storage } from './server/index.mjs';
|
|
4
4
|
export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, M as McpConnectionEvent, c as McpConnectionState, d as McpObservabilityEvent } from './events-CK3N--3g.mjs';
|
|
5
|
-
export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, L as ListPromptsResult, l as ListResourcesResult, m as ListToolsResponse, n as ListToolsRpcResult, M as McpRpcMethod, o as McpRpcParams, p as McpRpcRequest, q as McpRpcResponse, R as ReadResourceParams, r as RestoreSessionResult, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-
|
|
5
|
+
export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, L as ListPromptsResult, l as ListResourcesResult, m as ListToolsResponse, n as ListToolsRpcResult, M as McpRpcMethod, o as McpRpcParams, p as McpRpcRequest, q as McpRpcResponse, R as ReadResourceParams, r as RestoreSessionResult, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-rIuN1CQi.mjs';
|
|
6
6
|
export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
|
|
7
7
|
export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
-
export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-
|
|
8
|
+
export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-bFL4ZF2N.mjs';
|
|
9
9
|
export { CallToolFn, DEFAULT_CLIENT_NAME, DEFAULT_CLIENT_URI, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_LOGO_URI, DEFAULT_POLICY_URI, MCP_CLIENT_NAME, MCP_CLIENT_VERSION, REDIS_KEY_PREFIX, SESSION_TTL_SECONDS, SOFTWARE_ID, SOFTWARE_VERSION, STATE_EXPIRATION_MS, TOKEN_EXPIRY_BUFFER_MS, ToolUiConfig, createExecuteToolDefinition, createGetSchemaToolDefinition, createListServersToolDefinition, createRegexSearchToolDefinition, createSearchToolDefinition, executeMetaTool, findToolByName, getToolUiResourceUri, isMetaTool, resolveMetaToolProxy } from './shared/index.mjs';
|
|
10
|
-
export { C as CompactTool, a as CompressionStats, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, b as ToolIndex, c as ToolIndexOptions, d as ToolListResult, e as ToolRouter, f as ToolRouterClientInput, g as ToolRouterOptions, h as ToolRouterStrategy, i as ToolSearchOptions, j as ToolServerSummary, k as ToolSummary } from './tool-router-
|
|
10
|
+
export { C as CompactTool, a as CompressionStats, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, b as ToolIndex, c as ToolIndexOptions, d as ToolListResult, e as ToolRouter, f as ToolRouterClientInput, g as ToolRouterOptions, h as ToolRouterStrategy, i as ToolSearchOptions, j as ToolServerSummary, k as ToolSummary } from './tool-router-BVaV1udm.mjs';
|
|
11
11
|
import '@modelcontextprotocol/sdk/client/auth.js';
|
|
12
12
|
import '@modelcontextprotocol/ext-apps/app-bridge';
|
package/dist/index.d.ts
CHANGED
|
@@ -2,11 +2,11 @@ export { M as MCPClient, a as MultiSessionClient, S as StorageOAuthClientProvide
|
|
|
2
2
|
export { A as AuthenticationError, C as ConfigurationError, a as ConnectionError, I as InvalidStateError, M as McpError, N as NotConnectedError, R as RpcErrorCode, b as RpcErrorCodes, S as SessionNotFoundError, c as SessionValidationError, T as ToolExecutionError, U as UnauthorizedError, s as sanitizeServerLabel } from './utils-0qmYrqoa.js';
|
|
3
3
|
export { ClientMetadata, NextMcpHandlerOptions, SSEConnectionManager, SSEHandlerOptions, StorageBackend, createNextMcpHandler, createSSEHandler, storage } from './server/index.js';
|
|
4
4
|
export { D as Disposable, a as DisposableStore, E as Emitter, b as Event, M as McpConnectionEvent, c as McpConnectionState, d as McpObservabilityEvent } from './events-CK3N--3g.js';
|
|
5
|
-
export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, L as ListPromptsResult, l as ListResourcesResult, m as ListToolsResponse, n as ListToolsRpcResult, M as McpRpcMethod, o as McpRpcParams, p as McpRpcRequest, q as McpRpcResponse, R as ReadResourceParams, r as RestoreSessionResult, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-
|
|
5
|
+
export { C as CallToolParams, a as CallToolRequest, b as CallToolResponse, c as ConnectAuthRequiredResponse, d as ConnectErrorResponse, e as ConnectParams, f as ConnectRequest, g as ConnectResponse, h as ConnectResult, i as ConnectSuccessResponse, D as DisconnectParams, j as DisconnectResult, F as FinishAuthParams, k as FinishAuthResult, G as GetPromptParams, L as ListPromptsResult, l as ListResourcesResult, m as ListToolsResponse, n as ListToolsRpcResult, M as McpRpcMethod, o as McpRpcParams, p as McpRpcRequest, q as McpRpcResponse, R as ReadResourceParams, r as RestoreSessionResult, S as SessionInfo, s as SessionListResult, t as SessionParams, T as ToolClient, u as ToolClientProvider, v as ToolInfo, w as TransportType, x as isCallToolSuccess, y as isConnectAuthRequired, z as isConnectError, A as isConnectSuccess, B as isListToolsSuccess } from './types-rIuN1CQi.js';
|
|
6
6
|
export { OAuthClientInformation, OAuthClientInformationFull, OAuthClientMetadata, OAuthTokens } from '@modelcontextprotocol/sdk/shared/auth.js';
|
|
7
7
|
export { CallToolResult, ListToolsResult, Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
8
|
-
export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-
|
|
8
|
+
export { A as APP_HOST_DEFAULTS, a as AppHost, D as DEFAULT_MCP_APP_CSP, S as SANDBOX_PROXY_READY_METHOD, b as SANDBOX_RESOURCE_READY_METHOD, c as SSEClient, d as SSEClientOptions } from './index-DhA-OEAe.js';
|
|
9
9
|
export { CallToolFn, DEFAULT_CLIENT_NAME, DEFAULT_CLIENT_URI, DEFAULT_HEARTBEAT_INTERVAL_MS, DEFAULT_LOGO_URI, DEFAULT_POLICY_URI, MCP_CLIENT_NAME, MCP_CLIENT_VERSION, REDIS_KEY_PREFIX, SESSION_TTL_SECONDS, SOFTWARE_ID, SOFTWARE_VERSION, STATE_EXPIRATION_MS, TOKEN_EXPIRY_BUFFER_MS, ToolUiConfig, createExecuteToolDefinition, createGetSchemaToolDefinition, createListServersToolDefinition, createRegexSearchToolDefinition, createSearchToolDefinition, executeMetaTool, findToolByName, getToolUiResourceUri, isMetaTool, resolveMetaToolProxy } from './shared/index.js';
|
|
10
|
-
export { C as CompactTool, a as CompressionStats, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, b as ToolIndex, c as ToolIndexOptions, d as ToolListResult, e as ToolRouter, f as ToolRouterClientInput, g as ToolRouterOptions, h as ToolRouterStrategy, i as ToolSearchOptions, j as ToolServerSummary, k as ToolSummary } from './tool-router-
|
|
10
|
+
export { C as CompactTool, a as CompressionStats, E as EmbedFn, I as IndexedTool, S as SchemaCompressor, T as ToolGroupInfo, b as ToolIndex, c as ToolIndexOptions, d as ToolListResult, e as ToolRouter, f as ToolRouterClientInput, g as ToolRouterOptions, h as ToolRouterStrategy, i as ToolSearchOptions, j as ToolServerSummary, k as ToolSummary } from './tool-router-Dh2804tM.js';
|
|
11
11
|
import '@modelcontextprotocol/sdk/client/auth.js';
|
|
12
12
|
import '@modelcontextprotocol/ext-apps/app-bridge';
|
package/dist/index.js
CHANGED
|
@@ -1584,9 +1584,10 @@ var MCPClient = class _MCPClient {
|
|
|
1584
1584
|
throw new Error("Server URL is required to create transport");
|
|
1585
1585
|
}
|
|
1586
1586
|
const baseUrl = new URL(this.serverUrl);
|
|
1587
|
+
const hasAuthorizationHeader = Object.keys(this.headers || {}).some((key) => key.toLowerCase() === "authorization");
|
|
1587
1588
|
const transportOptions = {
|
|
1588
|
-
authProvider: this.oauthProvider,
|
|
1589
|
-
...this.headers && { headers: this.headers },
|
|
1589
|
+
...!hasAuthorizationHeader && { authProvider: this.oauthProvider },
|
|
1590
|
+
...this.headers && { requestInit: { headers: this.headers } },
|
|
1590
1591
|
/**
|
|
1591
1592
|
* Custom fetch implementation to handle connection timeouts.
|
|
1592
1593
|
* Observation: SDK 1.24.0+ connections may hang indefinitely in some environments.
|
|
@@ -1687,6 +1688,7 @@ var MCPClient = class _MCPClient {
|
|
|
1687
1688
|
serverUrl: this.serverUrl,
|
|
1688
1689
|
callbackUrl: this.callbackUrl,
|
|
1689
1690
|
transportType: this.transportType || "streamable_http",
|
|
1691
|
+
headers: this.headers,
|
|
1690
1692
|
createdAt: this.createdAt,
|
|
1691
1693
|
active: false
|
|
1692
1694
|
}, Math.floor(STATE_EXPIRATION_MS / 1e3));
|
|
@@ -1711,6 +1713,7 @@ var MCPClient = class _MCPClient {
|
|
|
1711
1713
|
serverUrl: this.serverUrl,
|
|
1712
1714
|
callbackUrl: this.callbackUrl,
|
|
1713
1715
|
transportType: this.transportType || "streamable_http",
|
|
1716
|
+
headers: this.headers,
|
|
1714
1717
|
createdAt: this.createdAt || Date.now(),
|
|
1715
1718
|
active
|
|
1716
1719
|
};
|
|
@@ -2549,6 +2552,11 @@ function isConnectionEvent(event) {
|
|
|
2549
2552
|
|
|
2550
2553
|
// src/server/handlers/sse-handler.ts
|
|
2551
2554
|
var DEFAULT_HEARTBEAT_INTERVAL = 3e4;
|
|
2555
|
+
function normalizeHeaders(headers) {
|
|
2556
|
+
if (!headers || typeof headers !== "object") return void 0;
|
|
2557
|
+
const entries = Object.entries(headers).map(([key, value]) => [key.trim(), String(value).trim()]).filter(([key, value]) => key.length > 0 && value.length > 0);
|
|
2558
|
+
return entries.length > 0 ? Object.fromEntries(entries) : void 0;
|
|
2559
|
+
}
|
|
2552
2560
|
var SSEConnectionManager = class {
|
|
2553
2561
|
constructor(options, sendEvent) {
|
|
2554
2562
|
this.options = options;
|
|
@@ -2673,6 +2681,7 @@ var SSEConnectionManager = class {
|
|
|
2673
2681
|
*/
|
|
2674
2682
|
async connect(params) {
|
|
2675
2683
|
const { serverName, serverUrl, callbackUrl, transportType } = params;
|
|
2684
|
+
const headers = normalizeHeaders(params.headers);
|
|
2676
2685
|
const serverId = params.serverId && params.serverId.length <= 12 ? params.serverId : await storage.generateSessionId();
|
|
2677
2686
|
const existingSessions = await storage.getIdentitySessionsData(this.identity);
|
|
2678
2687
|
const duplicate = existingSessions.find(
|
|
@@ -2699,6 +2708,7 @@ var SSEConnectionManager = class {
|
|
|
2699
2708
|
serverUrl,
|
|
2700
2709
|
callbackUrl,
|
|
2701
2710
|
transportType,
|
|
2711
|
+
headers,
|
|
2702
2712
|
...clientMetadata
|
|
2703
2713
|
// Spread client metadata (clientName, clientUri, logoUri, policyUri)
|
|
2704
2714
|
});
|