@endora-commerce/mod-search 0.100.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 (82) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +53 -0
  3. package/dist/backend/cli/reindex.d.ts +4 -0
  4. package/dist/backend/cli/reindex.d.ts.map +1 -0
  5. package/dist/backend/cli/reindex.js +32 -0
  6. package/dist/backend/cli/reindex.js.map +1 -0
  7. package/dist/backend/entities/search-phrase-record.entity.d.ts +40 -0
  8. package/dist/backend/entities/search-phrase-record.entity.d.ts.map +1 -0
  9. package/dist/backend/entities/search-phrase-record.entity.js +85 -0
  10. package/dist/backend/entities/search-phrase-record.entity.js.map +1 -0
  11. package/dist/backend/index.d.ts +87 -0
  12. package/dist/backend/index.d.ts.map +1 -0
  13. package/dist/backend/index.js +153 -0
  14. package/dist/backend/index.js.map +1 -0
  15. package/dist/backend/plugin.d.ts +133 -0
  16. package/dist/backend/plugin.d.ts.map +1 -0
  17. package/dist/backend/plugin.js +250 -0
  18. package/dist/backend/plugin.js.map +1 -0
  19. package/dist/backend/routes.admin.d.ts +28 -0
  20. package/dist/backend/routes.admin.d.ts.map +1 -0
  21. package/dist/backend/routes.admin.js +33 -0
  22. package/dist/backend/routes.admin.js.map +1 -0
  23. package/dist/backend/routes.public.d.ts +22 -0
  24. package/dist/backend/routes.public.d.ts.map +1 -0
  25. package/dist/backend/routes.public.js +192 -0
  26. package/dist/backend/routes.public.js.map +1 -0
  27. package/dist/backend/services/embedder-config-resolver.d.ts +25 -0
  28. package/dist/backend/services/embedder-config-resolver.d.ts.map +1 -0
  29. package/dist/backend/services/embedder-config-resolver.js +47 -0
  30. package/dist/backend/services/embedder-config-resolver.js.map +1 -0
  31. package/dist/backend/services/llm-toggle.service.d.ts +50 -0
  32. package/dist/backend/services/llm-toggle.service.d.ts.map +1 -0
  33. package/dist/backend/services/llm-toggle.service.js +78 -0
  34. package/dist/backend/services/llm-toggle.service.js.map +1 -0
  35. package/dist/backend/services/search-event-subscriber.d.ts +125 -0
  36. package/dist/backend/services/search-event-subscriber.d.ts.map +1 -0
  37. package/dist/backend/services/search-event-subscriber.js +113 -0
  38. package/dist/backend/services/search-event-subscriber.js.map +1 -0
  39. package/dist/backend/services/search-indexer.d.ts +346 -0
  40. package/dist/backend/services/search-indexer.d.ts.map +1 -0
  41. package/dist/backend/services/search-indexer.js +670 -0
  42. package/dist/backend/services/search-indexer.js.map +1 -0
  43. package/dist/backend/services/search-phrase-recorder.service.d.ts +25 -0
  44. package/dist/backend/services/search-phrase-recorder.service.d.ts.map +1 -0
  45. package/dist/backend/services/search-phrase-recorder.service.js +89 -0
  46. package/dist/backend/services/search-phrase-recorder.service.js.map +1 -0
  47. package/dist/backend/services/search-query-port.d.ts +29 -0
  48. package/dist/backend/services/search-query-port.d.ts.map +1 -0
  49. package/dist/backend/services/search-query-port.js +20 -0
  50. package/dist/backend/services/search-query-port.js.map +1 -0
  51. package/dist/backend/services/search-query.service.d.ts +205 -0
  52. package/dist/backend/services/search-query.service.d.ts.map +1 -0
  53. package/dist/backend/services/search-query.service.js +346 -0
  54. package/dist/backend/services/search-query.service.js.map +1 -0
  55. package/dist/backend/services/search-reindex-worker.d.ts +27 -0
  56. package/dist/backend/services/search-reindex-worker.d.ts.map +1 -0
  57. package/dist/backend/services/search-reindex-worker.js +13 -0
  58. package/dist/backend/services/search-reindex-worker.js.map +1 -0
  59. package/dist/backend/services/search-suggest.service.d.ts +53 -0
  60. package/dist/backend/services/search-suggest.service.d.ts.map +1 -0
  61. package/dist/backend/services/search-suggest.service.js +64 -0
  62. package/dist/backend/services/search-suggest.service.js.map +1 -0
  63. package/dist/backend/services/suggestion-pricing-enricher.d.ts +62 -0
  64. package/dist/backend/services/suggestion-pricing-enricher.d.ts.map +1 -0
  65. package/dist/backend/services/suggestion-pricing-enricher.js +41 -0
  66. package/dist/backend/services/suggestion-pricing-enricher.js.map +1 -0
  67. package/dist/manifest.d.ts +263 -0
  68. package/dist/manifest.d.ts.map +1 -0
  69. package/dist/manifest.js +300 -0
  70. package/dist/manifest.js.map +1 -0
  71. package/dist/migrations/20260501T123145_search_phrase_records_init.d.ts +13 -0
  72. package/dist/migrations/20260501T123145_search_phrase_records_init.d.ts.map +1 -0
  73. package/dist/migrations/20260501T123145_search_phrase_records_init.js +40 -0
  74. package/dist/migrations/20260501T123145_search_phrase_records_init.js.map +1 -0
  75. package/dist/migrations/index.d.ts +27 -0
  76. package/dist/migrations/index.d.ts.map +1 -0
  77. package/dist/migrations/index.js +29 -0
  78. package/dist/migrations/index.js.map +1 -0
  79. package/docs/search.md +284 -0
  80. package/i18n/en.json +10 -0
  81. package/i18n/pl.json +10 -0
  82. package/package.json +72 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-indexer.js","sourceRoot":"","sources":["../../../src/backend/services/search-indexer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { EntityManager } from '@mikro-orm/postgresql';
2
+ import type { SettingsReadPort } from '@endora-commerce/platform/kernel';
3
+ export interface RecordPhraseInput {
4
+ /** Verbatim phrase as the customer typed it. Must be non-empty. */
5
+ phrase: string;
6
+ /** Resolved channel ID (resolver middleware sets this; never trusted from the body). */
7
+ salesChannelId: string;
8
+ /** Number of products the search returned; `0` for dead-end phrases. */
9
+ resultCount: number;
10
+ }
11
+ export declare class SearchPhraseRecorder {
12
+ private readonly emFactory;
13
+ private readonly settingsService?;
14
+ private readonly onError;
15
+ constructor(emFactory: () => EntityManager, settingsService?: SettingsReadPort | undefined, onError?: (err: unknown) => void);
16
+ /**
17
+ * Returns a promise that resolves once the row has been queued for
18
+ * INSERT (or the threshold check has tripped). Callers must NOT
19
+ * await this from a request handler — fire and forget. The handler
20
+ * pattern is `void recorder.record(...)`.
21
+ */
22
+ record(input: RecordPhraseInput): Promise<void>;
23
+ private resolveThreshold;
24
+ }
25
+ //# sourceMappingURL=search-phrase-recorder.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-phrase-recorder.service.d.ts","sourceRoot":"","sources":["../../../src/backend/services/search-phrase-recorder.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAG3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AA2BzE,MAAM,WAAW,iBAAiB;IAChC,mEAAmE;IACnE,MAAM,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,cAAc,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAFP,SAAS,EAAE,MAAM,aAAa,EAC9B,eAAe,CAAC,EAAE,gBAAgB,YAAA,EAClC,OAAO,GAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAoB;IAGlE;;;;;OAKG;IACG,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;YAiCvC,gBAAgB;CAe/B"}
@@ -0,0 +1,89 @@
1
+ import { z } from 'zod';
2
+ import { SearchPhraseRecord } from '../entities/search-phrase-record.entity.js';
3
+ import { SalesChannel } from '@endora-commerce/platform/kernel';
4
+ import { SEARCH_SETTING_CODES, DEFAULT_POPUP_MINIMUM_QUERY_LENGTH, } from '../../manifest.js';
5
+ /**
6
+ * SearchPhraseRecorder — feature 006 / US3 / T035.
7
+ *
8
+ * Persists committed search phrases to `search_phrase_records` for the
9
+ * future Analytics module to aggregate. Three contractual properties:
10
+ *
11
+ * 1. Fire-and-forget. Callers (the `/api/v1/search/record` route)
12
+ * do NOT await `record()`; they hand off the promise so the
13
+ * storefront response is not delayed (FR-015).
14
+ * 2. Threshold no-op. Phrases shorter than the channel's
15
+ * `search.popup.minimum_query_length` setting are silently
16
+ * skipped — the storefront's client-side guard is the primary
17
+ * surface; this is the server-side belt-and-braces.
18
+ * 3. Errors never propagate. Persistence failures (DB hiccup,
19
+ * RESTRICT FK violation, etc.) are warn-logged and swallowed.
20
+ * The customer's search response cannot fail because analytics
21
+ * ingest had a bad day.
22
+ */
23
+ const numberSchema = z.number();
24
+ export class SearchPhraseRecorder {
25
+ emFactory;
26
+ settingsService;
27
+ onError;
28
+ constructor(emFactory, settingsService, onError = defaultLogger) {
29
+ this.emFactory = emFactory;
30
+ this.settingsService = settingsService;
31
+ this.onError = onError;
32
+ }
33
+ /**
34
+ * Returns a promise that resolves once the row has been queued for
35
+ * INSERT (or the threshold check has tripped). Callers must NOT
36
+ * await this from a request handler — fire and forget. The handler
37
+ * pattern is `void recorder.record(...)`.
38
+ */
39
+ async record(input) {
40
+ // command-coverage-ignore: telemetry/analytics ingestion — high-volume event
41
+ // recording, not an audited domain-state mutation.
42
+ try {
43
+ const trimmed = input.phrase.trim();
44
+ const threshold = await this.resolveThreshold(input.salesChannelId);
45
+ if (trimmed.length < threshold) {
46
+ return;
47
+ }
48
+ const em = this.emFactory();
49
+ const channel = await em.findOne(SalesChannel, { id: input.salesChannelId });
50
+ if (!channel) {
51
+ // The resolver middleware should have refused already; if we get
52
+ // here, log and bail rather than write an FK-violating row.
53
+ this.onError(new Error(`SearchPhraseRecorder: unknown sales_channel_id "${input.salesChannelId}"`));
54
+ return;
55
+ }
56
+ const record = em.create(SearchPhraseRecord, {
57
+ phrase: input.phrase,
58
+ phraseNormalized: trimmed.toLowerCase(),
59
+ salesChannel: channel,
60
+ resultCount: input.resultCount,
61
+ });
62
+ await em.persistAndFlush(record);
63
+ }
64
+ catch (err) {
65
+ this.onError(err);
66
+ }
67
+ }
68
+ async resolveThreshold(channelId) {
69
+ if (!this.settingsService)
70
+ return DEFAULT_POPUP_MINIMUM_QUERY_LENGTH;
71
+ try {
72
+ return await this.settingsService.get(SEARCH_SETTING_CODES.POPUP_MINIMUM_QUERY_LENGTH, channelId, numberSchema);
73
+ }
74
+ catch {
75
+ // SettingNotRegistered, OutOfScope, cache-layer hiccup — fall back
76
+ // to the manifest default. The recorder must not fail because
77
+ // settings has a bad day either.
78
+ return DEFAULT_POPUP_MINIMUM_QUERY_LENGTH;
79
+ }
80
+ }
81
+ }
82
+ function defaultLogger(err) {
83
+ console.warn(JSON.stringify({
84
+ level: 'warn',
85
+ msg: 'search phrase recorder failed',
86
+ error: err instanceof Error ? err.message : String(err),
87
+ }));
88
+ }
89
+ //# sourceMappingURL=search-phrase-recorder.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-phrase-recorder.service.js","sourceRoot":"","sources":["../../../src/backend/services/search-phrase-recorder.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAC;AAEhE,OAAO,EACL,oBAAoB,EACpB,kCAAkC,GACnC,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;AAWhC,MAAM,OAAO,oBAAoB;IAEZ;IACA;IACA;IAHnB,YACmB,SAA8B,EAC9B,eAAkC,EAClC,UAAkC,aAAa;QAF/C,cAAS,GAAT,SAAS,CAAqB;QAC9B,oBAAe,GAAf,eAAe,CAAmB;QAClC,YAAO,GAAP,OAAO,CAAwC;IAC/D,CAAC;IAEJ;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,KAAwB;QACnC,6EAA6E;QAC7E,mDAAmD;QACnD,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;YACpE,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;YAC7E,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,iEAAiE;gBACjE,4DAA4D;gBAC5D,IAAI,CAAC,OAAO,CACV,IAAI,KAAK,CACP,mDAAmD,KAAK,CAAC,cAAc,GAAG,CAC3E,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,kBAAkB,EAAE;gBAC3C,MAAM,EAAE,KAAK,CAAC,MAAM;gBACpB,gBAAgB,EAAE,OAAO,CAAC,WAAW,EAAE;gBACvC,YAAY,EAAE,OAAO;gBACrB,WAAW,EAAE,KAAK,CAAC,WAAW;aAC/B,CAAC,CAAC;YACH,MAAM,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QAC9C,IAAI,CAAC,IAAI,CAAC,eAAe;YAAE,OAAO,kCAAkC,CAAC;QACrE,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,GAAG,CACnC,oBAAoB,CAAC,0BAA0B,EAC/C,SAAS,EACT,YAAY,CACb,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,mEAAmE;YACnE,8DAA8D;YAC9D,iCAAiC;YACjC,OAAO,kCAAkC,CAAC;QAC5C,CAAC;IACH,CAAC;CACF;AAED,SAAS,aAAa,CAAC,GAAY;IAEjC,OAAO,CAAC,IAAI,CACV,IAAI,CAAC,SAAS,CAAC;QACb,KAAK,EAAE,MAAM;QACb,GAAG,EAAE,+BAA+B;QACpC,KAAK,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;KACxD,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { SearchListProductsParams, SearchListResult, SearchQueryContext, SearchQueryPort } from '@endora-commerce/contracts';
2
+ /**
3
+ * The `searchQueryPort` adapter — where the Meilisearch degrade lives
4
+ * (feature 075, issue #153).
5
+ *
6
+ * `SearchQueryService` throws {@link SearchBackendUnavailable} when the index
7
+ * refuses or times out, and that was fine while its one cross-module caller
8
+ * constructed the class: a `catch` around a plain object is a plain `catch`.
9
+ * It stops being fine the moment the caller resolves a **port**, because the
10
+ * same clause then also stands between the caller and `ModuleDisabledError` —
11
+ * `catch (err) { if (err instanceof SearchBackendUnavailable) … else throw }`
12
+ * is the conditional re-throw `check:port-catches` refuses, and it refuses it
13
+ * because a status test lets a switched-off module through by accident rather
14
+ * than by decision.
15
+ *
16
+ * So the conversion happens here, on the owner's side of the boundary, and the
17
+ * published `SearchQueryPort` states the two outcomes in its return type. This
18
+ * is the module's own error class caught inside the module that raises it —
19
+ * not a tolerance bolted onto a port call.
20
+ *
21
+ * Nothing else is caught. A 400 on an unfilterable attribute is `search`'s
22
+ * answer to a bad request and reaches the caller unchanged.
23
+ */
24
+ /** The read side of `SearchQueryService`, as this adapter consumes it. */
25
+ export interface SearchQueryBackend {
26
+ listProducts(params: SearchListProductsParams, ctx: SearchQueryContext): Promise<SearchListResult>;
27
+ }
28
+ export declare function createSearchQueryPort(backend: SearchQueryBackend): SearchQueryPort;
29
+ //# sourceMappingURL=search-query-port.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-query-port.d.ts","sourceRoot":"","sources":["../../../src/backend/services/search-query-port.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EAChB,MAAM,4BAA4B,CAAC;AAGpC;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,YAAY,CACV,MAAM,EAAE,wBAAwB,EAChC,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9B;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,GAAG,eAAe,CAmBlF"}
@@ -0,0 +1,20 @@
1
+ import { SearchBackendUnavailable } from './search-query.service.js';
2
+ export function createSearchQueryPort(backend) {
3
+ return {
4
+ async listProducts(params, ctx) {
5
+ try {
6
+ return { status: 'ok', result: await backend.listProducts(params, ctx) };
7
+ }
8
+ catch (err) {
9
+ // Narrow by construction: only this module's own unavailability
10
+ // signal is converted, and every other failure — including anything
11
+ // the container could raise — is re-thrown unconditionally.
12
+ if (err instanceof SearchBackendUnavailable) {
13
+ return { status: 'index-unavailable', reason: err.message };
14
+ }
15
+ throw err;
16
+ }
17
+ },
18
+ };
19
+ }
20
+ //# sourceMappingURL=search-query-port.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-query-port.js","sourceRoot":"","sources":["../../../src/backend/services/search-query-port.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAiCrE,MAAM,UAAU,qBAAqB,CAAC,OAA2B;IAC/D,OAAO;QACL,KAAK,CAAC,YAAY,CAChB,MAAgC,EAChC,GAAuB;YAEvB,IAAI,CAAC;gBACH,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;YAC3E,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,gEAAgE;gBAChE,oEAAoE;gBACpE,4DAA4D;gBAC5D,IAAI,GAAG,YAAY,wBAAwB,EAAE,CAAC;oBAC5C,OAAO,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;gBAC9D,CAAC;gBACD,MAAM,GAAG,CAAC;YACZ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,205 @@
1
+ import { type CatalogAttributeReadPort, type CatalogProductReadPort, type CatalogProductRecord, type ListingPrice, type ListingPricePort, type OrganizationDetailsPort, type ProductAudience, type ProductListSort, type ProductSummary } from '@endora-commerce/contracts';
2
+ import { type IndexedDocument, type SortableAttribute } from './search-indexer.js';
3
+ /**
4
+ * SearchQueryService (T068).
5
+ *
6
+ * Read-side bridge: translates the same query inputs `CatalogQueryService`
7
+ * understands (`q`, `filter[attr.X]`, `categorySlug`, `sort`, `cursor`,
8
+ * `limit`) into a Meilisearch query against the per-Sales-Channel index
9
+ * the indexer maintains. Returns the same `ListResult<ProductSummary>`
10
+ * shape so the route can call either backend interchangeably.
11
+ *
12
+ * Channel-scoped index choice is the read-side mirror of the indexer's
13
+ * write-side: each Sales Channel writes to its own `products_<channel_code>`
14
+ * index, so the channel filter is implicit in the index id.
15
+ *
16
+ * Pricing comes from Postgres at hydrate time so the Sales-Channel visibility
17
+ * rule from `catalog-query.service.ts` (R-18: hide price on non-public
18
+ * channels) is enforced without trusting whatever the indexer happened to
19
+ * snapshot.
20
+ */
21
+ /**
22
+ * The request's resolved sales channel (feature 053 / FR-002), handed in by the
23
+ * route via `getResolvedChannel()`. The search service no longer re-resolves
24
+ * the channel from the raw header.
25
+ */
26
+ export interface ResolvedSearchChannel {
27
+ id: string;
28
+ code: string;
29
+ isPublic: boolean;
30
+ defaultCurrency: string;
31
+ defaultLanguage: string;
32
+ }
33
+ export interface SearchQueryContext {
34
+ resolvedChannel: ResolvedSearchChannel;
35
+ /** Who is asking (issue #227) — see the published `SearchQueryContext`. */
36
+ audience: ProductAudience;
37
+ preferredLanguage?: string | undefined;
38
+ }
39
+ export interface SearchListProductsParams {
40
+ q?: string | undefined;
41
+ limit: number;
42
+ cursor?: string | undefined;
43
+ /**
44
+ * The catalogue's own sort union, so this backend and the Postgres one keep
45
+ * sharing one input type — the published `SearchListProductsParams` names the
46
+ * same type and the two would otherwise disagree the moment the contract
47
+ * grew a member.
48
+ *
49
+ * Feature 086 added `price` / `-price`, and neither can reach this backend:
50
+ * `catalog/routes.public.ts` routes a price ordering to Postgres before it
51
+ * chooses Meilisearch, because the index has never carried a price and its
52
+ * `sort` is a tie-break sequence that cannot express the resolution chain's
53
+ * coalesce. {@link buildSort} answers `[]` for both — issue #287 made that
54
+ * answer safe rather than silent, since a field outside
55
+ * `SORTABLE_ATTRIBUTES` no longer compiles.
56
+ */
57
+ sort?: ProductListSort | undefined;
58
+ categorySlug?: string | undefined;
59
+ attributeFilters?: Record<string, string[]> | undefined;
60
+ }
61
+ export interface SearchListResult {
62
+ data: ProductSummary[];
63
+ pagination: {
64
+ cursor: string | null;
65
+ hasMore: boolean;
66
+ limit: number;
67
+ };
68
+ }
69
+ interface DocumentHit extends Pick<IndexedDocument, 'id' | 'sku' | 'name' | 'slug' | 'type' | 'categorySlugs'> {
70
+ primaryAssetUrl?: string | null;
71
+ }
72
+ export interface SearchQueryOptions {
73
+ meilisearchHost?: string;
74
+ meilisearchApiKey?: string;
75
+ }
76
+ export declare class SearchQueryService {
77
+ #private;
78
+ /**
79
+ * Issue #153 — `catalog`'s product rows, over the port, where an
80
+ * `EntityManager` and `em.find(Product, …)` used to be.
81
+ *
82
+ * The `EntityManager` could not leave while `catalog/plugin.ts` built this
83
+ * class itself: a second module's composition decided what this
84
+ * constructor took. It resolves `searchQueryPort` now, so the hydration
85
+ * below asks `catalog` for its rows and answers 503 `MODULE_DISABLED` when
86
+ * `catalog` is off — which is right, because `search`'s manifest declares
87
+ * `catalog` and an index over a catalogue that is gone has nothing to
88
+ * hydrate against.
89
+ */
90
+ private readonly products;
91
+ /**
92
+ * Feature 061 — the catalog's composed attribute read model (Principle I:
93
+ * filterable validation reads the view, not the catalog entity). Feature
94
+ * 075, Phase C — typed as the published port; `catalog`'s own service
95
+ * satisfies it structurally, so its construction of this class is unchanged.
96
+ */
97
+ private readonly attributeRead?;
98
+ /**
99
+ * Issue #132 — the pricing engine, through the `pricingService` port. The
100
+ * hydration below exists so that Postgres, not the index, decides what a
101
+ * hit shows; the price it hydrates now comes from the engine for the same
102
+ * reason.
103
+ */
104
+ private readonly listingPrices?;
105
+ /**
106
+ * `organizations`' read model, for the customer group a group-targeted
107
+ * price list is selected by. The module already resolves this port for the
108
+ * typeahead popup, which has priced per buyer since feature 075 — the
109
+ * result feed under the popup did not, so one search box quoted two
110
+ * different figures for one product depending on whether the buyer stopped
111
+ * at the suggestions or pressed Enter.
112
+ *
113
+ * Optional only in the signature, and never reached by an anonymous query.
114
+ */
115
+ private readonly organizations?;
116
+ private readonly client;
117
+ constructor(
118
+ /**
119
+ * Issue #153 — `catalog`'s product rows, over the port, where an
120
+ * `EntityManager` and `em.find(Product, …)` used to be.
121
+ *
122
+ * The `EntityManager` could not leave while `catalog/plugin.ts` built this
123
+ * class itself: a second module's composition decided what this
124
+ * constructor took. It resolves `searchQueryPort` now, so the hydration
125
+ * below asks `catalog` for its rows and answers 503 `MODULE_DISABLED` when
126
+ * `catalog` is off — which is right, because `search`'s manifest declares
127
+ * `catalog` and an index over a catalogue that is gone has nothing to
128
+ * hydrate against.
129
+ */
130
+ products: CatalogProductReadPort,
131
+ /**
132
+ * Feature 061 — the catalog's composed attribute read model (Principle I:
133
+ * filterable validation reads the view, not the catalog entity). Feature
134
+ * 075, Phase C — typed as the published port; `catalog`'s own service
135
+ * satisfies it structurally, so its construction of this class is unchanged.
136
+ */
137
+ attributeRead?: CatalogAttributeReadPort | undefined, options?: SearchQueryOptions,
138
+ /**
139
+ * Issue #132 — the pricing engine, through the `pricingService` port. The
140
+ * hydration below exists so that Postgres, not the index, decides what a
141
+ * hit shows; the price it hydrates now comes from the engine for the same
142
+ * reason.
143
+ */
144
+ listingPrices?: ListingPricePort | undefined,
145
+ /**
146
+ * `organizations`' read model, for the customer group a group-targeted
147
+ * price list is selected by. The module already resolves this port for the
148
+ * typeahead popup, which has priced per buyer since feature 075 — the
149
+ * result feed under the popup did not, so one search box quoted two
150
+ * different figures for one product depending on whether the buyer stopped
151
+ * at the suggestions or pressed Enter.
152
+ *
153
+ * Optional only in the signature, and never reached by an anonymous query.
154
+ */
155
+ organizations?: OrganizationDetailsPort | undefined);
156
+ listProducts(params: SearchListProductsParams, ctx: SearchQueryContext): Promise<SearchListResult>;
157
+ }
158
+ /**
159
+ * Why the index did not answer this query — issue #287.
160
+ *
161
+ * `unreachable` is the engine being down, unroutable or timing out: transient,
162
+ * nobody's mistake, and the Postgres fallback is the whole answer.
163
+ *
164
+ * `refused` is the engine answering, in milliseconds, that it will not run
165
+ * *this* query — an unsortable attribute, a missing index, a rejected API key.
166
+ * It is deterministic, it will not pass on its own, and it is a defect in this
167
+ * module's configuration of the index. Both still degrade to Postgres; only
168
+ * one of them is worth waking somebody for.
169
+ */
170
+ export type SearchBackendFailureKind = 'unreachable' | 'refused';
171
+ export declare class SearchBackendUnavailable extends Error {
172
+ /** Which of the two facts this is. */
173
+ readonly kind: SearchBackendFailureKind;
174
+ /** Meilisearch's own error code for a refusal; `null` when unreachable. */
175
+ readonly code: string | null;
176
+ constructor(message: string,
177
+ /** Which of the two facts this is. */
178
+ kind?: SearchBackendFailureKind,
179
+ /** Meilisearch's own error code for a refusal; `null` when unreachable. */
180
+ code?: string | null);
181
+ }
182
+ export declare function buildFilterExpression(params: Pick<SearchListProductsParams, 'attributeFilters' | 'categorySlug'>): string[];
183
+ /**
184
+ * A Meilisearch sort expression this module is allowed to build — issue #287.
185
+ *
186
+ * The field half is {@link SortableAttribute}, so a sort naming something the
187
+ * indexer never declared sortable does not compile. That is the compile-time
188
+ * half of the guarantee; `SORTABLE_ATTRIBUTES` being the indexer's own input is
189
+ * the other half. Before the two were tied together, `buildSort` returned
190
+ * plain `string[]` and cheerfully asked five live indexes to sort on fields
191
+ * they had never been told about.
192
+ */
193
+ export type SearchSortExpression = `${SortableAttribute}:${'asc' | 'desc'}`;
194
+ export declare function buildSort(sort: SearchListProductsParams['sort']): SearchSortExpression[];
195
+ /**
196
+ * Project one hydrated hit into a `ProductSummary` (issue #132).
197
+ *
198
+ * `resolvedPrice` is the chain's answer for this product, or `undefined` when
199
+ * the channel withheld the resolution — both render `null`, which is the one
200
+ * spelling `ProductSummary.price` has for "no price". Exported so the
201
+ * projection can be asserted without a Meilisearch round trip.
202
+ */
203
+ export declare function searchHitSummary(product: CatalogProductRecord, hit: DocumentHit, channel: ResolvedSearchChannel, preferredLanguage: string | undefined, resolvedPrice: ListingPrice | undefined): ProductSummary;
204
+ export {};
205
+ //# sourceMappingURL=search-query.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-query.service.d.ts","sourceRoot":"","sources":["../../../src/backend/services/search-query.service.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,gBAAgB,EACrB,KAAK,uBAAuB,EAE5B,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACpB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACvB,MAAM,qBAAqB,CAAC;AAE7B;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,EAAE,qBAAqB,CAAC;IACvC,2EAA2E;IAC3E,QAAQ,EAAE,eAAe,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,MAAM,WAAW,wBAAwB;IACvC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B;;;;;;;;;;;;;OAaG;IACH,IAAI,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IACnC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,SAAS,CAAC;CACzD;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,EAAE,CAAC;IACvB,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACxE;AAED,UAAU,WACR,SAAQ,IAAI,CACV,eAAe,EACf,IAAI,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,eAAe,CAC1D;IACD,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,kBAAkB;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,qBAAa,kBAAkB;;IAI3B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAE/B;;;;;OAKG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAC/B;;;;;;;;;OASG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC;IAzCjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAc;;IAGnC;;;;;;;;;;;OAWG;IACc,QAAQ,EAAE,sBAAsB;IACjD;;;;;OAKG;IACc,aAAa,CAAC,EAAE,wBAAwB,YAAA,EACzD,OAAO,GAAE,kBAAuB;IAChC;;;;;OAKG;IACc,aAAa,CAAC,EAAE,gBAAgB,YAAA;IACjD;;;;;;;;;OASG;IACc,aAAa,CAAC,EAAE,uBAAuB,YAAA;IAapD,YAAY,CAChB,MAAM,EAAE,wBAAwB,EAChC,GAAG,EAAE,kBAAkB,GACtB,OAAO,CAAC,gBAAgB,CAAC;CA+K7B;AAED;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,wBAAwB,GAAG,aAAa,GAAG,SAAS,CAAC;AAEjE,qBAAa,wBAAyB,SAAQ,KAAK;IAG/C,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,wBAAwB;IACvC,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;gBAJ5B,OAAO,EAAE,MAAM;IACf,sCAAsC;IAC7B,IAAI,GAAE,wBAAwC;IACvD,2EAA2E;IAClE,IAAI,GAAE,MAAM,GAAG,IAAW;CAKtC;AA4CD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,IAAI,CAAC,wBAAwB,EAAE,kBAAkB,GAAG,cAAc,CAAC,GAC1E,MAAM,EAAE,CAeV;AAED;;;;;;;;;GASG;AACH,MAAM,MAAM,oBAAoB,GAAG,GAAG,iBAAiB,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;AAE5E,wBAAgB,SAAS,CACvB,IAAI,EAAE,wBAAwB,CAAC,MAAM,CAAC,GACrC,oBAAoB,EAAE,CAQxB;AAyBD;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,oBAAoB,EAC7B,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,qBAAqB,EAC9B,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,aAAa,EAAE,YAAY,GAAG,SAAS,GACtC,cAAc,CAehB"}