@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.
- 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__/convertToVercelTool.test.d.ts +1 -0
- package/dist/__tests__/convertToVercelTool.test.js +101 -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 +152 -0
- package/dist/__tests__/core.test.js.map +1 -0
- package/dist/__tests__/integration.test.d.ts +1 -0
- package/dist/__tests__/integration.test.js +180 -0
- package/dist/__tests__/integration.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +1 -0
- package/dist/__tests__/types.test.js +95 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/client/client-auth.d.ts +20 -0
- package/dist/client/client-auth.js +64 -0
- package/dist/client/client-auth.js.map +1 -0
- package/dist/client/client.d.ts +20 -0
- package/dist/client/client.js +122 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.js +6 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/types.d.ts +146 -0
- package/dist/client/types.js +47 -0
- package/dist/client/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/convertToVercelTool.d.ts +6 -0
- package/dist/lib/convertToVercelTool.js +59 -0
- package/dist/lib/convertToVercelTool.js.map +1 -0
- package/dist/lib/schemaStructure.d.ts +3 -0
- package/dist/lib/schemaStructure.js +90 -0
- package/dist/lib/schemaStructure.js.map +1 -0
- package/dist/service/auth.d.ts +11 -0
- package/dist/service/auth.js +104 -0
- package/dist/service/auth.js.map +1 -0
- package/dist/service/core.d.ts +21 -0
- package/dist/service/core.js +116 -0
- package/dist/service/core.js.map +1 -0
- package/dist/service/index.d.ts +4 -0
- package/dist/service/index.js +15 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/server.d.ts +3 -0
- package/dist/service/server.js +166 -0
- package/dist/service/server.js.map +1 -0
- package/dist/service/service.d.ts +2 -0
- package/dist/service/service.js +118 -0
- package/dist/service/service.js.map +1 -0
- package/dist/service/types.d.ts +94 -0
- package/dist/service/types.js +4 -0
- package/dist/service/types.js.map +1 -0
- package/package.json +66 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
//File: src/lib/schemaStructure.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.getSchemaTypeName = getSchemaTypeName;
|
|
5
|
+
exports.getDetailedSchemaStructure = getDetailedSchemaStructure;
|
|
6
|
+
const zod_1 = require("zod");
|
|
7
|
+
function getSchemaTypeName(schema) {
|
|
8
|
+
if (schema instanceof zod_1.z.ZodObject)
|
|
9
|
+
return 'ZodObject';
|
|
10
|
+
if (schema instanceof zod_1.z.ZodString)
|
|
11
|
+
return 'ZodString';
|
|
12
|
+
if (schema instanceof zod_1.z.ZodNumber)
|
|
13
|
+
return 'ZodNumber';
|
|
14
|
+
if (schema instanceof zod_1.z.ZodBoolean)
|
|
15
|
+
return 'ZodBoolean';
|
|
16
|
+
if (schema instanceof zod_1.z.ZodArray)
|
|
17
|
+
return 'ZodArray';
|
|
18
|
+
if (schema instanceof zod_1.z.ZodEnum)
|
|
19
|
+
return 'ZodEnum';
|
|
20
|
+
if (schema instanceof zod_1.z.ZodUnion)
|
|
21
|
+
return 'ZodUnion';
|
|
22
|
+
if (schema instanceof zod_1.z.ZodOptional)
|
|
23
|
+
return 'ZodOptional';
|
|
24
|
+
if (schema instanceof zod_1.z.ZodNullable)
|
|
25
|
+
return 'ZodNullable';
|
|
26
|
+
// Add more type checks as needed
|
|
27
|
+
return 'Unknown';
|
|
28
|
+
}
|
|
29
|
+
function getDetailedSchemaStructure(schema) {
|
|
30
|
+
const typeName = getSchemaTypeName(schema);
|
|
31
|
+
const baseInfo = {
|
|
32
|
+
type: typeName,
|
|
33
|
+
description: schema.description,
|
|
34
|
+
};
|
|
35
|
+
switch (typeName) {
|
|
36
|
+
case 'ZodObject':
|
|
37
|
+
if (schema instanceof zod_1.z.ZodObject) {
|
|
38
|
+
const shape = schema.shape;
|
|
39
|
+
return {
|
|
40
|
+
...baseInfo,
|
|
41
|
+
shape: Object.fromEntries(Object.entries(shape).map(([key, value]) => [key, getDetailedSchemaStructure(value)])),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
return baseInfo;
|
|
45
|
+
case 'ZodArray':
|
|
46
|
+
if (schema instanceof zod_1.z.ZodArray) {
|
|
47
|
+
return {
|
|
48
|
+
...baseInfo,
|
|
49
|
+
element: getDetailedSchemaStructure(schema.element),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return baseInfo;
|
|
53
|
+
case 'ZodEnum':
|
|
54
|
+
if (schema instanceof zod_1.z.ZodEnum) {
|
|
55
|
+
return {
|
|
56
|
+
...baseInfo,
|
|
57
|
+
values: schema.options,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return baseInfo;
|
|
61
|
+
case 'ZodUnion':
|
|
62
|
+
if (schema instanceof zod_1.z.ZodUnion) {
|
|
63
|
+
return {
|
|
64
|
+
...baseInfo,
|
|
65
|
+
options: schema.options.map((option) => getDetailedSchemaStructure(option)),
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
return baseInfo;
|
|
69
|
+
case 'ZodOptional':
|
|
70
|
+
if (schema instanceof zod_1.z.ZodOptional) {
|
|
71
|
+
return {
|
|
72
|
+
...baseInfo,
|
|
73
|
+
innerType: getDetailedSchemaStructure(schema.unwrap()),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
return baseInfo;
|
|
77
|
+
case 'ZodNullable':
|
|
78
|
+
if (schema instanceof zod_1.z.ZodNullable) {
|
|
79
|
+
return {
|
|
80
|
+
...baseInfo,
|
|
81
|
+
innerType: getDetailedSchemaStructure(schema.unwrap()),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
return baseInfo;
|
|
85
|
+
// Add cases for other Zod types as needed
|
|
86
|
+
default:
|
|
87
|
+
return baseInfo;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=schemaStructure.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemaStructure.js","sourceRoot":"","sources":["../../src/lib/schemaStructure.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare function addressToPublicKeyBytes(address: string): Uint8Array;
|
|
2
|
+
export declare function signatureToBytes(signature: string): Uint8Array;
|
|
3
|
+
export declare function verifySignature(signature: string, message: string, address: string): boolean;
|
|
4
|
+
export declare function sanitizeHeaders(headers: Record<string, unknown>): Record<string, string>;
|
|
5
|
+
export declare function signResponse(privateKey: Uint8Array, responseBody: string): {
|
|
6
|
+
signature: string;
|
|
7
|
+
timestamp: string;
|
|
8
|
+
};
|
|
9
|
+
export declare function verifyResponse(publicKey: Uint8Array, responseBody: string, signature: string, timestamp: string): boolean;
|
|
10
|
+
export declare function verifyRequestSignature(signature: string, method: string, path: string, headers: Record<string, string>, body: string, address: string): boolean;
|
|
11
|
+
export declare function isValidSolanaAddress(address: string): boolean;
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: src/service/auth.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.addressToPublicKeyBytes = addressToPublicKeyBytes;
|
|
5
|
+
exports.signatureToBytes = signatureToBytes;
|
|
6
|
+
exports.verifySignature = verifySignature;
|
|
7
|
+
exports.sanitizeHeaders = sanitizeHeaders;
|
|
8
|
+
exports.signResponse = signResponse;
|
|
9
|
+
exports.verifyResponse = verifyResponse;
|
|
10
|
+
exports.verifyRequestSignature = verifyRequestSignature;
|
|
11
|
+
exports.isValidSolanaAddress = isValidSolanaAddress;
|
|
12
|
+
const tslib_1 = require("tslib");
|
|
13
|
+
const ed25519_1 = require("@noble/curves/ed25519");
|
|
14
|
+
const sha256_1 = require("@noble/hashes/sha256");
|
|
15
|
+
const utils_1 = require("@noble/hashes/utils");
|
|
16
|
+
const bs58_1 = tslib_1.__importDefault(require("bs58"));
|
|
17
|
+
function addressToPublicKeyBytes(address) {
|
|
18
|
+
try {
|
|
19
|
+
return bs58_1.default.decode(address);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
throw new Error("Invalid Solana address format");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function signatureToBytes(signature) {
|
|
26
|
+
if (!/^[0-9a-fA-F]{128}$/.test(signature)) {
|
|
27
|
+
throw new Error("Invalid signature format");
|
|
28
|
+
}
|
|
29
|
+
return (0, utils_1.hexToBytes)(signature);
|
|
30
|
+
}
|
|
31
|
+
function verifySignature(signature, message, address) {
|
|
32
|
+
try {
|
|
33
|
+
const publicKey = addressToPublicKeyBytes(address);
|
|
34
|
+
const signatureBytes = signatureToBytes(signature);
|
|
35
|
+
const messageHash = (0, sha256_1.sha256)(message);
|
|
36
|
+
return ed25519_1.ed25519.verify(signatureBytes, messageHash, publicKey);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.log("Signature verification error:", error);
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function sanitizeHeaders(headers) {
|
|
44
|
+
const sanitizedHeaders = {};
|
|
45
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
46
|
+
const upperKey = key.toUpperCase();
|
|
47
|
+
if ((upperKey === "CONTENT-TYPE" || upperKey.startsWith("X-")) &&
|
|
48
|
+
typeof value === "string") {
|
|
49
|
+
sanitizedHeaders[upperKey] = value;
|
|
50
|
+
}
|
|
51
|
+
else if ((upperKey === "CONTENT-TYPE" || upperKey.startsWith("X-")) &&
|
|
52
|
+
Array.isArray(value) &&
|
|
53
|
+
value.length > 0) {
|
|
54
|
+
sanitizedHeaders[upperKey] = value.join(", "); // Convert array to comma-separated string
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Sort headers alphabetically by key
|
|
58
|
+
const sortedSanitizedHeaders = Object.keys(sanitizedHeaders)
|
|
59
|
+
.sort()
|
|
60
|
+
.reduce((acc, key) => {
|
|
61
|
+
acc[key] = sanitizedHeaders[key];
|
|
62
|
+
return acc;
|
|
63
|
+
}, {});
|
|
64
|
+
return sortedSanitizedHeaders;
|
|
65
|
+
}
|
|
66
|
+
function signResponse(privateKey, responseBody) {
|
|
67
|
+
const timestamp = Date.now().toString();
|
|
68
|
+
const messageHash = (0, sha256_1.sha256)((0, utils_1.concatBytes)(new TextEncoder().encode(responseBody), new TextEncoder().encode(timestamp)));
|
|
69
|
+
const signature = ed25519_1.ed25519.sign(messageHash, privateKey);
|
|
70
|
+
return { signature: (0, utils_1.bytesToHex)(signature), timestamp };
|
|
71
|
+
}
|
|
72
|
+
function verifyResponse(publicKey, responseBody, signature, timestamp) {
|
|
73
|
+
try {
|
|
74
|
+
const messageHash = (0, sha256_1.sha256)((0, utils_1.concatBytes)(new TextEncoder().encode(responseBody), new TextEncoder().encode(timestamp)));
|
|
75
|
+
const signatureBytes = (0, utils_1.hexToBytes)(signature);
|
|
76
|
+
return ed25519_1.ed25519.verify(signatureBytes, messageHash, publicKey);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error("Response verification error:", error);
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
function verifyRequestSignature(signature, method, path, headers, body, address) {
|
|
84
|
+
const timestamp = headers["X-DAIN-TIMESTAMP"];
|
|
85
|
+
if (!timestamp) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
// remove x-dain-timestamp from headers
|
|
89
|
+
delete headers["X-DAIN-TIMESTAMP"];
|
|
90
|
+
//delete the signature from headers
|
|
91
|
+
delete headers["X-DAIN-SIGNATURE"];
|
|
92
|
+
const message = `${method.toUpperCase()}:${path}:${timestamp}:${body ? body : "{}"}`;
|
|
93
|
+
return verifySignature(signature, message, address);
|
|
94
|
+
}
|
|
95
|
+
function isValidSolanaAddress(address) {
|
|
96
|
+
try {
|
|
97
|
+
addressToPublicKeyBytes(address);
|
|
98
|
+
return true;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/service/auth.ts"],"names":[],"mappings":";AAAA,4BAA4B;;AAO5B,0DAMC;AAED,4CAKC;AAED,0CAeC;AAED,0CA8BC;AACD,oCAaC;AAED,wCAmBC;AACD,wDAyBC;AAED,oDAOC;;AAzID,mDAAgD;AAChD,iDAA8C;AAC9C,+CAA0E;AAC1E,wDAAwB;AAExB,SAAgB,uBAAuB,CAAC,OAAe;IACrD,IAAI,CAAC;QACH,OAAO,cAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,SAAiB;IAChD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,IAAA,kBAAU,EAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,SAAgB,eAAe,CAC7B,SAAiB,EACjB,OAAe,EACf,OAAe;IAEf,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,cAAc,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACnD,MAAM,WAAW,GAAG,IAAA,eAAM,EAAC,OAAO,CAAC,CAAC;QAEpC,OAAO,iBAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,+BAA+B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAgB,eAAe,CAC7B,OAAgC;IAEhC,MAAM,gBAAgB,GAA2B,EAAE,CAAC;IAEpD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;QACnC,IACE,CAAC,QAAQ,KAAK,cAAc,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1D,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;YACD,gBAAgB,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QACrC,CAAC;aAAM,IACL,CAAC,QAAQ,KAAK,cAAc,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAC1D,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpB,KAAK,CAAC,MAAM,GAAG,CAAC,EAChB,CAAC;YACD,gBAAgB,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,0CAA0C;QAC3F,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC,MAAM,sBAAsB,GAAG,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC;SACzD,IAAI,EAAE;SACN,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnB,GAAG,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAA4B,CAAC,CAAC;IAEnC,OAAO,sBAAsB,CAAC;AAChC,CAAC;AACD,SAAgB,YAAY,CAC1B,UAAsB,EACtB,YAAoB;IAEpB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,IAAA,eAAM,EACxB,IAAA,mBAAW,EACT,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EACtC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CACpC,CACF,CAAC;IACF,MAAM,SAAS,GAAG,iBAAO,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IACxD,OAAO,EAAE,SAAS,EAAE,IAAA,kBAAU,EAAC,SAAS,CAAC,EAAE,SAAS,EAAE,CAAC;AACzD,CAAC;AAED,SAAgB,cAAc,CAC5B,SAAqB,EACrB,YAAoB,EACpB,SAAiB,EACjB,SAAiB;IAEjB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAA,eAAM,EACxB,IAAA,mBAAW,EACT,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,EACtC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CACpC,CACF,CAAC;QACF,MAAM,cAAc,GAAG,IAAA,kBAAU,EAAC,SAAS,CAAC,CAAC;QAC7C,OAAO,iBAAO,CAAC,MAAM,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAChE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AACD,SAAgB,sBAAsB,CACpC,SAAiB,EACjB,MAAc,EACd,IAAY,EACZ,OAA+B,EAC/B,IAAY,EACZ,OAAe;IAEf,MAAM,SAAS,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC9C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,KAAK,CAAC;IACf,CAAC;IAED,uCAAuC;IAEvC,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAC;IACnC,mCAAmC;IAEnC,OAAO,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEnC,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,IAAI,SAAS,IAC1D,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAChB,EAAE,CAAC;IAEH,OAAO,eAAe,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,SAAgB,oBAAoB,CAAC,OAAe;IAClD,IAAI,CAAC;QACH,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ToolConfig, ServiceConfig, ToolboxConfig, AgentInfo, PricingInfo } from './types';
|
|
3
|
+
export declare function createTool<TInput extends z.ZodType, TOutput extends z.ZodType>(config: ToolConfig<TInput, TOutput>): ToolConfig<TInput, TOutput>;
|
|
4
|
+
export declare function createService(config: ServiceConfig): ServiceConfig;
|
|
5
|
+
export declare function createToolbox(config: ToolboxConfig): ToolboxConfig;
|
|
6
|
+
export declare function validateAgentInfo(agentInfo: AgentInfo): boolean;
|
|
7
|
+
export declare function calculatePrice(pricing: PricingInfo, usageCount: number): number;
|
|
8
|
+
export declare function generateId(prefix: string): string;
|
|
9
|
+
export declare function sanitizeTags(tags: string[]): string[];
|
|
10
|
+
export declare function mergeToolboxes(toolboxes: ToolboxConfig[]): ToolboxConfig;
|
|
11
|
+
export declare function validatePricing(pricing: PricingInfo): boolean;
|
|
12
|
+
export declare function isToolInToolbox(toolId: string, toolbox: ToolboxConfig): boolean;
|
|
13
|
+
export declare const CoreUtils: {
|
|
14
|
+
validateAgentInfo: typeof validateAgentInfo;
|
|
15
|
+
calculatePrice: typeof calculatePrice;
|
|
16
|
+
generateId: typeof generateId;
|
|
17
|
+
sanitizeTags: typeof sanitizeTags;
|
|
18
|
+
mergeToolboxes: typeof mergeToolboxes;
|
|
19
|
+
validatePricing: typeof validatePricing;
|
|
20
|
+
isToolInToolbox: typeof isToolInToolbox;
|
|
21
|
+
};
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: src/service/core.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.CoreUtils = void 0;
|
|
5
|
+
exports.createTool = createTool;
|
|
6
|
+
exports.createService = createService;
|
|
7
|
+
exports.createToolbox = createToolbox;
|
|
8
|
+
exports.validateAgentInfo = validateAgentInfo;
|
|
9
|
+
exports.calculatePrice = calculatePrice;
|
|
10
|
+
exports.generateId = generateId;
|
|
11
|
+
exports.sanitizeTags = sanitizeTags;
|
|
12
|
+
exports.mergeToolboxes = mergeToolboxes;
|
|
13
|
+
exports.validatePricing = validatePricing;
|
|
14
|
+
exports.isToolInToolbox = isToolInToolbox;
|
|
15
|
+
function createTool(config) {
|
|
16
|
+
// Validate the config
|
|
17
|
+
if (!config.id || !config.name || !config.description) {
|
|
18
|
+
throw new Error('Tool config is missing required fields');
|
|
19
|
+
}
|
|
20
|
+
// Ensure the handler respects the input and output schemas
|
|
21
|
+
const wrappedHandler = async (input, agentInfo) => {
|
|
22
|
+
const parsedInput = config.input.parse(input);
|
|
23
|
+
const result = await config.handler(parsedInput, agentInfo);
|
|
24
|
+
return {
|
|
25
|
+
text: result.text,
|
|
26
|
+
data: config.output.parse(result.data),
|
|
27
|
+
ui: result.ui,
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
...config,
|
|
32
|
+
handler: wrappedHandler,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function createService(config) {
|
|
36
|
+
// Validate the config
|
|
37
|
+
if (!config.id || !config.name || !config.description) {
|
|
38
|
+
throw new Error('Service config is missing required fields');
|
|
39
|
+
}
|
|
40
|
+
// Validate metadata
|
|
41
|
+
if (!config.metadata.capabilities || !config.metadata.languages) {
|
|
42
|
+
throw new Error('Service metadata is incomplete');
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
...config,
|
|
46
|
+
recommendedTools: config.recommendedTools || [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function createToolbox(config) {
|
|
50
|
+
// Validate the config
|
|
51
|
+
if (!config.id || !config.name || !config.description || !config.tools.length) {
|
|
52
|
+
throw new Error('Toolbox config is missing required fields');
|
|
53
|
+
}
|
|
54
|
+
// Validate metadata
|
|
55
|
+
if (!config.metadata.complexity || !config.metadata.applicableFields) {
|
|
56
|
+
throw new Error('Toolbox metadata is incomplete');
|
|
57
|
+
}
|
|
58
|
+
return config;
|
|
59
|
+
}
|
|
60
|
+
// Utility function to validate agent info
|
|
61
|
+
function validateAgentInfo(agentInfo) {
|
|
62
|
+
return !!(agentInfo.agentId && agentInfo.address);
|
|
63
|
+
}
|
|
64
|
+
// Utility function to calculate price for tool usage
|
|
65
|
+
function calculatePrice(pricing, usageCount) {
|
|
66
|
+
return pricing.pricePerUse * usageCount;
|
|
67
|
+
}
|
|
68
|
+
// Utility function to generate a unique ID
|
|
69
|
+
function generateId(prefix) {
|
|
70
|
+
return `${prefix}_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
71
|
+
}
|
|
72
|
+
// Utility function to validate and sanitize metadata tags
|
|
73
|
+
function sanitizeTags(tags) {
|
|
74
|
+
return tags.map(tag => tag.toLowerCase().trim()).filter(Boolean);
|
|
75
|
+
}
|
|
76
|
+
// Utility function to merge toolboxes
|
|
77
|
+
function mergeToolboxes(toolboxes) {
|
|
78
|
+
if (toolboxes.length === 0) {
|
|
79
|
+
throw new Error('No toolboxes provided for merging');
|
|
80
|
+
}
|
|
81
|
+
const mergedTools = new Set();
|
|
82
|
+
const mergedApplicableFields = new Set();
|
|
83
|
+
toolboxes.forEach(toolbox => {
|
|
84
|
+
toolbox.tools.forEach(tool => mergedTools.add(tool));
|
|
85
|
+
toolbox.metadata.applicableFields.forEach(field => mergedApplicableFields.add(field));
|
|
86
|
+
});
|
|
87
|
+
return {
|
|
88
|
+
id: generateId('merged_toolbox'),
|
|
89
|
+
name: 'Merged Toolbox',
|
|
90
|
+
description: 'A toolbox merged from multiple toolboxes',
|
|
91
|
+
tools: Array.from(mergedTools),
|
|
92
|
+
metadata: {
|
|
93
|
+
complexity: 'Mixed',
|
|
94
|
+
applicableFields: Array.from(mergedApplicableFields),
|
|
95
|
+
},
|
|
96
|
+
recommendedPrompt: 'This toolbox contains a variety of tools from multiple domains.',
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
// Utility function to validate pricing info
|
|
100
|
+
function validatePricing(pricing) {
|
|
101
|
+
return pricing.pricePerUse >= 0 && !!pricing.currency;
|
|
102
|
+
}
|
|
103
|
+
// Utility function to check if a tool is part of a toolbox
|
|
104
|
+
function isToolInToolbox(toolId, toolbox) {
|
|
105
|
+
return toolbox.tools.includes(toolId);
|
|
106
|
+
}
|
|
107
|
+
exports.CoreUtils = {
|
|
108
|
+
validateAgentInfo,
|
|
109
|
+
calculatePrice,
|
|
110
|
+
generateId,
|
|
111
|
+
sanitizeTags,
|
|
112
|
+
mergeToolboxes,
|
|
113
|
+
validatePricing,
|
|
114
|
+
isToolInToolbox,
|
|
115
|
+
};
|
|
116
|
+
//# sourceMappingURL=core.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/service/core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: src/service/index.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.CoreUtils = exports.createToolbox = exports.createService = exports.createTool = exports.defineDAINService = void 0;
|
|
5
|
+
const tslib_1 = require("tslib");
|
|
6
|
+
var service_1 = require("./service");
|
|
7
|
+
Object.defineProperty(exports, "defineDAINService", { enumerable: true, get: function () { return service_1.defineDAINService; } });
|
|
8
|
+
var core_1 = require("./core");
|
|
9
|
+
Object.defineProperty(exports, "createTool", { enumerable: true, get: function () { return core_1.createTool; } });
|
|
10
|
+
Object.defineProperty(exports, "createService", { enumerable: true, get: function () { return core_1.createService; } });
|
|
11
|
+
Object.defineProperty(exports, "createToolbox", { enumerable: true, get: function () { return core_1.createToolbox; } });
|
|
12
|
+
Object.defineProperty(exports, "CoreUtils", { enumerable: true, get: function () { return core_1.CoreUtils; } });
|
|
13
|
+
tslib_1.__exportStar(require("./types"), exports);
|
|
14
|
+
tslib_1.__exportStar(require("./auth"), exports);
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/service/index.ts"],"names":[],"mappings":";AAAA,6BAA6B;;;;AAE7B,qCAA8C;AAArC,4GAAA,iBAAiB,OAAA;AAC1B,+BAA6E;AAApE,kGAAA,UAAU,OAAA;AAAE,qGAAA,aAAa,OAAA;AAAE,qGAAA,aAAa,OAAA;AAAE,iGAAA,SAAS,OAAA;AAC5D,kDAAwB;AACxB,iDAAuB"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
import { DAINServiceConfig, ToolConfig, ServiceConfig, ToolboxConfig, Metadata } from "./types";
|
|
3
|
+
export declare function setupHttpServer(config: DAINServiceConfig, tools: ToolConfig[], services: ServiceConfig[], toolboxes: ToolboxConfig[], metadata: Metadata, privateKey: Uint8Array): Hono;
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// File: src/service/server.ts
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.setupHttpServer = setupHttpServer;
|
|
5
|
+
const hono_1 = require("hono");
|
|
6
|
+
const cors_1 = require("hono/cors");
|
|
7
|
+
const http_exception_1 = require("hono/http-exception");
|
|
8
|
+
const auth_1 = require("./auth");
|
|
9
|
+
const schemaStructure_1 = require("../lib/schemaStructure");
|
|
10
|
+
function setupHttpServer(config, tools, services, toolboxes, metadata, privateKey) {
|
|
11
|
+
const app = new hono_1.Hono();
|
|
12
|
+
// CORS middleware
|
|
13
|
+
app.use("*", (0, cors_1.cors)());
|
|
14
|
+
// Middleware to sign all responses
|
|
15
|
+
app.use("*", async (c, next) => {
|
|
16
|
+
await next();
|
|
17
|
+
const body = await c.res.clone().text();
|
|
18
|
+
const { signature, timestamp } = (0, auth_1.signResponse)(privateKey, body);
|
|
19
|
+
c.res.headers.set("X-DAIN-SIGNATURE", signature);
|
|
20
|
+
c.res.headers.set("X-DAIN-AGENT-ID", config.identity.agentId);
|
|
21
|
+
c.res.headers.set("X-DAIN-ORG-ID", config.identity.orgId);
|
|
22
|
+
c.res.headers.set("X-DAIN-ADDRESS", config.identity.publicKey);
|
|
23
|
+
c.res.headers.set("X-DAIN-TIMESTAMP", timestamp);
|
|
24
|
+
});
|
|
25
|
+
// Middleware for signature verification
|
|
26
|
+
app.use("*", async (c, next) => {
|
|
27
|
+
const signature = c.req.header("X-DAIN-SIGNATURE");
|
|
28
|
+
const address = c.req.header("X-DAIN-ADDRESS");
|
|
29
|
+
const timestamp = c.req.header("X-DAIN-TIMESTAMP");
|
|
30
|
+
console.log({ signature, address, timestamp });
|
|
31
|
+
if (!signature || !address || !timestamp) {
|
|
32
|
+
throw new http_exception_1.HTTPException(401, {
|
|
33
|
+
message: "Missing authentication headers",
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const method = c.req.method;
|
|
37
|
+
const path = c.req.path;
|
|
38
|
+
const headers = (0, auth_1.sanitizeHeaders)(c.req.header());
|
|
39
|
+
const body = await c.req.text();
|
|
40
|
+
if (!(0, auth_1.verifyRequestSignature)(signature, method, path, headers, body, address)) {
|
|
41
|
+
throw new http_exception_1.HTTPException(401, { message: "Invalid signature" });
|
|
42
|
+
}
|
|
43
|
+
await next();
|
|
44
|
+
});
|
|
45
|
+
// Setup default ping route
|
|
46
|
+
app.get("/ping", (c) => c.json({ message: "pong", platform: "DAIN", version: metadata.version }));
|
|
47
|
+
// Metadata endpoint
|
|
48
|
+
app.get("/metadata", (c) => c.json(metadata));
|
|
49
|
+
// Tools list endpoint
|
|
50
|
+
app.get("/tools", (c) => {
|
|
51
|
+
const toolInfo = tools.map((tool) => ({
|
|
52
|
+
id: tool.id,
|
|
53
|
+
name: tool.name,
|
|
54
|
+
description: tool.description,
|
|
55
|
+
pricing: tool.pricing,
|
|
56
|
+
inputSchema: (0, schemaStructure_1.getDetailedSchemaStructure)(tool.input),
|
|
57
|
+
outputSchema: (0, schemaStructure_1.getDetailedSchemaStructure)(tool.output),
|
|
58
|
+
}));
|
|
59
|
+
return c.json(toolInfo);
|
|
60
|
+
});
|
|
61
|
+
// Services list endpoint
|
|
62
|
+
app.get("/services", (c) => {
|
|
63
|
+
const serviceInfo = services.map((service) => ({
|
|
64
|
+
id: service.id,
|
|
65
|
+
name: service.name,
|
|
66
|
+
description: service.description,
|
|
67
|
+
metadata: service.metadata,
|
|
68
|
+
recommendedPrompt: service.recommendedPrompt,
|
|
69
|
+
recommendedTools: service.recommendedTools.map((toolId) => {
|
|
70
|
+
const tool = tools.find((t) => t.id === toolId);
|
|
71
|
+
return tool ? { id: tool.id, name: tool.name } : toolId;
|
|
72
|
+
}),
|
|
73
|
+
}));
|
|
74
|
+
return c.json(serviceInfo);
|
|
75
|
+
});
|
|
76
|
+
// Toolboxes list endpoint
|
|
77
|
+
app.get("/toolboxes", (c) => c.json(toolboxes));
|
|
78
|
+
// Automatically create routes for each tool
|
|
79
|
+
tools.forEach((tool) => {
|
|
80
|
+
app.post(`/tools/${tool.id}`, async (c) => {
|
|
81
|
+
try {
|
|
82
|
+
const agentInfo = {
|
|
83
|
+
agentId: c.req.header("X-DAIN-AGENTID") || "unknown",
|
|
84
|
+
address: c.req.header("X-DAIN-ADDRESS") || "unknown",
|
|
85
|
+
};
|
|
86
|
+
const body = await c.req.json();
|
|
87
|
+
const result = await tool.handler(body, agentInfo);
|
|
88
|
+
return c.json(result);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error(`Error executing tool ${tool.id}:`, error);
|
|
92
|
+
throw new http_exception_1.HTTPException(500, { message: "Internal server error" });
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
// Detailed info for a specific tool
|
|
97
|
+
app.get("/tools/:toolId", (c) => {
|
|
98
|
+
const tool = tools.find((t) => t.id === c.req.param("toolId"));
|
|
99
|
+
if (tool) {
|
|
100
|
+
const toolDetails = {
|
|
101
|
+
id: tool.id,
|
|
102
|
+
name: tool.name,
|
|
103
|
+
description: tool.description,
|
|
104
|
+
pricing: tool.pricing,
|
|
105
|
+
inputSchema: (0, schemaStructure_1.getDetailedSchemaStructure)(tool.input),
|
|
106
|
+
outputSchema: (0, schemaStructure_1.getDetailedSchemaStructure)(tool.output),
|
|
107
|
+
};
|
|
108
|
+
return c.json(toolDetails);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
throw new http_exception_1.HTTPException(404, { message: "Tool not found" });
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
// Detailed info for a specific service
|
|
115
|
+
app.get("/services/:serviceId", (c) => {
|
|
116
|
+
const service = services.find((s) => s.id === c.req.param("serviceId"));
|
|
117
|
+
if (service) {
|
|
118
|
+
const serviceDetails = {
|
|
119
|
+
id: service.id,
|
|
120
|
+
name: service.name,
|
|
121
|
+
description: service.description,
|
|
122
|
+
metadata: service.metadata,
|
|
123
|
+
recommendedPrompt: service.recommendedPrompt,
|
|
124
|
+
recommendedTools: service.recommendedTools.map((toolId) => {
|
|
125
|
+
const tool = tools.find((t) => t.id === toolId);
|
|
126
|
+
return tool
|
|
127
|
+
? {
|
|
128
|
+
id: tool.id,
|
|
129
|
+
name: tool.name,
|
|
130
|
+
description: tool.description,
|
|
131
|
+
pricing: tool.pricing,
|
|
132
|
+
inputSchema: (0, schemaStructure_1.getDetailedSchemaStructure)(tool.input),
|
|
133
|
+
outputSchema: (0, schemaStructure_1.getDetailedSchemaStructure)(tool.output),
|
|
134
|
+
}
|
|
135
|
+
: {
|
|
136
|
+
id: toolId,
|
|
137
|
+
name: "Unknown Tool",
|
|
138
|
+
description: "Tool not found",
|
|
139
|
+
};
|
|
140
|
+
}),
|
|
141
|
+
};
|
|
142
|
+
return c.json(serviceDetails);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
throw new http_exception_1.HTTPException(404, { message: "Service not found" });
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
// Detailed info for a specific toolbox
|
|
149
|
+
app.get("/toolboxes/:toolboxId", (c) => {
|
|
150
|
+
const toolbox = toolboxes.find((t) => t.id === c.req.param("toolboxId"));
|
|
151
|
+
if (toolbox) {
|
|
152
|
+
return c.json(toolbox);
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
throw new http_exception_1.HTTPException(404, { message: "Toolbox not found" });
|
|
156
|
+
}
|
|
157
|
+
});
|
|
158
|
+
// Health check endpoint
|
|
159
|
+
app.get("/health", (c) => c.json({ status: "healthy", timestamp: new Date().toISOString() }));
|
|
160
|
+
// Setup custom routes if provided
|
|
161
|
+
if (config.routes) {
|
|
162
|
+
config.routes(app);
|
|
163
|
+
}
|
|
164
|
+
return app;
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/service/server.ts"],"names":[],"mappings":"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"}
|