@bosonprotocol/agentic-commerce 1.0.0-alpha.41
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/README.md +150 -0
- package/dist/boson/goat-sdk-plugin/index.d.ts +3 -0
- package/dist/boson/goat-sdk-plugin/index.d.ts.map +1 -0
- package/dist/boson/goat-sdk-plugin/index.js +7 -0
- package/dist/boson/goat-sdk-plugin/index.js.map +1 -0
- package/dist/boson/index.d.ts +3 -0
- package/dist/boson/index.d.ts.map +1 -0
- package/dist/boson/index.js +8 -0
- package/dist/boson/index.js.map +1 -0
- package/dist/boson/mcp-client/index.d.ts +293 -0
- package/dist/boson/mcp-client/index.d.ts.map +1 -0
- package/dist/boson/mcp-client/index.js +20 -0
- package/dist/boson/mcp-client/index.js.map +1 -0
- package/dist/boson/mcp-server/filters/disputeResolversFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/disputeResolversFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/disputeResolversFilter.js +24 -0
- package/dist/boson/mcp-server/filters/disputeResolversFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/disputesFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/disputesFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/disputesFilter.js +155 -0
- package/dist/boson/mcp-server/filters/disputesFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/exchangesFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/exchangesFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/exchangesFilter.js +139 -0
- package/dist/boson/mcp-server/filters/exchangesFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/fundsFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/fundsFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/fundsFilter.js +98 -0
- package/dist/boson/mcp-server/filters/fundsFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/offersFilter.d.ts +14 -0
- package/dist/boson/mcp-server/filters/offersFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/offersFilter.js +265 -0
- package/dist/boson/mcp-server/filters/offersFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/productsFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/productsFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/productsFilter.js +30 -0
- package/dist/boson/mcp-server/filters/productsFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/sellersByAddressFilter.d.ts +11 -0
- package/dist/boson/mcp-server/filters/sellersByAddressFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/sellersByAddressFilter.js +23 -0
- package/dist/boson/mcp-server/filters/sellersByAddressFilter.js.map +1 -0
- package/dist/boson/mcp-server/filters/sellersFilter.d.ts +12 -0
- package/dist/boson/mcp-server/filters/sellersFilter.d.ts.map +1 -0
- package/dist/boson/mcp-server/filters/sellersFilter.js +151 -0
- package/dist/boson/mcp-server/filters/sellersFilter.js.map +1 -0
- package/dist/boson/mcp-server/handlers/accounts.d.ts +12 -0
- package/dist/boson/mcp-server/handlers/accounts.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/accounts.js +111 -0
- package/dist/boson/mcp-server/handlers/accounts.js.map +1 -0
- package/dist/boson/mcp-server/handlers/disputes.d.ts +12 -0
- package/dist/boson/mcp-server/handlers/disputes.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/disputes.js +180 -0
- package/dist/boson/mcp-server/handlers/disputes.js.map +1 -0
- package/dist/boson/mcp-server/handlers/exchanges.d.ts +10 -0
- package/dist/boson/mcp-server/handlers/exchanges.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/exchanges.js +113 -0
- package/dist/boson/mcp-server/handlers/exchanges.js.map +1 -0
- package/dist/boson/mcp-server/handlers/funds.d.ts +9 -0
- package/dist/boson/mcp-server/handlers/funds.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/funds.js +92 -0
- package/dist/boson/mcp-server/handlers/funds.js.map +1 -0
- package/dist/boson/mcp-server/handlers/metaTx.d.ts +115 -0
- package/dist/boson/mcp-server/handlers/metaTx.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/metaTx.js +180 -0
- package/dist/boson/mcp-server/handlers/metaTx.js.map +1 -0
- package/dist/boson/mcp-server/handlers/offers.d.ts +11 -0
- package/dist/boson/mcp-server/handlers/offers.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/offers.js +161 -0
- package/dist/boson/mcp-server/handlers/offers.js.map +1 -0
- package/dist/boson/mcp-server/handlers/sdk.d.ts +17 -0
- package/dist/boson/mcp-server/handlers/sdk.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/sdk.js +86 -0
- package/dist/boson/mcp-server/handlers/sdk.js.map +1 -0
- package/dist/boson/mcp-server/handlers/transactions.d.ts +9 -0
- package/dist/boson/mcp-server/handlers/transactions.d.ts.map +1 -0
- package/dist/boson/mcp-server/handlers/transactions.js +19 -0
- package/dist/boson/mcp-server/handlers/transactions.js.map +1 -0
- package/dist/boson/mcp-server/index.d.ts +13 -0
- package/dist/boson/mcp-server/index.d.ts.map +1 -0
- package/dist/boson/mcp-server/index.js +1029 -0
- package/dist/boson/mcp-server/index.js.map +1 -0
- package/dist/boson/mcp-server/schemas.d.ts +4 -0
- package/dist/boson/mcp-server/schemas.d.ts.map +1 -0
- package/dist/boson/mcp-server/schemas.js +43 -0
- package/dist/boson/mcp-server/schemas.js.map +1 -0
- package/dist/boson/mcp-server/validation.d.ts +597 -0
- package/dist/boson/mcp-server/validation.d.ts.map +1 -0
- package/dist/boson/mcp-server/validation.js +250 -0
- package/dist/boson/mcp-server/validation.js.map +1 -0
- package/dist/common/index.d.ts +7 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/index.js +25 -0
- package/dist/common/index.js.map +1 -0
- package/dist/common/mcp-client/index.d.ts +463 -0
- package/dist/common/mcp-client/index.d.ts.map +1 -0
- package/dist/common/mcp-client/index.js +80 -0
- package/dist/common/mcp-client/index.js.map +1 -0
- package/dist/common/mcp-server/configLoader.d.ts +7 -0
- package/dist/common/mcp-server/configLoader.d.ts.map +1 -0
- package/dist/common/mcp-server/configLoader.js +48 -0
- package/dist/common/mcp-server/configLoader.js.map +1 -0
- package/dist/common/mcp-server/configValidation.d.ts +3 -0
- package/dist/common/mcp-server/configValidation.d.ts.map +1 -0
- package/dist/common/mcp-server/configValidation.js +24 -0
- package/dist/common/mcp-server/configValidation.js.map +1 -0
- package/dist/common/mcp-server/errorHandling.d.ts +25 -0
- package/dist/common/mcp-server/errorHandling.d.ts.map +1 -0
- package/dist/common/mcp-server/errorHandling.js +125 -0
- package/dist/common/mcp-server/errorHandling.js.map +1 -0
- package/dist/common/mcp-server/filterUtils.d.ts +11 -0
- package/dist/common/mcp-server/filterUtils.d.ts.map +1 -0
- package/dist/common/mcp-server/filterUtils.js +42 -0
- package/dist/common/mcp-server/filterUtils.js.map +1 -0
- package/dist/common/mcp-server/ipfs.d.ts +4 -0
- package/dist/common/mcp-server/ipfs.d.ts.map +1 -0
- package/dist/common/mcp-server/ipfs.js +12 -0
- package/dist/common/mcp-server/ipfs.js.map +1 -0
- package/dist/common/mcp-server/jsonSchemaToZodShape.d.ts +4 -0
- package/dist/common/mcp-server/jsonSchemaToZodShape.d.ts.map +1 -0
- package/dist/common/mcp-server/jsonSchemaToZodShape.js +40 -0
- package/dist/common/mcp-server/jsonSchemaToZodShape.js.map +1 -0
- package/dist/common/mcp-server/jsonUtils.d.ts +2 -0
- package/dist/common/mcp-server/jsonUtils.d.ts.map +1 -0
- package/dist/common/mcp-server/jsonUtils.js +7 -0
- package/dist/common/mcp-server/jsonUtils.js.map +1 -0
- package/dist/common/mcp-server/logger.d.ts +9 -0
- package/dist/common/mcp-server/logger.d.ts.map +1 -0
- package/dist/common/mcp-server/logger.js +9 -0
- package/dist/common/mcp-server/logger.js.map +1 -0
- package/dist/common/mcp-server/mcpTypes.d.ts +13 -0
- package/dist/common/mcp-server/mcpTypes.d.ts.map +1 -0
- package/dist/common/mcp-server/mcpTypes.js +3 -0
- package/dist/common/mcp-server/mcpTypes.js.map +1 -0
- package/dist/common/mcp-server/transactionSigning.d.ts +220 -0
- package/dist/common/mcp-server/transactionSigning.d.ts.map +1 -0
- package/dist/common/mcp-server/transactionSigning.js +267 -0
- package/dist/common/mcp-server/transactionSigning.js.map +1 -0
- package/dist/common/mcp-server/validationUtils.d.ts +3 -0
- package/dist/common/mcp-server/validationUtils.d.ts.map +1 -0
- package/dist/common/mcp-server/validationUtils.js +11 -0
- package/dist/common/mcp-server/validationUtils.js.map +1 -0
- package/dist/fermion/goat-sdk-plugin/index.d.ts +3 -0
- package/dist/fermion/goat-sdk-plugin/index.d.ts.map +1 -0
- package/dist/fermion/goat-sdk-plugin/index.js +7 -0
- package/dist/fermion/goat-sdk-plugin/index.js.map +1 -0
- package/dist/fermion/index.d.ts +3 -0
- package/dist/fermion/index.d.ts.map +1 -0
- package/dist/fermion/index.js +8 -0
- package/dist/fermion/index.js.map +1 -0
- package/dist/fermion/mcp-client/index.d.ts +435 -0
- package/dist/fermion/mcp-client/index.d.ts.map +1 -0
- package/dist/fermion/mcp-client/index.js +26 -0
- package/dist/fermion/mcp-client/index.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/custody.d.ts +10 -0
- package/dist/fermion/mcp-server/handlers/custody.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/custody.js +126 -0
- package/dist/fermion/mcp-server/handlers/custody.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/email.d.ts +19 -0
- package/dist/fermion/mcp-server/handlers/email.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/email.js +76 -0
- package/dist/fermion/mcp-server/handlers/email.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/funds.d.ts +26 -0
- package/dist/fermion/mcp-server/handlers/funds.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/funds.js +112 -0
- package/dist/fermion/mcp-server/handlers/funds.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/listings.d.ts +27 -0
- package/dist/fermion/mcp-server/handlers/listings.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/listings.js +119 -0
- package/dist/fermion/mcp-server/handlers/listings.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/offers.d.ts +9 -0
- package/dist/fermion/mcp-server/handlers/offers.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/offers.js +132 -0
- package/dist/fermion/mcp-server/handlers/offers.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/sdk.d.ts +17 -0
- package/dist/fermion/mcp-server/handlers/sdk.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/sdk.js +89 -0
- package/dist/fermion/mcp-server/handlers/sdk.js.map +1 -0
- package/dist/fermion/mcp-server/handlers/transactions.d.ts +37 -0
- package/dist/fermion/mcp-server/handlers/transactions.d.ts.map +1 -0
- package/dist/fermion/mcp-server/handlers/transactions.js +61 -0
- package/dist/fermion/mcp-server/handlers/transactions.js.map +1 -0
- package/dist/fermion/mcp-server/index.d.ts +12 -0
- package/dist/fermion/mcp-server/index.d.ts.map +1 -0
- package/dist/fermion/mcp-server/index.js +408 -0
- package/dist/fermion/mcp-server/index.js.map +1 -0
- package/dist/fermion/mcp-server/lib/extractFnfData.d.ts +48 -0
- package/dist/fermion/mcp-server/lib/extractFnfData.d.ts.map +1 -0
- package/dist/fermion/mcp-server/lib/extractFnfData.js +38 -0
- package/dist/fermion/mcp-server/lib/extractFnfData.js.map +1 -0
- package/dist/fermion/mcp-server/schemas.d.ts +3 -0
- package/dist/fermion/mcp-server/schemas.d.ts.map +1 -0
- package/dist/fermion/mcp-server/schemas.js +41 -0
- package/dist/fermion/mcp-server/schemas.js.map +1 -0
- package/dist/fermion/mcp-server/validation.d.ts +575 -0
- package/dist/fermion/mcp-server/validation.d.ts.map +1 -0
- package/dist/fermion/mcp-server/validation.js +219 -0
- package/dist/fermion/mcp-server/validation.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/package.json +144 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.initializeSDKSchema = void 0;
|
|
4
|
+
exports.createInitializeSDKHandler = createInitializeSDKHandler;
|
|
5
|
+
const ethers_sdk_1 = require("@bosonprotocol/ethers-sdk");
|
|
6
|
+
const ipfs_storage_1 = require("@bosonprotocol/ipfs-storage");
|
|
7
|
+
const core_sdk_1 = require("@fermionprotocol/core-sdk");
|
|
8
|
+
const ethers_1 = require("ethers");
|
|
9
|
+
const zod_1 = require("zod");
|
|
10
|
+
const configValidation_js_1 = require("../../../common/mcp-server/configValidation.js");
|
|
11
|
+
const errorHandling_js_1 = require("../../../common/mcp-server/errorHandling.js");
|
|
12
|
+
const ipfs_js_1 = require("../../../common/mcp-server/ipfs.js");
|
|
13
|
+
const logger_js_1 = require("../../../common/mcp-server/logger.js");
|
|
14
|
+
const validationUtils_js_1 = require("../../../common/mcp-server/validationUtils.js");
|
|
15
|
+
exports.initializeSDKSchema = {
|
|
16
|
+
signerAddress: validationUtils_js_1.ethereumAddressValidation.optional(),
|
|
17
|
+
configId: configValidation_js_1.configIdValidation.optional(),
|
|
18
|
+
infuraIpfsProjectId: zod_1.z.string().optional(),
|
|
19
|
+
infuraIpfsProjectSecret: zod_1.z.string().optional(),
|
|
20
|
+
};
|
|
21
|
+
function createInitializeSDKHandler(setSDK, setConfig) {
|
|
22
|
+
return function initializeSDK(params) {
|
|
23
|
+
(0, logger_js_1.log)(`Initialize with CoreSDK ${params.signerAddress}`);
|
|
24
|
+
try {
|
|
25
|
+
const configId = (params.configId || process.env.CONFIG_ID);
|
|
26
|
+
if (!configId) {
|
|
27
|
+
throw new Error("configId is required. Provide it as parameter or set CONFIG_ID environment variable.");
|
|
28
|
+
}
|
|
29
|
+
const signerAddress = params.signerAddress || process.env.SIGNER_ADDRESS;
|
|
30
|
+
if (!signerAddress) {
|
|
31
|
+
throw new Error("signerAddress is required. Provide it as parameter or set SIGNER_ADDRESS environment variable.");
|
|
32
|
+
}
|
|
33
|
+
const infuraIpfsProjectId = (params.infuraIpfsProjectId ||
|
|
34
|
+
process.env.INFURA_IPFS_PROJECT_ID);
|
|
35
|
+
if (!infuraIpfsProjectId) {
|
|
36
|
+
throw new Error("infuraIpfsProjectId is required. Provide it as parameter or set INFURA_IPFS_PROJECT_ID environment variable.");
|
|
37
|
+
}
|
|
38
|
+
const infuraIpfsProjectSecret = (params.infuraIpfsProjectSecret ||
|
|
39
|
+
process.env.INFURA_IPFS_PROJECT_SECRET);
|
|
40
|
+
if (!infuraIpfsProjectSecret) {
|
|
41
|
+
throw new Error("infuraIpfsProjectSecret is required. Provide it as parameter or set INFURA_IPFS_PROJECT_SECRET environment variable.");
|
|
42
|
+
}
|
|
43
|
+
const defaultConfig = (0, core_sdk_1.getConfigFromConfigId)(configId);
|
|
44
|
+
let jsonRpcUrl = defaultConfig.jsonRpcUrl;
|
|
45
|
+
if (process.env.LOCALHOST_SUBSTITUTE) {
|
|
46
|
+
jsonRpcUrl = jsonRpcUrl
|
|
47
|
+
.replace(/localhost/i, process.env.LOCALHOST_SUBSTITUTE)
|
|
48
|
+
.replace("127.0.0.1", process.env.LOCALHOST_SUBSTITUTE);
|
|
49
|
+
}
|
|
50
|
+
setConfig({ ...defaultConfig, jsonRpcUrl });
|
|
51
|
+
const provider = new ethers_1.providers.StaticJsonRpcProvider(jsonRpcUrl);
|
|
52
|
+
const metadataStorageUrl = process.env.IPFS_METADATA_URL || defaultConfig.ipfsMetadataUrl;
|
|
53
|
+
const theGraphStorageUrl = process.env.THE_GRAPH_IPFS_URL ||
|
|
54
|
+
defaultConfig.theGraphIpfsUrl ||
|
|
55
|
+
metadataStorageUrl;
|
|
56
|
+
const ipfsMetadataStorageHeaders = (0, ipfs_js_1.getIpfsMetadataStorageHeaders)(infuraIpfsProjectId, infuraIpfsProjectSecret);
|
|
57
|
+
const coreSDK = core_sdk_1.CoreSDK.fromDefaultConfig({
|
|
58
|
+
envName: defaultConfig.envName,
|
|
59
|
+
configId: configId,
|
|
60
|
+
web3Lib: new ethers_sdk_1.AgentAdapter(provider, {
|
|
61
|
+
signerAddress: signerAddress,
|
|
62
|
+
}),
|
|
63
|
+
theGraphStorage: new ipfs_storage_1.IpfsMetadataStorage(core_sdk_1.validateMetadata, {
|
|
64
|
+
url: theGraphStorageUrl,
|
|
65
|
+
headers: theGraphStorageUrl === metadataStorageUrl
|
|
66
|
+
? ipfsMetadataStorageHeaders
|
|
67
|
+
: undefined,
|
|
68
|
+
}),
|
|
69
|
+
metadataStorage: new ipfs_storage_1.IpfsMetadataStorage(core_sdk_1.validateMetadata, {
|
|
70
|
+
url: metadataStorageUrl,
|
|
71
|
+
headers: ipfsMetadataStorageHeaders,
|
|
72
|
+
}),
|
|
73
|
+
});
|
|
74
|
+
setSDK(coreSDK);
|
|
75
|
+
return {
|
|
76
|
+
content: [
|
|
77
|
+
{
|
|
78
|
+
type: "text",
|
|
79
|
+
text: `Fermion Protocol SDK initialized successfully for ${configId}`,
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
catch (error) {
|
|
85
|
+
throw new Error(`Failed to initialize SDK: ${(0, errorHandling_js_1.formatErrorMessage)(error)}`);
|
|
86
|
+
}
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=sdk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdk.js","sourceRoot":"","sources":["../../../../src/fermion/mcp-server/handlers/sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { AgentAdapter } from "@bosonprotocol/ethers-sdk";
|
|
2
|
+
import { CoreSDK } from "@fermionprotocol/core-sdk";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { ReturnTypeMcp } from "../../../common/mcp-server/mcpTypes.js";
|
|
5
|
+
import { signedTransactionValidationZod, signTransaction, signTypedData } from "../../../common/mcp-server/transactionSigning.js";
|
|
6
|
+
export interface SendToVerifierParams {
|
|
7
|
+
entityId: string;
|
|
8
|
+
fnftId: string;
|
|
9
|
+
}
|
|
10
|
+
export interface SendToCustodianParams {
|
|
11
|
+
entityId: string;
|
|
12
|
+
fnftId: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function createTransactionHandler(getSDK: () => CoreSDK<AgentAdapter> | null): ({ signedTransaction, }: z.infer<typeof signedTransactionValidationZod>) => Promise<ReturnTypeMcp>;
|
|
15
|
+
export declare function createSignTransactionHandler(): typeof signTransaction;
|
|
16
|
+
export declare function createSignTypedDataHandler(): typeof signTypedData;
|
|
17
|
+
export declare function createSendToVerifierHandler(getSDK: () => CoreSDK<AgentAdapter> | null): (params: SendToVerifierParams) => Promise<Partial<{
|
|
18
|
+
to: string;
|
|
19
|
+
from: string;
|
|
20
|
+
nonce: number;
|
|
21
|
+
data: string;
|
|
22
|
+
value: import("ethers").BigNumberish;
|
|
23
|
+
gasLimit: import("ethers").BigNumberish;
|
|
24
|
+
gasPrice: import("ethers").BigNumberish;
|
|
25
|
+
chainId: number;
|
|
26
|
+
}>>;
|
|
27
|
+
export declare function createSendToCustodianHandler(getSDK: () => CoreSDK<AgentAdapter> | null): (params: SendToCustodianParams) => Promise<Partial<{
|
|
28
|
+
to: string;
|
|
29
|
+
from: string;
|
|
30
|
+
nonce: number;
|
|
31
|
+
data: string;
|
|
32
|
+
value: import("ethers").BigNumberish;
|
|
33
|
+
gasLimit: import("ethers").BigNumberish;
|
|
34
|
+
gasPrice: import("ethers").BigNumberish;
|
|
35
|
+
chainId: number;
|
|
36
|
+
}>>;
|
|
37
|
+
//# sourceMappingURL=transactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.d.ts","sourceRoot":"","sources":["../../../../src/fermion/mcp-server/handlers/transactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AACvE,OAAO,EAEL,8BAA8B,EAC9B,eAAe,EACf,aAAa,EACd,MAAM,kDAAkD,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,IAES,wBAEhD,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,KAAG,OAAO,CAAC,aAAa,CAAC,CAI3E;AAED,wBAAgB,4BAA4B,2BAE3C;AAED,wBAAgB,0BAA0B,yBAEzC;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,IAEE,QAAQ,oBAAoB;;;;;;;;;IAyBzE;AAED,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI,IAEG,QAAQ,qBAAqB;;;;;;;;;IAyB3E"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createTransactionHandler = createTransactionHandler;
|
|
4
|
+
exports.createSignTransactionHandler = createSignTransactionHandler;
|
|
5
|
+
exports.createSignTypedDataHandler = createSignTypedDataHandler;
|
|
6
|
+
exports.createSendToVerifierHandler = createSendToVerifierHandler;
|
|
7
|
+
exports.createSendToCustodianHandler = createSendToCustodianHandler;
|
|
8
|
+
const transactionSigning_js_1 = require("../../../common/mcp-server/transactionSigning.js");
|
|
9
|
+
function createTransactionHandler(getSDK) {
|
|
10
|
+
return async function sendSignedTransactionHandler({ signedTransaction, }) {
|
|
11
|
+
const coreSDK = getSDK();
|
|
12
|
+
return (0, transactionSigning_js_1.sendSignedTransaction)(coreSDK, signedTransaction, "Fermion");
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
function createSignTransactionHandler() {
|
|
16
|
+
return transactionSigning_js_1.signTransaction;
|
|
17
|
+
}
|
|
18
|
+
function createSignTypedDataHandler() {
|
|
19
|
+
return transactionSigning_js_1.signTypedData;
|
|
20
|
+
}
|
|
21
|
+
function createSendToVerifierHandler(getSDK) {
|
|
22
|
+
return async function sendToVerifierHandler(params) {
|
|
23
|
+
const coreSDK = getSDK();
|
|
24
|
+
if (!coreSDK) {
|
|
25
|
+
throw new Error("SDK not initialized. Call initialize_sdk first.");
|
|
26
|
+
}
|
|
27
|
+
const { entityId, fnftId } = params;
|
|
28
|
+
const transactionData = await coreSDK.logEntityAction(entityId, {
|
|
29
|
+
role: "SELLER", // TODO: should be retrieved from @fermionprotocol/utils (instead of hardcoding it)
|
|
30
|
+
event: "SEND_TO_VERIFIER", // TODO: should be retrieved from @fermionprotocol/utils (instead of hardcoding it)
|
|
31
|
+
args: [
|
|
32
|
+
{
|
|
33
|
+
name: "tokenId", // TODO: should be retrieved from @fermionprotocol/utils (instead of hardcoding it)
|
|
34
|
+
value: fnftId,
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
}, { returnTxInfo: true });
|
|
38
|
+
return transactionData;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function createSendToCustodianHandler(getSDK) {
|
|
42
|
+
return async function sendToCustodianHandler(params) {
|
|
43
|
+
const coreSDK = getSDK();
|
|
44
|
+
if (!coreSDK) {
|
|
45
|
+
throw new Error("SDK not initialized. Call initialize_sdk first.");
|
|
46
|
+
}
|
|
47
|
+
const { entityId, fnftId } = params;
|
|
48
|
+
const transactionData = await coreSDK.logEntityAction(entityId, {
|
|
49
|
+
role: "VERIFIER", // TODO: should be retrieved from @fermionprotocol/utils (instead of hardcoding it)
|
|
50
|
+
event: "SEND_TO_CUSTODIAN", // TODO: should be retrieved from @fermionprotocol/utils (instead of hardcoding it)
|
|
51
|
+
args: [
|
|
52
|
+
{
|
|
53
|
+
name: "tokenId", // TODO: should be retrieved from @fermionprotocol/utils (instead of hardcoding it)
|
|
54
|
+
value: fnftId,
|
|
55
|
+
},
|
|
56
|
+
],
|
|
57
|
+
}, { returnTxInfo: true });
|
|
58
|
+
return transactionData;
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=transactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../../src/fermion/mcp-server/handlers/transactions.ts"],"names":[],"mappings":";;AAsBA,4DASC;AAED,oEAEC;AAED,gEAEC;AAED,kEA4BC;AAED,oEA4BC;AA9FD,4FAK0D;AAY1D,SAAgB,wBAAwB,CACtC,MAA0C;IAE1C,OAAO,KAAK,UAAU,4BAA4B,CAAC,EACjD,iBAAiB,GAC8B;QAC/C,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;QACzB,OAAO,IAAA,6CAAqB,EAAC,OAAO,EAAE,iBAAiB,EAAE,SAAS,CAAC,CAAC;IACtE,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,4BAA4B;IAC1C,OAAO,uCAAe,CAAC;AACzB,CAAC;AAED,SAAgB,0BAA0B;IACxC,OAAO,qCAAa,CAAC;AACvB,CAAC;AAED,SAAgB,2BAA2B,CACzC,MAA0C;IAE1C,OAAO,KAAK,UAAU,qBAAqB,CAAC,MAA4B;QACtE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEpC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,eAAe,CACnD,QAAQ,EACR;YACE,IAAI,EAAE,QAAQ,EAAE,mFAAmF;YACnG,KAAK,EAAE,kBAAkB,EAAE,mFAAmF;YAC9G,IAAI,EAAE;gBACJ;oBACE,IAAI,EAAE,SAAS,EAAE,mFAAmF;oBACpG,KAAK,EAAE,MAAM;iBACd;aACF;SACF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAC;QAEF,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC;AAED,SAAgB,4BAA4B,CAC1C,MAA0C;IAE1C,OAAO,KAAK,UAAU,sBAAsB,CAAC,MAA6B;QACxE,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC;QACzB,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QACrE,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAEpC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,eAAe,CACnD,QAAQ,EACR;YACE,IAAI,EAAE,UAAU,EAAE,mFAAmF;YACrG,KAAK,EAAE,mBAAmB,EAAE,mFAAmF;YAC/G,IAAI,EAAE;gBACJ;oBACE,IAAI,EAAE,SAAS,EAAE,mFAAmF;oBACpG,KAAK,EAAE,MAAM;iBACd;aACF;SACF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,CACvB,CAAC;QAEF,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
declare class FermionMCPServer {
|
|
3
|
+
constructor();
|
|
4
|
+
private createServerInstance;
|
|
5
|
+
private setupErrorHandling;
|
|
6
|
+
private setupToolHandlers;
|
|
7
|
+
private startStdio;
|
|
8
|
+
private startHttp;
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
export { FermionMCPServer };
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fermion/mcp-server/index.ts"],"names":[],"mappings":";AA+EA,cAAM,gBAAgB;;IAKpB,OAAO,CAAC,oBAAoB;IAmB5B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,iBAAiB;YA2UX,UAAU;YAOV,SAAS;IA6IjB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAc3B;AAGD,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,408 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.FermionMCPServer = void 0;
|
|
38
|
+
const node_crypto_1 = require("node:crypto");
|
|
39
|
+
const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
|
|
40
|
+
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
41
|
+
const streamableHttp_js_1 = require("@modelcontextprotocol/sdk/server/streamableHttp.js");
|
|
42
|
+
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
43
|
+
const configLoader_js_1 = require("../../common/mcp-server/configLoader.js");
|
|
44
|
+
const jsonUtils_js_1 = require("../../common/mcp-server/jsonUtils.js");
|
|
45
|
+
const logger_js_1 = require("../../common/mcp-server/logger.js");
|
|
46
|
+
const custody_js_1 = require("./handlers/custody.js");
|
|
47
|
+
const email_js_1 = require("./handlers/email.js");
|
|
48
|
+
const funds_js_1 = require("./handlers/funds.js");
|
|
49
|
+
const listings_js_1 = require("./handlers/listings.js");
|
|
50
|
+
const offers_js_1 = require("./handlers/offers.js");
|
|
51
|
+
const sdk_js_1 = require("./handlers/sdk.js");
|
|
52
|
+
const transactions_js_1 = require("./handlers/transactions.js");
|
|
53
|
+
const validation_js_1 = require("./validation.js");
|
|
54
|
+
class FermionMCPServer {
|
|
55
|
+
constructor() {
|
|
56
|
+
// Error handling will be set up per server instance
|
|
57
|
+
}
|
|
58
|
+
createServerInstance() {
|
|
59
|
+
const server = new mcp_js_1.McpServer({
|
|
60
|
+
name: "fermion-protocol-server",
|
|
61
|
+
version: "1.0.0",
|
|
62
|
+
}, {
|
|
63
|
+
capabilities: {
|
|
64
|
+
tools: {},
|
|
65
|
+
resources: {},
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
this.setupToolHandlers(server);
|
|
69
|
+
this.setupErrorHandling(server);
|
|
70
|
+
return server;
|
|
71
|
+
}
|
|
72
|
+
setupErrorHandling(server) {
|
|
73
|
+
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
74
|
+
process.on("SIGINT", async () => {
|
|
75
|
+
try {
|
|
76
|
+
await server.close();
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error("Error closing server:", error);
|
|
80
|
+
}
|
|
81
|
+
process.exit(0);
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
setupToolHandlers(server) {
|
|
85
|
+
// Local SDK state for this server instance
|
|
86
|
+
let coreSDK = null;
|
|
87
|
+
let config = null;
|
|
88
|
+
const initializeSDKHandler = (0, sdk_js_1.createInitializeSDKHandler)((sdk) => {
|
|
89
|
+
coreSDK = sdk;
|
|
90
|
+
}, (configValue) => {
|
|
91
|
+
config = configValue;
|
|
92
|
+
});
|
|
93
|
+
const offerHandler = (0, offers_js_1.createOfferHandler)(() => coreSDK);
|
|
94
|
+
const mintAndWrapNftsHandler = (0, offers_js_1.createMintAndWrapNFTsHandler)(() => coreSDK);
|
|
95
|
+
const mintWrapFixedPricedHandler = (0, offers_js_1.createMintWrapFixedPricedHandler)(() => coreSDK);
|
|
96
|
+
const transactionHandler = (0, transactions_js_1.createTransactionHandler)(() => coreSDK);
|
|
97
|
+
const signTransactionHandler = (0, transactions_js_1.createSignTransactionHandler)();
|
|
98
|
+
const sendToVerifierHandler = (0, transactions_js_1.createSendToVerifierHandler)(() => coreSDK);
|
|
99
|
+
const sendToCustodianHandler = (0, transactions_js_1.createSendToCustodianHandler)(() => coreSDK);
|
|
100
|
+
const submitTaxHandler = (0, funds_js_1.createSubmitTaxHandler)(() => coreSDK);
|
|
101
|
+
const withdrawFundsHandler = (0, funds_js_1.createWithdrawFundsHandler)(() => coreSDK);
|
|
102
|
+
const depositFundsHandler = (0, funds_js_1.createDepositFundsHandler)(() => coreSDK);
|
|
103
|
+
const availableFundsHandler = (0, funds_js_1.createAvailableFundsHandler)(() => coreSDK);
|
|
104
|
+
const checkInHandler = (0, custody_js_1.createCheckInHandler)(() => coreSDK);
|
|
105
|
+
const checkOutHandler = (0, custody_js_1.createCheckOutHandler)(() => coreSDK);
|
|
106
|
+
const requestCheckOutHandler = (0, custody_js_1.createRequestCheckOutHandler)(() => coreSDK);
|
|
107
|
+
const topUpCustodianVaultHandler = (0, custody_js_1.createTopUpCustodianVaultHandler)(() => coreSDK);
|
|
108
|
+
const createListingsHandler = () => {
|
|
109
|
+
if (!coreSDK) {
|
|
110
|
+
throw new Error("SDK not initialized. Call initialize_sdk first.");
|
|
111
|
+
}
|
|
112
|
+
if (!config) {
|
|
113
|
+
throw new Error("Config not initialized. Call initialize_sdk first.");
|
|
114
|
+
}
|
|
115
|
+
return new listings_js_1.ListingsHandler(coreSDK, config);
|
|
116
|
+
};
|
|
117
|
+
server.tool("initialize_sdk", "Initialize the Fermion Protocol SDK with custom configuration", sdk_js_1.initializeSDKSchema, (args) => {
|
|
118
|
+
// Validate required fields - signerAddress can come from params or env
|
|
119
|
+
const signerAddress = args.signerAddress || process.env.SIGNER_ADDRESS;
|
|
120
|
+
if (!signerAddress) {
|
|
121
|
+
throw new Error("signerAddress is required. Provide it as parameter or set SIGNER_ADDRESS environment variable.");
|
|
122
|
+
}
|
|
123
|
+
return initializeSDKHandler(args);
|
|
124
|
+
});
|
|
125
|
+
server.tool("create_offer", "Create a new offer on Fermion Protocol", validation_js_1.createOfferValidation.shape, (args) => {
|
|
126
|
+
const validatedArgs = validation_js_1.createOfferValidation.parse(args);
|
|
127
|
+
return offerHandler(validatedArgs);
|
|
128
|
+
});
|
|
129
|
+
server.tool("mint_wrap_nfts", "Mint and wrap NFTs for an offer", validation_js_1.mintAndWrapNFTsValidation.shape, (args) => {
|
|
130
|
+
const validatedArgs = validation_js_1.mintAndWrapNFTsValidation.parse(args);
|
|
131
|
+
return mintAndWrapNftsHandler(validatedArgs);
|
|
132
|
+
});
|
|
133
|
+
server.tool("send_signed_transaction", "Send a signed transaction to the Ethereum network", validation_js_1.signedTransactionValidation, transactionHandler);
|
|
134
|
+
server.tool("sign_transaction", "Sign a transaction with a private key", validation_js_1.signTransactionValidation, signTransactionHandler);
|
|
135
|
+
server.tool("mint_wrap_fixed_priced", "Mint and wrap fixed priced NFTs for an offer", validation_js_1.mintWrapFixedPricedValidation.shape, (args) => {
|
|
136
|
+
const validatedArgs = validation_js_1.mintWrapFixedPricedValidation.parse(args);
|
|
137
|
+
return mintWrapFixedPricedHandler(validatedArgs);
|
|
138
|
+
});
|
|
139
|
+
server.tool("create_fixed_price_order", "Create a fixed price order listing", validation_js_1.createFixedPriceOrderValidation.shape, async (args) => {
|
|
140
|
+
const validatedArgs = validation_js_1.createFixedPriceOrderValidation.parse(args);
|
|
141
|
+
return createListingsHandler().createFixedPriceOrder(validatedArgs);
|
|
142
|
+
});
|
|
143
|
+
server.tool("cancel_fixed_price_orders", "Cancel fixed price orders for an offer", validation_js_1.cancelFixedPriceOrdersValidationShape, async (args) => {
|
|
144
|
+
const validatedArgs = validation_js_1.cancelFixedPriceOrdersValidation.parse(args);
|
|
145
|
+
return createListingsHandler().cancelFixedPriceOrders(validatedArgs);
|
|
146
|
+
});
|
|
147
|
+
server.resource("seaport-orders", new mcp_js_1.ResourceTemplate("seaport://orders/{offerId}", { list: undefined }), {
|
|
148
|
+
name: "Seaport Orders",
|
|
149
|
+
description: "Get all seaport orders for an offer (returns OrderComponents format compatible with cancel_fixed_price_orders)",
|
|
150
|
+
mimeType: "application/json",
|
|
151
|
+
}, async (uri, variables) => {
|
|
152
|
+
const validatedArgs = validation_js_1.getSeaportOrdersValidation.parse({
|
|
153
|
+
offerId: variables.offerId,
|
|
154
|
+
});
|
|
155
|
+
const result = (await createListingsHandler().getSeaportOrders(validatedArgs));
|
|
156
|
+
return {
|
|
157
|
+
contents: [
|
|
158
|
+
{
|
|
159
|
+
uri: uri.toString(),
|
|
160
|
+
mimeType: "application/json",
|
|
161
|
+
text: (0, jsonUtils_js_1.stringifyWithBigInt)(result.data),
|
|
162
|
+
},
|
|
163
|
+
],
|
|
164
|
+
};
|
|
165
|
+
});
|
|
166
|
+
server.resource("available-funds", new mcp_js_1.ResourceTemplate("fermion://available-funds/{entityId}/{tokenAddress}", {
|
|
167
|
+
list: undefined,
|
|
168
|
+
// TODO: to add autocomplete via complete (also add completions:{} in McpServer capabilities)
|
|
169
|
+
}), {
|
|
170
|
+
name: "Available Funds",
|
|
171
|
+
description: "Get available funds for a specific entity and token address",
|
|
172
|
+
mimeType: "application/json",
|
|
173
|
+
}, async (uri, variables) => {
|
|
174
|
+
const validatedArgs = validation_js_1.getAvailableFundsValidation.parse({
|
|
175
|
+
entityId: variables.entityId,
|
|
176
|
+
tokenAddress: variables.tokenAddress,
|
|
177
|
+
});
|
|
178
|
+
const result = await availableFundsHandler(validatedArgs.entityId, validatedArgs.tokenAddress);
|
|
179
|
+
return {
|
|
180
|
+
contents: [
|
|
181
|
+
{
|
|
182
|
+
uri: uri.toString(),
|
|
183
|
+
mimeType: "application/json",
|
|
184
|
+
text: (0, jsonUtils_js_1.stringifyWithBigInt)({ availableFunds: result }),
|
|
185
|
+
},
|
|
186
|
+
],
|
|
187
|
+
};
|
|
188
|
+
});
|
|
189
|
+
server.tool("generate_asset_verification_email", "Generate email parameters for asset verification delivery arrangement", validation_js_1.generateAssetVerificationEmailValidation.shape, async (args) => {
|
|
190
|
+
if (!coreSDK) {
|
|
191
|
+
throw new Error("SDK not initialized. Call initialize_sdk first.");
|
|
192
|
+
}
|
|
193
|
+
const validatedArgs = validation_js_1.generateAssetVerificationEmailValidation.parse(args);
|
|
194
|
+
const result = await (0, email_js_1.generateAssetVerificationEmail)(validatedArgs, coreSDK, sendToVerifierHandler);
|
|
195
|
+
return {
|
|
196
|
+
content: [
|
|
197
|
+
{
|
|
198
|
+
type: "text",
|
|
199
|
+
text: (0, jsonUtils_js_1.stringifyWithBigInt)(result),
|
|
200
|
+
},
|
|
201
|
+
],
|
|
202
|
+
};
|
|
203
|
+
});
|
|
204
|
+
server.tool("generate_asset_custody_email", "Generate email parameters for asset delivery to custodian arrangement", validation_js_1.generateAssetDeliveryEmailValidation.shape, async (args) => {
|
|
205
|
+
if (!coreSDK) {
|
|
206
|
+
throw new Error("SDK not initialized. Call initialize_sdk first.");
|
|
207
|
+
}
|
|
208
|
+
const validatedArgs = validation_js_1.generateAssetDeliveryEmailValidation.parse(args);
|
|
209
|
+
const result = await (0, email_js_1.generateAssetDeliveryEmail)(validatedArgs, coreSDK, sendToCustodianHandler);
|
|
210
|
+
return {
|
|
211
|
+
content: [
|
|
212
|
+
{
|
|
213
|
+
type: "text",
|
|
214
|
+
text: (0, jsonUtils_js_1.stringifyWithBigInt)(result),
|
|
215
|
+
},
|
|
216
|
+
],
|
|
217
|
+
};
|
|
218
|
+
});
|
|
219
|
+
server.tool("submit_tax", "Submit tax amount or clear checkout request based on VAT requirements", validation_js_1.submitTaxValidationShape, async (args) => {
|
|
220
|
+
const validatedArgs = validation_js_1.submitTaxValidation.parse(args);
|
|
221
|
+
const result = await submitTaxHandler({
|
|
222
|
+
tokenId: validatedArgs.tokenId,
|
|
223
|
+
vatRequired: validatedArgs.vatRequired,
|
|
224
|
+
vatAmount: validatedArgs.vatAmount,
|
|
225
|
+
maxTaxAmount: validatedArgs.maxTaxAmount,
|
|
226
|
+
});
|
|
227
|
+
return {
|
|
228
|
+
content: [
|
|
229
|
+
{
|
|
230
|
+
type: "text",
|
|
231
|
+
text: (0, jsonUtils_js_1.stringifyWithBigInt)(result),
|
|
232
|
+
},
|
|
233
|
+
],
|
|
234
|
+
};
|
|
235
|
+
});
|
|
236
|
+
server.tool("withdraw_funds", "Withdraw funds from an entity to a treasury address", validation_js_1.withdrawFundsValidationShape, async (args) => {
|
|
237
|
+
const validatedArgs = validation_js_1.withdrawFundsValidation.parse(args);
|
|
238
|
+
return withdrawFundsHandler(validatedArgs);
|
|
239
|
+
});
|
|
240
|
+
server.tool("deposit_funds", "Deposit funds to an entity from a token address", validation_js_1.depositFundsValidationShape, async (args) => {
|
|
241
|
+
const validatedArgs = validation_js_1.depositFundsValidation.parse(args);
|
|
242
|
+
return depositFundsHandler(validatedArgs);
|
|
243
|
+
});
|
|
244
|
+
server.tool("check_in", "Check in a token to custody", validation_js_1.checkInValidation.shape, async (args) => {
|
|
245
|
+
const validatedArgs = validation_js_1.checkInValidation.parse(args);
|
|
246
|
+
return checkInHandler(validatedArgs);
|
|
247
|
+
});
|
|
248
|
+
server.tool("check_out", "Check out a token from custody", validation_js_1.checkOutValidation.shape, async (args) => {
|
|
249
|
+
const validatedArgs = validation_js_1.checkOutValidation.parse(args);
|
|
250
|
+
return checkOutHandler(validatedArgs);
|
|
251
|
+
});
|
|
252
|
+
server.tool("request_check_out", "Request check out of a token from custody", validation_js_1.requestCheckOutValidation.shape, async (args) => {
|
|
253
|
+
const validatedArgs = validation_js_1.requestCheckOutValidation.parse(args);
|
|
254
|
+
return requestCheckOutHandler(validatedArgs);
|
|
255
|
+
});
|
|
256
|
+
server.tool("top_up_custodian_vault", "Top up the custodian vault for a token or offer", validation_js_1.topUpCustodianVaultValidation.shape, async (args) => {
|
|
257
|
+
const validatedArgs = validation_js_1.topUpCustodianVaultValidation.parse(args);
|
|
258
|
+
return topUpCustodianVaultHandler(validatedArgs);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
async startStdio() {
|
|
262
|
+
const server = this.createServerInstance();
|
|
263
|
+
const transport = new stdio_js_1.StdioServerTransport();
|
|
264
|
+
await server.connect(transport);
|
|
265
|
+
(0, logger_js_1.log)("Fermion Protocol MCP server running on stdio");
|
|
266
|
+
}
|
|
267
|
+
async startHttp(port = 3000) {
|
|
268
|
+
const express = await Promise.resolve().then(() => __importStar(require("express")));
|
|
269
|
+
const app = express.default();
|
|
270
|
+
app.use(express.json());
|
|
271
|
+
// Enable CORS for cross-origin requests
|
|
272
|
+
app.use((req, res, next) => {
|
|
273
|
+
res.header("Access-Control-Allow-Origin", "*");
|
|
274
|
+
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
|
|
275
|
+
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization");
|
|
276
|
+
if (req.method === "OPTIONS") {
|
|
277
|
+
res.sendStatus(200);
|
|
278
|
+
}
|
|
279
|
+
else {
|
|
280
|
+
next();
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
// Root endpoint - serves as the main page for integration
|
|
284
|
+
app.get("/", (_, res) => {
|
|
285
|
+
res.json({
|
|
286
|
+
name: "Fermion Protocol MCP Server",
|
|
287
|
+
version: "1.0.0",
|
|
288
|
+
description: "MCP Server for Fermion Protocol operations",
|
|
289
|
+
endpoints: {
|
|
290
|
+
health: "/health",
|
|
291
|
+
mcp: "/mcp",
|
|
292
|
+
},
|
|
293
|
+
status: "running",
|
|
294
|
+
transport: "Streamable HTTP",
|
|
295
|
+
});
|
|
296
|
+
});
|
|
297
|
+
// Health check endpoint
|
|
298
|
+
app.get("/health", (_, res) => {
|
|
299
|
+
res.json({
|
|
300
|
+
status: "ok",
|
|
301
|
+
timestamp: new Date().toISOString(),
|
|
302
|
+
server: "Fermion Protocol MCP Server",
|
|
303
|
+
});
|
|
304
|
+
});
|
|
305
|
+
// Map to store transports by session ID
|
|
306
|
+
const transports = {};
|
|
307
|
+
app.post("/mcp", async (req, res) => {
|
|
308
|
+
// Check for existing session ID
|
|
309
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
310
|
+
let transport;
|
|
311
|
+
if (sessionId && transports[sessionId]) {
|
|
312
|
+
// Reuse existing transport
|
|
313
|
+
transport = transports[sessionId];
|
|
314
|
+
}
|
|
315
|
+
else if (!sessionId && (0, types_js_1.isInitializeRequest)(req.body)) {
|
|
316
|
+
// New initialization request - create new server instance
|
|
317
|
+
const server = this.createServerInstance();
|
|
318
|
+
transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
|
|
319
|
+
sessionIdGenerator: () => (0, node_crypto_1.randomUUID)(),
|
|
320
|
+
onsessioninitialized: (sessionId) => {
|
|
321
|
+
// Store the transport by session ID
|
|
322
|
+
transports[sessionId] = transport;
|
|
323
|
+
},
|
|
324
|
+
});
|
|
325
|
+
// Clean up transport when closed
|
|
326
|
+
transport.onclose = () => {
|
|
327
|
+
(0, logger_js_1.log)("transport has been closed");
|
|
328
|
+
if (transport.sessionId) {
|
|
329
|
+
delete transports[transport.sessionId];
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
// Connect to the MCP server
|
|
333
|
+
await server.connect(transport);
|
|
334
|
+
}
|
|
335
|
+
else {
|
|
336
|
+
// Invalid request
|
|
337
|
+
res.status(400).json({
|
|
338
|
+
jsonrpc: "2.0",
|
|
339
|
+
error: {
|
|
340
|
+
code: -32000,
|
|
341
|
+
message: "Bad Request: No valid session ID provided",
|
|
342
|
+
},
|
|
343
|
+
id: null,
|
|
344
|
+
});
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
// Handle the request
|
|
348
|
+
await transport.handleRequest(req, res, req.body);
|
|
349
|
+
});
|
|
350
|
+
// Handle GET requests for server-to-client notifications via SSE
|
|
351
|
+
app.get("/mcp", async (req, res) => {
|
|
352
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
353
|
+
if (!sessionId || !transports[sessionId]) {
|
|
354
|
+
res.status(400).send("Invalid or missing session ID");
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
357
|
+
const transport = transports[sessionId];
|
|
358
|
+
await transport.handleRequest(req, res);
|
|
359
|
+
});
|
|
360
|
+
// Handle DELETE requests for session termination
|
|
361
|
+
app.delete("/mcp", async (req, res) => {
|
|
362
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
363
|
+
if (!sessionId || !transports[sessionId]) {
|
|
364
|
+
res.status(400).send("Invalid or missing session ID");
|
|
365
|
+
return;
|
|
366
|
+
}
|
|
367
|
+
const transport = transports[sessionId];
|
|
368
|
+
await transport.handleRequest(req, res);
|
|
369
|
+
});
|
|
370
|
+
// Catch-all for unknown routes
|
|
371
|
+
app.use((req, res) => {
|
|
372
|
+
res.status(404).json({
|
|
373
|
+
error: "Not Found",
|
|
374
|
+
message: `The requested endpoint ${req.originalUrl} was not found`,
|
|
375
|
+
availableEndpoints: {
|
|
376
|
+
root: "/",
|
|
377
|
+
health: "/health",
|
|
378
|
+
mcp: "/mcp",
|
|
379
|
+
},
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
app.listen(port, () => {
|
|
383
|
+
(0, logger_js_1.log)(`Fermion MCP Server running on http://localhost:${port}`);
|
|
384
|
+
(0, logger_js_1.log)(`Web interface: http://localhost:${port}`);
|
|
385
|
+
(0, logger_js_1.log)(`MCP endpoint: http://localhost:${port}/mcp`);
|
|
386
|
+
(0, logger_js_1.log)(`Health check: http://localhost:${port}/health`);
|
|
387
|
+
});
|
|
388
|
+
}
|
|
389
|
+
async run() {
|
|
390
|
+
const args = (0, configLoader_js_1.parseArgs)();
|
|
391
|
+
// Load environment variables from config if provided
|
|
392
|
+
(0, configLoader_js_1.loadConfigEnv)(args.config, args.server);
|
|
393
|
+
const useHttp = args.http || process.env.MCP_TRANSPORT === "http";
|
|
394
|
+
if (useHttp) {
|
|
395
|
+
await this.startHttp();
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
await this.startStdio();
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
exports.FermionMCPServer = FermionMCPServer;
|
|
403
|
+
// Only run server if not in test environment
|
|
404
|
+
if (process.env.NODE_ENV !== "test" && process.env.VITEST !== "true") {
|
|
405
|
+
const server = new FermionMCPServer();
|
|
406
|
+
server.run().catch(logger_js_1.log);
|
|
407
|
+
}
|
|
408
|
+
//# sourceMappingURL=index.js.map
|