@dainprotocol/service-sdk 2.0.64 → 2.0.66
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/__tests__/api-sdk.test.d.ts +1 -0
- package/dist/__tests__/api-sdk.test.js +102 -0
- package/dist/__tests__/api-sdk.test.js.map +1 -0
- package/dist/__tests__/auth.test.d.ts +1 -0
- package/dist/__tests__/auth.test.js +110 -0
- package/dist/__tests__/auth.test.js.map +1 -0
- package/dist/__tests__/citations-plugin.test.d.ts +1 -0
- package/dist/__tests__/citations-plugin.test.js +491 -0
- package/dist/__tests__/citations-plugin.test.js.map +1 -0
- package/dist/__tests__/context-behavior.test.d.ts +1 -0
- package/dist/__tests__/context-behavior.test.js +290 -0
- package/dist/__tests__/context-behavior.test.js.map +1 -0
- package/dist/__tests__/convertToVercelTool.test.d.ts +1 -0
- package/dist/__tests__/convertToVercelTool.test.js +527 -0
- package/dist/__tests__/convertToVercelTool.test.js.map +1 -0
- package/dist/__tests__/core.test.d.ts +1 -0
- package/dist/__tests__/core.test.js +154 -0
- package/dist/__tests__/core.test.js.map +1 -0
- package/dist/__tests__/crypto-plugin.test.d.ts +1 -0
- package/dist/__tests__/crypto-plugin.test.js +694 -0
- package/dist/__tests__/crypto-plugin.test.js.map +1 -0
- package/dist/__tests__/humanActions.test.d.ts +1 -0
- package/dist/__tests__/humanActions.test.js +221 -0
- package/dist/__tests__/humanActions.test.js.map +1 -0
- package/dist/__tests__/integration.test.d.ts +1 -0
- package/dist/__tests__/integration.test.js +1573 -0
- package/dist/__tests__/integration.test.js.map +1 -0
- package/dist/__tests__/mealMeSchemas.test.d.ts +576 -0
- package/dist/__tests__/mealMeSchemas.test.js +627 -0
- package/dist/__tests__/mealMeSchemas.test.js.map +1 -0
- package/dist/__tests__/oauth-context-simple.test.d.ts +1 -0
- package/dist/__tests__/oauth-context-simple.test.js +90 -0
- package/dist/__tests__/oauth-context-simple.test.js.map +1 -0
- package/dist/__tests__/oauth-context.test.d.ts +1 -0
- package/dist/__tests__/oauth-context.test.js +282 -0
- package/dist/__tests__/oauth-context.test.js.map +1 -0
- package/dist/__tests__/oauth.test.d.ts +1 -0
- package/dist/__tests__/oauth.test.js +378 -0
- package/dist/__tests__/oauth.test.js.map +1 -0
- package/dist/__tests__/oauth2-client-context.test.d.ts +1 -0
- package/dist/__tests__/oauth2-client-context.test.js +165 -0
- package/dist/__tests__/oauth2-client-context.test.js.map +1 -0
- package/dist/__tests__/oauth2-client-integration.test.d.ts +1 -0
- package/dist/__tests__/oauth2-client-integration.test.js +182 -0
- package/dist/__tests__/oauth2-client-integration.test.js.map +1 -0
- package/dist/__tests__/oauth2-client-simple.test.d.ts +1 -0
- package/dist/__tests__/oauth2-client-simple.test.js +144 -0
- package/dist/__tests__/oauth2-client-simple.test.js.map +1 -0
- package/dist/__tests__/oauth2-context.test.d.ts +1 -0
- package/dist/__tests__/oauth2-context.test.js +201 -0
- package/dist/__tests__/oauth2-context.test.js.map +1 -0
- package/dist/__tests__/oauth2-datasource.test.d.ts +1 -0
- package/dist/__tests__/oauth2-datasource.test.js +251 -0
- package/dist/__tests__/oauth2-datasource.test.js.map +1 -0
- package/dist/__tests__/plugin.test.d.ts +1 -0
- package/dist/__tests__/plugin.test.js +900 -0
- package/dist/__tests__/plugin.test.js.map +1 -0
- package/dist/__tests__/processes.test.d.ts +1 -0
- package/dist/__tests__/processes.test.js +239 -0
- package/dist/__tests__/processes.test.js.map +1 -0
- package/dist/__tests__/streaming.test.d.ts +1 -0
- package/dist/__tests__/streaming.test.js +592 -0
- package/dist/__tests__/streaming.test.js.map +1 -0
- package/dist/__tests__/testEnums.d.ts +1 -0
- package/dist/__tests__/testEnums.js +73 -0
- package/dist/__tests__/testEnums.js.map +1 -0
- package/dist/__tests__/testOptionals.test.d.ts +1 -0
- package/dist/__tests__/testOptionals.test.js +83 -0
- package/dist/__tests__/testOptionals.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +1 -0
- package/dist/__tests__/types.test.js +98 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/client/client.d.ts +2 -1
- package/dist/client/client.js +6 -13
- package/dist/client/client.js.map +1 -1
- package/dist/service/hitl.d.ts +8 -2
- package/dist/service/hitl.js +34 -9
- package/dist/service/hitl.js.map +1 -1
- package/dist/service/server.js +26 -3
- package/dist/service/server.js.map +1 -1
- package/dist/service/zod-json-converter.d.ts +14 -0
- package/dist/service/zod-json-converter.js +203 -0
- package/dist/service/zod-json-converter.js.map +1 -0
- package/package.json +9 -10
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const oauth2_token_manager_1 = require("@dainprotocol/oauth2-token-manager");
|
|
4
|
+
describe('OAuth2Client Integration Tests', () => {
|
|
5
|
+
let oauth2Client;
|
|
6
|
+
let storage;
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
// Use in-memory storage for tests
|
|
9
|
+
storage = new oauth2_token_manager_1.InMemoryStorageAdapter();
|
|
10
|
+
oauth2Client = new oauth2_token_manager_1.OAuth2Client({
|
|
11
|
+
storage,
|
|
12
|
+
providers: {
|
|
13
|
+
google: {
|
|
14
|
+
clientId: 'test-client-id',
|
|
15
|
+
clientSecret: 'test-client-secret',
|
|
16
|
+
authorizationUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
|
|
17
|
+
tokenUrl: 'https://oauth2.googleapis.com/token',
|
|
18
|
+
redirectUri: 'http://localhost:3000/callback',
|
|
19
|
+
scopes: ['email', 'profile'],
|
|
20
|
+
extraAuthParams: {
|
|
21
|
+
access_type: 'offline',
|
|
22
|
+
prompt: 'consent'
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
},
|
|
26
|
+
autoRefresh: {
|
|
27
|
+
enabled: true,
|
|
28
|
+
refreshBuffer: 10,
|
|
29
|
+
onRefreshError: (error, token) => {
|
|
30
|
+
console.error('Refresh error:', error.message);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
describe('Token Storage', () => {
|
|
36
|
+
it('should use the provided storage adapter', async () => {
|
|
37
|
+
// Generate auth URL
|
|
38
|
+
const { url, state } = await oauth2Client.authorize({
|
|
39
|
+
provider: 'google',
|
|
40
|
+
userId: 'agent123',
|
|
41
|
+
email: 'agent123@dain.local'
|
|
42
|
+
});
|
|
43
|
+
expect(url).toContain('https://accounts.google.com/o/oauth2/v2/auth');
|
|
44
|
+
expect(url).toContain('access_type=offline');
|
|
45
|
+
expect(url).toContain('prompt=consent');
|
|
46
|
+
expect(state).toBeDefined();
|
|
47
|
+
});
|
|
48
|
+
it('should save tokens to the provided storage', async () => {
|
|
49
|
+
const mockToken = {
|
|
50
|
+
accessToken: 'mock-access-token',
|
|
51
|
+
refreshToken: 'mock-refresh-token',
|
|
52
|
+
expiresAt: new Date(Date.now() + 3600000), // 1 hour
|
|
53
|
+
tokenType: 'Bearer',
|
|
54
|
+
scope: 'email profile'
|
|
55
|
+
};
|
|
56
|
+
// Save a token
|
|
57
|
+
const saved = await storage.saveToken({
|
|
58
|
+
provider: 'google',
|
|
59
|
+
userId: 'agent123',
|
|
60
|
+
email: 'agent123@dain.local',
|
|
61
|
+
token: mockToken
|
|
62
|
+
});
|
|
63
|
+
expect(saved).toBeDefined();
|
|
64
|
+
expect(saved.provider).toBe('google');
|
|
65
|
+
expect(saved.userId).toBe('agent123');
|
|
66
|
+
expect(saved.email).toBe('agent123@dain.local');
|
|
67
|
+
});
|
|
68
|
+
it('should query tokens with auto-refresh', async () => {
|
|
69
|
+
// Save an expired token with refresh token
|
|
70
|
+
const expiredToken = {
|
|
71
|
+
accessToken: 'expired-access-token',
|
|
72
|
+
refreshToken: 'valid-refresh-token',
|
|
73
|
+
expiresAt: new Date(Date.now() - 3600000), // Expired 1 hour ago
|
|
74
|
+
tokenType: 'Bearer',
|
|
75
|
+
scope: 'email profile'
|
|
76
|
+
};
|
|
77
|
+
await storage.saveToken({
|
|
78
|
+
provider: 'google',
|
|
79
|
+
userId: 'agent123',
|
|
80
|
+
email: 'agent123@dain.local',
|
|
81
|
+
token: expiredToken
|
|
82
|
+
});
|
|
83
|
+
// Query tokens - should attempt refresh
|
|
84
|
+
const tokens = await oauth2Client.queryTokens({
|
|
85
|
+
userId: 'agent123',
|
|
86
|
+
provider: 'google'
|
|
87
|
+
});
|
|
88
|
+
// Since we can't actually refresh in tests, the expired token would be filtered out
|
|
89
|
+
expect(tokens).toEqual([]);
|
|
90
|
+
});
|
|
91
|
+
it('should work with agent ID to email mapping', async () => {
|
|
92
|
+
const agentId = 'agent123';
|
|
93
|
+
const dainEmail = `${agentId}@dain.local`;
|
|
94
|
+
// Save a valid token
|
|
95
|
+
const validToken = {
|
|
96
|
+
accessToken: 'valid-access-token',
|
|
97
|
+
refreshToken: 'valid-refresh-token',
|
|
98
|
+
expiresAt: new Date(Date.now() + 3600000), // 1 hour from now
|
|
99
|
+
tokenType: 'Bearer',
|
|
100
|
+
scope: 'email profile'
|
|
101
|
+
};
|
|
102
|
+
await storage.saveToken({
|
|
103
|
+
provider: 'google',
|
|
104
|
+
userId: agentId,
|
|
105
|
+
email: dainEmail,
|
|
106
|
+
token: validToken
|
|
107
|
+
});
|
|
108
|
+
// Query by userId (agentId)
|
|
109
|
+
const tokensByUser = await oauth2Client.queryTokens({
|
|
110
|
+
userId: agentId
|
|
111
|
+
});
|
|
112
|
+
expect(tokensByUser).toHaveLength(1);
|
|
113
|
+
expect(tokensByUser[0].userId).toBe(agentId);
|
|
114
|
+
expect(tokensByUser[0].email).toBe(dainEmail);
|
|
115
|
+
// Query by email
|
|
116
|
+
const tokensByEmail = await oauth2Client.queryTokens({
|
|
117
|
+
email: dainEmail
|
|
118
|
+
});
|
|
119
|
+
expect(tokensByEmail).toHaveLength(1);
|
|
120
|
+
expect(tokensByEmail[0].userId).toBe(agentId);
|
|
121
|
+
expect(tokensByEmail[0].email).toBe(dainEmail);
|
|
122
|
+
// Get valid token
|
|
123
|
+
const validTokenResult = await oauth2Client.getValidToken('google', dainEmail);
|
|
124
|
+
expect(validTokenResult.accessToken).toBe('valid-access-token');
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
describe('OAuth2Client Methods', () => {
|
|
128
|
+
it('should expose all necessary methods', () => {
|
|
129
|
+
// Check that all required methods exist
|
|
130
|
+
expect(typeof oauth2Client.authorize).toBe('function');
|
|
131
|
+
expect(typeof oauth2Client.handleCallback).toBe('function');
|
|
132
|
+
expect(typeof oauth2Client.queryTokens).toBe('function');
|
|
133
|
+
expect(typeof oauth2Client.getAccessToken).toBe('function');
|
|
134
|
+
expect(typeof oauth2Client.getValidToken).toBe('function');
|
|
135
|
+
expect(typeof oauth2Client.getTokensByUserId).toBe('function');
|
|
136
|
+
expect(typeof oauth2Client.getTokensByEmail).toBe('function');
|
|
137
|
+
expect(typeof oauth2Client.deleteToken).toBe('function');
|
|
138
|
+
expect(typeof oauth2Client.cleanupExpiredTokens).toBe('function');
|
|
139
|
+
});
|
|
140
|
+
it('should include extraAuthParams in authorization URL', async () => {
|
|
141
|
+
const { url } = await oauth2Client.authorize({
|
|
142
|
+
provider: 'google',
|
|
143
|
+
userId: 'agent123',
|
|
144
|
+
email: 'agent123@dain.local'
|
|
145
|
+
});
|
|
146
|
+
const urlObj = new URL(url);
|
|
147
|
+
expect(urlObj.searchParams.get('access_type')).toBe('offline');
|
|
148
|
+
expect(urlObj.searchParams.get('prompt')).toBe('consent');
|
|
149
|
+
expect(urlObj.searchParams.get('client_id')).toBe('test-client-id');
|
|
150
|
+
expect(urlObj.searchParams.get('redirect_uri')).toBe('http://localhost:3000/callback');
|
|
151
|
+
expect(urlObj.searchParams.get('scope')).toBe('email profile');
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
describe('DrizzleStorageAdapter Compatibility', () => {
|
|
155
|
+
it('should work with any storage adapter implementing the interface', async () => {
|
|
156
|
+
// This test demonstrates that OAuth2Client works with any storage adapter
|
|
157
|
+
// In production, this would be DrizzleStorageAdapter
|
|
158
|
+
const customStorage = new oauth2_token_manager_1.InMemoryStorageAdapter();
|
|
159
|
+
const clientWithCustomStorage = new oauth2_token_manager_1.OAuth2Client({
|
|
160
|
+
storage: customStorage,
|
|
161
|
+
providers: {
|
|
162
|
+
google: {
|
|
163
|
+
clientId: 'test-client-id',
|
|
164
|
+
clientSecret: 'test-client-secret',
|
|
165
|
+
authorizationUrl: 'https://accounts.google.com/o/oauth2/v2/auth',
|
|
166
|
+
tokenUrl: 'https://oauth2.googleapis.com/token',
|
|
167
|
+
redirectUri: 'http://localhost:3000/callback',
|
|
168
|
+
scopes: ['email', 'profile']
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
});
|
|
172
|
+
// Should work the same way
|
|
173
|
+
const { url } = await clientWithCustomStorage.authorize({
|
|
174
|
+
provider: 'google',
|
|
175
|
+
userId: 'agent123',
|
|
176
|
+
email: 'agent123@dain.local'
|
|
177
|
+
});
|
|
178
|
+
expect(url).toContain('https://accounts.google.com/o/oauth2/v2/auth');
|
|
179
|
+
});
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
//# sourceMappingURL=oauth2-client-integration.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth2-client-integration.test.js","sourceRoot":"","sources":["../../src/__tests__/oauth2-client-integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const server_1 = require("../service/server");
|
|
5
|
+
const oauth2_token_manager_1 = require("@dainprotocol/oauth2-token-manager");
|
|
6
|
+
const core_1 = require("../service/core");
|
|
7
|
+
const zod_1 = require("zod");
|
|
8
|
+
const tweetnacl_1 = tslib_1.__importDefault(require("tweetnacl"));
|
|
9
|
+
describe("OAuth2Client in server.ts", () => {
|
|
10
|
+
it("should make 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 = keyPair.secretKey.slice(0, 32);
|
|
14
|
+
let capturedContext = null;
|
|
15
|
+
const tool = (0, core_1.createTool)({
|
|
16
|
+
id: "test-oauth-tool",
|
|
17
|
+
name: "Test OAuth Tool",
|
|
18
|
+
description: "Test tool",
|
|
19
|
+
input: zod_1.z.object({}),
|
|
20
|
+
output: zod_1.z.object({ success: zod_1.z.boolean() }),
|
|
21
|
+
handler: async (input, agentInfo, context) => {
|
|
22
|
+
capturedContext = context;
|
|
23
|
+
return {
|
|
24
|
+
text: "Success",
|
|
25
|
+
data: { success: true },
|
|
26
|
+
ui: null,
|
|
27
|
+
};
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
const config = {
|
|
31
|
+
identity: {
|
|
32
|
+
orgId: "test-org",
|
|
33
|
+
agentId: "test-agent",
|
|
34
|
+
},
|
|
35
|
+
oauth2: {
|
|
36
|
+
baseUrl: "http://localhost:9999",
|
|
37
|
+
tokenStore: new oauth2_token_manager_1.InMemoryStorageAdapter(),
|
|
38
|
+
providers: {
|
|
39
|
+
google: {
|
|
40
|
+
clientId: "test-client",
|
|
41
|
+
clientSecret: "test-secret",
|
|
42
|
+
authorizationUrl: "https://accounts.google.com/o/oauth2/v2/auth",
|
|
43
|
+
tokenUrl: "https://oauth2.googleapis.com/token",
|
|
44
|
+
scopes: ["profile", "email"],
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
const app = (0, server_1.setupHttpServer)(config, [tool], [], [], {
|
|
50
|
+
id: "test",
|
|
51
|
+
orgId: "test-org",
|
|
52
|
+
agentId: "test-agent",
|
|
53
|
+
title: "Test",
|
|
54
|
+
description: "Test",
|
|
55
|
+
version: "1.0.0",
|
|
56
|
+
author: "Test",
|
|
57
|
+
tags: [],
|
|
58
|
+
}, privateKey, [], [], [], []);
|
|
59
|
+
// Verify oauth2 is set on the app
|
|
60
|
+
expect(app.oauth2).toBeDefined();
|
|
61
|
+
expect(app.oauth2?.client).toBeDefined();
|
|
62
|
+
// Log for debugging
|
|
63
|
+
console.log("app.oauth2 exists:", !!app.oauth2);
|
|
64
|
+
console.log("app.oauth2.client exists:", !!(app.oauth2 && app.oauth2.client));
|
|
65
|
+
// Simulate tool execution to capture context - this is what server.ts does
|
|
66
|
+
const toolContext = {
|
|
67
|
+
app,
|
|
68
|
+
oauth2: app.oauth2,
|
|
69
|
+
oauth2Client: app.oauth2 ? app.oauth2.client : undefined,
|
|
70
|
+
extraData: {},
|
|
71
|
+
updateUI: async () => { },
|
|
72
|
+
addProcess: async () => { },
|
|
73
|
+
};
|
|
74
|
+
await tool.handler({}, { agentId: "test", address: "test", id: "test" }, toolContext);
|
|
75
|
+
// Log captured context
|
|
76
|
+
console.log("Captured context keys:", Object.keys(capturedContext || {}));
|
|
77
|
+
console.log("Context oauth2:", !!capturedContext?.oauth2);
|
|
78
|
+
console.log("Context oauth2Client:", !!capturedContext?.oauth2Client);
|
|
79
|
+
// Verify the captured context
|
|
80
|
+
expect(capturedContext).toBeDefined();
|
|
81
|
+
expect(capturedContext.oauth2).toBeDefined();
|
|
82
|
+
expect(capturedContext.oauth2Client).toBeDefined();
|
|
83
|
+
// Verify oauth2Client has the expected methods
|
|
84
|
+
expect(typeof capturedContext.oauth2Client.queryTokens).toBe("function");
|
|
85
|
+
expect(typeof capturedContext.oauth2Client.getValidToken).toBe("function");
|
|
86
|
+
expect(typeof capturedContext.oauth2Client.getAccessToken).toBe("function");
|
|
87
|
+
expect(typeof capturedContext.oauth2Client.registerProvider).toBe("function");
|
|
88
|
+
});
|
|
89
|
+
it("should have oauth2Client as undefined when OAuth2 is not configured", async () => {
|
|
90
|
+
// Generate test keys
|
|
91
|
+
const keyPair = tweetnacl_1.default.sign.keyPair();
|
|
92
|
+
const privateKey = keyPair.secretKey.slice(0, 32);
|
|
93
|
+
let capturedContext = null;
|
|
94
|
+
const tool = (0, core_1.createTool)({
|
|
95
|
+
id: "test-no-oauth-tool",
|
|
96
|
+
name: "Test No OAuth Tool",
|
|
97
|
+
description: "Test tool",
|
|
98
|
+
input: zod_1.z.object({}),
|
|
99
|
+
output: zod_1.z.object({ success: zod_1.z.boolean() }),
|
|
100
|
+
handler: async (input, agentInfo, context) => {
|
|
101
|
+
capturedContext = context;
|
|
102
|
+
return {
|
|
103
|
+
text: "Success",
|
|
104
|
+
data: { success: true },
|
|
105
|
+
ui: null,
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
});
|
|
109
|
+
const config = {
|
|
110
|
+
identity: {
|
|
111
|
+
orgId: "test-org",
|
|
112
|
+
agentId: "test-agent",
|
|
113
|
+
},
|
|
114
|
+
// No oauth2 configuration
|
|
115
|
+
};
|
|
116
|
+
const app = (0, server_1.setupHttpServer)(config, [tool], [], [], {
|
|
117
|
+
id: "test",
|
|
118
|
+
orgId: "test-org",
|
|
119
|
+
agentId: "test-agent",
|
|
120
|
+
title: "Test",
|
|
121
|
+
description: "Test",
|
|
122
|
+
version: "1.0.0",
|
|
123
|
+
author: "Test",
|
|
124
|
+
tags: [],
|
|
125
|
+
}, privateKey, [], [], [], []);
|
|
126
|
+
// Verify oauth2 is not set on the app
|
|
127
|
+
expect(app.oauth2).toBeUndefined();
|
|
128
|
+
// Simulate tool execution to capture context - this is what server.ts does
|
|
129
|
+
const toolContext = {
|
|
130
|
+
app,
|
|
131
|
+
oauth2: app.oauth2,
|
|
132
|
+
oauth2Client: app.oauth2 ? app.oauth2.client : undefined,
|
|
133
|
+
extraData: {},
|
|
134
|
+
updateUI: async () => { },
|
|
135
|
+
addProcess: async () => { },
|
|
136
|
+
};
|
|
137
|
+
await tool.handler({}, { agentId: "test", address: "test", id: "test" }, toolContext);
|
|
138
|
+
// Verify the captured context
|
|
139
|
+
expect(capturedContext).toBeDefined();
|
|
140
|
+
expect(capturedContext.oauth2).toBeUndefined();
|
|
141
|
+
expect(capturedContext.oauth2Client).toBeUndefined();
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
//# sourceMappingURL=oauth2-client-simple.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth2-client-simple.test.js","sourceRoot":"","sources":["../../src/__tests__/oauth2-client-simple.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const nodeService_1 = require("../service/nodeService");
|
|
6
|
+
const core_1 = require("../service/core");
|
|
7
|
+
const ed25519_1 = require("@noble/curves/ed25519");
|
|
8
|
+
const bs58_1 = tslib_1.__importDefault(require("bs58"));
|
|
9
|
+
const client_auth_1 = require("../client/client-auth");
|
|
10
|
+
const client_1 = require("../client/client");
|
|
11
|
+
const oauth2_token_manager_1 = require("@dainprotocol/oauth2-token-manager");
|
|
12
|
+
describe("OAuth2Client in Context", () => {
|
|
13
|
+
let server;
|
|
14
|
+
const port = 4592; // Different port to avoid conflicts
|
|
15
|
+
// Generate keys for the service
|
|
16
|
+
const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
|
|
17
|
+
const publicKey = ed25519_1.ed25519.getPublicKey(privateKey);
|
|
18
|
+
// Generate keys for the client
|
|
19
|
+
const clientPrivateKey = ed25519_1.ed25519.utils.randomPrivateKey();
|
|
20
|
+
const agentAuth = new client_auth_1.DainClientAuth({
|
|
21
|
+
privateKeyBase58: bs58_1.default.encode(clientPrivateKey),
|
|
22
|
+
agentId: "oauth2-context-test-agent",
|
|
23
|
+
orgId: "oauth2-context-test-org",
|
|
24
|
+
});
|
|
25
|
+
let dainConnection;
|
|
26
|
+
// Track oauth2Client details
|
|
27
|
+
const oauth2ClientInfo = {
|
|
28
|
+
wasPresent: false,
|
|
29
|
+
hadGetAccessTokenMethod: false,
|
|
30
|
+
hadGetValidTokenMethod: false,
|
|
31
|
+
methodsFound: [],
|
|
32
|
+
callCount: 0
|
|
33
|
+
};
|
|
34
|
+
// Create a context that verifies oauth2Client
|
|
35
|
+
const oauth2VerifyContext = (0, core_1.createContext)({
|
|
36
|
+
id: "oauth2-verify-context",
|
|
37
|
+
name: "OAuth2 Verify Context",
|
|
38
|
+
description: "Context that verifies oauth2Client is passed",
|
|
39
|
+
getContextData: async (agentInfo, extraData) => {
|
|
40
|
+
oauth2ClientInfo.callCount++;
|
|
41
|
+
// Check if oauth2Client is present
|
|
42
|
+
oauth2ClientInfo.wasPresent = !!extraData?.oauth2Client;
|
|
43
|
+
if (extraData?.oauth2Client) {
|
|
44
|
+
// Get all property names including methods from the prototype
|
|
45
|
+
const allProps = [...Object.keys(extraData.oauth2Client)];
|
|
46
|
+
const prototypeMethods = Object.getOwnPropertyNames(Object.getPrototypeOf(extraData.oauth2Client));
|
|
47
|
+
oauth2ClientInfo.methodsFound = [...new Set([...allProps, ...prototypeMethods])].filter(m => m !== 'constructor');
|
|
48
|
+
// Check for expected methods
|
|
49
|
+
oauth2ClientInfo.hadGetAccessTokenMethod = typeof extraData.oauth2Client.getAccessToken === 'function';
|
|
50
|
+
oauth2ClientInfo.hadGetValidTokenMethod = typeof extraData.oauth2Client.getValidToken === 'function';
|
|
51
|
+
console.log("OAuth2Client detected with methods:", oauth2ClientInfo.methodsFound);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log("No OAuth2Client in extraData");
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
oauth2ClientPresent: oauth2ClientInfo.wasPresent,
|
|
58
|
+
oauth2ClientMethods: oauth2ClientInfo.methodsFound,
|
|
59
|
+
hasGetAccessToken: oauth2ClientInfo.hadGetAccessTokenMethod,
|
|
60
|
+
hasGetValidToken: oauth2ClientInfo.hadGetValidTokenMethod,
|
|
61
|
+
callCount: oauth2ClientInfo.callCount
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
// Create a simple tool
|
|
66
|
+
const testTool = (0, core_1.createTool)({
|
|
67
|
+
id: "oauth2-test-tool",
|
|
68
|
+
name: "OAuth2 Test Tool",
|
|
69
|
+
description: "Tool for testing oauth2 context",
|
|
70
|
+
input: zod_1.z.object({
|
|
71
|
+
message: zod_1.z.string()
|
|
72
|
+
}),
|
|
73
|
+
output: zod_1.z.object({
|
|
74
|
+
result: zod_1.z.string()
|
|
75
|
+
}),
|
|
76
|
+
handler: async (input) => {
|
|
77
|
+
return {
|
|
78
|
+
text: `Processed: ${input.message}`,
|
|
79
|
+
data: {
|
|
80
|
+
result: `Executed: ${input.message}`
|
|
81
|
+
},
|
|
82
|
+
ui: undefined
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const dainService = (0, nodeService_1.defineDAINService)({
|
|
87
|
+
metadata: {
|
|
88
|
+
title: "OAuth2 Context Test",
|
|
89
|
+
description: "Testing oauth2Client in contexts",
|
|
90
|
+
version: "1.0.0",
|
|
91
|
+
author: "Test",
|
|
92
|
+
tags: ["test", "oauth2", "context"]
|
|
93
|
+
},
|
|
94
|
+
identity: {
|
|
95
|
+
publicKey: bs58_1.default.encode(publicKey),
|
|
96
|
+
privateKey: bs58_1.default.encode(privateKey),
|
|
97
|
+
agentId: "test-oauth2-service-agent",
|
|
98
|
+
orgId: "test-oauth2-service-org"
|
|
99
|
+
},
|
|
100
|
+
// Configure OAuth2
|
|
101
|
+
oauth2: {
|
|
102
|
+
baseUrl: `http://localhost:${port}`,
|
|
103
|
+
providers: {
|
|
104
|
+
test: {
|
|
105
|
+
clientId: "test-client-id",
|
|
106
|
+
clientSecret: "test-client-secret",
|
|
107
|
+
authorizationUrl: "https://example.com/oauth/authorize",
|
|
108
|
+
tokenUrl: "https://example.com/oauth/token",
|
|
109
|
+
scopes: ["read", "write"]
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
tokenStore: new oauth2_token_manager_1.InMemoryStorageAdapter()
|
|
113
|
+
},
|
|
114
|
+
tools: [testTool],
|
|
115
|
+
contexts: [oauth2VerifyContext]
|
|
116
|
+
});
|
|
117
|
+
beforeAll(async () => {
|
|
118
|
+
// Reset tracking
|
|
119
|
+
oauth2ClientInfo.wasPresent = false;
|
|
120
|
+
oauth2ClientInfo.hadGetAccessTokenMethod = false;
|
|
121
|
+
oauth2ClientInfo.hadGetValidTokenMethod = false;
|
|
122
|
+
oauth2ClientInfo.methodsFound = [];
|
|
123
|
+
oauth2ClientInfo.callCount = 0;
|
|
124
|
+
server = await dainService.startNode({ port });
|
|
125
|
+
dainConnection = new client_1.DainServiceConnection(`http://localhost:${port}`, agentAuth);
|
|
126
|
+
});
|
|
127
|
+
afterAll(async () => {
|
|
128
|
+
if (server && server.shutdown) {
|
|
129
|
+
await server.shutdown();
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
beforeEach(() => {
|
|
133
|
+
// Reset tracking before each test
|
|
134
|
+
oauth2ClientInfo.wasPresent = false;
|
|
135
|
+
oauth2ClientInfo.hadGetAccessTokenMethod = false;
|
|
136
|
+
oauth2ClientInfo.hadGetValidTokenMethod = false;
|
|
137
|
+
oauth2ClientInfo.methodsFound = [];
|
|
138
|
+
oauth2ClientInfo.callCount = 0;
|
|
139
|
+
});
|
|
140
|
+
describe("OAuth2Client availability in context", () => {
|
|
141
|
+
it("should pass oauth2Client to context when OAuth2 is configured", async () => {
|
|
142
|
+
const contexts = await dainConnection.getAllContexts();
|
|
143
|
+
expect(contexts).toHaveLength(1);
|
|
144
|
+
expect(contexts[0].id).toBe("oauth2-verify-context");
|
|
145
|
+
// Verify oauth2Client was passed
|
|
146
|
+
expect(oauth2ClientInfo.wasPresent).toBe(true);
|
|
147
|
+
expect(contexts[0].data.oauth2ClientPresent).toBe(true);
|
|
148
|
+
});
|
|
149
|
+
it("should provide oauth2Client with expected methods", async () => {
|
|
150
|
+
const contexts = await dainConnection.getAllContexts();
|
|
151
|
+
// Check that oauth2Client has the expected methods
|
|
152
|
+
expect(oauth2ClientInfo.hadGetAccessTokenMethod).toBe(true);
|
|
153
|
+
expect(oauth2ClientInfo.hadGetValidTokenMethod).toBe(true);
|
|
154
|
+
// Verify through the returned data
|
|
155
|
+
expect(contexts[0].data.hasGetAccessToken).toBe(true);
|
|
156
|
+
expect(contexts[0].data.hasGetValidToken).toBe(true);
|
|
157
|
+
// Check that methods array contains expected methods
|
|
158
|
+
expect(oauth2ClientInfo.methodsFound).toContain('getAccessToken');
|
|
159
|
+
expect(oauth2ClientInfo.methodsFound).toContain('getValidToken');
|
|
160
|
+
});
|
|
161
|
+
it("should pass oauth2Client when using callToolAndGetNewContext", async () => {
|
|
162
|
+
const result = await dainConnection.callToolAndGetNewContext("oauth2-test-tool", {
|
|
163
|
+
message: "Testing with OAuth2"
|
|
164
|
+
});
|
|
165
|
+
// Verify tool executed
|
|
166
|
+
expect(result.toolResult.text).toBe("Processed: Testing with OAuth2");
|
|
167
|
+
// Verify context was called with oauth2Client
|
|
168
|
+
expect(oauth2ClientInfo.wasPresent).toBe(true);
|
|
169
|
+
expect(result.context[0].data.oauth2ClientPresent).toBe(true);
|
|
170
|
+
expect(result.context[0].data.hasGetAccessToken).toBe(true);
|
|
171
|
+
expect(result.context[0].data.hasGetValidToken).toBe(true);
|
|
172
|
+
});
|
|
173
|
+
it("should consistently pass oauth2Client across multiple context calls", async () => {
|
|
174
|
+
// Reset counter
|
|
175
|
+
oauth2ClientInfo.callCount = 0;
|
|
176
|
+
// Make multiple calls
|
|
177
|
+
await dainConnection.getAllContexts();
|
|
178
|
+
await dainConnection.callToolAndGetNewContext("oauth2-test-tool", { message: "call 1" });
|
|
179
|
+
await dainConnection.getAllContexts();
|
|
180
|
+
// Should have been called 3 times
|
|
181
|
+
expect(oauth2ClientInfo.callCount).toBe(3);
|
|
182
|
+
// OAuth2Client should have been present in all calls
|
|
183
|
+
// (we only track the last state, but if it's true after 3 calls, it was passed)
|
|
184
|
+
expect(oauth2ClientInfo.wasPresent).toBe(true);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
describe("OAuth2Client methods accessibility", () => {
|
|
188
|
+
it("should provide a functional oauth2Client object", async () => {
|
|
189
|
+
const contexts = await dainConnection.getAllContexts();
|
|
190
|
+
// The context should report having the oauth2Client
|
|
191
|
+
expect(contexts[0].data.oauth2ClientPresent).toBe(true);
|
|
192
|
+
// Verify the methods are actually functions (checked in our context)
|
|
193
|
+
expect(contexts[0].data.hasGetAccessToken).toBe(true);
|
|
194
|
+
expect(contexts[0].data.hasGetValidToken).toBe(true);
|
|
195
|
+
// Verify we found multiple methods (should be more than just 2)
|
|
196
|
+
expect(oauth2ClientInfo.methodsFound.length).toBeGreaterThan(0);
|
|
197
|
+
expect(oauth2ClientInfo.methodsFound).toEqual(expect.arrayContaining(['getAccessToken', 'getValidToken']));
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
//# sourceMappingURL=oauth2-context.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth2-context.test.js","sourceRoot":"","sources":["../../src/__tests__/oauth2-context.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|