@dainprotocol/service-sdk 2.0.66 → 2.0.68

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.
Files changed (101) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.js +8 -1
  3. package/dist/index.js.map +1 -1
  4. package/dist/service/index.d.ts +4 -2
  5. package/dist/service/index.js +8 -1
  6. package/dist/service/index.js.map +1 -1
  7. package/dist/service/nodeService.d.ts +4 -2
  8. package/dist/service/nodeService.js +8 -1
  9. package/dist/service/nodeService.js.map +1 -1
  10. package/dist/service/oauth2Manager.js +3 -2
  11. package/dist/service/oauth2Manager.js.map +1 -1
  12. package/dist/service/server.js +84 -9
  13. package/dist/service/server.js.map +1 -1
  14. package/dist/service/service.js +15 -2
  15. package/dist/service/service.js.map +1 -1
  16. package/dist/service/skills.d.ts +106 -0
  17. package/dist/service/skills.js +156 -0
  18. package/dist/service/skills.js.map +1 -0
  19. package/dist/service/trigger-forwarder.d.ts +47 -0
  20. package/dist/service/trigger-forwarder.js +91 -0
  21. package/dist/service/trigger-forwarder.js.map +1 -0
  22. package/dist/service/types.d.ts +4 -0
  23. package/dist/service/webhooks.d.ts +109 -10
  24. package/dist/service/webhooks.js +184 -30
  25. package/dist/service/webhooks.js.map +1 -1
  26. package/package.json +1 -1
  27. package/dist/__tests__/api-sdk.test.d.ts +0 -1
  28. package/dist/__tests__/api-sdk.test.js +0 -102
  29. package/dist/__tests__/api-sdk.test.js.map +0 -1
  30. package/dist/__tests__/auth.test.d.ts +0 -1
  31. package/dist/__tests__/auth.test.js +0 -110
  32. package/dist/__tests__/auth.test.js.map +0 -1
  33. package/dist/__tests__/citations-plugin.test.d.ts +0 -1
  34. package/dist/__tests__/citations-plugin.test.js +0 -491
  35. package/dist/__tests__/citations-plugin.test.js.map +0 -1
  36. package/dist/__tests__/context-behavior.test.d.ts +0 -1
  37. package/dist/__tests__/context-behavior.test.js +0 -290
  38. package/dist/__tests__/context-behavior.test.js.map +0 -1
  39. package/dist/__tests__/convertToVercelTool.test.d.ts +0 -1
  40. package/dist/__tests__/convertToVercelTool.test.js +0 -527
  41. package/dist/__tests__/convertToVercelTool.test.js.map +0 -1
  42. package/dist/__tests__/core.test.d.ts +0 -1
  43. package/dist/__tests__/core.test.js +0 -154
  44. package/dist/__tests__/core.test.js.map +0 -1
  45. package/dist/__tests__/crypto-plugin.test.d.ts +0 -1
  46. package/dist/__tests__/crypto-plugin.test.js +0 -694
  47. package/dist/__tests__/crypto-plugin.test.js.map +0 -1
  48. package/dist/__tests__/humanActions.test.d.ts +0 -1
  49. package/dist/__tests__/humanActions.test.js +0 -221
  50. package/dist/__tests__/humanActions.test.js.map +0 -1
  51. package/dist/__tests__/integration.test.d.ts +0 -1
  52. package/dist/__tests__/integration.test.js +0 -1573
  53. package/dist/__tests__/integration.test.js.map +0 -1
  54. package/dist/__tests__/mealMeSchemas.test.d.ts +0 -576
  55. package/dist/__tests__/mealMeSchemas.test.js +0 -627
  56. package/dist/__tests__/mealMeSchemas.test.js.map +0 -1
  57. package/dist/__tests__/oauth-context-simple.test.d.ts +0 -1
  58. package/dist/__tests__/oauth-context-simple.test.js +0 -90
  59. package/dist/__tests__/oauth-context-simple.test.js.map +0 -1
  60. package/dist/__tests__/oauth-context.test.d.ts +0 -1
  61. package/dist/__tests__/oauth-context.test.js +0 -282
  62. package/dist/__tests__/oauth-context.test.js.map +0 -1
  63. package/dist/__tests__/oauth.test.d.ts +0 -1
  64. package/dist/__tests__/oauth.test.js +0 -378
  65. package/dist/__tests__/oauth.test.js.map +0 -1
  66. package/dist/__tests__/oauth2-client-context.test.d.ts +0 -1
  67. package/dist/__tests__/oauth2-client-context.test.js +0 -165
  68. package/dist/__tests__/oauth2-client-context.test.js.map +0 -1
  69. package/dist/__tests__/oauth2-client-integration.test.d.ts +0 -1
  70. package/dist/__tests__/oauth2-client-integration.test.js +0 -182
  71. package/dist/__tests__/oauth2-client-integration.test.js.map +0 -1
  72. package/dist/__tests__/oauth2-client-simple.test.d.ts +0 -1
  73. package/dist/__tests__/oauth2-client-simple.test.js +0 -144
  74. package/dist/__tests__/oauth2-client-simple.test.js.map +0 -1
  75. package/dist/__tests__/oauth2-context.test.d.ts +0 -1
  76. package/dist/__tests__/oauth2-context.test.js +0 -201
  77. package/dist/__tests__/oauth2-context.test.js.map +0 -1
  78. package/dist/__tests__/oauth2-datasource.test.d.ts +0 -1
  79. package/dist/__tests__/oauth2-datasource.test.js +0 -251
  80. package/dist/__tests__/oauth2-datasource.test.js.map +0 -1
  81. package/dist/__tests__/plugin.test.d.ts +0 -1
  82. package/dist/__tests__/plugin.test.js +0 -900
  83. package/dist/__tests__/plugin.test.js.map +0 -1
  84. package/dist/__tests__/processes.test.d.ts +0 -1
  85. package/dist/__tests__/processes.test.js +0 -239
  86. package/dist/__tests__/processes.test.js.map +0 -1
  87. package/dist/__tests__/streaming.test.d.ts +0 -1
  88. package/dist/__tests__/streaming.test.js +0 -592
  89. package/dist/__tests__/streaming.test.js.map +0 -1
  90. package/dist/__tests__/testEnums.d.ts +0 -1
  91. package/dist/__tests__/testEnums.js +0 -73
  92. package/dist/__tests__/testEnums.js.map +0 -1
  93. package/dist/__tests__/testOptionals.test.d.ts +0 -1
  94. package/dist/__tests__/testOptionals.test.js +0 -83
  95. package/dist/__tests__/testOptionals.test.js.map +0 -1
  96. package/dist/__tests__/types.test.d.ts +0 -1
  97. package/dist/__tests__/types.test.js +0 -98
  98. package/dist/__tests__/types.test.js.map +0 -1
  99. package/dist/service/zod-json-converter.d.ts +0 -14
  100. package/dist/service/zod-json-converter.js +0 -203
  101. package/dist/service/zod-json-converter.js.map +0 -1
@@ -1,378 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const api_sdk_1 = require("../client/api-sdk");
5
- const client_auth_1 = require("../client/client-auth");
6
- const ed25519_1 = require("@noble/curves/ed25519");
7
- const bs58_1 = tslib_1.__importDefault(require("bs58"));
8
- const nodeService_1 = require("../service/nodeService");
9
- const zod_1 = require("zod");
10
- const oauth2_token_manager_1 = require("@dainprotocol/oauth2-token-manager");
11
- const hono_1 = require("hono");
12
- const node_server_1 = require("@hono/node-server");
13
- describe("OAuth Integration", () => {
14
- const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
15
- const publicKey = ed25519_1.ed25519.getPublicKey(privateKey);
16
- const clientPrivateKey = ed25519_1.ed25519.utils.randomPrivateKey();
17
- const agentAuth = new client_auth_1.DainClientAuth({
18
- privateKeyBase58: bs58_1.default.encode(clientPrivateKey),
19
- agentId: "agent-12",
20
- orgId: "org-12",
21
- });
22
- const mockTokenStore = new oauth2_token_manager_1.InMemoryStorageAdapter();
23
- let oauthServer;
24
- let oauthSdk;
25
- let mockOAuthProvider;
26
- beforeAll(async () => {
27
- // Create mock OAuth provider server
28
- const mockOAuthApp = new hono_1.Hono();
29
- // Add auth endpoint
30
- mockOAuthApp.get('/auth', (c) => {
31
- return c.redirect(c.req.query('redirect_uri') +
32
- '?code=test-code&state=' + c.req.query('state'));
33
- });
34
- mockOAuthApp.post('/token', async (c) => {
35
- const body = await c.req.parseBody();
36
- // Verify the expected OAuth token request
37
- if (body.grant_type === 'authorization_code' &&
38
- body.client_id === 'test-client-id' &&
39
- body.client_secret === 'test-client-secret' &&
40
- body.code === 'test-code') {
41
- return c.json({
42
- access_token: 'mock_access_token',
43
- token_type: 'Bearer',
44
- expires_in: 3600,
45
- refresh_token: 'mock_refresh_token',
46
- scope: 'test_scope',
47
- });
48
- }
49
- return c.json({ error: 'invalid_request' }, 400);
50
- });
51
- mockOAuthProvider = (0, node_server_1.serve)({
52
- fetch: mockOAuthApp.fetch,
53
- port: 4455
54
- });
55
- // Update the OAuth service config to use mock server
56
- const oauthService = (0, nodeService_1.defineDAINService)({
57
- metadata: {
58
- title: "Test OAuth Service",
59
- description: "A test OAuth service",
60
- version: "1.0.0",
61
- author: "Test Author",
62
- tags: ["test", "oauth"],
63
- },
64
- identity: {
65
- publicKey: bs58_1.default.encode(publicKey),
66
- agentId: "test-agent",
67
- orgId: "test-org",
68
- privateKey: bs58_1.default.encode(privateKey),
69
- },
70
- oauth2: {
71
- baseUrl: "http://localhost:4422",
72
- tokenStore: mockTokenStore,
73
- providers: {
74
- test_provider: {
75
- clientId: "test-client-id",
76
- clientSecret: "test-client-secret",
77
- authorizationUrl: "http://localhost:4455/auth", // Point to mock server
78
- tokenUrl: "http://localhost:4455/token", // Point to mock server
79
- scopes: ["test_scope"],
80
- reason: "Required for testing",
81
- requiredTools: ["test-oauth-tool"],
82
- onSuccess: async (agentId, tokens) => {
83
- console.log("OAuth success", agentId, tokens);
84
- },
85
- },
86
- },
87
- },
88
- tools: [
89
- (0, nodeService_1.createTool)({
90
- id: "test-oauth-tool",
91
- name: "Test OAuth Tool",
92
- description: "Tool that requires OAuth",
93
- input: zod_1.z.object({}),
94
- output: zod_1.z.object({ success: zod_1.z.boolean() }),
95
- pricing: { pricePerUse: 0.01, currency: "USD" },
96
- handler: async () => ({
97
- text: "OAuth test",
98
- data: { success: true },
99
- ui: null,
100
- }),
101
- }),
102
- ],
103
- });
104
- oauthServer = await oauthService.startNode({ port: 4422 });
105
- oauthSdk = new api_sdk_1.DainSDK("http://localhost:4422", agentAuth);
106
- await oauthSdk.initialize();
107
- });
108
- afterAll(async () => {
109
- if (oauthServer) {
110
- await oauthServer.shutdown();
111
- }
112
- if (mockOAuthProvider) {
113
- await new Promise((resolve) => {
114
- mockOAuthProvider.close(() => resolve(undefined));
115
- });
116
- }
117
- // Give a moment for all connections to close
118
- await new Promise(resolve => setTimeout(resolve, 100));
119
- });
120
- describe("Provider Management", () => {
121
- it("should list available OAuth providers", async () => {
122
- const providers = await oauthSdk.getOAuthProviders();
123
- expect(providers).toHaveLength(1);
124
- expect(providers[0].name).toBe("test_provider");
125
- expect(providers[0].config.reason).toBe("Required for testing");
126
- expect(providers[0].config.scopes).toEqual(["test_scope"]);
127
- expect(providers[0].config.requiredTools).toEqual(["test-oauth-tool"]);
128
- });
129
- it("should generate OAuth connect URL", async () => {
130
- const url = await oauthSdk.getOAuthConnectUrl("test_provider");
131
- expect(url).toContain("http://localhost:4455/auth");
132
- expect(url).toContain("client_id=test-client-id");
133
- expect(url).toContain("scope=test_scope");
134
- });
135
- it("should throw error for invalid provider", async () => {
136
- await expect(oauthSdk.getOAuthConnectUrl("invalid_provider"))
137
- .rejects
138
- .toThrow();
139
- });
140
- });
141
- describe("Tool Requirements", () => {
142
- it("should identify tools requiring OAuth", async () => {
143
- const requirements = await oauthSdk.getToolOAuthRequirements("test-oauth-tool");
144
- expect(requirements.required).toBe(true);
145
- expect(requirements.providers).toHaveLength(1);
146
- expect(requirements.providers[0].name).toBe("test_provider");
147
- expect(requirements.providers[0].reason).toBe("Required for testing");
148
- });
149
- it("should handle tools without OAuth requirements", async () => {
150
- const noOAuthTool = (0, nodeService_1.createTool)({
151
- id: "no-oauth-tool",
152
- name: "No OAuth Tool",
153
- description: "Tool that doesn't require OAuth",
154
- input: zod_1.z.object({}),
155
- output: zod_1.z.object({}),
156
- pricing: { pricePerUse: 0.01, currency: "USD" },
157
- handler: async () => ({
158
- text: "No OAuth",
159
- data: {},
160
- ui: null,
161
- }),
162
- });
163
- const service = (0, nodeService_1.defineDAINService)({
164
- metadata: {
165
- title: "Test OAuth Service",
166
- description: "A test OAuth service",
167
- version: "1.0.0",
168
- author: "Test Author",
169
- tags: ["test", "oauth"],
170
- },
171
- identity: {
172
- publicKey: bs58_1.default.encode(publicKey),
173
- agentId: "test-agent",
174
- orgId: "test-org",
175
- privateKey: bs58_1.default.encode(privateKey),
176
- },
177
- oauth2: {
178
- baseUrl: "http://localhost:4423",
179
- tokenStore: mockTokenStore,
180
- providers: {
181
- test_provider: {
182
- clientId: "test-client-id",
183
- clientSecret: "test-client-secret",
184
- authorizationUrl: "https://test.com/auth",
185
- tokenUrl: "https://test.com/token",
186
- scopes: ["test_scope"],
187
- reason: "Required for testing",
188
- requiredTools: ["test-oauth-tool"],
189
- onSuccess: async (agentId, tokens) => {
190
- console.log("OAuth success", agentId, tokens);
191
- },
192
- },
193
- },
194
- },
195
- tools: [(0, nodeService_1.createTool)({
196
- id: "test-oauth-tool",
197
- name: "Test OAuth Tool",
198
- description: "Tool that requires OAuth",
199
- input: zod_1.z.object({}),
200
- output: zod_1.z.object({ success: zod_1.z.boolean() }),
201
- pricing: { pricePerUse: 0.01, currency: "USD" },
202
- handler: async () => ({
203
- text: "OAuth test",
204
- data: { success: true },
205
- ui: null,
206
- }),
207
- }), noOAuthTool],
208
- });
209
- const newServer = await service.startNode({ port: 4423 });
210
- const newSdk = new api_sdk_1.DainSDK("http://localhost:4423", agentAuth);
211
- await newSdk.initialize();
212
- const requirements = await newSdk.getToolOAuthRequirements("no-oauth-tool");
213
- expect(requirements.required).toBe(false);
214
- expect(requirements.providers).toHaveLength(0);
215
- await newServer.shutdown();
216
- });
217
- });
218
- describe("Documentation", () => {
219
- it("should include OAuth requirements in documentation", async () => {
220
- const docs = await oauthSdk.getDocumentation();
221
- expect(docs).toContain("## OAuth Requirements");
222
- expect(docs).toContain("test_provider");
223
- expect(docs).toContain("Required for testing");
224
- expect(docs).toContain("test_scope");
225
- expect(docs).toContain("**OAuth Requirements:**");
226
- expect(docs).toContain("test_provider: Required for testing");
227
- });
228
- });
229
- describe("Token Management", () => {
230
- it("should check OAuth requirements before executing tool", async () => {
231
- // @ts-ignore - Accessing generated method
232
- await expect(oauthSdk.testOauthTool({}))
233
- .rejects
234
- .toThrow(/Missing required OAuth connections/);
235
- });
236
- it("should handle OAuth flow integration", async () => {
237
- // This test verifies the integration between the SDK and oauth2-token-manager
238
- // The actual OAuth flow is handled by the oauth2-token-manager library
239
- // Get OAuth URL
240
- const authUrl = await oauthSdk.getOAuthConnectUrl("test_provider");
241
- expect(authUrl).toContain("http://localhost:4455/auth");
242
- expect(authUrl).toContain("client_id=test-client-id");
243
- // Check initial state - should not be connected
244
- const requirements = await oauthSdk.getToolOAuthRequirements("test-oauth-tool");
245
- expect(requirements.providers[0].connected).toBe(false);
246
- // Note: Full OAuth flow testing would require simulating the entire OAuth dance
247
- // which is already tested in the oauth2-token-manager library
248
- });
249
- });
250
- describe("PKCE and Basic Auth", () => {
251
- let pkceServer;
252
- let pkceSdk;
253
- let pkceMockProvider;
254
- beforeAll(async () => {
255
- // Create mock OAuth provider with PKCE support
256
- const mockPKCEApp = new hono_1.Hono();
257
- // Add auth endpoint that validates PKCE parameters
258
- mockPKCEApp.get('/auth', (c) => {
259
- const codeChallenge = c.req.query('code_challenge');
260
- const codeChallengeMethod = c.req.query('code_challenge_method');
261
- // Verify PKCE parameters are present
262
- if (!codeChallenge || codeChallengeMethod !== 'S256') {
263
- return c.json({ error: 'invalid_request' }, 400);
264
- }
265
- return c.redirect(c.req.query('redirect_uri') +
266
- '?code=pkce-test-code&state=' + c.req.query('state'));
267
- });
268
- // Add token endpoint that validates PKCE code verifier and Basic Auth
269
- mockPKCEApp.post('/token', async (c) => {
270
- const authHeader = c.req.header('Authorization');
271
- const body = await c.req.parseBody();
272
- // Verify Basic Auth
273
- const expectedAuth = 'Basic ' + Buffer.from('pkce-client-id:pkce-client-secret').toString('base64');
274
- if (authHeader !== expectedAuth) {
275
- return c.json({ error: 'invalid_client' }, 401);
276
- }
277
- // Verify PKCE code verifier is present
278
- if (!body.code_verifier) {
279
- return c.json({ error: 'invalid_request' }, 400);
280
- }
281
- return c.json({
282
- access_token: 'pkce_access_token',
283
- token_type: 'Bearer',
284
- expires_in: 3600,
285
- refresh_token: 'pkce_refresh_token',
286
- scope: 'pkce_scope',
287
- });
288
- });
289
- pkceMockProvider = (0, node_server_1.serve)({
290
- fetch: mockPKCEApp.fetch,
291
- port: 4456
292
- });
293
- const pkcePrivateKey = ed25519_1.ed25519.utils.randomPrivateKey();
294
- const pkcePublicKey = ed25519_1.ed25519.getPublicKey(pkcePrivateKey);
295
- // Create service with PKCE and Basic Auth enabled
296
- const pkceService = (0, nodeService_1.defineDAINService)({
297
- metadata: {
298
- title: "PKCE OAuth Test Service",
299
- description: "Testing PKCE and Basic Auth",
300
- version: "1.0.0",
301
- author: "Test Author",
302
- tags: ["test", "oauth", "pkce"],
303
- },
304
- identity: {
305
- publicKey: bs58_1.default.encode(pkcePublicKey),
306
- privateKey: bs58_1.default.encode(pkcePrivateKey),
307
- agentId: "test-agent",
308
- orgId: "test-org",
309
- },
310
- oauth2: {
311
- baseUrl: "http://localhost:4424",
312
- tokenStore: new oauth2_token_manager_1.InMemoryStorageAdapter(),
313
- providers: {
314
- pkce_provider: {
315
- clientId: "pkce-client-id",
316
- clientSecret: "pkce-client-secret",
317
- authorizationUrl: "http://localhost:4456/auth",
318
- tokenUrl: "http://localhost:4456/token",
319
- scopes: ["pkce_scope"],
320
- reason: "Testing PKCE flow",
321
- requiredTools: ["pkce-test-tool"],
322
- usePKCE: true,
323
- useBasicAuth: true,
324
- },
325
- },
326
- },
327
- tools: [
328
- (0, nodeService_1.createTool)({
329
- id: "pkce-test-tool",
330
- name: "PKCE Test Tool",
331
- description: "Tool for testing PKCE flow",
332
- input: zod_1.z.object({}),
333
- output: zod_1.z.object({ success: zod_1.z.boolean() }),
334
- handler: async () => ({
335
- text: "PKCE test",
336
- data: { success: true },
337
- ui: null,
338
- }),
339
- }),
340
- ],
341
- });
342
- pkceServer = await pkceService.startNode({ port: 4424 });
343
- pkceSdk = new api_sdk_1.DainSDK("http://localhost:4424", agentAuth);
344
- await pkceSdk.initialize();
345
- });
346
- afterAll(async () => {
347
- if (pkceServer) {
348
- await pkceServer.shutdown();
349
- }
350
- if (pkceMockProvider) {
351
- await new Promise((resolve) => {
352
- pkceMockProvider.close(() => resolve(undefined));
353
- });
354
- }
355
- // Give a moment for all connections to close
356
- await new Promise(resolve => setTimeout(resolve, 100));
357
- });
358
- it("should generate auth URL with PKCE parameters", async () => {
359
- const url = await pkceSdk.getOAuthConnectUrl("pkce_provider");
360
- const urlParams = new URL(url).searchParams;
361
- expect(urlParams.get('code_challenge')).toBeTruthy();
362
- expect(urlParams.get('code_challenge_method')).toBe('S256');
363
- });
364
- it("should complete PKCE flow with Basic Auth", async () => {
365
- // This test verifies PKCE parameters are included in the auth URL
366
- // The actual PKCE flow is handled by the oauth2-token-manager library
367
- const url = await pkceSdk.getOAuthConnectUrl("pkce_provider");
368
- const urlParams = new URL(url).searchParams;
369
- // Verify PKCE parameters are present
370
- expect(urlParams.get('code_challenge')).toBeTruthy();
371
- expect(urlParams.get('code_challenge_method')).toBe('S256');
372
- // Verify initial state - should not be connected
373
- const requirements = await pkceSdk.getToolOAuthRequirements("pkce-test-tool");
374
- expect(requirements.providers[0].connected).toBe(false);
375
- });
376
- });
377
- });
378
- //# sourceMappingURL=oauth.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth.test.js","sourceRoot":"","sources":["../../src/__tests__/oauth.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,165 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const tslib_1 = require("tslib");
4
- const nodeService_1 = require("../service/nodeService");
5
- const zod_1 = require("zod");
6
- const oauth2_token_manager_1 = require("@dainprotocol/oauth2-token-manager");
7
- const tweetnacl_1 = tslib_1.__importDefault(require("tweetnacl"));
8
- const bs58_1 = tslib_1.__importDefault(require("bs58"));
9
- describe("OAuth2Client in Tool Context", () => {
10
- it("should have oauth2Client available in tool context when OAuth2 is configured", async () => {
11
- // Generate test keys
12
- const keyPair = tweetnacl_1.default.sign.keyPair();
13
- const privateKey = bs58_1.default.encode(new Uint8Array([...keyPair.secretKey.slice(0, 32), ...keyPair.publicKey]));
14
- let capturedContext = null;
15
- const service = (0, nodeService_1.defineDAINService)({
16
- metadata: {
17
- title: "Test Service",
18
- description: "Test service with OAuth2",
19
- version: "1.0.0",
20
- author: "Test",
21
- tags: ["test"],
22
- },
23
- identity: {
24
- privateKey: privateKey,
25
- publicKey: bs58_1.default.encode(keyPair.publicKey),
26
- agentId: "test-agent",
27
- orgId: "test-org",
28
- },
29
- oauth2: {
30
- baseUrl: "http://localhost:5555",
31
- tokenStore: new oauth2_token_manager_1.InMemoryStorageAdapter(),
32
- providers: {
33
- google: {
34
- clientId: "test-client-id",
35
- clientSecret: "test-client-secret",
36
- authorizationUrl: "https://accounts.google.com/o/oauth2/v2/auth",
37
- tokenUrl: "https://oauth2.googleapis.com/token",
38
- scopes: ["profile", "email"],
39
- },
40
- },
41
- },
42
- tools: [
43
- (0, nodeService_1.createTool)({
44
- id: "test-oauth-context",
45
- name: "Test OAuth Context",
46
- description: "Tool to test OAuth2 context",
47
- input: zod_1.z.object({}),
48
- output: zod_1.z.object({
49
- hasOAuth2: zod_1.z.boolean(),
50
- hasOAuth2Client: zod_1.z.boolean(),
51
- }),
52
- handler: async (input, agentInfo, context) => {
53
- capturedContext = context;
54
- return {
55
- text: "Context captured",
56
- data: {
57
- hasOAuth2: !!context.oauth2,
58
- hasOAuth2Client: !!context.oauth2Client,
59
- },
60
- ui: null,
61
- };
62
- },
63
- }),
64
- ],
65
- });
66
- const manager = await service.startNode({ port: 5555 });
67
- try {
68
- // Make a request to the tool
69
- const response = await fetch("http://localhost:5555/tools/test-oauth-context", {
70
- method: "POST",
71
- headers: {
72
- "Content-Type": "application/json",
73
- "X-Agent-Id": "test-agent",
74
- "X-Agent-Address": "test-address",
75
- },
76
- body: JSON.stringify({}),
77
- });
78
- const result = await response.json();
79
- // Verify the context has oauth2Client
80
- expect(capturedContext).toBeTruthy();
81
- expect(capturedContext.oauth2).toBeTruthy();
82
- expect(capturedContext.oauth2Client).toBeTruthy();
83
- // Verify the tool response
84
- expect(result.data.hasOAuth2).toBe(true);
85
- expect(result.data.hasOAuth2Client).toBe(true);
86
- // Verify oauth2Client has the expected methods
87
- expect(typeof capturedContext.oauth2Client.queryTokens).toBe("function");
88
- expect(typeof capturedContext.oauth2Client.getValidToken).toBe("function");
89
- expect(typeof capturedContext.oauth2Client.getAccessToken).toBe("function");
90
- }
91
- finally {
92
- await manager.shutdown();
93
- }
94
- });
95
- it("should have oauth2Client as undefined when OAuth2 is not configured", async () => {
96
- // Generate test keys
97
- const keyPair = tweetnacl_1.default.sign.keyPair();
98
- const privateKey = bs58_1.default.encode(new Uint8Array([...keyPair.secretKey.slice(0, 32), ...keyPair.publicKey]));
99
- let capturedContext = null;
100
- const service = (0, nodeService_1.defineDAINService)({
101
- metadata: {
102
- title: "Test Service No OAuth",
103
- description: "Test service without OAuth2",
104
- version: "1.0.0",
105
- author: "Test",
106
- tags: ["test"],
107
- },
108
- identity: {
109
- privateKey: privateKey,
110
- publicKey: bs58_1.default.encode(keyPair.publicKey),
111
- agentId: "test-agent",
112
- orgId: "test-org",
113
- },
114
- // No oauth2 configuration
115
- tools: [
116
- (0, nodeService_1.createTool)({
117
- id: "test-no-oauth-context",
118
- name: "Test No OAuth Context",
119
- description: "Tool to test context without OAuth2",
120
- input: zod_1.z.object({}),
121
- output: zod_1.z.object({
122
- hasOAuth2: zod_1.z.boolean(),
123
- hasOAuth2Client: zod_1.z.boolean(),
124
- }),
125
- handler: async (input, agentInfo, context) => {
126
- capturedContext = context;
127
- return {
128
- text: "Context captured",
129
- data: {
130
- hasOAuth2: !!context.oauth2,
131
- hasOAuth2Client: !!context.oauth2Client,
132
- },
133
- ui: null,
134
- };
135
- },
136
- }),
137
- ],
138
- });
139
- const manager = await service.startNode({ port: 5556 });
140
- try {
141
- // Make a request to the tool
142
- const response = await fetch("http://localhost:5556/tools/test-no-oauth-context", {
143
- method: "POST",
144
- headers: {
145
- "Content-Type": "application/json",
146
- "X-Agent-Id": "test-agent",
147
- "X-Agent-Address": "test-address",
148
- },
149
- body: JSON.stringify({}),
150
- });
151
- const result = await response.json();
152
- // Verify the context doesn't have oauth2Client
153
- expect(capturedContext).toBeTruthy();
154
- expect(capturedContext.oauth2).toBeUndefined();
155
- expect(capturedContext.oauth2Client).toBeUndefined();
156
- // Verify the tool response
157
- expect(result.data.hasOAuth2).toBe(false);
158
- expect(result.data.hasOAuth2Client).toBe(false);
159
- }
160
- finally {
161
- await manager.shutdown();
162
- }
163
- });
164
- });
165
- //# sourceMappingURL=oauth2-client-context.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth2-client-context.test.js","sourceRoot":"","sources":["../../src/__tests__/oauth2-client-context.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};