@mastra/react 1.13.0-alpha.3 → 1.13.0-alpha.5
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/{accumulator-BmD8-x9I.cjs → accumulator-Bjfckb5t.cjs} +5 -9
- package/dist/{accumulator-BmD8-x9I.cjs.map → accumulator-Bjfckb5t.cjs.map} +1 -1
- package/dist/{accumulator-D9jAph99.js → accumulator-DysrPe6U.js} +5 -9
- package/dist/{accumulator-D9jAph99.js.map → accumulator-DysrPe6U.js.map} +1 -1
- package/dist/chat/index.cjs +1 -1
- package/dist/chat/index.js +1 -1
- package/dist/{combine-by-ids-CcaZKGT9.js → combine-by-ids-C-0oe4eH.js} +2 -3
- package/dist/{combine-by-ids-CcaZKGT9.js.map → combine-by-ids-C-0oe4eH.js.map} +1 -1
- package/dist/{combine-by-ids-D_lp6Dvq.cjs → combine-by-ids-ERVPXXBi.cjs} +2 -3
- package/dist/{combine-by-ids-D_lp6Dvq.cjs.map → combine-by-ids-ERVPXXBi.cjs.map} +1 -1
- package/dist/{experiments-CJw1N3FB.cjs → experiments-Duv0RgkM.cjs} +12 -19
- package/dist/{experiments-CJw1N3FB.cjs.map → experiments-Duv0RgkM.cjs.map} +1 -1
- package/dist/{experiments-B7vRMK5T.js → experiments-DyecjEut.js} +12 -19
- package/dist/{experiments-B7vRMK5T.js.map → experiments-DyecjEut.js.map} +1 -1
- package/dist/{feedback-refetch-interval-XD5FVc2k.cjs → feedback-refetch-interval-BBcT9r8s.cjs} +3 -4
- package/dist/{feedback-refetch-interval-XD5FVc2k.cjs.map → feedback-refetch-interval-BBcT9r8s.cjs.map} +1 -1
- package/dist/{feedback-refetch-interval-DLHzQoVV.js → feedback-refetch-interval-C12Nzb2r.js} +3 -4
- package/dist/{feedback-refetch-interval-DLHzQoVV.js.map → feedback-refetch-interval-C12Nzb2r.js.map} +1 -1
- package/dist/hooks/agents/index.cjs +19 -37
- package/dist/hooks/agents/index.cjs.map +1 -1
- package/dist/hooks/agents/index.js +19 -37
- package/dist/hooks/agents/index.js.map +1 -1
- package/dist/hooks/auth/index.cjs +11 -21
- package/dist/hooks/auth/index.cjs.map +1 -1
- package/dist/hooks/auth/index.js +11 -21
- package/dist/hooks/auth/index.js.map +1 -1
- package/dist/hooks/capabilities/index.cjs +11 -21
- package/dist/hooks/capabilities/index.cjs.map +1 -1
- package/dist/hooks/capabilities/index.js +11 -21
- package/dist/hooks/capabilities/index.js.map +1 -1
- package/dist/hooks/configuration/index.cjs +2 -3
- package/dist/hooks/configuration/index.js +2 -3
- package/dist/hooks/datasets/index.cjs +12 -21
- package/dist/hooks/datasets/index.cjs.map +1 -1
- package/dist/hooks/datasets/index.js +12 -21
- package/dist/hooks/datasets/index.js.map +1 -1
- package/dist/hooks/embedders/index.cjs +2 -3
- package/dist/hooks/embedders/index.js +2 -3
- package/dist/hooks/experiments/index.cjs +1 -1
- package/dist/hooks/experiments/index.js +1 -1
- package/dist/hooks/feedback/index.cjs +3 -4
- package/dist/hooks/feedback/index.js +3 -4
- package/dist/hooks/llm/index.cjs +2 -3
- package/dist/hooks/llm/index.js +2 -3
- package/dist/hooks/logs/index.cjs +4 -5
- package/dist/hooks/logs/index.js +4 -5
- package/dist/hooks/mcps/index.cjs +8 -15
- package/dist/hooks/mcps/index.cjs.map +1 -1
- package/dist/hooks/mcps/index.js +8 -15
- package/dist/hooks/mcps/index.js.map +1 -1
- package/dist/hooks/memory/index.cjs +5 -9
- package/dist/hooks/memory/index.cjs.map +1 -1
- package/dist/hooks/memory/index.js +5 -9
- package/dist/hooks/memory/index.js.map +1 -1
- package/dist/hooks/metrics/index.cjs +19 -36
- package/dist/hooks/metrics/index.cjs.map +1 -1
- package/dist/hooks/metrics/index.js +19 -36
- package/dist/hooks/metrics/index.js.map +1 -1
- package/dist/hooks/processors/index.cjs +2 -3
- package/dist/hooks/processors/index.js +2 -3
- package/dist/hooks/prompt-blocks/index.cjs +3 -5
- package/dist/hooks/prompt-blocks/index.cjs.map +1 -1
- package/dist/hooks/prompt-blocks/index.js +3 -5
- package/dist/hooks/prompt-blocks/index.js.map +1 -1
- package/dist/hooks/query/index.cjs +2 -3
- package/dist/hooks/query/index.js +2 -3
- package/dist/hooks/review/index.cjs +4 -6
- package/dist/hooks/review/index.cjs.map +1 -1
- package/dist/hooks/review/index.js +4 -6
- package/dist/hooks/review/index.js.map +1 -1
- package/dist/hooks/schedules/index.cjs +6 -10
- package/dist/hooks/schedules/index.cjs.map +1 -1
- package/dist/hooks/schedules/index.js +6 -10
- package/dist/hooks/schedules/index.js.map +1 -1
- package/dist/hooks/scores/index.cjs +8 -13
- package/dist/hooks/scores/index.cjs.map +1 -1
- package/dist/hooks/scores/index.js +8 -13
- package/dist/hooks/scores/index.js.map +1 -1
- package/dist/hooks/templates/index.cjs +2 -3
- package/dist/hooks/templates/index.js +2 -3
- package/dist/hooks/tool-providers/index.cjs +10 -19
- package/dist/hooks/tool-providers/index.cjs.map +1 -1
- package/dist/hooks/tool-providers/index.js +10 -19
- package/dist/hooks/tool-providers/index.js.map +1 -1
- package/dist/hooks/tools/index.cjs +3 -5
- package/dist/hooks/tools/index.cjs.map +1 -1
- package/dist/hooks/tools/index.js +3 -5
- package/dist/hooks/tools/index.js.map +1 -1
- package/dist/hooks/traces/index.cjs +71 -54
- package/dist/hooks/traces/index.cjs.map +1 -1
- package/dist/hooks/traces/index.d.ts +2 -0
- package/dist/hooks/traces/index.d.ts.map +1 -1
- package/dist/hooks/traces/index.js +70 -55
- package/dist/hooks/traces/index.js.map +1 -1
- package/dist/hooks/traces/use-span-aggregate.d.ts +16 -0
- package/dist/hooks/traces/use-span-aggregate.d.ts.map +1 -0
- package/dist/hooks/traces/use-trace-aggregate.d.ts +17 -0
- package/dist/hooks/traces/use-trace-aggregate.d.ts.map +1 -0
- package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts +4 -2
- package/dist/hooks/traces/use-trace-column-preferences-storage-key.d.ts.map +1 -1
- package/dist/hooks/vectors/index.cjs +2 -3
- package/dist/hooks/vectors/index.js +2 -3
- package/dist/hooks/voice/index.cjs +3 -4
- package/dist/hooks/voice/index.js +3 -4
- package/dist/hooks/workflows/index.cjs +7 -11
- package/dist/hooks/workflows/index.cjs.map +1 -1
- package/dist/hooks/workflows/index.js +7 -11
- package/dist/hooks/workflows/index.js.map +1 -1
- package/dist/hooks/workspace/index.cjs +12 -22
- package/dist/hooks/workspace/index.cjs.map +1 -1
- package/dist/hooks/workspace/index.js +12 -22
- package/dist/hooks/workspace/index.js.map +1 -1
- package/dist/{hooks-XYsmqFCz.cjs → hooks-Bt15IwzP.cjs} +6 -9
- package/dist/{hooks-XYsmqFCz.cjs.map → hooks-Bt15IwzP.cjs.map} +1 -1
- package/dist/{hooks-DG-Y1KFe.js → hooks-Btt7PyI-.js} +6 -9
- package/dist/{hooks-DG-Y1KFe.js.map → hooks-Btt7PyI-.js.map} +1 -1
- package/dist/{hooks-BfysjY_K.js → hooks-CEikbhrN.js} +9 -15
- package/dist/{hooks-BfysjY_K.js.map → hooks-CEikbhrN.js.map} +1 -1
- package/dist/{hooks-BbUMSab8.cjs → hooks-D6LDSEcm.cjs} +9 -15
- package/dist/{hooks-BbUMSab8.cjs.map → hooks-D6LDSEcm.cjs.map} +1 -1
- package/dist/index.cjs +7 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7 -9
- package/dist/index.js.map +1 -1
- package/dist/{map-CDv4fbu4.js → map-5-4U5rwA.js} +2 -3
- package/dist/{map-CDv4fbu4.js.map → map-5-4U5rwA.js.map} +1 -1
- package/dist/{map-wjmL1y5O.cjs → map-BGoWBTGy.cjs} +2 -3
- package/dist/{map-wjmL1y5O.cjs.map → map-BGoWBTGy.cjs.map} +1 -1
- package/dist/{mastra-client-context-Bx_g84YB.js → mastra-client-context-DQ5z_ze9.js} +2 -3
- package/dist/{mastra-client-context-Bx_g84YB.js.map → mastra-client-context-DQ5z_ze9.js.map} +1 -1
- package/dist/{mastra-client-context-DzX3f0RF.cjs → mastra-client-context-DX8wJM9p.cjs} +2 -3
- package/dist/{mastra-client-context-DzX3f0RF.cjs.map → mastra-client-context-DX8wJM9p.cjs.map} +1 -1
- package/dist/{query-utils-CcrChYgz.cjs → query-utils-BVgE_xxj.cjs} +2 -3
- package/dist/{query-utils-CcrChYgz.cjs.map → query-utils-BVgE_xxj.cjs.map} +1 -1
- package/dist/{query-utils-D1NgFnWU.js → query-utils-DvMERIwf.js} +2 -3
- package/dist/{query-utils-D1NgFnWU.js.map → query-utils-DvMERIwf.js.map} +1 -1
- package/dist/ui/index.cjs +15 -30
- package/dist/ui/index.cjs.map +1 -1
- package/dist/ui/index.js +14 -28
- package/dist/ui/index.js.map +1 -1
- package/dist/{use-in-view-B6eJO9Zi.cjs → use-in-view-BxdrrnCw.cjs} +2 -3
- package/dist/{use-in-view-B6eJO9Zi.cjs.map → use-in-view-BxdrrnCw.cjs.map} +1 -1
- package/dist/{use-in-view-C9sYPGRm.js → use-in-view-CyjKdplM.js} +2 -3
- package/dist/{use-in-view-C9sYPGRm.js.map → use-in-view-CyjKdplM.js.map} +1 -1
- package/dist/{voice-BOtUdMi8.cjs → voice-Didej2E1.cjs} +5 -8
- package/dist/{voice-BOtUdMi8.cjs.map → voice-Didej2E1.cjs.map} +1 -1
- package/dist/{voice-DgirjEyH.js → voice-ugGu7VyA.js} +5 -8
- package/dist/{voice-DgirjEyH.js.map → voice-ugGu7VyA.js.map} +1 -1
- package/package.json +19 -19
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { n as useMastraClient } from "../../mastra-client-context-
|
|
1
|
+
import { n as useMastraClient } from "../../mastra-client-context-DQ5z_ze9.js";
|
|
2
2
|
import { isUnauthenticatedError, useCurrentUser } from "../auth/index.js";
|
|
3
3
|
import { useCallback, useMemo } from "react";
|
|
4
4
|
import { useMutation, useQueries, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
5
|
-
|
|
5
|
+
// src/hooks/tool-providers/use-tool-providers.ts
|
|
6
6
|
const useToolProviders = ({ queryOptions } = {}) => {
|
|
7
7
|
const client = useMastraClient();
|
|
8
8
|
return useQuery({
|
|
@@ -37,8 +37,7 @@ const useAllIntegrationTools = ({ queryOptions } = {}) => {
|
|
|
37
37
|
isLoading: isLoadingProviders || toolsQuery.isLoading
|
|
38
38
|
};
|
|
39
39
|
};
|
|
40
|
-
|
|
41
|
-
//#region src/hooks/tool-providers/use-all-connections.ts
|
|
40
|
+
// src/hooks/tool-providers/use-all-connections.ts
|
|
42
41
|
/**
|
|
43
42
|
* Stale time long enough to avoid refetching on every picker re-render but
|
|
44
43
|
* short enough that an OAuth completion in a sibling tab is reflected
|
|
@@ -114,8 +113,7 @@ const useAllConnections = ({ scopeToSelf = false, queryOptions } = {}) => {
|
|
|
114
113
|
isLoading
|
|
115
114
|
};
|
|
116
115
|
};
|
|
117
|
-
|
|
118
|
-
//#region src/hooks/tool-providers/use-all-provider-tools.ts
|
|
116
|
+
// src/hooks/tool-providers/use-all-provider-tools.ts
|
|
119
117
|
/**
|
|
120
118
|
* Upper bound for a single Composio-style `listTools` call. Composio's SDK has
|
|
121
119
|
* no cursor — only `limit` — so we ask for a large page and fan out per
|
|
@@ -181,8 +179,7 @@ const useAllProviderTools = ({ queryOptions } = {}) => {
|
|
|
181
179
|
isLoading
|
|
182
180
|
};
|
|
183
181
|
};
|
|
184
|
-
|
|
185
|
-
//#region src/hooks/tool-providers/use-authorize.ts
|
|
182
|
+
// src/hooks/tool-providers/use-authorize.ts
|
|
186
183
|
const DEFAULT_POLL_INTERVAL_MS = 2e3;
|
|
187
184
|
const DEFAULT_TIMEOUT_MS = 3e5;
|
|
188
185
|
/**
|
|
@@ -228,8 +225,7 @@ const useAuthorize = (options = {}) => {
|
|
|
228
225
|
...options.queryOptions
|
|
229
226
|
});
|
|
230
227
|
};
|
|
231
|
-
|
|
232
|
-
//#region src/hooks/tool-providers/use-disconnect-connection.ts
|
|
228
|
+
// src/hooks/tool-providers/use-disconnect-connection.ts
|
|
233
229
|
const useDisconnectConnection = ({ queryOptions } = {}) => {
|
|
234
230
|
const client = useMastraClient();
|
|
235
231
|
const qc = useQueryClient();
|
|
@@ -243,8 +239,7 @@ const useDisconnectConnection = ({ queryOptions } = {}) => {
|
|
|
243
239
|
...queryOptions
|
|
244
240
|
});
|
|
245
241
|
};
|
|
246
|
-
|
|
247
|
-
//#region src/hooks/tool-providers/use-existing-connections.ts
|
|
242
|
+
// src/hooks/tool-providers/use-existing-connections.ts
|
|
248
243
|
/**
|
|
249
244
|
* Lists existing provider connections for the caller, scoped to a tool
|
|
250
245
|
* service. Powers the "use existing connection" path in the picker so
|
|
@@ -279,8 +274,7 @@ const useExistingConnections = ({ providerId, toolkit, scopeToSelf = false, quer
|
|
|
279
274
|
...queryOptions
|
|
280
275
|
});
|
|
281
276
|
};
|
|
282
|
-
|
|
283
|
-
//#region src/hooks/tool-providers/use-provider-tools.ts
|
|
277
|
+
// src/hooks/tool-providers/use-provider-tools.ts
|
|
284
278
|
/**
|
|
285
279
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
286
280
|
*/
|
|
@@ -297,8 +291,7 @@ const useProviderTools = ({ providerId, params, queryOptions }) => {
|
|
|
297
291
|
...queryOptions
|
|
298
292
|
});
|
|
299
293
|
};
|
|
300
|
-
|
|
301
|
-
//#region src/hooks/tool-providers/use-toolkits.ts
|
|
294
|
+
// src/hooks/tool-providers/use-toolkits.ts
|
|
302
295
|
/**
|
|
303
296
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
304
297
|
*/
|
|
@@ -310,8 +303,7 @@ const useToolkits = ({ providerId, queryOptions }) => {
|
|
|
310
303
|
...queryOptions
|
|
311
304
|
});
|
|
312
305
|
};
|
|
313
|
-
|
|
314
|
-
//#region src/hooks/tool-providers/use-update-connection.ts
|
|
306
|
+
// src/hooks/tool-providers/use-update-connection.ts
|
|
315
307
|
const useUpdateConnection = ({ queryOptions } = {}) => {
|
|
316
308
|
const client = useMastraClient();
|
|
317
309
|
const qc = useQueryClient();
|
|
@@ -326,7 +318,6 @@ const useUpdateConnection = ({ queryOptions } = {}) => {
|
|
|
326
318
|
...queryOptions
|
|
327
319
|
});
|
|
328
320
|
};
|
|
329
|
-
//#endregion
|
|
330
321
|
export { useAllConnections, useAllIntegrationTools, useAllProviderTools, useAuthorize, useDisconnectConnection, useExistingConnections, useProviderTools, useToolProviders, useToolkits, useUpdateConnection };
|
|
331
322
|
|
|
332
323
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/tool-providers/use-tool-providers.ts","../../../src/hooks/tool-providers/use-all-connections.ts","../../../src/hooks/tool-providers/use-all-provider-tools.ts","../../../src/hooks/tool-providers/use-authorize.ts","../../../src/hooks/tool-providers/use-disconnect-connection.ts","../../../src/hooks/tool-providers/use-existing-connections.ts","../../../src/hooks/tool-providers/use-provider-tools.ts","../../../src/hooks/tool-providers/use-toolkits.ts","../../../src/hooks/tool-providers/use-update-connection.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ToolProvidersResponse = Awaited<ReturnType<MastraClient['listToolProviders']>>;\n\nexport const useToolProviders = <TData = ToolProvidersResponse>({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<ToolProvidersResponse, TData> } = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool-providers'],\n queryFn: () => client.listToolProviders(),\n ...queryOptions,\n });\n};\n\nexport interface IntegrationTool {\n slug: string;\n name: string;\n description?: string;\n toolkit?: string;\n providerId: string;\n providerName: string;\n}\n\nexport const useAllIntegrationTools = ({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<IntegrationTool[]> } = {}) => {\n const client = useMastraClient();\n const { data: providersData, isLoading: isLoadingProviders } = useToolProviders();\n const providers = providersData?.providers ?? [];\n\n const toolsQuery = useQuery({\n queryKey: ['integration-tools-all', providers.map(p => p.id)],\n queryFn: async () => {\n const results: IntegrationTool[] = [];\n\n for (const provider of providers) {\n const response = await client.getToolProvider(provider.id).listTools();\n for (const tool of response.data) {\n results.push({\n ...tool,\n providerId: provider.id,\n providerName: provider.name,\n });\n }\n }\n\n return results;\n },\n enabled: providers.length > 0,\n ...queryOptions,\n });\n\n return {\n data: toolsQuery.data ?? [],\n isLoading: isLoadingProviders || toolsQuery.isLoading,\n };\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useQueries } from '@tanstack/react-query';\nimport { useCallback, useMemo } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport { isUnauthenticatedError, useCurrentUser } from '../auth';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nimport { useToolProviders } from './use-tool-providers';\n\n/**\n * Stale time long enough to avoid refetching on every picker re-render but\n * short enough that an OAuth completion in a sibling tab is reflected\n * promptly (React Query also re-fetches on window focus by default).\n */\nconst STALE_TIME_MS = 30_000;\n\nexport interface UseAllConnectionsOptions {\n /**\n * When `true`, the hook forces the server-side `authorId` filter to the\n * caller's own userId. Builder edit view passes `scopeToSelf: true` so\n * admins see only their own connections, never other authors' rows.\n *\n * Non-admin callers see the same result either way — the server already\n * scopes to the caller's bucket — but the explicit filter keeps caches\n * consistent and prevents admin cross-author leakage.\n */\n scopeToSelf?: boolean;\n /** TanStack overrides applied to every fanned-out query, spread last. `select` must keep the default shape. */\n queryOptions?: {\n toolkits?: MastraQueryOptions<Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listToolkits']>>>;\n connections?: MastraQueryOptions<\n Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listConnections']>>\n >;\n };\n}\n\n/**\n * Fans out across every registered ToolProvider and every toolkit it\n * exposes to determine whether the caller has an existing connection for a\n * given `(providerId, toolkit)` pair.\n *\n * Used by the Builder tool picker to gate integration tool rows: if the\n * pair has no connection, the card cannot be selected and surfaces an\n * inline \"Connect\" button instead.\n *\n * Distinct from `useExistingConnections` (per-pair, used by `/integrations`)\n * to keep their query caches independent.\n */\nexport const useAllConnections = ({ scopeToSelf = false, queryOptions }: UseAllConnectionsOptions = {}) => {\n const client = useMastraClient();\n const providersQuery = useToolProviders();\n const providers = useMemo(() => providersQuery.data?.providers ?? [], [providersQuery.data?.providers]);\n\n const currentUserQuery = useCurrentUser();\n const callerAuthorId = currentUserQuery.data?.id;\n const callerReady = !scopeToSelf || currentUserQuery.isSuccess || isUnauthenticatedError(currentUserQuery.error);\n\n // 1. For every provider, list its toolkits.\n const toolkitsQueries = useQueries({\n queries: providers.map(provider => ({\n queryKey: ['tool-integration-services', provider.id],\n queryFn: () => client.getToolProvider(provider.id).listToolkits(),\n ...queryOptions?.toolkits,\n })),\n });\n\n // 2. Flatten to (providerId, toolkit) pairs.\n const pairs = useMemo(() => {\n const out: Array<{ providerId: string; toolkit: string }> = [];\n providers.forEach((provider, idx) => {\n const toolkits = toolkitsQueries[idx]?.data?.data ?? [];\n for (const toolkit of toolkits) {\n out.push({ providerId: provider.id, toolkit: toolkit.slug });\n }\n });\n return out;\n }, [providers, toolkitsQueries]);\n\n // 3. One listConnections call per pair. Include `authorId` in queryKey when\n // self-scoped so the cache is distinct from any unscoped admin reads.\n const connectionsQueries = useQueries({\n queries: pairs.map(pair => ({\n queryKey: scopeToSelf\n ? ['tool-integration-connections-all', pair.providerId, pair.toolkit, callerAuthorId]\n : ['tool-integration-connections-all', pair.providerId, pair.toolkit],\n queryFn: () =>\n client.getToolProvider(pair.providerId).listConnections({\n toolkit: pair.toolkit,\n ...(scopeToSelf && callerAuthorId ? { authorId: callerAuthorId } : {}),\n }),\n enabled: callerReady,\n staleTime: STALE_TIME_MS,\n ...queryOptions?.connections,\n })),\n });\n\n const isLoading =\n providersQuery.isLoading ||\n (scopeToSelf && currentUserQuery.isLoading) ||\n toolkitsQueries.some(q => q.isLoading) ||\n connectionsQueries.some(q => q.isLoading);\n\n // Build a per-pair list of connection summaries so callers can both gate\n // (\"does this row have any connection?\") and auto-pin (\"if exactly one\n // exists, write it into the form on toggle-on\").\n const connectionsByKey = useMemo(() => {\n const map = new Map<string, Array<{ connectionId: string; label?: string | null; status?: string }>>();\n pairs.forEach((pair, idx) => {\n const items = connectionsQueries[idx]?.data?.items ?? [];\n map.set(`${pair.providerId}:${pair.toolkit}`, items);\n });\n return map;\n }, [pairs, connectionsQueries]);\n\n // A toolkit \"has a connection\" only when at least one connection is active.\n // Pending/failed rows don't count — this keeps the card hint in sync with the\n // toolkit row control, which also treats only active connections as usable.\n const hasConnection = useCallback(\n (providerId: string, toolkit: string) =>\n (connectionsByKey.get(`${providerId}:${toolkit}`) ?? []).some(connection => connection.status === 'active'),\n [connectionsByKey],\n );\n\n const getConnections = useCallback(\n (providerId: string, toolkit: string) => connectionsByKey.get(`${providerId}:${toolkit}`) ?? [],\n [connectionsByKey],\n );\n\n return { hasConnection, getConnections, isLoading };\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useQueries } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nimport { useToolProviders } from './use-tool-providers';\n\nexport interface AvailableIntegrationTool {\n providerId: string;\n slug: string;\n toolkit: string;\n name?: string;\n description?: string;\n}\n\n/**\n * Upper bound for a single Composio-style `listTools` call. Composio's SDK has\n * no cursor — only `limit` — so we ask for a large page and fan out per\n * `toolkit` to avoid being truncated when many toolkits are allowlisted.\n */\nconst PER_SERVICE_LIMIT = 500;\n\n/**\n * Returns every tool surfaced by every registered ToolProvider, scoped to\n * the provider's `allowedToolkits`/`allowedTools` filter (enforced\n * server-side). Used to render the full available-tools list inline.\n */\nexport const useAllProviderTools = ({\n queryOptions,\n}: {\n /** TanStack overrides applied to every fanned-out query, spread last. `select` must keep the default shape. */\n queryOptions?: {\n toolkits?: MastraQueryOptions<Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listToolkits']>>>;\n tools?: MastraQueryOptions<Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listTools']>>>;\n };\n} = {}) => {\n const client = useMastraClient();\n const integrationsQuery = useToolProviders();\n const integrations = useMemo(() => integrationsQuery.data?.providers ?? [], [integrationsQuery.data?.providers]);\n\n // 1. For every integration, fetch its tool services.\n const serviceQueries = useQueries({\n queries: integrations.map(integration => ({\n queryKey: ['tool-integration-services', integration.id],\n queryFn: () => client.getToolProvider(integration.id).listToolkits(),\n ...queryOptions?.toolkits,\n })),\n });\n\n // 2. Flatten to (providerId, serviceSlug) pairs.\n const servicePairs = useMemo(() => {\n const pairs: Array<{ providerId: string; toolkit: string }> = [];\n integrations.forEach((integration, idx) => {\n const services = serviceQueries[idx]?.data?.data ?? [];\n for (const service of services) {\n pairs.push({ providerId: integration.id, toolkit: service.slug });\n }\n });\n return pairs;\n }, [integrations, serviceQueries]);\n\n // 3. Fan out one tools query per (integration, service).\n const toolsQueries = useQueries({\n queries: servicePairs.map(pair => ({\n queryKey: ['tool-integration-tools-all', pair.providerId, pair.toolkit],\n queryFn: () =>\n client.getToolProvider(pair.providerId).listTools({ toolkit: pair.toolkit, perPage: PER_SERVICE_LIMIT }),\n ...queryOptions?.tools,\n })),\n });\n\n const isLoading =\n integrationsQuery.isLoading || serviceQueries.some(q => q.isLoading) || toolsQueries.some(q => q.isLoading);\n\n const tools = useMemo<AvailableIntegrationTool[]>(() => {\n const out: AvailableIntegrationTool[] = [];\n servicePairs.forEach((pair, idx) => {\n const items = toolsQueries[idx]?.data?.data ?? [];\n for (const item of items) {\n const toolkit = (item as { toolkit?: string }).toolkit ?? pair.toolkit;\n out.push({\n providerId: pair.providerId,\n slug: item.slug,\n toolkit,\n name: (item as { name?: string }).name,\n description: (item as { description?: string }).description,\n });\n }\n });\n return out;\n }, [servicePairs, toolsQueries]);\n\n return { tools, isLoading };\n};\n","import { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\nexport interface AuthorizeArgs {\n providerId: string;\n toolkit: string;\n /**\n * Existing bucket id when re-authorizing; omit for a brand-new connection.\n * Semantics are provider-opaque; for Composio v1 this is the internal user\n * bucket the new connected account should be created under.\n */\n connectionId?: string;\n /**\n * Provider-specific connection fields collected from the picker (e.g.\n * Confluence subdomain). Forwarded to the server's `authorize` body.\n */\n config?: Record<string, unknown>;\n /**\n * Optional human label to persist on the resulting `tool_integration_connections` row.\n */\n label?: string | null;\n /**\n * Ownership scope of the OAuth bucket. `'per-author'` (default) buckets\n * under the caller's authorId.\n */\n scope?: 'per-author' | 'shared' | 'caller-supplied';\n}\n\nexport interface AuthorizeResult {\n status: 'completed' | 'failed';\n /**\n * The `authId` returned by `authorize`, exposed as `connectionId` because\n * for the v1 Composio adapter it is the `connected_account.id` that the\n * caller persists as `Connection.connectionId`.\n */\n connectionId: string;\n}\n\nconst DEFAULT_POLL_INTERVAL_MS = 2000;\nconst DEFAULT_TIMEOUT_MS = 5 * 60_000;\n\nexport interface UseAuthorizeOptions {\n pollIntervalMs?: number;\n timeoutMs?: number;\n openPopup?: (url: string) => Window | null;\n queryOptions?: MastraMutationOptions<AuthorizeResult, AuthorizeArgs>;\n}\n\n/**\n * Drives the OAuth popup + polling loop for a `ToolProvider` provider.\n */\nexport const useAuthorize = (options: UseAuthorizeOptions = {}) => {\n const client = useMastraClient();\n const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const openPopup = options.openPopup ?? ((url: string) => window.open(url, '_blank', 'popup,width=600,height=700'));\n\n return useMutation<AuthorizeResult, Error, AuthorizeArgs>({\n mutationFn: async ({ providerId, toolkit, connectionId, config, label, scope }) => {\n const integration = client.getToolProvider(providerId);\n const normalizedConnectionId = connectionId?.trim();\n const { url, authId } = await integration.authorize({\n toolkit,\n ...(normalizedConnectionId ? { connectionId: normalizedConnectionId } : {}),\n ...(config ? { config } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(scope ? { scope } : {}),\n });\n\n const popup = openPopup(url);\n if (!popup) {\n throw new Error('Popup blocked. Please allow popups for this site.');\n }\n\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n await new Promise(resolve => setTimeout(resolve, pollIntervalMs));\n const { status } = await integration.getAuthStatus(authId);\n if (status === 'completed' || status === 'failed') {\n try {\n popup.close();\n } catch {\n // Cross-origin popups may refuse close(); ignore.\n }\n return { status, connectionId: authId };\n }\n }\n\n try {\n popup.close();\n } catch {\n // ignore\n }\n throw new Error('Authorization timed out');\n },\n ...options.queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\nexport interface DisconnectConnectionArgs {\n providerId: string;\n connectionId: string;\n /**\n * When `true`, the server skips the usage check and revokes the\n * connection at the provider before deleting the local row.\n */\n force?: boolean;\n}\n\n/**\n * Calls the provider-side revoke (best-effort) and drops the local\n * `tool_integration_connections` row. Server enforces the soft-vs-force rule.\n */\ntype DisconnectConnectionResponse = Awaited<\n ReturnType<ReturnType<MastraClient['getToolProvider']>['disconnectConnection']>\n>;\n\nexport const useDisconnectConnection = ({\n queryOptions,\n}: { queryOptions?: MastraMutationOptions<DisconnectConnectionResponse, DisconnectConnectionArgs> } = {}) => {\n const client = useMastraClient();\n const qc = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ providerId, connectionId, force }: DisconnectConnectionArgs) => {\n const integration = client.getToolProvider(providerId);\n return integration.disconnectConnection(connectionId, force ? { force } : undefined);\n },\n onSuccess: (_data, vars) => {\n void qc.invalidateQueries({ queryKey: ['tool-integration-connections', vars.providerId] });\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport { isUnauthenticatedError, useCurrentUser } from '../auth';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport interface UseExistingConnectionsOptions {\n /**\n * When `true`, the hook forces the server-side `authorId` filter to the\n * caller's own userId. Builder edit view passes `scopeToSelf: true` so\n * admins see only their own connections, never other authors' rows.\n *\n * Non-admin callers see the same result either way — the server already\n * scopes to the caller's bucket — but the explicit filter keeps caches\n * consistent and prevents admin cross-author leakage in the picker.\n */\n scopeToSelf?: boolean;\n}\n\ntype ConnectionsResponse = Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listConnections']>>;\n\n/**\n * Lists existing provider connections for the caller, scoped to a tool\n * service. Powers the \"use existing connection\" path in the picker so\n * authors can pin previously-authorized accounts without re-running OAuth.\n *\n * The connection owner is resolved server-side from the request's auth\n * context. Admin callers receive cross-author rows by default; pass\n * `scopeToSelf: true` to narrow the response to the caller's own bucket\n * (used by the Builder edit view).\n */\nexport const useExistingConnections = <TData = ConnectionsResponse>({\n providerId,\n toolkit,\n scopeToSelf = false,\n queryOptions,\n}: UseExistingConnectionsOptions & {\n providerId: string | null | undefined;\n toolkit: string | null | undefined;\n queryOptions?: MastraQueryOptions<ConnectionsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const currentUserQuery = useCurrentUser();\n const callerAuthorId = currentUserQuery.data?.id;\n\n const callerReady = !scopeToSelf || currentUserQuery.isSuccess || isUnauthenticatedError(currentUserQuery.error);\n\n const enabled = !!providerId && !!toolkit && callerReady;\n\n return useQuery({\n queryKey: scopeToSelf\n ? ['tool-integration-connections', providerId, toolkit, callerAuthorId]\n : ['tool-integration-connections', providerId, toolkit],\n queryFn: () =>\n client.getToolProvider(providerId!).listConnections({\n toolkit: toolkit!,\n ...(scopeToSelf && callerAuthorId ? { authorId: callerAuthorId } : {}),\n }),\n enabled,\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ProviderToolsResponse = Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listTools']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useProviderTools = <TData = ProviderToolsResponse>({\n providerId,\n params,\n queryOptions,\n}: {\n providerId: string | null;\n params?: { toolkit?: string; search?: string };\n queryOptions?: MastraQueryOptions<ProviderToolsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool-provider-tools', providerId, params?.toolkit, params?.search],\n queryFn: () => client.getToolProvider(providerId!).listTools(params),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ToolkitsResponse = Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listToolkits']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useToolkits = <TData = ToolkitsResponse>({\n providerId,\n queryOptions,\n}: {\n providerId: string | null;\n queryOptions?: MastraQueryOptions<ToolkitsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool-provider-toolkits', providerId],\n queryFn: () => client.getToolProvider(providerId!).listToolkits(),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\nexport interface UpdateConnectionArgs {\n providerId: string;\n connectionId: string;\n /**\n * New display label. Pass `null` (or an empty string) to clear the label.\n */\n label: string | null;\n}\n\n/**\n * Renames a `tool_provider_connections` row in place. Server enforces\n * ownership (owner / admin / shared scope). On success, invalidates both\n * the per-toolkit and the fan-out connection lists so the picker re-fetches.\n */\ntype UpdateConnectionResponse = Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['updateConnection']>>;\n\nexport const useUpdateConnection = ({\n queryOptions,\n}: { queryOptions?: MastraMutationOptions<UpdateConnectionResponse, UpdateConnectionArgs> } = {}) => {\n const client = useMastraClient();\n const qc = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ providerId, connectionId, label }: UpdateConnectionArgs) => {\n const integration = client.getToolProvider(providerId);\n return integration.updateConnection(connectionId, { label });\n },\n onSuccess: (_data, vars) => {\n void qc.invalidateQueries({ queryKey: ['tool-integration-connections', vars.providerId] });\n void qc.invalidateQueries({ queryKey: ['tool-integration-connections-all', vars.providerId] });\n },\n ...queryOptions,\n });\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/tool-providers/use-tool-providers.ts","../../../src/hooks/tool-providers/use-all-connections.ts","../../../src/hooks/tool-providers/use-all-provider-tools.ts","../../../src/hooks/tool-providers/use-authorize.ts","../../../src/hooks/tool-providers/use-disconnect-connection.ts","../../../src/hooks/tool-providers/use-existing-connections.ts","../../../src/hooks/tool-providers/use-provider-tools.ts","../../../src/hooks/tool-providers/use-toolkits.ts","../../../src/hooks/tool-providers/use-update-connection.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ToolProvidersResponse = Awaited<ReturnType<MastraClient['listToolProviders']>>;\n\nexport const useToolProviders = <TData = ToolProvidersResponse>({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<ToolProvidersResponse, TData> } = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool-providers'],\n queryFn: () => client.listToolProviders(),\n ...queryOptions,\n });\n};\n\nexport interface IntegrationTool {\n slug: string;\n name: string;\n description?: string;\n toolkit?: string;\n providerId: string;\n providerName: string;\n}\n\nexport const useAllIntegrationTools = ({\n queryOptions,\n}: { queryOptions?: MastraQueryOptions<IntegrationTool[]> } = {}) => {\n const client = useMastraClient();\n const { data: providersData, isLoading: isLoadingProviders } = useToolProviders();\n const providers = providersData?.providers ?? [];\n\n const toolsQuery = useQuery({\n queryKey: ['integration-tools-all', providers.map(p => p.id)],\n queryFn: async () => {\n const results: IntegrationTool[] = [];\n\n for (const provider of providers) {\n const response = await client.getToolProvider(provider.id).listTools();\n for (const tool of response.data) {\n results.push({\n ...tool,\n providerId: provider.id,\n providerName: provider.name,\n });\n }\n }\n\n return results;\n },\n enabled: providers.length > 0,\n ...queryOptions,\n });\n\n return {\n data: toolsQuery.data ?? [],\n isLoading: isLoadingProviders || toolsQuery.isLoading,\n };\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useQueries } from '@tanstack/react-query';\nimport { useCallback, useMemo } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport { isUnauthenticatedError, useCurrentUser } from '../auth';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nimport { useToolProviders } from './use-tool-providers';\n\n/**\n * Stale time long enough to avoid refetching on every picker re-render but\n * short enough that an OAuth completion in a sibling tab is reflected\n * promptly (React Query also re-fetches on window focus by default).\n */\nconst STALE_TIME_MS = 30_000;\n\nexport interface UseAllConnectionsOptions {\n /**\n * When `true`, the hook forces the server-side `authorId` filter to the\n * caller's own userId. Builder edit view passes `scopeToSelf: true` so\n * admins see only their own connections, never other authors' rows.\n *\n * Non-admin callers see the same result either way — the server already\n * scopes to the caller's bucket — but the explicit filter keeps caches\n * consistent and prevents admin cross-author leakage.\n */\n scopeToSelf?: boolean;\n /** TanStack overrides applied to every fanned-out query, spread last. `select` must keep the default shape. */\n queryOptions?: {\n toolkits?: MastraQueryOptions<Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listToolkits']>>>;\n connections?: MastraQueryOptions<\n Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listConnections']>>\n >;\n };\n}\n\n/**\n * Fans out across every registered ToolProvider and every toolkit it\n * exposes to determine whether the caller has an existing connection for a\n * given `(providerId, toolkit)` pair.\n *\n * Used by the Builder tool picker to gate integration tool rows: if the\n * pair has no connection, the card cannot be selected and surfaces an\n * inline \"Connect\" button instead.\n *\n * Distinct from `useExistingConnections` (per-pair, used by `/integrations`)\n * to keep their query caches independent.\n */\nexport const useAllConnections = ({ scopeToSelf = false, queryOptions }: UseAllConnectionsOptions = {}) => {\n const client = useMastraClient();\n const providersQuery = useToolProviders();\n const providers = useMemo(() => providersQuery.data?.providers ?? [], [providersQuery.data?.providers]);\n\n const currentUserQuery = useCurrentUser();\n const callerAuthorId = currentUserQuery.data?.id;\n const callerReady = !scopeToSelf || currentUserQuery.isSuccess || isUnauthenticatedError(currentUserQuery.error);\n\n // 1. For every provider, list its toolkits.\n const toolkitsQueries = useQueries({\n queries: providers.map(provider => ({\n queryKey: ['tool-integration-services', provider.id],\n queryFn: () => client.getToolProvider(provider.id).listToolkits(),\n ...queryOptions?.toolkits,\n })),\n });\n\n // 2. Flatten to (providerId, toolkit) pairs.\n const pairs = useMemo(() => {\n const out: Array<{ providerId: string; toolkit: string }> = [];\n providers.forEach((provider, idx) => {\n const toolkits = toolkitsQueries[idx]?.data?.data ?? [];\n for (const toolkit of toolkits) {\n out.push({ providerId: provider.id, toolkit: toolkit.slug });\n }\n });\n return out;\n }, [providers, toolkitsQueries]);\n\n // 3. One listConnections call per pair. Include `authorId` in queryKey when\n // self-scoped so the cache is distinct from any unscoped admin reads.\n const connectionsQueries = useQueries({\n queries: pairs.map(pair => ({\n queryKey: scopeToSelf\n ? ['tool-integration-connections-all', pair.providerId, pair.toolkit, callerAuthorId]\n : ['tool-integration-connections-all', pair.providerId, pair.toolkit],\n queryFn: () =>\n client.getToolProvider(pair.providerId).listConnections({\n toolkit: pair.toolkit,\n ...(scopeToSelf && callerAuthorId ? { authorId: callerAuthorId } : {}),\n }),\n enabled: callerReady,\n staleTime: STALE_TIME_MS,\n ...queryOptions?.connections,\n })),\n });\n\n const isLoading =\n providersQuery.isLoading ||\n (scopeToSelf && currentUserQuery.isLoading) ||\n toolkitsQueries.some(q => q.isLoading) ||\n connectionsQueries.some(q => q.isLoading);\n\n // Build a per-pair list of connection summaries so callers can both gate\n // (\"does this row have any connection?\") and auto-pin (\"if exactly one\n // exists, write it into the form on toggle-on\").\n const connectionsByKey = useMemo(() => {\n const map = new Map<string, Array<{ connectionId: string; label?: string | null; status?: string }>>();\n pairs.forEach((pair, idx) => {\n const items = connectionsQueries[idx]?.data?.items ?? [];\n map.set(`${pair.providerId}:${pair.toolkit}`, items);\n });\n return map;\n }, [pairs, connectionsQueries]);\n\n // A toolkit \"has a connection\" only when at least one connection is active.\n // Pending/failed rows don't count — this keeps the card hint in sync with the\n // toolkit row control, which also treats only active connections as usable.\n const hasConnection = useCallback(\n (providerId: string, toolkit: string) =>\n (connectionsByKey.get(`${providerId}:${toolkit}`) ?? []).some(connection => connection.status === 'active'),\n [connectionsByKey],\n );\n\n const getConnections = useCallback(\n (providerId: string, toolkit: string) => connectionsByKey.get(`${providerId}:${toolkit}`) ?? [],\n [connectionsByKey],\n );\n\n return { hasConnection, getConnections, isLoading };\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useQueries } from '@tanstack/react-query';\nimport { useMemo } from 'react';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nimport { useToolProviders } from './use-tool-providers';\n\nexport interface AvailableIntegrationTool {\n providerId: string;\n slug: string;\n toolkit: string;\n name?: string;\n description?: string;\n}\n\n/**\n * Upper bound for a single Composio-style `listTools` call. Composio's SDK has\n * no cursor — only `limit` — so we ask for a large page and fan out per\n * `toolkit` to avoid being truncated when many toolkits are allowlisted.\n */\nconst PER_SERVICE_LIMIT = 500;\n\n/**\n * Returns every tool surfaced by every registered ToolProvider, scoped to\n * the provider's `allowedToolkits`/`allowedTools` filter (enforced\n * server-side). Used to render the full available-tools list inline.\n */\nexport const useAllProviderTools = ({\n queryOptions,\n}: {\n /** TanStack overrides applied to every fanned-out query, spread last. `select` must keep the default shape. */\n queryOptions?: {\n toolkits?: MastraQueryOptions<Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listToolkits']>>>;\n tools?: MastraQueryOptions<Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listTools']>>>;\n };\n} = {}) => {\n const client = useMastraClient();\n const integrationsQuery = useToolProviders();\n const integrations = useMemo(() => integrationsQuery.data?.providers ?? [], [integrationsQuery.data?.providers]);\n\n // 1. For every integration, fetch its tool services.\n const serviceQueries = useQueries({\n queries: integrations.map(integration => ({\n queryKey: ['tool-integration-services', integration.id],\n queryFn: () => client.getToolProvider(integration.id).listToolkits(),\n ...queryOptions?.toolkits,\n })),\n });\n\n // 2. Flatten to (providerId, serviceSlug) pairs.\n const servicePairs = useMemo(() => {\n const pairs: Array<{ providerId: string; toolkit: string }> = [];\n integrations.forEach((integration, idx) => {\n const services = serviceQueries[idx]?.data?.data ?? [];\n for (const service of services) {\n pairs.push({ providerId: integration.id, toolkit: service.slug });\n }\n });\n return pairs;\n }, [integrations, serviceQueries]);\n\n // 3. Fan out one tools query per (integration, service).\n const toolsQueries = useQueries({\n queries: servicePairs.map(pair => ({\n queryKey: ['tool-integration-tools-all', pair.providerId, pair.toolkit],\n queryFn: () =>\n client.getToolProvider(pair.providerId).listTools({ toolkit: pair.toolkit, perPage: PER_SERVICE_LIMIT }),\n ...queryOptions?.tools,\n })),\n });\n\n const isLoading =\n integrationsQuery.isLoading || serviceQueries.some(q => q.isLoading) || toolsQueries.some(q => q.isLoading);\n\n const tools = useMemo<AvailableIntegrationTool[]>(() => {\n const out: AvailableIntegrationTool[] = [];\n servicePairs.forEach((pair, idx) => {\n const items = toolsQueries[idx]?.data?.data ?? [];\n for (const item of items) {\n const toolkit = (item as { toolkit?: string }).toolkit ?? pair.toolkit;\n out.push({\n providerId: pair.providerId,\n slug: item.slug,\n toolkit,\n name: (item as { name?: string }).name,\n description: (item as { description?: string }).description,\n });\n }\n });\n return out;\n }, [servicePairs, toolsQueries]);\n\n return { tools, isLoading };\n};\n","import { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\nexport interface AuthorizeArgs {\n providerId: string;\n toolkit: string;\n /**\n * Existing bucket id when re-authorizing; omit for a brand-new connection.\n * Semantics are provider-opaque; for Composio v1 this is the internal user\n * bucket the new connected account should be created under.\n */\n connectionId?: string;\n /**\n * Provider-specific connection fields collected from the picker (e.g.\n * Confluence subdomain). Forwarded to the server's `authorize` body.\n */\n config?: Record<string, unknown>;\n /**\n * Optional human label to persist on the resulting `tool_integration_connections` row.\n */\n label?: string | null;\n /**\n * Ownership scope of the OAuth bucket. `'per-author'` (default) buckets\n * under the caller's authorId.\n */\n scope?: 'per-author' | 'shared' | 'caller-supplied';\n}\n\nexport interface AuthorizeResult {\n status: 'completed' | 'failed';\n /**\n * The `authId` returned by `authorize`, exposed as `connectionId` because\n * for the v1 Composio adapter it is the `connected_account.id` that the\n * caller persists as `Connection.connectionId`.\n */\n connectionId: string;\n}\n\nconst DEFAULT_POLL_INTERVAL_MS = 2000;\nconst DEFAULT_TIMEOUT_MS = 5 * 60_000;\n\nexport interface UseAuthorizeOptions {\n pollIntervalMs?: number;\n timeoutMs?: number;\n openPopup?: (url: string) => Window | null;\n queryOptions?: MastraMutationOptions<AuthorizeResult, AuthorizeArgs>;\n}\n\n/**\n * Drives the OAuth popup + polling loop for a `ToolProvider` provider.\n */\nexport const useAuthorize = (options: UseAuthorizeOptions = {}) => {\n const client = useMastraClient();\n const pollIntervalMs = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const openPopup = options.openPopup ?? ((url: string) => window.open(url, '_blank', 'popup,width=600,height=700'));\n\n return useMutation<AuthorizeResult, Error, AuthorizeArgs>({\n mutationFn: async ({ providerId, toolkit, connectionId, config, label, scope }) => {\n const integration = client.getToolProvider(providerId);\n const normalizedConnectionId = connectionId?.trim();\n const { url, authId } = await integration.authorize({\n toolkit,\n ...(normalizedConnectionId ? { connectionId: normalizedConnectionId } : {}),\n ...(config ? { config } : {}),\n ...(label !== undefined ? { label } : {}),\n ...(scope ? { scope } : {}),\n });\n\n const popup = openPopup(url);\n if (!popup) {\n throw new Error('Popup blocked. Please allow popups for this site.');\n }\n\n const start = Date.now();\n while (Date.now() - start < timeoutMs) {\n await new Promise(resolve => setTimeout(resolve, pollIntervalMs));\n const { status } = await integration.getAuthStatus(authId);\n if (status === 'completed' || status === 'failed') {\n try {\n popup.close();\n } catch {\n // Cross-origin popups may refuse close(); ignore.\n }\n return { status, connectionId: authId };\n }\n }\n\n try {\n popup.close();\n } catch {\n // ignore\n }\n throw new Error('Authorization timed out');\n },\n ...options.queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\nexport interface DisconnectConnectionArgs {\n providerId: string;\n connectionId: string;\n /**\n * When `true`, the server skips the usage check and revokes the\n * connection at the provider before deleting the local row.\n */\n force?: boolean;\n}\n\n/**\n * Calls the provider-side revoke (best-effort) and drops the local\n * `tool_integration_connections` row. Server enforces the soft-vs-force rule.\n */\ntype DisconnectConnectionResponse = Awaited<\n ReturnType<ReturnType<MastraClient['getToolProvider']>['disconnectConnection']>\n>;\n\nexport const useDisconnectConnection = ({\n queryOptions,\n}: { queryOptions?: MastraMutationOptions<DisconnectConnectionResponse, DisconnectConnectionArgs> } = {}) => {\n const client = useMastraClient();\n const qc = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ providerId, connectionId, force }: DisconnectConnectionArgs) => {\n const integration = client.getToolProvider(providerId);\n return integration.disconnectConnection(connectionId, force ? { force } : undefined);\n },\n onSuccess: (_data, vars) => {\n void qc.invalidateQueries({ queryKey: ['tool-integration-connections', vars.providerId] });\n },\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport { isUnauthenticatedError, useCurrentUser } from '../auth';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\nexport interface UseExistingConnectionsOptions {\n /**\n * When `true`, the hook forces the server-side `authorId` filter to the\n * caller's own userId. Builder edit view passes `scopeToSelf: true` so\n * admins see only their own connections, never other authors' rows.\n *\n * Non-admin callers see the same result either way — the server already\n * scopes to the caller's bucket — but the explicit filter keeps caches\n * consistent and prevents admin cross-author leakage in the picker.\n */\n scopeToSelf?: boolean;\n}\n\ntype ConnectionsResponse = Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listConnections']>>;\n\n/**\n * Lists existing provider connections for the caller, scoped to a tool\n * service. Powers the \"use existing connection\" path in the picker so\n * authors can pin previously-authorized accounts without re-running OAuth.\n *\n * The connection owner is resolved server-side from the request's auth\n * context. Admin callers receive cross-author rows by default; pass\n * `scopeToSelf: true` to narrow the response to the caller's own bucket\n * (used by the Builder edit view).\n */\nexport const useExistingConnections = <TData = ConnectionsResponse>({\n providerId,\n toolkit,\n scopeToSelf = false,\n queryOptions,\n}: UseExistingConnectionsOptions & {\n providerId: string | null | undefined;\n toolkit: string | null | undefined;\n queryOptions?: MastraQueryOptions<ConnectionsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n const currentUserQuery = useCurrentUser();\n const callerAuthorId = currentUserQuery.data?.id;\n\n const callerReady = !scopeToSelf || currentUserQuery.isSuccess || isUnauthenticatedError(currentUserQuery.error);\n\n const enabled = !!providerId && !!toolkit && callerReady;\n\n return useQuery({\n queryKey: scopeToSelf\n ? ['tool-integration-connections', providerId, toolkit, callerAuthorId]\n : ['tool-integration-connections', providerId, toolkit],\n queryFn: () =>\n client.getToolProvider(providerId!).listConnections({\n toolkit: toolkit!,\n ...(scopeToSelf && callerAuthorId ? { authorId: callerAuthorId } : {}),\n }),\n enabled,\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ProviderToolsResponse = Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listTools']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useProviderTools = <TData = ProviderToolsResponse>({\n providerId,\n params,\n queryOptions,\n}: {\n providerId: string | null;\n params?: { toolkit?: string; search?: string };\n queryOptions?: MastraQueryOptions<ProviderToolsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool-provider-tools', providerId, params?.toolkit, params?.search],\n queryFn: () => client.getToolProvider(providerId!).listTools(params),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ToolkitsResponse = Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['listToolkits']>>;\n\n/**\n * Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.\n */\nexport const useToolkits = <TData = ToolkitsResponse>({\n providerId,\n queryOptions,\n}: {\n providerId: string | null;\n queryOptions?: MastraQueryOptions<ToolkitsResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool-provider-toolkits', providerId],\n queryFn: () => client.getToolProvider(providerId!).listToolkits(),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { useMutation, useQueryClient } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\nexport interface UpdateConnectionArgs {\n providerId: string;\n connectionId: string;\n /**\n * New display label. Pass `null` (or an empty string) to clear the label.\n */\n label: string | null;\n}\n\n/**\n * Renames a `tool_provider_connections` row in place. Server enforces\n * ownership (owner / admin / shared scope). On success, invalidates both\n * the per-toolkit and the fan-out connection lists so the picker re-fetches.\n */\ntype UpdateConnectionResponse = Awaited<ReturnType<ReturnType<MastraClient['getToolProvider']>['updateConnection']>>;\n\nexport const useUpdateConnection = ({\n queryOptions,\n}: { queryOptions?: MastraMutationOptions<UpdateConnectionResponse, UpdateConnectionArgs> } = {}) => {\n const client = useMastraClient();\n const qc = useQueryClient();\n\n return useMutation({\n mutationFn: async ({ providerId, connectionId, label }: UpdateConnectionArgs) => {\n const integration = client.getToolProvider(providerId);\n return integration.updateConnection(connectionId, { label });\n },\n onSuccess: (_data, vars) => {\n void qc.invalidateQueries({ queryKey: ['tool-integration-connections', vars.providerId] });\n void qc.invalidateQueries({ queryKey: ['tool-integration-connections-all', vars.providerId] });\n },\n ...queryOptions,\n });\n};\n"],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_mastra_client_context = require("../../mastra-client-context-
|
|
2
|
+
const require_mastra_client_context = require("../../mastra-client-context-DX8wJM9p.cjs");
|
|
3
3
|
let _tanstack_react_query = require("@tanstack/react-query");
|
|
4
4
|
let _mastra_core_di = require("@mastra/core/di");
|
|
5
|
-
|
|
5
|
+
// src/hooks/tools/use-all-tools.ts
|
|
6
6
|
const useTools = ({ requestContext, queryOptions } = {}) => {
|
|
7
7
|
const client = require_mastra_client_context.useMastraClient();
|
|
8
8
|
return (0, _tanstack_react_query.useQuery)({
|
|
@@ -23,8 +23,7 @@ const useTool = ({ toolId, requestContext, queryOptions }) => {
|
|
|
23
23
|
...queryOptions
|
|
24
24
|
});
|
|
25
25
|
};
|
|
26
|
-
|
|
27
|
-
//#region src/hooks/tools/use-execute-tool.ts
|
|
26
|
+
// src/hooks/tools/use-execute-tool.ts
|
|
28
27
|
const useExecuteTool = ({ queryOptions } = {}) => {
|
|
29
28
|
const client = require_mastra_client_context.useMastraClient();
|
|
30
29
|
return (0, _tanstack_react_query.useMutation)({
|
|
@@ -41,7 +40,6 @@ const useExecuteTool = ({ queryOptions } = {}) => {
|
|
|
41
40
|
...queryOptions
|
|
42
41
|
});
|
|
43
42
|
};
|
|
44
|
-
//#endregion
|
|
45
43
|
exports.useExecuteTool = useExecuteTool;
|
|
46
44
|
exports.useTool = useTool;
|
|
47
45
|
exports.useTools = useTools;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["useMastraClient","useQuery","useMastraClient","useMutation","RequestContext"],"sources":["../../../src/hooks/tools/use-all-tools.ts","../../../src/hooks/tools/use-execute-tool.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ToolsResponse = Awaited<ReturnType<MastraClient['listTools']>>;\ntype ToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getTool']>['details']>>;\n\nexport const useTools = <TData = ToolsResponse>({\n requestContext,\n queryOptions,\n}: {\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ToolsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['tools', requestContext],\n queryFn: () => client.listTools(requestContext),\n ...queryOptions,\n });\n};\n\nexport const useTool = <TData = ToolResponse>({\n toolId,\n requestContext,\n queryOptions,\n}: {\n toolId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ToolResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool', toolId, requestContext],\n queryFn: () => client.getTool(toolId).details(requestContext),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { RequestContext } from '@mastra/core/di';\n\nimport { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype ExecuteToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getTool']>['execute']>>;\ntype ExecuteToolVariables = { toolId: string; input: any; requestContext?: Record<string, any> };\n\nexport const useExecuteTool = ({\n queryOptions,\n}: {\n queryOptions?: MastraMutationOptions<ExecuteToolResponse, ExecuteToolVariables>;\n} = {}) => {\n const client = useMastraClient();\n return useMutation({\n mutationFn: async ({ toolId, input, requestContext: playgroundRequestContext }: ExecuteToolVariables) => {\n const requestContext = new RequestContext();\n Object.entries(playgroundRequestContext ?? {}).forEach(([key, value]) => {\n requestContext.set(key, value);\n });\n\n const tool = client.getTool(toolId);\n return tool.execute({ data: input, requestContext });\n },\n ...queryOptions,\n });\n};\n"],"mappings":";;;;;AASA,MAAa,YAAmC,EAC9C,gBACA,iBAIE,CAAC,MAAoC;CACvC,MAAM,SAASA,8BAAAA,gBAAgB;CAC/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU,CAAC,SAAS,cAAc;EAClC,eAAe,OAAO,UAAU,cAAc;EAC9C,GAAG;CACL,CAAC;AACH;AAEA,MAAa,WAAiC,EAC5C,QACA,gBACA,mBAKkC;CAClC,MAAM,SAASD,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU;GAAC;GAAQ;GAAQ;EAAc;EACzC,eAAe,OAAO,QAAQ,MAAM,CAAC,CAAC,QAAQ,cAAc;EAC5D,GAAG;CACL,CAAC;AACH
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["useMastraClient","useQuery","useMastraClient","useMutation","RequestContext"],"sources":["../../../src/hooks/tools/use-all-tools.ts","../../../src/hooks/tools/use-execute-tool.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ToolsResponse = Awaited<ReturnType<MastraClient['listTools']>>;\ntype ToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getTool']>['details']>>;\n\nexport const useTools = <TData = ToolsResponse>({\n requestContext,\n queryOptions,\n}: {\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ToolsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['tools', requestContext],\n queryFn: () => client.listTools(requestContext),\n ...queryOptions,\n });\n};\n\nexport const useTool = <TData = ToolResponse>({\n toolId,\n requestContext,\n queryOptions,\n}: {\n toolId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ToolResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool', toolId, requestContext],\n queryFn: () => client.getTool(toolId).details(requestContext),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { RequestContext } from '@mastra/core/di';\n\nimport { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype ExecuteToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getTool']>['execute']>>;\ntype ExecuteToolVariables = { toolId: string; input: any; requestContext?: Record<string, any> };\n\nexport const useExecuteTool = ({\n queryOptions,\n}: {\n queryOptions?: MastraMutationOptions<ExecuteToolResponse, ExecuteToolVariables>;\n} = {}) => {\n const client = useMastraClient();\n return useMutation({\n mutationFn: async ({ toolId, input, requestContext: playgroundRequestContext }: ExecuteToolVariables) => {\n const requestContext = new RequestContext();\n Object.entries(playgroundRequestContext ?? {}).forEach(([key, value]) => {\n requestContext.set(key, value);\n });\n\n const tool = client.getTool(toolId);\n return tool.execute({ data: input, requestContext });\n },\n ...queryOptions,\n });\n};\n"],"mappings":";;;;;AASA,MAAa,YAAmC,EAC9C,gBACA,iBAIE,CAAC,MAAoC;CACvC,MAAM,SAASA,8BAAAA,gBAAgB;CAC/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU,CAAC,SAAS,cAAc;EAClC,eAAe,OAAO,UAAU,cAAc;EAC9C,GAAG;CACL,CAAC;AACH;AAEA,MAAa,WAAiC,EAC5C,QACA,gBACA,mBAKkC;CAClC,MAAM,SAASD,8BAAAA,gBAAgB;CAE/B,QAAA,GAAOC,sBAAAA,SAAAA,CAAS;EACd,UAAU;GAAC;GAAQ;GAAQ;EAAc;EACzC,eAAe,OAAO,QAAQ,MAAM,CAAC,CAAC,QAAQ,cAAc;EAC5D,GAAG;CACL,CAAC;AACH;;AC9BA,MAAa,kBAAkB,EAC7B,iBAGE,CAAC,MAAM;CACT,MAAM,SAASC,8BAAAA,gBAAgB;CAC/B,QAAA,GAAOC,sBAAAA,YAAAA,CAAY;EACjB,YAAY,OAAO,EAAE,QAAQ,OAAO,gBAAgB,+BAAqD;GACvG,MAAM,iBAAiB,IAAIC,gBAAAA,eAAe;GAC1C,OAAO,QAAQ,4BAA4B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;IACvE,eAAe,IAAI,KAAK,KAAK;GAC/B,CAAC;GAGD,OADa,OAAO,QAAQ,MAClB,CAAC,CAAC,QAAQ;IAAE,MAAM;IAAO;GAAe,CAAC;EACrD;EACA,GAAG;CACL,CAAC;AACH"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as useMastraClient } from "../../mastra-client-context-
|
|
1
|
+
import { n as useMastraClient } from "../../mastra-client-context-DQ5z_ze9.js";
|
|
2
2
|
import { useMutation, useQuery } from "@tanstack/react-query";
|
|
3
3
|
import { RequestContext } from "@mastra/core/di";
|
|
4
|
-
|
|
4
|
+
// src/hooks/tools/use-all-tools.ts
|
|
5
5
|
const useTools = ({ requestContext, queryOptions } = {}) => {
|
|
6
6
|
const client = useMastraClient();
|
|
7
7
|
return useQuery({
|
|
@@ -22,8 +22,7 @@ const useTool = ({ toolId, requestContext, queryOptions }) => {
|
|
|
22
22
|
...queryOptions
|
|
23
23
|
});
|
|
24
24
|
};
|
|
25
|
-
|
|
26
|
-
//#region src/hooks/tools/use-execute-tool.ts
|
|
25
|
+
// src/hooks/tools/use-execute-tool.ts
|
|
27
26
|
const useExecuteTool = ({ queryOptions } = {}) => {
|
|
28
27
|
const client = useMastraClient();
|
|
29
28
|
return useMutation({
|
|
@@ -40,7 +39,6 @@ const useExecuteTool = ({ queryOptions } = {}) => {
|
|
|
40
39
|
...queryOptions
|
|
41
40
|
});
|
|
42
41
|
};
|
|
43
|
-
//#endregion
|
|
44
42
|
export { useExecuteTool, useTool, useTools };
|
|
45
43
|
|
|
46
44
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/tools/use-all-tools.ts","../../../src/hooks/tools/use-execute-tool.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ToolsResponse = Awaited<ReturnType<MastraClient['listTools']>>;\ntype ToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getTool']>['details']>>;\n\nexport const useTools = <TData = ToolsResponse>({\n requestContext,\n queryOptions,\n}: {\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ToolsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['tools', requestContext],\n queryFn: () => client.listTools(requestContext),\n ...queryOptions,\n });\n};\n\nexport const useTool = <TData = ToolResponse>({\n toolId,\n requestContext,\n queryOptions,\n}: {\n toolId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ToolResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool', toolId, requestContext],\n queryFn: () => client.getTool(toolId).details(requestContext),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { RequestContext } from '@mastra/core/di';\n\nimport { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype ExecuteToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getTool']>['execute']>>;\ntype ExecuteToolVariables = { toolId: string; input: any; requestContext?: Record<string, any> };\n\nexport const useExecuteTool = ({\n queryOptions,\n}: {\n queryOptions?: MastraMutationOptions<ExecuteToolResponse, ExecuteToolVariables>;\n} = {}) => {\n const client = useMastraClient();\n return useMutation({\n mutationFn: async ({ toolId, input, requestContext: playgroundRequestContext }: ExecuteToolVariables) => {\n const requestContext = new RequestContext();\n Object.entries(playgroundRequestContext ?? {}).forEach(([key, value]) => {\n requestContext.set(key, value);\n });\n\n const tool = client.getTool(toolId);\n return tool.execute({ data: input, requestContext });\n },\n ...queryOptions,\n });\n};\n"],"mappings":";;;;AASA,MAAa,YAAmC,EAC9C,gBACA,iBAIE,CAAC,MAAoC;CACvC,MAAM,SAAS,gBAAgB;CAC/B,OAAO,SAAS;EACd,UAAU,CAAC,SAAS,cAAc;EAClC,eAAe,OAAO,UAAU,cAAc;EAC9C,GAAG;CACL,CAAC;AACH;AAEA,MAAa,WAAiC,EAC5C,QACA,gBACA,mBAKkC;CAClC,MAAM,SAAS,gBAAgB;CAE/B,OAAO,SAAS;EACd,UAAU;GAAC;GAAQ;GAAQ;EAAc;EACzC,eAAe,OAAO,QAAQ,MAAM,CAAC,CAAC,QAAQ,cAAc;EAC5D,GAAG;CACL,CAAC;AACH
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/hooks/tools/use-all-tools.ts","../../../src/hooks/tools/use-execute-tool.ts"],"sourcesContent":["import type { MastraClient } from '@mastra/client-js';\nimport type { UseQueryResult } from '@tanstack/react-query';\nimport { useQuery } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraQueryOptions } from '../shared/query-options';\n\ntype ToolsResponse = Awaited<ReturnType<MastraClient['listTools']>>;\ntype ToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getTool']>['details']>>;\n\nexport const useTools = <TData = ToolsResponse>({\n requestContext,\n queryOptions,\n}: {\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ToolsResponse, TData>;\n} = {}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n return useQuery({\n queryKey: ['tools', requestContext],\n queryFn: () => client.listTools(requestContext),\n ...queryOptions,\n });\n};\n\nexport const useTool = <TData = ToolResponse>({\n toolId,\n requestContext,\n queryOptions,\n}: {\n toolId: string;\n requestContext?: Record<string, any>;\n queryOptions?: MastraQueryOptions<ToolResponse, TData>;\n}): UseQueryResult<TData, Error> => {\n const client = useMastraClient();\n\n return useQuery({\n queryKey: ['tool', toolId, requestContext],\n queryFn: () => client.getTool(toolId).details(requestContext),\n ...queryOptions,\n });\n};\n","import type { MastraClient } from '@mastra/client-js';\nimport { RequestContext } from '@mastra/core/di';\n\nimport { useMutation } from '@tanstack/react-query';\nimport { useMastraClient } from '../../mastra-client-context';\nimport type { MastraMutationOptions } from '../shared/query-options';\n\ntype ExecuteToolResponse = Awaited<ReturnType<ReturnType<MastraClient['getTool']>['execute']>>;\ntype ExecuteToolVariables = { toolId: string; input: any; requestContext?: Record<string, any> };\n\nexport const useExecuteTool = ({\n queryOptions,\n}: {\n queryOptions?: MastraMutationOptions<ExecuteToolResponse, ExecuteToolVariables>;\n} = {}) => {\n const client = useMastraClient();\n return useMutation({\n mutationFn: async ({ toolId, input, requestContext: playgroundRequestContext }: ExecuteToolVariables) => {\n const requestContext = new RequestContext();\n Object.entries(playgroundRequestContext ?? {}).forEach(([key, value]) => {\n requestContext.set(key, value);\n });\n\n const tool = client.getTool(toolId);\n return tool.execute({ data: input, requestContext });\n },\n ...queryOptions,\n });\n};\n"],"mappings":";;;;AASA,MAAa,YAAmC,EAC9C,gBACA,iBAIE,CAAC,MAAoC;CACvC,MAAM,SAAS,gBAAgB;CAC/B,OAAO,SAAS;EACd,UAAU,CAAC,SAAS,cAAc;EAClC,eAAe,OAAO,UAAU,cAAc;EAC9C,GAAG;CACL,CAAC;AACH;AAEA,MAAa,WAAiC,EAC5C,QACA,gBACA,mBAKkC;CAClC,MAAM,SAAS,gBAAgB;CAE/B,OAAO,SAAS;EACd,UAAU;GAAC;GAAQ;GAAQ;EAAc;EACzC,eAAe,OAAO,QAAQ,MAAM,CAAC,CAAC,QAAQ,cAAc;EAC5D,GAAG;CACL,CAAC;AACH;;AC9BA,MAAa,kBAAkB,EAC7B,iBAGE,CAAC,MAAM;CACT,MAAM,SAAS,gBAAgB;CAC/B,OAAO,YAAY;EACjB,YAAY,OAAO,EAAE,QAAQ,OAAO,gBAAgB,+BAAqD;GACvG,MAAM,iBAAiB,IAAI,eAAe;GAC1C,OAAO,QAAQ,4BAA4B,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;IACvE,eAAe,IAAI,KAAK,KAAK;GAC/B,CAAC;GAGD,OADa,OAAO,QAAQ,MAClB,CAAC,CAAC,QAAQ;IAAE,MAAM;IAAO;GAAe,CAAC;EACrD;EACA,GAAG;CACL,CAAC;AACH"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_mastra_client_context = require("../../mastra-client-context-
|
|
3
|
-
const require_use_in_view = require("../../use-in-view-
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const
|
|
2
|
+
const require_mastra_client_context = require("../../mastra-client-context-DX8wJM9p.cjs");
|
|
3
|
+
const require_use_in_view = require("../../use-in-view-BxdrrnCw.cjs");
|
|
4
|
+
const require_query_utils = require("../../query-utils-BVgE_xxj.cjs");
|
|
5
|
+
const require_feedback_refetch_interval = require("../../feedback-refetch-interval-BBcT9r8s.cjs");
|
|
6
|
+
const require_map = require("../../map-BGoWBTGy.cjs");
|
|
7
7
|
let _mastra_client_js = require("@mastra/client-js");
|
|
8
8
|
let react = require("react");
|
|
9
9
|
let _tanstack_react_query = require("@tanstack/react-query");
|
|
10
10
|
let _mastra_core_observability = require("@mastra/core/observability");
|
|
11
|
-
|
|
11
|
+
// src/hooks/traces/discovery-cache.ts
|
|
12
12
|
/**
|
|
13
13
|
* How long discovery results (tags, environments, service names, entity
|
|
14
14
|
* names) stay fresh on the client.
|
|
@@ -20,8 +20,7 @@ let _mastra_core_observability = require("@mastra/core/observability");
|
|
|
20
20
|
* client from asking more often than the answer can change.
|
|
21
21
|
*/
|
|
22
22
|
const DISCOVERY_STALE_TIME = 3e5;
|
|
23
|
-
|
|
24
|
-
//#region src/hooks/traces/use-branch.ts
|
|
23
|
+
// src/hooks/traces/use-branch.ts
|
|
25
24
|
/**
|
|
26
25
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
27
26
|
*/
|
|
@@ -46,8 +45,7 @@ function useBranch({ traceId, spanId, depth, queryOptions }) {
|
|
|
46
45
|
...queryOptions
|
|
47
46
|
});
|
|
48
47
|
}
|
|
49
|
-
|
|
50
|
-
//#region src/hooks/traces/types.ts
|
|
48
|
+
// src/hooks/traces/types.ts
|
|
51
49
|
const ROOT_ENTITY_TYPES = {
|
|
52
50
|
AGENT: "agent",
|
|
53
51
|
WORKFLOW: "workflow_run",
|
|
@@ -55,8 +53,7 @@ const ROOT_ENTITY_TYPES = {
|
|
|
55
53
|
INGEST: "rag_ingestion",
|
|
56
54
|
CLASSIFIER: "classifier"
|
|
57
55
|
};
|
|
58
|
-
|
|
59
|
-
//#region src/hooks/traces/use-entity-names.ts
|
|
56
|
+
// src/hooks/traces/use-entity-names.ts
|
|
60
57
|
function resolveEntityType(entityType) {
|
|
61
58
|
return Object.values(_mastra_core_observability.EntityType).find((candidate) => candidate === entityType);
|
|
62
59
|
}
|
|
@@ -96,8 +93,7 @@ const useEntityNames = ({ entityType, rootOnly = false, queryOptions } = {}) =>
|
|
|
96
93
|
...queryOptions
|
|
97
94
|
});
|
|
98
95
|
};
|
|
99
|
-
|
|
100
|
-
//#region src/hooks/traces/use-environments.ts
|
|
96
|
+
// src/hooks/traces/use-environments.ts
|
|
101
97
|
const useEnvironments = ({ queryOptions } = {}) => {
|
|
102
98
|
const client = require_mastra_client_context.useMastraClient();
|
|
103
99
|
return (0, _tanstack_react_query.useQuery)({
|
|
@@ -115,8 +111,7 @@ const useEnvironments = ({ queryOptions } = {}) => {
|
|
|
115
111
|
...queryOptions
|
|
116
112
|
});
|
|
117
113
|
};
|
|
118
|
-
|
|
119
|
-
//#region src/hooks/traces/use-service-names.ts
|
|
114
|
+
// src/hooks/traces/use-service-names.ts
|
|
120
115
|
const useServiceNames = ({ queryOptions } = {}) => {
|
|
121
116
|
const client = require_mastra_client_context.useMastraClient();
|
|
122
117
|
return (0, _tanstack_react_query.useQuery)({
|
|
@@ -134,8 +129,7 @@ const useServiceNames = ({ queryOptions } = {}) => {
|
|
|
134
129
|
...queryOptions
|
|
135
130
|
});
|
|
136
131
|
};
|
|
137
|
-
|
|
138
|
-
//#region src/hooks/traces/use-span-detail.ts
|
|
132
|
+
// src/hooks/traces/use-span-detail.ts
|
|
139
133
|
const IMMUTABLE_CACHE_TIME$1 = 2592e6;
|
|
140
134
|
/**
|
|
141
135
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
@@ -159,8 +153,7 @@ function useSpanDetail({ traceId, spanId, queryOptions }) {
|
|
|
159
153
|
...queryOptions
|
|
160
154
|
});
|
|
161
155
|
}
|
|
162
|
-
|
|
163
|
-
//#region src/hooks/traces/use-tags.ts
|
|
156
|
+
// src/hooks/traces/use-tags.ts
|
|
164
157
|
const useTags = ({ queryOptions } = {}) => {
|
|
165
158
|
const client = require_mastra_client_context.useMastraClient();
|
|
166
159
|
return (0, _tanstack_react_query.useQuery)({
|
|
@@ -178,8 +171,7 @@ const useTags = ({ queryOptions } = {}) => {
|
|
|
178
171
|
...queryOptions
|
|
179
172
|
});
|
|
180
173
|
};
|
|
181
|
-
|
|
182
|
-
//#region src/hooks/traces/use-thread-has-other-traces.ts
|
|
174
|
+
// src/hooks/traces/use-thread-has-other-traces.ts
|
|
183
175
|
/**
|
|
184
176
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
185
177
|
*/
|
|
@@ -199,8 +191,7 @@ function useThreadHasOtherTraces({ threadId, queryOptions }) {
|
|
|
199
191
|
});
|
|
200
192
|
return data ?? false;
|
|
201
193
|
}
|
|
202
|
-
|
|
203
|
-
//#region src/hooks/traces/use-trace-light-spans.ts
|
|
194
|
+
// src/hooks/traces/use-trace-light-spans.ts
|
|
204
195
|
const IMMUTABLE_CACHE_TIME = 2592e6;
|
|
205
196
|
/**
|
|
206
197
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
@@ -220,8 +211,7 @@ function useTraceLightSpans({ traceId, queryOptions }) {
|
|
|
220
211
|
...queryOptions
|
|
221
212
|
});
|
|
222
213
|
}
|
|
223
|
-
|
|
224
|
-
//#region src/hooks/traces/use-trace-spans.ts
|
|
214
|
+
// src/hooks/traces/use-trace-spans.ts
|
|
225
215
|
const traceSpansQueryOptions = (client, traceId) => (0, _tanstack_react_query.queryOptions)({
|
|
226
216
|
queryKey: ["trace-spans", traceId],
|
|
227
217
|
queryFn: async () => {
|
|
@@ -274,8 +264,7 @@ function useTraceSpansQueries({ traceIds, select, fallback, queryOptions }) {
|
|
|
274
264
|
combine: (results) => results.map((result, index) => result.data === void 0 ? fallback(traceIds[index] ?? "") : result.data)
|
|
275
265
|
});
|
|
276
266
|
}
|
|
277
|
-
|
|
278
|
-
//#region src/hooks/traces/use-trace-or-branch-spans.ts
|
|
267
|
+
// src/hooks/traces/use-trace-or-branch-spans.ts
|
|
279
268
|
/**
|
|
280
269
|
* Unified data source for the trace/span detail panel. Returns trace spans (full tree from the
|
|
281
270
|
* root) in traces mode, or branch spans (subtree rooted at `anchorSpanId`) in branches mode.
|
|
@@ -317,8 +306,44 @@ function useTraceOrBranchSpans({ traceId, anchorSpanId, listMode, depth, queryOp
|
|
|
317
306
|
error: traceQuery.error
|
|
318
307
|
};
|
|
319
308
|
}
|
|
320
|
-
|
|
321
|
-
|
|
309
|
+
// src/hooks/traces/use-span-aggregate.ts
|
|
310
|
+
/**
|
|
311
|
+
* Runs `aggregateSpans()` for `request`. Check `useSpanAggregateAvailable()` before enabling it.
|
|
312
|
+
*
|
|
313
|
+
* Like `useTraceAggregate()`, it doesn't poll or retry: the client already retries server errors,
|
|
314
|
+
* and a rejected request (4xx) fails once.
|
|
315
|
+
*/
|
|
316
|
+
function useSpanAggregate({ request, enabled = true, queryOptions }) {
|
|
317
|
+
const client = require_mastra_client_context.useMastraClient();
|
|
318
|
+
return (0, _tanstack_react_query.useQuery)({
|
|
319
|
+
queryKey: ["span-aggregate", request],
|
|
320
|
+
queryFn: () => client.aggregateSpans(request),
|
|
321
|
+
enabled,
|
|
322
|
+
retry: false,
|
|
323
|
+
refetchOnWindowFocus: false,
|
|
324
|
+
...queryOptions
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
// src/hooks/traces/use-trace-aggregate.ts
|
|
328
|
+
/**
|
|
329
|
+
* Runs `aggregateTraces()` for `request`. Check `useTraceAggregateAvailable()` before enabling it.
|
|
330
|
+
*
|
|
331
|
+
* It doesn't poll: grouped requests over large tenants take seconds, so it refetches only when the
|
|
332
|
+
* request changes or the caller calls `refetch()`. The client already retries server errors, so
|
|
333
|
+
* React Query doesn't retry on top of it, and a rejected request (4xx) fails once.
|
|
334
|
+
*/
|
|
335
|
+
function useTraceAggregate({ request, enabled = true, queryOptions }) {
|
|
336
|
+
const client = require_mastra_client_context.useMastraClient();
|
|
337
|
+
return (0, _tanstack_react_query.useQuery)({
|
|
338
|
+
queryKey: ["trace-aggregate", request],
|
|
339
|
+
queryFn: ({ signal }) => client.aggregateTraces(request, { signal }),
|
|
340
|
+
enabled,
|
|
341
|
+
retry: false,
|
|
342
|
+
refetchOnWindowFocus: false,
|
|
343
|
+
...queryOptions
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
// src/hooks/traces/use-trace-query.ts
|
|
322
347
|
const TRACE_QUERY_PER_PAGE = 25;
|
|
323
348
|
/** Max traces per delta request; the server caps `limit` at 100. */
|
|
324
349
|
const TRACE_QUERY_DELTA_LIMIT = 100;
|
|
@@ -627,8 +652,7 @@ function useTraceQueryLatest({ query, limit = 25, enabled = true, refetchInterva
|
|
|
627
652
|
...queryOptions
|
|
628
653
|
});
|
|
629
654
|
}
|
|
630
|
-
|
|
631
|
-
//#region src/hooks/traces/use-query-spans.ts
|
|
655
|
+
// src/hooks/traces/use-query-spans.ts
|
|
632
656
|
const SPAN_QUERY_PER_PAGE = 25;
|
|
633
657
|
const selectSpans = (data) => data.pages.flatMap((page) => page.spans);
|
|
634
658
|
/** Queries completed spans with cursor pagination and viewport-driven loading. */
|
|
@@ -679,8 +703,7 @@ function useQuerySpans({ query, limit = 25, enabled = true, queryOptions }) {
|
|
|
679
703
|
refetch: () => void refetch()
|
|
680
704
|
};
|
|
681
705
|
}
|
|
682
|
-
|
|
683
|
-
//#region src/hooks/traces/use-query-threads.ts
|
|
706
|
+
// src/hooks/traces/use-query-threads.ts
|
|
684
707
|
const THREAD_QUERY_PER_PAGE = 25;
|
|
685
708
|
const selectThreads = (data) => data.pages.flatMap((page) => page.threads);
|
|
686
709
|
/** Queries thread rows with cursor pagination and viewport-driven loading. */
|
|
@@ -731,8 +754,7 @@ function useQueryThreads({ query, limit = 25, enabled = true, queryOptions }) {
|
|
|
731
754
|
refetch: () => void refetch()
|
|
732
755
|
};
|
|
733
756
|
}
|
|
734
|
-
|
|
735
|
-
//#region src/hooks/traces/use-trace-usage.ts
|
|
757
|
+
// src/hooks/traces/use-trace-usage.ts
|
|
736
758
|
const INPUT_TOKEN_METRIC = "mastra_model_total_input_tokens";
|
|
737
759
|
const OUTPUT_TOKEN_METRIC = "mastra_model_total_output_tokens";
|
|
738
760
|
const TRACE_IDS_PER_REQUEST = 500;
|
|
@@ -808,8 +830,7 @@ function useTraceUsage({ traceIds, enabled, autoRefetch, queryOptions }) {
|
|
|
808
830
|
...queryOptions
|
|
809
831
|
});
|
|
810
832
|
}
|
|
811
|
-
|
|
812
|
-
//#region src/hooks/traces/use-traces.tsx
|
|
833
|
+
// src/hooks/traces/use-traces.tsx
|
|
813
834
|
const deltaSupportByClient = /* @__PURE__ */ new WeakMap();
|
|
814
835
|
const lightListSupportByClient = /* @__PURE__ */ new WeakMap();
|
|
815
836
|
/** When the current run of light-endpoint 500s started, per client. Cleared by any light success. */
|
|
@@ -1199,8 +1220,7 @@ const useTraces = ({ filters, listMode = "traces", polling = {}, enabled = true,
|
|
|
1199
1220
|
recentlyAddedKeys
|
|
1200
1221
|
};
|
|
1201
1222
|
};
|
|
1202
|
-
|
|
1203
|
-
//#region src/hooks/traces/use-create-feedback.tsx
|
|
1223
|
+
// src/hooks/traces/use-create-feedback.tsx
|
|
1204
1224
|
/**
|
|
1205
1225
|
* Submits a free-text comment as a feedback record, scoped to the trace or to a
|
|
1206
1226
|
* single span, then invalidates the matching feedback list so it refreshes.
|
|
@@ -1224,8 +1244,7 @@ const useCreateFeedback = ({ traceId, spanId, queryOptions }) => {
|
|
|
1224
1244
|
...queryOptions
|
|
1225
1245
|
});
|
|
1226
1246
|
};
|
|
1227
|
-
|
|
1228
|
-
//#region src/hooks/traces/use-delete-feedback.tsx
|
|
1247
|
+
// src/hooks/traces/use-delete-feedback.tsx
|
|
1229
1248
|
/**
|
|
1230
1249
|
* Deletes a single feedback record by id, then invalidates the matching
|
|
1231
1250
|
* feedback list (trace- or span-scoped) so it refreshes.
|
|
@@ -1243,8 +1262,7 @@ const useDeleteFeedback = ({ traceId, spanId, queryOptions }) => {
|
|
|
1243
1262
|
...queryOptions
|
|
1244
1263
|
});
|
|
1245
1264
|
};
|
|
1246
|
-
|
|
1247
|
-
//#region src/hooks/traces/use-span-feedback.tsx
|
|
1265
|
+
// src/hooks/traces/use-span-feedback.tsx
|
|
1248
1266
|
/**
|
|
1249
1267
|
* Feedback scoped to a single span. Both identifiers are required: without a `spanId`
|
|
1250
1268
|
* the query stays disabled rather than falling back to trace-wide feedback.
|
|
@@ -1277,8 +1295,7 @@ const useSpanFeedback = ({ traceId = "", spanId = "", page, queryOptions }) => {
|
|
|
1277
1295
|
...queryOptions
|
|
1278
1296
|
});
|
|
1279
1297
|
};
|
|
1280
|
-
|
|
1281
|
-
//#region src/hooks/traces/use-trace-feedback.tsx
|
|
1298
|
+
// src/hooks/traces/use-trace-feedback.tsx
|
|
1282
1299
|
/** Loads a page of trace-level feedback and stops polling when storage cannot serve feedback. */
|
|
1283
1300
|
/**
|
|
1284
1301
|
* Does not guard on empty ids; pass `queryOptions: { enabled }` to skip the fetch.
|
|
@@ -1320,8 +1337,7 @@ const useTraceFeedback = ({ traceId = "", page, queryOptions }) => {
|
|
|
1320
1337
|
...queryOptions
|
|
1321
1338
|
});
|
|
1322
1339
|
};
|
|
1323
|
-
|
|
1324
|
-
//#region src/hooks/traces/use-trace-metadata-filter-fields.ts
|
|
1340
|
+
// src/hooks/traces/use-trace-metadata-filter-fields.ts
|
|
1325
1341
|
const DISCOVERY_LIMIT = 100;
|
|
1326
1342
|
const EMPTY_FIELDS = {
|
|
1327
1343
|
canonicalFields: [],
|
|
@@ -1394,17 +1410,16 @@ const useTraceMetadataFilterFields = ({ timeRange, queryOptions }) => {
|
|
|
1394
1410
|
error: query.error
|
|
1395
1411
|
};
|
|
1396
1412
|
};
|
|
1397
|
-
|
|
1398
|
-
//#region src/hooks/traces/use-trace-column-preferences-storage-key.ts
|
|
1413
|
+
// src/hooks/traces/use-trace-column-preferences-storage-key.ts
|
|
1399
1414
|
/**
|
|
1400
1415
|
* Storage key for the trace list column preferences, scoped to the Mastra server the client
|
|
1401
|
-
* talks to so each project keeps its own column layout
|
|
1416
|
+
* talks to so each project keeps its own column layout, and to the list (traces or spans)
|
|
1417
|
+
* so each list keeps its own selection.
|
|
1402
1418
|
*/
|
|
1403
|
-
function useTraceColumnPreferencesStorageKey() {
|
|
1419
|
+
function useTraceColumnPreferencesStorageKey(scope = "traces") {
|
|
1404
1420
|
const client = require_mastra_client_context.useMastraClient();
|
|
1405
|
-
return `mastra:
|
|
1421
|
+
return `mastra:${scope}:columns:${client.options.baseUrl || (typeof window === "undefined" ? "local" : window.location.origin || "local")}:${client.options.apiPrefix ?? "/api"}`;
|
|
1406
1422
|
}
|
|
1407
|
-
//#endregion
|
|
1408
1423
|
exports.DISCOVERY_STALE_TIME = DISCOVERY_STALE_TIME;
|
|
1409
1424
|
exports.ROOT_ENTITY_TYPES = ROOT_ENTITY_TYPES;
|
|
1410
1425
|
exports.SPAN_QUERY_PER_PAGE = SPAN_QUERY_PER_PAGE;
|
|
@@ -1437,10 +1452,12 @@ exports.useFetchTraceSpans = useFetchTraceSpans;
|
|
|
1437
1452
|
exports.useQuerySpans = useQuerySpans;
|
|
1438
1453
|
exports.useQueryThreads = useQueryThreads;
|
|
1439
1454
|
exports.useServiceNames = useServiceNames;
|
|
1455
|
+
exports.useSpanAggregate = useSpanAggregate;
|
|
1440
1456
|
exports.useSpanDetail = useSpanDetail;
|
|
1441
1457
|
exports.useSpanFeedback = useSpanFeedback;
|
|
1442
1458
|
exports.useTags = useTags;
|
|
1443
1459
|
exports.useThreadHasOtherTraces = useThreadHasOtherTraces;
|
|
1460
|
+
exports.useTraceAggregate = useTraceAggregate;
|
|
1444
1461
|
exports.useTraceColumnPreferencesStorageKey = useTraceColumnPreferencesStorageKey;
|
|
1445
1462
|
exports.useTraceFeedback = useTraceFeedback;
|
|
1446
1463
|
exports.useTraceLightSpans = useTraceLightSpans;
|