opentool 0.8.28 → 0.9.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.
@@ -3,6 +3,12 @@ declare const STORE_EVENT_LEVELS: readonly ["decision", "execution", "lifecycle"
3
3
  declare const CANONICAL_STORE_ACTIONS: readonly ["stake", "unstake", "swap", "bridge", "order", "trade", "lend", "borrow", "repay", "withdraw", "provide_liquidity", "remove_liquidity", "claim", "custom"];
4
4
  type StoreAction = (typeof CANONICAL_STORE_ACTIONS)[number] | string;
5
5
  type StoreEventLevel = (typeof STORE_EVENT_LEVELS)[number];
6
+ type StoreMode = "live" | "backtest";
7
+ type StoreSimulationConfig = {
8
+ fillModel?: string;
9
+ feeModel?: string;
10
+ slippageBps?: number;
11
+ };
6
12
  type ChainScope = {
7
13
  chainId: number;
8
14
  network?: never;
@@ -23,6 +29,9 @@ type StoreEventInput = ChainScope & {
23
29
  notional?: string;
24
30
  metadata?: Record<string, unknown>;
25
31
  market?: Record<string, unknown>;
32
+ mode?: StoreMode;
33
+ backtestRunId?: string;
34
+ simulation?: StoreSimulationConfig;
26
35
  };
27
36
  interface StoreOptions {
28
37
  baseUrl?: string;
@@ -43,6 +52,8 @@ type StoreRetrieveParams = {
43
52
  limit?: number;
44
53
  cursor?: string;
45
54
  history?: boolean;
55
+ mode?: StoreMode;
56
+ backtestRunId?: string;
46
57
  };
47
58
  type StoreRetrieveResult = {
48
59
  items: Array<StoreEventInput & {
@@ -100,4 +111,4 @@ declare function getMyPerformance(options?: StoreOptions): Promise<unknown>;
100
111
  declare function postAgentDigest(input: AgentDigestRequest, options?: StoreOptions): Promise<unknown>;
101
112
  declare function executeTool(input: ToolExecuteRequest, options?: StoreOptions): Promise<ToolExecuteResponse>;
102
113
 
103
- export { type AgentDigestRequest, type MyToolsResponse, type StoreAction, StoreError, type StoreEventInput, type StoreEventLevel, type StoreOptions, type StoreResponse, type StoreRetrieveParams, type StoreRetrieveResult, type ToolExecuteRequest, type ToolExecuteResponse, executeTool, getMyPerformance, getMyTools, postAgentDigest, retrieve, store };
114
+ export { type AgentDigestRequest, type MyToolsResponse, type StoreAction, StoreError, type StoreEventInput, type StoreEventLevel, type StoreMode, type StoreOptions, type StoreResponse, type StoreRetrieveParams, type StoreRetrieveResult, type StoreSimulationConfig, type ToolExecuteRequest, type ToolExecuteResponse, executeTool, getMyPerformance, getMyTools, postAgentDigest, retrieve, store };
@@ -134,8 +134,14 @@ async function requestJson(url, options, init) {
134
134
  }
135
135
  async function store(input, options) {
136
136
  const normalizedInput = normalizeStoreInput(input);
137
+ const mode = normalizedInput.mode ?? "live";
137
138
  const eventLevel = normalizedInput.eventLevel;
138
139
  const normalizedAction = normalizeAction(normalizedInput.action);
140
+ if (mode === "backtest" && !normalizedInput.backtestRunId) {
141
+ throw new StoreError(
142
+ `backtestRunId is required when mode is "backtest"`
143
+ );
144
+ }
139
145
  if (eventLevel === "execution" || eventLevel === "lifecycle") {
140
146
  if (!normalizedAction || !EXECUTION_ACTIONS_SET.has(normalizedAction)) {
141
147
  throw new StoreError(
@@ -155,7 +161,8 @@ async function store(input, options) {
155
161
  );
156
162
  }
157
163
  const { baseUrl, apiKey, fetchFn } = resolveConfig(options);
158
- const url = `${baseUrl}/apps/positions/tx`;
164
+ const path = mode === "backtest" ? "/apps/backtests/tx" : "/apps/positions/tx";
165
+ const url = `${baseUrl}${path}`;
159
166
  let response;
160
167
  try {
161
168
  response = await fetchFn(url, {
@@ -194,7 +201,9 @@ async function store(input, options) {
194
201
  }
195
202
  async function retrieve(params, options) {
196
203
  const { baseUrl, apiKey, fetchFn } = resolveConfig(options);
197
- const url = new URL(`${baseUrl}/apps/positions/tx`);
204
+ const mode = params?.mode ?? "live";
205
+ const path = mode === "backtest" ? "/apps/backtests/tx" : "/apps/positions/tx";
206
+ const url = new URL(`${baseUrl}${path}`);
198
207
  if (params?.source) url.searchParams.set("source", params.source);
199
208
  if (params?.walletAddress) url.searchParams.set("walletAddress", params.walletAddress);
200
209
  if (params?.symbol) url.searchParams.set("symbol", params.symbol);
@@ -204,6 +213,9 @@ async function retrieve(params, options) {
204
213
  if (typeof params?.limit === "number") url.searchParams.set("limit", params.limit.toString());
205
214
  if (params?.cursor) url.searchParams.set("cursor", params.cursor);
206
215
  if (params?.history) url.searchParams.set("history", "true");
216
+ if (params?.backtestRunId) {
217
+ url.searchParams.set("backtestRunId", params.backtestRunId);
218
+ }
207
219
  let response;
208
220
  try {
209
221
  response = await fetchFn(url.toString(), {
@@ -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\nconst STORE_EVENT_LEVELS = [\n \"decision\",\n \"execution\",\n \"lifecycle\",\n] as const;\n\nconst STORE_EVENT_LEVEL_SET = new Set<string>(STORE_EVENT_LEVELS);\n\nconst CANONICAL_STORE_ACTIONS = [\n \"stake\",\n \"unstake\",\n \"swap\",\n \"bridge\",\n \"order\",\n \"trade\",\n \"lend\",\n \"borrow\",\n \"repay\",\n \"withdraw\",\n \"provide_liquidity\",\n \"remove_liquidity\",\n \"claim\",\n \"custom\",\n] as const;\n\nconst MARKET_REQUIRED_ACTIONS = [\n \"swap\",\n \"bridge\",\n \"order\",\n \"trade\",\n \"lend\",\n \"borrow\",\n \"repay\",\n \"stake\",\n \"unstake\",\n \"withdraw\",\n \"provide_liquidity\",\n \"remove_liquidity\",\n \"claim\",\n] as const;\n\nconst MARKET_REQUIRED_ACTIONS_SET = new Set<string>(MARKET_REQUIRED_ACTIONS);\nconst EXECUTION_ACTIONS_SET = new Set<string>(MARKET_REQUIRED_ACTIONS);\n\nexport type StoreAction =\n | (typeof CANONICAL_STORE_ACTIONS)[number]\n | string;\n\nexport type StoreEventLevel = (typeof STORE_EVENT_LEVELS)[number];\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 eventLevel?: StoreEventLevel;\n notional?: string; // decimal string recommended to avoid float precision issues\n metadata?: Record<string, unknown>;\n market?: 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\nconst normalizeAction = (\n action: string | null | undefined\n): string | null => {\n const normalized = action?.trim().toLowerCase();\n return normalized ? normalized : null;\n};\n\nconst coerceEventLevel = (value: unknown): StoreEventLevel | null => {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim().toLowerCase();\n if (!normalized || !STORE_EVENT_LEVEL_SET.has(normalized)) return null;\n return normalized as StoreEventLevel;\n};\n\nconst requiresMarketIdentity = (input: StoreEventInput): boolean => {\n const action = normalizeAction(input.action);\n if (!action) return false;\n return MARKET_REQUIRED_ACTIONS_SET.has(action);\n};\n\nconst hasMarketIdentity = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n const requiredKeys = [\"market_type\", \"venue\", \"environment\", \"canonical_symbol\"] as const;\n return requiredKeys.every((key) => {\n const field = record[key];\n return typeof field === \"string\" && field.trim().length > 0;\n });\n};\n\nconst resolveEventLevel = (input: StoreEventInput): StoreEventLevel | null => {\n const direct = coerceEventLevel(input.eventLevel);\n if (direct) return direct;\n\n const metadataLevel = coerceEventLevel(input.metadata?.eventLevel);\n if (metadataLevel) return metadataLevel;\n\n const action = normalizeAction(input.action);\n if (\n action &&\n EXECUTION_ACTIONS_SET.has(action) &&\n (input.metadata?.lifecycle === true ||\n typeof input.metadata?.executionRef === \"string\" ||\n typeof input.metadata?.parentExecutionRef === \"string\")\n ) {\n return \"lifecycle\";\n }\n if ((action && EXECUTION_ACTIONS_SET.has(action)) || hasMarketIdentity(input.market)) {\n return \"execution\";\n }\n if (action) return \"decision\";\n\n return null;\n};\n\nconst normalizeStoreInput = (input: StoreEventInput): StoreEventInput => {\n const metadata = { ...(input.metadata ?? {}) };\n const eventLevel = resolveEventLevel({ ...input, metadata });\n if (eventLevel) {\n metadata.eventLevel = eventLevel;\n }\n const hasMetadata = Object.keys(metadata).length > 0;\n return {\n ...input,\n ...(eventLevel ? { eventLevel } : {}),\n ...(hasMetadata ? { metadata } : {}),\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 normalizedInput = normalizeStoreInput(input);\n const eventLevel = normalizedInput.eventLevel;\n const normalizedAction = normalizeAction(normalizedInput.action);\n\n if (eventLevel === \"execution\" || eventLevel === \"lifecycle\") {\n if (!normalizedAction || !EXECUTION_ACTIONS_SET.has(normalizedAction)) {\n throw new StoreError(\n `eventLevel \"${eventLevel}\" requires an execution action`\n );\n }\n }\n if (eventLevel === \"execution\" && !hasMarketIdentity(normalizedInput.market)) {\n throw new StoreError(\n `market is required for execution events. market must include market_type, venue, environment, canonical_symbol`\n );\n }\n const shouldApplyLegacyMarketRule =\n eventLevel == null || eventLevel === \"execution\";\n if (\n shouldApplyLegacyMarketRule &&\n requiresMarketIdentity(normalizedInput) &&\n !hasMarketIdentity(normalizedInput.market)\n ) {\n throw new StoreError(\n `market is required for action \"${normalizedInput.action}\". market must include market_type, venue, environment, canonical_symbol`\n );\n }\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(normalizedInput),\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"]}
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\nconst STORE_EVENT_LEVELS = [\n \"decision\",\n \"execution\",\n \"lifecycle\",\n] as const;\n\nconst STORE_EVENT_LEVEL_SET = new Set<string>(STORE_EVENT_LEVELS);\n\nconst CANONICAL_STORE_ACTIONS = [\n \"stake\",\n \"unstake\",\n \"swap\",\n \"bridge\",\n \"order\",\n \"trade\",\n \"lend\",\n \"borrow\",\n \"repay\",\n \"withdraw\",\n \"provide_liquidity\",\n \"remove_liquidity\",\n \"claim\",\n \"custom\",\n] as const;\n\nconst MARKET_REQUIRED_ACTIONS = [\n \"swap\",\n \"bridge\",\n \"order\",\n \"trade\",\n \"lend\",\n \"borrow\",\n \"repay\",\n \"stake\",\n \"unstake\",\n \"withdraw\",\n \"provide_liquidity\",\n \"remove_liquidity\",\n \"claim\",\n] as const;\n\nconst MARKET_REQUIRED_ACTIONS_SET = new Set<string>(MARKET_REQUIRED_ACTIONS);\nconst EXECUTION_ACTIONS_SET = new Set<string>(MARKET_REQUIRED_ACTIONS);\n\nexport type StoreAction =\n | (typeof CANONICAL_STORE_ACTIONS)[number]\n | string;\n\nexport type StoreEventLevel = (typeof STORE_EVENT_LEVELS)[number];\nexport type StoreMode = \"live\" | \"backtest\";\n\nexport type StoreSimulationConfig = {\n fillModel?: string;\n feeModel?: string;\n slippageBps?: number;\n};\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 eventLevel?: StoreEventLevel;\n notional?: string; // decimal string recommended to avoid float precision issues\n metadata?: Record<string, unknown>;\n market?: Record<string, unknown>;\n mode?: StoreMode;\n backtestRunId?: string;\n simulation?: StoreSimulationConfig;\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 mode?: StoreMode;\n backtestRunId?: string;\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\nconst normalizeAction = (\n action: string | null | undefined\n): string | null => {\n const normalized = action?.trim().toLowerCase();\n return normalized ? normalized : null;\n};\n\nconst coerceEventLevel = (value: unknown): StoreEventLevel | null => {\n if (typeof value !== \"string\") return null;\n const normalized = value.trim().toLowerCase();\n if (!normalized || !STORE_EVENT_LEVEL_SET.has(normalized)) return null;\n return normalized as StoreEventLevel;\n};\n\nconst requiresMarketIdentity = (input: StoreEventInput): boolean => {\n const action = normalizeAction(input.action);\n if (!action) return false;\n return MARKET_REQUIRED_ACTIONS_SET.has(action);\n};\n\nconst hasMarketIdentity = (value: unknown): value is Record<string, unknown> => {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return false;\n const record = value as Record<string, unknown>;\n const requiredKeys = [\"market_type\", \"venue\", \"environment\", \"canonical_symbol\"] as const;\n return requiredKeys.every((key) => {\n const field = record[key];\n return typeof field === \"string\" && field.trim().length > 0;\n });\n};\n\nconst resolveEventLevel = (input: StoreEventInput): StoreEventLevel | null => {\n const direct = coerceEventLevel(input.eventLevel);\n if (direct) return direct;\n\n const metadataLevel = coerceEventLevel(input.metadata?.eventLevel);\n if (metadataLevel) return metadataLevel;\n\n const action = normalizeAction(input.action);\n if (\n action &&\n EXECUTION_ACTIONS_SET.has(action) &&\n (input.metadata?.lifecycle === true ||\n typeof input.metadata?.executionRef === \"string\" ||\n typeof input.metadata?.parentExecutionRef === \"string\")\n ) {\n return \"lifecycle\";\n }\n if ((action && EXECUTION_ACTIONS_SET.has(action)) || hasMarketIdentity(input.market)) {\n return \"execution\";\n }\n if (action) return \"decision\";\n\n return null;\n};\n\nconst normalizeStoreInput = (input: StoreEventInput): StoreEventInput => {\n const metadata = { ...(input.metadata ?? {}) };\n const eventLevel = resolveEventLevel({ ...input, metadata });\n if (eventLevel) {\n metadata.eventLevel = eventLevel;\n }\n const hasMetadata = Object.keys(metadata).length > 0;\n return {\n ...input,\n ...(eventLevel ? { eventLevel } : {}),\n ...(hasMetadata ? { metadata } : {}),\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 normalizedInput = normalizeStoreInput(input);\n const mode = normalizedInput.mode ?? \"live\";\n const eventLevel = normalizedInput.eventLevel;\n const normalizedAction = normalizeAction(normalizedInput.action);\n\n if (mode === \"backtest\" && !normalizedInput.backtestRunId) {\n throw new StoreError(\n `backtestRunId is required when mode is \"backtest\"`\n );\n }\n\n if (eventLevel === \"execution\" || eventLevel === \"lifecycle\") {\n if (!normalizedAction || !EXECUTION_ACTIONS_SET.has(normalizedAction)) {\n throw new StoreError(\n `eventLevel \"${eventLevel}\" requires an execution action`\n );\n }\n }\n if (eventLevel === \"execution\" && !hasMarketIdentity(normalizedInput.market)) {\n throw new StoreError(\n `market is required for execution events. market must include market_type, venue, environment, canonical_symbol`\n );\n }\n const shouldApplyLegacyMarketRule =\n eventLevel == null || eventLevel === \"execution\";\n if (\n shouldApplyLegacyMarketRule &&\n requiresMarketIdentity(normalizedInput) &&\n !hasMarketIdentity(normalizedInput.market)\n ) {\n throw new StoreError(\n `market is required for action \"${normalizedInput.action}\". market must include market_type, venue, environment, canonical_symbol`\n );\n }\n const { baseUrl, apiKey, fetchFn } = resolveConfig(options);\n\n const path = mode === \"backtest\" ? \"/apps/backtests/tx\" : \"/apps/positions/tx\";\n const url = `${baseUrl}${path}`;\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(normalizedInput),\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 const mode = params?.mode ?? \"live\";\n const path = mode === \"backtest\" ? \"/apps/backtests/tx\" : \"/apps/positions/tx\";\n\n const url = new URL(`${baseUrl}${path}`);\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 if (params?.backtestRunId) {\n url.searchParams.set(\"backtestRunId\", params.backtestRunId);\n }\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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opentool",
3
- "version": "0.8.28",
3
+ "version": "0.9.0",
4
4
  "description": "OpenTool framework for building serverless MCP tools",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -15,10 +15,7 @@
15
15
  "lint:fix": "eslint . --fix",
16
16
  "typecheck": "tsc --noEmit",
17
17
  "test": "tsx --test tests/*.test.ts",
18
- "prepublishOnly": "npm run typecheck && npm run build && node scripts/sync-template.ts",
19
- "examples:build": "node dist/cli/index.js build --input examples/full-metadata/tools --output examples/full-metadata/dist",
20
- "examples:metadata": "node dist/cli/index.js metadata --input examples/full-metadata/tools --output examples/full-metadata/metadata.json",
21
- "examples:validate": "node dist/cli/index.js validate --input examples/full-metadata/tools",
18
+ "prepublishOnly": "npm run typecheck && npm run build && tsx scripts/sync-template.ts",
22
19
  "changeset": "changeset",
23
20
  "changeset:version": "changeset version",
24
21
  "changeset:publish": "changeset publish",
@@ -51,19 +48,17 @@
51
48
  "access": "public"
52
49
  },
53
50
  "dependencies": {
54
- "@aws/run-mcp-servers-with-aws-lambda": "^0.2.2",
51
+ "@alcyone-labs/zod-to-json-schema": "^4.0.10",
55
52
  "@modelcontextprotocol/sdk": "^1.15.1",
56
- "@turnkey/sdk-server": "4.10.2",
57
- "@turnkey/viem": "0.14.5",
58
53
  "@msgpack/msgpack": "^3.1.1",
59
54
  "@noble/hashes": "^1.4.0",
55
+ "@turnkey/sdk-server": "4.10.2",
56
+ "@turnkey/viem": "0.14.5",
60
57
  "commander": "^11.0.0",
58
+ "dotenv": "^17.2.3",
61
59
  "esbuild": "^0.25.0",
62
- "tsx": "^4.0.0",
63
60
  "viem": "^2.31.7",
64
- "zod": "^4.1.11",
65
- "@alcyone-labs/zod-to-json-schema": "^4.0.10",
66
- "dotenv": "^17.2.3"
61
+ "zod": "^4.3.6"
67
62
  },
68
63
  "devDependencies": {
69
64
  "@changesets/cli": "^2.29.5",
@@ -71,24 +66,12 @@
71
66
  "@typescript-eslint/eslint-plugin": "^6.0.0",
72
67
  "@typescript-eslint/parser": "^6.0.0",
73
68
  "eslint": "^8.0.0",
74
- "ts-node": "^10.9.2",
75
69
  "tsup": "^8.5.0",
76
70
  "tsx": "^4.0.0",
77
- "typescript": "^5.0.0",
78
- "workflow": "^4.0.1-beta.6"
71
+ "typescript": "^5.0.0"
79
72
  },
80
73
  "peerDependencies": {
81
- "typescript": "^5.0.0",
82
- "@workflow/cli": "^4.0.1-beta.6",
83
- "workflow": "^4.0.1-beta.6"
84
- },
85
- "peerDependenciesMeta": {
86
- "@workflow/cli": {
87
- "optional": true
88
- },
89
- "workflow": {
90
- "optional": true
91
- }
74
+ "typescript": "^5.0.0"
92
75
  },
93
76
  "engines": {
94
77
  "node": ">=20.0.0"
@@ -10,8 +10,8 @@
10
10
  "validate": "opentool validate"
11
11
  },
12
12
  "dependencies": {
13
- "opentool": "^0.8.28",
14
- "zod": "^4.1.11"
13
+ "opentool": "^0.9.0",
14
+ "zod": "^4.3.6"
15
15
  },
16
16
  "devDependencies": {
17
17
  "typescript": "^5.0.0",