@aws/nx-plugin 0.90.1 → 0.92.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/generators.json +8 -0
- package/package.json +1 -1
- package/src/connection/generator.js +6 -3
- package/src/connection/generator.js.map +1 -1
- package/src/py/mcp-server/__snapshots__/generator.spec.ts.snap +14 -7
- package/src/py/mcp-server/generator.js +3 -0
- package/src/py/mcp-server/generator.js.map +1 -1
- package/src/py/mcp-server/schema.d.ts +3 -0
- package/src/py/mcp-server/schema.json +8 -0
- package/src/py/strands-agent/__snapshots__/generator.spec.ts.snap +14 -7
- package/src/py/strands-agent/generator.js +3 -0
- package/src/py/strands-agent/generator.js.map +1 -1
- package/src/py/strands-agent/mcp-connection/generator.js +3 -0
- package/src/py/strands-agent/mcp-connection/generator.js.map +1 -1
- package/src/py/strands-agent/schema.d.ts +3 -0
- package/src/py/strands-agent/schema.json +8 -0
- package/src/ts/mcp-server/__snapshots__/generator.spec.ts.snap +14 -7
- package/src/ts/mcp-server/generator.js +3 -0
- package/src/ts/mcp-server/generator.js.map +1 -1
- package/src/ts/mcp-server/schema.d.ts +3 -0
- package/src/ts/mcp-server/schema.json +8 -0
- package/src/ts/react-website/runtime-config/__snapshots__/generator.spec.ts.snap +3 -1
- package/src/ts/react-website/runtime-config/files/app/components/RuntimeConfig/index.tsx.template +1 -1
- package/src/ts/strands-agent/__snapshots__/generator.spec.ts.snap +14 -7
- package/src/ts/strands-agent/generator.js +3 -1
- package/src/ts/strands-agent/generator.js.map +1 -1
- package/src/ts/strands-agent/mcp-connection/generator.js +3 -0
- package/src/ts/strands-agent/mcp-connection/generator.js.map +1 -1
- package/src/ts/strands-agent/react-connection/__snapshots__/generator.spec.ts.snap +376 -0
- package/src/ts/strands-agent/react-connection/files/src/components/__agentNameClassName__AgentClientProvider.tsx.template +117 -0
- package/src/ts/strands-agent/react-connection/files/src/hooks/use__agentNameClassName__Agent.tsx.template +18 -0
- package/src/ts/strands-agent/react-connection/generator.d.ts +10 -0
- package/src/ts/strands-agent/react-connection/generator.js +129 -0
- package/src/ts/strands-agent/react-connection/generator.js.map +1 -0
- package/src/ts/strands-agent/react-connection/schema.d.ts +15 -0
- package/src/ts/strands-agent/react-connection/schema.json +26 -0
- package/src/ts/strands-agent/react-connection/serve-local.d.ts +17 -0
- package/src/ts/strands-agent/react-connection/serve-local.js +45 -0
- package/src/ts/strands-agent/react-connection/serve-local.js.map +1 -0
- package/src/ts/strands-agent/schema.d.ts +3 -0
- package/src/ts/strands-agent/schema.json +8 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.d.ts +4 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js +2 -0
- package/src/utils/agent-core-constructs/agent-core-constructs.js.map +1 -1
- package/src/utils/agent-core-constructs/files/cdk/app/agent-core/__nameKebabCase__/__nameKebabCase__.ts.template +59 -2
- package/src/utils/agent-core-constructs/files/terraform/app/agent-core/__nameKebabCase__/__nameKebabCase__.tf.template +26 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/strands-agent/generator.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,uCASoB;AAEpB,uCAMwB;AACxB,iDAAsE;AACtE,+CAA0D;AAC1D,6CAA2D;AAC3D,mDAAiE;AACjE,qDAAoD;AACpD,sDAAsE;AACtE,yCAAqD;AACrD,qEAA0E;AAC1E,mGAAwF;
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../packages/nx-plugin/src/ts/strands-agent/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,9 @@ const tsStrandsAgentMcpConnectionGenerator = async (tree, options) => {
|
|
|
23
23
|
if (!agentComponent || !mcpComponent) {
|
|
24
24
|
throw new Error('Both sourceComponent and targetComponent must be provided for ts#strands-agent -> mcp connections');
|
|
25
25
|
}
|
|
26
|
+
if (mcpComponent.auth && mcpComponent.auth !== 'IAM') {
|
|
27
|
+
throw new Error(`MCP server connection currently only supports IAM authentication, but '${mcpComponent.name}' uses '${mcpComponent.auth}' authentication.`);
|
|
28
|
+
}
|
|
26
29
|
const mcpComponentName = mcpComponent.name ?? 'mcp-server';
|
|
27
30
|
const mcpServerClassName = mcpComponent.rc;
|
|
28
31
|
const mcpServerKebabCase = (0, names_1.kebabCase)(mcpServerClassName);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/strands-agent/mcp-connection/generator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generator.js","sourceRoot":"","sources":["../../../../../../../packages/nx-plugin/src/ts/strands-agent/mcp-connection/generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
|
|
2
|
+
|
|
3
|
+
exports[`ts strands agent react connection generator > should generate strands agent react connection files > TestAgentAgentClientProvider.tsx 1`] = `
|
|
4
|
+
"import type { AppRouter } from 'agent-project/src/agent/router.js';
|
|
5
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
6
|
+
import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query';
|
|
7
|
+
import { createContext, FC, PropsWithChildren, useMemo } from 'react';
|
|
8
|
+
import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
|
|
9
|
+
import {
|
|
10
|
+
TRPCClient,
|
|
11
|
+
createTRPCClient,
|
|
12
|
+
createWSClient,
|
|
13
|
+
wsLink,
|
|
14
|
+
} from '@trpc/client';
|
|
15
|
+
import { useSigV4 } from '../hooks/useSigV4';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Build a WebSocket URL from a Bedrock AgentCore Runtime ARN
|
|
19
|
+
*/
|
|
20
|
+
function buildAgentCoreWsUrl(agentRuntimeArn: string): string {
|
|
21
|
+
const region = agentRuntimeArn.split(':')[3];
|
|
22
|
+
return \`wss://bedrock-agentcore.\${region}.amazonaws.com/runtimes/\${encodeURIComponent(agentRuntimeArn)}/ws\`;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface TestAgentAgentTRPCContextValue {
|
|
26
|
+
optionsProxy: ReturnType<typeof createTRPCOptionsProxy<AppRouter>>;
|
|
27
|
+
client: TRPCClient<AppRouter>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const TestAgentAgentTRPCContext =
|
|
31
|
+
createContext<TestAgentAgentTRPCContextValue | null>(null);
|
|
32
|
+
|
|
33
|
+
export const TestAgentAgentClientProvider: FC<PropsWithChildren> = ({
|
|
34
|
+
children,
|
|
35
|
+
}) => {
|
|
36
|
+
const queryClient = useQueryClient();
|
|
37
|
+
const runtimeConfig = useRuntimeConfig();
|
|
38
|
+
const agentRuntimeValue = runtimeConfig.agentRuntimes.TestAgent;
|
|
39
|
+
const sigv4Client = useSigV4();
|
|
40
|
+
|
|
41
|
+
const container = useMemo<TestAgentAgentTRPCContextValue>(() => {
|
|
42
|
+
// If the value is an ARN, convert it to a WebSocket URL
|
|
43
|
+
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
44
|
+
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
45
|
+
: agentRuntimeValue;
|
|
46
|
+
|
|
47
|
+
const wsClient = createWSClient({
|
|
48
|
+
url: async () => {
|
|
49
|
+
const signedRequest = await sigv4Client.sign(wsUrl, {
|
|
50
|
+
method: 'GET',
|
|
51
|
+
aws: { signQuery: true },
|
|
52
|
+
});
|
|
53
|
+
return signedRequest.url;
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const client = createTRPCClient<AppRouter>({
|
|
58
|
+
links: [wsLink({ client: wsClient })],
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
const optionsProxy = createTRPCOptionsProxy<AppRouter>({
|
|
62
|
+
client,
|
|
63
|
+
queryClient,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
return { optionsProxy, client };
|
|
67
|
+
}, [agentRuntimeValue, queryClient, sigv4Client]);
|
|
68
|
+
|
|
69
|
+
return (
|
|
70
|
+
<TestAgentAgentTRPCContext.Provider value={container}>
|
|
71
|
+
{children}
|
|
72
|
+
</TestAgentAgentTRPCContext.Provider>
|
|
73
|
+
);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
export default TestAgentAgentClientProvider;
|
|
77
|
+
"
|
|
78
|
+
`;
|
|
79
|
+
|
|
80
|
+
exports[`ts strands agent react connection generator > should generate strands agent react connection files > useTestAgentAgent.tsx 1`] = `
|
|
81
|
+
"import { useContext } from 'react';
|
|
82
|
+
import {
|
|
83
|
+
TestAgentAgentTRPCContext,
|
|
84
|
+
type TestAgentAgentTRPCContextValue,
|
|
85
|
+
} from '../components/TestAgentAgentClientProvider';
|
|
86
|
+
|
|
87
|
+
export const useTestAgentAgent =
|
|
88
|
+
(): TestAgentAgentTRPCContextValue['optionsProxy'] => {
|
|
89
|
+
const container = useContext(TestAgentAgentTRPCContext);
|
|
90
|
+
if (!container) {
|
|
91
|
+
throw new Error(
|
|
92
|
+
'useTestAgentAgent must be used within TestAgentAgentClientProvider',
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
return container.optionsProxy;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
export const useTestAgentAgentClient =
|
|
99
|
+
(): TestAgentAgentTRPCContextValue['client'] => {
|
|
100
|
+
const container = useContext(TestAgentAgentTRPCContext);
|
|
101
|
+
if (!container) {
|
|
102
|
+
throw new Error(
|
|
103
|
+
'useTestAgentAgentClient must be used within TestAgentAgentClientProvider',
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
return container.client;
|
|
107
|
+
};
|
|
108
|
+
"
|
|
109
|
+
`;
|
|
110
|
+
|
|
111
|
+
exports[`ts strands agent react connection generator > should handle Cognito auth option > TestAgentAgentClientProvider-Cognito.tsx 1`] = `
|
|
112
|
+
"import type { AppRouter } from 'agent-project/src/agent/router.js';
|
|
113
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
114
|
+
import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query';
|
|
115
|
+
import { createContext, FC, PropsWithChildren, useMemo } from 'react';
|
|
116
|
+
import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
|
|
117
|
+
import {
|
|
118
|
+
TRPCClient,
|
|
119
|
+
createTRPCClient,
|
|
120
|
+
createWSClient,
|
|
121
|
+
wsLink,
|
|
122
|
+
} from '@trpc/client';
|
|
123
|
+
import { useAuth } from 'react-oidc-context';
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Utility to base64url-encode a string (for JWT in WebSocket protocol header)
|
|
127
|
+
*/
|
|
128
|
+
function base64UrlEncode(str: string): string {
|
|
129
|
+
return btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=/g, '');
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* Build a WebSocket URL from a Bedrock AgentCore Runtime ARN
|
|
134
|
+
*/
|
|
135
|
+
function buildAgentCoreWsUrl(agentRuntimeArn: string): string {
|
|
136
|
+
const region = agentRuntimeArn.split(':')[3];
|
|
137
|
+
return \`wss://bedrock-agentcore.\${region}.amazonaws.com/runtimes/\${encodeURIComponent(agentRuntimeArn)}/ws\`;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
export interface TestAgentAgentTRPCContextValue {
|
|
141
|
+
optionsProxy: ReturnType<typeof createTRPCOptionsProxy<AppRouter>>;
|
|
142
|
+
client: TRPCClient<AppRouter>;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export const TestAgentAgentTRPCContext =
|
|
146
|
+
createContext<TestAgentAgentTRPCContextValue | null>(null);
|
|
147
|
+
|
|
148
|
+
export const TestAgentAgentClientProvider: FC<PropsWithChildren> = ({
|
|
149
|
+
children,
|
|
150
|
+
}) => {
|
|
151
|
+
const queryClient = useQueryClient();
|
|
152
|
+
const runtimeConfig = useRuntimeConfig();
|
|
153
|
+
const agentRuntimeValue = runtimeConfig.agentRuntimes.TestAgent;
|
|
154
|
+
const auth = useAuth();
|
|
155
|
+
const accessToken = auth?.user?.access_token;
|
|
156
|
+
|
|
157
|
+
const container = useMemo<TestAgentAgentTRPCContextValue>(() => {
|
|
158
|
+
// If the value is an ARN, convert it to a WebSocket URL
|
|
159
|
+
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
160
|
+
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
161
|
+
: agentRuntimeValue;
|
|
162
|
+
|
|
163
|
+
const wsClient = createWSClient({
|
|
164
|
+
url: wsUrl,
|
|
165
|
+
WebSocket: class extends WebSocket {
|
|
166
|
+
constructor(url: string | URL, protocols?: string | string[]) {
|
|
167
|
+
const existingProtocols = protocols
|
|
168
|
+
? Array.isArray(protocols)
|
|
169
|
+
? protocols
|
|
170
|
+
: [protocols]
|
|
171
|
+
: [];
|
|
172
|
+
if (accessToken) {
|
|
173
|
+
const base64Token = base64UrlEncode(accessToken);
|
|
174
|
+
super(url, [
|
|
175
|
+
...existingProtocols,
|
|
176
|
+
\`base64UrlBearerAuthorization.\${base64Token}\`,
|
|
177
|
+
'base64UrlBearerAuthorization',
|
|
178
|
+
]);
|
|
179
|
+
} else {
|
|
180
|
+
super(url, existingProtocols);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
const client = createTRPCClient<AppRouter>({
|
|
187
|
+
links: [wsLink({ client: wsClient })],
|
|
188
|
+
});
|
|
189
|
+
|
|
190
|
+
const optionsProxy = createTRPCOptionsProxy<AppRouter>({
|
|
191
|
+
client,
|
|
192
|
+
queryClient,
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
return { optionsProxy, client };
|
|
196
|
+
}, [agentRuntimeValue, queryClient, accessToken]);
|
|
197
|
+
|
|
198
|
+
return (
|
|
199
|
+
<TestAgentAgentTRPCContext.Provider value={container}>
|
|
200
|
+
{children}
|
|
201
|
+
</TestAgentAgentTRPCContext.Provider>
|
|
202
|
+
);
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
export default TestAgentAgentClientProvider;
|
|
206
|
+
"
|
|
207
|
+
`;
|
|
208
|
+
|
|
209
|
+
exports[`ts strands agent react connection generator > should handle IAM auth option > TestAgentAgentClientProvider-IAM.tsx 1`] = `
|
|
210
|
+
"import type { AppRouter } from 'agent-project/src/agent/router.js';
|
|
211
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
212
|
+
import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query';
|
|
213
|
+
import { createContext, FC, PropsWithChildren, useMemo } from 'react';
|
|
214
|
+
import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
|
|
215
|
+
import {
|
|
216
|
+
TRPCClient,
|
|
217
|
+
createTRPCClient,
|
|
218
|
+
createWSClient,
|
|
219
|
+
wsLink,
|
|
220
|
+
} from '@trpc/client';
|
|
221
|
+
import { useSigV4 } from '../hooks/useSigV4';
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* Build a WebSocket URL from a Bedrock AgentCore Runtime ARN
|
|
225
|
+
*/
|
|
226
|
+
function buildAgentCoreWsUrl(agentRuntimeArn: string): string {
|
|
227
|
+
const region = agentRuntimeArn.split(':')[3];
|
|
228
|
+
return \`wss://bedrock-agentcore.\${region}.amazonaws.com/runtimes/\${encodeURIComponent(agentRuntimeArn)}/ws\`;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
export interface TestAgentAgentTRPCContextValue {
|
|
232
|
+
optionsProxy: ReturnType<typeof createTRPCOptionsProxy<AppRouter>>;
|
|
233
|
+
client: TRPCClient<AppRouter>;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export const TestAgentAgentTRPCContext =
|
|
237
|
+
createContext<TestAgentAgentTRPCContextValue | null>(null);
|
|
238
|
+
|
|
239
|
+
export const TestAgentAgentClientProvider: FC<PropsWithChildren> = ({
|
|
240
|
+
children,
|
|
241
|
+
}) => {
|
|
242
|
+
const queryClient = useQueryClient();
|
|
243
|
+
const runtimeConfig = useRuntimeConfig();
|
|
244
|
+
const agentRuntimeValue = runtimeConfig.agentRuntimes.TestAgent;
|
|
245
|
+
const sigv4Client = useSigV4();
|
|
246
|
+
|
|
247
|
+
const container = useMemo<TestAgentAgentTRPCContextValue>(() => {
|
|
248
|
+
// If the value is an ARN, convert it to a WebSocket URL
|
|
249
|
+
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
250
|
+
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
251
|
+
: agentRuntimeValue;
|
|
252
|
+
|
|
253
|
+
const wsClient = createWSClient({
|
|
254
|
+
url: async () => {
|
|
255
|
+
const signedRequest = await sigv4Client.sign(wsUrl, {
|
|
256
|
+
method: 'GET',
|
|
257
|
+
aws: { signQuery: true },
|
|
258
|
+
});
|
|
259
|
+
return signedRequest.url;
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
const client = createTRPCClient<AppRouter>({
|
|
264
|
+
links: [wsLink({ client: wsClient })],
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
const optionsProxy = createTRPCOptionsProxy<AppRouter>({
|
|
268
|
+
client,
|
|
269
|
+
queryClient,
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
return { optionsProxy, client };
|
|
273
|
+
}, [agentRuntimeValue, queryClient, sigv4Client]);
|
|
274
|
+
|
|
275
|
+
return (
|
|
276
|
+
<TestAgentAgentTRPCContext.Provider value={container}>
|
|
277
|
+
{children}
|
|
278
|
+
</TestAgentAgentTRPCContext.Provider>
|
|
279
|
+
);
|
|
280
|
+
};
|
|
281
|
+
|
|
282
|
+
export default TestAgentAgentClientProvider;
|
|
283
|
+
"
|
|
284
|
+
`;
|
|
285
|
+
|
|
286
|
+
exports[`ts strands agent react connection generator > should handle no auth option > TestAgentAgentClientProvider-NoAuth.tsx 1`] = `
|
|
287
|
+
"import type { AppRouter } from 'agent-project/src/agent/router.js';
|
|
288
|
+
import { useQueryClient } from '@tanstack/react-query';
|
|
289
|
+
import { createTRPCOptionsProxy } from '@trpc/tanstack-react-query';
|
|
290
|
+
import { createContext, FC, PropsWithChildren, useMemo } from 'react';
|
|
291
|
+
import { useRuntimeConfig } from '../hooks/useRuntimeConfig';
|
|
292
|
+
import {
|
|
293
|
+
TRPCClient,
|
|
294
|
+
createTRPCClient,
|
|
295
|
+
createWSClient,
|
|
296
|
+
wsLink,
|
|
297
|
+
} from '@trpc/client';
|
|
298
|
+
|
|
299
|
+
/**
|
|
300
|
+
* Build a WebSocket URL from a Bedrock AgentCore Runtime ARN
|
|
301
|
+
*/
|
|
302
|
+
function buildAgentCoreWsUrl(agentRuntimeArn: string): string {
|
|
303
|
+
const region = agentRuntimeArn.split(':')[3];
|
|
304
|
+
return \`wss://bedrock-agentcore.\${region}.amazonaws.com/runtimes/\${encodeURIComponent(agentRuntimeArn)}/ws\`;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
export interface TestAgentAgentTRPCContextValue {
|
|
308
|
+
optionsProxy: ReturnType<typeof createTRPCOptionsProxy<AppRouter>>;
|
|
309
|
+
client: TRPCClient<AppRouter>;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
export const TestAgentAgentTRPCContext =
|
|
313
|
+
createContext<TestAgentAgentTRPCContextValue | null>(null);
|
|
314
|
+
|
|
315
|
+
export const TestAgentAgentClientProvider: FC<PropsWithChildren> = ({
|
|
316
|
+
children,
|
|
317
|
+
}) => {
|
|
318
|
+
const queryClient = useQueryClient();
|
|
319
|
+
const runtimeConfig = useRuntimeConfig();
|
|
320
|
+
const agentRuntimeValue = runtimeConfig.agentRuntimes.TestAgent;
|
|
321
|
+
|
|
322
|
+
const container = useMemo<TestAgentAgentTRPCContextValue>(() => {
|
|
323
|
+
// If the value is an ARN, convert it to a WebSocket URL
|
|
324
|
+
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
325
|
+
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
326
|
+
: agentRuntimeValue;
|
|
327
|
+
|
|
328
|
+
const wsClient = createWSClient({
|
|
329
|
+
url: wsUrl,
|
|
330
|
+
});
|
|
331
|
+
|
|
332
|
+
const client = createTRPCClient<AppRouter>({
|
|
333
|
+
links: [wsLink({ client: wsClient })],
|
|
334
|
+
});
|
|
335
|
+
|
|
336
|
+
const optionsProxy = createTRPCOptionsProxy<AppRouter>({
|
|
337
|
+
client,
|
|
338
|
+
queryClient,
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
return { optionsProxy, client };
|
|
342
|
+
}, [agentRuntimeValue, queryClient]);
|
|
343
|
+
|
|
344
|
+
return (
|
|
345
|
+
<TestAgentAgentTRPCContext.Provider value={container}>
|
|
346
|
+
{children}
|
|
347
|
+
</TestAgentAgentTRPCContext.Provider>
|
|
348
|
+
);
|
|
349
|
+
};
|
|
350
|
+
|
|
351
|
+
export default TestAgentAgentClientProvider;
|
|
352
|
+
"
|
|
353
|
+
`;
|
|
354
|
+
|
|
355
|
+
exports[`ts strands agent react connection generator > should modify main.tsx correctly > main.tsx 1`] = `
|
|
356
|
+
"import TestAgentAgentClientProvider from './components/TestAgentAgentClientProvider';
|
|
357
|
+
import QueryClientProvider from './components/QueryClientProvider';
|
|
358
|
+
import RuntimeConfigProvider from './components/RuntimeConfig';
|
|
359
|
+
|
|
360
|
+
import { RouterProvider } from '@tanstack/react-router';
|
|
361
|
+
|
|
362
|
+
const App = () => <RouterProvider router={router} />;
|
|
363
|
+
|
|
364
|
+
export function Main() {
|
|
365
|
+
return (
|
|
366
|
+
<RuntimeConfigProvider>
|
|
367
|
+
<QueryClientProvider>
|
|
368
|
+
<TestAgentAgentClientProvider>
|
|
369
|
+
<App />
|
|
370
|
+
</TestAgentAgentClientProvider>
|
|
371
|
+
</QueryClientProvider>
|
|
372
|
+
</RuntimeConfigProvider>
|
|
373
|
+
);
|
|
374
|
+
}
|
|
375
|
+
"
|
|
376
|
+
`;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import type { AppRouter } from "<%- agentProjectAlias %>/<%- agentPath %>/router.js";
|
|
2
|
+
import { useQueryClient } from "@tanstack/react-query";
|
|
3
|
+
import { createTRPCOptionsProxy } from "@trpc/tanstack-react-query";
|
|
4
|
+
import { createContext, FC, PropsWithChildren, useMemo } from "react";
|
|
5
|
+
import { useRuntimeConfig } from "../hooks/useRuntimeConfig";
|
|
6
|
+
import { TRPCClient, createTRPCClient, createWSClient, wsLink } from "@trpc/client";
|
|
7
|
+
<%_ if (auth === 'IAM') { _%>
|
|
8
|
+
import { useSigV4 } from "../hooks/useSigV4";
|
|
9
|
+
<%_ } else if (auth === 'Cognito') { _%>
|
|
10
|
+
import { useAuth } from "react-oidc-context";
|
|
11
|
+
<%_ } _%>
|
|
12
|
+
<%_ if (auth === 'Cognito') { _%>
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Utility to base64url-encode a string (for JWT in WebSocket protocol header)
|
|
16
|
+
*/
|
|
17
|
+
function base64UrlEncode(str: string): string {
|
|
18
|
+
return btoa(str)
|
|
19
|
+
.replace(/\+/g, '-')
|
|
20
|
+
.replace(/\//g, '_')
|
|
21
|
+
.replace(/=/g, '');
|
|
22
|
+
}
|
|
23
|
+
<%_ } _%>
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Build a WebSocket URL from a Bedrock AgentCore Runtime ARN
|
|
27
|
+
*/
|
|
28
|
+
function buildAgentCoreWsUrl(agentRuntimeArn: string): string {
|
|
29
|
+
const region = agentRuntimeArn.split(':')[3];
|
|
30
|
+
return `wss://bedrock-agentcore.${region}.amazonaws.com/runtimes/${encodeURIComponent(agentRuntimeArn)}/ws`;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface <%= agentNameClassName %>AgentTRPCContextValue {
|
|
34
|
+
optionsProxy: ReturnType<typeof createTRPCOptionsProxy<AppRouter>>;
|
|
35
|
+
client: TRPCClient<AppRouter>;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const <%= agentNameClassName %>AgentTRPCContext = createContext<<%= agentNameClassName %>AgentTRPCContextValue | null>(null);
|
|
39
|
+
|
|
40
|
+
export const <%= agentNameClassName %>AgentClientProvider: FC<PropsWithChildren> = ({
|
|
41
|
+
children,
|
|
42
|
+
}) => {
|
|
43
|
+
const queryClient = useQueryClient();
|
|
44
|
+
const runtimeConfig = useRuntimeConfig();
|
|
45
|
+
const agentRuntimeValue = runtimeConfig.agentRuntimes.<%= agentNameClassName %>;
|
|
46
|
+
<%_ if (auth === 'IAM') { _%>
|
|
47
|
+
const sigv4Client = useSigV4();
|
|
48
|
+
<%_ } else if (auth === 'Cognito') { _%>
|
|
49
|
+
const auth = useAuth();
|
|
50
|
+
const accessToken = auth?.user?.access_token;
|
|
51
|
+
<%_ } _%>
|
|
52
|
+
|
|
53
|
+
const container = useMemo<<%= agentNameClassName %>AgentTRPCContextValue>(() => {
|
|
54
|
+
// If the value is an ARN, convert it to a WebSocket URL
|
|
55
|
+
const wsUrl = agentRuntimeValue.startsWith('arn:')
|
|
56
|
+
? buildAgentCoreWsUrl(agentRuntimeValue)
|
|
57
|
+
: agentRuntimeValue;
|
|
58
|
+
|
|
59
|
+
<%_ if (auth === 'IAM') { _%>
|
|
60
|
+
const wsClient = createWSClient({
|
|
61
|
+
url: async () => {
|
|
62
|
+
const signedRequest = await sigv4Client.sign(wsUrl, {
|
|
63
|
+
method: 'GET',
|
|
64
|
+
aws: { signQuery: true },
|
|
65
|
+
});
|
|
66
|
+
return signedRequest.url;
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
<%_ } else if (auth === 'Cognito') { _%>
|
|
70
|
+
const wsClient = createWSClient({
|
|
71
|
+
url: wsUrl,
|
|
72
|
+
WebSocket: class extends WebSocket {
|
|
73
|
+
constructor(url: string | URL, protocols?: string | string[]) {
|
|
74
|
+
const existingProtocols = protocols
|
|
75
|
+
? Array.isArray(protocols)
|
|
76
|
+
? protocols
|
|
77
|
+
: [protocols]
|
|
78
|
+
: [];
|
|
79
|
+
if (accessToken) {
|
|
80
|
+
const base64Token = base64UrlEncode(accessToken);
|
|
81
|
+
super(url, [
|
|
82
|
+
...existingProtocols,
|
|
83
|
+
`base64UrlBearerAuthorization.${base64Token}`,
|
|
84
|
+
'base64UrlBearerAuthorization',
|
|
85
|
+
]);
|
|
86
|
+
} else {
|
|
87
|
+
super(url, existingProtocols);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
<%_ } else { _%>
|
|
93
|
+
const wsClient = createWSClient({
|
|
94
|
+
url: wsUrl,
|
|
95
|
+
});
|
|
96
|
+
<%_ } _%>
|
|
97
|
+
|
|
98
|
+
const client = createTRPCClient<AppRouter>({
|
|
99
|
+
links: [wsLink({ client: wsClient })],
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const optionsProxy = createTRPCOptionsProxy<AppRouter>({
|
|
103
|
+
client,
|
|
104
|
+
queryClient,
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
return { optionsProxy, client };
|
|
108
|
+
}, [agentRuntimeValue, queryClient<% if (auth === 'IAM') { %>, sigv4Client<% } else if (auth === 'Cognito') { %>, accessToken<% } %>]);
|
|
109
|
+
|
|
110
|
+
return (
|
|
111
|
+
<<%= agentNameClassName %>AgentTRPCContext.Provider value={container}>
|
|
112
|
+
{children}
|
|
113
|
+
</<%= agentNameClassName %>AgentTRPCContext.Provider>
|
|
114
|
+
);
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export default <%= agentNameClassName %>AgentClientProvider;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
2
|
+
import { <%= agentNameClassName %>AgentTRPCContext, type <%= agentNameClassName %>AgentTRPCContextValue } from '../components/<%- agentNameClassName %>AgentClientProvider';
|
|
3
|
+
|
|
4
|
+
export const use<%- agentNameClassName %>Agent = (): <%= agentNameClassName %>AgentTRPCContextValue['optionsProxy'] => {
|
|
5
|
+
const container = useContext(<%= agentNameClassName %>AgentTRPCContext);
|
|
6
|
+
if (!container) {
|
|
7
|
+
throw new Error('use<%- agentNameClassName %>Agent must be used within <%= agentNameClassName %>AgentClientProvider');
|
|
8
|
+
}
|
|
9
|
+
return container.optionsProxy;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export const use<%- agentNameClassName %>AgentClient = (): <%= agentNameClassName %>AgentTRPCContextValue['client'] => {
|
|
13
|
+
const container = useContext(<%= agentNameClassName %>AgentTRPCContext);
|
|
14
|
+
if (!container) {
|
|
15
|
+
throw new Error('use<%- agentNameClassName %>AgentClient must be used within <%= agentNameClassName %>AgentClientProvider');
|
|
16
|
+
}
|
|
17
|
+
return container.client;
|
|
18
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
|
|
3
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
4
|
+
*/
|
|
5
|
+
import { Tree } from '@nx/devkit';
|
|
6
|
+
import { NxGeneratorInfo } from '../../../utils/nx';
|
|
7
|
+
import { ResolvedConnectionOptions } from '../../../connection/generator';
|
|
8
|
+
export declare const TS_STRANDS_AGENT_REACT_CONNECTION_GENERATOR_INFO: NxGeneratorInfo;
|
|
9
|
+
export declare function tsStrandsAgentReactConnectionGenerator(tree: Tree, options: ResolvedConnectionOptions): Promise<() => void>;
|
|
10
|
+
export default tsStrandsAgentReactConnectionGenerator;
|