@dainprotocol/service-sdk 1.0.3

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 (55) hide show
  1. package/dist/__tests__/auth.test.d.ts +1 -0
  2. package/dist/__tests__/auth.test.js +110 -0
  3. package/dist/__tests__/auth.test.js.map +1 -0
  4. package/dist/__tests__/convertToVercelTool.test.d.ts +1 -0
  5. package/dist/__tests__/convertToVercelTool.test.js +101 -0
  6. package/dist/__tests__/convertToVercelTool.test.js.map +1 -0
  7. package/dist/__tests__/core.test.d.ts +1 -0
  8. package/dist/__tests__/core.test.js +152 -0
  9. package/dist/__tests__/core.test.js.map +1 -0
  10. package/dist/__tests__/integration.test.d.ts +1 -0
  11. package/dist/__tests__/integration.test.js +180 -0
  12. package/dist/__tests__/integration.test.js.map +1 -0
  13. package/dist/__tests__/types.test.d.ts +1 -0
  14. package/dist/__tests__/types.test.js +95 -0
  15. package/dist/__tests__/types.test.js.map +1 -0
  16. package/dist/client/client-auth.d.ts +20 -0
  17. package/dist/client/client-auth.js +64 -0
  18. package/dist/client/client-auth.js.map +1 -0
  19. package/dist/client/client.d.ts +20 -0
  20. package/dist/client/client.js +122 -0
  21. package/dist/client/client.js.map +1 -0
  22. package/dist/client/index.d.ts +2 -0
  23. package/dist/client/index.js +6 -0
  24. package/dist/client/index.js.map +1 -0
  25. package/dist/client/types.d.ts +146 -0
  26. package/dist/client/types.js +47 -0
  27. package/dist/client/types.js.map +1 -0
  28. package/dist/index.d.ts +2 -0
  29. package/dist/index.js +7 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/lib/convertToVercelTool.d.ts +6 -0
  32. package/dist/lib/convertToVercelTool.js +59 -0
  33. package/dist/lib/convertToVercelTool.js.map +1 -0
  34. package/dist/lib/schemaStructure.d.ts +3 -0
  35. package/dist/lib/schemaStructure.js +90 -0
  36. package/dist/lib/schemaStructure.js.map +1 -0
  37. package/dist/service/auth.d.ts +11 -0
  38. package/dist/service/auth.js +104 -0
  39. package/dist/service/auth.js.map +1 -0
  40. package/dist/service/core.d.ts +21 -0
  41. package/dist/service/core.js +116 -0
  42. package/dist/service/core.js.map +1 -0
  43. package/dist/service/index.d.ts +4 -0
  44. package/dist/service/index.js +15 -0
  45. package/dist/service/index.js.map +1 -0
  46. package/dist/service/server.d.ts +3 -0
  47. package/dist/service/server.js +166 -0
  48. package/dist/service/server.js.map +1 -0
  49. package/dist/service/service.d.ts +2 -0
  50. package/dist/service/service.js +118 -0
  51. package/dist/service/service.js.map +1 -0
  52. package/dist/service/types.d.ts +94 -0
  53. package/dist/service/types.js +4 -0
  54. package/dist/service/types.js.map +1 -0
  55. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ // File: src/__tests__/auth.test.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const tslib_1 = require("tslib");
5
+ const client_auth_1 = require("@/client/client-auth");
6
+ const auth_1 = require("../service/auth");
7
+ const ed25519_1 = require("@noble/curves/ed25519");
8
+ const sha256_1 = require("@noble/hashes/sha256");
9
+ const utils_1 = require("@noble/hashes/utils");
10
+ const bs58_1 = tslib_1.__importDefault(require("bs58"));
11
+ describe("Auth Module", () => {
12
+ // Generate a key pair for testing
13
+ const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
14
+ const publicKey = ed25519_1.ed25519.getPublicKey(privateKey);
15
+ // Convert public key to base58 (Solana address format)
16
+ const address = bs58_1.default.encode(publicKey);
17
+ const clientPrivateKey = ed25519_1.ed25519.utils.randomPrivateKey();
18
+ const clientAddress = bs58_1.default.encode(ed25519_1.ed25519.getPublicKey(clientPrivateKey));
19
+ const agentAuth = new client_auth_1.DainClientAuth({
20
+ privateKeyBase58: bs58_1.default.encode(clientPrivateKey),
21
+ agentId: "agent-12",
22
+ orgId: "org-12",
23
+ });
24
+ test("verifySignature validates correct signatures", () => {
25
+ const message = "Hello, World!";
26
+ const messageHash = (0, sha256_1.sha256)(message);
27
+ const signature = ed25519_1.ed25519.sign(messageHash, privateKey);
28
+ expect((0, auth_1.verifySignature)((0, utils_1.bytesToHex)(signature), message, address)).toBe(true);
29
+ });
30
+ test("verifySignature rejects incorrect signatures", () => {
31
+ const message = "Hello, World!";
32
+ const incorrectMessage = "Hello, World?";
33
+ const messageHash = (0, sha256_1.sha256)(message);
34
+ const signature = ed25519_1.ed25519.sign(messageHash, privateKey);
35
+ expect((0, auth_1.verifySignature)((0, utils_1.bytesToHex)(signature), incorrectMessage, address)).toBe(false);
36
+ });
37
+ test("isValidSolanaAddress correctly validates Solana addresses", () => {
38
+ expect((0, auth_1.isValidSolanaAddress)(address)).toBe(true);
39
+ expect((0, auth_1.isValidSolanaAddress)("invalid_address")).toBe(false);
40
+ });
41
+ test.only("createRequestSignature generates a valid signature", async () => {
42
+ const method = "GET";
43
+ const path = "/api/test";
44
+ const headers = { "content-type": "application/json" };
45
+ const body = "{}";
46
+ const { signature, timestamp } = await agentAuth.signRequest(method, path, body);
47
+ headers["X-DAIN-TIMESTAMP"] = timestamp;
48
+ const verified = (0, auth_1.verifyRequestSignature)(signature, method, path, (0, auth_1.sanitizeHeaders)(headers), body, clientAddress);
49
+ expect(verified).toBe(true);
50
+ });
51
+ test("verifyRequestSignature validates correct request signatures", async () => {
52
+ const method = "POST";
53
+ const path = "/api/test";
54
+ const headers = { "content-type": "application/json" };
55
+ const body = JSON.stringify({ key: "value" });
56
+ const { signature, timestamp } = await agentAuth.signRequest(method, path, body);
57
+ const validHeaders = { ...headers, "X-DAIN-TIMESTAMP": timestamp };
58
+ expect((0, auth_1.verifyRequestSignature)(signature, method, path, validHeaders, body, clientAddress)).toBe(true);
59
+ });
60
+ test("verifyRequestSignature rejects incorrect request signatures", async () => {
61
+ const method = "POST";
62
+ const path = "/api/test";
63
+ const headers = { "content-type": "application/json" };
64
+ const body = JSON.stringify({ key: "value" });
65
+ const { signature, timestamp } = await agentAuth.signRequest(method, path, body);
66
+ const invalidHeaders = {
67
+ ...headers,
68
+ "X-DAIN-TIMESTAMP": (parseInt(timestamp) + 1).toString(),
69
+ }; // Modifying timestamp
70
+ expect((0, auth_1.verifyRequestSignature)(signature, method, path, invalidHeaders, body, clientAddress)).toBe(false);
71
+ });
72
+ describe("signResponse and verifyResponse", () => {
73
+ it("should sign a response and verify it successfully", () => {
74
+ const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
75
+ const publicKey = ed25519_1.ed25519.getPublicKey(privateKey);
76
+ const responseBody = JSON.stringify({ message: "Hello, World!" });
77
+ const { signature, timestamp } = (0, auth_1.signResponse)(privateKey, responseBody);
78
+ const isValid = (0, auth_1.verifyResponse)(publicKey, responseBody, signature, timestamp);
79
+ expect(isValid).toBe(true);
80
+ });
81
+ it("should fail verification with tampered response body", () => {
82
+ const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
83
+ const publicKey = ed25519_1.ed25519.getPublicKey(privateKey);
84
+ const responseBody = JSON.stringify({ message: "Hello, World!" });
85
+ const { signature, timestamp } = (0, auth_1.signResponse)(privateKey, responseBody);
86
+ const tamperedBody = JSON.stringify({ message: "Tampered message" });
87
+ const isValid = (0, auth_1.verifyResponse)(publicKey, tamperedBody, signature, timestamp);
88
+ expect(isValid).toBe(false);
89
+ });
90
+ it("should fail verification with incorrect public key", () => {
91
+ const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
92
+ const wrongPrivateKey = ed25519_1.ed25519.utils.randomPrivateKey();
93
+ const wrongPublicKey = ed25519_1.ed25519.getPublicKey(wrongPrivateKey);
94
+ const responseBody = JSON.stringify({ message: "Hello, World!" });
95
+ const { signature, timestamp } = (0, auth_1.signResponse)(privateKey, responseBody);
96
+ const isValid = (0, auth_1.verifyResponse)(wrongPublicKey, responseBody, signature, timestamp);
97
+ expect(isValid).toBe(false);
98
+ });
99
+ it("should fail verification with tampered timestamp", () => {
100
+ const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
101
+ const publicKey = ed25519_1.ed25519.getPublicKey(privateKey);
102
+ const responseBody = JSON.stringify({ message: "Hello, World!" });
103
+ const { signature, timestamp } = (0, auth_1.signResponse)(privateKey, responseBody);
104
+ const tamperedTimestamp = (parseInt(timestamp) + 1000).toString();
105
+ const isValid = (0, auth_1.verifyResponse)(publicKey, responseBody, signature, tamperedTimestamp);
106
+ expect(isValid).toBe(false);
107
+ });
108
+ });
109
+ });
110
+ //# sourceMappingURL=auth.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.test.js","sourceRoot":"","sources":["../../src/__tests__/auth.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ //File: src/___tests___/convertToVercelTool.test.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const convertToVercelTool_1 = require("../lib/convertToVercelTool");
5
+ const zod_1 = require("zod");
6
+ describe('HTTP to Vercel AI Tool Converter', () => {
7
+ it('should convert a simple HTTP tool output to a Vercel AI tool format', () => {
8
+ const httpToolOutput = {
9
+ id: 'get-weather',
10
+ name: 'Get Weather',
11
+ description: 'Fetches weather for a city',
12
+ pricing: { pricePerUse: 0.01, currency: 'USD' },
13
+ inputSchema: {
14
+ type: 'ZodObject',
15
+ shape: {
16
+ city: {
17
+ type: 'ZodString',
18
+ description: 'The name of the city'
19
+ },
20
+ country: {
21
+ type: 'ZodString',
22
+ description: 'The country of the city'
23
+ }
24
+ }
25
+ },
26
+ outputSchema: {
27
+ type: 'ZodObject',
28
+ shape: {
29
+ temperature: { type: 'ZodNumber' },
30
+ condition: { type: 'ZodString' }
31
+ }
32
+ }
33
+ };
34
+ const vercelAITool = (0, convertToVercelTool_1.convertHttpToolToVercelAITool)(httpToolOutput);
35
+ expect(vercelAITool).toEqual({
36
+ name: 'get-weather',
37
+ description: 'Fetches weather for a city',
38
+ parameters: expect.any(zod_1.z.ZodObject),
39
+ });
40
+ const params = vercelAITool.parameters.safeParse({
41
+ city: 'New York',
42
+ country: 'USA',
43
+ });
44
+ expect(params.success).toBe(true);
45
+ // Use Zod's built-in methods to inspect the schema
46
+ const schemaShape = vercelAITool.parameters._def.shape();
47
+ expect(schemaShape.city.description).toBe('The name of the city');
48
+ expect(schemaShape.country.description).toBe('The country of the city');
49
+ });
50
+ it('should handle complex schemas with nested objects, arrays, and unions', () => {
51
+ const complexHttpToolOutput = {
52
+ id: 'complex-tool',
53
+ name: 'Complex Tool',
54
+ description: 'A tool with a complex schema',
55
+ inputSchema: {
56
+ type: 'ZodObject',
57
+ shape: {
58
+ simpleField: { type: 'ZodString', description: 'A simple string field' },
59
+ arrayField: {
60
+ type: 'ZodArray',
61
+ element: { type: 'ZodNumber', description: 'Array of numbers' },
62
+ description: 'An array field'
63
+ },
64
+ nestedObject: {
65
+ type: 'ZodObject',
66
+ shape: {
67
+ nestedField: { type: 'ZodBoolean', description: 'A nested boolean field' }
68
+ },
69
+ description: 'A nested object'
70
+ },
71
+ unionField: {
72
+ type: 'ZodUnion',
73
+ options: [
74
+ { type: 'ZodString', description: 'String option' },
75
+ { type: 'ZodNumber', description: 'Number option' }
76
+ ],
77
+ description: 'A union field'
78
+ }
79
+ }
80
+ },
81
+ outputSchema: { type: 'ZodAny' }
82
+ };
83
+ const vercelAITool = (0, convertToVercelTool_1.convertHttpToolToVercelAITool)(complexHttpToolOutput);
84
+ expect(vercelAITool.name).toBe('complex-tool');
85
+ expect(vercelAITool.parameters).toBeInstanceOf(zod_1.z.ZodObject);
86
+ const schemaShape = vercelAITool.parameters._def.shape();
87
+ expect(schemaShape.simpleField).toBeInstanceOf(zod_1.z.ZodString);
88
+ expect(schemaShape.arrayField).toBeInstanceOf(zod_1.z.ZodArray);
89
+ expect(schemaShape.nestedObject).toBeInstanceOf(zod_1.z.ZodObject);
90
+ expect(schemaShape.unionField).toBeInstanceOf(zod_1.z.ZodUnion);
91
+ const validInput = {
92
+ simpleField: 'test',
93
+ arrayField: [1, 2, 3],
94
+ nestedObject: { nestedField: true },
95
+ unionField: 'string'
96
+ };
97
+ const parseResult = vercelAITool.parameters.safeParse(validInput);
98
+ expect(parseResult.success).toBe(true);
99
+ });
100
+ });
101
+ //# sourceMappingURL=convertToVercelTool.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertToVercelTool.test.js","sourceRoot":"","sources":["../../src/__tests__/convertToVercelTool.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ // File: src/__tests__/core.test.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const zod_1 = require("zod");
5
+ const core_1 = require("../service/core");
6
+ describe("DAIN Framework Core", () => {
7
+ const mockAgentInfo = {
8
+ agentId: "test-agent",
9
+ address: "1234567890123456789012345678901234567890",
10
+ };
11
+ test("createTool creates a valid tool configuration", async () => {
12
+ const toolConfig = {
13
+ id: "get-weather",
14
+ name: "Get Weather",
15
+ description: "Fetches weather for a city",
16
+ input: zod_1.z.object({ city: zod_1.z.string() }),
17
+ output: zod_1.z.object({ temperature: zod_1.z.number() }),
18
+ pricing: { pricePerUse: 0.01, currency: "USD" },
19
+ handler: async (input) => ({
20
+ text: `Temperature for ${input.city} is ${input.city.length}°C`,
21
+ data: { temperature: input.city.length },
22
+ ui: null
23
+ }), // Mock implementation
24
+ };
25
+ const tool = (0, core_1.createTool)(toolConfig);
26
+ expect(tool.id).toBe(toolConfig.id);
27
+ expect(tool.name).toBe(toolConfig.name);
28
+ expect(tool.description).toBe(toolConfig.description);
29
+ expect(tool.input).toBe(toolConfig.input);
30
+ expect(tool.output).toBe(toolConfig.output);
31
+ expect(tool.pricing).toBe(toolConfig.pricing);
32
+ // Test the wrapped handler
33
+ const result = await tool.handler({ city: "New York" }, mockAgentInfo);
34
+ expect(result).toEqual({
35
+ data: { temperature: 8 },
36
+ text: "Temperature for New York is 8°C",
37
+ ui: null
38
+ });
39
+ });
40
+ test("createTool throws an error for invalid input", async () => {
41
+ const tool = (0, core_1.createTool)({
42
+ id: "test-tool",
43
+ name: "Test Tool",
44
+ description: "A test tool",
45
+ input: zod_1.z.object({ value: zod_1.z.number() }),
46
+ output: zod_1.z.object({ result: zod_1.z.string() }),
47
+ pricing: { pricePerUse: 0.01, currency: "USD" },
48
+ handler: async (input) => ({
49
+ text: input.value.toString(),
50
+ data: { result: input.value.toString() },
51
+ ui: null
52
+ }),
53
+ });
54
+ await expect(tool.handler({ value: "not a number" }, mockAgentInfo)).rejects.toThrow();
55
+ });
56
+ test("createService creates a valid service configuration", () => {
57
+ const serviceConfig = {
58
+ id: "weather-service",
59
+ name: "Weather Service",
60
+ description: "Provides weather information",
61
+ metadata: {
62
+ capabilities: ["current-weather", "forecast"],
63
+ languages: ["en", "es"],
64
+ },
65
+ recommendedPrompt: "Ask about the weather",
66
+ recommendedTools: ["get-weather", "get-forecast"],
67
+ };
68
+ const service = (0, core_1.createService)(serviceConfig);
69
+ expect(service).toEqual(serviceConfig);
70
+ });
71
+ test("createToolbox creates a valid toolbox configuration", () => {
72
+ const toolboxConfig = {
73
+ id: "weather-toolbox",
74
+ name: "Weather Toolbox",
75
+ description: "Collection of weather tools",
76
+ tools: ["get-weather", "get-forecast"],
77
+ metadata: {
78
+ complexity: "Low",
79
+ applicableFields: ["Meteorology", "Travel"],
80
+ },
81
+ recommendedPrompt: "Use these tools for weather-related tasks",
82
+ };
83
+ const toolbox = (0, core_1.createToolbox)(toolboxConfig);
84
+ expect(toolbox).toEqual(toolboxConfig);
85
+ });
86
+ test("validateAgentInfo validates agent info correctly", () => {
87
+ expect(core_1.CoreUtils.validateAgentInfo(mockAgentInfo)).toBe(true);
88
+ expect(core_1.CoreUtils.validateAgentInfo({ agentId: "test" })).toBe(false);
89
+ });
90
+ test("calculatePrice calculates price correctly", () => {
91
+ const pricing = { pricePerUse: 0.01, currency: "USD" };
92
+ expect(core_1.CoreUtils.calculatePrice(pricing, 5)).toBe(0.05);
93
+ });
94
+ test("generateId generates a unique ID", () => {
95
+ const id1 = core_1.CoreUtils.generateId("test");
96
+ const id2 = core_1.CoreUtils.generateId("test");
97
+ expect(id1).not.toBe(id2);
98
+ expect(id1.startsWith("test_")).toBe(true);
99
+ });
100
+ test("sanitizeTags sanitizes tags correctly", () => {
101
+ const tags = ["Tag1", " tag2 ", "TAG3", ""];
102
+ expect(core_1.CoreUtils.sanitizeTags(tags)).toEqual(["tag1", "tag2", "tag3"]);
103
+ });
104
+ test("mergeToolboxes merges toolboxes correctly", () => {
105
+ const toolbox1 = {
106
+ id: "toolbox1",
107
+ name: "Toolbox 1",
108
+ description: "First toolbox",
109
+ tools: ["tool1", "tool2"],
110
+ metadata: {
111
+ complexity: "Low",
112
+ applicableFields: ["Field1", "Field2"],
113
+ },
114
+ recommendedPrompt: "Prompt 1",
115
+ };
116
+ const toolbox2 = {
117
+ id: "toolbox2",
118
+ name: "Toolbox 2",
119
+ description: "Second toolbox",
120
+ tools: ["tool2", "tool3"],
121
+ metadata: {
122
+ complexity: "Medium",
123
+ applicableFields: ["Field2", "Field3"],
124
+ },
125
+ recommendedPrompt: "Prompt 2",
126
+ };
127
+ const mergedToolbox = core_1.CoreUtils.mergeToolboxes([toolbox1, toolbox2]);
128
+ expect(mergedToolbox.tools).toEqual(expect.arrayContaining(["tool1", "tool2", "tool3"]));
129
+ expect(mergedToolbox.metadata.applicableFields).toEqual(expect.arrayContaining(["Field1", "Field2", "Field3"]));
130
+ });
131
+ test("validatePricing validates pricing info correctly", () => {
132
+ expect(core_1.CoreUtils.validatePricing({ pricePerUse: 0.01, currency: "USD" })).toBe(true);
133
+ expect(core_1.CoreUtils.validatePricing({ pricePerUse: -1, currency: "USD" })).toBe(false);
134
+ expect(core_1.CoreUtils.validatePricing({ pricePerUse: 0.01, currency: "" })).toBe(false);
135
+ });
136
+ test("isToolInToolbox checks if a tool is in a toolbox", () => {
137
+ const toolbox = {
138
+ id: "test-toolbox",
139
+ name: "Test Toolbox",
140
+ description: "A test toolbox",
141
+ tools: ["tool1", "tool2"],
142
+ metadata: {
143
+ complexity: "Low",
144
+ applicableFields: ["Test"],
145
+ },
146
+ recommendedPrompt: "Test prompt",
147
+ };
148
+ expect(core_1.CoreUtils.isToolInToolbox("tool1", toolbox)).toBe(true);
149
+ expect(core_1.CoreUtils.isToolInToolbox("tool3", toolbox)).toBe(false);
150
+ });
151
+ });
152
+ //# sourceMappingURL=core.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.test.js","sourceRoot":"","sources":["../../src/__tests__/core.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,180 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ //File: src/___tests___/integration.test.ts
5
+ const index_1 = require("../service/index");
6
+ const zod_1 = require("zod");
7
+ const supertest_1 = tslib_1.__importDefault(require("supertest"));
8
+ const ed25519_1 = require("@noble/curves/ed25519");
9
+ const bs58_1 = tslib_1.__importDefault(require("bs58"));
10
+ const convertToVercelTool_1 = require("@/lib/convertToVercelTool");
11
+ const schemaStructure_1 = require("@/lib/schemaStructure");
12
+ const client_auth_1 = require("@/client/client-auth");
13
+ const client_1 = require("@/client/client");
14
+ describe("DAIN Framework Integration", () => {
15
+ const privateKey = ed25519_1.ed25519.utils.randomPrivateKey();
16
+ const publicKey = ed25519_1.ed25519.getPublicKey(privateKey);
17
+ const address = bs58_1.default.encode(publicKey);
18
+ const clientPrivateKey = ed25519_1.ed25519.utils.randomPrivateKey();
19
+ const agentAuth = new client_auth_1.DainClientAuth({
20
+ privateKeyBase58: bs58_1.default.encode(clientPrivateKey),
21
+ agentId: "agent-12",
22
+ orgId: "org-12"
23
+ });
24
+ // Initialize the connection to the DAIN service
25
+ const dainConnection = new client_1.DainServiceConnection(
26
+ //agent URI
27
+ "http://localhost:3003", agentAuth);
28
+ const weatherTool = (0, index_1.createTool)({
29
+ id: "get-weather",
30
+ name: "Get Weather",
31
+ description: "Fetches weather for a city",
32
+ input: zod_1.z.object({ city: zod_1.z.string() }),
33
+ output: zod_1.z.object({ temperature: zod_1.z.number(), condition: zod_1.z.string() }),
34
+ pricing: { pricePerUse: 0.01, currency: "USD" },
35
+ handler: async ({ city }) => ({
36
+ text: `The weather in ${city} is Sunny with a temperature of 22°C.`,
37
+ data: { temperature: 22, condition: "Sunny" },
38
+ ui: null
39
+ }),
40
+ });
41
+ const weatherService = (0, index_1.createService)({
42
+ id: "weather-service",
43
+ name: "Weather Service",
44
+ description: "Provides weather information",
45
+ metadata: {
46
+ capabilities: ["current-weather"],
47
+ languages: ["en"],
48
+ },
49
+ recommendedPrompt: "Ask about the weather",
50
+ recommendedTools: ["get-weather"],
51
+ });
52
+ const weatherToolbox = (0, index_1.createToolbox)({
53
+ id: "weather-toolbox",
54
+ name: "Weather Toolbox",
55
+ description: "Collection of weather tools",
56
+ tools: ["get-weather"],
57
+ metadata: {
58
+ complexity: "Low",
59
+ applicableFields: ["Meteorology", "Travel"],
60
+ },
61
+ recommendedPrompt: "Use these tools for weather-related tasks",
62
+ });
63
+ const dainService = (0, index_1.defineDAINService)({
64
+ metadata: {
65
+ title: "Weather DAIN Service",
66
+ description: "A DAIN service for weather information",
67
+ version: "1.0.0",
68
+ author: "Test Author",
69
+ tags: ["weather", "dain"],
70
+ },
71
+ identity: {
72
+ publicKey: bs58_1.default.encode(publicKey),
73
+ agentId: "weather-agent",
74
+ orgId: "weather-org",
75
+ privateKey: bs58_1.default.encode(privateKey),
76
+ },
77
+ services: [weatherService],
78
+ tools: [weatherTool],
79
+ toolboxes: [weatherToolbox],
80
+ });
81
+ let server;
82
+ beforeAll(async () => {
83
+ server = await dainService.startNode({ port: 3003 });
84
+ });
85
+ afterAll(async () => {
86
+ await server.shutdown();
87
+ });
88
+ test("Service metadata is correct", () => {
89
+ const metadata = dainService.getMetadata();
90
+ expect(metadata.title).toBe("Weather DAIN Service");
91
+ expect(metadata.tags).toContain("weather");
92
+ });
93
+ test("Service has correct tools and services", () => {
94
+ expect(dainService.getTools()).toHaveLength(1);
95
+ expect(dainService.getServices()).toHaveLength(1);
96
+ expect(dainService.getToolboxes()).toHaveLength(1);
97
+ });
98
+ test("Can call weather tool with valid signature", async () => {
99
+ const app = server.address();
100
+ const port = app.port;
101
+ const response = await dainConnection.makeRequest("POST", "/tools/get-weather", { city: "New York" });
102
+ expect(response).toEqual({
103
+ data: { temperature: 22, condition: "Sunny" },
104
+ text: "The weather in New York is Sunny with a temperature of 22°C.",
105
+ ui: null
106
+ });
107
+ });
108
+ test("Rejects call with invalid signature", async () => {
109
+ const app = server.address();
110
+ const port = app.port;
111
+ const method = "POST";
112
+ const path = "/tools/get-weather";
113
+ const body = JSON.stringify({ city: "New York" });
114
+ const headers = {
115
+ "Content-Type": "application/json",
116
+ "X-DAIN-Address": address,
117
+ };
118
+ const timestamp = new Date().toISOString();
119
+ headers["X-DAIN-Timestamp"] = timestamp;
120
+ const response = await (0, supertest_1.default)(`http://localhost:${port}`)
121
+ .post("/tools/get-weather")
122
+ .set("X-DAIN-Signature", "1231232113121")
123
+ .set("X-DAIN-Address", address)
124
+ .set("X-DAIN-Timestamp", timestamp)
125
+ .send({ city: "New York" });
126
+ expect(response.status).toBe(401);
127
+ });
128
+ describe("HTTP Output to Vercel AI Tool", () => {
129
+ it("should convert a DAIN tool to HTTP output and then to Vercel AI tool format", () => {
130
+ // Simulate a DAIN tool
131
+ const dainTool = {
132
+ id: "get-weather",
133
+ name: "Get Weather",
134
+ description: "Fetches weather for a city",
135
+ pricing: { pricePerUse: 0.01, currency: "USD" },
136
+ input: zod_1.z.object({
137
+ city: zod_1.z.string().describe("The name of the city"),
138
+ country: zod_1.z.string().optional().describe("The country of the city"),
139
+ }),
140
+ output: zod_1.z.object({
141
+ temperature: zod_1.z.number(),
142
+ condition: zod_1.z.string(),
143
+ }),
144
+ handler: async () => ({ temperature: 22, condition: "Sunny" }),
145
+ };
146
+ // Simulate the HTTP output
147
+ const httpOutput = {
148
+ id: dainTool.id,
149
+ name: dainTool.name,
150
+ description: dainTool.description,
151
+ pricing: dainTool.pricing,
152
+ inputSchema: (0, schemaStructure_1.getDetailedSchemaStructure)(dainTool.input),
153
+ outputSchema: (0, schemaStructure_1.getDetailedSchemaStructure)(dainTool.output),
154
+ };
155
+ // Convert HTTP output to Vercel AI tool
156
+ const vercelAITool = (0, convertToVercelTool_1.convertHttpToolToVercelAITool)(httpOutput);
157
+ // Assertions
158
+ expect(vercelAITool.name).toBe("get-weather");
159
+ expect(vercelAITool.description).toBe("Fetches weather for a city");
160
+ expect(vercelAITool.parameters).toBeInstanceOf(zod_1.z.ZodObject);
161
+ const params = vercelAITool.parameters.safeParse({
162
+ city: "New York",
163
+ country: "USA",
164
+ });
165
+ expect(params.success).toBe(true);
166
+ // Use Zod's built-in methods to inspect the schema
167
+ const schemaShape = vercelAITool.parameters._def.shape();
168
+ expect(schemaShape.city.description).toBe("The name of the city");
169
+ expect(schemaShape.country.description).toBe("The country of the city");
170
+ // Test that the optional field is correctly preserved
171
+ const paramsWithoutCountry = vercelAITool.parameters.safeParse({
172
+ city: "Tokyo",
173
+ });
174
+ expect(paramsWithoutCountry.success).toBe(true);
175
+ // Additional check for the optional nature of the country field
176
+ expect(schemaShape.country instanceof zod_1.z.ZodOptional).toBe(true);
177
+ });
178
+ });
179
+ });
180
+ //# sourceMappingURL=integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.js","sourceRoot":"","sources":["../../src/__tests__/integration.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};