{"version":3,"sources":["/home/mkabumattar/work/withrawi/rawi/dist/chunk-I2DWEYYV.cjs","../src/core/content-filter/middleware.ts"],"names":["createFilterMiddleware","options","filter","ContentFilter","providerFn","credentials","prompt","filteredPromptResult","filteredPrompt","totalFiltered","sum","count"],"mappings":"AAAA;AACA,wDAAwC,SCQxBA,CAAAA,CAAuBC,CAAAA,CAAmC,CAAC,CAAA,CAAG,CAC5E,IAAMC,CAAAA,CACJD,CAAAA,CAAQ,MAAA,EACR,IAAIE,wBAAAA,CAAcF,CAAAA,CAAQ,aAAA,CAAe,CAACA,CAAAA,CAAQ,aAAa,CAAA,CAEjE,OAAO,QAAA,CACLG,CAAAA,CAIA,CACA,OAAO,MAAA,QAAA,CACLC,CAAAA,CACAC,CAAAA,CAC4B,CAC5B,IAAMC,CAAAA,CAAuBL,CAAAA,CAAO,aAAA,CAAcI,CAAM,CAAA,CAClDE,CAAAA,CAAiBD,CAAAA,CAAqB,YAAA,CAE5C,EAAA,CACEN,CAAAA,CAAQ,QAAA,EACR,MAAA,CAAO,IAAA,CAAKM,CAAAA,CAAqB,WAAW,CAAA,CAAE,MAAA,CAAS,CAAA,CACvD,CACA,IAAME,CAAAA,CAAgB,MAAA,CAAO,MAAA,CAC3BF,CAAAA,CAAqB,WACvB,CAAA,CAAE,MAAA,CAAO,CAACG,CAAAA,CAAKC,CAAAA,CAAAA,EAAUD,CAAAA,CAAMC,CAAAA,CAAO,CAAC,CAAA,CAEvC,OAAA,CAAQ,GAAA,CAAI,uDAAgD,CAAA,CAC5D,OAAA,CAAQ,GAAA,CAAI,CAAA,sBAAA,EAAyBF,CAAa,CAAA,CAAA;AAkC1D,kBAAA;ADnEka","file":"/home/mkabumattar/work/withrawi/rawi/dist/chunk-I2DWEYYV.cjs","sourcesContent":[null,"import type {RawiCredentials, StreamingResponse} from '../shared/index.js';\nimport {ContentFilter, type FilterOptions} from './content-filter.js';\n\nexport interface FilterMiddlewareOptions {\n  filter?: ContentFilter;\n  filterOptions?: Partial<FilterOptions>;\n  logStats?: boolean;\n}\n\nexport function createFilterMiddleware(options: FilterMiddlewareOptions = {}) {\n  const filter =\n    options.filter ||\n    new ContentFilter(options.filterOptions, !options.filterOptions);\n\n  return function filterMiddleware(\n    providerFn: (\n      credentials: RawiCredentials,\n      prompt: string,\n    ) => Promise<StreamingResponse>,\n  ) {\n    return async function wrappedProviderFn(\n      credentials: RawiCredentials,\n      prompt: string,\n    ): Promise<StreamingResponse> {\n      const filteredPromptResult = filter.filterContent(prompt);\n      const filteredPrompt = filteredPromptResult.filteredText;\n\n      if (\n        options.logStats &&\n        Object.keys(filteredPromptResult.filterCount).length > 0\n      ) {\n        const totalFiltered = Object.values(\n          filteredPromptResult.filterCount,\n        ).reduce((sum, count) => sum + count, 0);\n\n        console.log('📊 Filtered sensitive information from prompt:');\n        console.log(`Total filtered items: ${totalFiltered}`);\n\n        console.log('\\nBreakdown by type:');\n        for (const [type, count] of Object.entries(\n          filteredPromptResult.filterCount,\n        )) {\n          const percentage = Math.round((count / totalFiltered) * 100);\n          console.log(`  ${type.padEnd(15)}: ${count} (${percentage}%)`);\n        }\n      }\n\n      const originalResponse = await providerFn(credentials, filteredPrompt);\n\n      return {\n        ...originalResponse,\n        textStream: (async function* () {\n          for await (const chunk of originalResponse.textStream) {\n            const filteredChunk = filter.filterContent(chunk);\n            yield filteredChunk.filteredText;\n          }\n        })(),\n      };\n    };\n  };\n}\n\nexport function applyContentFiltering(\n  providerFn: (\n    credentials: RawiCredentials,\n    prompt: string,\n  ) => Promise<StreamingResponse>,\n  options: FilterMiddlewareOptions = {},\n) {\n  return createFilterMiddleware(options)(providerFn);\n}\n"]}