hanoman 0.1.31 → 0.1.33

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.
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.31",
3
- "sha": "6ca5000",
4
- "builtAt": "2026-08-14T06:09:59.969Z"
2
+ "version": "0.1.33",
3
+ "sha": "5b0ee20",
4
+ "builtAt": "2026-08-14T10:11:20.930Z"
5
5
  }
package/dist/cli.js CHANGED
@@ -29451,6 +29451,7 @@ var init_pack = __esm({
29451
29451
  "@prisma/client",
29452
29452
  "node-pty",
29453
29453
  "pdfkit",
29454
+ "sharp",
29454
29455
  "prisma",
29455
29456
  "pg"
29456
29457
  ];
package/dist/server.js CHANGED
@@ -1,4 +1,4 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
1
+ import { createRequire as __hanomanCreateRequire } from 'module'; const require = __hanomanCreateRequire(import.meta.url);
2
2
  var __create = Object.create;
3
3
  var __defProp = Object.defineProperty;
4
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
@@ -24263,6 +24263,7 @@ import { existsSync as existsSync15 } from "node:fs";
24263
24263
 
24264
24264
  // src/web-dir.ts
24265
24265
  import { resolve } from "node:path";
24266
+ var shouldServeWeb = (env) => env.NODE_ENV === "production" || Boolean(env.HANOMAN_WEB_DIR?.trim());
24266
24267
  function pickWebDir(distDir, env, exists) {
24267
24268
  const forced = env.HANOMAN_WEB_DIR?.trim();
24268
24269
  if (forced) {
@@ -29929,11 +29930,32 @@ function wsControlOrigins(env) {
29929
29930
  function assertWsOrigin(origin, allowed) {
29930
29931
  if (!origin || !allowed.has(origin)) throw new Error("WebSocket Origin rejected");
29931
29932
  }
29933
+ function wsAllowlistFor(configured, host2, env) {
29934
+ if (configured.size > 0 || env.NODE_ENV === "production") return configured;
29935
+ const value = host2?.trim().toLowerCase();
29936
+ if (!value) return configured;
29937
+ let parsed;
29938
+ try {
29939
+ parsed = new URL(`http://${value}`);
29940
+ } catch {
29941
+ return configured;
29942
+ }
29943
+ if (!parsed.host || parsed.username || parsed.password || parsed.pathname !== "/" || parsed.search || parsed.hash) return configured;
29944
+ const hosts = /* @__PURE__ */ new Set([parsed.host]);
29945
+ if (parsed.port === "80" || parsed.port === "443") hosts.add(parsed.hostname);
29946
+ const allowed = /* @__PURE__ */ new Set();
29947
+ for (const candidate of hosts) {
29948
+ allowed.add(`http://${candidate}`);
29949
+ allowed.add(`https://${candidate}`);
29950
+ }
29951
+ return allowed;
29952
+ }
29932
29953
  function admitBrowserWs(req, target2, allowedOrigins) {
29933
29954
  const origin = typeof req.headers.origin === "string" ? req.headers.origin : void 0;
29934
29955
  if (!origin && process.env.NODE_ENV === "test" && allowedOrigins.size === 0)
29935
29956
  return { kind: "test", id: "test" };
29936
- assertWsOrigin(origin, allowedOrigins);
29957
+ const host2 = typeof req.headers.host === "string" ? req.headers.host : void 0;
29958
+ assertWsOrigin(origin, wsAllowlistFor(allowedOrigins, host2, process.env));
29937
29959
  const token = ticketFromProtocol(req.headers["sec-websocket-protocol"]);
29938
29960
  if (!token) throw new Error("WebSocket ticket required");
29939
29961
  const principal = consumeWsTicket(token, target2);
@@ -44789,7 +44811,7 @@ function buildApp({ requireAuth = true, agentDocFile, env = process.env } = {})
44789
44811
  await api.register(portal_default);
44790
44812
  await api.register(client_accounts_default);
44791
44813
  }, { prefix: "/api" });
44792
- if (env.NODE_ENV === "production") {
44814
+ if (shouldServeWeb(env)) {
44793
44815
  const dist = pickWebDir(dirname12(fileURLToPath4(import.meta.url)), env, existsSync15);
44794
44816
  if (dist) {
44795
44817
  app2.register(fastifyStatic, { root: dist });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hanoman",
3
- "version": "0.1.31",
3
+ "version": "0.1.33",
4
4
  "description": "Orchestrator + dashboard workflow docs-driven untuk sesi Claude Code / Codex",
5
5
  "type": "module",
6
6
  "repository": {
@@ -34,6 +34,7 @@
34
34
  "@prisma/client": "^6.19.0",
35
35
  "node-pty": "^1.1.0",
36
36
  "pdfkit": "^0.19.1",
37
+ "sharp": "^0.35.3",
37
38
  "prisma": "^6.19.0",
38
39
  "pg": "^8.13.1"
39
40
  },