opentool 0.8.3 → 0.8.5

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.
@@ -47,6 +47,36 @@ type StoreRetrieveResult = {
47
47
  }>;
48
48
  cursor?: string | null;
49
49
  };
50
+ type MyToolsResponse = {
51
+ tools: Array<{
52
+ id: string;
53
+ name: string;
54
+ displayName: string;
55
+ description?: string;
56
+ serverUrl: string;
57
+ source: "internal" | "public";
58
+ appId?: string;
59
+ deploymentId?: string;
60
+ metadata?: unknown;
61
+ }>;
62
+ };
63
+ type ToolExecuteRequest = {
64
+ appId: string;
65
+ deploymentId: string;
66
+ toolName: string;
67
+ method?: "GET" | "POST" | "PUT" | "DELETE";
68
+ body?: unknown;
69
+ };
70
+ type ToolExecuteResponse = {
71
+ ok: boolean;
72
+ status: number;
73
+ data: unknown;
74
+ };
75
+ type AgentDigestRequest = {
76
+ content: string;
77
+ runAt?: string;
78
+ metadata?: Record<string, unknown>;
79
+ };
50
80
  declare class StoreError extends Error {
51
81
  readonly status?: number | undefined;
52
82
  readonly causeData?: unknown | undefined;
@@ -60,5 +90,9 @@ declare function store(input: StoreEventInput, options?: StoreOptions): Promise<
60
90
  * Retrieve stored activity events for an app.
61
91
  */
62
92
  declare function retrieve(params?: StoreRetrieveParams, options?: StoreOptions): Promise<StoreRetrieveResult>;
93
+ declare function getMyTools(options?: StoreOptions): Promise<MyToolsResponse>;
94
+ declare function getMyPerformance(options?: StoreOptions): Promise<unknown>;
95
+ declare function postAgentDigest(input: AgentDigestRequest, options?: StoreOptions): Promise<unknown>;
96
+ declare function executeTool(input: ToolExecuteRequest, options?: StoreOptions): Promise<ToolExecuteResponse>;
63
97
 
64
- export { type StoreAction, StoreError, type StoreEventInput, type StoreOptions, type StoreResponse, type StoreRetrieveParams, type StoreRetrieveResult, retrieve, store };
98
+ export { type AgentDigestRequest, type MyToolsResponse, type StoreAction, StoreError, type StoreEventInput, type StoreOptions, type StoreResponse, type StoreRetrieveParams, type StoreRetrieveResult, type ToolExecuteRequest, type ToolExecuteResponse, executeTool, getMyPerformance, getMyTools, postAgentDigest, retrieve, store };
@@ -25,6 +25,38 @@ function resolveConfig(options) {
25
25
  }
26
26
  return { baseUrl: normalizedBaseUrl, apiKey, fetchFn };
27
27
  }
28
+ async function requestJson(url, options, init) {
29
+ const { apiKey, fetchFn } = resolveConfig(options);
30
+ const response = await fetchFn(url, {
31
+ ...init,
32
+ headers: {
33
+ "content-type": "application/json",
34
+ "openpond-api-key": apiKey,
35
+ ...init.headers ?? {}
36
+ }
37
+ });
38
+ if (!response.ok) {
39
+ let body;
40
+ try {
41
+ body = await response.json();
42
+ } catch {
43
+ body = await response.text().catch(() => void 0);
44
+ }
45
+ throw new StoreError(
46
+ `Request failed with status ${response.status}`,
47
+ response.status,
48
+ body
49
+ );
50
+ }
51
+ if (response.status === 204) {
52
+ return null;
53
+ }
54
+ try {
55
+ return await response.json();
56
+ } catch {
57
+ return await response.text().catch(() => null);
58
+ }
59
+ }
28
60
  async function store(input, options) {
29
61
  const { baseUrl, apiKey, fetchFn } = resolveConfig(options);
30
62
  const url = `${baseUrl}/apps/positions/tx`;
@@ -107,7 +139,35 @@ async function retrieve(params, options) {
107
139
  }
108
140
  return data;
109
141
  }
142
+ async function getMyTools(options) {
143
+ const { baseUrl } = resolveConfig(options);
144
+ const url = `${baseUrl}/apps/tools`;
145
+ const data = await requestJson(url, options, { method: "GET" });
146
+ return data;
147
+ }
148
+ async function getMyPerformance(options) {
149
+ const { baseUrl } = resolveConfig(options);
150
+ const url = `${baseUrl}/apps/performance`;
151
+ return requestJson(url, options, { method: "GET" });
152
+ }
153
+ async function postAgentDigest(input, options) {
154
+ const { baseUrl } = resolveConfig(options);
155
+ const url = `${baseUrl}/apps/agent/digest`;
156
+ return requestJson(url, options, {
157
+ method: "POST",
158
+ body: JSON.stringify(input)
159
+ });
160
+ }
161
+ async function executeTool(input, options) {
162
+ const { baseUrl } = resolveConfig(options);
163
+ const url = `${baseUrl}/apps/tools/execute`;
164
+ const data = await requestJson(url, options, {
165
+ method: "POST",
166
+ body: JSON.stringify(input)
167
+ });
168
+ return data;
169
+ }
110
170
 
111
- export { StoreError, retrieve, store };
171
+ export { StoreError, executeTool, getMyPerformance, getMyTools, postAgentDigest, retrieve, store };
112
172
  //# sourceMappingURL=index.js.map
113
173
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/store/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["type StoreStatus =\n | \"submitted\"\n | \"pending\"\n | \"confirmed\"\n | \"failed\"\n | \"cancelled\"\n | \"filled\"\n | \"partial_fill\"\n | \"settled\"\n | \"info\";\n\nexport type StoreAction =\n | \"stake\"\n | \"swap\"\n | \"bridge\"\n | \"order\"\n | \"lend\"\n | \"repay\"\n | \"withdraw\"\n | \"custom\"\n | string;\n\ntype ChainScope =\n | { chainId: number; network?: never }\n | { network: string; chainId?: never }\n | { chainId?: never; network?: never };\n\nexport type StoreEventInput = ChainScope & {\n source: string;\n ref: string;\n status: StoreStatus;\n walletAddress?: `0x${string}`;\n action?: StoreAction;\n notional?: string; // decimal string recommended to avoid float precision issues\n metadata?: Record<string, unknown>;\n};\n\nexport interface StoreOptions {\n baseUrl?: string;\n apiKey?: string;\n fetchFn?: typeof fetch;\n}\n\nexport interface StoreResponse {\n id: string;\n status?: StoreStatus | null;\n}\n\nexport type StoreRetrieveParams = {\n source?: string;\n walletAddress?: `0x${string}`;\n symbol?: string;\n status?: StoreStatus[];\n since?: number;\n until?: number;\n limit?: number;\n cursor?: string;\n history?: boolean;\n};\n\nexport type StoreRetrieveResult = {\n items: Array<\n StoreEventInput & {\n timestamp?: number;\n updatedBy?: string | null;\n signerKeyId?: string | null;\n }\n >;\n cursor?: string | null;\n};\nexport class StoreError extends Error {\n constructor(\n message: string,\n public readonly status?: number,\n public readonly causeData?: unknown\n ) {\n super(message);\n this.name = \"StoreError\";\n }\n}\n\nfunction resolveConfig(options?: StoreOptions) {\n const baseUrl = options?.baseUrl ?? process.env.BASE_URL ?? \"https://api.openpond.ai\";\n const apiKey = options?.apiKey ?? process.env.OPENPOND_API_KEY;\n\n if (!baseUrl) {\n throw new StoreError(\"BASE_URL is required to store activity events\");\n }\n if (!apiKey) {\n throw new StoreError(\n \"OPENPOND_API_KEY is required to store activity events\"\n );\n }\n\n const normalizedBaseUrl = baseUrl.replace(/\\/$/, \"\");\n const fetchFn = options?.fetchFn ?? globalThis.fetch;\n if (!fetchFn) {\n throw new StoreError(\"Fetch is not available in this environment\");\n }\n\n return { baseUrl: normalizedBaseUrl, apiKey, fetchFn };\n}\n\n/**\n * Store a generic activity event (onchain tx, Hyperliquid order, etc.) in OpenPond.\n */\nexport async function store(\n input: StoreEventInput,\n options?: StoreOptions\n): Promise<StoreResponse> {\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const url = `${baseUrl}/apps/positions/tx`;\n\n let response: Response;\n try {\n response = await fetchFn(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n },\n body: JSON.stringify(input),\n });\n } catch (error) {\n throw new StoreError(\"Failed to reach store endpoint\", undefined, error);\n }\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Store request failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n try {\n const data = (await response.json()) as Partial<StoreResponse>;\n return {\n id: data.id ?? \"\",\n status: data.status ?? null,\n };\n } catch {\n // Response is optional; return empty success\n return { id: \"\", status: null };\n }\n}\n\n/**\n * Retrieve stored activity events for an app.\n */\nexport async function retrieve(\n params?: StoreRetrieveParams,\n options?: StoreOptions\n): Promise<StoreRetrieveResult> {\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const url = new URL(`${baseUrl}/apps/positions/tx`);\n if (params?.source) url.searchParams.set(\"source\", params.source);\n if (params?.walletAddress) url.searchParams.set(\"walletAddress\", params.walletAddress);\n if (params?.symbol) url.searchParams.set(\"symbol\", params.symbol);\n if (params?.status?.length) url.searchParams.set(\"status\", params.status.join(\",\"));\n if (typeof params?.since === \"number\") url.searchParams.set(\"since\", params.since.toString());\n if (typeof params?.until === \"number\") url.searchParams.set(\"until\", params.until.toString());\n if (typeof params?.limit === \"number\") url.searchParams.set(\"limit\", params.limit.toString());\n if (params?.cursor) url.searchParams.set(\"cursor\", params.cursor);\n if (params?.history) url.searchParams.set(\"history\", \"true\");\n\n let response: Response;\n try {\n response = await fetchFn(url.toString(), {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n },\n });\n } catch (error) {\n throw new StoreError(\"Failed to reach store endpoint\", undefined, error);\n }\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Store retrieve failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n const data = (await response.json().catch(() => null)) as StoreRetrieveResult | null;\n if (!data) {\n return { items: [], cursor: null };\n }\n return data;\n}\n"]}
1
+ {"version":3,"sources":["../../src/store/index.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["type StoreStatus =\n | \"submitted\"\n | \"pending\"\n | \"confirmed\"\n | \"failed\"\n | \"cancelled\"\n | \"filled\"\n | \"partial_fill\"\n | \"settled\"\n | \"info\";\n\nexport type StoreAction =\n | \"stake\"\n | \"swap\"\n | \"bridge\"\n | \"order\"\n | \"lend\"\n | \"repay\"\n | \"withdraw\"\n | \"custom\"\n | string;\n\ntype ChainScope =\n | { chainId: number; network?: never }\n | { network: string; chainId?: never }\n | { chainId?: never; network?: never };\n\nexport type StoreEventInput = ChainScope & {\n source: string;\n ref: string;\n status: StoreStatus;\n walletAddress?: `0x${string}`;\n action?: StoreAction;\n notional?: string; // decimal string recommended to avoid float precision issues\n metadata?: Record<string, unknown>;\n};\n\nexport interface StoreOptions {\n baseUrl?: string;\n apiKey?: string;\n fetchFn?: typeof fetch;\n}\n\nexport interface StoreResponse {\n id: string;\n status?: StoreStatus | null;\n}\n\nexport type StoreRetrieveParams = {\n source?: string;\n walletAddress?: `0x${string}`;\n symbol?: string;\n status?: StoreStatus[];\n since?: number;\n until?: number;\n limit?: number;\n cursor?: string;\n history?: boolean;\n};\n\nexport type StoreRetrieveResult = {\n items: Array<\n StoreEventInput & {\n timestamp?: number;\n updatedBy?: string | null;\n signerKeyId?: string | null;\n }\n >;\n cursor?: string | null;\n};\n\nexport type MyToolsResponse = {\n tools: Array<{\n id: string;\n name: string;\n displayName: string;\n description?: string;\n serverUrl: string;\n source: \"internal\" | \"public\";\n appId?: string;\n deploymentId?: string;\n metadata?: unknown;\n }>;\n};\n\nexport type ToolExecuteRequest = {\n appId: string;\n deploymentId: string;\n toolName: string;\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n body?: unknown;\n};\n\nexport type ToolExecuteResponse = {\n ok: boolean;\n status: number;\n data: unknown;\n};\n\nexport type AgentDigestRequest = {\n content: string;\n runAt?: string;\n metadata?: Record<string, unknown>;\n};\nexport class StoreError extends Error {\n constructor(\n message: string,\n public readonly status?: number,\n public readonly causeData?: unknown\n ) {\n super(message);\n this.name = \"StoreError\";\n }\n}\n\nfunction resolveConfig(options?: StoreOptions) {\n const baseUrl = options?.baseUrl ?? process.env.BASE_URL ?? \"https://api.openpond.ai\";\n const apiKey = options?.apiKey ?? process.env.OPENPOND_API_KEY;\n\n if (!baseUrl) {\n throw new StoreError(\"BASE_URL is required to store activity events\");\n }\n if (!apiKey) {\n throw new StoreError(\n \"OPENPOND_API_KEY is required to store activity events\"\n );\n }\n\n const normalizedBaseUrl = baseUrl.replace(/\\/$/, \"\");\n const fetchFn = options?.fetchFn ?? globalThis.fetch;\n if (!fetchFn) {\n throw new StoreError(\"Fetch is not available in this environment\");\n }\n\n return { baseUrl: normalizedBaseUrl, apiKey, fetchFn };\n}\n\nasync function requestJson(\n url: string,\n options: StoreOptions | undefined,\n init: RequestInit\n): Promise<unknown> {\n const { apiKey, fetchFn } = resolveConfig(options);\n const response = await fetchFn(url, {\n ...init,\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n ...(init.headers ?? {}),\n },\n });\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Request failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n if (response.status === 204) {\n return null;\n }\n\n try {\n return await response.json();\n } catch {\n return await response.text().catch(() => null);\n }\n}\n\n/**\n * Store a generic activity event (onchain tx, Hyperliquid order, etc.) in OpenPond.\n */\nexport async function store(\n input: StoreEventInput,\n options?: StoreOptions\n): Promise<StoreResponse> {\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const url = `${baseUrl}/apps/positions/tx`;\n\n let response: Response;\n try {\n response = await fetchFn(url, {\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n },\n body: JSON.stringify(input),\n });\n } catch (error) {\n throw new StoreError(\"Failed to reach store endpoint\", undefined, error);\n }\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Store request failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n try {\n const data = (await response.json()) as Partial<StoreResponse>;\n return {\n id: data.id ?? \"\",\n status: data.status ?? null,\n };\n } catch {\n // Response is optional; return empty success\n return { id: \"\", status: null };\n }\n}\n\n/**\n * Retrieve stored activity events for an app.\n */\nexport async function retrieve(\n params?: StoreRetrieveParams,\n options?: StoreOptions\n): Promise<StoreRetrieveResult> {\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const url = new URL(`${baseUrl}/apps/positions/tx`);\n if (params?.source) url.searchParams.set(\"source\", params.source);\n if (params?.walletAddress) url.searchParams.set(\"walletAddress\", params.walletAddress);\n if (params?.symbol) url.searchParams.set(\"symbol\", params.symbol);\n if (params?.status?.length) url.searchParams.set(\"status\", params.status.join(\",\"));\n if (typeof params?.since === \"number\") url.searchParams.set(\"since\", params.since.toString());\n if (typeof params?.until === \"number\") url.searchParams.set(\"until\", params.until.toString());\n if (typeof params?.limit === \"number\") url.searchParams.set(\"limit\", params.limit.toString());\n if (params?.cursor) url.searchParams.set(\"cursor\", params.cursor);\n if (params?.history) url.searchParams.set(\"history\", \"true\");\n\n let response: Response;\n try {\n response = await fetchFn(url.toString(), {\n method: \"GET\",\n headers: {\n \"content-type\": \"application/json\",\n \"openpond-api-key\": apiKey,\n },\n });\n } catch (error) {\n throw new StoreError(\"Failed to reach store endpoint\", undefined, error);\n }\n\n if (!response.ok) {\n let body: unknown;\n try {\n body = await response.json();\n } catch {\n body = await response.text().catch(() => undefined);\n }\n throw new StoreError(\n `Store retrieve failed with status ${response.status}`,\n response.status,\n body\n );\n }\n\n const data = (await response.json().catch(() => null)) as StoreRetrieveResult | null;\n if (!data) {\n return { items: [], cursor: null };\n }\n return data;\n}\n\nexport async function getMyTools(options?: StoreOptions): Promise<MyToolsResponse> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/tools`;\n const data = (await requestJson(url, options, { method: \"GET\" })) as MyToolsResponse;\n return data;\n}\n\nexport async function getMyPerformance(options?: StoreOptions): Promise<unknown> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/performance`;\n return requestJson(url, options, { method: \"GET\" });\n}\n\nexport async function postAgentDigest(\n input: AgentDigestRequest,\n options?: StoreOptions\n): Promise<unknown> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/agent/digest`;\n return requestJson(url, options, {\n method: \"POST\",\n body: JSON.stringify(input),\n });\n}\n\nexport async function executeTool(\n input: ToolExecuteRequest,\n options?: StoreOptions\n): Promise<ToolExecuteResponse> {\n const { baseUrl } = resolveConfig(options);\n const url = `${baseUrl}/apps/tools/execute`;\n const data = (await requestJson(url, options, {\n method: \"POST\",\n body: JSON.stringify(input),\n })) as ToolExecuteResponse;\n return data;\n}\n"]}
@@ -332,6 +332,7 @@ interface NormalizedSchedule {
332
332
  type: ScheduleType;
333
333
  expression: string;
334
334
  authoredEnabled?: boolean;
335
+ notifyEmail?: boolean;
335
336
  }
336
337
  interface McpConfig {
337
338
  enabled: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opentool",
3
- "version": "0.8.3",
3
+ "version": "0.8.5",
4
4
  "description": "OpenTool framework for building serverless MCP tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -110,6 +110,10 @@
110
110
  "import": "./dist/adapters/hyperliquid/index.js",
111
111
  "types": "./dist/adapters/hyperliquid/index.d.ts"
112
112
  },
113
+ "./adapters/polymarket": {
114
+ "import": "./dist/adapters/polymarket/index.js",
115
+ "types": "./dist/adapters/polymarket/index.d.ts"
116
+ },
113
117
  "./store": {
114
118
  "import": "./dist/store/index.js",
115
119
  "types": "./dist/store/index.d.ts"
@@ -10,7 +10,7 @@
10
10
  "validate": "opentool validate"
11
11
  },
12
12
  "dependencies": {
13
- "opentool": "^0.8.3",
13
+ "opentool": "^0.8.5",
14
14
  "zod": "^4.1.11"
15
15
  },
16
16
  "devDependencies": {