import type { ToolInput } from "../../core/io/input-types"; import type { ToolResult } from "../../core/io/output-types"; import type { ToolContext } from "../../core/plugins/plugin-types"; import type { TimestampOptions } from "./index"; export async function runTimestampConverter( input: ToolInput, options: TimestampOptions, context?: ToolContext ): Promise { void context; const text = (input.text || "").trim(); if (!text) { throw new Error("No input provided."); } if (options.mode === "timestamp-to-date") { let ts = Number(text); if (isNaN(ts)) { throw new Error("Invalid timestamp. Enter a numeric Unix timestamp."); } if (options.unit === "seconds") { ts = ts * 1000; } const date = new Date(ts); if (isNaN(date.getTime())) { throw new Error("Invalid timestamp value."); } return { type: "json", value: { input: text, iso: date.toISOString(), utc: date.toUTCString(), local: date.toLocaleString(), date: date.toISOString().split("T")[0], time: date.toISOString().split("T")[1].replace("Z", ""), unixSeconds: Math.floor(date.getTime() / 1000), unixMillis: date.getTime(), dayOfWeek: date.toLocaleDateString("en-US", { weekday: "long" }), }, }; } else { let date: Date; if (/^\d{4}-\d{2}-\d{2}(T|\s)/.test(text)) { date = new Date(text); } else { date = new Date(text); } if (isNaN(date.getTime())) { throw new Error("Invalid date string. Use ISO 8601 format like 2024-01-15T12:00:00Z."); } const unixSeconds = Math.floor(date.getTime() / 1000); const unixMillis = date.getTime(); return { type: "json", value: { input: text, iso: date.toISOString(), utc: date.toUTCString(), unixSeconds: options.unit === "seconds" ? unixSeconds : undefined, unixMillis: options.unit === "milliseconds" ? unixMillis : undefined, both: { seconds: unixSeconds, milliseconds: unixMillis, }, }, }; } }