sorokeep 1.0.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/CONTRIBUTING.md +296 -0
- package/LICENSE +21 -0
- package/README.md +677 -0
- package/dist/alerts/alerts.d.ts +21 -0
- package/dist/alerts/alerts.d.ts.map +1 -0
- package/dist/alerts/alerts.js +18 -0
- package/dist/alerts/alerts.js.map +1 -0
- package/dist/alerts/discord.d.ts +3 -0
- package/dist/alerts/discord.d.ts.map +1 -0
- package/dist/alerts/discord.js +199 -0
- package/dist/alerts/discord.js.map +1 -0
- package/dist/alerts/dispatcher.d.ts +13 -0
- package/dist/alerts/dispatcher.d.ts.map +1 -0
- package/dist/alerts/dispatcher.js +91 -0
- package/dist/alerts/dispatcher.js.map +1 -0
- package/dist/alerts/keys.d.ts +24 -0
- package/dist/alerts/keys.d.ts.map +1 -0
- package/dist/alerts/keys.js +44 -0
- package/dist/alerts/keys.js.map +1 -0
- package/dist/alerts/pagerduty.d.ts +8 -0
- package/dist/alerts/pagerduty.d.ts.map +1 -0
- package/dist/alerts/pagerduty.js +164 -0
- package/dist/alerts/pagerduty.js.map +1 -0
- package/dist/alerts/resource.d.ts +23 -0
- package/dist/alerts/resource.d.ts.map +1 -0
- package/dist/alerts/resource.js +167 -0
- package/dist/alerts/resource.js.map +1 -0
- package/dist/alerts/slack.d.ts +7 -0
- package/dist/alerts/slack.d.ts.map +1 -0
- package/dist/alerts/slack.js +184 -0
- package/dist/alerts/slack.js.map +1 -0
- package/dist/alerts/telegram.d.ts +9 -0
- package/dist/alerts/telegram.d.ts.map +1 -0
- package/dist/alerts/telegram.js +133 -0
- package/dist/alerts/telegram.js.map +1 -0
- package/dist/alerts/templates.d.ts +109 -0
- package/dist/alerts/templates.d.ts.map +1 -0
- package/dist/alerts/templates.js +139 -0
- package/dist/alerts/templates.js.map +1 -0
- package/dist/alerts/types.d.ts +113 -0
- package/dist/alerts/types.d.ts.map +1 -0
- package/dist/alerts/types.js +87 -0
- package/dist/alerts/types.js.map +1 -0
- package/dist/alerts/webhook.d.ts +13 -0
- package/dist/alerts/webhook.d.ts.map +1 -0
- package/dist/alerts/webhook.js +56 -0
- package/dist/alerts/webhook.js.map +1 -0
- package/dist/cli/schemaFormatter.d.ts +11 -0
- package/dist/cli/schemaFormatter.d.ts.map +1 -0
- package/dist/cli/schemaFormatter.js +74 -0
- package/dist/cli/schemaFormatter.js.map +1 -0
- package/dist/commands/alerts.d.ts +3 -0
- package/dist/commands/alerts.d.ts.map +1 -0
- package/dist/commands/alerts.js +256 -0
- package/dist/commands/alerts.js.map +1 -0
- package/dist/commands/budget.d.ts +3 -0
- package/dist/commands/budget.d.ts.map +1 -0
- package/dist/commands/budget.js +47 -0
- package/dist/commands/budget.js.map +1 -0
- package/dist/commands/channels.d.ts +3 -0
- package/dist/commands/channels.d.ts.map +1 -0
- package/dist/commands/channels.js +84 -0
- package/dist/commands/channels.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +58 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/completion.d.ts +3 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +36 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/costs.d.ts +15 -0
- package/dist/commands/costs.d.ts.map +1 -0
- package/dist/commands/costs.js +280 -0
- package/dist/commands/costs.js.map +1 -0
- package/dist/commands/daemon.d.ts +3 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +93 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/db.d.ts +3 -0
- package/dist/commands/db.d.ts.map +1 -0
- package/dist/commands/db.js +140 -0
- package/dist/commands/db.js.map +1 -0
- package/dist/commands/guard.d.ts +3 -0
- package/dist/commands/guard.d.ts.map +1 -0
- package/dist/commands/guard.js +181 -0
- package/dist/commands/guard.js.map +1 -0
- package/dist/commands/history.d.ts +3 -0
- package/dist/commands/history.d.ts.map +1 -0
- package/dist/commands/history.js +57 -0
- package/dist/commands/history.js.map +1 -0
- package/dist/commands/inspect.d.ts +3 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +82 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/mcp.d.ts +3 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +20 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/pause.d.ts +3 -0
- package/dist/commands/pause.d.ts.map +1 -0
- package/dist/commands/pause.js +32 -0
- package/dist/commands/pause.js.map +1 -0
- package/dist/commands/resources.d.ts +3 -0
- package/dist/commands/resources.d.ts.map +1 -0
- package/dist/commands/resources.js +95 -0
- package/dist/commands/resources.js.map +1 -0
- package/dist/commands/restore.d.ts +3 -0
- package/dist/commands/restore.d.ts.map +1 -0
- package/dist/commands/restore.js +92 -0
- package/dist/commands/restore.js.map +1 -0
- package/dist/commands/resume.d.ts +3 -0
- package/dist/commands/resume.d.ts.map +1 -0
- package/dist/commands/resume.js +31 -0
- package/dist/commands/resume.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +63 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +163 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/core/aws_secrets.d.ts +13 -0
- package/dist/core/aws_secrets.d.ts.map +1 -0
- package/dist/core/aws_secrets.js +34 -0
- package/dist/core/aws_secrets.js.map +1 -0
- package/dist/core/budget.d.ts +10 -0
- package/dist/core/budget.d.ts.map +1 -0
- package/dist/core/budget.js +31 -0
- package/dist/core/budget.js.map +1 -0
- package/dist/core/channels.d.ts +67 -0
- package/dist/core/channels.d.ts.map +1 -0
- package/dist/core/channels.js +136 -0
- package/dist/core/channels.js.map +1 -0
- package/dist/core/check.d.ts +25 -0
- package/dist/core/check.d.ts.map +1 -0
- package/dist/core/check.js +85 -0
- package/dist/core/check.js.map +1 -0
- package/dist/core/completion.d.ts +9 -0
- package/dist/core/completion.d.ts.map +1 -0
- package/dist/core/completion.js +68 -0
- package/dist/core/completion.js.map +1 -0
- package/dist/core/costs.d.ts +90 -0
- package/dist/core/costs.d.ts.map +1 -0
- package/dist/core/costs.js +147 -0
- package/dist/core/costs.js.map +1 -0
- package/dist/core/decoder.d.ts +7 -0
- package/dist/core/decoder.d.ts.map +1 -0
- package/dist/core/decoder.js +38 -0
- package/dist/core/decoder.js.map +1 -0
- package/dist/core/discovery.d.ts +38 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +208 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/extension.d.ts +83 -0
- package/dist/core/extension.d.ts.map +1 -0
- package/dist/core/extension.js +429 -0
- package/dist/core/extension.js.map +1 -0
- package/dist/core/inspect.d.ts +62 -0
- package/dist/core/inspect.d.ts.map +1 -0
- package/dist/core/inspect.js +303 -0
- package/dist/core/inspect.js.map +1 -0
- package/dist/core/introspection.d.ts +8 -0
- package/dist/core/introspection.d.ts.map +1 -0
- package/dist/core/introspection.js +8 -0
- package/dist/core/introspection.js.map +1 -0
- package/dist/core/monitor.d.ts +42 -0
- package/dist/core/monitor.d.ts.map +1 -0
- package/dist/core/monitor.js +188 -0
- package/dist/core/monitor.js.map +1 -0
- package/dist/core/rent_projection.d.ts +153 -0
- package/dist/core/rent_projection.d.ts.map +1 -0
- package/dist/core/rent_projection.js +146 -0
- package/dist/core/rent_projection.js.map +1 -0
- package/dist/core/scvalTranslator.d.ts +11 -0
- package/dist/core/scvalTranslator.d.ts.map +1 -0
- package/dist/core/scvalTranslator.js +36 -0
- package/dist/core/scvalTranslator.js.map +1 -0
- package/dist/core/state_diff.d.ts +45 -0
- package/dist/core/state_diff.d.ts.map +1 -0
- package/dist/core/state_diff.js +112 -0
- package/dist/core/state_diff.js.map +1 -0
- package/dist/core/status.d.ts +24 -0
- package/dist/core/status.d.ts.map +1 -0
- package/dist/core/status.js +57 -0
- package/dist/core/status.js.map +1 -0
- package/dist/core/vault.d.ts +37 -0
- package/dist/core/vault.d.ts.map +1 -0
- package/dist/core/vault.js +179 -0
- package/dist/core/vault.js.map +1 -0
- package/dist/core/watch.d.ts +36 -0
- package/dist/core/watch.d.ts.map +1 -0
- package/dist/core/watch.js +176 -0
- package/dist/core/watch.js.map +1 -0
- package/dist/daemon/loop.d.ts +38 -0
- package/dist/daemon/loop.d.ts.map +1 -0
- package/dist/daemon/loop.js +169 -0
- package/dist/daemon/loop.js.map +1 -0
- package/dist/db/backup.d.ts +12 -0
- package/dist/db/backup.d.ts.map +1 -0
- package/dist/db/backup.js +132 -0
- package/dist/db/backup.js.map +1 -0
- package/dist/db/budget.d.ts +17 -0
- package/dist/db/budget.d.ts.map +1 -0
- package/dist/db/budget.js +31 -0
- package/dist/db/budget.js.map +1 -0
- package/dist/db/database.d.ts +6 -0
- package/dist/db/database.d.ts.map +1 -0
- package/dist/db/database.js +134 -0
- package/dist/db/database.js.map +1 -0
- package/dist/db/migrations/.gitkeep +1 -0
- package/dist/db/migrations/001_resource_usage_logs.sql +28 -0
- package/dist/db/migrator.d.ts +28 -0
- package/dist/db/migrator.d.ts.map +1 -0
- package/dist/db/migrator.js +75 -0
- package/dist/db/migrator.js.map +1 -0
- package/dist/db/repositories.d.ts +474 -0
- package/dist/db/repositories.d.ts.map +1 -0
- package/dist/db/repositories.js +809 -0
- package/dist/db/repositories.js.map +1 -0
- package/dist/db/schema.sql +207 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +47 -0
- package/dist/index.js.map +1 -0
- package/dist/lib.d.ts +20 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +16 -0
- package/dist/lib.js.map +1 -0
- package/dist/logging/index.d.ts +22 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +34 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.d.ts +14 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +135 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/logging/types.d.ts +10 -0
- package/dist/logging/types.d.ts.map +1 -0
- package/dist/logging/types.js +2 -0
- package/dist/logging/types.js.map +1 -0
- package/dist/mcp/index.d.ts +3 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +14 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +10 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +51 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/get-extension-costs.d.ts +4 -0
- package/dist/mcp/tools/get-extension-costs.d.ts.map +1 -0
- package/dist/mcp/tools/get-extension-costs.js +33 -0
- package/dist/mcp/tools/get-extension-costs.js.map +1 -0
- package/dist/mcp/tools/get_contract_status.d.ts +8 -0
- package/dist/mcp/tools/get_contract_status.d.ts.map +1 -0
- package/dist/mcp/tools/get_contract_status.js +33 -0
- package/dist/mcp/tools/get_contract_status.js.map +1 -0
- package/dist/rpc/client.d.ts +154 -0
- package/dist/rpc/client.d.ts.map +1 -0
- package/dist/rpc/client.js +766 -0
- package/dist/rpc/client.js.map +1 -0
- package/dist/utils/config.d.ts +51 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +86 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/formatting.d.ts +10 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +66 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/watch-config.d.ts +13 -0
- package/dist/utils/watch-config.d.ts.map +1 -0
- package/dist/utils/watch-config.js +32 -0
- package/dist/utils/watch-config.js.map +1 -0
- package/package.json +73 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE,wBAAsB,0BAA0B,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ;;;;;GA8BrE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAyBzE"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import { registerGetContractStatusTool } from "./tools/get_contract_status.js";
|
|
3
|
+
import { registerGetExtensionCostsTool } from "./tools/get-extension-costs.js";
|
|
4
|
+
import { getAllContracts, getEntriesForContract } from "../db/repositories.js";
|
|
5
|
+
import { classifyTTL } from "../utils/formatting.js";
|
|
6
|
+
export async function invokeListWatchedContracts(db) {
|
|
7
|
+
const contracts = getAllContracts(db);
|
|
8
|
+
const result = contracts.map((contract) => {
|
|
9
|
+
const entries = getEntriesForContract(db, contract.id);
|
|
10
|
+
const lastLedger = contract.last_checked_ledger ?? null;
|
|
11
|
+
let health = "unknown";
|
|
12
|
+
if (entries.length > 0 && lastLedger != null) {
|
|
13
|
+
const statuses = entries
|
|
14
|
+
.filter((e) => e.live_until_ledger != null)
|
|
15
|
+
.map((e) => classifyTTL(e.live_until_ledger - lastLedger));
|
|
16
|
+
if (statuses.includes("expired"))
|
|
17
|
+
health = "expired";
|
|
18
|
+
else if (statuses.includes("critical"))
|
|
19
|
+
health = "critical";
|
|
20
|
+
else if (statuses.includes("warning"))
|
|
21
|
+
health = "warning";
|
|
22
|
+
else if (statuses.includes("ok"))
|
|
23
|
+
health = "ok";
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
id: contract.id,
|
|
27
|
+
name: contract.name ?? null,
|
|
28
|
+
network: contract.network,
|
|
29
|
+
health,
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function createMcpServer(getDb) {
|
|
37
|
+
const server = new McpServer({
|
|
38
|
+
name: "sorokeep",
|
|
39
|
+
version: "0.1.2",
|
|
40
|
+
}, {
|
|
41
|
+
capabilities: {
|
|
42
|
+
tools: {},
|
|
43
|
+
},
|
|
44
|
+
instructions: "Sorokeep MCP server exposes Soroban contract operations data for AI-assisted development.",
|
|
45
|
+
});
|
|
46
|
+
registerGetContractStatusTool(server, getDb);
|
|
47
|
+
registerGetExtensionCostsTool(server);
|
|
48
|
+
server.tool("list_watched_contracts", "List all contracts registered for TTL monitoring with their current health status", async () => invokeListWatchedContracts(getDb()));
|
|
49
|
+
return server;
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGrD,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,EAAqB;IAClE,MAAM,SAAS,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IAEtC,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,QAAQ,CAAC,mBAAmB,IAAI,IAAI,CAAC;QAExD,IAAI,MAAM,GAA0B,SAAS,CAAC;QAC9C,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,IAAI,IAAI,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,OAAO;iBACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,iBAAiB,IAAI,IAAI,CAAC;iBAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,GAAG,UAAU,CAAC,CAAC,CAAC;YAE/D,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,MAAM,GAAG,SAAS,CAAC;iBAChD,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,MAAM,GAAG,UAAU,CAAC;iBACvD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAAE,MAAM,GAAG,SAAS,CAAC;iBACrD,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,MAAM,GAAG,IAAI,CAAC;QACpD,CAAC;QAED,OAAO;YACH,EAAE,EAAE,QAAQ,CAAC,EAAE;YACf,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI,IAAI;YAC3B,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,MAAM;SACT,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,OAAO;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;KACrE,CAAC;AACN,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAA8B;IAC1D,MAAM,MAAM,GAAG,IAAI,SAAS,CACxB;QACI,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,OAAO;KACnB,EACD;QACI,YAAY,EAAE;YACV,KAAK,EAAE,EAAE;SACZ;QACD,YAAY,EACR,2FAA2F;KAClG,CACJ,CAAC;IAEF,6BAA6B,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7C,6BAA6B,CAAC,MAAM,CAAC,CAAC;IAEtC,MAAM,CAAC,IAAI,CACP,wBAAwB,EACxB,mFAAmF,EACnF,KAAK,IAAI,EAAE,CAAC,0BAA0B,CAAC,KAAK,EAAE,CAAC,CAClD,CAAC;IAEF,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
export declare const GET_EXTENSION_COSTS_TOOL_NAME = "get_extension_costs";
|
|
3
|
+
export declare function registerGetExtensionCostsTool(server: McpServer): void;
|
|
4
|
+
//# sourceMappingURL=get-extension-costs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-extension-costs.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-extension-costs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIzE,eAAO,MAAM,6BAA6B,wBAAwB,CAAC;AAEnE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkCrE"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import { getDatabase } from "../../db/database.js";
|
|
3
|
+
import { getExtensionCosts } from "../../core/costs.js";
|
|
4
|
+
export const GET_EXTENSION_COSTS_TOOL_NAME = "get_extension_costs";
|
|
5
|
+
export function registerGetExtensionCostsTool(server) {
|
|
6
|
+
server.registerTool(GET_EXTENSION_COSTS_TOOL_NAME, {
|
|
7
|
+
description: "Fetch rent cost history summaries and future cost projections for a watched Soroban contract",
|
|
8
|
+
inputSchema: {
|
|
9
|
+
contractId: z
|
|
10
|
+
.string()
|
|
11
|
+
.describe("The Soroban contract ID (56-character string starting with C)"),
|
|
12
|
+
period: z
|
|
13
|
+
.number()
|
|
14
|
+
.int()
|
|
15
|
+
.positive()
|
|
16
|
+
.optional()
|
|
17
|
+
.describe("Number of days of extension history to include (default: 30)"),
|
|
18
|
+
},
|
|
19
|
+
}, async ({ contractId, period }) => {
|
|
20
|
+
const db = getDatabase();
|
|
21
|
+
const result = getExtensionCosts(db, contractId, { period });
|
|
22
|
+
if (!result.success) {
|
|
23
|
+
return {
|
|
24
|
+
content: [{ type: "text", text: JSON.stringify(result) }],
|
|
25
|
+
isError: true,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: "text", text: JSON.stringify(result.data, null, 2) }],
|
|
30
|
+
};
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=get-extension-costs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-extension-costs.js","sourceRoot":"","sources":["../../../src/mcp/tools/get-extension-costs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,MAAM,6BAA6B,GAAG,qBAAqB,CAAC;AAEnE,MAAM,UAAU,6BAA6B,CAAC,MAAiB;IAC3D,MAAM,CAAC,YAAY,CACf,6BAA6B,EAC7B;QACI,WAAW,EACP,8FAA8F;QAClG,WAAW,EAAE;YACT,UAAU,EAAE,CAAC;iBACR,MAAM,EAAE;iBACR,QAAQ,CAAC,+DAA+D,CAAC;YAC9E,MAAM,EAAE,CAAC;iBACJ,MAAM,EAAE;iBACR,GAAG,EAAE;iBACL,QAAQ,EAAE;iBACV,QAAQ,EAAE;iBACV,QAAQ,CAAC,8DAA8D,CAAC;SAChF;KACJ,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,WAAW,EAAE,CAAC;QACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;QAE7D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;gBACzD,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;QAED,OAAO;YACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;SAC1E,CAAC;IACN,CAAC,CACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type Database from "better-sqlite3";
|
|
2
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
3
|
+
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
4
|
+
import { type ContractStatus } from "../../core/status.js";
|
|
5
|
+
export declare function invokeGetContractStatus(db: Database.Database, contractId: string): Promise<CallToolResult>;
|
|
6
|
+
export declare function formatContractStatusResult(status: ContractStatus): CallToolResult;
|
|
7
|
+
export declare function registerGetContractStatusTool(server: McpServer, getDb: () => Database.Database): void;
|
|
8
|
+
//# sourceMappingURL=get_contract_status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_contract_status.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get_contract_status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAEzE,OAAO,EAGH,KAAK,cAAc,EACtB,MAAM,sBAAsB,CAAC;AAE9B,wBAAsB,uBAAuB,CACzC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,UAAU,EAAE,MAAM,GACnB,OAAO,CAAC,cAAc,CAAC,CAazB;AAED,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAKjF;AAED,wBAAgB,6BAA6B,CACzC,MAAM,EAAE,SAAS,EACjB,KAAK,EAAE,MAAM,QAAQ,CAAC,QAAQ,GAC/B,IAAI,CAaN"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import { ContractNotFoundError, getContractStatus, } from "../../core/status.js";
|
|
3
|
+
export async function invokeGetContractStatus(db, contractId) {
|
|
4
|
+
try {
|
|
5
|
+
const status = getContractStatus(db, contractId);
|
|
6
|
+
return formatContractStatusResult(status);
|
|
7
|
+
}
|
|
8
|
+
catch (error) {
|
|
9
|
+
if (error instanceof ContractNotFoundError) {
|
|
10
|
+
return {
|
|
11
|
+
content: [{ type: "text", text: error.message }],
|
|
12
|
+
isError: true,
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
throw error;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function formatContractStatusResult(status) {
|
|
19
|
+
return {
|
|
20
|
+
content: [{ type: "text", text: JSON.stringify(status, null, 2) }],
|
|
21
|
+
structuredContent: { ...status },
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export function registerGetContractStatusTool(server, getDb) {
|
|
25
|
+
server.registerTool("get_contract_status", {
|
|
26
|
+
title: "Get Contract Status",
|
|
27
|
+
description: "Query TTL health metrics for a watched Soroban contract, including per-entry remaining lifespans.",
|
|
28
|
+
inputSchema: {
|
|
29
|
+
contractId: z.string().describe("Stellar contract address (C... format)"),
|
|
30
|
+
},
|
|
31
|
+
}, async ({ contractId }) => invokeGetContractStatus(getDb(), contractId));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=get_contract_status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get_contract_status.js","sourceRoot":"","sources":["../../../src/mcp/tools/get_contract_status.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAC5B,OAAO,EACH,qBAAqB,EACrB,iBAAiB,GAEpB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,CAAC,KAAK,UAAU,uBAAuB,CACzC,EAAqB,EACrB,UAAkB;IAElB,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,iBAAiB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QACjD,OAAO,0BAA0B,CAAC,MAAM,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;YACzC,OAAO;gBACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;gBAChD,OAAO,EAAE,IAAI;aAChB,CAAC;QACN,CAAC;QACD,MAAM,KAAK,CAAC;IAChB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,MAAsB;IAC7D,OAAO;QACH,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;QAClE,iBAAiB,EAAE,EAAE,GAAG,MAAM,EAAE;KACnC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,6BAA6B,CACzC,MAAiB,EACjB,KAA8B;IAE9B,MAAM,CAAC,YAAY,CACf,qBAAqB,EACrB;QACI,KAAK,EAAE,qBAAqB;QAC5B,WAAW,EACP,mGAAmG;QACvG,WAAW,EAAE;YACT,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SAC5E;KACJ,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,uBAAuB,CAAC,KAAK,EAAE,EAAE,UAAU,CAAC,CACzE,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { rpc } from "@stellar/stellar-sdk";
|
|
2
|
+
export declare function assertSimulationSuccess(sim: rpc.Api.SimulateTransactionResponse): asserts sim is rpc.Api.SimulateTransactionSuccessResponse;
|
|
3
|
+
/**
|
|
4
|
+
* Executes an RPC action with exponential backoff on network timeouts or 429/5xx errors.
|
|
5
|
+
* Starts at 1 second, doubling up to 3 retries (max 4 attempts).
|
|
6
|
+
*/
|
|
7
|
+
export declare function executeWithRetry<T>(action: () => Promise<T>): Promise<T>;
|
|
8
|
+
export interface SorokeepLedgerEntryResult {
|
|
9
|
+
entryKeyXdr: string;
|
|
10
|
+
latestLedger: number;
|
|
11
|
+
liveUntilLedgerSeq: number;
|
|
12
|
+
lastModifiedLedgerSeq: number;
|
|
13
|
+
remainingTTL: number;
|
|
14
|
+
}
|
|
15
|
+
export interface ContractInstanceResult extends SorokeepLedgerEntryResult {
|
|
16
|
+
executableType: string;
|
|
17
|
+
wasmHash: string | null;
|
|
18
|
+
}
|
|
19
|
+
export interface EntryTTLsResult {
|
|
20
|
+
latestLedger: number;
|
|
21
|
+
entries: SorokeepLedgerEntryResult[];
|
|
22
|
+
}
|
|
23
|
+
export interface ContractStorageEntryResult extends SorokeepLedgerEntryResult {
|
|
24
|
+
valXdr?: string;
|
|
25
|
+
}
|
|
26
|
+
export interface SimulateExtensionResult {
|
|
27
|
+
minResourceFee: number;
|
|
28
|
+
success: boolean;
|
|
29
|
+
error?: string;
|
|
30
|
+
/** CPU instructions consumed by the transaction. */
|
|
31
|
+
cpuInstructions?: number;
|
|
32
|
+
/** Memory bytes consumed by the transaction. */
|
|
33
|
+
memoryBytes?: number;
|
|
34
|
+
/** Read footprint size in bytes. */
|
|
35
|
+
readBytes?: number;
|
|
36
|
+
/** Write footprint size in bytes. */
|
|
37
|
+
writeBytes?: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Structured resource usage estimate extracted from a simulateTransaction response.
|
|
41
|
+
* Used for budget safety checks before executing auto-extensions (issue #133).
|
|
42
|
+
*/
|
|
43
|
+
export interface ResourceEstimate {
|
|
44
|
+
/** CPU instructions estimated for the transaction. */
|
|
45
|
+
cpuInstructions: number;
|
|
46
|
+
/** Memory bytes estimated for the transaction. */
|
|
47
|
+
memoryBytes: number;
|
|
48
|
+
/** Minimum resource fee in stroops estimated by the RPC node. */
|
|
49
|
+
minResourceFee: number;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Parse a simulateTransaction RPC response into a structured ResourceEstimate.
|
|
53
|
+
*
|
|
54
|
+
* Extracts `cpuInstructions` from `response.cost.cpuInsns`,
|
|
55
|
+
* `memoryBytes` from `response.cost.memBytes`, and
|
|
56
|
+
* `minResourceFee` from `response.minResourceFee`.
|
|
57
|
+
*
|
|
58
|
+
* Returns `null` when:
|
|
59
|
+
* - The input is null, undefined, or not a plain object.
|
|
60
|
+
* - The response contains an `error` field (simulation failed).
|
|
61
|
+
* - Neither `cost` nor `minResourceFee` fields are present.
|
|
62
|
+
*
|
|
63
|
+
* Missing numeric fields default to `0` rather than `NaN`.
|
|
64
|
+
*
|
|
65
|
+
* @param response - The raw simulation response object (or null/undefined).
|
|
66
|
+
* @returns A ResourceEstimate on success, or null on failure.
|
|
67
|
+
*/
|
|
68
|
+
export declare function parseResourceEstimate(response: unknown): ResourceEstimate | null;
|
|
69
|
+
export interface FeeStatsResult {
|
|
70
|
+
latestLedger?: number;
|
|
71
|
+
baseFeeStroops: number;
|
|
72
|
+
surgeFeeStroops: number;
|
|
73
|
+
surgePricingMultiplier: number;
|
|
74
|
+
}
|
|
75
|
+
export interface SubmitTransactionResult {
|
|
76
|
+
success: boolean;
|
|
77
|
+
txHash: string;
|
|
78
|
+
ledger: number;
|
|
79
|
+
cpuInsns?: number;
|
|
80
|
+
memBytes?: number;
|
|
81
|
+
error?: string;
|
|
82
|
+
cpuInstructions?: number;
|
|
83
|
+
memoryBytes?: number;
|
|
84
|
+
minResourceFee?: number;
|
|
85
|
+
/** Actual fee charged in stroops, parsed from the transaction result. */
|
|
86
|
+
feeCharged?: number;
|
|
87
|
+
}
|
|
88
|
+
export declare function extractResourceCosts(resultMetaXdrBase64: string): {
|
|
89
|
+
cpuInstructions: number;
|
|
90
|
+
memoryBytes: number;
|
|
91
|
+
} | null;
|
|
92
|
+
export interface StellarRpcClientOptions {
|
|
93
|
+
maxRequestsPerSecond?: number;
|
|
94
|
+
}
|
|
95
|
+
export declare class StellarRpcClient {
|
|
96
|
+
private readonly network;
|
|
97
|
+
private readonly server;
|
|
98
|
+
private readonly maxRequestsPerSecond;
|
|
99
|
+
private readonly requestIntervalMs;
|
|
100
|
+
private recentRequestTimes;
|
|
101
|
+
constructor(network: string, customUrl?: string, options?: StellarRpcClientOptions);
|
|
102
|
+
getNetwork(): string;
|
|
103
|
+
checkHealth(): Promise<rpc.Api.GetHealthResponse>;
|
|
104
|
+
getCurrentLedger(): Promise<number>;
|
|
105
|
+
getFeeStats(): Promise<FeeStatsResult>;
|
|
106
|
+
getContractInstanceEntry(contractId: string): Promise<ContractInstanceResult | null>;
|
|
107
|
+
getWasmCodeEntry(wasmHashHex: string): Promise<SorokeepLedgerEntryResult | null>;
|
|
108
|
+
getEntryTTLs(entryKeyXdrs: string[]): Promise<EntryTTLsResult>;
|
|
109
|
+
getContractStorageEntries(entryKeyXdrs: string[]): Promise<ContractStorageEntryResult[]>;
|
|
110
|
+
getSacDecimals(contractId: string): Promise<number>;
|
|
111
|
+
/**
|
|
112
|
+
* Call the 'get_monitored_keys' view method on a contract.
|
|
113
|
+
* Returns an array of XDR strings for the keys.
|
|
114
|
+
*/
|
|
115
|
+
getMonitoredKeys(contractId: string): Promise<string[]>;
|
|
116
|
+
simulateExtension(entryKeyXdrs: string[], extendToLedgers: number, sourcePublicKey: string): Promise<SimulateExtensionResult>;
|
|
117
|
+
simulateRestore(entryKeyXdrs: string[], sourcePublicKey: string): Promise<SimulateExtensionResult>;
|
|
118
|
+
/**
|
|
119
|
+
* Build, sign, and submit an ExtendFootprintTTLOp transaction.
|
|
120
|
+
* Uses simulation to prepare the transaction with correct resource parameters.
|
|
121
|
+
* Recovers once from txBadSeq errors by refreshing the account sequence.
|
|
122
|
+
*/
|
|
123
|
+
submitExtension(entryKeyXdrs: string[], extendToLedgers: number, secretKey: string): Promise<SubmitTransactionResult>;
|
|
124
|
+
private addResourcesToSuccess;
|
|
125
|
+
/**
|
|
126
|
+
* Build an ExtendFootprintTTLOp transaction, wrap it in a FeeBumpTransaction
|
|
127
|
+
* signed by the sponsor keypair, and submit. The sponsor account pays all fees
|
|
128
|
+
* while the inner transaction's source account provides the sequence number.
|
|
129
|
+
*/
|
|
130
|
+
submitExtensionWithFeeBump(entryKeyXdrs: string[], extendToLedgers: number, secretKey: string, sponsorSecretKey: string): Promise<SubmitTransactionResult>;
|
|
131
|
+
/**
|
|
132
|
+
* Build, sign, and submit a RestoreFootprintOp transaction to restore archived entries.
|
|
133
|
+
* Recovers once from txBadSeq errors by refreshing the account sequence.
|
|
134
|
+
*/
|
|
135
|
+
submitRestore(entryKeyXdrs: string[], secretKey: string): Promise<SubmitTransactionResult>;
|
|
136
|
+
sendPayments(destinations: {
|
|
137
|
+
publicKey: string;
|
|
138
|
+
amountXlm: string;
|
|
139
|
+
}[], secretKey: string): Promise<SubmitTransactionResult>;
|
|
140
|
+
/**
|
|
141
|
+
* Returns true if the sendTransaction ERROR response indicates a txBadSeq result code.
|
|
142
|
+
* The SDK parses errorResultXdr into `errorResult` as an xdr.TransactionResult.
|
|
143
|
+
*/
|
|
144
|
+
private isBadSeqError;
|
|
145
|
+
private _cachedPassphrase;
|
|
146
|
+
private getNetworkPassphrase;
|
|
147
|
+
private pollTransaction;
|
|
148
|
+
private withRateLimit;
|
|
149
|
+
private acquireSlot;
|
|
150
|
+
/** @deprecated Use acquireSlot-based withRateLimit instead. Kept for compatibility. */
|
|
151
|
+
private calculateWaitMs;
|
|
152
|
+
private sleep;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/rpc/client.ts"],"names":[],"mappings":"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"}
|