charon-hooks 0.1.0 → 0.1.7

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.
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
6
  <title>Charon</title>
7
7
  <link rel="icon" href="/favicon.ico" />
8
- <script type="module" crossorigin src="/assets/index-hnnw32hs.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-BBZqXOn2.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-Ccj2TupZ.css">
10
10
  </head>
11
11
  <body class="antialiased">
@@ -1,9 +1,34 @@
1
1
  // src/server/app.ts
2
2
  import { Hono as Hono7 } from "hono";
3
- import { logger } from "hono/logger";
3
+ import { dirname as dirname2, resolve as resolve3 } from "path";
4
+ import { fileURLToPath } from "url";
4
5
 
5
- // src/server/middleware/static.ts
6
+ // src/server/middleware/logger.ts
6
7
  import { createMiddleware } from "hono/factory";
8
+ var QUIET_PATHS = [
9
+ "/api/triggers",
10
+ "/api/runs",
11
+ "/api/tunnel"
12
+ ];
13
+ var quietLogger = createMiddleware(async (c, next) => {
14
+ const start = Date.now();
15
+ const method = c.req.method;
16
+ const path = new URL(c.req.url).pathname;
17
+ await next();
18
+ const status = c.res.status;
19
+ const elapsed = Date.now() - start;
20
+ const isQuietPath = QUIET_PATHS.some((p) => path === p || path.startsWith(p + "?"));
21
+ if (method === "GET" && isQuietPath && status >= 200 && status < 300) {
22
+ return;
23
+ }
24
+ const statusColor = status >= 500 ? "31" : status >= 400 ? "33" : status >= 300 ? "36" : "32";
25
+ console.log(
26
+ ` \x1B[90m-->\x1B[0m \x1B[1m${method}\x1B[0m ${path} \x1B[${statusColor}m${status}\x1B[0m ${elapsed}ms`
27
+ );
28
+ });
29
+
30
+ // src/server/middleware/static.ts
31
+ import { createMiddleware as createMiddleware2 } from "hono/factory";
7
32
  import { readFileSync, existsSync, statSync } from "fs";
8
33
  import { join, extname, resolve } from "path";
9
34
  var MIME_TYPES = {
@@ -25,12 +50,12 @@ var MIME_TYPES = {
25
50
  function serveStatic({ root, path: fallbackPath }) {
26
51
  const rootDir = root ? resolve(root) : process.cwd();
27
52
  const fallback = fallbackPath ? resolve(fallbackPath) : null;
28
- return createMiddleware(async (c, next) => {
53
+ return createMiddleware2(async (c, next) => {
29
54
  if (c.req.method !== "GET" && c.req.method !== "HEAD") {
30
55
  return next();
31
56
  }
32
57
  const url = new URL(c.req.url);
33
- let pathname = decodeURIComponent(url.pathname);
58
+ const pathname = decodeURIComponent(url.pathname);
34
59
  if (pathname.includes("..")) {
35
60
  return next();
36
61
  }
@@ -713,7 +738,7 @@ async function startTunnel(config, port = 3e3) {
713
738
  }
714
739
  try {
715
740
  await ngrok.disconnect();
716
- await new Promise((resolve3) => setTimeout(resolve3, 1e3));
741
+ await new Promise((resolve4) => setTimeout(resolve4, 1e3));
717
742
  } catch {
718
743
  }
719
744
  listener = null;
@@ -1497,7 +1522,7 @@ var taskRoutes = new Hono6();
1497
1522
  taskRoutes.post("/complete", async (c) => {
1498
1523
  try {
1499
1524
  const body = await c.req.json();
1500
- const { summary, pid: _pid } = body;
1525
+ const { summary } = body;
1501
1526
  const now = (/* @__PURE__ */ new Date()).toISOString();
1502
1527
  const db2 = getDb();
1503
1528
  const recentRuns = listRuns(db2, { status: "completed", limit: 10 });
@@ -1564,8 +1589,10 @@ async function tunnelProxyMiddleware(c, next) {
1564
1589
  }
1565
1590
 
1566
1591
  // src/server/app.ts
1592
+ var __dirname = dirname2(fileURLToPath(import.meta.url));
1593
+ var clientDir = resolve3(__dirname, "../client");
1567
1594
  var app = new Hono7();
1568
- app.use("*", logger());
1595
+ app.use("*", quietLogger);
1569
1596
  app.use("*", tunnelProxyMiddleware);
1570
1597
  app.route("/api/triggers", triggersRoutes);
1571
1598
  app.route("/api/runs", runsRoutes);
@@ -1573,8 +1600,8 @@ app.route("/api/sanitizers", sanitizersRoutes);
1573
1600
  app.route("/api/tunnel", tunnelRoutes);
1574
1601
  app.route("/api/webhook", webhookRoutes);
1575
1602
  app.route("/api/task", taskRoutes);
1576
- app.use("/*", serveStatic({ root: "./dist/client" }));
1577
- app.get("*", serveStatic({ path: "./dist/client/index.html" }));
1603
+ app.use("/*", serveStatic({ root: clientDir }));
1604
+ app.get("*", serveStatic({ path: resolve3(clientDir, "index.html") }));
1578
1605
 
1579
1606
  // src/server/init.ts
1580
1607
  async function initializeServices() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "charon-hooks",
3
- "version": "0.1.0",
3
+ "version": "0.1.7",
4
4
  "description": "Autonomous task triggering service - webhooks and cron to AI agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -45,6 +45,7 @@
45
45
  "zod": "^4.3.5"
46
46
  },
47
47
  "devDependencies": {
48
+ "@eslint/js": "^9.39.2",
48
49
  "@tailwindcss/postcss": "^4",
49
50
  "@tailwindcss/vite": "^4",
50
51
  "@types/better-sqlite3": "^7.6.13",
@@ -55,10 +56,12 @@
55
56
  "@types/react-dom": "^19",
56
57
  "@vitejs/plugin-react": "^4.4.0",
57
58
  "eslint": "^9",
59
+ "globals": "^17.0.0",
58
60
  "tailwindcss": "^4",
59
61
  "tsup": "^8.5.1",
60
62
  "tw-animate-css": "^1.4.0",
61
63
  "typescript": "5.9.3",
64
+ "typescript-eslint": "^8.52.0",
62
65
  "vite": "^6.0.0"
63
66
  },
64
67
  "ignoreScripts": [
@@ -1 +0,0 @@
1
- <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
@@ -1 +0,0 @@
1
- <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262V0ZM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8l18.3-22.7z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3H81Zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5 1 0 1.8-.2 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5c0 2-.5 3.7-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6 1-.4 1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2 1.8.8 3.2 2 4.3 3.4 1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
@@ -1 +0,0 @@
1
- <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1155 1000"><path d="m577.3 0 577.4 1000H0z" fill="#fff"/></svg>
@@ -1 +0,0 @@
1
- <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M1.5 2.5h13v10a1 1 0 0 1-1 1h-11a1 1 0 0 1-1-1zM0 1h16v11.5a2.5 2.5 0 0 1-2.5 2.5h-11A2.5 2.5 0 0 1 0 12.5zm3.75 4.5a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5M7 4.75a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0m1.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5" fill="#666"/></svg>