import { Client } from '@elastic/elasticsearch'; const ELASTICSEARCH_NODE = process.env.ELASTICSEARCH_NODE || 'http://localhost:9200'; const INDEX_NAME = 'hasher'; export const esClient = new Client({ node: ELASTICSEARCH_NODE, requestTimeout: 30000, maxRetries: 3, }); export const INDEX_MAPPING = { settings: { number_of_shards: 10, number_of_replicas: 1, analysis: { analyzer: { lowercase_analyzer: { type: 'custom' as const, tokenizer: 'keyword', filter: ['lowercase'] } } } }, mappings: { properties: { plaintext: { type: 'text' as const, analyzer: 'lowercase_analyzer', fields: { keyword: { type: 'keyword' as const } } }, md5: { type: 'keyword' as const }, sha1: { type: 'keyword' as const }, sha256: { type: 'keyword' as const }, sha512: { type: 'keyword' as const }, bcrypt: { type: 'keyword' as const }, created_at: { type: 'date' as const } } } }; export async function initializeIndex(): Promise { try { const indexExists = await esClient.indices.exists({ index: INDEX_NAME }); if (!indexExists) { await esClient.indices.create({ index: INDEX_NAME, settings: INDEX_MAPPING.settings, mappings: INDEX_MAPPING.mappings }); console.log(`Index '${INDEX_NAME}' created successfully with 10 shards`); } else { console.log(`Index '${INDEX_NAME}' already exists`); } } catch (error) { console.error('Error initializing Elasticsearch index:', error); throw error; } } export { INDEX_NAME };