35 lines
24 KiB
JavaScript
35 lines
24 KiB
JavaScript
"use strict";
|
|
/*
|
|
* ATTENTION: An "eval-source-map" devtool has been used.
|
|
* This devtool is neither made for production nor for readable output files.
|
|
* It uses "eval()" calls to create a separate source file with attached SourceMaps in the browser devtools.
|
|
* If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/)
|
|
* or disable the default devtool with "devtool: false".
|
|
* If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/).
|
|
*/
|
|
exports.id = "_action-browser_src_lib_qdrant_ts";
|
|
exports.ids = ["_action-browser_src_lib_qdrant_ts"];
|
|
exports.modules = {
|
|
|
|
/***/ "(action-browser)/./src/lib/qdrant.ts":
|
|
/*!***************************!*\
|
|
!*** ./src/lib/qdrant.ts ***!
|
|
\***************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ COLLECTION_NAME: () => (/* binding */ COLLECTION_NAME),\n/* harmony export */ VECTOR_SIZE: () => (/* binding */ VECTOR_SIZE),\n/* harmony export */ deleteProductVector: () => (/* binding */ deleteProductVector),\n/* harmony export */ ensureCollection: () => (/* binding */ ensureCollection),\n/* harmony export */ generateEmbedding: () => (/* binding */ generateEmbedding),\n/* harmony export */ qdrant: () => (/* binding */ qdrant),\n/* harmony export */ searchProducts: () => (/* binding */ searchProducts),\n/* harmony export */ upsertProductVector: () => (/* binding */ upsertProductVector)\n/* harmony export */ });\n/* harmony import */ var _qdrant_js_client_rest__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @qdrant/js-client-rest */ \"(action-browser)/./node_modules/.pnpm/@qdrant+js-client-rest@1.17.0_typescript@5.9.3/node_modules/@qdrant/js-client-rest/dist/esm/qdrant-client.js\");\n/* harmony import */ var _redis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./redis */ \"(action-browser)/./src/lib/redis.ts\");\n\n\nconst isDockerContainer = process.env.IS_DOCKER === 'true' || process.env.HOSTNAME?.includes('etib-app');\nconst qdrantUrl = process.env.QDRANT_URL || (isDockerContainer ? 'http://etib-qdrant:6333' : 'http://localhost:16333');\nconst qdrantApiKey = process.env.QDRANT_API_KEY || '';\nconst qdrant = new _qdrant_js_client_rest__WEBPACK_IMPORTED_MODULE_1__.QdrantClient({\n url: qdrantUrl,\n apiKey: qdrantApiKey || undefined,\n // Disable qdrant client's own version check to avoid the warning spam\n checkCompatibility: false\n});\nconst COLLECTION_NAME = 'klz_products';\nconst VECTOR_SIZE = 1024; // Mistral mistral-embed\n// Cache TTLs\nconst EMBEDDING_CACHE_TTL = 60 * 60 * 24; // 24h — embeddings are deterministic\nconst SEARCH_CACHE_TTL = 60 * 30; // 30 min — product data could change\n// Track collection existence in-memory (don't re-check every request)\nlet collectionVerified = false;\n/**\n * Ensure the collection exists in Qdrant (only checks once per process lifetime).\n */ async function ensureCollection() {\n if (collectionVerified) return;\n try {\n const collections = await qdrant.getCollections();\n const exists = collections.collections.some((c)=>c.name === COLLECTION_NAME);\n if (!exists) {\n await qdrant.createCollection(COLLECTION_NAME, {\n vectors: {\n size: VECTOR_SIZE,\n distance: 'Cosine'\n }\n });\n console.log(`Successfully created Qdrant collection: ${COLLECTION_NAME}`);\n }\n collectionVerified = true;\n } catch (error) {\n console.error('Error ensuring Qdrant collection:', error);\n }\n}\n/**\n * Hash text for cache key\n */ function hashKey(text) {\n const { createHash } = __webpack_require__(/*! crypto */ \"crypto\");\n return createHash('sha256').update(text).digest('hex').slice(0, 32);\n}\n/**\n * Generate embedding using Mistral API (EU/DSGVO-compliant)\n */ async function generateEmbedding(text) {\n const cacheKey = `emb:${hashKey(text.toLowerCase().trim())}`;\n // Try Redis cache first\n try {\n const cached = await _redis__WEBPACK_IMPORTED_MODULE_0__[\"default\"].get(cacheKey);\n if (cached) {\n return JSON.parse(cached);\n }\n } catch {\n // Redis down — proceed without cache\n }\n const mistralKey = process.env.MISTRAL_API_KEY;\n if (!mistralKey) {\n throw new Error('MISTRAL_API_KEY is not set');\n }\n const response = await fetch('https://api.mistral.ai/v1/embeddings', {\n method: 'POST',\n headers: {\n Authorization: `Bearer ${mistralKey}`,\n 'Content-Type': 'application/json'\n },\n body: JSON.stringify({\n model: 'mistral-embed',\n input: [\n text\n ]\n })\n });\n if (!response.ok) {\n const errorBody = await response.text();\n throw new Error(`Failed to generate embedding: ${response.status} ${response.statusText} ${errorBody}`);\n }\n const data = await response.json();\n const embedding = data.data[0].embedding;\n // Cache the embedding in Redis\n try {\n await _redis__WEBPACK_IMPORTED_MODULE_0__[\"default\"].set(cacheKey, JSON.stringify(embedding), 'EX', EMBEDDING_CACHE_TTL);\n } catch {\n // Redis down — proceed without caching\n }\n return embedding;\n}\n/**\n * Upsert a product into Qdrant\n */ async function upsertProductVector(id, text, payload) {\n try {\n await ensureCollection();\n const vector = await generateEmbedding(text);\n await qdrant.upsert(COLLECTION_NAME, {\n wait: true,\n points: [\n {\n id: id,\n vector,\n payload\n }\n ]\n });\n } catch (error) {\n console.error('Error writing to Qdrant:', error);\n }\n}\n/**\n * Delete a product from Qdrant\n */ async function deleteProductVector(id) {\n try {\n await ensureCollection();\n await qdrant.delete(COLLECTION_NAME, {\n wait: true,\n points: [\n id\n ]\n });\n } catch (error) {\n console.error('Error deleting from Qdrant:', error);\n }\n}\n/**\n * Search products in Qdrant.\n * Results are cached in Redis for 30 minutes keyed by query text.\n */ async function searchProducts(query, limit = 5) {\n const cacheKey = `search:${hashKey(query.toLowerCase().trim())}:${limit}`;\n // Try Redis cache first\n try {\n const cached = await _redis__WEBPACK_IMPORTED_MODULE_0__[\"default\"].get(cacheKey);\n if (cached) {\n console.log(`[Qdrant] Cache HIT for query: \"${query.substring(0, 50)}\"`);\n return JSON.parse(cached);\n }\n } catch {\n // Redis down — proceed without cache\n }\n try {\n await ensureCollection();\n const vector = await generateEmbedding(query);\n const results = await qdrant.search(COLLECTION_NAME, {\n vector,\n limit,\n with_payload: true\n });\n // Cache results in Redis\n try {\n await _redis__WEBPACK_IMPORTED_MODULE_0__[\"default\"].set(cacheKey, JSON.stringify(results), 'EX', SEARCH_CACHE_TTL);\n } catch {\n // Redis down — proceed without caching\n }\n return results;\n } catch (error) {\n console.error('Error searching in Qdrant:', error);\n return [];\n }\n}\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,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LE9BQU87SUFFekUsd0JBQXdCO0lBQ3hCLElBQUk7UUFDRixNQUFNbkMsU0FBUyxNQUFNOUMsOENBQUtBLENBQUMrQyxHQUFHLENBQUNKO1FBQy9CLElBQUlHLFFBQVE7WUFDVmQsUUFBUUMsR0FBRyxDQUFDLENBQUMsK0JBQStCLEVBQUUrQyxNQUFNRSxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUN2RSxPQUFPbEMsS0FBS0MsS0FBSyxDQUFDSDtRQUNwQjtJQUNGLEVBQUUsT0FBTTtJQUNOLHFDQUFxQztJQUN2QztJQUVBLElBQUk7UUFDRixNQUFNekI7UUFDTixNQUFNb0QsU0FBUyxNQUFNL0Isa0JBQWtCc0M7UUFFdkMsTUFBTUcsVUFBVSxNQUFNeEUsT0FBT3lFLE1BQU0sQ0FBQ3BFLGlCQUFpQjtZQUNuRHlEO1lBQ0FRO1lBQ0FJLGNBQWM7UUFDaEI7UUFFQSx5QkFBeUI7UUFDekIsSUFBSTtZQUNGLE1BQU1yRiw4Q0FBS0EsQ0FBQ3FFLEdBQUcsQ0FBQzFCLFVBQVVLLEtBQUtXLFNBQVMsQ0FBQ3dCLFVBQVUsTUFBTWhFO1FBQzNELEVBQUUsT0FBTTtRQUNOLHVDQUF1QztRQUN6QztRQUVBLE9BQU9nRTtJQUNULEVBQUUsT0FBT2pELE9BQU87UUFDZEYsUUFBUUUsS0FBSyxDQUFDLDhCQUE4QkE7UUFDNUMsT0FBTyxFQUFFO0lBQ1g7QUFDRiIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL3NyYy9saWIvcWRyYW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFFkcmFudENsaWVudCB9IGZyb20gJ0BxZHJhbnQvanMtY2xpZW50LXJlc3QnO1xuaW1wb3J0IHJlZGlzIGZyb20gJy4vcmVkaXMnO1xuXG5jb25zdCBpc0RvY2tlckNvbnRhaW5lciA9XG4gIHByb2Nlc3MuZW52LklTX0RPQ0tFUiA9PT0gJ3RydWUnIHx8IHByb2Nlc3MuZW52LkhPU1ROQU1FPy5pbmNsdWRlcygnZXRpYi1hcHAnKTtcbmNvbnN0IHFkcmFudFVybCA9XG4gIHByb2Nlc3MuZW52LlFEUkFOVF9VUkwgfHxcbiAgKGlzRG9ja2VyQ29udGFpbmVyID8gJ2h0dHA6Ly9ldGliLXFkcmFudDo2MzMzJyA6ICdodHRwOi8vbG9jYWxob3N0OjE2MzMzJyk7XG5jb25zdCBxZHJhbnRBcGlLZXkgPSBwcm9jZXNzLmVudi5RRFJBTlRfQVBJX0tFWSB8fCAnJztcblxuZXhwb3J0IGNvbnN0IHFkcmFudCA9IG5ldyBRZHJhbnRDbGllbnQoe1xuICB1cmw6IHFkcmFudFVybCxcbiAgYXBpS2V5OiBxZHJhbnRBcGlLZXkgfHwgdW5kZWZpbmVkLFxuICAvLyBEaXNhYmxlIHFkcmFudCBjbGllbnQncyBvd24gdmVyc2lvbiBjaGVjayB0byBhdm9pZCB0aGUgd2FybmluZyBzcGFtXG4gIGNoZWNrQ29tcGF0aWJpbGl0eTogZmFsc2UsXG59KTtcblxuZXhwb3J0IGNvbnN0IENPTExFQ1RJT05fTkFNRSA9ICdrbHpfcHJvZHVjdHMnO1xuZXhwb3J0IGNvbnN0IFZFQ1RPUl9TSVpFID0gMTAyNDsgLy8gTWlzdHJhbCBtaXN0cmFsLWVtYmVkXG5cbi8vIENhY2hlIFRUTHNcbmNvbnN0IEVNQkVERElOR19DQUNIRV9UVEwgPSA2MCAqIDYwICogMjQ7IC8vIDI0aCDigJQgZW1iZWRkaW5ncyBhcmUgZGV0ZXJtaW5pc3RpY1xuY29uc3QgU0VBUkNIX0NBQ0hFX1RUTCA9IDYwICogMzA7IC8vIDMwIG1pbiDigJQgcHJvZHVjdCBkYXRhIGNvdWxkIGNoYW5nZVxuXG4vLyBUcmFjayBjb2xsZWN0aW9uIGV4aXN0ZW5jZSBpbi1tZW1vcnkgKGRvbid0IHJlLWNoZWNrIGV2ZXJ5IHJlcXVlc3QpXG5sZXQgY29sbGVjdGlvblZlcmlmaWVkID0gZmFsc2U7XG5cbi8qKlxuICogRW5zdXJlIHRoZSBjb2xsZWN0aW9uIGV4aXN0cyBpbiBRZHJhbnQgKG9ubHkgY2hlY2tzIG9uY2UgcGVyIHByb2Nlc3MgbGlmZXRpbWUpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlQ29sbGVjdGlvbigpIHtcbiAgaWYgKGNvbGxlY3Rpb25WZXJpZmllZCkgcmV0dXJuO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgY29sbGVjdGlvbnMgPSBhd2FpdCBxZHJhbnQuZ2V0Q29sbGVjdGlvbnMoKTtcbiAgICBjb25zdCBleGlzdHMgPSBjb2xsZWN0aW9ucy5jb2xsZWN0aW9ucy5zb21lKChjKSA9PiBjLm5hbWUgPT09IENPTExFQ1RJT05fTkFNRSk7XG4gICAgaWYgKCFleGlzdHMpIHtcbiAgICAgIGF3YWl0IHFkcmFudC5jcmVhdGVDb2xsZWN0aW9uKENPTExFQ1RJT05fTkFNRSwge1xuICAgICAgICB2ZWN0b3JzOiB7XG4gICAgICAgICAgc2l6ZTogVkVDVE9SX1NJWkUsXG4gICAgICAgICAgZGlzdGFuY2U6ICdDb3NpbmUnLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgICBjb25zb2xlLmxvZyhgU3VjY2Vzc2Z1bGx5IGNyZWF0ZWQgUWRyYW50IGNvbGxlY3Rpb246ICR7Q09MTEVDVElPTl9OQU1FfWApO1xuICAgIH1cbiAgICBjb2xsZWN0aW9uVmVyaWZpZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGVuc3VyaW5nIFFkcmFudCBjb2xsZWN0aW9uOicsIGVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIEhhc2ggdGV4dCBmb3IgY2FjaGUga2V5XG4gKi9cbmZ1bmN0aW9uIGhhc2hLZXkodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgeyBjcmVhdGVIYXNoIH0gPSByZXF1aXJlKCdjcnlwdG8nKTtcbiAgcmV0dXJuIGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZSh0ZXh0KS5kaWdlc3QoJ2hleCcpLnNsaWNlKDAsIDMyKTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBlbWJlZGRpbmcgdXNpbmcgTWlzdHJhbCBBUEkgKEVVL0RTR1ZPLWNvbXBsaWFudClcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlRW1iZWRkaW5nKHRleHQ6IHN0cmluZyk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgY29uc3QgY2FjaGVLZXkgPSBgZW1iOiR7aGFzaEtleSh0ZXh0LnRvTG93ZXJDYXNlKCkudHJpbSgpKX1gO1xuXG4gIC8vIFRyeSBSZWRpcyBjYWNoZSBmaXJzdFxuICB0cnkge1xuICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IHJlZGlzLmdldChjYWNoZUtleSk7XG4gICAgaWYgKGNhY2hlZCkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY2FjaGVkKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIFJlZGlzIGRvd24g4oCUIHByb2NlZWQgd2l0aG91dCBjYWNoZVxuICB9XG5cbiAgY29uc3QgbWlzdHJhbEtleSA9IHByb2Nlc3MuZW52Lk1JU1RSQUxfQVBJX0tFWTtcbiAgaWYgKCFtaXN0cmFsS2V5KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdNSVNUUkFMX0FQSV9LRVkgaXMgbm90IHNldCcpO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnaHR0cHM6Ly9hcGkubWlzdHJhbC5haS92MS9lbWJlZGRpbmdzJywge1xuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHttaXN0cmFsS2V5fWAsXG4gICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgIH0sXG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgbW9kZWw6ICdtaXN0cmFsLWVtYmVkJyxcbiAgICAgIGlucHV0OiBbdGV4dF0sXG4gICAgfSksXG4gIH0pO1xuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBjb25zdCBlcnJvckJvZHkgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZhaWxlZCB0byBnZW5lcmF0ZSBlbWJlZGRpbmc6ICR7cmVzcG9uc2Uuc3RhdHVzfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9ICR7ZXJyb3JCb2R5fWAsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gIGNvbnN0IGVtYmVkZGluZyA9IGRhdGEuZGF0YVswXS5lbWJlZGRpbmc7XG5cbiAgLy8gQ2FjaGUgdGhlIGVtYmVkZGluZyBpbiBSZWRpc1xuICB0cnkge1xuICAgIGF3YWl0IHJlZGlzLnNldChjYWNoZUtleSwgSlNPTi5zdHJpbmdpZnkoZW1iZWRkaW5nKSwgJ0VYJywgRU1CRURESU5HX0NBQ0hFX1RUTCk7XG4gIH0gY2F0Y2gge1xuICAgIC8vIFJlZGlzIGRvd24g4oCUIHByb2NlZWQgd2l0aG91dCBjYWNoaW5nXG4gIH1cblxuICByZXR1cm4gZW1iZWRkaW5nO1xufVxuXG4vKipcbiAqIFVwc2VydCBhIHByb2R1Y3QgaW50byBRZHJhbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwc2VydFByb2R1Y3RWZWN0b3IoXG4gIGlkOiBzdHJpbmcgfCBudW1iZXIsXG4gIHRleHQ6IHN0cmluZyxcbiAgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgYW55Pixcbikge1xuICB0cnkge1xuICAgIGF3YWl0IGVuc3VyZUNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCB2ZWN0b3IgPSBhd2FpdCBnZW5lcmF0ZUVtYmVkZGluZyh0ZXh0KTtcblxuICAgIGF3YWl0IHFkcmFudC51cHNlcnQoQ09MTEVDVElPTl9OQU1FLCB7XG4gICAgICB3YWl0OiB0cnVlLFxuICAgICAgcG9pbnRzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgdmVjdG9yLFxuICAgICAgICAgIHBheWxvYWQsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdyaXRpbmcgdG8gUWRyYW50OicsIGVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIERlbGV0ZSBhIHByb2R1Y3QgZnJvbSBRZHJhbnRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRlbGV0ZVByb2R1Y3RWZWN0b3IoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICB0cnkge1xuICAgIGF3YWl0IGVuc3VyZUNvbGxlY3Rpb24oKTtcbiAgICBhd2FpdCBxZHJhbnQuZGVsZXRlKENPTExFQ1RJT05fTkFNRSwge1xuICAgICAgd2FpdDogdHJ1ZSxcbiAgICAgIHBvaW50czogW2lkXSBhcyBbc3RyaW5nIHwgbnVtYmVyXSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkZWxldGluZyBmcm9tIFFkcmFudDonLCBlcnJvcik7XG4gIH1cbn1cblxuLyoqXG4gKiBTZWFyY2ggcHJvZHVjdHMgaW4gUWRyYW50LlxuICogUmVzdWx0cyBhcmUgY2FjaGVkIGluIFJlZGlzIGZvciAzMCBtaW51dGVzIGtleWVkIGJ5IHF1ZXJ5IHRleHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZWFyY2hQcm9kdWN0cyhxdWVyeTogc3RyaW5nLCBsaW1pdCA9IDUpIHtcbiAgY29uc3QgY2FjaGVLZXkgPSBgc2VhcmNoOiR7aGFzaEtleShxdWVyeS50b0xvd2VyQ2FzZSgpLnRyaW0oKSl9OiR7bGltaXR9YDtcblxuICAvLyBUcnkgUmVkaXMgY2FjaGUgZmlyc3RcbiAgdHJ5IHtcbiAgICBjb25zdCBjYWNoZWQgPSBhd2FpdCByZWRpcy5nZXQoY2FjaGVLZXkpO1xuICAgIGlmIChjYWNoZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBbUWRyYW50XSBDYWNoZSBISVQgZm9yIHF1ZXJ5OiBcIiR7cXVlcnkuc3Vic3RyaW5nKDAsIDUwKX1cImApO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UoY2FjaGVkKTtcbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIC8vIFJlZGlzIGRvd24g4oCUIHByb2NlZWQgd2l0aG91dCBjYWNoZVxuICB9XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBlbnN1cmVDb2xsZWN0aW9uKCk7XG4gICAgY29uc3QgdmVjdG9yID0gYXdhaXQgZ2VuZXJhdGVFbWJlZGRpbmcocXVlcnkpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IHFkcmFudC5zZWFyY2goQ09MTEVDVElPTl9OQU1FLCB7XG4gICAgICB2ZWN0b3IsXG4gICAgICBsaW1pdCxcbiAgICAgIHdpdGhfcGF5bG9hZDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIC8vIENhY2hlIHJlc3VsdHMgaW4gUmVkaXNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgcmVkaXMuc2V0KGNhY2hlS2V5LCBKU09OLnN0cmluZ2lmeShyZXN1bHRzKSwgJ0VYJywgU0VBUkNIX0NBQ0hFX1RUTCk7XG4gICAgfSBjYXRjaCB7XG4gICAgICAvLyBSZWRpcyBkb3duIOKAlCBwcm9jZWVkIHdpdGhvdXQgY2FjaGluZ1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHNlYXJjaGluZyBpbiBRZHJhbnQ6JywgZXJyb3IpO1xuICAgIHJldHVybiBbXTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIlFkcmFudENsaWVudCIsInJlZGlzIiwiaXNEb2NrZXJDb250YWluZXIiLCJwcm9jZXNzIiwiZW52IiwiSVNfRE9DS0VSIiwiSE9TVE5BTUUiLCJpbmNsdWRlcyIsInFkcmFudFVybCIsIlFEUkFOVF9VUkwiLCJxZHJhbnRBcGlLZXkiLCJRRFJBTlRfQVBJX0tFWSIsInFkcmFudCIsInVybCIsImFwaUtleSIsInVuZGVmaW5lZCIsImNoZWNrQ29tcGF0aWJpbGl0eSIsIkNPTExFQ1RJT05fTkFNRSIsIlZFQ1RPUl9TSVpFIiwiRU1CRURESU5HX0NBQ0hFX1RUTCIsIlNFQVJDSF9DQUNIRV9UVEwiLCJjb2xsZWN0aW9uVmVyaWZpZWQiLCJlbnN1cmVDb2xsZWN0aW9uIiwiY29sbGVjdGlvbnMiLCJnZXRDb2xsZWN0aW9ucyIsImV4aXN0cyIsInNvbWUiLCJjIiwibmFtZSIsImNyZWF0ZUNvbGxlY3Rpb24iLCJ2ZWN0b3JzIiwic2l6ZSIsImRpc3RhbmNlIiwiY29uc29sZSIsImxvZyIsImVycm9yIiwiaGFzaEtleSIsInRleHQiLCJjcmVhdGVIYXNoIiwicmVxdWlyZSIsInVwZGF0ZSIsImRpZ2VzdCIsInNsaWNlIiwiZ2VuZXJhdGVFbWJlZGRpbmciLCJjYWNoZUtleSIsInRvTG93ZXJDYXNlIiwidHJpbSIsImNhY2hlZCIsImdldCIsIkpTT04iLCJwYXJzZSIsIm1pc3RyYWxLZXkiLCJNSVNUUkFMX0FQSV9LRVkiLCJFcnJvciIsInJlc3BvbnNlIiwiZmV0Y2giLCJtZXRob2QiLCJoZWFkZXJzIiwiQXV0aG9yaXphdGlvbiIsImJvZHkiLCJzdHJpbmdpZnkiLCJtb2RlbCIsImlucHV0Iiwib2siLCJlcnJvckJvZHkiLCJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiZGF0YSIsImpzb24iLCJlbWJlZGRpbmciLCJzZXQiLCJ1cHNlcnRQcm9kdWN0VmVjdG9yIiwiaWQiLCJwYXlsb2FkIiwidmVjdG9yIiwidXBzZXJ0Iiwid2FpdCIsInBvaW50cyIsImRlbGV0ZVByb2R1Y3RWZWN0b3IiLCJkZWxldGUiLCJzZWFyY2hQcm9kdWN0cyIsInF1ZXJ5IiwibGltaXQiLCJzdWJzdHJpbmciLCJyZXN1bHRzIiwic2VhcmNoIiwid2l0aF9wYXlsb2FkIl0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./src/lib/qdrant.ts\n");
|
|
|
|
/***/ }),
|
|
|
|
/***/ "(action-browser)/./src/lib/redis.ts":
|
|
/*!**************************!*\
|
|
!*** ./src/lib/redis.ts ***!
|
|
\**************************/
|
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
|
|
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__),\n/* harmony export */ redis: () => (/* binding */ redis)\n/* harmony export */ });\n/* harmony import */ var ioredis__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ioredis */ \"ioredis\");\n/* harmony import */ var ioredis__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(ioredis__WEBPACK_IMPORTED_MODULE_0__);\n\nconst isDockerContainer = process.env.IS_DOCKER === 'true' || process.env.HOSTNAME?.includes('klz-app');\nconst redisUrl = process.env.REDIS_URL || (isDockerContainer ? 'redis://klz-redis:6379' : 'redis://localhost:6379');\n// Only create a single instance in Node.js\nconst globalForRedis = global;\nconst redis = globalForRedis.redis || new (ioredis__WEBPACK_IMPORTED_MODULE_0___default())(redisUrl, {\n maxRetriesPerRequest: 3\n});\nif (true) {\n globalForRedis.redis = redis;\n}\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (redis);\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiKGFjdGlvbi1icm93c2VyKS8uL3NyYy9saWIvcmVkaXMudHMiLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUE0QjtBQUU1QixNQUFNQyxvQkFDSkMsUUFBUUMsR0FBRyxDQUFDQyxTQUFTLEtBQUssVUFBVUYsUUFBUUMsR0FBRyxDQUFDRSxRQUFRLEVBQUVDLFNBQVM7QUFDckUsTUFBTUMsV0FDSkwsUUFBUUMsR0FBRyxDQUFDSyxTQUFTLElBQ3BCUCxDQUFBQSxvQkFBb0IsMkJBQTJCLHdCQUF1QjtBQUV6RSwyQ0FBMkM7QUFDM0MsTUFBTVEsaUJBQWlCQztBQUVoQixNQUFNQyxRQUNYRixlQUFlRSxLQUFLLElBQ3BCLElBQUlYLGdEQUFLQSxDQUFDTyxVQUFVO0lBQ2xCSyxzQkFBc0I7QUFDeEIsR0FBRztBQUVMLElBQUlWLElBQXFDLEVBQUU7SUFDekNPLGVBQWVFLEtBQUssR0FBR0E7QUFDekI7QUFFQSxpRUFBZUEsS0FBS0EsRUFBQyIsInNvdXJjZXMiOlsiL1VzZXJzL21hcmNtaW50ZWwvUHJvamVjdHMvZS10aWIuY29tL3NyYy9saWIvcmVkaXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlZGlzIGZyb20gJ2lvcmVkaXMnO1xuXG5jb25zdCBpc0RvY2tlckNvbnRhaW5lciA9XG4gIHByb2Nlc3MuZW52LklTX0RPQ0tFUiA9PT0gJ3RydWUnIHx8IHByb2Nlc3MuZW52LkhPU1ROQU1FPy5pbmNsdWRlcygna2x6LWFwcCcpO1xuY29uc3QgcmVkaXNVcmwgPVxuICBwcm9jZXNzLmVudi5SRURJU19VUkwgfHxcbiAgKGlzRG9ja2VyQ29udGFpbmVyID8gJ3JlZGlzOi8va2x6LXJlZGlzOjYzNzknIDogJ3JlZGlzOi8vbG9jYWxob3N0OjYzNzknKTtcblxuLy8gT25seSBjcmVhdGUgYSBzaW5nbGUgaW5zdGFuY2UgaW4gTm9kZS5qc1xuY29uc3QgZ2xvYmFsRm9yUmVkaXMgPSBnbG9iYWwgYXMgdW5rbm93biBhcyB7IHJlZGlzOiBSZWRpcyB9O1xuXG5leHBvcnQgY29uc3QgcmVkaXMgPVxuICBnbG9iYWxGb3JSZWRpcy5yZWRpcyB8fFxuICBuZXcgUmVkaXMocmVkaXNVcmwsIHtcbiAgICBtYXhSZXRyaWVzUGVyUmVxdWVzdDogMyxcbiAgfSk7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGdsb2JhbEZvclJlZGlzLnJlZGlzID0gcmVkaXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHJlZGlzO1xuIl0sIm5hbWVzIjpbIlJlZGlzIiwiaXNEb2NrZXJDb250YWluZXIiLCJwcm9jZXNzIiwiZW52IiwiSVNfRE9DS0VSIiwiSE9TVE5BTUUiLCJpbmNsdWRlcyIsInJlZGlzVXJsIiwiUkVESVNfVVJMIiwiZ2xvYmFsRm9yUmVkaXMiLCJnbG9iYWwiLCJyZWRpcyIsIm1heFJldHJpZXNQZXJSZXF1ZXN0Il0sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///(action-browser)/./src/lib/redis.ts\n");
|
|
|
|
/***/ })
|
|
|
|
};
|
|
; |