@missionsquad/mcp-server-tron 1.2.0
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/LICENSE +21 -0
- package/README.md +537 -0
- package/bin/cli.js +51 -0
- package/build/core/chains.d.ts +17 -0
- package/build/core/chains.js +87 -0
- package/build/core/chains.js.map +1 -0
- package/build/core/prompts.d.ts +19 -0
- package/build/core/prompts.js +485 -0
- package/build/core/prompts.js.map +1 -0
- package/build/core/resources.d.ts +14 -0
- package/build/core/resources.js +42 -0
- package/build/core/resources.js.map +1 -0
- package/build/core/services/account-data.d.ts +144 -0
- package/build/core/services/account-data.js +228 -0
- package/build/core/services/account-data.js.map +1 -0
- package/build/core/services/account-resource.d.ts +56 -0
- package/build/core/services/account-resource.js +133 -0
- package/build/core/services/account-resource.js.map +1 -0
- package/build/core/services/account.d.ts +141 -0
- package/build/core/services/account.js +191 -0
- package/build/core/services/account.js.map +1 -0
- package/build/core/services/address.d.ts +8 -0
- package/build/core/services/address.js +52 -0
- package/build/core/services/address.js.map +1 -0
- package/build/core/services/agent-wallet.d.ts +62 -0
- package/build/core/services/agent-wallet.js +234 -0
- package/build/core/services/agent-wallet.js.map +1 -0
- package/build/core/services/balance.d.ts +26 -0
- package/build/core/services/balance.js +60 -0
- package/build/core/services/balance.js.map +1 -0
- package/build/core/services/blocks.d.ts +25 -0
- package/build/core/services/blocks.js +65 -0
- package/build/core/services/blocks.js.map +1 -0
- package/build/core/services/broadcast.d.ts +13 -0
- package/build/core/services/broadcast.js +24 -0
- package/build/core/services/broadcast.js.map +1 -0
- package/build/core/services/clients.d.ts +5 -0
- package/build/core/services/clients.js +29 -0
- package/build/core/services/clients.js.map +1 -0
- package/build/core/services/contract-data.d.ts +31 -0
- package/build/core/services/contract-data.js +54 -0
- package/build/core/services/contract-data.js.map +1 -0
- package/build/core/services/contracts.d.ts +108 -0
- package/build/core/services/contracts.js +482 -0
- package/build/core/services/contracts.js.map +1 -0
- package/build/core/services/events.d.ts +56 -0
- package/build/core/services/events.js +99 -0
- package/build/core/services/events.js.map +1 -0
- package/build/core/services/governance.d.ts +78 -0
- package/build/core/services/governance.js +207 -0
- package/build/core/services/governance.js.map +1 -0
- package/build/core/services/index.d.ts +28 -0
- package/build/core/services/index.js +81 -0
- package/build/core/services/index.js.map +1 -0
- package/build/core/services/mempool.d.ts +12 -0
- package/build/core/services/mempool.js +32 -0
- package/build/core/services/mempool.js.map +1 -0
- package/build/core/services/multicall-abi.d.ts +55 -0
- package/build/core/services/multicall-abi.js +61 -0
- package/build/core/services/multicall-abi.js.map +1 -0
- package/build/core/services/nodes.d.ts +8 -0
- package/build/core/services/nodes.js +18 -0
- package/build/core/services/nodes.js.map +1 -0
- package/build/core/services/proposals.d.ts +33 -0
- package/build/core/services/proposals.js +95 -0
- package/build/core/services/proposals.js.map +1 -0
- package/build/core/services/query.d.ts +34 -0
- package/build/core/services/query.js +60 -0
- package/build/core/services/query.js.map +1 -0
- package/build/core/services/staking.d.ts +40 -0
- package/build/core/services/staking.js +113 -0
- package/build/core/services/staking.js.map +1 -0
- package/build/core/services/tokens.d.ts +22 -0
- package/build/core/services/tokens.js +68 -0
- package/build/core/services/tokens.js.map +1 -0
- package/build/core/services/transactions.d.ts +16 -0
- package/build/core/services/transactions.js +42 -0
- package/build/core/services/transactions.js.map +1 -0
- package/build/core/services/transfer.d.ts +24 -0
- package/build/core/services/transfer.js +84 -0
- package/build/core/services/transfer.js.map +1 -0
- package/build/core/services/trongrid-client.d.ts +14 -0
- package/build/core/services/trongrid-client.js +19 -0
- package/build/core/services/trongrid-client.js.map +1 -0
- package/build/core/services/utils.d.ts +13 -0
- package/build/core/services/utils.js +39 -0
- package/build/core/services/utils.js.map +1 -0
- package/build/core/services/wallet.d.ts +13 -0
- package/build/core/services/wallet.js +18 -0
- package/build/core/services/wallet.js.map +1 -0
- package/build/core/tools/account-data.d.ts +2 -0
- package/build/core/tools/account-data.js +253 -0
- package/build/core/tools/account-data.js.map +1 -0
- package/build/core/tools/account-resource.d.ts +2 -0
- package/build/core/tools/account-resource.js +269 -0
- package/build/core/tools/account-resource.js.map +1 -0
- package/build/core/tools/account.d.ts +2 -0
- package/build/core/tools/account.js +451 -0
- package/build/core/tools/account.js.map +1 -0
- package/build/core/tools/address.d.ts +2 -0
- package/build/core/tools/address.js +45 -0
- package/build/core/tools/address.js.map +1 -0
- package/build/core/tools/balance.d.ts +2 -0
- package/build/core/tools/balance.js +94 -0
- package/build/core/tools/balance.js.map +1 -0
- package/build/core/tools/block.d.ts +2 -0
- package/build/core/tools/block.js +74 -0
- package/build/core/tools/block.js.map +1 -0
- package/build/core/tools/broadcast.d.ts +2 -0
- package/build/core/tools/broadcast.js +102 -0
- package/build/core/tools/broadcast.js.map +1 -0
- package/build/core/tools/contract-data.d.ts +2 -0
- package/build/core/tools/contract-data.js +159 -0
- package/build/core/tools/contract-data.js.map +1 -0
- package/build/core/tools/contract.d.ts +2 -0
- package/build/core/tools/contract.js +600 -0
- package/build/core/tools/contract.js.map +1 -0
- package/build/core/tools/event.d.ts +2 -0
- package/build/core/tools/event.js +159 -0
- package/build/core/tools/event.js.map +1 -0
- package/build/core/tools/governance.d.ts +6 -0
- package/build/core/tools/governance.js +424 -0
- package/build/core/tools/governance.js.map +1 -0
- package/build/core/tools/index.d.ts +15 -0
- package/build/core/tools/index.js +93 -0
- package/build/core/tools/index.js.map +1 -0
- package/build/core/tools/mempool.d.ts +2 -0
- package/build/core/tools/mempool.js +116 -0
- package/build/core/tools/mempool.js.map +1 -0
- package/build/core/tools/network.d.ts +2 -0
- package/build/core/tools/network.js +114 -0
- package/build/core/tools/network.js.map +1 -0
- package/build/core/tools/node.d.ts +2 -0
- package/build/core/tools/node.js +75 -0
- package/build/core/tools/node.js.map +1 -0
- package/build/core/tools/proposals.d.ts +6 -0
- package/build/core/tools/proposals.js +219 -0
- package/build/core/tools/proposals.js.map +1 -0
- package/build/core/tools/query.d.ts +2 -0
- package/build/core/tools/query.js +399 -0
- package/build/core/tools/query.js.map +1 -0
- package/build/core/tools/staking.d.ts +2 -0
- package/build/core/tools/staking.js +281 -0
- package/build/core/tools/staking.js.map +1 -0
- package/build/core/tools/transaction.d.ts +2 -0
- package/build/core/tools/transaction.js +65 -0
- package/build/core/tools/transaction.js.map +1 -0
- package/build/core/tools/transfer.d.ts +2 -0
- package/build/core/tools/transfer.js +101 -0
- package/build/core/tools/transfer.js.map +1 -0
- package/build/core/tools/types.d.ts +13 -0
- package/build/core/tools/types.js +2 -0
- package/build/core/tools/types.js.map +1 -0
- package/build/core/tools/wallet.d.ts +2 -0
- package/build/core/tools/wallet.js +172 -0
- package/build/core/tools/wallet.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.js +21 -0
- package/build/index.js.map +1 -0
- package/build/middleware/auth.d.ts +16 -0
- package/build/middleware/auth.js +44 -0
- package/build/middleware/auth.js.map +1 -0
- package/build/oauth/OAuthService.d.ts +100 -0
- package/build/oauth/OAuthService.js +507 -0
- package/build/oauth/OAuthService.js.map +1 -0
- package/build/oauth/page.d.ts +1 -0
- package/build/oauth/page.js +255 -0
- package/build/oauth/page.js.map +1 -0
- package/build/oauth/types.d.ts +65 -0
- package/build/oauth/types.js +2 -0
- package/build/oauth/types.js.map +1 -0
- package/build/server/http-app.d.ts +9 -0
- package/build/server/http-app.js +128 -0
- package/build/server/http-app.js.map +1 -0
- package/build/server/http-server.d.ts +1 -0
- package/build/server/http-server.js +35 -0
- package/build/server/http-server.js.map +1 -0
- package/build/server/oauth-routes.d.ts +7 -0
- package/build/server/oauth-routes.js +157 -0
- package/build/server/oauth-routes.js.map +1 -0
- package/build/server/server.d.ts +9 -0
- package/build/server/server.js +54 -0
- package/build/server/server.js.map +1 -0
- package/build/tenant/TenantManager.d.ts +35 -0
- package/build/tenant/TenantManager.js +167 -0
- package/build/tenant/TenantManager.js.map +1 -0
- package/build/tenant/context.d.ts +11 -0
- package/build/tenant/context.js +23 -0
- package/build/tenant/context.js.map +1 -0
- package/build/tenant/types.d.ts +16 -0
- package/build/tenant/types.js +2 -0
- package/build/tenant/types.js.map +1 -0
- package/package.json +95 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import * as services from "../services/index.js";
|
|
3
|
+
export function registerWalletTools(registerTool) {
|
|
4
|
+
registerTool("get_wallet_address", {
|
|
5
|
+
description: "Get the address of the configured wallet. Use this to verify which wallet is active.",
|
|
6
|
+
inputSchema: {},
|
|
7
|
+
annotations: {
|
|
8
|
+
title: "Get Wallet Address",
|
|
9
|
+
readOnlyHint: true,
|
|
10
|
+
destructiveHint: false,
|
|
11
|
+
idempotentHint: true,
|
|
12
|
+
openWorldHint: false,
|
|
13
|
+
},
|
|
14
|
+
}, async () => {
|
|
15
|
+
try {
|
|
16
|
+
const address = await services.getOwnerAddress();
|
|
17
|
+
const walletId = services.getActiveWalletId();
|
|
18
|
+
return {
|
|
19
|
+
content: [
|
|
20
|
+
{
|
|
21
|
+
type: "text",
|
|
22
|
+
text: JSON.stringify({
|
|
23
|
+
walletId: walletId ?? undefined,
|
|
24
|
+
address,
|
|
25
|
+
base58: services.toBase58Address(address),
|
|
26
|
+
hex: services.toHexAddress(address),
|
|
27
|
+
message: "This is the wallet that will be used for all transactions",
|
|
28
|
+
}, null, 2),
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
return {
|
|
35
|
+
content: [
|
|
36
|
+
{
|
|
37
|
+
type: "text",
|
|
38
|
+
text: `Error: ${error instanceof Error ? error.message : String(error)}`,
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
isError: true,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
registerTool("list_wallets", {
|
|
46
|
+
description: "List all available wallets. Returns wallet IDs, types, and addresses. Use select_wallet to switch between them.",
|
|
47
|
+
inputSchema: {},
|
|
48
|
+
annotations: {
|
|
49
|
+
title: "List Wallets",
|
|
50
|
+
readOnlyHint: true,
|
|
51
|
+
destructiveHint: false,
|
|
52
|
+
idempotentHint: true,
|
|
53
|
+
openWorldHint: false,
|
|
54
|
+
},
|
|
55
|
+
}, async () => {
|
|
56
|
+
try {
|
|
57
|
+
const wallets = await services.listAgentWallets();
|
|
58
|
+
const activeId = services.getActiveWalletId();
|
|
59
|
+
return {
|
|
60
|
+
content: [
|
|
61
|
+
{
|
|
62
|
+
type: "text",
|
|
63
|
+
text: JSON.stringify({
|
|
64
|
+
activeWalletId: activeId,
|
|
65
|
+
wallets,
|
|
66
|
+
message: wallets.length === 0
|
|
67
|
+
? "No wallet is currently configured."
|
|
68
|
+
: wallets.length === 1
|
|
69
|
+
? "Using the configured single wallet."
|
|
70
|
+
: `Found ${wallets.length} wallet(s). Use select_wallet to switch the active wallet.`,
|
|
71
|
+
}, null, 2),
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return {
|
|
78
|
+
content: [
|
|
79
|
+
{
|
|
80
|
+
type: "text",
|
|
81
|
+
text: `Error listing wallets: ${error instanceof Error ? error.message : String(error)}`,
|
|
82
|
+
},
|
|
83
|
+
],
|
|
84
|
+
isError: true,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
registerTool("select_wallet", {
|
|
89
|
+
description: "Switch the active wallet at runtime. Use list_wallets to see available wallet IDs. Only available in Encrypted Storage mode.",
|
|
90
|
+
legacyOnly: true,
|
|
91
|
+
inputSchema: {
|
|
92
|
+
walletId: z.string().describe("The wallet ID to switch to"),
|
|
93
|
+
},
|
|
94
|
+
annotations: {
|
|
95
|
+
title: "Select Wallet",
|
|
96
|
+
readOnlyHint: false,
|
|
97
|
+
destructiveHint: false,
|
|
98
|
+
idempotentHint: true,
|
|
99
|
+
openWorldHint: false,
|
|
100
|
+
},
|
|
101
|
+
}, async ({ walletId }) => {
|
|
102
|
+
try {
|
|
103
|
+
const result = await services.selectWallet(walletId);
|
|
104
|
+
return {
|
|
105
|
+
content: [
|
|
106
|
+
{
|
|
107
|
+
type: "text",
|
|
108
|
+
text: JSON.stringify({
|
|
109
|
+
id: result.id,
|
|
110
|
+
address: result.address,
|
|
111
|
+
message: `Wallet switched to "${result.id}". All subsequent transactions will use this wallet.`,
|
|
112
|
+
}, null, 2),
|
|
113
|
+
},
|
|
114
|
+
],
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return {
|
|
119
|
+
content: [
|
|
120
|
+
{
|
|
121
|
+
type: "text",
|
|
122
|
+
text: `Error selecting wallet: ${error instanceof Error ? error.message : String(error)}`,
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
isError: true,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
});
|
|
129
|
+
registerTool("sign_message", {
|
|
130
|
+
description: "Sign an arbitrary message using the configured wallet.",
|
|
131
|
+
inputSchema: {
|
|
132
|
+
message: z.string().describe("The message to sign"),
|
|
133
|
+
},
|
|
134
|
+
annotations: {
|
|
135
|
+
title: "Sign Message",
|
|
136
|
+
readOnlyHint: false,
|
|
137
|
+
destructiveHint: false,
|
|
138
|
+
idempotentHint: true,
|
|
139
|
+
openWorldHint: false,
|
|
140
|
+
},
|
|
141
|
+
}, async ({ message }) => {
|
|
142
|
+
try {
|
|
143
|
+
const senderAddress = await services.getOwnerAddress();
|
|
144
|
+
const signature = await services.signMessage(message);
|
|
145
|
+
return {
|
|
146
|
+
content: [
|
|
147
|
+
{
|
|
148
|
+
type: "text",
|
|
149
|
+
text: JSON.stringify({
|
|
150
|
+
message,
|
|
151
|
+
signature,
|
|
152
|
+
signer: senderAddress,
|
|
153
|
+
messageType: "personal_sign",
|
|
154
|
+
}, null, 2),
|
|
155
|
+
},
|
|
156
|
+
],
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
catch (error) {
|
|
160
|
+
return {
|
|
161
|
+
content: [
|
|
162
|
+
{
|
|
163
|
+
type: "text",
|
|
164
|
+
text: `Error signing message: ${error instanceof Error ? error.message : String(error)}`,
|
|
165
|
+
},
|
|
166
|
+
],
|
|
167
|
+
isError: true,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/core/tools/wallet.ts"],"names":[],"mappings":"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"}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/build/index.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
2
|
+
import startServer from "./server/server.js";
|
|
3
|
+
// Start the server
|
|
4
|
+
async function main() {
|
|
5
|
+
try {
|
|
6
|
+
const isReadOnly = process.argv.includes("--readonly") || process.argv.includes("-r");
|
|
7
|
+
const server = await startServer({ readOnly: isReadOnly, transport: "stdio" });
|
|
8
|
+
const transport = new StdioServerTransport();
|
|
9
|
+
await server.connect(transport);
|
|
10
|
+
console.error(`mcp-server-tron running on stdio${isReadOnly ? " (readonly)" : ""}`);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
console.error("Error starting MCP server:", error);
|
|
14
|
+
process.exit(1);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
main().catch((error) => {
|
|
18
|
+
console.error("Fatal error in main():", error);
|
|
19
|
+
process.exit(1);
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,WAAW,MAAM,oBAAoB,CAAC;AAE7C,mBAAmB;AACnB,KAAK,UAAU,IAAI;IACjB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC,CAAC;QAC/E,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,mCAAmC,UAAU,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type express from "express";
|
|
2
|
+
import type { TenantManager } from "../tenant/TenantManager.js";
|
|
3
|
+
import type { TenantRecord } from "../tenant/types.js";
|
|
4
|
+
declare module "express-serve-static-core" {
|
|
5
|
+
interface Request {
|
|
6
|
+
tenantAuth?: {
|
|
7
|
+
tenant: TenantRecord;
|
|
8
|
+
} | null;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export declare function optionalOAuthTenantAuth(params: {
|
|
12
|
+
tenantManager: TenantManager;
|
|
13
|
+
jwtSecret: string;
|
|
14
|
+
issuer: string;
|
|
15
|
+
audience: string;
|
|
16
|
+
}): express.RequestHandler;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import jwt from "jsonwebtoken";
|
|
2
|
+
export function optionalOAuthTenantAuth(params) {
|
|
3
|
+
return (req, res, next) => {
|
|
4
|
+
const authorization = req.headers.authorization;
|
|
5
|
+
if (!authorization) {
|
|
6
|
+
req.tenantAuth = null;
|
|
7
|
+
next();
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
if (!authorization.startsWith("Bearer ")) {
|
|
11
|
+
res.status(401).json({ error: "Invalid Authorization header format." });
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
const token = authorization.slice("Bearer ".length).trim();
|
|
15
|
+
if (!token) {
|
|
16
|
+
res.status(401).json({ error: "Missing bearer token." });
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
try {
|
|
20
|
+
const payload = jwt.verify(token, params.jwtSecret, {
|
|
21
|
+
algorithms: ["HS256"],
|
|
22
|
+
issuer: params.issuer,
|
|
23
|
+
audience: params.audience,
|
|
24
|
+
});
|
|
25
|
+
const tenant = params.tenantManager.getTenantById(payload.tenantId);
|
|
26
|
+
if (!tenant) {
|
|
27
|
+
res.status(401).json({ error: "Tenant not found for access token." });
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
if (tenant.sessionVersion !== payload.sessionVersion) {
|
|
31
|
+
res.status(401).json({ error: "OAuth token session is no longer valid." });
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
req.tenantAuth = { tenant };
|
|
35
|
+
next();
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
res.status(401).json({
|
|
39
|
+
error: error instanceof Error ? error.message : "Invalid access token.",
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/middleware/auth.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,cAAc,CAAC;AAa/B,MAAM,UAAU,uBAAuB,CAAC,MAKvC;IACC,OAAO,CAAC,GAAY,EAAE,GAAa,EAAE,IAAI,EAAE,EAAE;QAC3C,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,EAAE,CAAC;YACP,OAAO;QACT,CAAC;QAED,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,sCAAsC,EAAE,CAAC,CAAC;YACxE,OAAO;QACT,CAAC;QAED,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,CAAC,CAAC;YACzD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE;gBAClD,UAAU,EAAE,CAAC,OAAO,CAAC;gBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,QAAQ,EAAE,MAAM,CAAC,QAAQ;aAC1B,CAA4B,CAAC;YAE9B,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACpE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC,CAAC;gBACtE,OAAO;YACT,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC;gBACrD,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,yCAAyC,EAAE,CAAC,CAAC;gBAC3E,OAAO;YACT,CAAC;YAED,GAAG,CAAC,UAAU,GAAG,EAAE,MAAM,EAAE,CAAC;YAC5B,IAAI,EAAE,CAAC;QACT,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;gBACnB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB;aACxE,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { TenantManager } from "../tenant/TenantManager.js";
|
|
2
|
+
import type { TenantRecord } from "../tenant/types.js";
|
|
3
|
+
import type { ChallengeRecord, OAuthAccessTokenPayload, PendingAuthorizationRequest } from "./types.js";
|
|
4
|
+
export interface OAuthServiceOptions {
|
|
5
|
+
publicOrigin: string;
|
|
6
|
+
jwtSecret: string;
|
|
7
|
+
dataDir: string;
|
|
8
|
+
authChallengeTtlSeconds?: number;
|
|
9
|
+
oauthAuthCodeTtlSeconds?: number;
|
|
10
|
+
oauthAccessTokenTtlSeconds?: number;
|
|
11
|
+
oauthRefreshTokenTtlSeconds?: number;
|
|
12
|
+
clientMetadataTimeoutMs?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class OAuthService {
|
|
15
|
+
readonly publicOrigin: string;
|
|
16
|
+
readonly resourceUri: string;
|
|
17
|
+
readonly authCodeCookieName = "mcp_oauth_request";
|
|
18
|
+
private readonly jwtSecret;
|
|
19
|
+
private readonly dataDir;
|
|
20
|
+
private readonly authChallengeTtlSeconds;
|
|
21
|
+
private readonly oauthAuthCodeTtlSeconds;
|
|
22
|
+
private readonly oauthAccessTokenTtlSeconds;
|
|
23
|
+
private readonly oauthRefreshTokenTtlSeconds;
|
|
24
|
+
private readonly clientMetadataTimeoutMs;
|
|
25
|
+
private readonly pendingAuthorizations;
|
|
26
|
+
private readonly challenges;
|
|
27
|
+
private readonly authorizationCodes;
|
|
28
|
+
constructor(options: OAuthServiceOptions);
|
|
29
|
+
getAuthorizationServerMetadata(): {
|
|
30
|
+
issuer: string;
|
|
31
|
+
authorization_endpoint: string;
|
|
32
|
+
token_endpoint: string;
|
|
33
|
+
response_types_supported: string[];
|
|
34
|
+
grant_types_supported: string[];
|
|
35
|
+
code_challenge_methods_supported: string[];
|
|
36
|
+
token_endpoint_auth_methods_supported: string[];
|
|
37
|
+
};
|
|
38
|
+
getProtectedResourceMetadata(): {
|
|
39
|
+
resource: string;
|
|
40
|
+
authorization_servers: string[];
|
|
41
|
+
bearer_methods_supported: string[];
|
|
42
|
+
};
|
|
43
|
+
createPendingAuthorization(params: {
|
|
44
|
+
responseType?: string;
|
|
45
|
+
clientId?: string;
|
|
46
|
+
redirectUri?: string;
|
|
47
|
+
state?: string;
|
|
48
|
+
scope?: string;
|
|
49
|
+
resource?: string;
|
|
50
|
+
codeChallenge?: string;
|
|
51
|
+
codeChallengeMethod?: string;
|
|
52
|
+
now?: number;
|
|
53
|
+
}): Promise<PendingAuthorizationRequest>;
|
|
54
|
+
getPendingAuthorization(authRequestId: string): PendingAuthorizationRequest;
|
|
55
|
+
createWalletChallenge(authRequestId: string, tenant: TenantRecord, now?: number): ChallengeRecord;
|
|
56
|
+
verifyWalletChallenge(params: {
|
|
57
|
+
authRequestId: string;
|
|
58
|
+
tenantManager: TenantManager;
|
|
59
|
+
walletAddress: string;
|
|
60
|
+
challenge: string;
|
|
61
|
+
signature: string;
|
|
62
|
+
now?: number;
|
|
63
|
+
}): Promise<{
|
|
64
|
+
redirectTo: string;
|
|
65
|
+
tenant: TenantRecord;
|
|
66
|
+
}>;
|
|
67
|
+
createWalletAndAuthorize(params: {
|
|
68
|
+
authRequestId: string;
|
|
69
|
+
tenantManager: TenantManager;
|
|
70
|
+
now?: number;
|
|
71
|
+
}): Promise<{
|
|
72
|
+
redirectTo: string;
|
|
73
|
+
tenant: TenantRecord;
|
|
74
|
+
wallet: {
|
|
75
|
+
tenantId: string;
|
|
76
|
+
walletAddress: string;
|
|
77
|
+
walletAddressHex: string;
|
|
78
|
+
privateKey: string;
|
|
79
|
+
};
|
|
80
|
+
}>;
|
|
81
|
+
exchangeToken(body: Record<string, unknown>, tenantManager: TenantManager): Promise<{
|
|
82
|
+
access_token: string;
|
|
83
|
+
refresh_token?: string;
|
|
84
|
+
token_type: "Bearer";
|
|
85
|
+
expires_in: number;
|
|
86
|
+
scope: string;
|
|
87
|
+
}>;
|
|
88
|
+
verifyAccessToken(token: string): OAuthAccessTokenPayload;
|
|
89
|
+
private exchangeAuthorizationCode;
|
|
90
|
+
private exchangeRefreshToken;
|
|
91
|
+
private issueAuthorizationCode;
|
|
92
|
+
private issueAccessToken;
|
|
93
|
+
private issueRefreshToken;
|
|
94
|
+
private loadRefreshTokenRecord;
|
|
95
|
+
private writeRefreshTokenRecord;
|
|
96
|
+
private getRefreshTokenDir;
|
|
97
|
+
private getRefreshTokenPath;
|
|
98
|
+
private requireChallenge;
|
|
99
|
+
private validateClientMetadata;
|
|
100
|
+
}
|