@commerce-ai-tool/core 2.4.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 (118) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/LICENSE +21 -0
  3. package/README.md +11 -0
  4. package/dist/ai/factory.d.ts +5 -0
  5. package/dist/ai/factory.d.ts.map +1 -0
  6. package/dist/ai/index.d.ts +3 -0
  7. package/dist/ai/index.d.ts.map +1 -0
  8. package/dist/ai/json-schema-errors.d.ts +4 -0
  9. package/dist/ai/json-schema-errors.d.ts.map +1 -0
  10. package/dist/ai/providers/bedrock.d.ts +19 -0
  11. package/dist/ai/providers/bedrock.d.ts.map +1 -0
  12. package/dist/ai/providers/openrouter.d.ts +27 -0
  13. package/dist/ai/providers/openrouter.d.ts.map +1 -0
  14. package/dist/ai/types.d.ts +23 -0
  15. package/dist/ai/types.d.ts.map +1 -0
  16. package/dist/cache/search-cache.d.ts +19 -0
  17. package/dist/cache/search-cache.d.ts.map +1 -0
  18. package/dist/client.cjs +423 -0
  19. package/dist/client.cjs.map +1 -0
  20. package/dist/client.d.cts +12 -0
  21. package/dist/client.d.ts +12 -0
  22. package/dist/client.d.ts.map +1 -0
  23. package/dist/client.js +388 -0
  24. package/dist/client.js.map +1 -0
  25. package/dist/commercetools/build-search-keywords.d.ts +37 -0
  26. package/dist/commercetools/build-search-keywords.d.ts.map +1 -0
  27. package/dist/commercetools/cart.d.ts +70 -0
  28. package/dist/commercetools/cart.d.ts.map +1 -0
  29. package/dist/commercetools/checkout.d.ts +33 -0
  30. package/dist/commercetools/checkout.d.ts.map +1 -0
  31. package/dist/commercetools/client.d.ts +43 -0
  32. package/dist/commercetools/client.d.ts.map +1 -0
  33. package/dist/commercetools/facet-color.d.ts +12 -0
  34. package/dist/commercetools/facet-color.d.ts.map +1 -0
  35. package/dist/commercetools/facets.d.ts +31 -0
  36. package/dist/commercetools/facets.d.ts.map +1 -0
  37. package/dist/commercetools/graphql-product-cards.d.ts +94 -0
  38. package/dist/commercetools/graphql-product-cards.d.ts.map +1 -0
  39. package/dist/commercetools/order.d.ts +27 -0
  40. package/dist/commercetools/order.d.ts.map +1 -0
  41. package/dist/commercetools/payment-map.d.ts +18 -0
  42. package/dist/commercetools/payment-map.d.ts.map +1 -0
  43. package/dist/commercetools/payment.d.ts +28 -0
  44. package/dist/commercetools/payment.d.ts.map +1 -0
  45. package/dist/commercetools/product-card-hydrate.d.ts +25 -0
  46. package/dist/commercetools/product-card-hydrate.d.ts.map +1 -0
  47. package/dist/commercetools/product-types.d.ts +34 -0
  48. package/dist/commercetools/product-types.d.ts.map +1 -0
  49. package/dist/commercetools/query-builder.d.ts +41 -0
  50. package/dist/commercetools/query-builder.d.ts.map +1 -0
  51. package/dist/commercetools/search-helpers.d.ts +16 -0
  52. package/dist/commercetools/search-helpers.d.ts.map +1 -0
  53. package/dist/commercetools/suggestion-quality.d.ts +13 -0
  54. package/dist/commercetools/suggestion-quality.d.ts.map +1 -0
  55. package/dist/commercetools/suggestions.d.ts +3 -0
  56. package/dist/commercetools/suggestions.d.ts.map +1 -0
  57. package/dist/index.cjs +6066 -0
  58. package/dist/index.cjs.map +1 -0
  59. package/dist/index.d.cts +42 -0
  60. package/dist/index.d.ts +42 -0
  61. package/dist/index.d.ts.map +1 -0
  62. package/dist/index.js +5939 -0
  63. package/dist/index.js.map +1 -0
  64. package/dist/locale/resolve.d.ts +16 -0
  65. package/dist/locale/resolve.d.ts.map +1 -0
  66. package/dist/messages/index.d.ts +110 -0
  67. package/dist/messages/index.d.ts.map +1 -0
  68. package/dist/observability/enabled.d.ts +15 -0
  69. package/dist/observability/enabled.d.ts.map +1 -0
  70. package/dist/observability/index.d.ts +8 -0
  71. package/dist/observability/index.d.ts.map +1 -0
  72. package/dist/observability/redact.d.ts +9 -0
  73. package/dist/observability/redact.d.ts.map +1 -0
  74. package/dist/observability/spans.d.ts +20 -0
  75. package/dist/observability/spans.d.ts.map +1 -0
  76. package/dist/observability/wrap-ai-provider.d.ts +14 -0
  77. package/dist/observability/wrap-ai-provider.d.ts.map +1 -0
  78. package/dist/payments/types.d.ts +35 -0
  79. package/dist/payments/types.d.ts.map +1 -0
  80. package/dist/prompts/catalog.d.ts +20 -0
  81. package/dist/prompts/catalog.d.ts.map +1 -0
  82. package/dist/prompts/fragments.d.ts +9 -0
  83. package/dist/prompts/fragments.d.ts.map +1 -0
  84. package/dist/prompts/index.d.ts +35 -0
  85. package/dist/prompts/index.d.ts.map +1 -0
  86. package/dist/prompts/resolve.d.ts +35 -0
  87. package/dist/prompts/resolve.d.ts.map +1 -0
  88. package/dist/prompts/schemas.d.ts +206 -0
  89. package/dist/prompts/schemas.d.ts.map +1 -0
  90. package/dist/search/compound-shopping-list.d.ts +6 -0
  91. package/dist/search/compound-shopping-list.d.ts.map +1 -0
  92. package/dist/search/mission.d.ts +14 -0
  93. package/dist/search/mission.d.ts.map +1 -0
  94. package/dist/search/orchestrator.d.ts +29 -0
  95. package/dist/search/orchestrator.d.ts.map +1 -0
  96. package/dist/search/query-passthrough.d.ts +12 -0
  97. package/dist/search/query-passthrough.d.ts.map +1 -0
  98. package/dist/search/relax-search.d.ts +8 -0
  99. package/dist/search/relax-search.d.ts.map +1 -0
  100. package/dist/search/suggestions-input.d.ts +35 -0
  101. package/dist/search/suggestions-input.d.ts.map +1 -0
  102. package/dist/search/voice-tts.d.ts +6 -0
  103. package/dist/search/voice-tts.d.ts.map +1 -0
  104. package/dist/types/index.d.ts +510 -0
  105. package/dist/types/index.d.ts.map +1 -0
  106. package/dist/utils/audio.d.ts +4 -0
  107. package/dist/utils/audio.d.ts.map +1 -0
  108. package/dist/utils/dev-trace.d.ts +2 -0
  109. package/dist/utils/dev-trace.d.ts.map +1 -0
  110. package/dist/utils/hash.d.ts +2 -0
  111. package/dist/utils/hash.d.ts.map +1 -0
  112. package/dist/utils/model-json.d.ts +4 -0
  113. package/dist/utils/model-json.d.ts.map +1 -0
  114. package/dist/utils/search-timer.d.ts +11 -0
  115. package/dist/utils/search-timer.d.ts.map +1 -0
  116. package/dist/utils/with-timeout.d.ts +6 -0
  117. package/dist/utils/with-timeout.d.ts.map +1 -0
  118. package/package.json +86 -0
@@ -0,0 +1,14 @@
1
+ import type { DecomposedShoppingMission, MissionsConfig } from "../types/index.js";
2
+ export declare const DEFAULT_MISSION_MAX_INTENTS = 5;
3
+ export declare const DEFAULT_MISSION_PER_INTENT_LIMIT = 4;
4
+ export declare const DEFAULT_MISSION_MIN_CONFIDENCE = 0.6;
5
+ export interface ResolvedMissionOptions {
6
+ enabled: boolean;
7
+ maxIntents: number;
8
+ perIntentLimit: number;
9
+ minConfidence: number;
10
+ }
11
+ export { looksLikeCompoundShoppingList } from "./compound-shopping-list.js";
12
+ export declare function resolveMissionOptions(config: MissionsConfig | undefined, enableMissions?: boolean): ResolvedMissionOptions;
13
+ export declare function isUsableMission(mission: DecomposedShoppingMission | null | undefined, minConfidence: number): mission is DecomposedShoppingMission;
14
+ //# sourceMappingURL=mission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission.d.ts","sourceRoot":"","sources":["../../src/search/mission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnF,eAAO,MAAM,2BAA2B,IAAsB,CAAC;AAC/D,eAAO,MAAM,gCAAgC,IAAI,CAAC;AAClD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAElD,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAE5E,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,cAAc,GAAG,SAAS,EAClC,cAAc,CAAC,EAAE,OAAO,GACvB,sBAAsB,CAOxB;AAED,wBAAgB,eAAe,CAC7B,OAAO,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,EACrD,aAAa,EAAE,MAAM,GACpB,OAAO,IAAI,yBAAyB,CAQtC"}
@@ -0,0 +1,29 @@
1
+ import type { AIProvider } from "../ai/types.js";
2
+ import type { CommercetoolsClient } from "../commercetools/client.js";
3
+ import { FacetSchemaStore } from "../commercetools/product-types.js";
4
+ import type { CommerceAIConfig, ImageSearchResult, SearchLocaleOptions, SearchResult, ResolvedFacetSchema, SuggestionsRequest, SuggestionsResult, TextSearchRequest, VoiceSearchResult } from "../types/index.js";
5
+ export interface SearchOrchestrator {
6
+ searchByText(request: TextSearchRequest): Promise<SearchResult>;
7
+ getFacetSchema?(options?: SearchLocaleOptions): Promise<ResolvedFacetSchema>;
8
+ searchByVoice(audio: Uint8Array, mimeType: string, options?: SearchLocaleOptions & {
9
+ limit?: number;
10
+ enableTts?: boolean;
11
+ enableMissions?: boolean;
12
+ }): Promise<VoiceSearchResult & {
13
+ ttsText?: string;
14
+ }>;
15
+ searchByImage(image: Uint8Array, mimeType: string, options?: SearchLocaleOptions & {
16
+ limit?: number;
17
+ enableMissions?: boolean;
18
+ }): Promise<ImageSearchResult>;
19
+ suggestByText(request: SuggestionsRequest): Promise<SuggestionsResult>;
20
+ }
21
+ export interface SearchOrchestratorDeps {
22
+ config: CommerceAIConfig;
23
+ transcribeAudio?: (audio: Uint8Array, mimeType: string) => Promise<string>;
24
+ aiProvider?: AIProvider;
25
+ commercetoolsClient?: CommercetoolsClient;
26
+ facetSchemaStore?: FacetSchemaStore;
27
+ }
28
+ export declare function createSearchOrchestrator(deps: SearchOrchestratorDeps): SearchOrchestrator;
29
+ //# sourceMappingURL=orchestrator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestrator.d.ts","sourceRoot":"","sources":["../../src/search/orchestrator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAUjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAmBrE,OAAO,KAAK,EAEV,gBAAgB,EAEhB,iBAAiB,EAKjB,mBAAmB,EAEnB,YAAY,EACZ,mBAAmB,EAEnB,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EAGjB,iBAAiB,EAClB,MAAM,mBAAmB,CAAC;AAY3B,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChE,cAAc,CAAC,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC7E,aAAa,CACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAAG;QAC9B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,GACA,OAAO,CAAC,iBAAiB,GAAG;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,aAAa,CACX,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,mBAAmB,GAAG;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3E,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC9B,aAAa,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACxE;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,gBAAgB,CAAC;IACzB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3E,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC;AAUD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,sBAAsB,GAAG,kBAAkB,CAg1BzF"}
@@ -0,0 +1,12 @@
1
+ import type { InterpretedSearchQuery, SearchLocaleContext } from "../types/index.js";
2
+ export declare function primaryLanguageTag(locale: string): string;
3
+ export declare function localesShareLanguage(left: string, right: string): boolean;
4
+ /** True for short storefront queries that should still hit Product Search if AI returns nothing. */
5
+ export declare function isLikelyProductQuery(query: string): boolean;
6
+ /**
7
+ * Keep the shopper's typed query in Product Search when it is the same language
8
+ * as the catalog. Empty AI `searchTerms` still search a product-like query;
9
+ * otherwise the typed wording is OR'd with AI phrases.
10
+ */
11
+ export declare function mergeInterpretedSearchTerms(query: string, interpreted: InterpretedSearchQuery, locales: SearchLocaleContext): InterpretedSearchQuery;
12
+ //# sourceMappingURL=query-passthrough.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-passthrough.d.ts","sourceRoot":"","sources":["../../src/search/query-passthrough.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAMrF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAIzE;AAED,oGAAoG;AACpG,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAa3D;AAQD;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,sBAAsB,EACnC,OAAO,EAAE,mBAAmB,GAC3B,sBAAsB,CAsBxB"}
@@ -0,0 +1,8 @@
1
+ import type { InterpretedSearchFilters, InterpretedSearchQuery, SearchRelaxationLevel } from "../types/index.js";
2
+ export declare function hasSoftFilters(filters?: InterpretedSearchFilters): boolean;
3
+ export declare function dropSoftFilters(filters?: InterpretedSearchFilters): InterpretedSearchFilters | undefined;
4
+ /**
5
+ * Next interpreted query for a zero-result retry, or `null` when this level cannot help.
6
+ */
7
+ export declare function relaxInterpretedSearch(interpreted: InterpretedSearchQuery, level: Exclude<SearchRelaxationLevel, "none">): InterpretedSearchQuery | null;
8
+ //# sourceMappingURL=relax-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relax-search.d.ts","sourceRoot":"","sources":["../../src/search/relax-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAI3B,wBAAgB,cAAc,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAK1E;AAED,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,wBAAwB,GAAG,wBAAwB,GAAG,SAAS,CAYxG;AAWD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,sBAAsB,EACnC,KAAK,EAAE,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAC5C,sBAAsB,GAAG,IAAI,CAsB/B"}
@@ -0,0 +1,35 @@
1
+ export declare const SUGGESTIONS_MAX_PREFIX_LENGTH = 64;
2
+ /** Minimum length before AI suggestion fallback may run (after CT Suggest is empty). */
3
+ export declare const AI_SUGGESTION_FALLBACK_MIN_LENGTH = 4;
4
+ export declare function clampSuggestionsLimit(limit?: number): number;
5
+ export declare function normalizeSuggestionsPrefix(query: string): string | null;
6
+ /**
7
+ * Locale for CT Search Term Suggestions (`searchKeywords.{locale}`).
8
+ * Keywords are product catalog data, so catalog locale wins over query locale.
9
+ */
10
+ export declare function resolveSuggestLocale(queryLocale: string, catalogLocale: string): string;
11
+ /**
12
+ * Locales to query for suggestions. Catalog first; query locale included when different
13
+ * so bilingual `searchKeywords` catalogs still match user-language prefixes.
14
+ */
15
+ export declare function resolveSuggestLocales(queryLocale: string, catalogLocale: string): string[];
16
+ /**
17
+ * When CT Suggest returns nothing, AI may propose catalog-language phrases for
18
+ * cross-locale or multi-word natural-language input.
19
+ */
20
+ export declare function shouldUseAiSuggestionFallback(query: string, queryLocale: string, catalogLocale: string): boolean;
21
+ /**
22
+ * Prefixes to send to Search Term Suggestions. Whitespace-tokenized keywords
23
+ * match a single word prefix (`table` → "Art Deco Coffee Table") but not a
24
+ * multi-word prefix (`coffee table`). Retry the last token when needed.
25
+ */
26
+ export declare function suggestionPrefixes(query: string): string[];
27
+ /**
28
+ * Last-token CT hits must still mention every query token so "red shoes"
29
+ * does not surface "White Running Shoes".
30
+ */
31
+ export declare function suggestionMatchesQueryTokens(suggestion: string, query: string): boolean;
32
+ export declare function filterSuggestionsByQueryTokens(suggestions: string[], query: string): string[];
33
+ /** Trim, drop empties / non-suggestible phrases, dedupe case-insensitively, clamp to limit. */
34
+ export declare function normalizeSuggestionList(suggestions: string[], limit: number): string[];
35
+ //# sourceMappingURL=suggestions-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suggestions-input.d.ts","sourceRoot":"","sources":["../../src/search/suggestions-input.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAEhD,wFAAwF;AACxF,eAAO,MAAM,iCAAiC,IAAI,CAAC;AAEnD,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAU5D;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWvE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAEvF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAW1F;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAYT;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB1D;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAWvF;AAED,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAE7F;AAED,+FAA+F;AAC/F,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBtF"}
@@ -0,0 +1,6 @@
1
+ import type { SearchLocaleContext } from "../types/index.js";
2
+ /** @deprecated Import from `../prompts/index.js` — re-exported for compatibility. */
3
+ export { TTS_SUMMARY_PROMPT } from "../prompts/index.js";
4
+ export declare function buildTtsSummaryUserMessage(count: number, topProductName: string | undefined, locales: SearchLocaleContext): string;
5
+ export declare function buildTtsSummaryFallback(count: number, topProductName: string | undefined, queryLocale: string): string;
6
+ //# sourceMappingURL=voice-tts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"voice-tts.d.ts","sourceRoot":"","sources":["../../src/search/voice-tts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAE7D,qFAAqF;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,OAAO,EAAE,mBAAmB,GAC3B,MAAM,CAcR;AAoCD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,MAAM,EACb,cAAc,EAAE,MAAM,GAAG,SAAS,EAClC,WAAW,EAAE,MAAM,GAClB,MAAM,CAeR"}
@@ -0,0 +1,510 @@
1
+ import type { PaymentProvider } from "../payments/types.js";
2
+ export type { PaymentMethodOption } from "../payments/types.js";
3
+ export type ThemeMode = "auto" | "light" | "dark";
4
+ export type AIProviderName = "openrouter" | "bedrock";
5
+ export type VoiceMode = "openrouter-audio" | "elevenlabs-stt";
6
+ export interface SearchCacheConfig {
7
+ ttlMs?: number;
8
+ maxEntries?: number;
9
+ }
10
+ export interface FacetConfig {
11
+ enabled?: boolean;
12
+ schemaTtlMs?: number;
13
+ include?: string[];
14
+ exclude?: string[];
15
+ maxAttributes?: number;
16
+ }
17
+ export interface SearchTimeoutsConfig {
18
+ aiTextMs?: number;
19
+ aiVoiceAudioMs?: number;
20
+ aiImageMs?: number;
21
+ commercetoolsMs?: number;
22
+ commercetoolsSuggestMs?: number;
23
+ elevenLabsTtsMs?: number;
24
+ }
25
+ export declare const SUGGESTIONS_MIN_PREFIX_LENGTH = 2;
26
+ export declare const SUGGESTIONS_DEFAULT_LIMIT = 8;
27
+ export declare const SUGGESTIONS_MAX_LIMIT = 20;
28
+ export interface CommercetoolsConfig {
29
+ projectKey: string;
30
+ clientId: string;
31
+ clientSecret: string;
32
+ region: string;
33
+ scopes?: string[];
34
+ }
35
+ export interface OpenRouterConfig {
36
+ apiKey: string;
37
+ model?: string;
38
+ visionModel?: string;
39
+ /** Audio-capable model for direct voice search (OpenRouter input_audio). */
40
+ voiceModel?: string;
41
+ /**
42
+ * Use OpenRouter `json_schema` (strict) for structured interpretation.
43
+ * Falls back to `json_object` when the model rejects json_schema.
44
+ * Default: true.
45
+ */
46
+ jsonSchema?: boolean;
47
+ }
48
+ export interface BedrockConfig {
49
+ region: string;
50
+ modelId?: string;
51
+ visionModelId?: string;
52
+ }
53
+ export interface AIConfig {
54
+ provider: AIProviderName;
55
+ openrouter?: OpenRouterConfig;
56
+ bedrock?: BedrockConfig;
57
+ }
58
+ export interface ElevenLabsConfig {
59
+ apiKey: string;
60
+ sttModel?: string;
61
+ ttsVoiceId?: string;
62
+ ttsModel?: string;
63
+ }
64
+ export interface CommerceAIDefaults {
65
+ /** Language products are indexed in within commercetools */
66
+ catalogLocale?: string;
67
+ /** @deprecated Use catalogLocale */
68
+ locale?: string;
69
+ storeKey?: string;
70
+ limit?: number;
71
+ currency?: string;
72
+ /** ISO country code for cart and product-card price selection (optional). */
73
+ country?: string;
74
+ }
75
+ export interface PaymentConfig {
76
+ provider?: PaymentProvider;
77
+ /** Block order creation without a successful authorization. Defaults to true when a provider is set. */
78
+ requiredForOrder?: boolean;
79
+ }
80
+ export interface LangfuseConfig {
81
+ /** Derived from LANGFUSE_PUBLIC_KEY + LANGFUSE_SECRET_KEY when loading from env. */
82
+ enabled?: boolean;
83
+ /**
84
+ * Fetch system prompts from Langfuse at runtime.
85
+ * Applied via `configureLangfusePrompts` when creating the search orchestrator
86
+ * (or set `LANGFUSE_PROMPTS=true` when config omits this field).
87
+ * Local catalog remains the fallback and the source of truth for evals.
88
+ */
89
+ promptsEnabled?: boolean;
90
+ /** Langfuse prompt label (default `production`). From LANGFUSE_PROMPT_LABEL or this field. */
91
+ promptLabel?: string;
92
+ /** Client-side prompt cache TTL in seconds (default 60). From LANGFUSE_PROMPT_CACHE_TTL_SECONDS or this field. */
93
+ promptCacheTtlSeconds?: number;
94
+ }
95
+ export interface MissionsConfig {
96
+ /** Opt-in. When true, every fresh text search also runs mission decomposition. */
97
+ enabled?: boolean;
98
+ /** Maximum product intents kept from a decomposed mission. Default 5. */
99
+ maxIntents?: number;
100
+ /** Product Search limit per intent. Default 4. */
101
+ perIntentLimit?: number;
102
+ /** Minimum AI confidence (0–1) required to keep a mission. Default 0.6. */
103
+ minConfidence?: number;
104
+ }
105
+ export interface CommerceAIConfig {
106
+ commercetools: CommercetoolsConfig;
107
+ ai: AIConfig;
108
+ elevenlabs?: ElevenLabsConfig;
109
+ defaults?: CommerceAIDefaults;
110
+ voiceMode?: VoiceMode;
111
+ cache?: SearchCacheConfig;
112
+ timeouts?: SearchTimeoutsConfig;
113
+ facets?: FacetConfig;
114
+ langfuse?: LangfuseConfig;
115
+ payments?: PaymentConfig;
116
+ missions?: MissionsConfig;
117
+ }
118
+ export interface ProductCard {
119
+ id: string;
120
+ key?: string;
121
+ name: string;
122
+ description?: string;
123
+ imageUrl?: string;
124
+ /** SKU of the master variant — used for add-to-cart. */
125
+ sku?: string;
126
+ /** Master variant id — fallback when `sku` is missing. */
127
+ variantId?: number;
128
+ price?: {
129
+ amount: number;
130
+ currency: string;
131
+ formatted: string;
132
+ };
133
+ slug?: string;
134
+ }
135
+ export interface MoneyAmount {
136
+ amount: number;
137
+ currency: string;
138
+ formatted: string;
139
+ }
140
+ export interface CartLineItemSnapshot {
141
+ id: string;
142
+ name: string;
143
+ sku?: string;
144
+ productId: string;
145
+ quantity: number;
146
+ imageUrl?: string;
147
+ price?: MoneyAmount;
148
+ totalPrice?: MoneyAmount;
149
+ }
150
+ export interface CheckoutAddress {
151
+ firstName: string;
152
+ lastName: string;
153
+ streetName: string;
154
+ additionalStreetInfo?: string;
155
+ postalCode: string;
156
+ city: string;
157
+ region?: string;
158
+ country: string;
159
+ email?: string;
160
+ phone?: string;
161
+ }
162
+ export interface ShippingMethodSnapshot {
163
+ id: string;
164
+ name: string;
165
+ description?: string;
166
+ price?: MoneyAmount;
167
+ }
168
+ export interface PaymentSnapshot {
169
+ id: string;
170
+ key?: string;
171
+ interfaceId?: string;
172
+ paymentInterface: string;
173
+ method: string;
174
+ status: "authorized" | "pending" | "failed";
175
+ amount: MoneyAmount;
176
+ clientData?: Record<string, string>;
177
+ }
178
+ export interface DeliverySnapshot {
179
+ id: string;
180
+ trackingId?: string;
181
+ carrier?: string;
182
+ provider?: string;
183
+ }
184
+ /** Client-safe cart shape — never the raw commercetools Cart object. */
185
+ export interface CartSnapshot {
186
+ id: string;
187
+ version: number;
188
+ anonymousId?: string;
189
+ customerId?: string;
190
+ lineItems: CartLineItemSnapshot[];
191
+ totalPrice: MoneyAmount;
192
+ totalQuantity: number;
193
+ shippingAddress?: CheckoutAddress;
194
+ billingAddress?: CheckoutAddress;
195
+ shippingMethod?: ShippingMethodSnapshot;
196
+ payments?: PaymentSnapshot[];
197
+ }
198
+ export interface OrderSnapshot {
199
+ id: string;
200
+ orderNumber?: string;
201
+ orderState: string;
202
+ createdAt?: string;
203
+ paymentState?: string;
204
+ shipmentState?: string;
205
+ customerEmail?: string;
206
+ totalPrice: MoneyAmount;
207
+ lineItems: CartLineItemSnapshot[];
208
+ shippingAddress?: CheckoutAddress;
209
+ billingAddress?: CheckoutAddress;
210
+ shippingMethod?: ShippingMethodSnapshot;
211
+ payments?: PaymentSnapshot[];
212
+ deliveries?: DeliverySnapshot[];
213
+ }
214
+ /** Public customer identity — never includes credentials. */
215
+ export interface CustomerSnapshot {
216
+ id: string;
217
+ email: string;
218
+ }
219
+ /** HMAC cart session header for GET /cart — never send the token in the query string. */
220
+ export declare const CART_SESSION_HEADER = "x-commerce-ai-cart-session";
221
+ /** Upper bound for a single add-to-cart line quantity (mission add-all and batch add). */
222
+ export declare const MAX_LINE_ITEM_QUANTITY = 99;
223
+ export interface CartLoginRequest {
224
+ email: string;
225
+ password: string;
226
+ anonymousId?: string;
227
+ cartId?: string;
228
+ catalogLocale?: string;
229
+ }
230
+ export interface CartLoginResult {
231
+ cart: CartSnapshot | null;
232
+ customer: CustomerSnapshot;
233
+ }
234
+ export interface AddToCartLineItem {
235
+ sku?: string;
236
+ productId?: string;
237
+ variantId?: number;
238
+ quantity?: number;
239
+ }
240
+ export interface AddToCartRequest {
241
+ anonymousId?: string;
242
+ customerId?: string;
243
+ sku?: string;
244
+ productId?: string;
245
+ variantId?: number;
246
+ quantity?: number;
247
+ currency?: string;
248
+ country?: string;
249
+ catalogLocale?: string;
250
+ /** When set, add to this cart instead of looking up by anonymousId / customerId. */
251
+ cartId?: string;
252
+ sessionToken?: string;
253
+ }
254
+ export interface AddItemsToCartRequest {
255
+ anonymousId?: string;
256
+ customerId?: string;
257
+ items: AddToCartLineItem[];
258
+ currency?: string;
259
+ country?: string;
260
+ catalogLocale?: string;
261
+ cartId?: string;
262
+ sessionToken?: string;
263
+ }
264
+ export interface CartMutationRequest {
265
+ anonymousId?: string;
266
+ customerId?: string;
267
+ lineItemId: string;
268
+ cartId?: string;
269
+ cartVersion?: number;
270
+ catalogLocale?: string;
271
+ sessionToken?: string;
272
+ }
273
+ export interface UpdateCartQuantityRequest extends CartMutationRequest {
274
+ quantity: number;
275
+ }
276
+ export interface GetCartRequest {
277
+ anonymousId?: string;
278
+ customerId?: string;
279
+ catalogLocale?: string;
280
+ sessionToken?: string;
281
+ }
282
+ export interface CheckoutRequest {
283
+ anonymousId?: string;
284
+ customerId?: string;
285
+ cartId?: string;
286
+ catalogLocale?: string;
287
+ sessionToken?: string;
288
+ }
289
+ export interface SetCartAddressesRequest extends CheckoutRequest {
290
+ shippingAddress: CheckoutAddress;
291
+ billingAddress?: CheckoutAddress;
292
+ }
293
+ export interface SetShippingMethodRequest extends CheckoutRequest {
294
+ shippingMethodId: string;
295
+ }
296
+ export interface CreateOrderRequest extends CheckoutRequest {
297
+ orderNumber?: string;
298
+ }
299
+ export interface AuthorizePaymentRequest extends CheckoutRequest {
300
+ method: string;
301
+ orderNumber?: string;
302
+ }
303
+ export interface GetOrderRequest {
304
+ orderNumber?: string;
305
+ anonymousId?: string;
306
+ customerId?: string;
307
+ catalogLocale?: string;
308
+ sessionToken?: string;
309
+ }
310
+ export interface ListOrdersRequest {
311
+ anonymousId?: string;
312
+ customerId?: string;
313
+ catalogLocale?: string;
314
+ sessionToken?: string;
315
+ limit?: number;
316
+ }
317
+ export type SearchRelaxationLevel = "none" | "drop_soft_filters" | "primary_any_match";
318
+ export interface SearchMeta {
319
+ total: number;
320
+ limit: number;
321
+ offset: number;
322
+ /** @deprecated Use catalogLocale */
323
+ locale: string;
324
+ catalogLocale: string;
325
+ queryLocale: string;
326
+ queryInterpretation?: string;
327
+ searchTerms?: string[];
328
+ /** Catalog-language phrase closest to the user's intent, when the model supplied one. */
329
+ primaryTerm?: string;
330
+ appliedFilters?: InterpretedSearchFilters;
331
+ /**
332
+ * How far Product Search was relaxed after an empty first result.
333
+ * Omitted when no relaxation ran (`none`).
334
+ */
335
+ relaxation?: SearchRelaxationLevel;
336
+ sort?: "relevance" | "price_asc" | "price_desc";
337
+ schemaEtag?: string;
338
+ /** Per-step durations in milliseconds (dev / CAT_DEBUG only) */
339
+ timings?: Record<string, number>;
340
+ /** Total pipeline duration in milliseconds (dev / CAT_DEBUG only) */
341
+ totalMs?: number;
342
+ /**
343
+ * Active OpenTelemetry / Langfuse trace id when Langfuse is enabled or CAT_DEBUG=true.
344
+ * Non-stable for client contracts — intended for local/dev linking.
345
+ */
346
+ traceId?: string;
347
+ }
348
+ export interface SearchResult {
349
+ products: ProductCard[];
350
+ meta: SearchMeta;
351
+ facets?: SearchFacetGroup[];
352
+ suggestedFacets?: SuggestedFacet[];
353
+ facetSchema?: FacetAttributeDefinition[];
354
+ /** Present when a compound shopping mission was executed. */
355
+ mission?: MissionSearchResult;
356
+ }
357
+ export interface SuggestionsRequest extends SearchLocaleOptions {
358
+ query: string;
359
+ limit?: number;
360
+ }
361
+ export interface SuggestionsResult {
362
+ suggestions: string[];
363
+ /**
364
+ * True when this request invoked AI `suggestSearchTerms` (not a cache hit).
365
+ * Used by the server to flush Langfuse on serverless hosts.
366
+ */
367
+ aiFallbackUsed?: boolean;
368
+ }
369
+ export interface TextSearchRequest {
370
+ query: string;
371
+ /** Language of the user query (AI input) */
372
+ queryLocale?: string;
373
+ /** Language products are indexed in commercetools */
374
+ catalogLocale?: string;
375
+ /** @deprecated Use queryLocale */
376
+ locale?: string;
377
+ limit?: number;
378
+ offset?: number;
379
+ filters?: InterpretedSearchFilters;
380
+ searchTerms?: string[];
381
+ sort?: "relevance" | "price_asc" | "price_desc";
382
+ refineQuery?: string;
383
+ includeFacets?: boolean;
384
+ /** AI-suggested facets from the active search session (chip refine). */
385
+ suggestedFacets?: SuggestedFacet[];
386
+ /** Per-request override of `CommerceAIConfig.missions.enabled`. */
387
+ enableMissions?: boolean;
388
+ }
389
+ export interface SearchLocaleOptions {
390
+ queryLocale?: string;
391
+ catalogLocale?: string;
392
+ /** @deprecated Use queryLocale */
393
+ locale?: string;
394
+ }
395
+ export interface SearchLocaleContext {
396
+ queryLocale: string;
397
+ catalogLocale: string;
398
+ }
399
+ export interface VoiceSearchResult extends SearchResult {
400
+ transcript: string;
401
+ enhancedQuery?: string;
402
+ }
403
+ export interface ImageSearchResult extends SearchResult {
404
+ interpretation: string;
405
+ }
406
+ /** Standard filter keys returned by AI interpretation (all optional). */
407
+ export interface InterpretedSearchFilters {
408
+ color?: string;
409
+ brand?: string;
410
+ category?: string;
411
+ priceMin?: string;
412
+ priceMax?: string;
413
+ [key: string]: string | undefined;
414
+ }
415
+ export interface InterpretedSearchQuery {
416
+ /**
417
+ * Catalog-language phrase closest to the user's intent.
418
+ * Product Search boosts this phrase above the other `searchTerms`.
419
+ * Kept separate from `searchTerms[0]` because same-language query passthrough
420
+ * prepends the typed query without changing intent priority.
421
+ */
422
+ primaryTerm?: string;
423
+ /**
424
+ * Catalog-language search phrases. Product Search matches any phrase (OR).
425
+ * Each element is a complete phrase (e.g. `"red shoes"`), not a split word.
426
+ * Broad intents may include 3–5 synonym or hyponym phrases.
427
+ */
428
+ searchTerms: string[];
429
+ filters?: InterpretedSearchFilters;
430
+ suggestedFacets?: SuggestedFacet[];
431
+ sort?: "relevance" | "price_asc" | "price_desc";
432
+ interpretation: string;
433
+ }
434
+ export interface ShoppingIntent {
435
+ /** Stable id for UI keys and selection (`intent-0`, `intent-1`, …). */
436
+ id: string;
437
+ /** Short catalog-language label, e.g. "tennis racket". */
438
+ label: string;
439
+ /** Requested quantity, always >= 1. */
440
+ quantity: number;
441
+ /** Catalog-language phrase closest to this intent, boosted above alternates. */
442
+ primaryTerm?: string;
443
+ searchTerms: string[];
444
+ filters?: InterpretedSearchFilters;
445
+ sort?: "relevance" | "price_asc" | "price_desc";
446
+ }
447
+ export interface DecomposedShoppingMission {
448
+ isMission: boolean;
449
+ /** 0–1. Missions below the configured minConfidence fall back to standard search. */
450
+ confidence: number;
451
+ intents: ShoppingIntent[];
452
+ interpretation: string;
453
+ }
454
+ export interface MissionIntentGroup {
455
+ intent: ShoppingIntent;
456
+ products: ProductCard[];
457
+ total: number;
458
+ /** True when this intent's Product Search failed; other groups still render. */
459
+ failed?: boolean;
460
+ }
461
+ export interface MissionSearchResult {
462
+ intents: MissionIntentGroup[];
463
+ interpretation: string;
464
+ }
465
+ export type FacetAttributeType = "enum" | "lenum" | "boolean" | "text" | "number";
466
+ export interface FacetAttributeDefinition {
467
+ name: string;
468
+ label: string;
469
+ kind: "distinct" | "range";
470
+ attributeType: FacetAttributeType;
471
+ field: string;
472
+ fieldType?: string;
473
+ }
474
+ export interface ResolvedFacetSchema {
475
+ attributes: FacetAttributeDefinition[];
476
+ systemFacets: Array<"categories" | "price">;
477
+ etag: string;
478
+ resolvedAt: string;
479
+ }
480
+ export interface SuggestedFacet {
481
+ name: string;
482
+ reason?: string;
483
+ }
484
+ export interface SearchFacetBucket {
485
+ key: string;
486
+ label: string;
487
+ count: number;
488
+ }
489
+ export interface SearchFacetGroup {
490
+ id: string;
491
+ label: string;
492
+ type: "distinct" | "range";
493
+ buckets: SearchFacetBucket[];
494
+ selectedKey?: string;
495
+ }
496
+ export interface SearchSessionState {
497
+ query: string;
498
+ searchTerms: string[];
499
+ appliedFilters: InterpretedSearchFilters;
500
+ suggestedFacets: SuggestedFacet[];
501
+ facetSchema?: FacetAttributeDefinition[];
502
+ schemaEtag?: string;
503
+ }
504
+ export interface VoiceAudioInterpretation extends InterpretedSearchQuery {
505
+ transcript: string;
506
+ enhancedQuery: string;
507
+ }
508
+ /** @deprecated Use ProductSearchRequest from query-builder / platform-sdk */
509
+ export type { ProductSearchRequest as ProductSearchQueryBody } from "@commercetools/platform-sdk";
510
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,kBAAkB,GAAG,gBAAgB,CAAC;AAE9D,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAC/C,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,qBAAqB,KAAK,CAAC;AAExC,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,QAAQ,EAAE,cAAc,CAAC;IACzB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,OAAO,CAAC,EAAE,aAAa,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,wGAAwG;IACxG,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,oFAAoF;IACpF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8FAA8F;IAC9F,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kHAAkH;IAClH,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,yEAAyE;IACzE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,mBAAmB,CAAC;IACnC,EAAE,EAAE,QAAQ,CAAC;IACb,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,iBAAiB,CAAC;IAC1B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,WAAW,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,YAAY,GAAG,SAAS,GAAG,QAAQ,CAAC;IAC5C,MAAM,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wEAAwE;AACxE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,UAAU,EAAE,WAAW,CAAC;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,WAAW,CAAC;IACxB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,cAAc,CAAC,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACjC;AAED,6DAA6D;AAC7D,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAED,yFAAyF;AACzF,eAAO,MAAM,mBAAmB,+BAA+B,CAAC;AAEhE,0FAA0F;AAC1F,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAC1B,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oFAAoF;IACpF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,yBAA0B,SAAQ,mBAAmB;IACpE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,eAAe,EAAE,eAAe,CAAC;IACjC,cAAc,CAAC,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,wBAAyB,SAAQ,eAAe;IAC/D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,kBAAmB,SAAQ,eAAe;IACzD,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;AAEvF,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C;;;OAGG;IACH,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAChD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,IAAI,EAAE,UAAU,CAAC;IACjB,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,WAAW,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACzC,6DAA6D;IAC7D,OAAO,CAAC,EAAE,mBAAmB,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAmB,SAAQ,mBAAmB;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAChD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,wEAAwE;IACxE,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,mEAAmE;IACnE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;OAIG;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,eAAe,CAAC,EAAE,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;IAChD,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAC;IACX,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,wBAAwB,CAAC;IACnC,IAAI,CAAC,EAAE,WAAW,GAAG,WAAW,GAAG,YAAY,CAAC;CACjD;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,qFAAqF;IACrF,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,cAAc,CAAC;IACvB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,gFAAgF;IAChF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,kBAAkB,EAAE,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAElF,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAC3B,aAAa,EAAE,kBAAkB,CAAC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,wBAAwB,EAAE,CAAC;IACvC,YAAY,EAAE,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAC3B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,wBAAwB,CAAC;IACzC,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,wBAAyB,SAAQ,sBAAsB;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,6EAA6E;AAC7E,YAAY,EAAE,oBAAoB,IAAI,sBAAsB,EAAE,MAAM,6BAA6B,CAAC"}