@86d-app/search 0.0.4 → 0.0.6

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 (93) hide show
  1. package/.turbo/turbo-build.log +1 -0
  2. package/AGENTS.md +72 -0
  3. package/README.md +171 -28
  4. package/dist/__tests__/controllers.test.d.ts +2 -0
  5. package/dist/__tests__/controllers.test.d.ts.map +1 -0
  6. package/dist/__tests__/embedding-provider.test.d.ts +2 -0
  7. package/dist/__tests__/embedding-provider.test.d.ts.map +1 -0
  8. package/dist/__tests__/endpoint-security.test.d.ts +2 -0
  9. package/dist/__tests__/endpoint-security.test.d.ts.map +1 -0
  10. package/dist/__tests__/meilisearch-provider.test.d.ts +2 -0
  11. package/dist/__tests__/meilisearch-provider.test.d.ts.map +1 -0
  12. package/dist/__tests__/service-impl.test.d.ts +2 -0
  13. package/dist/__tests__/service-impl.test.d.ts.map +1 -0
  14. package/dist/admin/components/index.d.ts +2 -0
  15. package/dist/admin/components/index.d.ts.map +1 -0
  16. package/dist/admin/components/search-analytics.d.ts +2 -0
  17. package/dist/admin/components/search-analytics.d.ts.map +1 -0
  18. package/dist/admin/endpoints/analytics.d.ts +15 -0
  19. package/dist/admin/endpoints/analytics.d.ts.map +1 -0
  20. package/dist/admin/endpoints/bulk-index.d.ts +20 -0
  21. package/dist/admin/endpoints/bulk-index.d.ts.map +1 -0
  22. package/dist/admin/endpoints/click-analytics.d.ts +7 -0
  23. package/dist/admin/endpoints/click-analytics.d.ts.map +1 -0
  24. package/dist/admin/endpoints/get-settings.d.ts +17 -0
  25. package/dist/admin/endpoints/get-settings.d.ts.map +1 -0
  26. package/dist/admin/endpoints/index-manage.d.ts +26 -0
  27. package/dist/admin/endpoints/index-manage.d.ts.map +1 -0
  28. package/dist/admin/endpoints/index.d.ts +125 -0
  29. package/dist/admin/endpoints/index.d.ts.map +1 -0
  30. package/dist/admin/endpoints/popular.d.ts +10 -0
  31. package/dist/admin/endpoints/popular.d.ts.map +1 -0
  32. package/dist/admin/endpoints/synonyms.d.ts +30 -0
  33. package/dist/admin/endpoints/synonyms.d.ts.map +1 -0
  34. package/dist/admin/endpoints/zero-results.d.ts +10 -0
  35. package/dist/admin/endpoints/zero-results.d.ts.map +1 -0
  36. package/dist/embedding-provider.d.ts +28 -0
  37. package/dist/embedding-provider.d.ts.map +1 -0
  38. package/dist/index.d.ts +23 -0
  39. package/dist/index.d.ts.map +1 -0
  40. package/dist/meilisearch-provider.d.ts +104 -0
  41. package/dist/meilisearch-provider.d.ts.map +1 -0
  42. package/dist/schema.d.ts +133 -0
  43. package/dist/schema.d.ts.map +1 -0
  44. package/dist/service-impl.d.ts +6 -0
  45. package/dist/service-impl.d.ts.map +1 -0
  46. package/dist/service.d.ts +127 -0
  47. package/dist/service.d.ts.map +1 -0
  48. package/dist/store/components/_hooks.d.ts +6 -0
  49. package/dist/store/components/_hooks.d.ts.map +1 -0
  50. package/dist/store/components/index.d.ts +10 -0
  51. package/dist/store/components/index.d.ts.map +1 -0
  52. package/dist/store/components/search-bar.d.ts +7 -0
  53. package/dist/store/components/search-bar.d.ts.map +1 -0
  54. package/dist/store/components/search-page.d.ts +4 -0
  55. package/dist/store/components/search-page.d.ts.map +1 -0
  56. package/dist/store/components/search-results.d.ts +9 -0
  57. package/dist/store/components/search-results.d.ts.map +1 -0
  58. package/dist/store/endpoints/click.d.ts +14 -0
  59. package/dist/store/endpoints/click.d.ts.map +1 -0
  60. package/dist/store/endpoints/index.d.ts +85 -0
  61. package/dist/store/endpoints/index.d.ts.map +1 -0
  62. package/dist/store/endpoints/recent.d.ts +15 -0
  63. package/dist/store/endpoints/recent.d.ts.map +1 -0
  64. package/dist/store/endpoints/search.d.ts +36 -0
  65. package/dist/store/endpoints/search.d.ts.map +1 -0
  66. package/dist/store/endpoints/store-search.d.ts +16 -0
  67. package/dist/store/endpoints/store-search.d.ts.map +1 -0
  68. package/dist/store/endpoints/suggest.d.ts +11 -0
  69. package/dist/store/endpoints/suggest.d.ts.map +1 -0
  70. package/package.json +3 -3
  71. package/src/__tests__/controllers.test.ts +1026 -0
  72. package/src/__tests__/embedding-provider.test.ts +195 -0
  73. package/src/__tests__/endpoint-security.test.ts +300 -0
  74. package/src/__tests__/meilisearch-provider.test.ts +400 -0
  75. package/src/__tests__/service-impl.test.ts +341 -8
  76. package/src/admin/components/search-analytics.tsx +120 -0
  77. package/src/admin/endpoints/bulk-index.ts +34 -0
  78. package/src/admin/endpoints/click-analytics.ts +16 -0
  79. package/src/admin/endpoints/get-settings.ts +56 -0
  80. package/src/admin/endpoints/index-manage.ts +4 -1
  81. package/src/admin/endpoints/index.ts +6 -0
  82. package/src/admin/endpoints/synonyms.ts +1 -1
  83. package/src/embedding-provider.ts +99 -0
  84. package/src/index.ts +60 -4
  85. package/src/meilisearch-provider.ts +239 -0
  86. package/src/schema.ts +15 -0
  87. package/src/service-impl.ts +605 -34
  88. package/src/service.ts +60 -1
  89. package/src/store/endpoints/click.ts +21 -0
  90. package/src/store/endpoints/index.ts +2 -0
  91. package/src/store/endpoints/search.ts +38 -10
  92. package/src/store/endpoints/suggest.ts +2 -2
  93. package/vitest.config.ts +2 -0
@@ -0,0 +1,30 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,10 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,28 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,23 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,104 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meilisearch-provider.d.ts","sourceRoot":"","sources":["../src/meilisearch-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,133 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4DD,CAAC"}
@@ -0,0 +1,6 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,127 @@
1
+ import type { ModuleController } from "@86d-app/core";
2
+ export interface SearchIndexItem {
3
+ id: string;
4
+ entityType: string;
5
+ entityId: string;
6
+ title: string;
7
+ body?: string | undefined;
8
+ tags: string[];
9
+ url: string;
10
+ image?: string | undefined;
11
+ metadata: Record<string, unknown>;
12
+ indexedAt: Date;
13
+ }
14
+ export interface SearchQuery {
15
+ id: string;
16
+ term: string;
17
+ normalizedTerm: string;
18
+ resultCount: number;
19
+ sessionId?: string | undefined;
20
+ searchedAt: Date;
21
+ }
22
+ export interface SearchSynonym {
23
+ id: string;
24
+ term: string;
25
+ synonyms: string[];
26
+ createdAt: Date;
27
+ }
28
+ export interface SearchClick {
29
+ id: string;
30
+ queryId: string;
31
+ term: string;
32
+ entityType: string;
33
+ entityId: string;
34
+ position: number;
35
+ clickedAt: Date;
36
+ }
37
+ export type SearchSortField = "relevance" | "newest" | "oldest" | "title_asc" | "title_desc";
38
+ export interface SearchFacets {
39
+ entityTypes: Array<{
40
+ type: string;
41
+ count: number;
42
+ }>;
43
+ tags: Array<{
44
+ tag: string;
45
+ count: number;
46
+ }>;
47
+ }
48
+ export interface SearchResult {
49
+ item: SearchIndexItem;
50
+ score: number;
51
+ highlights?: SearchHighlight | undefined;
52
+ }
53
+ export interface SearchHighlight {
54
+ title?: string | undefined;
55
+ body?: string | undefined;
56
+ }
57
+ export interface SearchAnalyticsSummary {
58
+ totalQueries: number;
59
+ uniqueTerms: number;
60
+ avgResultCount: number;
61
+ zeroResultCount: number;
62
+ zeroResultRate: number;
63
+ clickThroughRate: number;
64
+ avgClickPosition: number;
65
+ }
66
+ export interface PopularTerm {
67
+ term: string;
68
+ count: number;
69
+ avgResultCount: number;
70
+ }
71
+ export interface SearchController extends ModuleController {
72
+ indexItem(params: {
73
+ entityType: string;
74
+ entityId: string;
75
+ title: string;
76
+ body?: string | undefined;
77
+ tags?: string[] | undefined;
78
+ url: string;
79
+ image?: string | undefined;
80
+ metadata?: Record<string, unknown> | undefined;
81
+ }): Promise<SearchIndexItem>;
82
+ bulkIndex(items: Array<{
83
+ entityType: string;
84
+ entityId: string;
85
+ title: string;
86
+ body?: string | undefined;
87
+ tags?: string[] | undefined;
88
+ url: string;
89
+ image?: string | undefined;
90
+ metadata?: Record<string, unknown> | undefined;
91
+ }>): Promise<{
92
+ indexed: number;
93
+ errors: number;
94
+ }>;
95
+ removeFromIndex(entityType: string, entityId: string): Promise<boolean>;
96
+ search(query: string, options?: {
97
+ entityType?: string | undefined;
98
+ tags?: string[] | undefined;
99
+ sort?: SearchSortField | undefined;
100
+ fuzzy?: boolean | undefined;
101
+ limit?: number | undefined;
102
+ skip?: number | undefined;
103
+ }): Promise<{
104
+ results: SearchResult[];
105
+ total: number;
106
+ facets: SearchFacets;
107
+ didYouMean?: string | undefined;
108
+ }>;
109
+ suggest(prefix: string, limit?: number): Promise<string[]>;
110
+ recordQuery(term: string, resultCount: number, sessionId?: string | undefined): Promise<SearchQuery>;
111
+ recordClick(params: {
112
+ queryId: string;
113
+ term: string;
114
+ entityType: string;
115
+ entityId: string;
116
+ position: number;
117
+ }): Promise<SearchClick>;
118
+ getRecentQueries(sessionId: string, limit?: number): Promise<SearchQuery[]>;
119
+ getPopularTerms(limit?: number): Promise<PopularTerm[]>;
120
+ getZeroResultQueries(limit?: number): Promise<PopularTerm[]>;
121
+ getAnalytics(): Promise<SearchAnalyticsSummary>;
122
+ addSynonym(term: string, synonyms: string[]): Promise<SearchSynonym>;
123
+ removeSynonym(id: string): Promise<boolean>;
124
+ listSynonyms(): Promise<SearchSynonym[]>;
125
+ getIndexCount(): Promise<number>;
126
+ }
127
+ //# sourceMappingURL=service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function useSearchApi(): {
2
+ search: import("@86d-app/core/client").AnyEndpointHook;
3
+ suggest: import("@86d-app/core/client").AnyEndpointHook;
4
+ recent: import("@86d-app/core/client").AnyEndpointHook;
5
+ };
6
+ //# sourceMappingURL=_hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_hooks.d.ts","sourceRoot":"","sources":["../../../src/store/components/_hooks.ts"],"names":[],"mappings":"AAIA,wBAAgB,YAAY;;;;EAO3B"}
@@ -0,0 +1,10 @@
1
+ import { SearchBar } from "./search-bar";
2
+ import { SearchPage } from "./search-page";
3
+ import { SearchResults } from "./search-results";
4
+ declare const _default: {
5
+ SearchBar: typeof SearchBar;
6
+ SearchResults: typeof SearchResults;
7
+ SearchPage: typeof SearchPage;
8
+ };
9
+ export default _default;
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/store/components/index.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;;;;;;AAEjD,wBAI0B"}
@@ -0,0 +1,7 @@
1
+ interface SearchBarProps {
2
+ placeholder?: string | undefined;
3
+ onSearch?: ((query: string) => void) | undefined;
4
+ }
5
+ export declare function SearchBar({ placeholder, onSearch, }: SearchBarProps): import("react").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=search-bar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-bar.d.ts","sourceRoot":"","sources":["../../../src/store/components/search-bar.tsx"],"names":[],"mappings":"AAKA,UAAU,cAAc;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CACjD;AAED,wBAAgB,SAAS,CAAC,EACzB,WAAyB,EACzB,QAAQ,GACR,EAAE,cAAc,+BA2IhB"}
@@ -0,0 +1,4 @@
1
+ export declare function SearchPage({ sessionId }: {
2
+ sessionId?: string | undefined;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=search-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-page.d.ts","sourceRoot":"","sources":["../../../src/store/components/search-page.tsx"],"names":[],"mappings":"AAMA,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,+BAmB3E"}
@@ -0,0 +1,9 @@
1
+ interface SearchResultsProps {
2
+ query: string;
3
+ entityType?: string | undefined;
4
+ sessionId?: string | undefined;
5
+ limit?: number | undefined;
6
+ }
7
+ export declare function SearchResults({ query, entityType, sessionId, limit, }: SearchResultsProps): import("react").JSX.Element | null;
8
+ export {};
9
+ //# sourceMappingURL=search-results.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-results.d.ts","sourceRoot":"","sources":["../../../src/store/components/search-results.tsx"],"names":[],"mappings":"AAcA,UAAU,kBAAkB;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,wBAAgB,aAAa,CAAC,EAC7B,KAAK,EACL,UAAU,EACV,SAAS,EACT,KAAU,GACV,EAAE,kBAAkB,sCA2EpB"}
@@ -0,0 +1,14 @@
1
+ import { z } from "@86d-app/core";
2
+ export declare const clickEndpoint: import("better-call").StrictEndpoint<"/search/click", {
3
+ method: "POST";
4
+ body: z.ZodObject<{
5
+ queryId: z.ZodString;
6
+ term: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
7
+ entityType: z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>;
8
+ entityId: z.ZodString;
9
+ position: z.ZodNumber;
10
+ }, z.core.$strip>;
11
+ }, {
12
+ id: string;
13
+ }>;
14
+ //# sourceMappingURL=click.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"click.d.ts","sourceRoot":"","sources":["../../../src/store/endpoints/click.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,CAAC,EAAE,MAAM,eAAe,CAAC;AAGrE,eAAO,MAAM,aAAa;;;;;;;;;;;EAiBzB,CAAC"}