doru 1.0.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.
- package/README.md +248 -0
- package/dist/cli.js +940 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.mts +100 -0
- package/dist/index.d.ts +100 -0
- package/dist/index.js +631 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +605 -0
- package/dist/index.mjs.map +1 -0
- package/dist/ui/app.js +29334 -0
- package/dist/ui/app.js.map +1 -0
- package/dist/ui/favicon-paused.svg +20 -0
- package/dist/ui/favicon.svg +30 -0
- package/dist/ui/index.html +14 -0
- package/dist/ui/styles.css +1293 -0
- package/package.json +52 -0
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/cli/argument-parser.ts","../src/core/config.ts","../src/cli/config-loader.ts","../src/core/module-detection.ts","../src/cli/utils.ts","../src/cli/script-executor.ts","../src/cli/server.ts","../src/cli.ts"],"names":["z","fs","path","fs2","path2","fileURLToPath","path3","spawn","resolve","net","dirname","fs3","path4","os","fs4","fs5","path5","http","__dirname_shim","path6","fs6"],"mappings":"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","file":"cli.js","sourcesContent":["{\n \"name\": \"doru\",\n \"version\": \"1.0.0\",\n \"type\": \"commonjs\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.mjs\",\n \"require\": \"./dist/index.js\"\n }\n },\n \"bin\": {\n \"doru\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\",\n \"README.md\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"dev:ui\": \"vite\",\n \"type-check\": \"tsc --noEmit\",\n \"storybook\": \"storybook dev -p 6006\",\n \"build-storybook\": \"storybook build\"\n },\n \"devDependencies\": {\n \"@vitejs/plugin-react\": \"^5.1.2\",\n \"@storybook/react-vite\": \"^10.1.4\",\n \"vite\": \"^7.3.0\",\n \"@types/node\": \"^25.0.3\",\n \"@types/react\": \"^19.2.7\",\n \"@types/react-dom\": \"^19.2.3\",\n \"react\": \"^19.2.3\",\n \"react-dom\": \"^19.2.3\",\n \"storybook\": \"^10.1.4\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\"\n },\n \"dependencies\": {\n \"@mswjs/interceptors\": \"^0.40.0\",\n \"@tanstack/react-virtual\": \"^3.13.13\",\n \"@microlink/react-json-view\": \"^1.26.1\",\n \"react-resizable-panels\": \"^4.0.13\",\n \"zod\": \"^4.2.1\"\n },\n \"engines\": {\n \"node\": \">=22\"\n }\n}\n","import pkg from \"../../package.json\";\n\nexport interface CLIOptions {\n // core\n script?: string;\n scriptArgs?: string[];\n output?: string;\n format?: \"json\" | \"jsonl\";\n config?: string;\n debug?: boolean;\n help?: boolean;\n version?: boolean;\n // UI\n ui?: string;\n uiMode?: \"explorer\" | \"live\";\n // limits & filters\n maxFileSize?: string;\n includeHosts?: string[];\n excludeHosts?: string[];\n includePaths?: string[];\n excludePaths?: string[];\n methods?: string[];\n minStatusCode?: number;\n maxStatusCode?: number;\n}\n\nexport const printHelp = (): void => {\n console.log(`\ndoru v${pkg.version}\nMinimal network traffic interceptor for Node.js\n\nUSAGE:\n doru run [options] <script> [-- <script-args>]\n doru --ui <capture.json|jsonl> # Explore\n doru --ui <script> [-- <script-args>] # Live UI (run script + UI)\n\nOPTIONS:\n -o, --output <file> Output file (default: ./network-capture.jsonl)\n -f, --format <fmt> json | jsonl (default: jsonl)\n -c, --config <file> Config file path (JSON or JS)\n --ui <path> Explorer (capture file) or Live (script path)\n --debug Enable debug logs\n --max-file-size <size> e.g. 10MB, 500KB\n --include-hosts <list> Comma-separated host filters (string or /regex/)\n --exclude-hosts <list> Comma-separated host filters\n --include-paths <list> Comma-separated regex patterns\n --exclude-paths <list> Comma-separated regex patterns\n --methods <list> Comma-separated HTTP methods (e.g. GET,POST)\n --min-status <code> Minimum status code\n --max-status <code> Maximum status code\n -h, --help Show help\n -v, --version Show version\n\nEXAMPLES:\n doru run server.js\n doru run app.mjs -- --port 3000\n doru --ui capture.jsonl\n doru --ui app.mjs -- --port 8080 # Live UI\n`);\n};\n\nexport const parseArguments = (args: string[]): CLIOptions => {\n const opts: CLIOptions = {};\n const sep = args.indexOf(\"--\");\n let doruArgs: string[] = args;\n if (sep !== -1) {\n doruArgs = args.slice(0, sep);\n opts.scriptArgs = args.slice(sep + 1);\n }\n\n // handle optional \"run\" subcommand\n if (doruArgs[0] === \"run\") doruArgs = doruArgs.slice(1);\n\n const takeNext = (i: number): string => {\n const n = doruArgs[i + 1];\n if (!n || n.startsWith(\"-\")) throw new Error(`Missing value for ${doruArgs[i]}`);\n return n;\n };\n\n const setNumber = (s: string, flag: string): number => {\n const v = Number.parseInt(s);\n if (Number.isNaN(v)) throw new Error(`${flag} must be a number`);\n return v;\n };\n\n for (let i = 0; i < doruArgs.length; i++) {\n const a = doruArgs[i];\n switch (a) {\n case \"-h\":\n case \"--help\": {\n opts.help = true;\n break;\n }\n case \"-v\":\n case \"--version\": {\n opts.version = true;\n break;\n }\n case \"-o\":\n case \"--output\": {\n opts.output = takeNext(i);\n i++;\n break;\n }\n case \"-f\":\n case \"--format\": {\n const n = takeNext(i);\n if (n !== \"json\" && n !== \"jsonl\") throw new Error(\"--format must be json or jsonl\");\n opts.format = n;\n i++;\n break;\n }\n case \"-c\":\n case \"--config\": {\n opts.config = takeNext(i);\n i++;\n break;\n }\n case \"--ui\": {\n const n = takeNext(i);\n opts.ui = n;\n if (/\\.(json|jsonl)$/i.test(n)) opts.uiMode = \"explorer\";\n else {\n opts.uiMode = \"live\";\n if (!opts.script) opts.script = n;\n }\n i++;\n break;\n }\n case \"--debug\": {\n opts.debug = true;\n break;\n }\n case \"--max-file-size\": {\n opts.maxFileSize = takeNext(i);\n i++;\n break;\n }\n case \"--include-hosts\": {\n opts.includeHosts = takeNext(i)\n .split(\",\")\n .map((s) => s.trim());\n i++;\n break;\n }\n case \"--exclude-hosts\": {\n opts.excludeHosts = takeNext(i)\n .split(\",\")\n .map((s) => s.trim());\n i++;\n break;\n }\n case \"--include-paths\": {\n opts.includePaths = takeNext(i)\n .split(\",\")\n .map((s) => s.trim());\n i++;\n break;\n }\n case \"--exclude-paths\": {\n opts.excludePaths = takeNext(i)\n .split(\",\")\n .map((s) => s.trim());\n i++;\n break;\n }\n case \"--methods\": {\n opts.methods = takeNext(i)\n .split(\",\")\n .map((s) => s.trim().toUpperCase());\n i++;\n break;\n }\n case \"--min-status\": {\n const v = setNumber(takeNext(i), \"--min-status\");\n if (v < 100 || v > 599) throw new Error(\"--min-status must be 100..599\");\n opts.minStatusCode = v;\n i++;\n break;\n }\n case \"--max-status\": {\n const v = setNumber(takeNext(i), \"--max-status\");\n if (v < 100 || v > 599) throw new Error(\"--max-status must be 100..599\");\n opts.maxStatusCode = v;\n i++;\n break;\n }\n default: {\n if (a.startsWith(\"-\")) throw new Error(`Unknown option: ${a}`);\n if (opts.script) throw new Error(`Unexpected argument: ${a}`);\n opts.script = a;\n }\n }\n }\n\n return opts;\n};\n\nexport const parseFileSize = (size: string): number => {\n // eslint-disable-next-line security/detect-unsafe-regex\n const m = /^(\\d+(?:\\.\\d+)?)\\s*(b|kb|mb|gb)?$/i.exec(size.trim());\n if (!m) throw new Error(`Invalid size: ${size}. Use 10MB, 500KB, etc.`);\n const value = Number.parseFloat(m[1]);\n const unit = (m[2] || \"b\").toLowerCase();\n const mul = { b: 1, kb: 1024, mb: 1024 * 1024, gb: 1024 * 1024 * 1024 } as const;\n return Math.floor(value * mul[unit as keyof typeof mul]);\n};\n","import { z } from \"zod\";\n\nconst statusCodesSchema = z\n .object({\n min: z.number().int().min(100).max(599).nullable().default(null),\n max: z.number().int().min(100).max(599).nullable().default(null),\n })\n .refine((s) => s.min === null || s.max === null || s.min <= s.max, {\n message: \"filters.statusCodes.min must be <= filters.statusCodes.max\",\n });\n\nconst filtersSchema = z.object({\n includeHosts: z.array(z.string()).default([]),\n excludeHosts: z.array(z.string()).default([]),\n includePaths: z.array(z.string()).default([]),\n excludePaths: z.array(z.string()).default([]),\n methods: z.array(z.string()).default([]),\n statusCodes: statusCodesSchema.default({ min: null, max: null }),\n minSize: z.number().int().nullable().default(null),\n maxSize: z.number().int().nullable().default(null),\n});\n\nconst performanceSchema = z.object({\n bufferSize: z.number().int().positive().default(1024),\n flushInterval: z.number().int().positive().default(1000),\n compression: z.boolean().default(false), // minimal core: compression disabled by default\n});\n\nexport const doruConfigSchema = z.object({\n enabled: z.boolean().default(true),\n outputFile: z.string().default(\"./network-capture.jsonl\"),\n format: z.enum([\"json\", \"jsonl\"]).default(\"jsonl\"),\n maxFileSize: z\n .number()\n .int()\n .positive()\n .default(10 * 1024 * 1024), // 10MB\n filters: filtersSchema.default({\n includeHosts: [],\n excludeHosts: [],\n includePaths: [],\n excludePaths: [],\n methods: [],\n statusCodes: { min: null, max: null },\n minSize: null,\n maxSize: null,\n }),\n performance: performanceSchema.default({\n bufferSize: 1024,\n flushInterval: 1000,\n compression: false,\n }),\n debug: z.boolean().default(false),\n});\nexport type InterceptorConfig = z.infer<typeof doruConfigSchema>;\n\nconst deepMerge = <T extends Record<string, unknown>>(a: T, b: Partial<T>): T => {\n const out: T = { ...a };\n for (const [k, v] of Object.entries(b || ({} as Partial<T>))) {\n if (v === undefined) continue;\n const key = k as keyof T;\n const av = a[key];\n if (Array.isArray(v)) {\n (out as unknown as Record<string, unknown>)[key as string] = (v as unknown[]).slice();\n } else if (v && typeof v === \"object\" && av && typeof av === \"object\" && !Array.isArray(av)) {\n (out as unknown as Record<string, unknown>)[key as string] = deepMerge(\n av as Record<string, unknown>,\n v as Record<string, unknown>,\n ) as unknown as T[keyof T];\n } else (out as unknown as Record<string, unknown>)[key as string] = v as T[keyof T];\n }\n return out;\n};\n\nconst envDebugDefault = (): boolean => {\n const v = process.env.DORU_DEBUG;\n if (v === \"true\") return true;\n if (v === \"false\") return false;\n const legacy = process.env.NETPEEK_DEBUG;\n if (legacy === \"true\") return true;\n if (legacy === \"false\") return false;\n return false;\n};\n\nconst normalizeConfig = (c: InterceptorConfig): InterceptorConfig => {\n return {\n ...c,\n filters: {\n ...c.filters,\n methods: c.filters.methods.map((m) => m.toUpperCase()),\n },\n };\n};\n\nexport const createDefaultConfig = (user: Partial<InterceptorConfig> = {}): InterceptorConfig => {\n const defaults = doruConfigSchema.parse({});\n const merged = deepMerge(defaults, { ...user, debug: user.debug ?? envDebugDefault() });\n const parsed = doruConfigSchema.parse(merged);\n return normalizeConfig(parsed);\n};\n\nexport const validateConfig = (config: InterceptorConfig): { valid: boolean; errors: string[] } => {\n const res = doruConfigSchema.safeParse(config);\n if (res.success) return { valid: true, errors: [] };\n return {\n valid: false,\n errors: res.error.issues.map((i) => {\n const where = i.path.length > 0 ? ` at ${i.path.join(\".\")}` : \"\";\n return i.message + where;\n }),\n };\n};\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { InterceptorConfig } from \"../core/config\";\nimport type { CLIOptions } from \"./argument-parser\";\nimport { createDefaultConfig } from \"../core/config\";\nimport { parseFileSize } from \"./argument-parser\";\n\nexport const loadConfig = async (configPath?: string): Promise<Partial<InterceptorConfig>> => {\n const candidates =\n configPath ?\n [configPath]\n : [\"doru.config.json\", \"doru.config.js\", \".dorurc.json\", \".dorurc.js\", \"package.json\"];\n\n for (const file of candidates) {\n try {\n if (!fs.existsSync(file)) continue;\n\n if (file.endsWith(\".json\")) {\n const txt = fs.readFileSync(file, \"utf8\");\n const parsed = JSON.parse(txt);\n if (path.basename(file) === \"package.json\") return parsed.doru || {};\n return parsed;\n }\n if (file.endsWith(\".js\")) {\n const full = path.resolve(file);\n const mod: unknown = await import(full);\n const obj = mod as Record<string, unknown> | null;\n const hasDefault = obj && typeof obj === \"object\" && \"default\" in obj;\n return (hasDefault ? (obj as { default: unknown }).default : obj) as Record<string, unknown>;\n }\n } catch (error: unknown) {\n if (configPath) {\n const msg = error instanceof Error ? error.message : String(error);\n throw new Error(`Failed to load config file ${file}: ${msg}`);\n }\n }\n }\n\n return {};\n};\n\nexport const buildConfig = (opts: CLIOptions, fileCfg: Partial<InterceptorConfig>): InterceptorConfig => {\n const base: Partial<InterceptorConfig> = {\n outputFile: opts.output ?? fileCfg.outputFile ?? \"./network-capture.jsonl\",\n format: opts.format ?? fileCfg.format ?? \"jsonl\",\n maxFileSize: fileCfg.maxFileSize ?? 10 * 1024 * 1024,\n filters: {\n includeHosts: opts.includeHosts ?? fileCfg.filters?.includeHosts ?? [],\n excludeHosts: opts.excludeHosts ?? fileCfg.filters?.excludeHosts ?? [],\n includePaths: opts.includePaths ?? fileCfg.filters?.includePaths ?? [],\n excludePaths: opts.excludePaths ?? fileCfg.filters?.excludePaths ?? [],\n methods: opts.methods ?? fileCfg.filters?.methods ?? [],\n statusCodes: {\n min: opts.minStatusCode ?? fileCfg.filters?.statusCodes?.min ?? null,\n max: opts.maxStatusCode ?? fileCfg.filters?.statusCodes?.max ?? null,\n },\n minSize: fileCfg.filters?.minSize ?? null,\n maxSize: fileCfg.filters?.maxSize ?? null,\n },\n performance: fileCfg.performance ?? {\n bufferSize: 1024,\n flushInterval: 1000,\n compression: false,\n },\n debug: opts.debug ?? fileCfg.debug ?? false,\n enabled: true,\n };\n\n if (opts.maxFileSize) base.maxFileSize = parseFileSize(opts.maxFileSize);\n return createDefaultConfig(base);\n};\n","import * as fs from \"fs\";\nimport * as path from \"path\";\n\nexport type ModuleType = \"cjs\" | \"esm\";\nexport interface ModuleDetectionResult {\n type: ModuleType;\n confidence: \"high\" | \"low\" | \"medium\";\n reason: string;\n}\n\nconst tryRead = (filePath: string): string | null => {\n try {\n if (!fs.existsSync(filePath)) return null;\n return fs.readFileSync(filePath, \"utf8\");\n } catch {\n return null;\n }\n};\n\nconst getPackageJsonType = (filePath: string): \"commonjs\" | \"module\" | null => {\n let dir = path.dirname(path.resolve(filePath));\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const parent = path.dirname(dir);\n const pj = path.join(dir, \"package.json\");\n try {\n if (fs.existsSync(pj)) {\n const json = JSON.parse(fs.readFileSync(pj, \"utf8\"));\n if (json.type === \"module\") return \"module\";\n if (json.type === \"commonjs\") return \"commonjs\";\n return \"commonjs\";\n }\n } catch {}\n if (parent === dir) break;\n dir = parent;\n }\n return null;\n};\n\nexport const detectModuleType = (filePath: string): ModuleDetectionResult => {\n const ext = path.extname(filePath);\n if (ext === \".mjs\") return { type: \"esm\", confidence: \"high\", reason: \"File extension .mjs\" };\n if (ext === \".cjs\") return { type: \"cjs\", confidence: \"high\", reason: \"File extension .cjs\" };\n\n if (ext === \".js\") {\n const t = getPackageJsonType(filePath);\n if (t === \"module\") {\n return { type: \"esm\", confidence: \"high\", reason: 'package.json has \"type\":\"module\"' };\n }\n if (t === \"commonjs\") {\n return { type: \"cjs\", confidence: \"high\", reason: 'package.json has \"type\":\"commonjs\"' };\n }\n\n const content = tryRead(filePath);\n if (content !== null) {\n const hasESM = /(^|\\s)import\\s+|(^|\\s)export\\s+/m.test(content);\n const hasCJS = /\\brequire\\s*\\(|\\bmodule\\.exports\\b|\\bexports\\./m.test(content);\n if (hasESM && !hasCJS) return { type: \"esm\", confidence: \"medium\", reason: \"ESM syntax only\" };\n if (hasCJS && !hasESM) return { type: \"cjs\", confidence: \"medium\", reason: \"CommonJS syntax only\" };\n if (hasESM && hasCJS) {\n return { type: \"cjs\", confidence: \"low\", reason: \"Mixed syntax; defaulting to CJS\" };\n }\n }\n }\n\n return { type: \"cjs\", confidence: \"medium\", reason: \"Default (no explicit type)\" };\n};\n","import { spawn } from \"child_process\";\nimport * as fs from \"fs\";\nimport * as net from \"net\";\nimport * as path from \"path\";\nimport { fileURLToPath } from \"url\";\n\nexport const getFilename = (): string => {\n return typeof __filename === \"undefined\" ? fileURLToPath(import.meta.url) : __filename;\n};\n\nexport const getDirname = (): string => {\n return typeof __dirname === \"undefined\" ? path.dirname(getFilename()) : __dirname;\n};\n\nexport const openBrowser = (url: string): void => {\n try {\n if (process.platform === \"darwin\") {\n spawn(\"open\", [url], { stdio: \"ignore\", detached: true }).unref();\n } else if (process.platform === \"win32\") {\n spawn(\"cmd\", [\"/c\", \"start\", \"\", url], { stdio: \"ignore\", detached: true }).unref();\n } else {\n spawn(\"xdg-open\", [url], { stdio: \"ignore\", detached: true }).unref();\n }\n } catch {}\n};\n\nexport const findPort = (start = 8333, attempts = 10): Promise<number> =>\n new Promise((resolve, reject) => {\n let port = start;\n let tried = 0;\n\n const tryNext = (): void => {\n const srv = net.createServer();\n srv.unref();\n srv.once(\"error\", (e: NodeJS.ErrnoException) => {\n if (e.code === \"EADDRINUSE\" && ++tried < attempts) {\n port++;\n tryNext();\n } else {\n reject(e);\n }\n });\n srv.listen(port, \"127.0.0.1\", () => {\n srv.close(() => resolve(port));\n });\n };\n\n tryNext();\n });\n\nexport const isDevMode = (dirname: string): boolean => {\n return dirname.includes(\"src/cli\") || dirname.includes(\"src\\\\cli\");\n};\n\nexport const findUIAsset = (dirname: string): string | null => {\n // production: cli.js is in dist/, ui/app.js is in dist/ui/\n const prodPath = path.join(dirname, \"ui\", \"app.js\");\n if (fs.existsSync(prodPath)) return prodPath;\n\n // dev mode: running from src/cli/, look for dist/ui/app.js at project root\n const devPath = path.resolve(dirname, \"../../dist/ui/app.js\");\n if (fs.existsSync(devPath)) return devPath;\n\n return null;\n};\n","import { type ChildProcess, spawn } from \"child_process\";\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nimport type { InterceptorConfig } from \"../core/config\";\nimport { detectModuleType } from \"../core/module-detection\";\nimport { getDirname } from \"./utils\";\n\nconst __dirname_shim = getDirname();\n\ninterface PreloadPaths {\n cjs: string;\n esm: string;\n tempFiles: string[];\n entryCjs: string;\n}\n\nconst writeTemp = (name: string, content: string): string => {\n const p = path.join(os.tmpdir(), `doru-${process.pid}-${name}`);\n fs.writeFileSync(p, content, \"utf8\");\n return p;\n};\n\nconst genCjsPreload = (): string => `try {\n const b64 = process.env.DORU_CONFIG_BASE64 || '';\n const entry = process.env.DORU_ENTRY_CJS;\n if (!entry) throw new Error('DORU_ENTRY_CJS not set');\n const cfg = b64 ? JSON.parse(Buffer.from(b64, 'base64').toString('utf8')) : {};\n const doru = require(entry);\n const api = doru.createInterceptor(cfg);\n globalThis.__doru__ = api;\n api.start();\n process.on('exit', () => { try { api.stop(); } catch {} });\n} catch (e) {\n console.error('doru preload failed:', e && e.message ? e.message : e);\n}`;\n\nconst genEsmPreload = (): string => `import { createRequire } from 'module';\ntry {\n const b64 = process.env.DORU_CONFIG_BASE64 || '';\n const entry = process.env.DORU_ENTRY_CJS;\n if (!entry) throw new Error('DORU_ENTRY_CJS not set');\n const cfg = b64 ? JSON.parse(Buffer.from(b64, 'base64').toString('utf8')) : {};\n const require = createRequire(import.meta.url);\n const doru = require(entry);\n const api = doru.createInterceptor(cfg);\n globalThis.__doru__ = api;\n api.start();\n process.on('exit', () => { try { api.stop(); } catch {} });\n} catch (e) {\n console.error('doru preload failed:', e && e.message ? e.message : e);\n}`;\n\nconst findLibraryEntry = (): string => {\n const prodEntry = path.resolve(__dirname_shim, \"index.js\");\n if (fs.existsSync(prodEntry)) return prodEntry;\n const devEntry = path.resolve(__dirname_shim, \"../../dist/index.js\");\n if (fs.existsSync(devEntry)) return devEntry;\n throw new Error(\n `doru library not found. Checked:\\n - ${prodEntry}\\n - ${devEntry}\\nRun \"bun run build\" first.`,\n );\n};\n\nlet cleanupRegistered = false;\nlet pendingCleanupFiles: string[] = [];\n\nconst registerProcessCleanup = (files: string[]): void => {\n pendingCleanupFiles = files;\n\n if (cleanupRegistered) return;\n cleanupRegistered = true;\n\n const doCleanup = () => {\n for (const f of pendingCleanupFiles) {\n try {\n fs.unlinkSync(f);\n } catch {}\n }\n pendingCleanupFiles = [];\n };\n\n // register cleanup\n process.on(\"exit\", doCleanup);\n process.on(\"SIGTERM\", () => {\n doCleanup();\n process.exit(143);\n });\n process.on(\"uncaughtException\", (err) => {\n doCleanup();\n console.error(\"Uncaught exception:\", err);\n process.exit(1);\n });\n};\n\nconst preparePreloadArtifacts = (): PreloadPaths => {\n const entryCjs = findLibraryEntry();\n const cjs = writeTemp(\"preload.cjs\", genCjsPreload());\n const esm = writeTemp(\"preload.mjs\", genEsmPreload());\n const tempFiles = [cjs, esm];\n registerProcessCleanup(tempFiles);\n return { cjs, esm, tempFiles, entryCjs };\n};\n\nconst handle = (child: ChildProcess, temps: string[]): Promise<void> =>\n new Promise((resolve, reject) => {\n let cleaned = false;\n const cleanup = () => {\n if (cleaned) return;\n cleaned = true;\n for (const f of temps) {\n try {\n fs.unlinkSync(f);\n } catch {}\n }\n pendingCleanupFiles = pendingCleanupFiles.filter((f) => !temps.includes(f));\n };\n\n child.on(\"close\", (code) => {\n cleanup();\n if (code === 0) resolve();\n else reject(new Error(`Script exited with code ${code}`));\n });\n child.on(\"error\", (err) => {\n cleanup();\n reject(err);\n });\n\n process.on(\"SIGINT\", () => {\n if (cleaned) return;\n\n console.log(\"\\nReceived SIGINT, terminating...\");\n cleanup();\n child.kill(\"SIGTERM\");\n setTimeout(() => {\n child.kill(\"SIGKILL\");\n }, 1000);\n });\n });\n\nconst runCJS = async (script: string, env: NodeJS.ProcessEnv, pl: PreloadPaths, scriptArgs?: string[]) => {\n const args = [\"--require\", pl.cjs, script];\n if (scriptArgs?.length) args.push(...scriptArgs);\n const child = spawn(\"node\", args, { stdio: \"inherit\", env });\n await handle(child, pl.tempFiles);\n};\n\nconst runESM = async (script: string, env: NodeJS.ProcessEnv, pl: PreloadPaths, scriptArgs?: string[]) => {\n const args = [\"--import\", pl.esm, script];\n if (scriptArgs?.length) args.push(...scriptArgs);\n const child = spawn(\"node\", args, { stdio: \"inherit\", env });\n await handle(child, pl.tempFiles);\n};\n\nexport const runScript = async (\n script: string,\n config: InterceptorConfig,\n scriptArgs?: string[],\n): Promise<void> => {\n const detection = detectModuleType(script);\n const artifacts = preparePreloadArtifacts();\n\n const env = {\n ...process.env,\n DORU_CONFIG_BASE64: Buffer.from(JSON.stringify(config), \"utf8\").toString(\"base64\"),\n DORU_ENTRY_CJS: artifacts.entryCjs,\n };\n\n if (detection.type === \"esm\") {\n await runESM(script, env, artifacts, scriptArgs);\n } else {\n await runCJS(script, env, artifacts, scriptArgs);\n }\n};\n","import * as fs from \"fs\";\nimport * as http from \"http\";\nimport * as path from \"path\";\nimport { findUIAsset, isDevMode } from \"./utils\";\n\nexport interface ServerConfig {\n captureFile: string;\n dirname: string;\n}\n\nconst VITE_DEV_PORT = 5173;\n\nconst serveFile = (res: http.ServerResponse, filePath: string, contentType: string): boolean => {\n try {\n if (!fs.existsSync(filePath)) return false;\n const content = fs.readFileSync(filePath, \"utf8\");\n res.writeHead(200, { \"Content-Type\": contentType, \"Cache-Control\": \"no-cache\" });\n res.end(content);\n return true;\n } catch {\n return false;\n }\n};\n\nconst findUIFile = (dirname: string, filename: string): string | null => {\n // production: files in dist/ui/\n const prodPath = path.join(dirname, \"ui\", filename);\n if (fs.existsSync(prodPath)) return prodPath;\n // dev: files in src/ui/\n const devPath = path.resolve(dirname, \"../../src/ui\", filename);\n if (fs.existsSync(devPath)) return devPath;\n return null;\n};\n\nexport const createUIServer = (config: ServerConfig): http.Server => {\n const { captureFile, dirname } = config;\n const devMode = isDevMode(dirname);\n\n return http.createServer((req, res) => {\n if (!req.url) return;\n\n // in dev mode, redirect requests to Vite\n if (devMode && (req.url === \"/\" || req.url.startsWith(\"/ui/\") || req.url.startsWith(\"/src/\"))) {\n res.writeHead(302, { Location: `http://localhost:${VITE_DEV_PORT}${req.url}` });\n res.end();\n return;\n }\n\n if (req.url === \"/\") {\n const htmlPath = findUIFile(dirname, \"index.html\");\n if (!htmlPath || !serveFile(res, htmlPath, \"text/html; charset=utf-8\")) {\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"UI not found. Run 'bun run build' first.\");\n }\n return;\n }\n\n if (req.url === \"/styles.css\") {\n const cssPath = findUIFile(dirname, \"styles.css\");\n if (!cssPath || !serveFile(res, cssPath, \"text/css; charset=utf-8\")) {\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"CSS not found\");\n }\n return;\n }\n\n if (req.url === \"/favicon.svg\" || req.url === \"/favicon-paused.svg\") {\n const filename = req.url.slice(1); // remove leading /\n const faviconPath = findUIFile(dirname, filename);\n if (!faviconPath || !serveFile(res, faviconPath, \"image/svg+xml\")) {\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Favicon not found\");\n }\n return;\n }\n\n if (req.url === \"/app.js\") {\n const jsPath = findUIAsset(dirname);\n if (!jsPath || !serveFile(res, jsPath, \"text/javascript; charset=utf-8\")) {\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"UI bundle not found. Run 'bun run build' first.\");\n }\n return;\n }\n\n if (req.url === \"/api/capture\") {\n try {\n if (!fs.existsSync(captureFile)) {\n res.writeHead(200, { \"Content-Type\": \"application/json\", \"Access-Control-Allow-Origin\": \"*\" });\n res.end(\"[]\");\n return;\n }\n const data = fs.readFileSync(captureFile, \"utf8\");\n res.writeHead(200, { \"Content-Type\": \"application/json\", \"Access-Control-Allow-Origin\": \"*\" });\n res.end(data);\n } catch {\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ error: \"Failed to read capture file\" }));\n }\n return;\n }\n\n if (req.url?.startsWith(\"/api/capture/stream\")) {\n try {\n const url = new URL(req.url, `http://${req.headers.host}`);\n let offset = Number.parseInt(url.searchParams.get(\"offset\") || \"0\");\n\n if (!fs.existsSync(captureFile)) {\n res.writeHead(200, {\n \"Content-Type\": \"application/json\",\n \"Access-Control-Allow-Origin\": \"*\",\n });\n res.end(JSON.stringify({ offset: 0, size: 0, generation: 0, data: \"\" }));\n return;\n }\n\n const stats = fs.statSync(captureFile);\n const fileSize = stats.size;\n const generation = stats.ino;\n\n // rotated\n if (offset > fileSize) {\n offset = 0;\n }\n\n // no new data\n if (offset >= fileSize) {\n res.writeHead(200, {\n \"Content-Type\": \"application/json\",\n \"Access-Control-Allow-Origin\": \"*\",\n });\n res.end(JSON.stringify({ offset: fileSize, size: fileSize, generation, data: \"\" }));\n return;\n }\n\n // read from offset\n const fd = fs.openSync(captureFile, \"r\");\n let data: string;\n try {\n const buffer = Buffer.alloc(fileSize - offset);\n fs.readSync(fd, buffer, 0, buffer.length, offset);\n data = buffer.toString(\"utf8\");\n } finally {\n fs.closeSync(fd);\n }\n\n res.writeHead(200, {\n \"Content-Type\": \"application/json\",\n \"Access-Control-Allow-Origin\": \"*\",\n });\n res.end(JSON.stringify({ offset: fileSize, size: fileSize, generation, data }));\n } catch {\n res.writeHead(500, { \"Content-Type\": \"application/json\" });\n res.end(JSON.stringify({ error: \"Failed to read capture file\" }));\n }\n return;\n }\n\n res.writeHead(404, { \"Content-Type\": \"text/plain\" });\n res.end(\"Not Found\");\n });\n};\n\nexport const startServer = async (server: http.Server, port: number): Promise<string> => {\n await new Promise<void>((resolve) => {\n server.listen(port, resolve);\n });\n return `http://localhost:${port}`;\n};\n\nexport const createShutdownHandler = (server: http.Server): (() => void) => {\n let shutting = false;\n\n return (): void => {\n if (shutting) return;\n shutting = true;\n console.log(\"\\n\\u{1f44b} Shutting down UI...\");\n server.close(() => {\n process.exit(0);\n });\n setTimeout(() => {\n process.exit(0);\n }, 2000);\n };\n};\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { InterceptorConfig } from \"./core/config\";\nimport pkg from \"../package.json\";\nimport { type CLIOptions, parseArguments, printHelp } from \"./cli/argument-parser\";\nimport { buildConfig, loadConfig } from \"./cli/config-loader\";\nimport { runScript } from \"./cli/script-executor\";\nimport { createShutdownHandler, createUIServer, startServer } from \"./cli/server\";\nimport { findPort, getDirname, isDevMode, openBrowser } from \"./cli/utils\";\n\nconst __dirname_shim = getDirname();\n\nconst runScriptWithLiveUI = async (\n script: string,\n cfg: InterceptorConfig,\n args?: string[],\n): Promise<void> => {\n const port = await findPort(8333, 10);\n const server = createUIServer({ captureFile: cfg.outputFile, dirname: __dirname_shim });\n const devMode = isDevMode(__dirname_shim);\n\n const url = await startServer(server, port);\n if (devMode) {\n console.log(`\\u{1f310} doru API at ${url}`);\n console.log(`\\u{1f525} Dev mode: run 'bun run dev:ui' and open http://localhost:5173`);\n } else {\n console.log(`\\u{1f310} doru Live UI at ${url}`);\n openBrowser(url);\n }\n console.log(`\\u{1f3af} Script: ${script}`);\n console.log(`\\u{1f4c1} Capture: ${cfg.outputFile}`);\n console.log(\"Press Ctrl+C to stop\");\n\n const stop = createShutdownHandler(server);\n process.on(\"SIGINT\", stop);\n process.on(\"SIGTERM\", stop);\n\n try {\n await runScript(script, cfg, args);\n console.log(\"\\n\\u{2705} Script finished. UI still running \\u{2014} Ctrl+C to exit.\");\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n console.log(\"\\n\\u{274c} Script exited with error:\", msg);\n console.log(\"UI still running \\u{2014} Ctrl+C to exit.\");\n }\n\n await new Promise(() => {});\n};\n\nconst startExplorer = async (captureFile: string): Promise<void> => {\n const port = await findPort(8333, 10);\n const server = createUIServer({ captureFile, dirname: __dirname_shim });\n const devMode = isDevMode(__dirname_shim);\n\n const url = await startServer(server, port);\n if (devMode) {\n console.log(`\\u{1f310} doru API at ${url}`);\n console.log(`\\u{1f525} Dev mode: run 'bun run dev:ui' and open http://localhost:5173`);\n } else {\n console.log(`\\u{1f310} doru UI at ${url}`);\n openBrowser(url);\n }\n console.log(`\\u{1f4c1} Exploring: ${path.resolve(captureFile)}`);\n console.log(\"Press Ctrl+C to stop\");\n\n process.on(\"SIGINT\", createShutdownHandler(server));\n};\n\nconst main = async (): Promise<void> => {\n try {\n const argv = process.argv.slice(2);\n const opts: CLIOptions = parseArguments(argv);\n\n if (opts.help) {\n printHelp();\n return;\n }\n if (opts.version) {\n console.log(pkg.version);\n return;\n }\n\n // explorer mode\n if (opts.ui && opts.uiMode === \"explorer\") {\n await startExplorer(opts.ui);\n return;\n }\n\n // validate script\n if (!opts.script) {\n console.error(\"Error: No script specified. Use --help.\");\n process.exitCode = 1;\n return;\n }\n if (!fs.existsSync(opts.script)) {\n console.error(`Error: Script not found: ${opts.script}`);\n process.exitCode = 1;\n return;\n }\n\n const fileConfig = await loadConfig(opts.config);\n const cfg = buildConfig(opts, fileConfig);\n\n if (opts.uiMode === \"live\") {\n await runScriptWithLiveUI(opts.script, cfg, opts.scriptArgs);\n } else {\n await runScript(opts.script, cfg, opts.scriptArgs);\n }\n } catch (error: unknown) {\n const msg = error instanceof Error ? error.message : String(error);\n console.error(\"Error:\", msg);\n process.exitCode = 1;\n }\n};\n\nmain().catch((error: unknown) => {\n console.error(\"Fatal:\", error);\n process.exitCode = 1;\n});\n"]}
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const doruConfigSchema: z.ZodObject<{
|
|
4
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
outputFile: z.ZodDefault<z.ZodString>;
|
|
6
|
+
format: z.ZodDefault<z.ZodEnum<{
|
|
7
|
+
json: "json";
|
|
8
|
+
jsonl: "jsonl";
|
|
9
|
+
}>>;
|
|
10
|
+
maxFileSize: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
filters: z.ZodDefault<z.ZodObject<{
|
|
12
|
+
includeHosts: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
13
|
+
excludeHosts: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
14
|
+
includePaths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
15
|
+
excludePaths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
16
|
+
methods: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
17
|
+
statusCodes: z.ZodDefault<z.ZodObject<{
|
|
18
|
+
min: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
19
|
+
max: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
20
|
+
}, z.core.$strip>>;
|
|
21
|
+
minSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
22
|
+
maxSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
23
|
+
}, z.core.$strip>>;
|
|
24
|
+
performance: z.ZodDefault<z.ZodObject<{
|
|
25
|
+
bufferSize: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
flushInterval: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
compression: z.ZodDefault<z.ZodBoolean>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
debug: z.ZodDefault<z.ZodBoolean>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
type InterceptorConfig = z.infer<typeof doruConfigSchema>;
|
|
32
|
+
|
|
33
|
+
declare class StorageManager {
|
|
34
|
+
private stream;
|
|
35
|
+
private size;
|
|
36
|
+
private counter;
|
|
37
|
+
private isFirst;
|
|
38
|
+
private closed;
|
|
39
|
+
private fm;
|
|
40
|
+
private fmt;
|
|
41
|
+
private log;
|
|
42
|
+
private cfg;
|
|
43
|
+
constructor(config: InterceptorConfig);
|
|
44
|
+
write(data: CaptureData): void;
|
|
45
|
+
close(): void;
|
|
46
|
+
private initFile;
|
|
47
|
+
private rotate;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
type HeaderValue = string[] | string;
|
|
51
|
+
interface CaptureData {
|
|
52
|
+
id: string;
|
|
53
|
+
timestamp: string;
|
|
54
|
+
type: "error" | "request" | "response";
|
|
55
|
+
method?: string;
|
|
56
|
+
url?: string;
|
|
57
|
+
hostname?: string;
|
|
58
|
+
port?: number;
|
|
59
|
+
path?: string;
|
|
60
|
+
headers?: Record<string, HeaderValue>;
|
|
61
|
+
body?: Buffer | string | null;
|
|
62
|
+
statusCode?: number;
|
|
63
|
+
statusMessage?: string;
|
|
64
|
+
duration?: number;
|
|
65
|
+
error?: string;
|
|
66
|
+
captureId: string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
declare class NetworkInterceptor {
|
|
70
|
+
private started;
|
|
71
|
+
private interceptor;
|
|
72
|
+
private filter;
|
|
73
|
+
private counter;
|
|
74
|
+
private pendings;
|
|
75
|
+
private log;
|
|
76
|
+
private storage;
|
|
77
|
+
constructor(cfg: InterceptorConfig, storage: StorageManager);
|
|
78
|
+
private wire;
|
|
79
|
+
start(): void;
|
|
80
|
+
stop(): void;
|
|
81
|
+
updateConfig(next: InterceptorConfig): void;
|
|
82
|
+
private static getRequestData;
|
|
83
|
+
private static getResponseData;
|
|
84
|
+
private captureRequest;
|
|
85
|
+
private captureResponse;
|
|
86
|
+
private captureError;
|
|
87
|
+
private static buildUrl;
|
|
88
|
+
private static newCaptureId;
|
|
89
|
+
private newRequestId;
|
|
90
|
+
updateStorage(storage: StorageManager): void;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
declare const createInterceptor: (userConfig?: Partial<InterceptorConfig>) => {
|
|
94
|
+
start(): void;
|
|
95
|
+
stop(): void;
|
|
96
|
+
updateConfig(next: Partial<InterceptorConfig>): void;
|
|
97
|
+
getConfig(): InterceptorConfig;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export { type InterceptorConfig, NetworkInterceptor, StorageManager, createInterceptor };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
declare const doruConfigSchema: z.ZodObject<{
|
|
4
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
5
|
+
outputFile: z.ZodDefault<z.ZodString>;
|
|
6
|
+
format: z.ZodDefault<z.ZodEnum<{
|
|
7
|
+
json: "json";
|
|
8
|
+
jsonl: "jsonl";
|
|
9
|
+
}>>;
|
|
10
|
+
maxFileSize: z.ZodDefault<z.ZodNumber>;
|
|
11
|
+
filters: z.ZodDefault<z.ZodObject<{
|
|
12
|
+
includeHosts: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
13
|
+
excludeHosts: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
14
|
+
includePaths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
15
|
+
excludePaths: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
16
|
+
methods: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
17
|
+
statusCodes: z.ZodDefault<z.ZodObject<{
|
|
18
|
+
min: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
19
|
+
max: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
20
|
+
}, z.core.$strip>>;
|
|
21
|
+
minSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
22
|
+
maxSize: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
|
|
23
|
+
}, z.core.$strip>>;
|
|
24
|
+
performance: z.ZodDefault<z.ZodObject<{
|
|
25
|
+
bufferSize: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
flushInterval: z.ZodDefault<z.ZodNumber>;
|
|
27
|
+
compression: z.ZodDefault<z.ZodBoolean>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
debug: z.ZodDefault<z.ZodBoolean>;
|
|
30
|
+
}, z.core.$strip>;
|
|
31
|
+
type InterceptorConfig = z.infer<typeof doruConfigSchema>;
|
|
32
|
+
|
|
33
|
+
declare class StorageManager {
|
|
34
|
+
private stream;
|
|
35
|
+
private size;
|
|
36
|
+
private counter;
|
|
37
|
+
private isFirst;
|
|
38
|
+
private closed;
|
|
39
|
+
private fm;
|
|
40
|
+
private fmt;
|
|
41
|
+
private log;
|
|
42
|
+
private cfg;
|
|
43
|
+
constructor(config: InterceptorConfig);
|
|
44
|
+
write(data: CaptureData): void;
|
|
45
|
+
close(): void;
|
|
46
|
+
private initFile;
|
|
47
|
+
private rotate;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
type HeaderValue = string[] | string;
|
|
51
|
+
interface CaptureData {
|
|
52
|
+
id: string;
|
|
53
|
+
timestamp: string;
|
|
54
|
+
type: "error" | "request" | "response";
|
|
55
|
+
method?: string;
|
|
56
|
+
url?: string;
|
|
57
|
+
hostname?: string;
|
|
58
|
+
port?: number;
|
|
59
|
+
path?: string;
|
|
60
|
+
headers?: Record<string, HeaderValue>;
|
|
61
|
+
body?: Buffer | string | null;
|
|
62
|
+
statusCode?: number;
|
|
63
|
+
statusMessage?: string;
|
|
64
|
+
duration?: number;
|
|
65
|
+
error?: string;
|
|
66
|
+
captureId: string;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
declare class NetworkInterceptor {
|
|
70
|
+
private started;
|
|
71
|
+
private interceptor;
|
|
72
|
+
private filter;
|
|
73
|
+
private counter;
|
|
74
|
+
private pendings;
|
|
75
|
+
private log;
|
|
76
|
+
private storage;
|
|
77
|
+
constructor(cfg: InterceptorConfig, storage: StorageManager);
|
|
78
|
+
private wire;
|
|
79
|
+
start(): void;
|
|
80
|
+
stop(): void;
|
|
81
|
+
updateConfig(next: InterceptorConfig): void;
|
|
82
|
+
private static getRequestData;
|
|
83
|
+
private static getResponseData;
|
|
84
|
+
private captureRequest;
|
|
85
|
+
private captureResponse;
|
|
86
|
+
private captureError;
|
|
87
|
+
private static buildUrl;
|
|
88
|
+
private static newCaptureId;
|
|
89
|
+
private newRequestId;
|
|
90
|
+
updateStorage(storage: StorageManager): void;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
declare const createInterceptor: (userConfig?: Partial<InterceptorConfig>) => {
|
|
94
|
+
start(): void;
|
|
95
|
+
stop(): void;
|
|
96
|
+
updateConfig(next: Partial<InterceptorConfig>): void;
|
|
97
|
+
getConfig(): InterceptorConfig;
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export { type InterceptorConfig, NetworkInterceptor, StorageManager, createInterceptor };
|