medusa-plugin-elasticsearch 0.0.2 → 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.
Files changed (84) hide show
  1. package/.medusa/server/api/admin/elasticsearch/sync/route.d.ts +2 -0
  2. package/.medusa/server/api/admin/elasticsearch/sync/route.js +13 -0
  3. package/.medusa/server/api/admin/elasticsearch/sync/route.js.map +1 -0
  4. package/.medusa/server/api/middlewares.d.ts +2 -0
  5. package/.medusa/server/api/middlewares.js +24 -0
  6. package/.medusa/server/api/middlewares.js.map +1 -0
  7. package/.medusa/server/api/store/categories/search/route.d.ts +9 -0
  8. package/.medusa/server/api/store/categories/search/route.js +17 -0
  9. package/.medusa/server/api/store/categories/search/route.js.map +1 -0
  10. package/.medusa/server/api/store/categories/search/validators.d.ts +17 -0
  11. package/.medusa/server/api/store/categories/search/validators.js +11 -0
  12. package/.medusa/server/api/store/categories/search/validators.js.map +1 -0
  13. package/.medusa/server/api/store/products/search/route.d.ts +9 -0
  14. package/.medusa/server/api/store/products/search/route.js +17 -0
  15. package/.medusa/server/api/store/products/search/route.js.map +1 -0
  16. package/.medusa/server/api/store/products/search/validators.d.ts +17 -0
  17. package/.medusa/server/api/store/products/search/validators.js +11 -0
  18. package/.medusa/server/api/store/products/search/validators.js.map +1 -0
  19. package/.medusa/server/jobs/elasticsearch-reindex.d.ts +6 -0
  20. package/.medusa/server/jobs/elasticsearch-reindex.js +17 -0
  21. package/.medusa/server/jobs/elasticsearch-reindex.js.map +1 -0
  22. package/.medusa/server/modules/elasticsearch/index.d.ts +6 -0
  23. package/.medusa/server/modules/elasticsearch/index.js +13 -0
  24. package/.medusa/server/modules/elasticsearch/index.js.map +1 -0
  25. package/.medusa/server/modules/elasticsearch/loaders/initialize.d.ts +2 -0
  26. package/.medusa/server/modules/elasticsearch/loaders/initialize.js +14 -0
  27. package/.medusa/server/modules/elasticsearch/loaders/initialize.js.map +1 -0
  28. package/.medusa/server/modules/elasticsearch/service.d.ts +20 -0
  29. package/.medusa/server/modules/elasticsearch/service.js +122 -0
  30. package/.medusa/server/modules/elasticsearch/service.js.map +1 -0
  31. package/.medusa/server/modules/elasticsearch/types.d.ts +23 -0
  32. package/.medusa/server/modules/elasticsearch/types.js.map +1 -0
  33. package/.medusa/server/src/admin/index.js +32419 -0
  34. package/.medusa/server/src/admin/index.mjs +32401 -0
  35. package/.medusa/server/subscribers/category-deleted.d.ts +5 -0
  36. package/.medusa/server/subscribers/category-deleted.js +14 -0
  37. package/.medusa/server/subscribers/category-deleted.js.map +1 -0
  38. package/.medusa/server/subscribers/category-upsert.d.ts +5 -0
  39. package/.medusa/server/subscribers/category-upsert.js +14 -0
  40. package/.medusa/server/subscribers/category-upsert.js.map +1 -0
  41. package/.medusa/server/subscribers/elasticsearch-sync.d.ts +3 -0
  42. package/.medusa/server/subscribers/elasticsearch-sync.js +86 -0
  43. package/.medusa/server/subscribers/elasticsearch-sync.js.map +1 -0
  44. package/.medusa/server/subscribers/product-deleted.d.ts +5 -0
  45. package/.medusa/server/subscribers/product-deleted.js +14 -0
  46. package/.medusa/server/subscribers/product-deleted.js.map +1 -0
  47. package/.medusa/server/subscribers/product-upsert.d.ts +5 -0
  48. package/.medusa/server/subscribers/product-upsert.js +14 -0
  49. package/.medusa/server/subscribers/product-upsert.js.map +1 -0
  50. package/.medusa/server/types/index.d.ts +1 -0
  51. package/.medusa/server/types/index.js +3 -0
  52. package/.medusa/server/types/index.js.map +1 -0
  53. package/.medusa/server/utils/transformer.d.ts +16 -0
  54. package/.medusa/server/utils/transformer.js +76 -0
  55. package/.medusa/server/utils/transformer.js.map +1 -0
  56. package/.medusa/server/workflows/delete-categories-from-elasticsearch.d.ts +5 -0
  57. package/.medusa/server/workflows/delete-categories-from-elasticsearch.js +15 -0
  58. package/.medusa/server/workflows/delete-categories-from-elasticsearch.js.map +1 -0
  59. package/.medusa/server/workflows/delete-products-from-elasticsearch.d.ts +5 -0
  60. package/.medusa/server/workflows/delete-products-from-elasticsearch.js +15 -0
  61. package/.medusa/server/workflows/delete-products-from-elasticsearch.js.map +1 -0
  62. package/.medusa/server/workflows/index.d.ts +4 -0
  63. package/.medusa/server/workflows/index.js +12 -0
  64. package/.medusa/server/workflows/index.js.map +1 -0
  65. package/.medusa/server/workflows/sync-categories-to-elasticsearch.d.ts +8 -0
  66. package/.medusa/server/workflows/sync-categories-to-elasticsearch.js +59 -0
  67. package/.medusa/server/workflows/sync-categories-to-elasticsearch.js.map +1 -0
  68. package/.medusa/server/workflows/sync-products-to-elasticsearch.d.ts +8 -0
  69. package/.medusa/server/workflows/sync-products-to-elasticsearch.js +70 -0
  70. package/.medusa/server/workflows/sync-products-to-elasticsearch.js.map +1 -0
  71. package/README.md +338 -122
  72. package/package.json +62 -29
  73. package/dist/loaders/index.d.ts +0 -4
  74. package/dist/loaders/index.js +0 -17
  75. package/dist/loaders/index.js.map +0 -1
  76. package/dist/services/elasticsearch.d.ts +0 -19
  77. package/dist/services/elasticsearch.js +0 -96
  78. package/dist/services/elasticsearch.js.map +0 -1
  79. package/dist/types.d.ts +0 -21
  80. package/dist/types.js.map +0 -1
  81. package/dist/utils/transformer.d.ts +0 -1
  82. package/dist/utils/transformer.js +0 -42
  83. package/dist/utils/transformer.js.map +0 -1
  84. /package/{dist → .medusa/server/modules/elasticsearch}/types.js +0 -0
@@ -0,0 +1,2 @@
1
+ import type { MedusaRequest, MedusaResponse } from '@medusajs/framework/http';
2
+ export declare function POST(req: MedusaRequest, res: MedusaResponse): Promise<void>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ async function POST(req, res) {
6
+ const eventModuleService = req.scope.resolve(utils_1.Modules.EVENT_BUS);
7
+ await eventModuleService.emit({
8
+ name: 'elasticsearch.sync',
9
+ data: {},
10
+ });
11
+ res.json({ message: 'Syncing products to Elasticsearch' });
12
+ }
13
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/admin/elasticsearch/sync/route.ts"],"names":[],"mappings":";;AAGA,oBASC;AAXD,qDAAmD;AAE5C,KAAK,UAAU,IAAI,CAAC,GAAkB,EAAE,GAAmB;IAChE,MAAM,kBAAkB,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,eAAO,CAAC,SAAS,CAAC,CAAA;IAE/D,MAAM,kBAAkB,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,EAAE;KACT,CAAC,CAAA;IAEF,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC,CAAA;AAC5D,CAAC"}
@@ -0,0 +1,2 @@
1
+ declare const _default: import("@medusajs/framework/http").MiddlewaresConfig;
2
+ export default _default;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const http_1 = require("@medusajs/framework/http");
4
+ const validators_1 = require("./store/products/search/validators");
5
+ const validators_2 = require("./store/categories/search/validators");
6
+ exports.default = (0, http_1.defineMiddlewares)({
7
+ routes: [
8
+ {
9
+ matcher: '/store/products/search',
10
+ method: 'POST',
11
+ middlewares: [(0, http_1.validateAndTransformBody)(validators_1.PostStoreProductsSearchSchema)],
12
+ },
13
+ {
14
+ matcher: '/store/categories/search',
15
+ method: 'POST',
16
+ middlewares: [(0, http_1.validateAndTransformBody)(validators_2.PostStoreCategoriesSearchSchema)],
17
+ },
18
+ {
19
+ matcher: '/admin/elasticsearch/*',
20
+ middlewares: [(0, http_1.authenticate)('user', ['session', 'bearer', 'api-key'])],
21
+ },
22
+ ],
23
+ });
24
+ //# sourceMappingURL=middlewares.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middlewares.js","sourceRoot":"","sources":["../../../src/api/middlewares.ts"],"names":[],"mappings":";;AAAA,mDAIiC;AACjC,mEAAkF;AAClF,qEAAsF;AAEtF,kBAAe,IAAA,wBAAiB,EAAC;IAC/B,MAAM,EAAE;QACN;YACE,OAAO,EAAE,wBAAwB;YACjC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,CAAC,IAAA,+BAAwB,EAAC,0CAA6B,CAAC,CAAC;SACvE;QACD;YACE,OAAO,EAAE,0BAA0B;YACnC,MAAM,EAAE,MAAM;YACd,WAAW,EAAE,CAAC,IAAA,+BAAwB,EAAC,4CAA+B,CAAC,CAAC;SACzE;QACD;YACE,OAAO,EAAE,wBAAwB;YACjC,WAAW,EAAE,CAAC,IAAA,mBAAY,EAAC,MAAM,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;SACtE;KACF;CACF,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { MedusaRequest, MedusaResponse } from '@medusajs/framework/http';
2
+ type SearchBody = {
3
+ q: string;
4
+ offset?: number;
5
+ limit?: number;
6
+ filter?: Record<string, unknown>;
7
+ };
8
+ export declare function POST(req: MedusaRequest<SearchBody>, res: MedusaResponse): Promise<void>;
9
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const elasticsearch_1 = require("../../../../modules/elasticsearch");
5
+ async function POST(req, res) {
6
+ const elasticsearchService = req.scope.resolve(elasticsearch_1.ELASTICSEARCH_MODULE);
7
+ const { q, offset, limit, filter } = req.body;
8
+ const results = await elasticsearchService.search(q, 'categories', {
9
+ paginationOptions: {
10
+ offset: offset ?? 0,
11
+ limit: limit ?? 20,
12
+ },
13
+ filter,
14
+ });
15
+ res.json(results);
16
+ }
17
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/store/categories/search/route.ts"],"names":[],"mappings":";;AAWA,oBAkBC;AA5BD,qEAAwE;AAUjE,KAAK,UAAU,IAAI,CACxB,GAA8B,EAC9B,GAAmB;IAEnB,MAAM,oBAAoB,GACxB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oCAAoB,CAAC,CAAA;IAEzC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;IAE7C,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,YAAY,EAAE;QACjE,iBAAiB,EAAE;YACjB,MAAM,EAAE,MAAM,IAAI,CAAC;YACnB,KAAK,EAAE,KAAK,IAAI,EAAE;SACnB;QACD,MAAM;KACP,CAAC,CAAA;IAEF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACnB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ export declare const PostStoreCategoriesSearchSchema: z.ZodObject<{
3
+ q: z.ZodString;
4
+ offset: z.ZodOptional<z.ZodNumber>;
5
+ limit: z.ZodOptional<z.ZodNumber>;
6
+ filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ q: string;
9
+ offset?: number | undefined;
10
+ limit?: number | undefined;
11
+ filter?: Record<string, unknown> | undefined;
12
+ }, {
13
+ q: string;
14
+ offset?: number | undefined;
15
+ limit?: number | undefined;
16
+ filter?: Record<string, unknown> | undefined;
17
+ }>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PostStoreCategoriesSearchSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.PostStoreCategoriesSearchSchema = zod_1.z.object({
6
+ q: zod_1.z.string(),
7
+ offset: zod_1.z.number().optional(),
8
+ limit: zod_1.z.number().optional(),
9
+ filter: zod_1.z.record(zod_1.z.unknown()).optional(),
10
+ });
11
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../../../src/api/store/categories/search/validators.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,+BAA+B,GAAG,OAAC,CAAC,MAAM,CAAC;IACtD,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE;IACb,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { MedusaRequest, MedusaResponse } from '@medusajs/framework/http';
2
+ type SearchBody = {
3
+ q: string;
4
+ offset?: number;
5
+ limit?: number;
6
+ filter?: Record<string, unknown>;
7
+ };
8
+ export declare function POST(req: MedusaRequest<SearchBody>, res: MedusaResponse): Promise<void>;
9
+ export {};
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.POST = POST;
4
+ const elasticsearch_1 = require("../../../../modules/elasticsearch");
5
+ async function POST(req, res) {
6
+ const elasticsearchService = req.scope.resolve(elasticsearch_1.ELASTICSEARCH_MODULE);
7
+ const { q, offset, limit, filter } = req.body;
8
+ const results = await elasticsearchService.search(q, 'products', {
9
+ paginationOptions: {
10
+ offset: offset ?? 0,
11
+ limit: limit ?? 20,
12
+ },
13
+ filter,
14
+ });
15
+ res.json(results);
16
+ }
17
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../../../src/api/store/products/search/route.ts"],"names":[],"mappings":";;AAWA,oBAkBC;AA5BD,qEAAwE;AAUjE,KAAK,UAAU,IAAI,CACxB,GAA8B,EAC9B,GAAmB;IAEnB,MAAM,oBAAoB,GACxB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,oCAAoB,CAAC,CAAA;IAEzC,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,CAAA;IAE7C,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE;QAC/D,iBAAiB,EAAE;YACjB,MAAM,EAAE,MAAM,IAAI,CAAC;YACnB,KAAK,EAAE,KAAK,IAAI,EAAE;SACnB;QACD,MAAM;KACP,CAAC,CAAA;IAEF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACnB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ export declare const PostStoreProductsSearchSchema: z.ZodObject<{
3
+ q: z.ZodString;
4
+ offset: z.ZodOptional<z.ZodNumber>;
5
+ limit: z.ZodOptional<z.ZodNumber>;
6
+ filter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ q: string;
9
+ offset?: number | undefined;
10
+ limit?: number | undefined;
11
+ filter?: Record<string, unknown> | undefined;
12
+ }, {
13
+ q: string;
14
+ offset?: number | undefined;
15
+ limit?: number | undefined;
16
+ filter?: Record<string, unknown> | undefined;
17
+ }>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PostStoreProductsSearchSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ exports.PostStoreProductsSearchSchema = zod_1.z.object({
6
+ q: zod_1.z.string(),
7
+ offset: zod_1.z.number().optional(),
8
+ limit: zod_1.z.number().optional(),
9
+ filter: zod_1.z.record(zod_1.z.unknown()).optional(),
10
+ });
11
+ //# sourceMappingURL=validators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validators.js","sourceRoot":"","sources":["../../../../../../src/api/store/products/search/validators.ts"],"names":[],"mappings":";;;AAAA,6BAAuB;AAEV,QAAA,6BAA6B,GAAG,OAAC,CAAC,MAAM,CAAC;IACpD,CAAC,EAAE,OAAC,CAAC,MAAM,EAAE;IACb,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC7B,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,MAAM,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACzC,CAAC,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { MedusaContainer } from '@medusajs/framework/types';
2
+ export default function elasticsearchReindexJob(container: MedusaContainer): Promise<void>;
3
+ export declare const config: {
4
+ name: string;
5
+ schedule: string;
6
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = elasticsearchReindexJob;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ async function elasticsearchReindexJob(container) {
7
+ const eventModuleService = container.resolve(utils_1.Modules.EVENT_BUS);
8
+ await eventModuleService.emit({
9
+ name: 'elasticsearch.sync',
10
+ data: {},
11
+ });
12
+ }
13
+ exports.config = {
14
+ name: 'elasticsearch-daily-reindex',
15
+ schedule: '0 0 * * *', // daily at midnight
16
+ };
17
+ //# sourceMappingURL=elasticsearch-reindex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elasticsearch-reindex.js","sourceRoot":"","sources":["../../../src/jobs/elasticsearch-reindex.ts"],"names":[],"mappings":";;;AAGA,0CASC;AAXD,qDAAmD;AAEpC,KAAK,UAAU,uBAAuB,CACnD,SAA0B;IAE1B,MAAM,kBAAkB,GAAG,SAAS,CAAC,OAAO,CAAC,eAAO,CAAC,SAAS,CAAC,CAAA;IAE/D,MAAM,kBAAkB,CAAC,IAAI,CAAC;QAC5B,IAAI,EAAE,oBAAoB;QAC1B,IAAI,EAAE,EAAE;KACT,CAAC,CAAA;AACJ,CAAC;AAEY,QAAA,MAAM,GAAG;IACpB,IAAI,EAAE,6BAA6B;IACnC,QAAQ,EAAE,WAAW,EAAE,oBAAoB;CAC5C,CAAA"}
@@ -0,0 +1,6 @@
1
+ import ElasticsearchModuleService from './service.js';
2
+ export declare const ELASTICSEARCH_MODULE = "elasticsearch";
3
+ declare const _default: import("@medusajs/types").ModuleExports<typeof ElasticsearchModuleService> & {
4
+ linkable: Record<string, any>;
5
+ };
6
+ export default _default;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ELASTICSEARCH_MODULE = void 0;
7
+ const utils_1 = require("@medusajs/framework/utils");
8
+ const service_js_1 = __importDefault(require("./service.js"));
9
+ exports.ELASTICSEARCH_MODULE = 'elasticsearch';
10
+ exports.default = (0, utils_1.Module)(exports.ELASTICSEARCH_MODULE, {
11
+ service: service_js_1.default,
12
+ });
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/modules/elasticsearch/index.ts"],"names":[],"mappings":";;;;;;AAAA,qDAAkD;AAClD,8DAAqD;AAExC,QAAA,oBAAoB,GAAG,eAAe,CAAA;AAEnD,kBAAe,IAAA,cAAM,EAAC,4BAAoB,EAAE;IAC1C,OAAO,EAAE,oBAA0B;CACpC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ import { LoaderOptions } from '@medusajs/framework/types';
2
+ export default function initializeElasticsearchLoader({ container, }: LoaderOptions): Promise<void>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.default = initializeElasticsearchLoader;
4
+ async function initializeElasticsearchLoader({ container, }) {
5
+ try {
6
+ const service = container.resolve('elasticsearch');
7
+ await service.initializeIndexes();
8
+ }
9
+ catch (err) {
10
+ const logger = container.resolve('logger');
11
+ logger.warn(`Elasticsearch: failed to initialize indexes - ${err}`);
12
+ }
13
+ }
14
+ //# sourceMappingURL=initialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../../../../src/modules/elasticsearch/loaders/initialize.ts"],"names":[],"mappings":";;AAGA,gDAYC;AAZc,KAAK,UAAU,6BAA6B,CAAC,EAC1D,SAAS,GACK;IACd,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAC/B,eAAe,CACc,CAAA;QAC/B,MAAM,OAAO,CAAC,iBAAiB,EAAE,CAAA;IACnC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC1C,MAAM,CAAC,IAAI,CAAC,iDAAiD,GAAG,EAAE,CAAC,CAAA;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,20 @@
1
+ import { Client } from '@elastic/elasticsearch';
2
+ import { ElasticsearchPluginOptions, IndexConfig, SearchOptions } from './types.js';
3
+ type InjectedDependencies = Record<string, unknown>;
4
+ export default class ElasticsearchModuleService {
5
+ protected readonly options_: ElasticsearchPluginOptions;
6
+ protected readonly client_: Client;
7
+ constructor(_: InjectedDependencies, options: ElasticsearchPluginOptions);
8
+ createIndex(indexName: string, options?: Record<string, unknown>): Promise<import("@elastic/elasticsearch/lib/api/types.js").IndicesCreateResponse>;
9
+ getIndex(indexName: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").IndicesGetResponse>;
10
+ indexData(documents: Record<string, unknown>[], type: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").BulkResponse | undefined>;
11
+ search(query: string, type: string, options?: SearchOptions): Promise<import("@elastic/elasticsearch/lib/api/types.js").SearchResponse<unknown, Record<string, import("@elastic/elasticsearch/lib/api/types.js").AggregationsAggregate>>>;
12
+ retrieveFromIndex(objectIDs: string[], type: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").MgetResponse<unknown>>;
13
+ deleteFromIndex(objectIDs: string[], type: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").BulkResponse | undefined>;
14
+ deleteAllDocuments(type: string): Promise<import("@elastic/elasticsearch/lib/api/types.js").DeleteByQueryResponse>;
15
+ updateSettings(indexName: string, config: IndexConfig): Promise<import("@elastic/elasticsearch/lib/api/types.js").IndicesCreateResponse>;
16
+ initializeIndexes(): Promise<void>;
17
+ getIndexName(type: string): string;
18
+ private getTransformedDocuments;
19
+ }
20
+ export {};
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const elasticsearch_1 = require("@elastic/elasticsearch");
4
+ const transformer_js_1 = require("../../utils/transformer.js");
5
+ class ElasticsearchModuleService {
6
+ constructor(_, options) {
7
+ this.options_ = options;
8
+ this.client_ = new elasticsearch_1.Client(options.config);
9
+ }
10
+ async createIndex(indexName, options) {
11
+ return this.client_.indices.create({
12
+ index: indexName,
13
+ ...options,
14
+ });
15
+ }
16
+ async getIndex(indexName) {
17
+ return this.client_.indices.get({ index: indexName });
18
+ }
19
+ async indexData(documents, type) {
20
+ const indexName = this.getIndexName(type);
21
+ const transformed = this.getTransformedDocuments(type, documents);
22
+ if (!transformed.length) {
23
+ return;
24
+ }
25
+ return this.client_.bulk({
26
+ refresh: true,
27
+ operations: transformed.flatMap((doc) => [
28
+ { index: { _index: indexName, _id: doc.id } },
29
+ doc,
30
+ ]),
31
+ });
32
+ }
33
+ async search(query, type, options) {
34
+ const indexName = this.getIndexName(type);
35
+ const { paginationOptions, filter, additionalOptions } = options || {};
36
+ return this.client_.search({
37
+ index: indexName,
38
+ q: query,
39
+ ...(filter ? { body: { query: filter } } : {}),
40
+ ...(paginationOptions?.offset !== undefined
41
+ ? { from: paginationOptions.offset }
42
+ : {}),
43
+ ...(paginationOptions?.limit !== undefined
44
+ ? { size: paginationOptions.limit }
45
+ : {}),
46
+ ...additionalOptions,
47
+ });
48
+ }
49
+ async retrieveFromIndex(objectIDs, type) {
50
+ const indexName = this.getIndexName(type);
51
+ return this.client_.mget({
52
+ index: indexName,
53
+ ids: objectIDs,
54
+ });
55
+ }
56
+ async deleteFromIndex(objectIDs, type) {
57
+ const indexName = this.getIndexName(type);
58
+ if (!objectIDs.length) {
59
+ return;
60
+ }
61
+ return this.client_.bulk({
62
+ refresh: true,
63
+ operations: objectIDs.flatMap((id) => [
64
+ { delete: { _index: indexName, _id: id } },
65
+ ]),
66
+ });
67
+ }
68
+ async deleteAllDocuments(type) {
69
+ const indexName = this.getIndexName(type);
70
+ return this.client_.deleteByQuery({
71
+ index: indexName,
72
+ body: {
73
+ query: {
74
+ match_all: {},
75
+ },
76
+ },
77
+ });
78
+ }
79
+ async updateSettings(indexName, config) {
80
+ const { mappings, settings } = config;
81
+ const exists = await this.client_.indices.exists({
82
+ index: indexName,
83
+ });
84
+ if (exists) {
85
+ await this.client_.indices.delete({
86
+ index: indexName,
87
+ });
88
+ }
89
+ return this.createIndex(indexName, {
90
+ mappings,
91
+ settings,
92
+ });
93
+ }
94
+ async initializeIndexes() {
95
+ const { settings } = this.options_;
96
+ if (!settings) {
97
+ return;
98
+ }
99
+ await Promise.all(Object.entries(settings).map(([indexName, config]) => this.updateSettings(indexName, config)));
100
+ }
101
+ getIndexName(type) {
102
+ return type;
103
+ }
104
+ getTransformedDocuments(type, documents) {
105
+ if (!documents?.length) {
106
+ return [];
107
+ }
108
+ const customTransformer = this.options_.settings?.[type]?.transformer;
109
+ if (customTransformer) {
110
+ return documents.map(customTransformer);
111
+ }
112
+ if (type === 'products') {
113
+ return documents.map(transformer_js_1.transformProduct);
114
+ }
115
+ if (type === 'categories') {
116
+ return documents.map(transformer_js_1.transformCategory);
117
+ }
118
+ return documents;
119
+ }
120
+ }
121
+ exports.default = ElasticsearchModuleService;
122
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../../src/modules/elasticsearch/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { ClientOptions } from '@elastic/elasticsearch';
2
+ import { IndicesIndexSettings, MappingTypeMapping } from '@elastic/elasticsearch/lib/api/types';
3
+ export type SearchOptions = {
4
+ paginationOptions?: {
5
+ offset?: number;
6
+ limit?: number;
7
+ };
8
+ filter?: Record<string, unknown>;
9
+ additionalOptions?: Record<string, unknown>;
10
+ };
11
+ export type ElasticIndexSettings = {
12
+ mappings?: MappingTypeMapping;
13
+ settings?: IndicesIndexSettings;
14
+ };
15
+ export type IndexConfig = ElasticIndexSettings & {
16
+ transformer?: (document: Record<string, unknown>) => Record<string, unknown>;
17
+ searchableAttributes?: string[];
18
+ attributesToRetrieve?: string[];
19
+ };
20
+ export type ElasticsearchPluginOptions = {
21
+ config: ClientOptions;
22
+ settings?: Record<string, IndexConfig>;
23
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/modules/elasticsearch/types.ts"],"names":[],"mappings":""}