@smithery/api 0.28.0 → 0.30.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +29 -0
- package/client.d.mts +2 -2
- package/client.d.mts.map +1 -1
- package/client.d.ts +2 -2
- package/client.d.ts.map +1 -1
- package/lib/mcp-transport.d.mts +57 -69
- package/lib/mcp-transport.d.mts.map +1 -1
- package/lib/mcp-transport.d.ts +57 -69
- package/lib/mcp-transport.d.ts.map +1 -1
- package/lib/mcp-transport.js +106 -204
- package/lib/mcp-transport.js.map +1 -1
- package/lib/mcp-transport.mjs +103 -202
- package/lib/mcp-transport.mjs.map +1 -1
- package/package.json +1 -1
- package/resources/beta/beta.d.mts +2 -2
- package/resources/beta/beta.d.mts.map +1 -1
- package/resources/beta/beta.d.ts +2 -2
- package/resources/beta/beta.d.ts.map +1 -1
- package/resources/beta/beta.js.map +1 -1
- package/resources/beta/beta.mjs.map +1 -1
- package/resources/beta/connect/connect.d.mts +4 -8
- package/resources/beta/connect/connect.d.mts.map +1 -1
- package/resources/beta/connect/connect.d.ts +4 -8
- package/resources/beta/connect/connect.d.ts.map +1 -1
- package/resources/beta/connect/connect.js +4 -8
- package/resources/beta/connect/connect.js.map +1 -1
- package/resources/beta/connect/connect.mjs +4 -8
- package/resources/beta/connect/connect.mjs.map +1 -1
- package/resources/beta/connect/connections.d.mts +5 -1
- package/resources/beta/connect/connections.d.mts.map +1 -1
- package/resources/beta/connect/connections.d.ts +5 -1
- package/resources/beta/connect/connections.d.ts.map +1 -1
- package/resources/beta/connect/index.d.mts +1 -2
- package/resources/beta/connect/index.d.mts.map +1 -1
- package/resources/beta/connect/index.d.ts +1 -2
- package/resources/beta/connect/index.d.ts.map +1 -1
- package/resources/beta/connect/index.js +3 -5
- package/resources/beta/connect/index.js.map +1 -1
- package/resources/beta/connect/index.mjs +1 -2
- package/resources/beta/connect/index.mjs.map +1 -1
- package/resources/beta/connect/{rpc.d.mts → mcp.d.mts} +9 -9
- package/resources/beta/connect/{rpc.d.mts.map → mcp.d.mts.map} +1 -1
- package/resources/beta/connect/{rpc.d.ts → mcp.d.ts} +9 -9
- package/resources/beta/connect/{rpc.d.ts.map → mcp.d.ts.map} +1 -1
- package/resources/beta/connect/{rpc.js → mcp.js} +8 -8
- package/resources/beta/connect/{rpc.js.map → mcp.js.map} +1 -1
- package/resources/beta/connect/{rpc.mjs → mcp.mjs} +6 -6
- package/resources/beta/connect/{rpc.mjs.map → mcp.mjs.map} +1 -1
- package/resources/beta/index.d.mts +1 -1
- package/resources/beta/index.d.mts.map +1 -1
- package/resources/beta/index.d.ts +1 -1
- package/resources/beta/index.d.ts.map +1 -1
- package/resources/beta/index.js.map +1 -1
- package/resources/beta/index.mjs.map +1 -1
- package/resources/beta/tools.d.mts +43 -77
- package/resources/beta/tools.d.mts.map +1 -1
- package/resources/beta/tools.d.ts +43 -77
- package/resources/beta/tools.d.ts.map +1 -1
- package/resources/beta/tools.js +9 -11
- package/resources/beta/tools.js.map +1 -1
- package/resources/beta/tools.mjs +9 -11
- package/resources/beta/tools.mjs.map +1 -1
- package/resources/index.d.mts +1 -1
- package/resources/index.d.mts.map +1 -1
- package/resources/index.d.ts +1 -1
- package/resources/index.d.ts.map +1 -1
- package/resources/namespaces/index.d.mts +1 -1
- package/resources/namespaces/index.d.mts.map +1 -1
- package/resources/namespaces/index.d.ts +1 -1
- package/resources/namespaces/index.d.ts.map +1 -1
- package/resources/namespaces/index.js.map +1 -1
- package/resources/namespaces/index.mjs +1 -1
- package/resources/namespaces/index.mjs.map +1 -1
- package/resources/namespaces/namespaces.d.mts +2 -2
- package/resources/namespaces/namespaces.d.mts.map +1 -1
- package/resources/namespaces/namespaces.d.ts +2 -2
- package/resources/namespaces/namespaces.d.ts.map +1 -1
- package/resources/namespaces/namespaces.js.map +1 -1
- package/resources/namespaces/namespaces.mjs.map +1 -1
- package/resources/namespaces/servers.d.mts +7 -11
- package/resources/namespaces/servers.d.mts.map +1 -1
- package/resources/namespaces/servers.d.ts +7 -11
- package/resources/namespaces/servers.d.ts.map +1 -1
- package/resources/namespaces/servers.js +4 -4
- package/resources/namespaces/servers.mjs +4 -4
- package/resources/servers/deployments.d.mts +3 -3
- package/resources/servers/deployments.d.mts.map +1 -1
- package/resources/servers/deployments.d.ts +3 -3
- package/resources/servers/deployments.d.ts.map +1 -1
- package/resources/servers/servers.d.mts +2 -0
- package/resources/servers/servers.d.mts.map +1 -1
- package/resources/servers/servers.d.ts +2 -0
- package/resources/servers/servers.d.ts.map +1 -1
- package/resources/servers/servers.js.map +1 -1
- package/resources/servers/servers.mjs.map +1 -1
- package/resources/tokens.d.mts +18 -18
- package/resources/tokens.d.mts.map +1 -1
- package/resources/tokens.d.ts +18 -18
- package/resources/tokens.d.ts.map +1 -1
- package/src/client.ts +2 -2
- package/src/lib/mcp-transport.ts +131 -236
- package/src/resources/beta/beta.ts +3 -4
- package/src/resources/beta/connect/connect.ts +6 -16
- package/src/resources/beta/connect/connections.ts +6 -1
- package/src/resources/beta/connect/index.ts +1 -2
- package/src/resources/beta/connect/{rpc.ts → mcp.ts} +9 -9
- package/src/resources/beta/index.ts +1 -1
- package/src/resources/beta/tools.ts +48 -109
- package/src/resources/index.ts +1 -1
- package/src/resources/namespaces/index.ts +1 -6
- package/src/resources/namespaces/namespaces.ts +2 -3
- package/src/resources/namespaces/servers.ts +7 -17
- package/src/resources/servers/deployments.ts +5 -5
- package/src/resources/servers/servers.ts +4 -0
- package/src/resources/tokens.ts +17 -17
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
- package/resources/beta/connect/tools.d.mts +0 -47
- package/resources/beta/connect/tools.d.mts.map +0 -1
- package/resources/beta/connect/tools.d.ts +0 -47
- package/resources/beta/connect/tools.d.ts.map +0 -1
- package/resources/beta/connect/tools.js +0 -25
- package/resources/beta/connect/tools.js.map +0 -1
- package/resources/beta/connect/tools.mjs +0 -21
- package/resources/beta/connect/tools.mjs.map +0 -1
- package/src/resources/beta/connect/tools.ts +0 -70
package/lib/mcp-transport.js
CHANGED
|
@@ -1,233 +1,135 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Smithery Connect — Create an MCP connection that routes through Smithery Connect.
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* This transport lazily fetches/creates the connection on first message and uses its server info
|
|
9
|
-
* to satisfy the MCP SDK's initialization flow without re-initializing the already-established connection.
|
|
5
|
+
* Smithery Connect acts as a connection manager and credential vault, handling OAuth
|
|
6
|
+
* orchestration with upstream MCP servers. This module provides a factory function
|
|
7
|
+
* that creates a connection and returns a standard MCP SDK transport.
|
|
10
8
|
*
|
|
11
9
|
* @example
|
|
12
10
|
* ```typescript
|
|
13
11
|
* import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
14
|
-
* import
|
|
15
|
-
* import { SmitheryTransport } from '@smithery/api/mcp';
|
|
16
|
-
*
|
|
17
|
-
* // Simple usage - client auto-created using SMITHERY_API_KEY env var
|
|
18
|
-
* const transport = new SmitheryTransport({
|
|
19
|
-
* mcpUrl: 'https://mcp.example.com/sse',
|
|
20
|
-
* });
|
|
12
|
+
* import { createConnection, SmitheryAuthorizationError } from '@smithery/api/mcp';
|
|
21
13
|
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
* namespace: 'my-namespace',
|
|
27
|
-
* connectionId: 'my-connection',
|
|
28
|
-
* mcpUrl: 'https://mcp.example.com/sse',
|
|
29
|
-
* });
|
|
14
|
+
* try {
|
|
15
|
+
* const { transport } = await createConnection({
|
|
16
|
+
* mcpUrl: 'https://server.smithery.ai/exa/mcp',
|
|
17
|
+
* });
|
|
30
18
|
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
19
|
+
* const client = new Client({ name: 'my-app', version: '1.0.0' }, { capabilities: {} });
|
|
20
|
+
* await client.connect(transport);
|
|
33
21
|
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
22
|
+
* const { tools } = await client.listTools();
|
|
23
|
+
* const result = await client.callTool({ name: 'my-tool', arguments: {} });
|
|
24
|
+
* } catch (e) {
|
|
25
|
+
* if (e instanceof SmitheryAuthorizationError) {
|
|
26
|
+
* // The upstream MCP server requires OAuth — redirect the user
|
|
27
|
+
* console.log(`Please authorize: ${e.authorizationUrl}`);
|
|
28
|
+
* // After auth completes, retry with the same connectionId:
|
|
29
|
+
* // await createConnection({ connectionId: e.connectionId });
|
|
30
|
+
* }
|
|
31
|
+
* }
|
|
37
32
|
* ```
|
|
38
33
|
*/
|
|
39
34
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.
|
|
35
|
+
exports.SmitheryAuthorizationError = void 0;
|
|
36
|
+
exports.createConnection = createConnection;
|
|
37
|
+
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/client/streamableHttp.js");
|
|
41
38
|
const client_1 = require("../client.js");
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Thrown when the upstream MCP server requires OAuth authorization.
|
|
41
|
+
* Contains the authorization URL to redirect the user to, and the connection ID
|
|
42
|
+
* to reuse when retrying after authorization completes.
|
|
43
|
+
*/
|
|
44
|
+
class SmitheryAuthorizationError extends Error {
|
|
45
|
+
constructor(message, authorizationUrl, connectionId) {
|
|
46
|
+
super(message);
|
|
47
|
+
this.authorizationUrl = authorizationUrl;
|
|
48
|
+
this.connectionId = connectionId;
|
|
49
|
+
this.name = 'SmitheryAuthorizationError';
|
|
51
50
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
51
|
+
}
|
|
52
|
+
exports.SmitheryAuthorizationError = SmitheryAuthorizationError;
|
|
53
|
+
/**
|
|
54
|
+
* Creates a Smithery Connect connection and returns an MCP transport.
|
|
55
|
+
*
|
|
56
|
+
* This function handles connection creation/retrieval and returns a standard
|
|
57
|
+
* `StreamableHTTPClientTransport` that can be used with any MCP SDK client.
|
|
58
|
+
* Smithery Connect manages the upstream MCP server connection, including
|
|
59
|
+
* OAuth credential storage and refresh.
|
|
60
|
+
*
|
|
61
|
+
* @throws {SmitheryAuthorizationError} If the upstream MCP server requires OAuth.
|
|
62
|
+
* The error contains `authorizationUrl` (where to redirect the user) and
|
|
63
|
+
* `connectionId` (to reuse when retrying after auth completes).
|
|
64
|
+
*/
|
|
65
|
+
async function createConnection(options) {
|
|
66
|
+
const client = options.client ?? new client_1.Smithery();
|
|
67
|
+
// Validate: mcpUrl is required if connectionId is not provided
|
|
68
|
+
if (!options.connectionId && !options.mcpUrl) {
|
|
69
|
+
throw new Error('mcpUrl is required when connectionId is not provided');
|
|
71
70
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
// Resolve namespace
|
|
72
|
+
const namespace = await resolveNamespace(client, options.namespace);
|
|
73
|
+
// Create or fetch connection
|
|
74
|
+
const connection = await resolveConnection(client, namespace, options.connectionId, options.mcpUrl);
|
|
75
|
+
const connectionId = connection.connectionId;
|
|
76
|
+
// Check connection status (present on create/set responses)
|
|
77
|
+
if (connection.status) {
|
|
78
|
+
if (connection.status.state === 'auth_required') {
|
|
79
|
+
const { authorizationUrl } = connection.status;
|
|
80
|
+
if (authorizationUrl) {
|
|
81
|
+
throw new SmitheryAuthorizationError(`MCP server requires authorization. Please visit: ${authorizationUrl}`, authorizationUrl, connectionId);
|
|
82
|
+
}
|
|
83
|
+
throw new Error('MCP server requires authorization.');
|
|
75
84
|
}
|
|
76
|
-
if (
|
|
77
|
-
throw new Error(
|
|
85
|
+
if (connection.status.state === 'error') {
|
|
86
|
+
throw new Error(`MCP connection failed: ${connection.status.message}`);
|
|
78
87
|
}
|
|
79
|
-
this._started = true;
|
|
80
88
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
return this._namespace;
|
|
88
|
-
}
|
|
89
|
-
const { namespaces } = await this._client.namespaces.list();
|
|
90
|
-
if (namespaces.length > 0) {
|
|
91
|
-
this._namespace = namespaces[0].name;
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
// Create a new namespace with server-generated name
|
|
95
|
-
const { name } = await this._client.namespaces.create();
|
|
96
|
-
this._namespace = name;
|
|
97
|
-
}
|
|
98
|
-
return this._namespace;
|
|
89
|
+
else if (!connection.serverInfo) {
|
|
90
|
+
// No status field (e.g., fetched via get()) and no serverInfo means the
|
|
91
|
+
// connection never initialized successfully — likely requires authorization.
|
|
92
|
+
// Surface this early rather than returning a broken transport.
|
|
93
|
+
throw new Error('Connection is not initialized. The upstream MCP server may require authorization. ' +
|
|
94
|
+
'Try creating a new connection with mcpUrl to get authorization details.');
|
|
99
95
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
catch (error) {
|
|
117
|
-
// If connection doesn't exist and we have mcpUrl, create it with the specified ID
|
|
118
|
-
if (this._mcpUrl) {
|
|
119
|
-
this._connection = await this._client.beta.connect.connections.set(this._connectionId, {
|
|
120
|
-
namespace,
|
|
121
|
-
mcpUrl: this._mcpUrl,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
else {
|
|
125
|
-
throw error;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
// No connection ID: create a new connection with auto-generated ID
|
|
131
|
-
// mcpUrl is guaranteed to be present (validated in constructor)
|
|
132
|
-
this._connection = await this._client.beta.connect.connections.create(namespace, {
|
|
133
|
-
mcpUrl: this._mcpUrl,
|
|
134
|
-
});
|
|
135
|
-
// Store the generated connection ID for subsequent RPC calls
|
|
136
|
-
this._connectionId = this._connection.connectionId;
|
|
137
|
-
}
|
|
96
|
+
// Build the MCP endpoint URL
|
|
97
|
+
const url = new URL(`/connect/${namespace}/${connectionId}/mcp`, client.baseURL).href;
|
|
98
|
+
// Create transport with auth headers
|
|
99
|
+
const transport = new streamableHttp_js_1.StreamableHTTPClientTransport(new URL(url), {
|
|
100
|
+
requestInit: {
|
|
101
|
+
headers: {
|
|
102
|
+
Authorization: `Bearer ${client.apiKey}`,
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
return { transport, connectionId, url };
|
|
107
|
+
}
|
|
108
|
+
async function resolveNamespace(client, namespace) {
|
|
109
|
+
if (namespace) {
|
|
110
|
+
return namespace;
|
|
138
111
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
// Lazily ensure connection exists before processing any message
|
|
151
|
-
await this._ensureConnection();
|
|
152
|
-
// Intercept 'initialize' request - Smithery Connect handles initialization server-side
|
|
153
|
-
// Return the real serverInfo from the connection
|
|
154
|
-
if (message.method === 'initialize' && 'id' in message && message.id !== undefined) {
|
|
155
|
-
if (this.onmessage) {
|
|
156
|
-
const serverInfo = this._connection?.serverInfo ?? {
|
|
157
|
-
name: 'smithery-connect',
|
|
158
|
-
version: '1.0.0',
|
|
159
|
-
};
|
|
160
|
-
const initializeResponse = {
|
|
161
|
-
jsonrpc: '2.0',
|
|
162
|
-
id: message.id,
|
|
163
|
-
result: {
|
|
164
|
-
protocolVersion: LATEST_PROTOCOL_VERSION,
|
|
165
|
-
serverInfo: {
|
|
166
|
-
name: serverInfo.name,
|
|
167
|
-
version: serverInfo.version,
|
|
168
|
-
},
|
|
169
|
-
capabilities: this._capabilities,
|
|
170
|
-
},
|
|
171
|
-
};
|
|
172
|
-
// Use setTimeout to make this async and match real transport behavior
|
|
173
|
-
setTimeout(() => this.onmessage(initializeResponse), 0);
|
|
174
|
-
}
|
|
175
|
-
return;
|
|
176
|
-
}
|
|
177
|
-
// Intercept 'notifications/initialized' - no response needed, just acknowledge
|
|
178
|
-
if (message.method === 'notifications/initialized') {
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
112
|
+
const { namespaces } = await client.namespaces.list();
|
|
113
|
+
if (namespaces.length > 0) {
|
|
114
|
+
return namespaces[0].name;
|
|
115
|
+
}
|
|
116
|
+
const { name } = await client.namespaces.create();
|
|
117
|
+
return name;
|
|
118
|
+
}
|
|
119
|
+
async function resolveConnection(client, namespace, connectionId, mcpUrl) {
|
|
120
|
+
if (connectionId) {
|
|
121
|
+
// Connection ID provided: try to get, or create if mcpUrl is provided
|
|
181
122
|
try {
|
|
182
|
-
|
|
183
|
-
// _namespace is guaranteed to be set after _ensureConnection
|
|
184
|
-
const rpcParams = {
|
|
185
|
-
namespace: this._namespace,
|
|
186
|
-
jsonrpc: '2.0',
|
|
187
|
-
method: message.method,
|
|
188
|
-
};
|
|
189
|
-
// Only add id if present (for requests, not notifications)
|
|
190
|
-
if ('id' in message && message.id !== undefined) {
|
|
191
|
-
rpcParams.id = message.id;
|
|
192
|
-
}
|
|
193
|
-
// Only add params if present
|
|
194
|
-
if ('params' in message && message.params !== undefined) {
|
|
195
|
-
rpcParams.params = message.params;
|
|
196
|
-
}
|
|
197
|
-
const response = await this._client.beta.connect.rpc.call(this._connectionId, rpcParams);
|
|
198
|
-
// Route the response back via onmessage callback for requests (messages with an id)
|
|
199
|
-
if ('id' in message && message.id !== undefined && this.onmessage) {
|
|
200
|
-
const jsonRpcResponse = {
|
|
201
|
-
jsonrpc: '2.0',
|
|
202
|
-
id: response.id,
|
|
203
|
-
result: response.result,
|
|
204
|
-
};
|
|
205
|
-
this.onmessage(jsonRpcResponse);
|
|
206
|
-
}
|
|
123
|
+
return await client.beta.connect.connections.get(connectionId, { namespace });
|
|
207
124
|
}
|
|
208
125
|
catch (error) {
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
if ('id' in message && message.id !== undefined && this.onmessage) {
|
|
212
|
-
const errorResponse = {
|
|
213
|
-
jsonrpc: '2.0',
|
|
214
|
-
id: message.id,
|
|
215
|
-
error: {
|
|
216
|
-
code: -32603, // Internal error
|
|
217
|
-
message: normalizedError.message,
|
|
218
|
-
},
|
|
219
|
-
};
|
|
220
|
-
this.onmessage(errorResponse);
|
|
126
|
+
if (mcpUrl) {
|
|
127
|
+
return await client.beta.connect.connections.set(connectionId, { namespace, mcpUrl });
|
|
221
128
|
}
|
|
222
|
-
|
|
223
|
-
this.onerror?.(normalizedError);
|
|
129
|
+
throw error;
|
|
224
130
|
}
|
|
225
131
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
this._started = false;
|
|
229
|
-
this.onclose?.();
|
|
230
|
-
}
|
|
132
|
+
// No connection ID: create a new connection with auto-generated ID
|
|
133
|
+
return await client.beta.connect.connections.create(namespace, { mcpUrl: mcpUrl });
|
|
231
134
|
}
|
|
232
|
-
exports.SmitheryTransport = SmitheryTransport;
|
|
233
135
|
//# sourceMappingURL=mcp-transport.js.map
|
package/lib/mcp-transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-transport.js","sourceRoot":"","sources":["../src/lib/mcp-transport.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"mcp-transport.js","sourceRoot":"","sources":["../src/lib/mcp-transport.ts"],"names":[],"mappings":"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"}
|