@86d-app/search 0.0.22 → 0.0.24

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 (105) hide show
  1. package/dist/modules/search/src/__tests__/admin-settings.test.js +262 -0
  2. package/dist/modules/search/src/__tests__/controllers.test.js +853 -0
  3. package/dist/modules/search/src/__tests__/embedding-provider.test.js +150 -0
  4. package/dist/modules/search/src/__tests__/endpoint-security.test.js +250 -0
  5. package/dist/modules/search/src/__tests__/meilisearch-provider.test.js +318 -0
  6. package/dist/modules/search/src/__tests__/service-impl.test.js +703 -0
  7. package/dist/modules/search/src/__tests__/store-endpoints.test.js +295 -0
  8. package/dist/{admin/components/index.d.ts → modules/search/src/admin/components/index.jsx} +0 -1
  9. package/dist/modules/search/src/admin/components/search-analytics.jsx +230 -0
  10. package/dist/modules/search/src/admin/endpoints/analytics.js +9 -0
  11. package/dist/modules/search/src/admin/endpoints/bulk-index.js +26 -0
  12. package/dist/modules/search/src/admin/endpoints/click-analytics.js +9 -0
  13. package/dist/modules/search/src/admin/endpoints/get-settings.js +97 -0
  14. package/dist/modules/search/src/admin/endpoints/index-manage.js +32 -0
  15. package/dist/modules/search/src/admin/endpoints/index.js +21 -0
  16. package/dist/modules/search/src/admin/endpoints/popular.js +11 -0
  17. package/dist/modules/search/src/admin/endpoints/synonyms.js +30 -0
  18. package/dist/modules/search/src/admin/endpoints/zero-results.js +11 -0
  19. package/dist/modules/search/src/embedding-provider.js +77 -0
  20. package/dist/modules/search/src/index.js +75 -0
  21. package/dist/modules/search/src/meilisearch-provider.js +138 -0
  22. package/dist/modules/search/src/schema.js +61 -0
  23. package/dist/modules/search/src/service-impl.js +770 -0
  24. package/dist/modules/search/src/service.js +1 -0
  25. package/dist/modules/search/src/store/components/_hooks.js +10 -0
  26. package/dist/modules/search/src/store/components/index.jsx +9 -0
  27. package/dist/modules/search/src/store/components/search-bar.jsx +91 -0
  28. package/dist/modules/search/src/store/components/search-page.jsx +17 -0
  29. package/dist/modules/search/src/store/components/search-results.jsx +51 -0
  30. package/dist/modules/search/src/store/endpoints/click.js +15 -0
  31. package/dist/modules/search/src/store/endpoints/index.js +12 -0
  32. package/dist/modules/search/src/store/endpoints/recent.js +18 -0
  33. package/dist/modules/search/src/store/endpoints/search.js +57 -0
  34. package/dist/modules/search/src/store/endpoints/store-search.js +33 -0
  35. package/dist/modules/search/src/store/endpoints/suggest.js +12 -0
  36. package/package.json +1 -1
  37. package/src/__tests__/admin-settings.test.ts +367 -0
  38. package/src/__tests__/store-endpoints.test.ts +392 -0
  39. package/src/admin/endpoints/get-settings.ts +77 -0
  40. package/src/service.ts +20 -20
  41. package/dist/__tests__/controllers.test.d.ts +0 -2
  42. package/dist/__tests__/controllers.test.d.ts.map +0 -1
  43. package/dist/__tests__/embedding-provider.test.d.ts +0 -2
  44. package/dist/__tests__/embedding-provider.test.d.ts.map +0 -1
  45. package/dist/__tests__/endpoint-security.test.d.ts +0 -2
  46. package/dist/__tests__/endpoint-security.test.d.ts.map +0 -1
  47. package/dist/__tests__/meilisearch-provider.test.d.ts +0 -2
  48. package/dist/__tests__/meilisearch-provider.test.d.ts.map +0 -1
  49. package/dist/__tests__/service-impl.test.d.ts +0 -2
  50. package/dist/__tests__/service-impl.test.d.ts.map +0 -1
  51. package/dist/admin/components/index.d.ts.map +0 -1
  52. package/dist/admin/components/search-analytics.d.ts +0 -2
  53. package/dist/admin/components/search-analytics.d.ts.map +0 -1
  54. package/dist/admin/endpoints/analytics.d.ts +0 -15
  55. package/dist/admin/endpoints/analytics.d.ts.map +0 -1
  56. package/dist/admin/endpoints/bulk-index.d.ts +0 -20
  57. package/dist/admin/endpoints/bulk-index.d.ts.map +0 -1
  58. package/dist/admin/endpoints/click-analytics.d.ts +0 -7
  59. package/dist/admin/endpoints/click-analytics.d.ts.map +0 -1
  60. package/dist/admin/endpoints/get-settings.d.ts +0 -17
  61. package/dist/admin/endpoints/get-settings.d.ts.map +0 -1
  62. package/dist/admin/endpoints/index-manage.d.ts +0 -26
  63. package/dist/admin/endpoints/index-manage.d.ts.map +0 -1
  64. package/dist/admin/endpoints/index.d.ts +0 -125
  65. package/dist/admin/endpoints/index.d.ts.map +0 -1
  66. package/dist/admin/endpoints/popular.d.ts +0 -10
  67. package/dist/admin/endpoints/popular.d.ts.map +0 -1
  68. package/dist/admin/endpoints/synonyms.d.ts +0 -30
  69. package/dist/admin/endpoints/synonyms.d.ts.map +0 -1
  70. package/dist/admin/endpoints/zero-results.d.ts +0 -10
  71. package/dist/admin/endpoints/zero-results.d.ts.map +0 -1
  72. package/dist/embedding-provider.d.ts +0 -28
  73. package/dist/embedding-provider.d.ts.map +0 -1
  74. package/dist/index.d.ts +0 -23
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/meilisearch-provider.d.ts +0 -104
  77. package/dist/meilisearch-provider.d.ts.map +0 -1
  78. package/dist/schema.d.ts +0 -133
  79. package/dist/schema.d.ts.map +0 -1
  80. package/dist/service-impl.d.ts +0 -6
  81. package/dist/service-impl.d.ts.map +0 -1
  82. package/dist/service.d.ts +0 -127
  83. package/dist/service.d.ts.map +0 -1
  84. package/dist/store/components/_hooks.d.ts +0 -6
  85. package/dist/store/components/_hooks.d.ts.map +0 -1
  86. package/dist/store/components/index.d.ts +0 -10
  87. package/dist/store/components/index.d.ts.map +0 -1
  88. package/dist/store/components/search-bar.d.ts +0 -7
  89. package/dist/store/components/search-bar.d.ts.map +0 -1
  90. package/dist/store/components/search-page.d.ts +0 -4
  91. package/dist/store/components/search-page.d.ts.map +0 -1
  92. package/dist/store/components/search-results.d.ts +0 -9
  93. package/dist/store/components/search-results.d.ts.map +0 -1
  94. package/dist/store/endpoints/click.d.ts +0 -14
  95. package/dist/store/endpoints/click.d.ts.map +0 -1
  96. package/dist/store/endpoints/index.d.ts +0 -85
  97. package/dist/store/endpoints/index.d.ts.map +0 -1
  98. package/dist/store/endpoints/recent.d.ts +0 -15
  99. package/dist/store/endpoints/recent.d.ts.map +0 -1
  100. package/dist/store/endpoints/search.d.ts +0 -36
  101. package/dist/store/endpoints/search.d.ts.map +0 -1
  102. package/dist/store/endpoints/store-search.d.ts +0 -16
  103. package/dist/store/endpoints/store-search.d.ts.map +0 -1
  104. package/dist/store/endpoints/suggest.d.ts +0 -11
  105. package/dist/store/endpoints/suggest.d.ts.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"bulk-index.d.ts","sourceRoot":"","sources":["../../../src/admin/endpoints/bulk-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AAGvD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;EA8BrB,CAAC"}
@@ -1,7 +0,0 @@
1
- export declare const clickAnalyticsEndpoint: import("better-call").StrictEndpoint<"/admin/search/clicks", {
2
- method: "GET";
3
- }, {
4
- clickThroughRate: number;
5
- avgClickPosition: number;
6
- }>;
7
- //# sourceMappingURL=click-analytics.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"click-analytics.d.ts","sourceRoot":"","sources":["../../../src/admin/endpoints/click-analytics.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,sBAAsB;;;;;EAYlC,CAAC"}
@@ -1,17 +0,0 @@
1
- export declare const getSettings: import("better-call").StrictEndpoint<"/admin/search/settings", {
2
- method: "GET";
3
- }, {
4
- meilisearch: {
5
- configured: boolean;
6
- host: string | null;
7
- apiKey: string | null;
8
- indexUid: string;
9
- };
10
- embeddings: {
11
- configured: boolean;
12
- provider: string | null;
13
- model: string;
14
- };
15
- indexCount: number;
16
- }>;
17
- //# sourceMappingURL=get-settings.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-settings.d.ts","sourceRoot":"","sources":["../../../src/admin/endpoints/get-settings.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;EAsCvB,CAAC"}
@@ -1,26 +0,0 @@
1
- import { z } from "@86d-app/core";
2
- export declare const indexItem: import("better-call").StrictEndpoint<"/admin/search/index", {
3
- method: "POST";
4
- body: z.ZodObject<{
5
- entityType: z.ZodString;
6
- entityId: z.ZodString;
7
- title: z.ZodString;
8
- body: z.ZodOptional<z.ZodString>;
9
- tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
10
- url: z.ZodString;
11
- image: z.ZodOptional<z.ZodString>;
12
- metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
13
- }, z.core.$strip>;
14
- }, {
15
- item: import("../..").SearchIndexItem;
16
- }>;
17
- export declare const removeFromIndex: import("better-call").StrictEndpoint<"/admin/search/index/remove", {
18
- method: "POST";
19
- body: z.ZodObject<{
20
- entityType: z.ZodString;
21
- entityId: z.ZodString;
22
- }, z.core.$strip>;
23
- }, {
24
- removed: boolean;
25
- }>;
26
- //# sourceMappingURL=index-manage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-manage.d.ts","sourceRoot":"","sources":["../../../src/admin/endpoints/index-manage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AAGvD,eAAO,MAAM,SAAS;;;;;;;;;;;;;;EAuBrB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;EAiB3B,CAAC"}
@@ -1,125 +0,0 @@
1
- export declare const adminEndpoints: {
2
- "/admin/search/settings": import("better-call").StrictEndpoint<"/admin/search/settings", {
3
- method: "GET";
4
- }, {
5
- meilisearch: {
6
- configured: boolean;
7
- host: string | null;
8
- apiKey: string | null;
9
- indexUid: string;
10
- };
11
- embeddings: {
12
- configured: boolean;
13
- provider: string | null;
14
- model: string;
15
- };
16
- indexCount: number;
17
- }>;
18
- "/admin/search/analytics": import("better-call").StrictEndpoint<"/admin/search/analytics", {
19
- method: "GET";
20
- }, {
21
- analytics: {
22
- indexedItems: number;
23
- totalQueries: number;
24
- uniqueTerms: number;
25
- avgResultCount: number;
26
- zeroResultCount: number;
27
- zeroResultRate: number;
28
- clickThroughRate: number;
29
- avgClickPosition: number;
30
- };
31
- }>;
32
- "/admin/search/popular": import("better-call").StrictEndpoint<"/admin/search/popular", {
33
- method: "GET";
34
- query: import("zod").ZodObject<{
35
- limit: import("zod").ZodOptional<import("zod").ZodCoercedNumber<unknown>>;
36
- }, import("zod/v4/core").$strip>;
37
- }, {
38
- terms: import("../../service").PopularTerm[];
39
- }>;
40
- "/admin/search/zero-results": import("better-call").StrictEndpoint<"/admin/search/zero-results", {
41
- method: "GET";
42
- query: import("zod").ZodObject<{
43
- limit: import("zod").ZodOptional<import("zod").ZodCoercedNumber<unknown>>;
44
- }, import("zod/v4/core").$strip>;
45
- }, {
46
- terms: import("../../service").PopularTerm[];
47
- }>;
48
- "/admin/search/clicks": import("better-call").StrictEndpoint<"/admin/search/clicks", {
49
- method: "GET";
50
- }, {
51
- clickThroughRate: number;
52
- avgClickPosition: number;
53
- }>;
54
- "/admin/search/synonyms": import("better-call").StrictEndpoint<"/admin/search/synonyms", {
55
- method: "GET";
56
- }, {
57
- synonyms: import("../..").SearchSynonym[];
58
- }>;
59
- "/admin/search/synonyms/add": import("better-call").StrictEndpoint<"/admin/search/synonyms/add", {
60
- method: "POST";
61
- body: import("zod").ZodObject<{
62
- term: import("zod").ZodString;
63
- synonyms: import("zod").ZodArray<import("zod").ZodString>;
64
- }, import("zod/v4/core").$strip>;
65
- }, {
66
- synonym: import("../..").SearchSynonym;
67
- }>;
68
- "/admin/search/synonyms/:id/delete": import("better-call").StrictEndpoint<"/admin/search/synonyms/:id/delete", {
69
- method: "POST";
70
- params: import("zod").ZodObject<{
71
- id: import("zod").ZodString;
72
- }, import("zod/v4/core").$strip>;
73
- }, {
74
- error: string;
75
- status: number;
76
- success?: never;
77
- } | {
78
- success: boolean;
79
- error?: never;
80
- status?: never;
81
- }>;
82
- "/admin/search/index": import("better-call").StrictEndpoint<"/admin/search/index", {
83
- method: "POST";
84
- body: import("zod").ZodObject<{
85
- entityType: import("zod").ZodString;
86
- entityId: import("zod").ZodString;
87
- title: import("zod").ZodString;
88
- body: import("zod").ZodOptional<import("zod").ZodString>;
89
- tags: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
90
- url: import("zod").ZodString;
91
- image: import("zod").ZodOptional<import("zod").ZodString>;
92
- metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
93
- }, import("zod/v4/core").$strip>;
94
- }, {
95
- item: import("../..").SearchIndexItem;
96
- }>;
97
- "/admin/search/index/remove": import("better-call").StrictEndpoint<"/admin/search/index/remove", {
98
- method: "POST";
99
- body: import("zod").ZodObject<{
100
- entityType: import("zod").ZodString;
101
- entityId: import("zod").ZodString;
102
- }, import("zod/v4/core").$strip>;
103
- }, {
104
- removed: boolean;
105
- }>;
106
- "/admin/search/index/bulk": import("better-call").StrictEndpoint<"/admin/search/index/bulk", {
107
- method: "POST";
108
- body: import("zod").ZodObject<{
109
- items: import("zod").ZodArray<import("zod").ZodObject<{
110
- entityType: import("zod").ZodString;
111
- entityId: import("zod").ZodString;
112
- title: import("zod").ZodString;
113
- body: import("zod").ZodOptional<import("zod").ZodString>;
114
- tags: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
115
- url: import("zod").ZodString;
116
- image: import("zod").ZodOptional<import("zod").ZodString>;
117
- metadata: import("zod").ZodOptional<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
118
- }, import("zod/v4/core").$strip>>;
119
- }, import("zod/v4/core").$strip>;
120
- }, {
121
- indexed: number;
122
- errors: number;
123
- }>;
124
- };
125
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/admin/endpoints/index.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAY1B,CAAC"}
@@ -1,10 +0,0 @@
1
- import { z } from "@86d-app/core";
2
- export declare const popularEndpoint: import("better-call").StrictEndpoint<"/admin/search/popular", {
3
- method: "GET";
4
- query: z.ZodObject<{
5
- limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
6
- }, z.core.$strip>;
7
- }, {
8
- terms: import("../../service").PopularTerm[];
9
- }>;
10
- //# sourceMappingURL=popular.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"popular.d.ts","sourceRoot":"","sources":["../../../src/admin/endpoints/popular.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AAGvD,eAAO,MAAM,eAAe;;;;;;;EAa3B,CAAC"}
@@ -1,30 +0,0 @@
1
- import { z } from "@86d-app/core";
2
- export declare const listSynonyms: import("better-call").StrictEndpoint<"/admin/search/synonyms", {
3
- method: "GET";
4
- }, {
5
- synonyms: import("../..").SearchSynonym[];
6
- }>;
7
- export declare const addSynonym: import("better-call").StrictEndpoint<"/admin/search/synonyms/add", {
8
- method: "POST";
9
- body: z.ZodObject<{
10
- term: z.ZodString;
11
- synonyms: z.ZodArray<z.ZodString>;
12
- }, z.core.$strip>;
13
- }, {
14
- synonym: import("../..").SearchSynonym;
15
- }>;
16
- export declare const removeSynonym: import("better-call").StrictEndpoint<"/admin/search/synonyms/:id/delete", {
17
- method: "POST";
18
- params: z.ZodObject<{
19
- id: z.ZodString;
20
- }, z.core.$strip>;
21
- }, {
22
- error: string;
23
- status: number;
24
- success?: never;
25
- } | {
26
- success: boolean;
27
- error?: never;
28
- status?: never;
29
- }>;
30
- //# sourceMappingURL=synonyms.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"synonyms.d.ts","sourceRoot":"","sources":["../../../src/admin/endpoints/synonyms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AAGvD,eAAO,MAAM,YAAY;;;;EAQxB,CAAC;AAEF,eAAO,MAAM,UAAU;;;;;;;;EAiBtB,CAAC;AAEF,eAAO,MAAM,aAAa;;;;;;;;;;;;;EAgBzB,CAAC"}
@@ -1,10 +0,0 @@
1
- import { z } from "@86d-app/core";
2
- export declare const zeroResultsEndpoint: import("better-call").StrictEndpoint<"/admin/search/zero-results", {
3
- method: "GET";
4
- query: z.ZodObject<{
5
- limit: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
6
- }, z.core.$strip>;
7
- }, {
8
- terms: import("../../service").PopularTerm[];
9
- }>;
10
- //# sourceMappingURL=zero-results.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zero-results.d.ts","sourceRoot":"","sources":["../../../src/admin/endpoints/zero-results.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,CAAC,EAAE,MAAM,eAAe,CAAC;AAGvD,eAAO,MAAM,mBAAmB;;;;;;;EAa/B,CAAC"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Embedding provider for AI-powered semantic search.
3
- *
4
- * Calls OpenAI's text-embedding-3-small model to generate vector embeddings
5
- * for indexed items and search queries. When configured, search results are
6
- * ranked using a hybrid of lexical scoring and cosine similarity.
7
- */
8
- export interface EmbeddingProvider {
9
- generateEmbedding(text: string): Promise<number[] | null>;
10
- generateEmbeddings(texts: string[]): Promise<Array<number[] | null>>;
11
- }
12
- export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
13
- private readonly apiKey;
14
- private readonly model;
15
- private readonly baseUrl;
16
- constructor(apiKey: string, options?: {
17
- model?: string;
18
- baseUrl?: string;
19
- });
20
- generateEmbedding(text: string): Promise<number[] | null>;
21
- generateEmbeddings(texts: string[]): Promise<Array<number[] | null>>;
22
- }
23
- /**
24
- * Cosine similarity between two vectors.
25
- * Returns a value between -1 and 1 (1 = identical direction).
26
- */
27
- export declare function cosineSimilarity(a: number[], b: number[]): number;
28
- //# sourceMappingURL=embedding-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embedding-provider.d.ts","sourceRoot":"","sources":["../src/embedding-provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAYH,MAAM,WAAW,iBAAiB;IACjC,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;IAC1D,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;CACrE;AAED,qBAAa,uBAAwB,YAAW,iBAAiB;IAChE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAMpE,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IAKzD,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC;CAyC1E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAYjE"}
package/dist/index.d.ts DELETED
@@ -1,23 +0,0 @@
1
- import type { Module, ModuleConfig } from "@86d-app/core";
2
- export type { EmbeddingProvider } from "./embedding-provider";
3
- export { OpenAIEmbeddingProvider } from "./embedding-provider";
4
- export type { MeiliSearchProvider } from "./meilisearch-provider";
5
- export type { SearchClick, SearchController, SearchFacets, SearchHighlight, SearchIndexItem, SearchQuery, SearchResult, SearchSortField, SearchSynonym, } from "./service";
6
- export interface SearchOptions extends ModuleConfig {
7
- /** Maximum number of search results per query */
8
- maxResults?: number;
9
- /** OpenAI API key for AI-powered semantic search */
10
- openaiApiKey?: string;
11
- /** OpenRouter API key (alternative to OpenAI) */
12
- openrouterApiKey?: string;
13
- /** Embedding model name (default: text-embedding-3-small) */
14
- embeddingModel?: string;
15
- /** MeiliSearch host URL (e.g. http://localhost:7700) */
16
- meilisearchHost?: string;
17
- /** MeiliSearch API key (master or search key) */
18
- meilisearchApiKey?: string;
19
- /** MeiliSearch index name (default: "search") */
20
- meilisearchIndexUid?: string;
21
- }
22
- export default function search(options?: SearchOptions): Module;
23
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAiB,MAAM,eAAe,CAAC;AAQzE,YAAY,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,YAAY,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAClE,YAAY,EACX,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,GACb,MAAM,WAAW,CAAC;AAEnB,MAAM,WAAW,aAAc,SAAQ,YAAY;IAClD,iDAAiD;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iDAAiD;IACjD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wDAAwD;IACxD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iDAAiD;IACjD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iDAAiD;IACjD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CA4E9D"}
@@ -1,104 +0,0 @@
1
- /**
2
- * MeiliSearch provider for real search engine integration.
3
- *
4
- * When configured with a MeiliSearch host and API key, the search module
5
- * delegates indexing and querying to a dedicated MeiliSearch instance instead
6
- * of relying on in-application lexical search. Falls back gracefully when
7
- * the MeiliSearch instance is unreachable.
8
- */
9
- export interface MeiliSearchDocument {
10
- id: string;
11
- entityType: string;
12
- entityId: string;
13
- title: string;
14
- body?: string | undefined;
15
- tags: string[];
16
- url: string;
17
- image?: string | undefined;
18
- indexedAt: string;
19
- [key: string]: unknown;
20
- }
21
- export interface MeiliSearchHit {
22
- id: string;
23
- entityType: string;
24
- entityId: string;
25
- title: string;
26
- body?: string;
27
- tags: string[];
28
- url: string;
29
- image?: string;
30
- indexedAt: string;
31
- _formatted?: {
32
- title?: string;
33
- body?: string;
34
- [key: string]: string | undefined;
35
- };
36
- _rankingScore?: number;
37
- [key: string]: unknown;
38
- }
39
- export interface MeiliSearchResponse {
40
- hits: MeiliSearchHit[];
41
- query: string;
42
- processingTimeMs: number;
43
- estimatedTotalHits?: number;
44
- totalHits?: number;
45
- facetDistribution?: Record<string, Record<string, number>>;
46
- }
47
- interface MeiliSearchTaskResponse {
48
- taskUid: number;
49
- indexUid: string;
50
- status: "enqueued" | "processing" | "succeeded" | "failed";
51
- type: string;
52
- enqueuedAt: string;
53
- }
54
- interface MeiliSearchStatsResponse {
55
- numberOfDocuments: number;
56
- isIndexing: boolean;
57
- fieldDistribution: Record<string, number>;
58
- }
59
- export declare class MeiliSearchProvider {
60
- private readonly host;
61
- private readonly apiKey;
62
- private readonly indexUid;
63
- constructor(host: string, apiKey: string, indexUid?: string);
64
- /**
65
- * Add or replace documents in the MeiliSearch index.
66
- * MeiliSearch uses the `id` field as the primary key by default.
67
- */
68
- addDocuments(documents: MeiliSearchDocument[]): Promise<MeiliSearchTaskResponse>;
69
- /**
70
- * Delete a single document by its ID.
71
- */
72
- deleteDocument(documentId: string): Promise<MeiliSearchTaskResponse>;
73
- /**
74
- * Search the MeiliSearch index.
75
- */
76
- search(query: string, options?: {
77
- limit?: number | undefined;
78
- offset?: number | undefined;
79
- filter?: string | undefined;
80
- sort?: string[] | undefined;
81
- facets?: string[] | undefined;
82
- attributesToHighlight?: string[] | undefined;
83
- highlightPreTag?: string | undefined;
84
- highlightPostTag?: string | undefined;
85
- showRankingScore?: boolean | undefined;
86
- matchingStrategy?: "last" | "all" | "frequency" | undefined;
87
- }): Promise<MeiliSearchResponse>;
88
- /**
89
- * Check if the MeiliSearch instance is reachable and healthy.
90
- */
91
- isHealthy(): Promise<boolean>;
92
- /**
93
- * Get index statistics (document count, indexing status).
94
- */
95
- getStats(): Promise<MeiliSearchStatsResponse | null>;
96
- /**
97
- * Configure index settings: filterable and sortable attributes.
98
- * Called once on init to ensure MeiliSearch knows which fields to index.
99
- */
100
- configureIndex(): Promise<void>;
101
- private request;
102
- }
103
- export {};
104
- //# sourceMappingURL=meilisearch-provider.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"meilisearch-provider.d.ts","sourceRoot":"","sources":["../src/meilisearch-provider.ts"],"names":[],"mappings":"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"}
package/dist/schema.d.ts DELETED
@@ -1,133 +0,0 @@
1
- export declare const searchSchema: {
2
- searchIndex: {
3
- fields: {
4
- id: {
5
- type: "string";
6
- required: true;
7
- };
8
- entityType: {
9
- type: "string";
10
- required: true;
11
- };
12
- entityId: {
13
- type: "string";
14
- required: true;
15
- };
16
- title: {
17
- type: "string";
18
- required: true;
19
- };
20
- body: {
21
- type: "string";
22
- required: false;
23
- };
24
- tags: {
25
- type: "json";
26
- required: false;
27
- defaultValue: never[];
28
- };
29
- url: {
30
- type: "string";
31
- required: true;
32
- };
33
- image: {
34
- type: "string";
35
- required: false;
36
- };
37
- metadata: {
38
- type: "json";
39
- required: false;
40
- defaultValue: {};
41
- };
42
- indexedAt: {
43
- type: "date";
44
- required: true;
45
- defaultValue: () => Date;
46
- };
47
- };
48
- };
49
- searchQuery: {
50
- fields: {
51
- id: {
52
- type: "string";
53
- required: true;
54
- };
55
- term: {
56
- type: "string";
57
- required: true;
58
- };
59
- normalizedTerm: {
60
- type: "string";
61
- required: true;
62
- };
63
- resultCount: {
64
- type: "number";
65
- required: true;
66
- };
67
- sessionId: {
68
- type: "string";
69
- required: false;
70
- };
71
- searchedAt: {
72
- type: "date";
73
- required: true;
74
- defaultValue: () => Date;
75
- };
76
- };
77
- };
78
- searchSynonym: {
79
- fields: {
80
- id: {
81
- type: "string";
82
- required: true;
83
- };
84
- term: {
85
- type: "string";
86
- required: true;
87
- };
88
- synonyms: {
89
- type: "json";
90
- required: true;
91
- };
92
- createdAt: {
93
- type: "date";
94
- required: true;
95
- defaultValue: () => Date;
96
- };
97
- };
98
- };
99
- searchClick: {
100
- fields: {
101
- id: {
102
- type: "string";
103
- required: true;
104
- };
105
- queryId: {
106
- type: "string";
107
- required: true;
108
- };
109
- term: {
110
- type: "string";
111
- required: true;
112
- };
113
- entityType: {
114
- type: "string";
115
- required: true;
116
- };
117
- entityId: {
118
- type: "string";
119
- required: true;
120
- };
121
- position: {
122
- type: "number";
123
- required: true;
124
- };
125
- clickedAt: {
126
- type: "date";
127
- required: true;
128
- defaultValue: () => Date;
129
- };
130
- };
131
- };
132
- };
133
- //# sourceMappingURL=schema.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DD,CAAC"}
@@ -1,6 +0,0 @@
1
- import type { ModuleDataService } from "@86d-app/core";
2
- import type { EmbeddingProvider } from "./embedding-provider";
3
- import type { MeiliSearchProvider } from "./meilisearch-provider";
4
- import type { SearchController } from "./service";
5
- export declare function createSearchController(data: ModuleDataService, embeddingProvider?: EmbeddingProvider, meiliProvider?: MeiliSearchProvider): SearchController;
6
- //# sourceMappingURL=service-impl.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-impl.d.ts","sourceRoot":"","sources":["../src/service-impl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,KAAK,EAEX,mBAAmB,EACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAEX,gBAAgB,EAQhB,MAAM,WAAW,CAAC;AA6RnB,wBAAgB,sBAAsB,CACrC,IAAI,EAAE,iBAAiB,EACvB,iBAAiB,CAAC,EAAE,iBAAiB,EACrC,aAAa,CAAC,EAAE,mBAAmB,GACjC,gBAAgB,CAmpBlB"}