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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/config.ts","../src/core/filters.ts","../src/core/logging.ts","../src/core/interceptor.ts","../src/core/storage/data-serializer.ts","../src/core/storage/file-manager.ts","../src/core/storage/formats.ts","../src/core/storage/storage.ts","../src/index.ts"],"names":["z","path","BatchInterceptor","ClientRequestInterceptor","FetchInterceptor","zlib","fs"],"mappings":"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","file":"index.js","sourcesContent":["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 type { RequestData, ResponseData } from \"../types\";\nimport type { InterceptorConfig } from \"./config\";\n\nexport type { RequestData, ResponseData } from \"../types\";\n\nexport class FilterEngine {\n private cfg: InterceptorConfig[\"filters\"];\n constructor(cfg: InterceptorConfig[\"filters\"]) {\n this.cfg = cfg;\n }\n\n updateConfig(next: InterceptorConfig[\"filters\"]) {\n this.cfg = next;\n }\n\n shouldCaptureRequest(req: RequestData): boolean {\n if (!this.checkHost(req.hostname)) return false;\n if (!this.checkPath(req.path)) return false;\n if (!this.checkMethod(req.method)) return false;\n if (!this.checkSize(req.body)) return false;\n return true;\n }\n\n shouldCaptureResponse(res: ResponseData): boolean {\n if (!this.checkStatus(res.statusCode)) return false;\n if (!this.checkSize(res.body)) return false;\n return true;\n }\n\n private checkHost(host: string): boolean {\n const { includeHosts, excludeHosts } = this.cfg;\n if (includeHosts.length > 0) {\n const ok = includeHosts.some((p) => FilterEngine.matchStringOrRegex(host, p));\n if (!ok) return false;\n }\n if (excludeHosts.length > 0) {\n const hit = excludeHosts.some((p) => FilterEngine.matchStringOrRegex(host, p));\n if (hit) return false;\n }\n return true;\n }\n\n private checkPath(path: string): boolean {\n const { includePaths, excludePaths } = this.cfg;\n if (includePaths.length > 0) {\n const ok = includePaths.some((p) => FilterEngine.matchRegexSafe(path, p));\n if (!ok) return false;\n }\n if (excludePaths.length > 0) {\n const hit = excludePaths.some((p) => FilterEngine.matchRegexSafe(path, p));\n if (hit) return false;\n }\n return true;\n }\n\n private checkMethod(method: string): boolean {\n const { methods } = this.cfg;\n if (methods.length === 0) return true;\n return methods.includes(method.toUpperCase());\n }\n\n private checkStatus(code: number): boolean {\n const { min, max } = this.cfg.statusCodes;\n if (min !== null && code < min) return false;\n if (max !== null && code > max) return false;\n return true;\n }\n\n private checkSize(body: Buffer | string | null | undefined): boolean {\n if (!body) return true;\n const size = Buffer.isBuffer(body) ? body.length : Buffer.byteLength(body);\n const { minSize, maxSize } = this.cfg;\n if (minSize !== null && size < minSize) return false;\n if (maxSize !== null && size > maxSize) return false;\n return true;\n }\n\n // accept user-provided regex in /.../ form, otherwise do substring match\n private static matchStringOrRegex(value: string, pattern: string): boolean {\n if (pattern.startsWith(\"/\") && pattern.endsWith(\"/\")) {\n try {\n // eslint-disable-next-line security/detect-non-literal-regexp\n return new RegExp(pattern.slice(1, -1)).test(value);\n } catch {\n return value.includes(pattern);\n }\n }\n return value.includes(pattern);\n }\n\n private static matchRegexSafe(value: string, pattern: string): boolean {\n try {\n // eslint-disable-next-line security/detect-non-literal-regexp\n return new RegExp(pattern).test(value);\n } catch {\n return value.includes(pattern);\n }\n }\n}\n","import type { InterceptorConfig } from \"./config\";\n\nexport class DebugLogger {\n private cfg: InterceptorConfig;\n constructor(cfg: InterceptorConfig) {\n this.cfg = cfg;\n }\n\n info(msg: string, data?: unknown) {\n if (!this.cfg.debug) return;\n if (data === undefined) console.log(msg);\n else console.log(msg, data);\n }\n\n error(msg: string, err?: unknown) {\n if (!this.cfg.debug) return;\n if (err === undefined) console.error(msg);\n else console.error(msg, err);\n }\n\n tag(tag: string, msg: string, data?: unknown) {\n this.info(`${tag} ${msg}`, data);\n }\n}\n\nexport const createDebugLogger = (cfg: InterceptorConfig) => new DebugLogger(cfg);\n","import { BatchInterceptor } from \"@mswjs/interceptors\";\nimport { ClientRequestInterceptor } from \"@mswjs/interceptors/ClientRequest\";\nimport { FetchInterceptor } from \"@mswjs/interceptors/fetch\";\nimport * as zlib from \"zlib\";\nimport type { CaptureData, RequestData, ResponseData } from \"../types\";\nimport type { InterceptorConfig } from \"./config\";\nimport type { StorageManager } from \"./storage/storage\";\nimport { FilterEngine } from \"./filters\";\nimport { createDebugLogger, type DebugLogger } from \"./logging\";\n\nexport type { CaptureData } from \"../types\";\n\ninterface Pending {\n captureId: string;\n start: number;\n hostname: string;\n method: string;\n}\n\nconst isErrorPayload = (p: unknown): p is { error: Error; requestId: string } => {\n return (\n p !== null &&\n typeof p === \"object\" &&\n \"requestId\" in p &&\n typeof (p as Record<string, unknown>).requestId === \"string\"\n );\n};\n\nexport class NetworkInterceptor {\n private started = false;\n private interceptor: BatchInterceptor<[ClientRequestInterceptor, FetchInterceptor]>;\n private filter: FilterEngine;\n private counter = 0;\n private pendings = new Map<string, Pending>();\n private log: DebugLogger;\n private storage: StorageManager;\n\n constructor(cfg: InterceptorConfig, storage: StorageManager) {\n this.storage = storage;\n this.filter = new FilterEngine(cfg.filters);\n this.log = createDebugLogger(cfg);\n this.interceptor = new BatchInterceptor({\n name: \"doru\",\n interceptors: [new ClientRequestInterceptor(), new FetchInterceptor()],\n });\n this.wire();\n }\n\n private wire() {\n // request\n this.interceptor.on(\n \"request\",\n async ({ request, requestId }: { request: Request; requestId: string }) => {\n try {\n if (request.url.startsWith(\"data:\") || request.url.startsWith(\"blob:\")) return;\n\n const captureId = NetworkInterceptor.newCaptureId();\n const start = Date.now();\n const req = await NetworkInterceptor.getRequestData(request);\n\n if (!this.filter.shouldCaptureRequest(req)) {\n this.log.tag(\"📤\", \"Request filtered\", req.hostname);\n return;\n }\n\n // Store only essential data - body is already written to storage\n this.pendings.set(requestId, {\n captureId,\n start,\n hostname: req.hostname,\n method: req.method,\n });\n this.captureRequest(captureId, req);\n } catch (error) {\n this.log.error(\"Request intercept error\", error);\n }\n },\n );\n\n // response\n this.interceptor.on(\n \"response\",\n async ({ response, requestId }: { response: Response; requestId: string }) => {\n try {\n const pending = this.pendings.get(requestId);\n if (!pending) return;\n\n this.pendings.delete(requestId);\n const res = await NetworkInterceptor.getResponseData(response);\n\n if (!this.filter.shouldCaptureResponse(res)) return;\n this.captureResponse(pending.captureId, res, pending.start);\n } catch (error) {\n this.log.error(\"Response intercept error\", error);\n }\n },\n );\n\n // error handlers\n const handleErrorEvent =\n (event: string) =>\n (payload: unknown): void => {\n if (!isErrorPayload(payload)) return;\n const { error, requestId } = payload;\n try {\n const pending = this.pendings.get(requestId);\n if (!pending) return;\n this.pendings.delete(requestId);\n this.captureError(pending.captureId, error, pending.start);\n } catch (error_) {\n this.log.error(`${event} handler error`, error_);\n }\n };\n this.interceptor.on(\"unhandledException\", handleErrorEvent(\"unhandledException\"));\n }\n\n start(): void {\n if (this.started) return;\n this.started = true;\n this.interceptor.apply();\n this.log.tag(\"🔧\", \"Network interception started\");\n }\n\n stop(): void {\n if (!this.started) return;\n this.started = false;\n this.interceptor.dispose();\n this.pendings.clear();\n this.log.tag(\"🔧\", \"Network interception stopped\");\n }\n\n updateConfig(next: InterceptorConfig) {\n this.filter.updateConfig(next.filters);\n }\n\n private static async getRequestData(request: Request): Promise<RequestData> {\n const url = new URL(request.url);\n const headers: Record<string, string> = {};\n for (const [k, v] of request.headers.entries()) {\n headers[k.toLowerCase()] = v;\n }\n\n let body: Buffer | null = null;\n if (request.body && [\"PATCH\", \"POST\", \"PUT\"].includes(request.method.toUpperCase())) {\n try {\n const cloned = request.clone();\n const ab = await cloned.arrayBuffer();\n body = ab.byteLength > 0 ? Buffer.from(ab) : null;\n } catch {}\n }\n\n return {\n method: request.method,\n hostname: url.hostname,\n port: url.port ? Number.parseInt(url.port) : undefined,\n path: url.pathname + url.search,\n protocol: url.protocol.replace(/:$/, \"\"),\n headers,\n body,\n };\n }\n\n private static async getResponseData(response: Response): Promise<ResponseData> {\n const headers: Record<string, string> = {};\n for (const [k, v] of response.headers.entries()) {\n headers[k.toLowerCase()] = v;\n }\n\n let body: Buffer | null = null;\n try {\n const cloned = response.clone();\n const ab = await cloned.arrayBuffer();\n if (ab.byteLength > 0) {\n body = Buffer.from(ab);\n\n const enc = headers[\"content-encoding\"];\n if (enc && enc.includes(\"gzip\") && body) {\n try {\n const head = body.toString(\"utf8\", 0, Math.min(body.length, 100));\n const looksText = /^[\\s\\u0020-\\u007E]*$/.test(head) && /^\\s*[<[{]/.test(head.trim());\n if (!looksText) body = zlib.gunzipSync(body);\n } catch {}\n }\n }\n } catch {}\n\n return {\n statusCode: response.status,\n statusMessage: response.statusText,\n headers,\n body,\n };\n }\n\n private captureRequest(captureId: string, req: RequestData) {\n const rec: CaptureData = {\n id: this.newRequestId(),\n timestamp: new Date().toISOString(),\n type: \"request\",\n method: req.method,\n hostname: req.hostname,\n port: req.port,\n path: req.path,\n url: NetworkInterceptor.buildUrl(req),\n headers: req.headers,\n body: req.body ?? null,\n captureId,\n };\n this.storage.write(rec);\n }\n\n private captureResponse(captureId: string, res: ResponseData, start: number) {\n const rec: CaptureData = {\n id: this.newRequestId(),\n timestamp: new Date().toISOString(),\n type: \"response\",\n statusCode: res.statusCode,\n statusMessage: res.statusMessage,\n headers: res.headers,\n body: res.body ?? null,\n duration: Date.now() - start,\n captureId,\n };\n this.storage.write(rec);\n }\n\n private captureError(captureId: string, error: Error, start: number) {\n const rec: CaptureData = {\n id: this.newRequestId(),\n timestamp: new Date().toISOString(),\n type: \"error\",\n error: error?.message ?? String(error),\n duration: Date.now() - start,\n captureId,\n };\n this.storage.write(rec);\n }\n\n private static buildUrl(req: RequestData): string {\n const proto = req.protocol;\n const port =\n req.port && ((proto === \"http\" && req.port !== 80) || (proto === \"https\" && req.port !== 443)) ?\n `:${req.port}`\n : \"\";\n return `${proto}://${req.hostname}${port}${req.path}`;\n }\n\n private static newCaptureId(): string {\n return `cap-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n }\n\n private newRequestId(): string {\n return `req-${++this.counter}-${Date.now()}`;\n }\n\n public updateStorage(storage: StorageManager): void {\n this.storage = storage;\n }\n}\n","import type { BinaryBodyData, CaptureData } from \"../../types\";\n\nexport const DataSerializer = {\n serialize(data: CaptureData, compact: boolean): string {\n const { body, ...rest } = data;\n let outBody: BinaryBodyData | string | null = null;\n if (typeof body === \"string\") {\n outBody = body;\n } else if (body && Buffer.isBuffer(body)) {\n if (DataSerializer.isTextContent(body, data.headers)) {\n outBody = body.toString(\"utf8\");\n } else {\n outBody = {\n type: \"buffer\",\n data: body.toString(\"base64\"),\n encoding: \"base64\",\n } satisfies BinaryBodyData;\n }\n }\n const out = { ...rest, body: outBody };\n return JSON.stringify(out, null, compact ? 0 : 2);\n },\n\n isTextContent(buffer: Buffer, headers?: Record<string, string[] | string>): boolean {\n if (buffer.length === 0) return true;\n\n const getHeader = (name: string) => {\n if (!headers) return undefined;\n const v = headers[name] ?? headers[name.toLowerCase()] ?? headers[name.toUpperCase()];\n return Array.isArray(v) ? v[0] : v;\n };\n\n const ct = getHeader(\"content-type\");\n if (ct) {\n // eslint-disable-next-line security/detect-unsafe-regex\n if (/^(text\\/|application\\/(json|xml|javascript|x-www-form-urlencoded))/.test(ct)) return true;\n // eslint-disable-next-line security/detect-unsafe-regex\n if (/^(image\\/|video\\/|audio\\/|application\\/(pdf|zip|octet-stream))/.test(ct)) return false;\n }\n\n const sampleSize = Math.min(buffer.length, 1024);\n const sample = buffer.subarray(0, sampleSize);\n let textish = 0;\n for (const byte of sample) {\n if ((byte >= 32 && byte <= 126) || byte === 9 || byte === 10 || byte === 13 || byte >= 128) textish++;\n }\n return textish / sample.length > 0.9;\n },\n} as const;\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { InterceptorConfig } from \"../config\";\n\nexport class FileManager {\n private cfg: InterceptorConfig;\n constructor(cfg: InterceptorConfig) {\n this.cfg = cfg;\n }\n\n getExt(): string {\n return this.cfg.format === \"jsonl\" ? \".jsonl\" : \".json\";\n }\n\n genPath(counter: number): string {\n const ext = this.getExt();\n const base = path.basename(this.cfg.outputFile, path.extname(this.cfg.outputFile));\n const dir = path.dirname(this.cfg.outputFile);\n const file = counter === 0 ? `${base}${ext}` : `${base}-${counter}${ext}`;\n return path.join(dir, file);\n }\n\n private static ensureDir(filePath: string) {\n const dir = path.dirname(filePath);\n if (!fs.existsSync(dir)) fs.mkdirSync(dir, { recursive: true });\n }\n\n shouldRotate(currentSize: number): boolean {\n return currentSize > this.cfg.maxFileSize;\n }\n\n static createWriteStream(filePath: string): fs.WriteStream {\n FileManager.ensureDir(filePath);\n return fs.createWriteStream(filePath, { flags: \"w\", encoding: \"utf8\" });\n }\n}\n","import * as fs from \"fs\";\n\nexport interface FormatHandler {\n writeHeader: (stream: fs.WriteStream) => void;\n formatEntry: (json: string, isFirst: boolean) => string;\n getHeaderSize: () => number;\n close: (stream: fs.WriteStream, isFirst: boolean) => void;\n}\n\nconst JsonFormatter: FormatHandler = {\n writeHeader(stream) {\n stream.write(\"[\\n\");\n },\n formatEntry(json, isFirst) {\n return isFirst ? ` ${json}` : `,\\n ${json}`;\n },\n getHeaderSize() {\n return 2;\n },\n close(stream, isFirst) {\n if (isFirst) stream.write(\"]\");\n else stream.write(\"\\n]\");\n },\n};\n\nconst StreamFormatter: FormatHandler = {\n writeHeader() {},\n formatEntry(json) {\n return `${json}\\n`;\n },\n getHeaderSize() {\n return 0;\n },\n close() {},\n};\n\nexport const createFormatHandler = (fmt: \"json\" | \"jsonl\"): FormatHandler =>\n fmt === \"json\" ? JsonFormatter : StreamFormatter;\n","import * as fs from \"fs\";\nimport type { InterceptorConfig } from \"../config\";\nimport type { CaptureData } from \"../interceptor\";\nimport { createDebugLogger, type DebugLogger } from \"../logging\";\nimport { DataSerializer } from \"./data-serializer\";\nimport { FileManager } from \"./file-manager\";\nimport { createFormatHandler, type FormatHandler } from \"./formats\";\n\nexport class StorageManager {\n private stream: fs.WriteStream | null = null;\n private size = 0;\n private counter = 0;\n private isFirst = true;\n private closed = false;\n\n private fm: FileManager;\n private fmt: FormatHandler;\n private log: DebugLogger;\n private cfg: InterceptorConfig;\n constructor(config: InterceptorConfig) {\n this.cfg = config;\n this.fm = new FileManager(config);\n this.fmt = createFormatHandler(config.format);\n this.log = createDebugLogger(config);\n this.initFile();\n }\n\n write(data: CaptureData): void {\n if (this.closed || !this.stream) return;\n try {\n if (this.fm.shouldRotate(this.size)) this.rotate();\n\n const compact = this.cfg.format === \"jsonl\";\n const json = DataSerializer.serialize(data, compact);\n const chunk = this.fmt.formatEntry(json, this.isFirst);\n\n this.stream.write(chunk);\n this.size += Buffer.byteLength(chunk);\n if (this.isFirst) this.isFirst = false;\n\n this.log.tag(\"💾\", `Wrote ${Buffer.byteLength(chunk)} bytes (${data.type})`);\n } catch (error) {\n this.log.error(\"Storage write error:\", error);\n }\n }\n\n close(): void {\n if (this.closed || !this.stream) return;\n try {\n this.fmt.close(this.stream, this.isFirst);\n this.stream.end();\n this.stream = null;\n this.closed = true;\n this.log.tag(\"💾\", \"Storage closed\");\n } catch {}\n }\n\n private initFile(): void {\n try {\n const filePath = this.fm.genPath(this.counter);\n this.stream = FileManager.createWriteStream(filePath);\n this.size = this.fmt.getHeaderSize();\n this.isFirst = true;\n this.fmt.writeHeader(this.stream);\n\n if (!this.stream.writableNeedDrain) {\n this.stream.cork();\n this.stream.uncork();\n }\n this.log.tag(\"📁\", `Writing to ${filePath}`);\n } catch (error) {\n this.log.error(\"Storage init error:\", error);\n }\n }\n\n private rotate(): void {\n if (this.stream) {\n this.fmt.close(this.stream, this.isFirst);\n this.stream.end();\n }\n this.counter++;\n this.initFile();\n }\n}\n","import { createDefaultConfig, type InterceptorConfig } from \"./core/config\";\nimport { NetworkInterceptor } from \"./core/interceptor\";\nimport { StorageManager } from \"./core/storage/storage\";\n\nexport const createInterceptor = (userConfig: Partial<InterceptorConfig> = {}) => {\n let config: InterceptorConfig = createDefaultConfig(userConfig);\n let storage = new StorageManager(config);\n const interceptor = new NetworkInterceptor(config, storage);\n\n const api = {\n start(): void {\n interceptor.start();\n },\n stop(): void {\n try {\n interceptor.stop();\n } finally {\n storage.close();\n }\n },\n updateConfig(next: Partial<InterceptorConfig>): void {\n const updated = createDefaultConfig({ ...config, ...next });\n const old = config;\n config = updated;\n\n // update config\n interceptor.updateConfig(updated);\n\n // replace storage if file/format/size/compression changed\n const changed =\n updated.outputFile !== old.outputFile ||\n updated.format !== old.format ||\n updated.maxFileSize !== old.maxFileSize ||\n updated.performance.compression !== old.performance.compression;\n\n if (changed) {\n storage.close();\n storage = new StorageManager(updated);\n interceptor.updateStorage(storage);\n }\n },\n getConfig(): InterceptorConfig {\n return config;\n },\n };\n\n return api;\n};\n\nexport type { InterceptorConfig } from \"./core/config\";\nexport { NetworkInterceptor } from \"./core/interceptor\";\nexport { StorageManager } from \"./core/storage/storage\";\n"]}