{"_id":"@alti-js/nestjs-elasticsearch","_rev":"12-d7e947e7563bf87999cd2a40ac382a4c","name":"@alti-js/nestjs-elasticsearch","dist-tags":{"latest":"0.5.9"},"versions":{"0.2.0":{"name":"@alti-js/nestjs-elasticsearch","version":"0.2.0","keywords":["nestjs","elasticsearch"],"author":{"name":"Angel Sanchez"},"license":"MIT","_id":"@alti-js/nestjs-elasticsearch@0.2.0","maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"}],"homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"dist":{"shasum":"592cf141d92e98478e508e46f5c3e186243c1bd2","tarball":"https://registry.npmjs.org/@alti-js/nestjs-elasticsearch/-/nestjs-elasticsearch-0.2.0.tgz","fileCount":46,"integrity":"sha512-JnRfwCQv39tUmnyk4TQ9YPv84BbbQ3t9tFDZhIbMvbOeVy8cHy/nCJfgPhfdN/jkVB7MuiGjrICS02ll2k1fpw==","signatures":[{"sig":"MEUCIQDKZXrOsM/Q/IpVUSuowF25m1krU65iAU2+ofP0YpNcFAIgMocrTBy6i6hB6Vhys3WvQkFk5OoNXM4h+zphRMR3apU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183519},"jest":{"rootDir":"src","testRegex":".spec.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"995831d97dfe98aab132cb4f3b7b78e095836b4f","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","prepare":"tsc --project tsconfig.build.json","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json --detectOpenHandles --runInBand","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch"},"_npmUser":{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},"repository":{"url":"git+https://github.com/alti-js/nestjs-elasticsearch.git","type":"git"},"_npmVersion":"9.8.1","description":"Elasticsearch integration with NestJS","directories":{},"_nodeVersion":"18.18.0","dependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.4.15","@nestjs/common":"^10.4.15","reflect-metadata":"^0.2.0","@nestjs/elasticsearch":"^10.0.2","@nestjs/microservices":"^10.4.15","@elastic/elasticsearch":"^7.13.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","prettier":"^3.0.0","supertest":"^7.0.0","ts-loader":"^9.4.3","typescript":"^5.1.3","@nestjs/cli":"^10.0.0","@types/jest":"^29.5.2","@types/node":"^20.3.1","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^10.0.0","@types/supertest":"^6.0.0","@nestjs/schematics":"^10.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-elasticsearch_0.2.0_1739284733741_0.9501157468281387","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@alti-js/nestjs-elasticsearch","version":"0.3.0","keywords":["nestjs","elasticsearch"],"author":{"name":"Angel Sanchez"},"license":"MIT","_id":"@alti-js/nestjs-elasticsearch@0.3.0","maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"}],"homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"dist":{"shasum":"ab8d37f56cae3737a0b74daa8d4a9041f555546c","tarball":"https://registry.npmjs.org/@alti-js/nestjs-elasticsearch/-/nestjs-elasticsearch-0.3.0.tgz","fileCount":46,"integrity":"sha512-cbaeMDz0UWUahrgJPeQQZFE7o52xE2xR6vivU3kASiXzf2R5rfMPy1Yo1J5ZdRpCrXUiUpY2JR6XcGbXpktndQ==","signatures":[{"sig":"MEQCIC3QmSGky6ZCwTefgpoKjelAeIwpszv7UHbRgdoKDxuvAiBVX8142qMcGYPCtEtCfowwMTvUtrXWgPQ4O11QDO8t3A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":183513},"jest":{"rootDir":"src","testRegex":".spec.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"54d7a047f72205c536e654f258286908fdfe1d3e","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","prepare":"tsc --project tsconfig.build.json","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json --detectOpenHandles --runInBand","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch"},"_npmUser":{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},"repository":{"url":"git+https://github.com/alti-js/nestjs-elasticsearch.git","type":"git"},"_npmVersion":"9.8.1","description":"Elasticsearch integration with NestJS","directories":{},"_nodeVersion":"18.18.0","dependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.4.15","@nestjs/common":"^10.4.15","reflect-metadata":"^0.2.0","@nestjs/elasticsearch":"^10.0.2","@nestjs/microservices":"^10.4.15","@elastic/elasticsearch":"^7.13.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","prettier":"^3.0.0","supertest":"^7.0.0","ts-loader":"^9.4.3","typescript":"^5.1.3","@nestjs/cli":"^10.0.0","@types/jest":"^29.5.2","@types/node":"^20.3.1","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^10.0.0","@types/supertest":"^6.0.0","@nestjs/schematics":"^10.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-elasticsearch_0.3.0_1739285258243_0.6160095447690408","host":"s3://npm-registry-packages-npm-production"}},"0.5.2":{"name":"@alti-js/nestjs-elasticsearch","version":"0.5.2","keywords":["nestjs","elasticsearch","opensearch","search","indexing","typescript","nodejs","dual-engine","unified-api","multi-region","clustering"],"author":{"name":"Angel Sanchez"},"license":"MIT","_id":"@alti-js/nestjs-elasticsearch@0.5.2","maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},{"name":"ankitkapadia","email":"akapadia@altimetrik.com"},{"name":"landrukanis","email":"landrukanis@altimetrik.com"},{"name":"praveenalti","email":"psurendran@altimetrik.com"}],"homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"dist":{"shasum":"d9ddffd4b6194132801122cfd19a5999bbfba2ef","tarball":"https://registry.npmjs.org/@alti-js/nestjs-elasticsearch/-/nestjs-elasticsearch-0.5.2.tgz","fileCount":91,"integrity":"sha512-S+nFmh6qewEmeO6R6rv1rUphXN6JyODvBED5F7VXc+SXI5ohPMRRml9J1PUMavPMdXB1F1RlC5mxkWOscEexvw==","signatures":[{"sig":"MEYCIQCaj9Xs66rCgvLv4ZrYXBmWfR1qpKME6a7rX48CrVlhbwIhAMpAS/8OXkqcaWbdEXVvAQfvXMhrzsifGbPLSjrO7H6p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":341601},"jest":{"rootDir":"src","testRegex":".spec.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"npm":">=8.0.0","node":">=16.0.0"},"gitHead":"1c441eeee6b6cef1989eeb994d22f7c345529049","scripts":{"lint":"eslint \"{src,apps,libs,test}/**/*.ts\" --fix","test":"jest","build":"nest build","prepare":"tsc --project tsconfig.build.json","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json --detectOpenHandles --runInBand","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","prepublishOnly":"npm run build && npm test","publish:public":"npm run build && npm version patch && npm publish --access public"},"_npmUser":{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},"repository":{"url":"git+https://github.com/alti-js/nestjs-elasticsearch.git","type":"git"},"_npmVersion":"10.8.2","description":"Elasticsearch and OpenSearch integration with NestJS - Dual engine support with unified API and multi-region capabilities","directories":{},"_nodeVersion":"20.19.1","dependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.4.15","@nestjs/common":"^10.4.15","reflect-metadata":"^0.2.0","@nestjs/elasticsearch":"^10.0.2","@nestjs/microservices":"^10.4.15","@elastic/elasticsearch":"^7.13.0","@opensearch-project/opensearch":"^2.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.0.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","prettier":"^3.0.0","supertest":"^7.0.0","ts-loader":"^9.4.3","typescript":"^5.1.3","@nestjs/cli":"^10.0.0","@types/jest":"^29.5.2","@types/node":"^20.3.1","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^10.0.0","@types/supertest":"^6.0.0","@nestjs/schematics":"^10.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-elasticsearch_0.5.2_1757423954549_0.6872467663601283","host":"s3://npm-registry-packages-npm-production"}},"0.5.5":{"name":"@alti-js/nestjs-elasticsearch","version":"0.5.5","keywords":["nestjs","elasticsearch","opensearch","search","indexing","typescript","nodejs","dual-engine","unified-api","multi-region","clustering"],"author":{"name":"Angel Sanchez"},"license":"MIT","_id":"@alti-js/nestjs-elasticsearch@0.5.5","maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},{"name":"ankitkapadia","email":"akapadia@altimetrik.com"},{"name":"landrukanis","email":"landrukanis@altimetrik.com"},{"name":"praveenalti","email":"psurendran@altimetrik.com"},{"name":"sguhaprasad","email":"sguhaprasad@altimetrik.com"}],"homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"dist":{"shasum":"1bddc2e902cc2d407af585dd4c19f7b78520ced0","tarball":"https://registry.npmjs.org/@alti-js/nestjs-elasticsearch/-/nestjs-elasticsearch-0.5.5.tgz","fileCount":63,"integrity":"sha512-3vlUT0TKlYResU6pnF4YU/PK/KK0rvbN0VOavfkmG6yrOvH+9UTbmK4bSEqwTzJ0aTUSSUMQH117sggQ38Hfdg==","signatures":[{"sig":"MEYCIQCArNKJbkU3CbIc9Gr27DwLyXgCzweRQg/4lkyJ5YaCkgIhAJx5Bet9+OsI0Uuj83IMgZpl/SPmUSnukzK0DFuHq0Au","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":164252},"jest":{"rootDir":"src","testRegex":".spec.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"npm":">=8.0.0","node":">=16.0.0"},"gitHead":"d102b25aa6f6f695dea53ec2929fe4e8436afa36","scripts":{"test":"jest","build":"nest build","prepare":"tsc --project tsconfig.build.json","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json --detectOpenHandles --runInBand","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","prepublishOnly":"npm run build && npm test","publish:public":"npm run build && npm version patch && npm publish --access public"},"_npmUser":{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},"repository":{"url":"git+https://github.com/alti-js/nestjs-elasticsearch.git","type":"git"},"_npmVersion":"10.8.2","description":"Elasticsearch and OpenSearch integration with NestJS - Dual engine support with unified API and multi-region capabilities","directories":{},"_nodeVersion":"18.20.8","dependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@nestjs/elasticsearch":"^10.0.2","@nestjs/microservices":"^10.4.15","@elastic/elasticsearch":"^7.13.0","@opensearch-project/opensearch":"^2.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.57.1","globals":"^16.3.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","prettier":"^3.0.0","supertest":"^7.0.0","ts-loader":"^9.4.3","@eslint/js":"^9.35.0","typescript":"^5.1.3","@nestjs/cli":"^10.0.0","@types/jest":"^29.5.2","@types/node":"^20.3.1","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^10.0.0","@types/supertest":"^6.0.0","typescript-eslint":"^8.43.0","@nestjs/schematics":"^10.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-elasticsearch_0.5.5_1757954115463_0.6760725033766948","host":"s3://npm-registry-packages-npm-production"}},"0.5.6":{"name":"@alti-js/nestjs-elasticsearch","version":"0.5.6","keywords":["nestjs","elasticsearch","opensearch","search","indexing","typescript","nodejs","dual-engine","unified-api","multi-region","clustering"],"author":{"name":"Angel Sanchez"},"license":"MIT","_id":"@alti-js/nestjs-elasticsearch@0.5.6","maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},{"name":"ankitkapadia","email":"akapadia@altimetrik.com"},{"name":"landrukanis","email":"landrukanis@altimetrik.com"},{"name":"praveenalti","email":"psurendran@altimetrik.com"},{"name":"sguhaprasad","email":"sguhaprasad@altimetrik.com"}],"homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"dist":{"shasum":"32c32f79e6da2ad2909af5d366d303df90a95583","tarball":"https://registry.npmjs.org/@alti-js/nestjs-elasticsearch/-/nestjs-elasticsearch-0.5.6.tgz","fileCount":66,"integrity":"sha512-HhHZo+Fnw0X68bi0OqLRCEHgDFUog98QMhYUCBFJnKz6j9pm2j2IbWVnnl4f+/nPp+DfH11wnuONCGqxVy3u8g==","signatures":[{"sig":"MEUCIQDcFF0M1GfSjjkDr63Gmgtrls4j9s+0mDQShHR9rbkqIgIgFtxf9w9g4YVjSrAxJn2up8+K9lSSeI1pdJKAMXFiz58=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202085},"jest":{"rootDir":"src","testRegex":".spec.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"npm":">=8.0.0","node":">=16.0.0"},"gitHead":"a71f0e09736fefe20606b6f0a5acc51ce96ff9d2","scripts":{"test":"jest","build":"nest build","prepare":"tsc --project tsconfig.build.json","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json --detectOpenHandles --runInBand","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","prepublishOnly":"npm run build && npm test","publish:public":"npm run build && npm version patch && npm publish --access public"},"_npmUser":{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},"repository":{"url":"git+https://github.com/alti-js/nestjs-elasticsearch.git","type":"git"},"_npmVersion":"10.8.2","description":"Elasticsearch and OpenSearch integration with NestJS - Dual engine support with unified API and multi-region capabilities","directories":{},"_nodeVersion":"18.20.8","dependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@nestjs/elasticsearch":"^10.0.2","@nestjs/microservices":"^10.4.15","@elastic/elasticsearch":"^7.13.0","@opensearch-project/opensearch":"^2.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.57.1","globals":"^16.3.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","prettier":"^3.0.0","supertest":"^7.0.0","ts-loader":"^9.4.3","@eslint/js":"^9.35.0","typescript":"^5.1.3","@nestjs/cli":"^10.0.0","@types/jest":"^29.5.2","@types/node":"^20.3.1","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^10.0.0","@types/supertest":"^6.0.0","typescript-eslint":"^8.43.0","@nestjs/schematics":"^10.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-elasticsearch_0.5.6_1758521806752_0.0015978739853605983","host":"s3://npm-registry-packages-npm-production"}},"0.5.7":{"name":"@alti-js/nestjs-elasticsearch","version":"0.5.7","keywords":["nestjs","elasticsearch","opensearch","search","indexing","typescript","nodejs","dual-engine","unified-api","multi-region","clustering"],"author":{"name":"Angel Sanchez"},"license":"MIT","_id":"@alti-js/nestjs-elasticsearch@0.5.7","maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},{"name":"ankitkapadia","email":"akapadia@altimetrik.com"},{"name":"landrukanis","email":"landrukanis@altimetrik.com"},{"name":"praveenalti","email":"psurendran@altimetrik.com"},{"name":"sguhaprasad","email":"sguhaprasad@altimetrik.com"}],"homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"dist":{"shasum":"f5625e1ee21dadcc603803588177184aebef5e72","tarball":"https://registry.npmjs.org/@alti-js/nestjs-elasticsearch/-/nestjs-elasticsearch-0.5.7.tgz","fileCount":66,"integrity":"sha512-NUAiz+RYdI4ktm52MfU8CRdAcfORCx+AZ7qo+dBvQtvE0maED5c/hCtpZMHPL0xViUvImd/9s7vmbPx1vX95RA==","signatures":[{"sig":"MEQCIDYf08Vd89tDKevZRGIA9gRQX7UvYY6S6gfdGXLEXa0gAiBfiXci32m4ldRpcxYF0WvWuxclR0wpEuhTZMYlyrPoDQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":202092},"jest":{"rootDir":"src","testRegex":".spec.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"npm":">=8.0.0","node":">=16.0.0"},"gitHead":"356e4f1794c87bd0bc5c7151f4d60aee57c260a4","scripts":{"test":"jest","build":"nest build","prepare":"tsc --project tsconfig.build.json","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json --detectOpenHandles --runInBand","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","prepublishOnly":"npm run build && npm test","publish:public":"npm run build && npm version patch && npm publish --access public"},"_npmUser":{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},"repository":{"url":"git+https://github.com/alti-js/nestjs-elasticsearch.git","type":"git"},"_npmVersion":"10.8.2","description":"Elasticsearch and OpenSearch integration with NestJS - Dual engine support with unified API and multi-region capabilities","directories":{},"_nodeVersion":"18.20.8","dependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@nestjs/elasticsearch":"^10.0.2","@nestjs/microservices":"^10.4.15","@elastic/elasticsearch":"^7.13.0","@opensearch-project/opensearch":"^2.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.57.1","globals":"^16.3.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","prettier":"^3.0.0","supertest":"^7.0.0","ts-loader":"^9.4.3","@eslint/js":"^9.35.0","typescript":"^5.1.3","@nestjs/cli":"^10.0.0","@types/jest":"^29.5.2","@types/node":"^20.3.1","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^10.0.0","@types/supertest":"^6.0.0","typescript-eslint":"^8.43.0","@nestjs/schematics":"^10.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-elasticsearch_0.5.7_1759748864576_0.24774954143216","host":"s3://npm-registry-packages-npm-production"}},"0.5.8":{"name":"@alti-js/nestjs-elasticsearch","version":"0.5.8","keywords":["nestjs","elasticsearch","opensearch","search","indexing","typescript","nodejs","dual-engine","unified-api","multi-region","clustering"],"author":{"name":"Angel Sanchez"},"license":"MIT","_id":"@alti-js/nestjs-elasticsearch@0.5.8","maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},{"name":"ankitkapadia","email":"akapadia@altimetrik.com"},{"name":"landrukanis","email":"landrukanis@altimetrik.com"},{"name":"praveenalti","email":"psurendran@altimetrik.com"},{"name":"sguhaprasad","email":"sguhaprasad@altimetrik.com"}],"homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"dist":{"shasum":"77f0ac651975c15ee26540acddd66d9c22dd253c","tarball":"https://registry.npmjs.org/@alti-js/nestjs-elasticsearch/-/nestjs-elasticsearch-0.5.8.tgz","fileCount":66,"integrity":"sha512-UKSTQJ+9XlniB0NI8KhEB8gh0CQwratMS3Mz9FdPFAMFizz6rrpRh44iU3CNDGd/iK/g9xwhp42ssvVBlUCo+w==","signatures":[{"sig":"MEYCIQD9HE5sa8yQlyoANcvZsBDe6AjhhAPJYvutEkczrrk2qAIhAMb2tGuxlmc+0urbK73ewZd4JVGGiZBsudCr9y0y0Pn5","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206557},"jest":{"rootDir":"src","testRegex":".spec.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"testEnvironment":"node","coverageDirectory":"../coverage","moduleFileExtensions":["js","json","ts"]},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"npm":">=8.0.0","node":">=16.0.0"},"gitHead":"c1f31110f09ab8835dfa4ef4e04526599a7428ec","scripts":{"test":"jest","build":"nest build","prepare":"tsc --project tsconfig.build.json","test:cov":"jest --coverage","test:e2e":"jest --config ./test/jest-e2e.json --detectOpenHandles --runInBand","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:watch":"jest --watch","prepublishOnly":"npm run build && npm test","publish:public":"npm run build && npm version patch && npm publish --access public"},"_npmUser":{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},"repository":{"url":"git+https://github.com/alti-js/nestjs-elasticsearch.git","type":"git"},"_npmVersion":"10.8.2","description":"Elasticsearch and OpenSearch integration with NestJS - Dual engine support with unified API and multi-region capabilities","directories":{},"_nodeVersion":"18.20.8","dependencies":{"rxjs":"^7.8.1","@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0","reflect-metadata":"^0.2.0","@nestjs/elasticsearch":"^10.0.2","@nestjs/microservices":"^10.4.15","@elastic/elasticsearch":"^7.13.0","@opensearch-project/opensearch":"^2.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.5.0","eslint":"^8.57.1","globals":"^16.3.0","ts-jest":"^29.1.0","ts-node":"^10.9.1","prettier":"^3.0.0","supertest":"^7.0.0","ts-loader":"^9.4.3","@eslint/js":"^9.35.0","typescript":"^5.1.3","@nestjs/cli":"^10.0.0","@types/jest":"^29.5.2","@types/node":"^20.3.1","@types/express":"^5.0.0","tsconfig-paths":"^4.2.0","@nestjs/testing":"^10.0.0","@types/supertest":"^6.0.0","typescript-eslint":"^8.43.0","@nestjs/schematics":"^10.0.0","source-map-support":"^0.5.21","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","@typescript-eslint/parser":"^8.0.0","@typescript-eslint/eslint-plugin":"^8.0.0"},"peerDependencies":{"@nestjs/core":"^10.0.0","@nestjs/common":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/nestjs-elasticsearch_0.5.8_1760151273997_0.2560876956268068","host":"s3://npm-registry-packages-npm-production"}},"0.5.9":{"name":"@alti-js/nestjs-elasticsearch","version":"0.5.9","description":"Elasticsearch and OpenSearch integration with NestJS - Dual engine support with unified API and multi-region capabilities","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"nest build","prepare":"tsc --project tsconfig.build.json","prepublishOnly":"npm run build && npm test","publish:public":"npm run build && npm version patch && npm publish --access public","test":"jest","test:watch":"jest --watch","test:cov":"jest --coverage","test:debug":"node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand","test:e2e":"jest --config ./test/jest-e2e.json --detectOpenHandles --runInBand"},"repository":{"type":"git","url":"git+https://github.com/alti-js/nestjs-elasticsearch.git"},"keywords":["nestjs","elasticsearch","opensearch","search","indexing","typescript","nodejs","dual-engine","unified-api","multi-region","clustering"],"author":{"name":"Angel Sanchez"},"license":"MIT","bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","engines":{"node":">=16.0.0","npm":">=8.0.0"},"publishConfig":{"access":"public"},"peerDependencies":{"@nestjs/common":"^10.0.0","@nestjs/core":"^10.0.0"},"dependencies":{"@elastic/elasticsearch":"^7.13.0","@nestjs/common":"^10.0.0","@nestjs/core":"^10.0.0","@nestjs/elasticsearch":"^10.0.2","@nestjs/microservices":"^10.4.15","@opensearch-project/opensearch":"^2.4.0","reflect-metadata":"^0.2.0","rxjs":"^7.8.1"},"devDependencies":{"@eslint/js":"^9.35.0","@nestjs/cli":"^10.0.0","@nestjs/schematics":"^10.0.0","@nestjs/testing":"^10.0.0","@types/express":"^5.0.0","@types/jest":"^29.5.2","@types/node":"^20.3.1","@types/supertest":"^6.0.0","@typescript-eslint/eslint-plugin":"^8.0.0","@typescript-eslint/parser":"^8.0.0","eslint":"^8.57.1","eslint-config-prettier":"^9.0.0","eslint-plugin-prettier":"^5.0.0","globals":"^16.3.0","jest":"^29.5.0","prettier":"^3.0.0","source-map-support":"^0.5.21","supertest":"^7.0.0","ts-jest":"^29.1.0","ts-loader":"^9.4.3","ts-node":"^10.9.1","tsconfig-paths":"^4.2.0","typescript":"^5.1.3","typescript-eslint":"^8.43.0"},"jest":{"moduleFileExtensions":["js","json","ts"],"rootDir":"src","testRegex":".spec.ts$","transform":{"^.+\\.(t|j)s$":"ts-jest"},"coverageDirectory":"../coverage","testEnvironment":"node"},"_id":"@alti-js/nestjs-elasticsearch@0.5.9","gitHead":"b8ae66a21eb3cb216b8c095616e2e187136692f8","_nodeVersion":"18.20.8","_npmVersion":"10.8.2","dist":{"integrity":"sha512-da4yNVTIL2cR/GDA7QT5f+lnuaCrPRhYcwCGKED2uESsW0GEAx21ufIdIPwR+wcSbBqTWCFjCTqQ86O8kvfc+g==","shasum":"f3fad0f4602b0153bc3397278e2a2f3363e79319","tarball":"https://registry.npmjs.org/@alti-js/nestjs-elasticsearch/-/nestjs-elasticsearch-0.5.9.tgz","fileCount":66,"unpackedSize":206552,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC3pmqIJ5ICkReqZ8mL1HZ/wVlYEgA0iYlI4vLw42hNtwIhALLOWUinI1KexIo1eisNq9R9UG32L9RqXRyMzYdhJ7Jd"}]},"_npmUser":{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},"directories":{},"maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},{"name":"ankitkapadia","email":"akapadia@altimetrik.com"},{"name":"landrukanis","email":"landrukanis@altimetrik.com"},{"name":"praveenalti","email":"psurendran@altimetrik.com"},{"name":"sguhaprasad","email":"sguhaprasad@altimetrik.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/nestjs-elasticsearch_0.5.9_1760266078163_0.8211329599988897"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-11T14:38:53.619Z","modified":"2025-10-12T10:47:58.570Z","0.2.0":"2025-02-11T14:38:53.921Z","0.3.0":"2025-02-11T14:47:38.461Z","0.5.2":"2025-09-09T13:19:14.753Z","0.5.5":"2025-09-15T16:35:15.652Z","0.5.6":"2025-09-22T06:16:46.921Z","0.5.7":"2025-10-06T11:07:44.838Z","0.5.8":"2025-10-11T02:54:34.195Z","0.5.9":"2025-10-12T10:47:58.344Z"},"bugs":{"url":"https://github.com/alti-js/nestjs-elasticsearch/issues"},"author":{"name":"Angel Sanchez"},"license":"MIT","homepage":"https://github.com/alti-js/nestjs-elasticsearch/#readme","keywords":["nestjs","elasticsearch","opensearch","search","indexing","typescript","nodejs","dual-engine","unified-api","multi-region","clustering"],"repository":{"type":"git","url":"git+https://github.com/alti-js/nestjs-elasticsearch.git"},"description":"Elasticsearch and OpenSearch integration with NestJS - Dual engine support with unified API and multi-region capabilities","maintainers":[{"name":"asanchez-altimetrik","email":"asanchez@altimetrik.com"},{"name":"ankitkapadia","email":"akapadia@altimetrik.com"},{"name":"landrukanis","email":"landrukanis@altimetrik.com"},{"name":"praveenalti","email":"psurendran@altimetrik.com"},{"name":"sguhaprasad","email":"sguhaprasad@altimetrik.com"}],"readme":"<p align=\"center\">\n  <a href=\"http://nestjs.com/\" target=\"blank\">\n    <img src=\"https://nestjs.com/img/logo-small.svg\" width=\"120\" alt=\"Nest Logo\" />\n  </a>\n  <a href=\"https://www.elastic.co/\">\n    <img src=\"https://cdn.worldvectorlogo.com/logos/elasticsearch.svg\" alt=\"Elasticsearch Logo\" width=\"125\" height=\"125\">\n  </a>\n  <a href=\"https://opensearch.org/\">\n    <img src=\"https://opensearch.org/wp-content/uploads/2024/08/opensearch_logo_default.svg\" alt=\"OpenSearch Logo\" width=\"200\" height=\"80\">\n  </a>\n</p>\n\n# NestJS + Elasticsearch/OpenSearch Integration\n\n[![npm version](https://badge.fury.io/js/%40alti-js%2Fnestjs-elasticsearch.svg)](https://badge.fury.io/js/%40alti-js%2Fnestjs-elasticsearch)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nA comprehensive NestJS integration library for **Elasticsearch** and **OpenSearch** with advanced features including multi-region support, unified API, and enterprise-grade capabilities.\n\n## 🚀 Features\n\n### Core Features\n- **🔄 Dual Engine Support**: Seamlessly works with both Elasticsearch and OpenSearch\n- **🌍 Multi-Region Support**: Connect to multiple OpenSearch clusters across different regions\n- **🔗 Unified API**: Same interface for both search engines - no code changes needed\n- **📝 Type Safety**: Full TypeScript support with comprehensive type definitions\n- **⚡ Performance**: Optimized for high-performance search operations\n- **🛡️ Enterprise Ready**: Production-grade error handling and logging\n\n### Advanced Features\n- **📊 Cross-Region Operations**: Search and bulk operations across multiple regions\n- **🎯 Request-Based Routing**: Automatic region detection from request objects\n- **📈 Enhanced Index Management**: Complete CRUD operations for indices and documents\n- **🔄 Backward Compatibility**: Existing Elasticsearch configurations continue to work\n- **�� Comprehensive Testing**: Full test coverage with Jest\n- **📚 Rich Documentation**: Detailed examples and API documentation\n\n## 📦 Installation\n\n```bash\nnpm install @alti-js/nestjs-elasticsearch\n```\n\n## 🏗️ Quick Start\n\n### Basic Setup\n\nImport and configure the `ElasticsearchModule` in your NestJS application:\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { ElasticsearchModule } from '@alti-js/nestjs-elasticsearch';\n\n@Module({\n  imports: [\n    ElasticsearchModule.forRoot({\n      index: \"my-app-index\",\n      node: \"http://localhost:9200\",\n      port: \"9200\",\n      auth: {\n        username: \"elastic\",\n        password: \"changeme\",\n      },\n      engine: \"elasticsearch\", // or \"opensearch\"\n      models: [PostIndex],\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n## ⚙️ Configuration\n\n### Single Region Configuration\n\n#### Elasticsearch Configuration\n\n```typescript\nimport { ElasticsearchModule } from '@alti-js/nestjs-elasticsearch';\n\n@Module({\n  imports: [\n    ElasticsearchModule.forRoot({\n      index: \"test-index\",\n      node: \"http://localhost\",\n      port: \"9200\",\n      auth: {\n        username: \"elastic\",\n        password: \"changeme\",\n      },\n      engine: \"elasticsearch\", // Optional, defaults to elasticsearch\n      models: [PostIndex],\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n#### OpenSearch Configuration\n\n```typescript\nimport { ElasticsearchModule } from '@alti-js/nestjs-elasticsearch';\n\n@Module({\n  imports: [\n    ElasticsearchModule.forRoot({\n      index: \"test-index\",\n      node: \"http://localhost\",\n      port: \"9200\",\n      auth: {\n        username: \"admin\",\n        password: \"admin\",\n      },\n      engine: \"opensearch\", // Required for OpenSearch\n      models: [PostIndex],\n    }),\n  ],\n})\nexport class AppModule {}\n```\n\n### Multi-Region Configuration\n\nFor multi-region OpenSearch support, use the `MultiRegionElasticsearchModule`:\n\n```typescript\nimport { Module } from '@nestjs/common';\nimport { MultiRegionElasticsearchModule } from '@alti-js/nestjs-elasticsearch';\n\nconst multiRegionConfig = {\n  engine: 'opensearch' as const,\n  defaultRegion: 'us-east-1', // Can be any region name you define\n  indexPrefix: 'myapp',\n  regions: {\n    'us-east-1': {\n      node: 'https://opensearch-us-east-1.example.com',\n      port: '9200',\n      auth: { username: 'admin', password: 'password' }\n    },\n    'us-west-2': {\n      node: 'https://opensearch-us-west-2.example.com',\n      port: '9200',\n      auth: { username: 'admin', password: 'password' }\n    },\n    'eu-central-1': {\n      node: 'https://opensearch-eu-central-1.example.com',\n      port: '9200',\n      auth: { username: 'admin', password: 'password' }\n    },\n    'ap-southeast-1': {\n      node: 'https://opensearch-ap-southeast-1.example.com',\n      port: '9200',\n      auth: { username: 'admin', password: 'password' }\n    }\n  }\n};\n\n@Module({\n  imports: [\n    MultiRegionElasticsearchModule.forRoot(multiRegionConfig),\n  ],\n})\nexport class AppModule {}\n```\n\n### Configuration Options\n\n| Config | Type | Description | Required | Default |\n|--------|------|-------------|----------|---------|\n| `index` | string | Search index name | Yes | - |\n| `node` | string | Search engine node URL | Yes | - |\n| `port` | string | Search engine port | Yes | - |\n| `auth` | object | Authentication credentials | Yes | - |\n| `engine` | 'elasticsearch' \\| 'opensearch' | Search engine type | No | 'elasticsearch' |\n| `models` | array | Search models for auto-indexing | No | [] |\n| `defaultRegion` | string | Default region for multi-region setup | No | First configured region |\n| `indexPrefix` | string | Prefix for index names | No | '' |\n\n## 📋 Models\n\nDefine your search models using decorators:\n\n```typescript\nimport {\n  ElasticColumn,\n  ElasticIndex,\n} from '@alti-js/nestjs-elasticsearch';\nimport {\n  BaseDocument,\n  IDoc,\n} from '@alti-js/nestjs-elasticsearch';\n\nexport interface IPostIndex extends IDoc {\n  id: string;\n  title: string;\n  author: string;\n  content: string;\n  hashtags: string;\n  createdAt: Date;\n  region?: string;\n}\n\n@ElasticIndex('post')\nexport class PostIndex extends BaseDocument<IPostIndex> implements IPostIndex {\n  id: string;\n\n  @ElasticColumn({ type: 'text', index: true })\n  title: string;\n\n  @ElasticColumn({ type: 'text', index: true })\n  content: string;\n\n  @ElasticColumn({ type: 'text', index: true })\n  author: string;\n\n  @ElasticColumn({ type: 'text', index: true })\n  hashtags: string;\n\n  @ElasticColumn({ type: 'date' })\n  createdAt: Date;\n\n  @ElasticColumn({ type: 'keyword' })\n  region?: string;\n}\n```\n\n## 🔧 Service Usage\n\n### Single Region Service\n\n```typescript\nimport { Injectable } from '@nestjs/common';\nimport { SearchService } from '@alti-js/nestjs-elasticsearch';\n\n@Injectable()\nexport class PostService {\n  constructor(private readonly searchService: SearchService) {}\n\n  // Check which engine is being used\n  getEngineType() {\n    return this.searchService.getEngineType(); // Returns 'elasticsearch' or 'opensearch'\n  }\n\n  // Create index\n  async createIndex() {\n    await this.searchService.createIndex('posts', [\n      { fieldName: \"title\", type: \"text\" },\n      { fieldName: \"content\", type: \"text\" },\n    ]);\n  }\n\n  // Bulk insert documents\n  async insertPosts(posts: any[]) {\n    await this.searchService.bulkInsert(posts, 'posts', 'post');\n  }\n\n  // Search documents\n  async searchPosts(query: string) {\n    return this.searchService.searchIndex(\n      query,\n      'posts',\n      0,\n      10,\n      'SimpleQuery',\n      ['title', 'content']\n    );\n  }\n\n  // Update documents\n  async updatePost(id: string, updates: any) {\n    await this.searchService.updateIndex(\n      'posts',\n      { match: { id } },\n      updates\n    );\n  }\n\n  // Remove documents\n  async removePost(id: string) {\n    await this.searchService.removeDocumentFromIndex(\n      'posts',\n      { match: { id } }\n    );\n  }\n\n  // Reindex documents\n  async reindexPosts() {\n    await this.searchService.reindex(\n      'posts-old',\n      'posts-new',\n      { match_all: {} }\n    );\n  }\n}\n```\n\n### Multi-Region Service\n\n```typescript\nimport { Injectable } from '@nestjs/common';\nimport { MultiRegionOpenSearchService } from '@alti-js/nestjs-elasticsearch';\n\n@Injectable()\nexport class MultiRegionPostService {\n  constructor(\n    private readonly multiRegionService: MultiRegionOpenSearchService\n  ) {}\n\n  // Add document to specific region\n  async addPostToRegion(region: string, post: any) {\n    return await this.multiRegionService.addDocument(\n      region as any,\n      'posts',\n      post,\n      post.id\n    );\n  }\n\n  // Get document from specific region\n  async getPostFromRegion(region: string, postId: string) {\n    return await this.multiRegionService.getDocument(\n      region as any,\n      'posts',\n      postId\n    );\n  }\n\n  // Update document in specific region\n  async updatePostInRegion(region: string, postId: string, updates: any) {\n    return await this.multiRegionService.updateDocument(\n      region as any,\n      'posts',\n      postId,\n      updates\n    );\n  }\n\n  // Delete document from specific region\n  async deletePostFromRegion(region: string, postId: string) {\n    return await this.multiRegionService.deleteDocument(\n      region as any,\n      'posts',\n      postId\n    );\n  }\n\n  // Search in specific region\n  async searchInRegion(region: string, query: string) {\n    return await this.multiRegionService.searchIndex(\n      region as any,\n      'posts',\n      query,\n      0,\n      10,\n      'SimpleQuery',\n      ['title', 'content']\n    );\n  }\n\n  // Search across all regions\n  async searchAcrossAllRegions(query: string) {\n    return await this.multiRegionService.searchAcrossRegions(\n      'posts',\n      query,\n      0,\n      10,\n      'SimpleQuery',\n      ['title', 'content']\n    );\n  }\n\n  // Bulk insert to multiple regions\n  async bulkInsertToRegions(posts: any[], regions?: string[]) {\n    return await this.multiRegionService.bulkInsertAcrossRegions(\n      'posts',\n      posts,\n      regions as any\n    );\n  }\n\n  // Request-based operations (auto-detects region)\n  async addPostByRequest(request: any, post: any) {\n    return await this.multiRegionService.addDocumentByRequest(\n      request,\n      'posts',\n      post,\n      post.id\n    );\n  }\n\n  // Get available regions\n  getAvailableRegions() {\n    return this.multiRegionService.getAvailableRegions();\n  }\n}\n```\n\n## 📚 API Reference\n\n### SearchService Methods\n\n| Method | Description | Parameters |\n|--------|-------------|------------|\n| `createIndex` | Create new index or update mapping | `(indexName, fields)` |\n| `bulkInsert` | Add new documents to index | `(docs, indexName, type?)` |\n| `searchIndex` | Search documents in index | `(query, indexName, skip, limit, queryType, fields)` |\n| `updateIndex` | Update documents by query | `(indexName, query, updates)` |\n| `removeDocumentFromIndex` | Remove documents from index | `(indexName, query)` |\n| `reindex` | Reindex documents from one index to another | `(sourceIndex, destIndex, query)` |\n| `getEngineType` | Get the current search engine type | `()` |\n\n### Enhanced SearchService Methods\n\n| Method | Description | Parameters |\n|--------|-------------|------------|\n| `addDocument` | Add single document | `(indexName, document, documentId?)` |\n| `getDocument` | Get single document | `(indexName, documentId)` |\n| `updateDocument` | Update single document | `(indexName, documentId, document)` |\n| `deleteDocument` | Delete single document | `(indexName, documentId)` |\n| `upsertDocument` | Upsert single document | `(indexName, documentId, document)` |\n| `deleteIndex` | Delete entire index | `(indexName)` |\n| `indexExists` | Check if index exists | `(indexName)` |\n| `getIndexInfo` | Get index information | `(indexName)` |\n| `getIndexStats` | Get index statistics | `(indexName)` |\n| `getIndexHealth` | Get index health status | `(indexName)` |\n\n### MultiRegionOpenSearchService Methods\n\n#### Region-Specific Operations\n| Method | Description | Parameters |\n|--------|-------------|------------|\n| `addDocument` | Add document to specific region | `(region, indexName, document, documentId?)` |\n| `getDocument` | Get document from specific region | `(region, indexName, documentId)` |\n| `updateDocument` | Update document in specific region | `(region, indexName, documentId, document)` |\n| `deleteDocument` | Delete document from specific region | `(region, indexName, documentId)` |\n| `upsertDocument` | Upsert document in specific region | `(region, indexName, documentId, document)` |\n| `searchIndex` | Search in specific region | `(region, indexName, query, skip, limit, queryType, fields)` |\n| `bulkInsert` | Bulk insert to specific region | `(region, indexName, documents)` |\n| `createIndex` | Create index in specific region | `(region, indexName, fields)` |\n| `deleteIndex` | Delete index in specific region | `(region, indexName)` |\n| `indexExists` | Check if index exists in region | `(region, indexName)` |\n\n#### Cross-Region Operations\n| Method | Description | Parameters |\n|--------|-------------|------------|\n| `searchAcrossRegions` | Search across multiple regions | `(indexName, query, skip, limit, queryType, fields, regions?)` |\n| `bulkInsertAcrossRegions` | Bulk insert across multiple regions | `(indexName, documents, regions?)` |\n\n#### Request-Based Operations\n| Method | Description | Parameters |\n|--------|-------------|------------|\n| `addDocumentByRequest` | Add document using request region | `(request, indexName, document, documentId?)` |\n| `getDocumentByRequest` | Get document using request region | `(request, indexName, documentId)` |\n| `updateDocumentByRequest` | Update document using request region | `(request, indexName, documentId, document)` |\n| `deleteDocumentByRequest` | Delete document using request region | `(request, indexName, documentId)` |\n| `searchByRequest` | Search using request region | `(request, indexName, query, skip, limit, queryType, fields)` |\n\n## 🌍 Configurable Regions\n\nThe multi-region functionality now supports **any custom region names** that you define in your configuration. You are no longer limited to predefined regions and can use any naming convention that suits your infrastructure:\n\n**Examples of region configurations:**\n- **AWS-style regions**: `us-east-1`, `us-west-2`, `eu-central-1`, `ap-southeast-1`\n- **Geographic regions**: `north-america`, `europe`, `asia-pacific`\n- **Custom naming**: `production-east`, `staging-west`, `datacenter-1`\n- **Country codes**: `usa`, `canada`, `germany`, `singapore`\n\nSimply define your regions in the configuration object with any string identifiers you prefer.\n\n## 🔄 Migration Guide\n\n### From Elasticsearch to OpenSearch\n\nTo migrate from Elasticsearch to OpenSearch, simply update your configuration:\n\n```typescript\n// Before (Elasticsearch)\nElasticsearchModule.forRoot({\n  index: \"test-index\",\n  node: \"http://localhost\",\n  port: \"9200\",\n  auth: {\n    username: \"elastic\",\n    password: \"changeme\",\n  },\n  models: [PostIndex],\n})\n\n// After (OpenSearch)\nElasticsearchModule.forRoot({\n  index: \"test-index\",\n  node: \"http://localhost\",\n  port: \"9200\",\n  auth: {\n    username: \"admin\",\n    password: \"admin\",\n  },\n  engine: \"opensearch\", // Add this line\n  models: [PostIndex],\n})\n```\n\nThe API remains the same, so no code changes are required in your services.\n\n### From Single Region to Multi-Region\n\nTo migrate from single region to multi-region setup:\n\n```typescript\n// Before (Single Region)\nElasticsearchModule.forRoot({\n  index: \"test-index\",\n  node: \"http://localhost:9200\",\n  port: \"9200\",\n  auth: { username: \"admin\", password: \"admin\" },\n  engine: \"opensearch\",\n})\n\n// After (Multi-Region)\nMultiRegionElasticsearchModule.forRoot({\n  engine: 'opensearch',\n  defaultRegion: 'primary', // Any region name you define\n  regions: {\n    primary: {\n      node: 'http://localhost:9200',\n      port: '9200',\n      auth: { username: 'admin', password: 'admin' }\n    },\n    // Add more regions with any names you prefer\n    secondary: {\n      node: 'http://localhost:9201',\n      port: '9201',\n      auth: { username: 'admin', password: 'admin' }\n    }\n  }\n})\n```\n\n## 🧪 Testing\n\nThe library includes comprehensive test coverage:\n\n```bash\n# Run all tests\nnpm test\n\n# Run tests in watch mode\nnpm run test:watch\n\n# Run tests with coverage\nnpm run test:cov\n\n# Run end-to-end tests\nnpm run test:e2e\n```\n\n## 📦 Dependencies\n\n### Core Dependencies\n- `@elastic/elasticsearch` - For Elasticsearch support\n- `@opensearch-project/opensearch` - For OpenSearch support\n- `@nestjs/common` - NestJS framework\n- `@nestjs/core` - NestJS core\n- `@nestjs/microservices` - NestJS microservices\n\n### Peer Dependencies\n- `@nestjs/common` ^10.0.0\n- `@nestjs/core` ^10.0.0\n\n## 🚀 Performance Considerations\n\n### Best Practices\n1. **Connection Pooling**: The library automatically manages connection pools for optimal performance\n2. **Bulk Operations**: Use bulk operations for inserting multiple documents\n3. **Index Optimization**: Regularly optimize indices for better search performance\n4. **Region Selection**: Choose the closest region for better latency\n5. **Error Handling**: Implement proper error handling for production environments\n\n### Monitoring\n- Monitor connection health across all regions\n- Track search performance metrics\n- Set up alerts for failed operations\n- Monitor index sizes and growth\n\n## 🤝 Contributing\n\nContributions are welcome! Please read our contributing guidelines and submit pull requests to our repository.\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE.md](LICENSE.md) file for details.\n\n## 🆘 Support\n\nFor support and questions:\n- Create an issue in the GitHub repository\n- Check the documentation and examples\n- Review the test files for usage patterns\n\n## 🔗 Links\n\n- [NestJS Documentation](https://nestjs.com/)\n- [Elasticsearch Documentation](https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html)\n- [OpenSearch Documentation](https://opensearch.org/docs/)\n- [GitHub Repository](https://github.com/alti-js/nestjs-elasticsearch)\n\n---\n\n**Made with ❤️ by the Alti.js team**\n","readmeFilename":"README.md"}