Files
zCode-CLI-X/~/.npm-cache/@growthbook/growthbook@1.6.5@@@1/dist/esm/sticky-bucket-service.mjs.map
admin 875c7f9b91 feat: Complete zCode CLI X with Telegram bot integration
- Add full Telegram bot functionality with Z.AI API integration
- Implement 4 tools: Bash, FileEdit, WebSearch, Git
- Add 3 agents: Code Reviewer, Architect, DevOps Engineer
- Add 6 skills for common coding tasks
- Add systemd service file for 24/7 operation
- Add nginx configuration for HTTPS webhook
- Add comprehensive documentation
- Implement WebSocket server for real-time updates
- Add logging system with Winston
- Add environment validation

🤖 zCode CLI X - Agentic coder with Z.AI + Telegram integration
2026-05-05 09:01:26 +00:00

1 line
17 KiB
Plaintext

{"version":3,"file":"sticky-bucket-service.mjs","names":["toString","getStickyBucketAttributeKey","StickyBucketService","constructor","opts","prefix","getAllAssignments","attributes","docs","Promise","all","Object","entries","map","attributeName","attributeValue","getAssignments","forEach","doc","key","getKey","StickyBucketServiceSync","getAssignmentsSync","saveAssignments","saveAssignmentsSync","getAllAssignmentsSync","LocalStorageStickyBucketService","localStorage","globalThis","e","raw","getItem","data","JSON","parse","assignments","setItem","stringify","ExpressCookieStickyBucketService","req","res","cookieAttributes","maxAge","cookies","str","cookie","encodeURIComponent","BrowserCookieStickyBucketService","jsCookie","expires","get","set","RedisStickyBucketService","redis","keys","mget","then","values","_attributeName","_attributeValue"],"sources":["../../src/sticky-bucket-service.ts"],"sourcesContent":["import {\n LocalStorageCompat,\n StickyAssignmentsDocument,\n StickyAttributeKey,\n} from \"./types/growthbook\";\nimport { toString } from \"./util\";\nimport { getStickyBucketAttributeKey } from \"./core\";\n\nexport interface CookieAttributes {\n expires?: number | Date | undefined;\n path?: string | undefined;\n domain?: string | undefined;\n secure?: boolean | undefined;\n sameSite?: \"strict\" | \"Strict\" | \"lax\" | \"Lax\" | \"none\" | \"None\" | undefined;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n [property: string]: any;\n}\nexport interface JsCookiesCompat<T = string> {\n set(\n name: string,\n value: string | T,\n options?: CookieAttributes,\n ): string | undefined;\n get(name: string): string | T | undefined;\n get(): { [key: string]: string };\n remove(name: string, options?: CookieAttributes): void;\n}\n\nexport interface IORedisCompat {\n mget(...keys: string[]): Promise<string[]>;\n set(key: string, value: string): Promise<string>;\n}\n\nexport interface RequestCompat {\n cookies: Record<string, string>;\n [key: string]: unknown;\n}\nexport interface ResponseCompat {\n cookie(\n name: string,\n value: string,\n options?: CookieAttributes,\n ): ResponseCompat;\n [key: string]: unknown;\n}\n\n/**\n * Responsible for reading and writing documents which describe sticky bucket assignments.\n */\nexport abstract class StickyBucketService {\n protected prefix: string;\n\n constructor(opts?: { prefix?: string }) {\n opts = opts || {};\n this.prefix = opts.prefix || \"\";\n }\n\n abstract getAssignments(\n attributeName: string,\n attributeValue: string,\n ): Promise<StickyAssignmentsDocument | null>;\n\n abstract saveAssignments(doc: StickyAssignmentsDocument): Promise<unknown>;\n\n /**\n * The SDK calls getAllAssignments to populate sticky buckets. This in turn will\n * typically loop through individual getAssignments calls. However, some StickyBucketService\n * instances (i.e. Redis) will instead perform a multi-query inside getAllAssignments instead.\n */\n async getAllAssignments(\n attributes: Record<string, string>,\n ): Promise<Record<StickyAttributeKey, StickyAssignmentsDocument>> {\n const docs: Record<string, StickyAssignmentsDocument> = {};\n (\n await Promise.all(\n Object.entries(attributes).map(([attributeName, attributeValue]) =>\n this.getAssignments(attributeName, attributeValue),\n ),\n )\n ).forEach((doc) => {\n if (doc) {\n const key = getStickyBucketAttributeKey(\n doc.attributeName,\n doc.attributeValue,\n );\n docs[key] = doc;\n }\n });\n return docs;\n }\n\n getKey(attributeName: string, attributeValue: string): string {\n return `${this.prefix}${attributeName}||${attributeValue}`;\n }\n}\n\nexport abstract class StickyBucketServiceSync extends StickyBucketService {\n abstract getAssignmentsSync(\n attributeName: string,\n attributeValue: string,\n ): StickyAssignmentsDocument | null;\n\n abstract saveAssignmentsSync(doc: StickyAssignmentsDocument): void;\n\n async getAssignments(attributeName: string, attributeValue: string) {\n return this.getAssignmentsSync(attributeName, attributeValue);\n }\n\n async saveAssignments(doc: StickyAssignmentsDocument) {\n this.saveAssignmentsSync(doc);\n }\n\n getAllAssignmentsSync(\n attributes: Record<string, string>,\n ): Record<StickyAttributeKey, StickyAssignmentsDocument> {\n const docs: Record<string, StickyAssignmentsDocument> = {};\n Object.entries(attributes)\n .map(([attributeName, attributeValue]) =>\n this.getAssignmentsSync(attributeName, attributeValue),\n )\n .forEach((doc) => {\n if (doc) {\n const key = getStickyBucketAttributeKey(\n doc.attributeName,\n doc.attributeValue,\n );\n docs[key] = doc;\n }\n });\n return docs;\n }\n}\n\nexport class LocalStorageStickyBucketService extends StickyBucketService {\n private localStorage: LocalStorageCompat | undefined;\n constructor(opts?: { prefix?: string; localStorage?: LocalStorageCompat }) {\n opts = opts || {};\n super();\n this.prefix = opts.prefix || \"gbStickyBuckets__\";\n try {\n this.localStorage = opts.localStorage || globalThis.localStorage;\n } catch (e) {\n // Ignore localStorage errors\n }\n }\n async getAssignments(attributeName: string, attributeValue: string) {\n const key = this.getKey(attributeName, attributeValue);\n let doc: StickyAssignmentsDocument | null = null;\n if (!this.localStorage) return doc;\n try {\n const raw = (await this.localStorage.getItem(key)) || \"{}\";\n const data = JSON.parse(raw);\n if (data.attributeName && data.attributeValue && data.assignments) {\n doc = data;\n }\n } catch (e) {\n // Ignore localStorage errors\n }\n return doc;\n }\n async saveAssignments(doc: StickyAssignmentsDocument) {\n const key = this.getKey(doc.attributeName, doc.attributeValue);\n if (!this.localStorage) return;\n try {\n await this.localStorage.setItem(key, JSON.stringify(doc));\n } catch (e) {\n // Ignore localStorage errors\n }\n }\n}\n\nexport class ExpressCookieStickyBucketService extends StickyBucketServiceSync {\n /**\n * Intended to be used with cookieParser() middleware from npm: 'cookie-parser'.\n * Assumes:\n * - reading a cookie is automatically decoded via decodeURIComponent() or similar\n * - writing a cookie name & value must be manually encoded via encodeURIComponent() or similar\n * - all cookie bodies are JSON encoded strings and are manually encoded/decoded\n */\n private req: RequestCompat;\n private res: ResponseCompat;\n private cookieAttributes: CookieAttributes;\n constructor({\n prefix = \"gbStickyBuckets__\",\n req,\n res,\n cookieAttributes = { maxAge: 180 * 24 * 3600 * 1000 }, // 180 days\n }: {\n prefix?: string;\n req: RequestCompat;\n res: ResponseCompat;\n cookieAttributes?: CookieAttributes;\n }) {\n super();\n this.prefix = prefix;\n this.req = req;\n this.res = res;\n this.cookieAttributes = cookieAttributes;\n }\n getAssignmentsSync(attributeName: string, attributeValue: string) {\n const key = this.getKey(attributeName, attributeValue);\n let doc: StickyAssignmentsDocument | null = null;\n if (!this.req) return doc;\n try {\n const raw = this.req.cookies[key] || \"{}\";\n const data = JSON.parse(raw);\n if (data.attributeName && data.attributeValue && data.assignments) {\n doc = data;\n }\n } catch (e) {\n // Ignore cookie errors\n }\n return doc;\n }\n saveAssignmentsSync(doc: StickyAssignmentsDocument) {\n const key = this.getKey(doc.attributeName, doc.attributeValue);\n if (!this.res) return;\n const str = JSON.stringify(doc);\n this.res.cookie(\n encodeURIComponent(key),\n encodeURIComponent(str),\n this.cookieAttributes,\n );\n }\n}\n\nexport class BrowserCookieStickyBucketService extends StickyBucketServiceSync {\n /**\n * Intended to be used with npm: 'js-cookie'.\n * Assumes:\n * - reading a cookie is automatically decoded via decodeURIComponent() or similar\n * - writing a cookie name & value is automatically encoded via encodeURIComponent() or similar\n * - all cookie bodies are JSON encoded strings and are manually encoded/decoded\n */\n private jsCookie: JsCookiesCompat;\n private cookieAttributes: CookieAttributes;\n constructor({\n prefix = \"gbStickyBuckets__\",\n jsCookie,\n cookieAttributes = { expires: 180 }, // 180 days\n }: {\n prefix?: string;\n jsCookie: JsCookiesCompat;\n cookieAttributes?: CookieAttributes;\n }) {\n super();\n this.prefix = prefix;\n this.jsCookie = jsCookie;\n this.cookieAttributes = cookieAttributes;\n }\n getAssignmentsSync(attributeName: string, attributeValue: string) {\n const key = this.getKey(attributeName, attributeValue);\n let doc: StickyAssignmentsDocument | null = null;\n if (!this.jsCookie) return doc;\n try {\n const raw = this.jsCookie.get(key);\n const data = JSON.parse(raw || \"{}\");\n if (data.attributeName && data.attributeValue && data.assignments) {\n doc = data;\n }\n } catch (e) {\n // Ignore cookie errors\n }\n return doc;\n }\n async saveAssignmentsSync(doc: StickyAssignmentsDocument) {\n const key = this.getKey(doc.attributeName, doc.attributeValue);\n if (!this.jsCookie) return;\n const str = JSON.stringify(doc);\n this.jsCookie.set(key, str, this.cookieAttributes);\n }\n}\n\nexport class RedisStickyBucketService extends StickyBucketService {\n /** Intended to be used with npm: 'ioredis'. **/\n private redis: IORedisCompat | undefined;\n constructor({ redis }: { redis: IORedisCompat }) {\n super();\n this.redis = redis;\n }\n async getAllAssignments(\n attributes: Record<string, string>,\n ): Promise<Record<StickyAttributeKey, StickyAssignmentsDocument>> {\n const docs: Record<StickyAttributeKey, StickyAssignmentsDocument> = {};\n const keys = Object.entries(attributes).map(\n ([attributeName, attributeValue]) =>\n getStickyBucketAttributeKey(attributeName, attributeValue),\n );\n if (!this.redis) return docs;\n await this.redis.mget(...keys).then((values) => {\n values.forEach((raw) => {\n try {\n const data = JSON.parse(raw || \"{}\");\n if (\n data.attributeName &&\n \"attributeValue\" in data &&\n data.assignments\n ) {\n const key = getStickyBucketAttributeKey(\n data.attributeName,\n toString(data.attributeValue),\n );\n docs[key] = data;\n }\n } catch (e) {\n // ignore redis doc parse errors\n }\n });\n });\n return docs;\n }\n async getAssignments(_attributeName: string, _attributeValue: string) {\n // not implemented\n return null;\n }\n async saveAssignments(doc: StickyAssignmentsDocument) {\n const key = this.getKey(doc.attributeName, doc.attributeValue);\n if (!this.redis) return;\n await this.redis.set(key, JSON.stringify(doc));\n }\n}\n"],"mappings":"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","ignoreList":[]}