@cms.ai/brand_brain 0.0.1
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.
- package/README.md +95 -0
- package/dist/index.cjs +1748 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +395 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +395 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +1741 -0
- package/dist/index.mjs.map +1 -0
- package/dist/react/index.cjs +1789 -0
- package/dist/react/index.cjs.map +1 -0
- package/dist/react/index.d.cts +387 -0
- package/dist/react/index.d.cts.map +1 -0
- package/dist/react/index.d.mts +387 -0
- package/dist/react/index.d.mts.map +1 -0
- package/dist/react/index.mjs +1788 -0
- package/dist/react/index.mjs.map +1 -0
- package/package.json +80 -0
- package/src/GuideClient.ts +239 -0
- package/src/analytics.test.ts +25 -0
- package/src/analytics.ts +36 -0
- package/src/api.ts +26 -0
- package/src/chat-stream.test.ts +55 -0
- package/src/chat-stream.ts +130 -0
- package/src/index.ts +2 -0
- package/src/react/index.ts +2 -0
- package/src/react/useGuide.ts +101 -0
- package/src/types.ts +316 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#cleanup","#next","#isDone","#isExecuteComplete","toStandardHeaders","#serialize","#deserialize","#api"],"sources":["../../../../node_modules/.pnpm/@orpc+shared@1.14.0_@opentelemetry+api@1.9.0/node_modules/@orpc/shared/dist/index.mjs","../../../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.0/node_modules/@orpc/client/dist/shared/client.KWZYf6QD.mjs","../../../../node_modules/.pnpm/@orpc+standard-server@1.14.0_@opentelemetry+api@1.9.0/node_modules/@orpc/standard-server/dist/index.mjs","../../../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.0/node_modules/@orpc/client/dist/shared/client.BLtwTQUg.mjs","../../../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.0/node_modules/@orpc/client/dist/index.mjs","../../../../node_modules/.pnpm/@orpc+standard-server-fetch@1.14.0_@opentelemetry+api@1.9.0/node_modules/@orpc/standard-server-fetch/dist/index.mjs","../../../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.0/node_modules/@orpc/client/dist/shared/client.DrB9nq_G.mjs","../../../../node_modules/.pnpm/@orpc+client@1.14.0_@opentelemetry+api@1.9.0/node_modules/@orpc/client/dist/adapters/fetch/index.mjs","../../../orpc/src/shared/client.ts","../../../orpc/src/live/client.ts","../../src/api.ts","../../src/analytics.ts","../../src/types.ts","../../src/chat-stream.ts","../../src/GuideClient.ts","../../src/react/useGuide.ts"],"sourcesContent":["export { group, guard, mapEntries, mapValues, omit, retry, sleep } from 'radash';\n\nfunction resolveMaybeOptionalOptions(rest) {\n return rest[0] ?? {};\n}\n\nfunction toArray(value) {\n return Array.isArray(value) ? value : value === void 0 || value === null ? [] : [value];\n}\nfunction splitInHalf(arr) {\n const half = Math.ceil(arr.length / 2);\n return [arr.slice(0, half), arr.slice(half)];\n}\n\nfunction readAsBuffer(source) {\n if (typeof source.bytes === \"function\") {\n return source.bytes();\n }\n return source.arrayBuffer();\n}\n\nconst ORPC_NAME = \"orpc\";\nconst ORPC_SHARED_PACKAGE_NAME = \"@orpc/shared\";\nconst ORPC_SHARED_PACKAGE_VERSION = \"1.14.0\";\n\nclass AbortError extends Error {\n constructor(...rest) {\n super(...rest);\n this.name = \"AbortError\";\n }\n}\n\nfunction once(fn) {\n let cached;\n return () => {\n if (cached) {\n return cached.result;\n }\n const result = fn();\n cached = { result };\n return result;\n };\n}\nfunction sequential(fn) {\n let lastOperationPromise = Promise.resolve();\n return (...args) => {\n return lastOperationPromise = lastOperationPromise.catch(() => {\n }).then(() => {\n return fn(...args);\n });\n };\n}\nfunction defer(callback) {\n if (typeof setTimeout === \"function\") {\n setTimeout(callback, 0);\n } else {\n Promise.resolve().then(() => Promise.resolve().then(() => Promise.resolve().then(callback)));\n }\n}\n\nconst SPAN_ERROR_STATUS = 2;\nconst GLOBAL_OTEL_CONFIG_KEY = `__${ORPC_SHARED_PACKAGE_NAME}@${ORPC_SHARED_PACKAGE_VERSION}/otel/config__`;\nfunction setGlobalOtelConfig(config) {\n globalThis[GLOBAL_OTEL_CONFIG_KEY] = config;\n}\nfunction getGlobalOtelConfig() {\n return globalThis[GLOBAL_OTEL_CONFIG_KEY];\n}\nfunction startSpan(name, options = {}, context) {\n const tracer = getGlobalOtelConfig()?.tracer;\n return tracer?.startSpan(name, options, context);\n}\nfunction setSpanError(span, error, options = {}) {\n if (!span) {\n return;\n }\n const exception = toOtelException(error);\n span.recordException(exception);\n if (!options.signal?.aborted || options.signal.reason !== error) {\n span.setStatus({\n code: SPAN_ERROR_STATUS,\n message: exception.message\n });\n }\n}\nfunction setSpanAttribute(span, key, value) {\n if (!span || value === void 0) {\n return;\n }\n span.setAttribute(key, value);\n}\nfunction toOtelException(error) {\n if (error instanceof Error) {\n const exception = {\n message: error.message,\n name: error.name,\n stack: error.stack\n };\n if (\"code\" in error && (typeof error.code === \"string\" || typeof error.code === \"number\")) {\n exception.code = error.code;\n }\n return exception;\n }\n return { message: String(error) };\n}\nfunction toSpanAttributeValue(data) {\n if (data === void 0) {\n return \"undefined\";\n }\n try {\n return JSON.stringify(data, (_, value) => {\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (value instanceof Map || value instanceof Set) {\n return Array.from(value);\n }\n return value;\n });\n } catch {\n return String(data);\n }\n}\nasync function runWithSpan({ name, context, ...options }, fn) {\n const tracer = getGlobalOtelConfig()?.tracer;\n if (!tracer) {\n return fn();\n }\n const callback = async (span) => {\n try {\n return await fn(span);\n } catch (e) {\n setSpanError(span, e, options);\n throw e;\n } finally {\n span.end();\n }\n };\n if (context) {\n return tracer.startActiveSpan(name, options, context, callback);\n } else {\n return tracer.startActiveSpan(name, options, callback);\n }\n}\nasync function runInSpanContext(span, fn) {\n const otelConfig = getGlobalOtelConfig();\n if (!span || !otelConfig) {\n return fn();\n }\n const ctx = otelConfig.trace.setSpan(otelConfig.context.active(), span);\n return otelConfig.context.with(ctx, fn);\n}\n\nclass AsyncIdQueue {\n openIds = /* @__PURE__ */ new Set();\n queues = /* @__PURE__ */ new Map();\n waiters = /* @__PURE__ */ new Map();\n get length() {\n return this.openIds.size;\n }\n get waiterIds() {\n return Array.from(this.waiters.keys());\n }\n hasBufferedItems(id) {\n return Boolean(this.queues.get(id)?.length);\n }\n open(id) {\n this.openIds.add(id);\n }\n isOpen(id) {\n return this.openIds.has(id);\n }\n push(id, item) {\n this.assertOpen(id);\n const pending = this.waiters.get(id);\n if (pending?.length) {\n pending.shift()[0](item);\n if (pending.length === 0) {\n this.waiters.delete(id);\n }\n } else {\n const items = this.queues.get(id);\n if (items) {\n items.push(item);\n } else {\n this.queues.set(id, [item]);\n }\n }\n }\n async pull(id) {\n this.assertOpen(id);\n const items = this.queues.get(id);\n if (items?.length) {\n const item = items.shift();\n if (items.length === 0) {\n this.queues.delete(id);\n }\n return item;\n }\n return new Promise((resolve, reject) => {\n const waitingPulls = this.waiters.get(id);\n const pending = [resolve, reject];\n if (waitingPulls) {\n waitingPulls.push(pending);\n } else {\n this.waiters.set(id, [pending]);\n }\n });\n }\n close({ id, reason } = {}) {\n if (id === void 0) {\n this.waiters.forEach((pendingPulls, id2) => {\n const error2 = reason ?? new AbortError(`[AsyncIdQueue] Queue[${id2}] was closed or aborted while waiting for pulling.`);\n pendingPulls.forEach(([, reject]) => reject(error2));\n });\n this.waiters.clear();\n this.openIds.clear();\n this.queues.clear();\n return;\n }\n const error = reason ?? new AbortError(`[AsyncIdQueue] Queue[${id}] was closed or aborted while waiting for pulling.`);\n this.waiters.get(id)?.forEach(([, reject]) => reject(error));\n this.waiters.delete(id);\n this.openIds.delete(id);\n this.queues.delete(id);\n }\n assertOpen(id) {\n if (!this.isOpen(id)) {\n throw new Error(`[AsyncIdQueue] Cannot access queue[${id}] because it is not open or aborted.`);\n }\n }\n}\n\nfunction isAsyncIteratorObject(maybe) {\n if (!maybe || typeof maybe !== \"object\") {\n return false;\n }\n return \"next\" in maybe && typeof maybe.next === \"function\" && Symbol.asyncIterator in maybe && typeof maybe[Symbol.asyncIterator] === \"function\";\n}\nconst fallbackAsyncDisposeSymbol = Symbol.for(\"asyncDispose\");\nconst asyncDisposeSymbol = Symbol.asyncDispose ?? fallbackAsyncDisposeSymbol;\nclass AsyncIteratorClass {\n #isDone = false;\n #isExecuteComplete = false;\n #cleanup;\n #next;\n constructor(next, cleanup) {\n this.#cleanup = cleanup;\n this.#next = sequential(async () => {\n if (this.#isDone) {\n return { done: true, value: void 0 };\n }\n try {\n const result = await next();\n if (result.done) {\n this.#isDone = true;\n }\n return result;\n } catch (err) {\n this.#isDone = true;\n throw err;\n } finally {\n if (this.#isDone && !this.#isExecuteComplete) {\n this.#isExecuteComplete = true;\n await this.#cleanup(\"next\");\n }\n }\n });\n }\n next() {\n return this.#next();\n }\n async return(value) {\n this.#isDone = true;\n if (!this.#isExecuteComplete) {\n this.#isExecuteComplete = true;\n await this.#cleanup(\"return\");\n }\n return { done: true, value };\n }\n async throw(err) {\n this.#isDone = true;\n if (!this.#isExecuteComplete) {\n this.#isExecuteComplete = true;\n await this.#cleanup(\"throw\");\n }\n throw err;\n }\n /**\n * asyncDispose symbol only available in esnext, we should fallback to Symbol.for('asyncDispose')\n */\n async [asyncDisposeSymbol]() {\n this.#isDone = true;\n if (!this.#isExecuteComplete) {\n this.#isExecuteComplete = true;\n await this.#cleanup(\"dispose\");\n }\n }\n [Symbol.asyncIterator]() {\n return this;\n }\n}\nfunction replicateAsyncIterator(source, count) {\n const queue = new AsyncIdQueue();\n const ids = Array.from({ length: count }, (_, i) => i.toString());\n let isSourceFinished = false;\n const start = once(async () => {\n try {\n while (true) {\n const item = await source.next();\n ids.forEach((id) => {\n if (queue.isOpen(id)) {\n queue.push(id, { next: item });\n }\n });\n if (item.done) {\n break;\n }\n }\n } catch (error) {\n ids.forEach((id) => {\n if (queue.isOpen(id)) {\n queue.push(id, { error });\n }\n });\n } finally {\n isSourceFinished = true;\n }\n });\n const replicated = ids.map((id) => {\n queue.open(id);\n return new AsyncIteratorClass(\n async () => {\n start();\n const item = await queue.pull(id);\n if (item.next) {\n return item.next;\n }\n throw item.error;\n },\n async (reason) => {\n queue.close({ id });\n if (reason !== \"next\" && !queue.length && !isSourceFinished) {\n isSourceFinished = true;\n await source?.return?.();\n }\n }\n );\n });\n return replicated;\n}\nfunction asyncIteratorWithSpan({ name, ...options }, iterator) {\n let span;\n return new AsyncIteratorClass(\n async () => {\n span ??= startSpan(name);\n try {\n const result = await runInSpanContext(span, () => iterator.next());\n span?.addEvent(result.done ? \"completed\" : \"yielded\");\n return result;\n } catch (err) {\n setSpanError(span, err, options);\n throw err;\n }\n },\n async (reason) => {\n try {\n if (reason !== \"next\") {\n await runInSpanContext(span, () => iterator.return?.());\n }\n } catch (err) {\n setSpanError(span, err, options);\n throw err;\n } finally {\n span?.end();\n }\n }\n );\n}\n\nclass EventPublisher {\n #listenersMap = /* @__PURE__ */ new Map();\n #maxBufferedEvents;\n constructor(options = {}) {\n this.#maxBufferedEvents = options.maxBufferedEvents ?? 100;\n }\n get size() {\n return this.#listenersMap.size;\n }\n /**\n * Emits an event and delivers the payload to all subscribed listeners.\n */\n publish(event, payload) {\n const listeners = this.#listenersMap.get(event);\n if (!listeners) {\n return;\n }\n for (const listener of listeners) {\n listener(payload);\n }\n }\n subscribe(event, listenerOrOptions) {\n if (typeof listenerOrOptions === \"function\") {\n let listeners = this.#listenersMap.get(event);\n if (!listeners) {\n this.#listenersMap.set(event, listeners = []);\n }\n listeners.push(listenerOrOptions);\n return once(() => {\n listeners.splice(listeners.indexOf(listenerOrOptions), 1);\n if (listeners.length === 0) {\n this.#listenersMap.delete(event);\n }\n });\n }\n const signal = listenerOrOptions?.signal;\n const maxBufferedEvents = listenerOrOptions?.maxBufferedEvents ?? this.#maxBufferedEvents;\n signal?.throwIfAborted();\n const bufferedEvents = [];\n const pullResolvers = [];\n const unsubscribe = this.subscribe(event, (payload) => {\n const resolver = pullResolvers.shift();\n if (resolver) {\n resolver[0]({ done: false, value: payload });\n } else {\n bufferedEvents.push(payload);\n if (bufferedEvents.length > maxBufferedEvents) {\n bufferedEvents.shift();\n }\n }\n });\n const abortListener = (event2) => {\n unsubscribe();\n pullResolvers.forEach((resolver) => resolver[1](event2.target.reason));\n pullResolvers.length = 0;\n bufferedEvents.length = 0;\n };\n signal?.addEventListener(\"abort\", abortListener, { once: true });\n return new AsyncIteratorClass(async () => {\n if (signal?.aborted) {\n throw signal.reason;\n }\n if (bufferedEvents.length > 0) {\n return { done: false, value: bufferedEvents.shift() };\n }\n return new Promise((resolve, reject) => {\n pullResolvers.push([resolve, reject]);\n });\n }, async () => {\n unsubscribe();\n signal?.removeEventListener(\"abort\", abortListener);\n pullResolvers.forEach((resolver) => resolver[0]({ done: true, value: void 0 }));\n pullResolvers.length = 0;\n bufferedEvents.length = 0;\n });\n }\n}\n\nclass SequentialIdGenerator {\n index = BigInt(1);\n generate() {\n const id = this.index.toString(36);\n this.index++;\n return id;\n }\n}\nfunction compareSequentialIds(a, b) {\n if (a.length !== b.length) {\n return a.length - b.length;\n }\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction onStart(callback) {\n return async (options, ...rest) => {\n await callback(options, ...rest);\n return await options.next();\n };\n}\nfunction onSuccess(callback) {\n return async (options, ...rest) => {\n const result = await options.next();\n await callback(result, options, ...rest);\n return result;\n };\n}\nfunction onError(callback) {\n return async (options, ...rest) => {\n try {\n return await options.next();\n } catch (error) {\n await callback(error, options, ...rest);\n throw error;\n }\n };\n}\nfunction onFinish(callback) {\n let state;\n return async (options, ...rest) => {\n try {\n const result = await options.next();\n state = [null, result, true];\n return result;\n } catch (error) {\n state = [error, void 0, false];\n throw error;\n } finally {\n await callback(state, options, ...rest);\n }\n };\n}\nfunction intercept(interceptors, options, main) {\n const next = (options2, index) => {\n const interceptor = interceptors[index];\n if (!interceptor) {\n return main(options2);\n }\n return interceptor({\n ...options2,\n next: (newOptions = options2) => next(newOptions, index + 1)\n });\n };\n return next(options, 0);\n}\n\nfunction parseEmptyableJSON(text) {\n if (!text) {\n return void 0;\n }\n return JSON.parse(text);\n}\nfunction stringifyJSON(value) {\n return JSON.stringify(value);\n}\n\nfunction findDeepMatches(check, payload, segments = [], maps = [], values = []) {\n if (check(payload)) {\n maps.push(segments);\n values.push(payload);\n } else if (Array.isArray(payload)) {\n payload.forEach((v, i) => {\n findDeepMatches(check, v, [...segments, i], maps, values);\n });\n } else if (isObject(payload)) {\n for (const key in payload) {\n findDeepMatches(check, payload[key], [...segments, key], maps, values);\n }\n }\n return { maps, values };\n}\nfunction getConstructor(value) {\n if (!isTypescriptObject(value)) {\n return null;\n }\n return Object.getPrototypeOf(value)?.constructor;\n}\nfunction isObject(value) {\n if (!value || typeof value !== \"object\") {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || !proto || !proto.constructor;\n}\nfunction isTypescriptObject(value) {\n return !!value && (typeof value === \"object\" || typeof value === \"function\");\n}\nfunction clone(value) {\n if (Array.isArray(value)) {\n return value.map(clone);\n }\n if (isObject(value)) {\n const result = {};\n for (const key in value) {\n result[key] = clone(value[key]);\n }\n for (const sym of Object.getOwnPropertySymbols(value)) {\n result[sym] = clone(value[sym]);\n }\n return result;\n }\n return value;\n}\nfunction get(object, path) {\n let current = object;\n for (const key of path) {\n if (!isTypescriptObject(current)) {\n return void 0;\n }\n current = current[key];\n }\n return current;\n}\nfunction isPropertyKey(value) {\n const type = typeof value;\n return type === \"string\" || type === \"number\" || type === \"symbol\";\n}\nconst NullProtoObj = /* @__PURE__ */ (() => {\n const e = function() {\n };\n e.prototype = /* @__PURE__ */ Object.create(null);\n Object.freeze(e.prototype);\n return e;\n})();\n\nfunction value(value2, ...args) {\n if (typeof value2 === \"function\") {\n return value2(...args);\n }\n return value2;\n}\nfunction fallback(value2, fallback2) {\n return value2 === void 0 ? fallback2 : value2;\n}\n\nfunction preventNativeAwait(target) {\n return new Proxy(target, {\n get(target2, prop, receiver) {\n const value2 = Reflect.get(target2, prop, receiver);\n if (prop !== \"then\" || typeof value2 !== \"function\") {\n return value2;\n }\n return new Proxy(value2, {\n apply(targetFn, thisArg, args) {\n if (args.length !== 2 || args.some((arg) => !isNativeFunction(arg))) {\n return Reflect.apply(targetFn, thisArg, args);\n }\n let shouldOmit = true;\n args[0].call(thisArg, preventNativeAwait(new Proxy(target2, {\n get: (target3, prop2, receiver2) => {\n if (shouldOmit && prop2 === \"then\") {\n shouldOmit = false;\n return void 0;\n }\n return Reflect.get(target3, prop2, receiver2);\n }\n })));\n }\n });\n }\n });\n}\nconst NATIVE_FUNCTION_REGEX = /^\\s*function\\s*\\(\\)\\s*\\{\\s*\\[native code\\]\\s*\\}\\s*$/;\nfunction isNativeFunction(fn) {\n return typeof fn === \"function\" && NATIVE_FUNCTION_REGEX.test(fn.toString());\n}\nfunction overlayProxy(target, partial) {\n const proxy = new Proxy(typeof target === \"function\" ? partial : target, {\n get(_, prop) {\n const targetValue = prop in partial ? partial : value(target);\n const v = Reflect.get(targetValue, prop);\n return typeof v === \"function\" ? v.bind(targetValue) : v;\n },\n has(_, prop) {\n return Reflect.has(partial, prop) || Reflect.has(value(target), prop);\n }\n });\n return proxy;\n}\n\nfunction streamToAsyncIteratorClass(stream) {\n const reader = stream.getReader();\n return new AsyncIteratorClass(\n async () => {\n return reader.read();\n },\n async () => {\n await reader.cancel();\n }\n );\n}\nfunction asyncIteratorToStream(iterator) {\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await iterator.next();\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n },\n async cancel() {\n await iterator.return?.();\n }\n });\n}\nfunction asyncIteratorToUnproxiedDataStream(iterator) {\n return new ReadableStream({\n async pull(controller) {\n const { done, value } = await iterator.next();\n if (done) {\n controller.close();\n } else {\n const unproxied = isObject(value) ? { ...value } : Array.isArray(value) ? value.map((i) => i) : value;\n controller.enqueue(unproxied);\n }\n },\n async cancel() {\n await iterator.return?.();\n }\n });\n}\n\nfunction tryDecodeURIComponent(value) {\n try {\n return decodeURIComponent(value);\n } catch {\n return value;\n }\n}\n\nexport { AbortError, AsyncIdQueue, AsyncIteratorClass, EventPublisher, NullProtoObj, ORPC_NAME, ORPC_SHARED_PACKAGE_NAME, ORPC_SHARED_PACKAGE_VERSION, SequentialIdGenerator, asyncIteratorToStream, asyncIteratorToUnproxiedDataStream, asyncIteratorWithSpan, clone, compareSequentialIds, defer, fallback, findDeepMatches, get, getConstructor, getGlobalOtelConfig, intercept, isAsyncIteratorObject, isObject, isPropertyKey, isTypescriptObject, onError, onFinish, onStart, onSuccess, once, overlayProxy, parseEmptyableJSON, preventNativeAwait, readAsBuffer, replicateAsyncIterator, resolveMaybeOptionalOptions, runInSpanContext, runWithSpan, sequential, setGlobalOtelConfig, setSpanAttribute, setSpanError, splitInHalf, startSpan, streamToAsyncIteratorClass, stringifyJSON, toArray, toOtelException, toSpanAttributeValue, tryDecodeURIComponent, value };\n","import { resolveMaybeOptionalOptions, getConstructor, isObject } from '@orpc/shared';\n\nconst ORPC_CLIENT_PACKAGE_NAME = \"@orpc/client\";\nconst ORPC_CLIENT_PACKAGE_VERSION = \"1.14.0\";\n\nconst COMMON_ORPC_ERROR_DEFS = {\n BAD_REQUEST: {\n status: 400,\n message: \"Bad Request\"\n },\n UNAUTHORIZED: {\n status: 401,\n message: \"Unauthorized\"\n },\n FORBIDDEN: {\n status: 403,\n message: \"Forbidden\"\n },\n NOT_FOUND: {\n status: 404,\n message: \"Not Found\"\n },\n METHOD_NOT_SUPPORTED: {\n status: 405,\n message: \"Method Not Supported\"\n },\n NOT_ACCEPTABLE: {\n status: 406,\n message: \"Not Acceptable\"\n },\n TIMEOUT: {\n status: 408,\n message: \"Request Timeout\"\n },\n CONFLICT: {\n status: 409,\n message: \"Conflict\"\n },\n PRECONDITION_FAILED: {\n status: 412,\n message: \"Precondition Failed\"\n },\n PAYLOAD_TOO_LARGE: {\n status: 413,\n message: \"Payload Too Large\"\n },\n UNSUPPORTED_MEDIA_TYPE: {\n status: 415,\n message: \"Unsupported Media Type\"\n },\n UNPROCESSABLE_CONTENT: {\n status: 422,\n message: \"Unprocessable Content\"\n },\n TOO_MANY_REQUESTS: {\n status: 429,\n message: \"Too Many Requests\"\n },\n CLIENT_CLOSED_REQUEST: {\n status: 499,\n message: \"Client Closed Request\"\n },\n INTERNAL_SERVER_ERROR: {\n status: 500,\n message: \"Internal Server Error\"\n },\n NOT_IMPLEMENTED: {\n status: 501,\n message: \"Not Implemented\"\n },\n BAD_GATEWAY: {\n status: 502,\n message: \"Bad Gateway\"\n },\n SERVICE_UNAVAILABLE: {\n status: 503,\n message: \"Service Unavailable\"\n },\n GATEWAY_TIMEOUT: {\n status: 504,\n message: \"Gateway Timeout\"\n }\n};\nfunction fallbackORPCErrorStatus(code, status) {\n return status ?? COMMON_ORPC_ERROR_DEFS[code]?.status ?? 500;\n}\nfunction fallbackORPCErrorMessage(code, message) {\n return message || COMMON_ORPC_ERROR_DEFS[code]?.message || code;\n}\nconst GLOBAL_ORPC_ERROR_CONSTRUCTORS_SYMBOL = Symbol.for(`__${ORPC_CLIENT_PACKAGE_NAME}@${ORPC_CLIENT_PACKAGE_VERSION}/error/ORPC_ERROR_CONSTRUCTORS__`);\nvoid (globalThis[GLOBAL_ORPC_ERROR_CONSTRUCTORS_SYMBOL] ??= /* @__PURE__ */ new WeakSet());\nconst globalORPCErrorConstructors = globalThis[GLOBAL_ORPC_ERROR_CONSTRUCTORS_SYMBOL];\nclass ORPCError extends Error {\n defined;\n code;\n status;\n data;\n constructor(code, ...rest) {\n const options = resolveMaybeOptionalOptions(rest);\n if (options.status !== void 0 && !isORPCErrorStatus(options.status)) {\n throw new Error(\"[ORPCError] Invalid error status code.\");\n }\n const message = fallbackORPCErrorMessage(code, options.message);\n super(message, options);\n this.code = code;\n this.status = fallbackORPCErrorStatus(code, options.status);\n this.defined = options.defined ?? false;\n this.data = options.data;\n }\n toJSON() {\n return {\n defined: this.defined,\n code: this.code,\n status: this.status,\n message: this.message,\n data: this.data\n };\n }\n /**\n * Workaround for Next.js where different contexts use separate\n * dependency graphs, causing multiple ORPCError constructors existing and breaking\n * `instanceof` checks across contexts.\n *\n * This is particularly problematic with \"Optimized SSR\", where orpc-client\n * executes in one context but is invoked from another. When an error is thrown\n * in the execution context, `instanceof ORPCError` checks fail in the\n * invocation context due to separate class constructors.\n *\n * @todo Remove this and related code if Next.js resolves the multiple dependency graph issue.\n */\n static [Symbol.hasInstance](instance) {\n if (globalORPCErrorConstructors.has(this)) {\n const constructor = getConstructor(instance);\n if (constructor && globalORPCErrorConstructors.has(constructor)) {\n return true;\n }\n }\n return super[Symbol.hasInstance](instance);\n }\n}\nglobalORPCErrorConstructors.add(ORPCError);\nfunction isDefinedError(error) {\n return error instanceof ORPCError && error.defined;\n}\nfunction toORPCError(error) {\n return error instanceof ORPCError ? error : new ORPCError(\"INTERNAL_SERVER_ERROR\", {\n message: \"Internal server error\",\n cause: error\n });\n}\nfunction isORPCErrorStatus(status) {\n return status < 200 || status >= 400;\n}\nfunction isORPCErrorJson(json) {\n if (!isObject(json)) {\n return false;\n }\n const validKeys = [\"defined\", \"code\", \"status\", \"message\", \"data\"];\n if (Object.keys(json).some((k) => !validKeys.includes(k))) {\n return false;\n }\n return \"defined\" in json && typeof json.defined === \"boolean\" && \"code\" in json && typeof json.code === \"string\" && \"status\" in json && typeof json.status === \"number\" && isORPCErrorStatus(json.status) && \"message\" in json && typeof json.message === \"string\";\n}\nfunction createORPCErrorFromJson(json, options = {}) {\n return new ORPCError(json.code, {\n ...options,\n ...json\n });\n}\n\nexport { COMMON_ORPC_ERROR_DEFS as C, ORPC_CLIENT_PACKAGE_NAME as O, ORPC_CLIENT_PACKAGE_VERSION as a, fallbackORPCErrorMessage as b, ORPCError as c, isORPCErrorStatus as d, isORPCErrorJson as e, fallbackORPCErrorStatus as f, createORPCErrorFromJson as g, isDefinedError as i, toORPCError as t };\n","import { isTypescriptObject, AsyncIteratorClass, tryDecodeURIComponent, toArray, once, isAsyncIteratorObject, replicateAsyncIterator } from '@orpc/shared';\n\nclass EventEncoderError extends TypeError {\n}\nclass EventDecoderError extends TypeError {\n}\nclass ErrorEvent extends Error {\n data;\n constructor(options) {\n super(options?.message ?? \"An error event was received\", options);\n this.data = options?.data;\n }\n}\n\nfunction decodeEventMessage(encoded) {\n const lines = encoded.replace(/\\n+$/, \"\").split(/\\n/);\n const message = {\n data: void 0,\n event: void 0,\n id: void 0,\n retry: void 0,\n comments: []\n };\n for (const line of lines) {\n const index = line.indexOf(\":\");\n const key = index === -1 ? line : line.slice(0, index);\n const value = index === -1 ? \"\" : line.slice(index + 1).replace(/^\\s/, \"\");\n if (index === 0) {\n message.comments.push(value);\n } else if (key === \"data\") {\n message.data ??= \"\";\n message.data += `${value}\n`;\n } else if (key === \"event\") {\n message.event = value;\n } else if (key === \"id\") {\n message.id = value;\n } else if (key === \"retry\") {\n const maybeInteger = Number.parseInt(value);\n if (Number.isInteger(maybeInteger) && maybeInteger >= 0 && maybeInteger.toString() === value) {\n message.retry = maybeInteger;\n }\n }\n }\n message.data = message.data?.replace(/\\n$/, \"\");\n return message;\n}\nclass EventDecoder {\n constructor(options = {}) {\n this.options = options;\n }\n incomplete = \"\";\n feed(chunk) {\n this.incomplete += chunk;\n const lastCompleteIndex = this.incomplete.lastIndexOf(\"\\n\\n\");\n if (lastCompleteIndex === -1) {\n return;\n }\n const completes = this.incomplete.slice(0, lastCompleteIndex).split(/\\n\\n/);\n this.incomplete = this.incomplete.slice(lastCompleteIndex + 2);\n for (const encoded of completes) {\n const message = decodeEventMessage(`${encoded}\n\n`);\n if (this.options.onEvent) {\n this.options.onEvent(message);\n }\n }\n }\n end() {\n if (this.incomplete) {\n throw new EventDecoderError(\"Event Iterator ended before complete\");\n }\n }\n}\nclass EventDecoderStream extends TransformStream {\n constructor() {\n let decoder;\n super({\n start(controller) {\n decoder = new EventDecoder({\n onEvent: (event) => {\n controller.enqueue(event);\n }\n });\n },\n transform(chunk) {\n decoder.feed(chunk);\n },\n flush() {\n decoder.end();\n }\n });\n }\n}\n\nfunction assertEventId(id) {\n if (id.includes(\"\\n\")) {\n throw new EventEncoderError(\"Event's id must not contain a newline character\");\n }\n}\nfunction assertEventName(event) {\n if (event.includes(\"\\n\")) {\n throw new EventEncoderError(\"Event's event must not contain a newline character\");\n }\n}\nfunction assertEventRetry(retry) {\n if (!Number.isInteger(retry) || retry < 0) {\n throw new EventEncoderError(\"Event's retry must be a integer and >= 0\");\n }\n}\nfunction assertEventComment(comment) {\n if (comment.includes(\"\\n\")) {\n throw new EventEncoderError(\"Event's comment must not contain a newline character\");\n }\n}\nfunction encodeEventData(data) {\n const lines = data?.split(/\\n/) ?? [];\n let output = \"\";\n for (const line of lines) {\n output += `data: ${line}\n`;\n }\n return output;\n}\nfunction encodeEventComments(comments) {\n let output = \"\";\n for (const comment of comments ?? []) {\n assertEventComment(comment);\n output += `: ${comment}\n`;\n }\n return output;\n}\nfunction encodeEventMessage(message) {\n let output = \"\";\n output += encodeEventComments(message.comments);\n if (message.event !== void 0) {\n assertEventName(message.event);\n output += `event: ${message.event}\n`;\n }\n if (message.retry !== void 0) {\n assertEventRetry(message.retry);\n output += `retry: ${message.retry}\n`;\n }\n if (message.id !== void 0) {\n assertEventId(message.id);\n output += `id: ${message.id}\n`;\n }\n output += encodeEventData(message.data);\n output += \"\\n\";\n return output;\n}\n\nconst EVENT_SOURCE_META_SYMBOL = Symbol(\"ORPC_EVENT_SOURCE_META\");\nfunction withEventMeta(container, meta) {\n if (meta.id === void 0 && meta.retry === void 0 && !meta.comments?.length) {\n return container;\n }\n if (meta.id !== void 0) {\n assertEventId(meta.id);\n }\n if (meta.retry !== void 0) {\n assertEventRetry(meta.retry);\n }\n if (meta.comments !== void 0) {\n for (const comment of meta.comments) {\n assertEventComment(comment);\n }\n }\n return new Proxy(container, {\n get(target, prop, receiver) {\n if (prop === EVENT_SOURCE_META_SYMBOL) {\n return meta;\n }\n return Reflect.get(target, prop, receiver);\n }\n });\n}\nfunction getEventMeta(container) {\n return isTypescriptObject(container) ? Reflect.get(container, EVENT_SOURCE_META_SYMBOL) : void 0;\n}\n\nclass HibernationEventIterator extends AsyncIteratorClass {\n /**\n * this property is not transferred to the client, so it should be optional for type safety\n */\n hibernationCallback;\n constructor(hibernationCallback) {\n super(async () => {\n throw new Error(\"Cannot iterate over hibernating iterator directly\");\n }, async (reason) => {\n if (reason !== \"next\") {\n throw new Error(\"Cannot cleanup hibernating iterator directly\");\n }\n });\n this.hibernationCallback = hibernationCallback;\n }\n}\n\nfunction generateContentDisposition(filename, disposition = \"inline\") {\n const encodedFileName = filename.replace(/[^\\x20-\\x7E]/g, \"_\").replace(/\"/g, '\\\\\"');\n const encodedFilenameStar = encodeURIComponent(filename).replace(/['()*]/g, (c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`).replace(/%(7C|60|5E)/g, (str, hex) => String.fromCharCode(Number.parseInt(hex, 16)));\n return `${disposition}; filename=\"${encodedFileName}\"; filename*=utf-8''${encodedFilenameStar}`;\n}\nfunction getFilenameFromContentDisposition(contentDisposition) {\n const encodedFilenameStarMatch = contentDisposition.match(/filename\\*=(UTF-8'')?([^;]*)/i);\n if (encodedFilenameStarMatch && typeof encodedFilenameStarMatch[2] === \"string\") {\n return tryDecodeURIComponent(encodedFilenameStarMatch[2]);\n }\n const encodedFilenameMatch = contentDisposition.match(/filename=\"((?:\\\\\"|[^\"])*)\"/i);\n if (encodedFilenameMatch && typeof encodedFilenameMatch[1] === \"string\") {\n return encodedFilenameMatch[1].replace(/\\\\\"/g, '\"');\n }\n}\nfunction mergeStandardHeaders(a, b) {\n const merged = { ...a };\n for (const key in b) {\n if (Array.isArray(b[key])) {\n merged[key] = [...toArray(merged[key]), ...b[key]];\n } else if (b[key] !== void 0) {\n if (Array.isArray(merged[key])) {\n merged[key] = [...merged[key], b[key]];\n } else if (merged[key] !== void 0) {\n merged[key] = [merged[key], b[key]];\n } else {\n merged[key] = b[key];\n }\n }\n }\n return merged;\n}\nfunction flattenHeader(header) {\n if (typeof header === \"string\" || header === void 0) {\n return header;\n }\n if (header.length === 0) {\n return void 0;\n }\n return header.join(\", \");\n}\nfunction replicateStandardLazyResponse(response, count) {\n const replicated = [];\n let bodyPromise;\n let replicatedAsyncIteratorObjects;\n for (let i = 0; i < count; i++) {\n replicated.push({\n ...response,\n body: once(async () => {\n const body = await (bodyPromise ??= response.body());\n if (!isAsyncIteratorObject(body)) {\n return body;\n }\n replicatedAsyncIteratorObjects ??= replicateAsyncIterator(body, count);\n return replicatedAsyncIteratorObjects.shift();\n })\n });\n }\n return replicated;\n}\nfunction isEventIteratorHeaders(headers) {\n return Boolean(flattenHeader(headers[\"content-type\"])?.startsWith(\"text/event-stream\") && flattenHeader(headers[\"content-disposition\"]) === void 0);\n}\n\nexport { ErrorEvent, EventDecoder, EventDecoderError, EventDecoderStream, EventEncoderError, HibernationEventIterator, assertEventComment, assertEventId, assertEventName, assertEventRetry, decodeEventMessage, encodeEventComments, encodeEventData, encodeEventMessage, flattenHeader, generateContentDisposition, getEventMeta, getFilenameFromContentDisposition, isEventIteratorHeaders, mergeStandardHeaders, replicateStandardLazyResponse, withEventMeta };\n","import { AsyncIteratorClass, isTypescriptObject } from '@orpc/shared';\nimport { getEventMeta, withEventMeta } from '@orpc/standard-server';\n\nfunction mapEventIterator(iterator, maps) {\n const mapError = async (error) => {\n let mappedError = await maps.error(error);\n if (mappedError !== error) {\n const meta = getEventMeta(error);\n if (meta && isTypescriptObject(mappedError)) {\n mappedError = withEventMeta(mappedError, meta);\n }\n }\n return mappedError;\n };\n return new AsyncIteratorClass(async () => {\n const { done, value } = await (async () => {\n try {\n return await iterator.next();\n } catch (error) {\n throw await mapError(error);\n }\n })();\n let mappedValue = await maps.value(value, done);\n if (mappedValue !== value) {\n const meta = getEventMeta(value);\n if (meta && isTypescriptObject(mappedValue)) {\n mappedValue = withEventMeta(mappedValue, meta);\n }\n }\n return { done, value: mappedValue };\n }, async () => {\n try {\n await iterator.return?.();\n } catch (error) {\n throw await mapError(error);\n }\n });\n}\n\nexport { mapEventIterator as m };\n","import { preventNativeAwait, isTypescriptObject } from '@orpc/shared';\nexport { AsyncIteratorClass, EventPublisher, asyncIteratorToStream as eventIteratorToStream, asyncIteratorToUnproxiedDataStream as eventIteratorToUnproxiedDataStream, onError, onFinish, onStart, onSuccess, streamToAsyncIteratorClass as streamToEventIterator } from '@orpc/shared';\nimport { i as isDefinedError } from './shared/client.KWZYf6QD.mjs';\nexport { C as COMMON_ORPC_ERROR_DEFS, c as ORPCError, O as ORPC_CLIENT_PACKAGE_NAME, a as ORPC_CLIENT_PACKAGE_VERSION, g as createORPCErrorFromJson, b as fallbackORPCErrorMessage, f as fallbackORPCErrorStatus, e as isORPCErrorJson, d as isORPCErrorStatus, t as toORPCError } from './shared/client.KWZYf6QD.mjs';\nexport { m as mapEventIterator } from './shared/client.BLtwTQUg.mjs';\nexport { ErrorEvent, getEventMeta, withEventMeta } from '@orpc/standard-server';\n\nasync function safe(promise) {\n try {\n const output = await promise;\n return Object.assign(\n [null, output, false, true],\n { error: null, data: output, isDefined: false, isSuccess: true }\n );\n } catch (e) {\n const error = e;\n if (isDefinedError(error)) {\n return Object.assign(\n [error, void 0, true, false],\n { error, data: void 0, isDefined: true, isSuccess: false }\n );\n }\n return Object.assign(\n [error, void 0, false, false],\n { error, data: void 0, isDefined: false, isSuccess: false }\n );\n }\n}\nfunction resolveFriendlyClientOptions(options) {\n return {\n ...options,\n context: options.context ?? {}\n // Context only optional if all fields are optional\n };\n}\nfunction consumeEventIterator(iterator, options) {\n void (async () => {\n let onFinishState;\n try {\n const resolvedIterator = await iterator;\n while (true) {\n const { done, value } = await resolvedIterator.next();\n if (done) {\n const realValue = value;\n onFinishState = [null, realValue, true];\n options.onSuccess?.(realValue);\n break;\n }\n options.onEvent(value);\n }\n } catch (error) {\n onFinishState = [error, void 0, false];\n if (!options.onError && !options.onFinish) {\n throw error;\n }\n options.onError?.(error);\n } finally {\n options.onFinish?.(onFinishState);\n }\n })();\n return async () => {\n await (await iterator)?.return?.();\n };\n}\n\nfunction createORPCClient(link, options = {}) {\n const path = options.path ?? [];\n const procedureClient = async (...[input, options2 = {}]) => {\n return await link.call(path, input, resolveFriendlyClientOptions(options2));\n };\n const recursive = new Proxy(procedureClient, {\n get(target, key) {\n if (typeof key !== \"string\") {\n return Reflect.get(target, key);\n }\n return createORPCClient(link, {\n ...options,\n path: [...path, key]\n });\n }\n });\n return preventNativeAwait(recursive);\n}\n\nfunction createSafeClient(client) {\n const proxy = new Proxy((...args) => safe(client(...args)), {\n get(_, prop, receiver) {\n const value = Reflect.get(client, prop, receiver);\n if (typeof prop !== \"string\") {\n return value;\n }\n if (!isTypescriptObject(value)) {\n return value;\n }\n return createSafeClient(value);\n }\n });\n return proxy;\n}\n\nclass DynamicLink {\n constructor(linkResolver) {\n this.linkResolver = linkResolver;\n }\n async call(path, input, options) {\n const resolvedLink = await this.linkResolver(options, path, input);\n const output = await resolvedLink.call(path, input, options);\n return output;\n }\n}\n\nexport { DynamicLink, consumeEventIterator, createORPCClient, createSafeClient, isDefinedError, resolveFriendlyClientOptions, safe };\n","import { AsyncIteratorClass, startSpan, runInSpanContext, AbortError, parseEmptyableJSON, isTypescriptObject, setSpanError, stringifyJSON, runWithSpan, isAsyncIteratorObject, once } from '@orpc/shared';\nimport { EventDecoderStream, withEventMeta, ErrorEvent, encodeEventMessage, getEventMeta, getFilenameFromContentDisposition, generateContentDisposition } from '@orpc/standard-server';\n\nfunction toEventIterator(stream, options = {}) {\n const eventStream = stream?.pipeThrough(new TextDecoderStream()).pipeThrough(new EventDecoderStream());\n const reader = eventStream?.getReader();\n let span;\n let isCancelled = false;\n return new AsyncIteratorClass(async () => {\n span ??= startSpan(\"consume_event_iterator_stream\");\n try {\n while (true) {\n if (reader === void 0) {\n return { done: true, value: void 0 };\n }\n const { done, value } = await runInSpanContext(span, () => reader.read());\n if (done) {\n if (isCancelled) {\n throw new AbortError(\"Stream was cancelled\");\n }\n return { done: true, value: void 0 };\n }\n switch (value.event) {\n case \"message\": {\n let message = parseEmptyableJSON(value.data);\n if (isTypescriptObject(message)) {\n message = withEventMeta(message, value);\n }\n span?.addEvent(\"message\");\n return { done: false, value: message };\n }\n case \"error\": {\n let error = new ErrorEvent({\n data: parseEmptyableJSON(value.data)\n });\n error = withEventMeta(error, value);\n span?.addEvent(\"error\");\n throw error;\n }\n case \"done\": {\n let done2 = parseEmptyableJSON(value.data);\n if (isTypescriptObject(done2)) {\n done2 = withEventMeta(done2, value);\n }\n span?.addEvent(\"done\");\n return { done: true, value: done2 };\n }\n default: {\n span?.addEvent(\"maybe_keepalive\");\n }\n }\n }\n } catch (e) {\n if (!(e instanceof ErrorEvent)) {\n setSpanError(span, e, options);\n }\n throw e;\n }\n }, async (reason) => {\n try {\n if (reason !== \"next\") {\n isCancelled = true;\n span?.addEvent(\"cancelled\");\n }\n await runInSpanContext(span, () => reader?.cancel());\n } catch (e) {\n setSpanError(span, e, options);\n throw e;\n } finally {\n span?.end();\n }\n });\n}\nfunction toEventStream(iterator, options = {}) {\n const keepAliveEnabled = options.eventIteratorKeepAliveEnabled ?? true;\n const keepAliveInterval = options.eventIteratorKeepAliveInterval ?? 5e3;\n const keepAliveComment = options.eventIteratorKeepAliveComment ?? \"\";\n const initialCommentEnabled = options.eventIteratorInitialCommentEnabled ?? true;\n const initialComment = options.eventIteratorInitialComment ?? \"\";\n let cancelled = false;\n let timeout;\n let span;\n const stream = new ReadableStream({\n start(controller) {\n span = startSpan(\"stream_event_iterator\");\n if (initialCommentEnabled) {\n controller.enqueue(encodeEventMessage({\n comments: [initialComment]\n }));\n }\n },\n async pull(controller) {\n try {\n if (keepAliveEnabled) {\n timeout = setInterval(() => {\n controller.enqueue(encodeEventMessage({\n comments: [keepAliveComment]\n }));\n span?.addEvent(\"keepalive\");\n }, keepAliveInterval);\n }\n const value = await runInSpanContext(span, () => iterator.next());\n clearInterval(timeout);\n if (cancelled) {\n return;\n }\n const meta = getEventMeta(value.value);\n if (!value.done || value.value !== void 0 || meta !== void 0) {\n const event = value.done ? \"done\" : \"message\";\n controller.enqueue(encodeEventMessage({\n ...meta,\n event,\n data: stringifyJSON(value.value)\n }));\n span?.addEvent(event);\n }\n if (value.done) {\n controller.close();\n span?.end();\n }\n } catch (err) {\n clearInterval(timeout);\n if (cancelled) {\n return;\n }\n if (err instanceof ErrorEvent) {\n controller.enqueue(encodeEventMessage({\n ...getEventMeta(err),\n event: \"error\",\n data: stringifyJSON(err.data)\n }));\n span?.addEvent(\"error\");\n controller.close();\n } else {\n setSpanError(span, err);\n controller.error(err);\n }\n span?.end();\n }\n },\n async cancel() {\n try {\n cancelled = true;\n clearInterval(timeout);\n span?.addEvent(\"cancelled\");\n await runInSpanContext(span, () => iterator.return?.());\n } catch (e) {\n setSpanError(span, e);\n throw e;\n } finally {\n span?.end();\n }\n }\n }).pipeThrough(new TextEncoderStream());\n return stream;\n}\n\nfunction toStandardBody(re, options = {}) {\n return runWithSpan(\n { name: \"parse_standard_body\", signal: options.signal },\n async () => {\n const contentDisposition = re.headers.get(\"content-disposition\");\n if (typeof contentDisposition === \"string\") {\n const fileName = getFilenameFromContentDisposition(contentDisposition) ?? \"blob\";\n const blob2 = await re.blob();\n return new File([blob2], fileName, {\n type: blob2.type\n });\n }\n const contentType = re.headers.get(\"content-type\");\n if (!contentType || contentType.startsWith(\"application/json\")) {\n const text = await re.text();\n return parseEmptyableJSON(text);\n }\n if (contentType.startsWith(\"multipart/form-data\")) {\n return await re.formData();\n }\n if (contentType.startsWith(\"application/x-www-form-urlencoded\")) {\n const text = await re.text();\n return new URLSearchParams(text);\n }\n if (contentType.startsWith(\"text/event-stream\")) {\n return toEventIterator(re.body, options);\n }\n if (contentType.startsWith(\"text/plain\")) {\n return await re.text();\n }\n const blob = await re.blob();\n return new File([blob], \"blob\", {\n type: blob.type\n });\n }\n );\n}\nfunction toFetchBody(body, headers, options = {}) {\n if (body instanceof ReadableStream) {\n return body;\n }\n const currentContentDisposition = headers.get(\"content-disposition\");\n headers.delete(\"content-type\");\n headers.delete(\"content-disposition\");\n if (body === void 0) {\n return void 0;\n }\n if (body instanceof Blob) {\n headers.set(\"content-type\", body.type);\n headers.set(\"content-length\", body.size.toString());\n headers.set(\n \"content-disposition\",\n currentContentDisposition ?? generateContentDisposition(body instanceof File ? body.name : \"blob\")\n );\n return body;\n }\n if (body instanceof FormData) {\n return body;\n }\n if (body instanceof URLSearchParams) {\n return body;\n }\n if (isAsyncIteratorObject(body)) {\n headers.set(\"content-type\", \"text/event-stream\");\n return toEventStream(body, options);\n }\n headers.set(\"content-type\", \"application/json\");\n return stringifyJSON(body);\n}\n\nfunction toStandardHeaders(headers, standardHeaders = {}) {\n headers.forEach((value, key) => {\n if (Array.isArray(standardHeaders[key])) {\n standardHeaders[key].push(value);\n } else if (standardHeaders[key] !== void 0) {\n standardHeaders[key] = [standardHeaders[key], value];\n } else {\n standardHeaders[key] = value;\n }\n });\n return standardHeaders;\n}\nfunction toFetchHeaders(headers, fetchHeaders = new Headers()) {\n for (const [key, value] of Object.entries(headers)) {\n if (Array.isArray(value)) {\n for (const v of value) {\n fetchHeaders.append(key, v);\n }\n } else if (value !== void 0) {\n fetchHeaders.append(key, value);\n }\n }\n return fetchHeaders;\n}\n\nfunction toStandardLazyRequest(request) {\n return {\n url: new URL(request.url),\n signal: request.signal,\n method: request.method,\n body: once(() => toStandardBody(request, { signal: request.signal })),\n get headers() {\n const headers = toStandardHeaders(request.headers);\n Object.defineProperty(this, \"headers\", { value: headers, writable: true });\n return headers;\n },\n set headers(value) {\n Object.defineProperty(this, \"headers\", { value, writable: true });\n }\n };\n}\nfunction toFetchRequest(request, options = {}) {\n const headers = toFetchHeaders(request.headers);\n const body = toFetchBody(request.body, headers, options);\n return new Request(request.url, {\n signal: request.signal,\n method: request.method,\n headers,\n body\n });\n}\n\nfunction toFetchResponse(response, options = {}) {\n const headers = toFetchHeaders(response.headers);\n const body = toFetchBody(response.body, headers, options);\n return new Response(body, { headers, status: response.status });\n}\nfunction toStandardLazyResponse(response, options = {}) {\n return {\n body: once(() => toStandardBody(response, options)),\n status: response.status,\n get headers() {\n const headers = toStandardHeaders(response.headers);\n Object.defineProperty(this, \"headers\", { value: headers, writable: true });\n return headers;\n },\n set headers(value) {\n Object.defineProperty(this, \"headers\", { value, writable: true });\n }\n };\n}\n\nexport { toEventIterator, toEventStream, toFetchBody, toFetchHeaders, toFetchRequest, toFetchResponse, toStandardBody, toStandardHeaders, toStandardLazyRequest, toStandardLazyResponse };\n","import { toArray, runWithSpan, ORPC_NAME, isAsyncIteratorObject, asyncIteratorWithSpan, intercept, getGlobalOtelConfig, isObject, value, stringifyJSON } from '@orpc/shared';\nimport { mergeStandardHeaders, ErrorEvent } from '@orpc/standard-server';\nimport { C as COMMON_ORPC_ERROR_DEFS, d as isORPCErrorStatus, e as isORPCErrorJson, g as createORPCErrorFromJson, c as ORPCError, t as toORPCError } from './client.KWZYf6QD.mjs';\nimport { toStandardHeaders as toStandardHeaders$1 } from '@orpc/standard-server-fetch';\nimport { m as mapEventIterator } from './client.BLtwTQUg.mjs';\n\nclass CompositeStandardLinkPlugin {\n plugins;\n constructor(plugins = []) {\n this.plugins = [...plugins].sort((a, b) => (a.order ?? 0) - (b.order ?? 0));\n }\n init(options) {\n for (const plugin of this.plugins) {\n plugin.init?.(options);\n }\n }\n}\n\nclass StandardLink {\n constructor(codec, sender, options = {}) {\n this.codec = codec;\n this.sender = sender;\n const plugin = new CompositeStandardLinkPlugin(options.plugins);\n plugin.init(options);\n this.interceptors = toArray(options.interceptors);\n this.clientInterceptors = toArray(options.clientInterceptors);\n }\n interceptors;\n clientInterceptors;\n call(path, input, options) {\n return runWithSpan(\n { name: `${ORPC_NAME}.${path.join(\"/\")}`, signal: options.signal },\n (span) => {\n span?.setAttribute(\"rpc.system\", ORPC_NAME);\n span?.setAttribute(\"rpc.method\", path.join(\".\"));\n if (isAsyncIteratorObject(input)) {\n input = asyncIteratorWithSpan(\n { name: \"consume_event_iterator_input\", signal: options.signal },\n input\n );\n }\n return intercept(this.interceptors, { ...options, path, input }, async ({ path: path2, input: input2, ...options2 }) => {\n const otelConfig = getGlobalOtelConfig();\n let otelContext;\n const currentSpan = otelConfig?.trace.getActiveSpan() ?? span;\n if (currentSpan && otelConfig) {\n otelContext = otelConfig?.trace.setSpan(otelConfig.context.active(), currentSpan);\n }\n const request = await runWithSpan(\n { name: \"encode_request\", context: otelContext },\n () => this.codec.encode(path2, input2, options2)\n );\n const response = await intercept(\n this.clientInterceptors,\n { ...options2, input: input2, path: path2, request },\n ({ input: input3, path: path3, request: request2, ...options3 }) => {\n return runWithSpan(\n { name: \"send_request\", signal: options3.signal, context: otelContext },\n () => this.sender.call(request2, options3, path3, input3)\n );\n }\n );\n const output = await runWithSpan(\n { name: \"decode_response\", context: otelContext },\n () => this.codec.decode(response, options2, path2, input2)\n );\n if (isAsyncIteratorObject(output)) {\n return asyncIteratorWithSpan(\n { name: \"consume_event_iterator_output\", signal: options2.signal },\n output\n );\n }\n return output;\n });\n }\n );\n }\n}\n\nconst STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES = {\n BIGINT: 0,\n DATE: 1,\n NAN: 2,\n UNDEFINED: 3,\n URL: 4,\n REGEXP: 5,\n SET: 6,\n MAP: 7\n};\nclass StandardRPCJsonSerializer {\n customSerializers;\n constructor(options = {}) {\n this.customSerializers = options.customJsonSerializers ?? [];\n if (this.customSerializers.length !== new Set(this.customSerializers.map((custom) => custom.type)).size) {\n throw new Error(\"Custom serializer type must be unique.\");\n }\n }\n serialize(data, segments = [], meta = [], maps = [], blobs = []) {\n for (const custom of this.customSerializers) {\n if (custom.condition(data)) {\n const result = this.serialize(custom.serialize(data), segments, meta, maps, blobs);\n meta.push([custom.type, ...segments]);\n return result;\n }\n }\n if (data instanceof Blob) {\n maps.push(segments);\n blobs.push(data);\n return [data, meta, maps, blobs];\n }\n if (typeof data === \"bigint\") {\n meta.push([STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.BIGINT, ...segments]);\n return [data.toString(), meta, maps, blobs];\n }\n if (data instanceof Date) {\n meta.push([STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.DATE, ...segments]);\n if (Number.isNaN(data.getTime())) {\n return [null, meta, maps, blobs];\n }\n return [data.toISOString(), meta, maps, blobs];\n }\n if (Number.isNaN(data)) {\n meta.push([STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.NAN, ...segments]);\n return [null, meta, maps, blobs];\n }\n if (data instanceof URL) {\n meta.push([STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.URL, ...segments]);\n return [data.toString(), meta, maps, blobs];\n }\n if (data instanceof RegExp) {\n meta.push([STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.REGEXP, ...segments]);\n return [data.toString(), meta, maps, blobs];\n }\n if (data instanceof Set) {\n const result = this.serialize(Array.from(data), segments, meta, maps, blobs);\n meta.push([STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.SET, ...segments]);\n return result;\n }\n if (data instanceof Map) {\n const result = this.serialize(Array.from(data.entries()), segments, meta, maps, blobs);\n meta.push([STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.MAP, ...segments]);\n return result;\n }\n if (Array.isArray(data)) {\n const json = data.map((v, i) => {\n if (v === void 0) {\n meta.push([STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.UNDEFINED, ...segments, i]);\n return null;\n }\n return this.serialize(v, [...segments, i], meta, maps, blobs)[0];\n });\n return [json, meta, maps, blobs];\n }\n if (isObject(data)) {\n const json = {};\n for (const k in data) {\n if (k === \"toJSON\" && typeof data[k] === \"function\") {\n continue;\n }\n json[k] = this.serialize(data[k], [...segments, k], meta, maps, blobs)[0];\n }\n return [json, meta, maps, blobs];\n }\n return [data, meta, maps, blobs];\n }\n deserialize(json, meta, maps, getBlob) {\n const ref = { data: json };\n if (maps && getBlob) {\n maps.forEach((segments, i) => {\n let currentRef = ref;\n let preSegment = \"data\";\n segments.forEach((segment) => {\n currentRef = currentRef[preSegment];\n preSegment = segment;\n if (!Object.hasOwn(currentRef, preSegment)) {\n throw new Error(`Security error: accessing non-existent path during deserialization. Path segment: ${preSegment}`);\n }\n });\n currentRef[preSegment] = getBlob(i);\n });\n }\n for (const item of meta) {\n const type = item[0];\n let currentRef = ref;\n let preSegment = \"data\";\n for (let i = 1; i < item.length; i++) {\n currentRef = currentRef[preSegment];\n preSegment = item[i];\n if (!Object.hasOwn(currentRef, preSegment)) {\n throw new Error(`Security error: accessing non-existent path during deserialization. Path segment: ${preSegment}`);\n }\n }\n for (const custom of this.customSerializers) {\n if (custom.type === type) {\n currentRef[preSegment] = custom.deserialize(currentRef[preSegment]);\n break;\n }\n }\n switch (type) {\n case STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.BIGINT:\n currentRef[preSegment] = BigInt(currentRef[preSegment]);\n break;\n case STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.DATE:\n currentRef[preSegment] = new Date(currentRef[preSegment] ?? \"Invalid Date\");\n break;\n case STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.NAN:\n currentRef[preSegment] = Number.NaN;\n break;\n case STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.UNDEFINED:\n currentRef[preSegment] = void 0;\n break;\n case STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.URL:\n currentRef[preSegment] = new URL(currentRef[preSegment]);\n break;\n case STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.REGEXP: {\n const [, pattern, flags] = currentRef[preSegment].match(/^\\/(.*)\\/([a-z]*)$/);\n currentRef[preSegment] = new RegExp(pattern, flags);\n break;\n }\n case STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.SET:\n currentRef[preSegment] = new Set(currentRef[preSegment]);\n break;\n case STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES.MAP:\n currentRef[preSegment] = new Map(currentRef[preSegment]);\n break;\n }\n }\n return ref.data;\n }\n}\n\nfunction toHttpPath(path) {\n return `/${path.map(encodeURIComponent).join(\"/\")}`;\n}\nfunction toStandardHeaders(headers) {\n if (typeof headers.forEach === \"function\") {\n return toStandardHeaders$1(headers);\n }\n return headers;\n}\nfunction getMalformedResponseErrorCode(status) {\n return Object.entries(COMMON_ORPC_ERROR_DEFS).find(([, def]) => def.status === status)?.[0] ?? \"MALFORMED_ORPC_ERROR_RESPONSE\";\n}\n\nclass StandardRPCLinkCodec {\n constructor(serializer, options) {\n this.serializer = serializer;\n this.baseUrl = options.url;\n this.maxUrlLength = options.maxUrlLength ?? 2083;\n this.fallbackMethod = options.fallbackMethod ?? \"POST\";\n this.expectedMethod = options.method ?? this.fallbackMethod;\n this.headers = options.headers ?? {};\n }\n baseUrl;\n maxUrlLength;\n fallbackMethod;\n expectedMethod;\n headers;\n async encode(path, input, options) {\n let headers = toStandardHeaders(await value(this.headers, options, path, input));\n if (options.lastEventId !== void 0) {\n headers = mergeStandardHeaders(headers, { \"last-event-id\": options.lastEventId });\n }\n const expectedMethod = await value(this.expectedMethod, options, path, input);\n const baseUrl = await value(this.baseUrl, options, path, input);\n const url = new URL(baseUrl);\n url.pathname = `${url.pathname.replace(/\\/$/, \"\")}${toHttpPath(path)}`;\n const serialized = this.serializer.serialize(input);\n if (expectedMethod === \"GET\" && !(serialized instanceof FormData) && !isAsyncIteratorObject(serialized)) {\n const maxUrlLength = await value(this.maxUrlLength, options, path, input);\n const getUrl = new URL(url);\n getUrl.searchParams.append(\"data\", stringifyJSON(serialized));\n if (getUrl.toString().length <= maxUrlLength) {\n return {\n body: void 0,\n method: expectedMethod,\n headers,\n url: getUrl,\n signal: options.signal\n };\n }\n }\n return {\n url,\n method: expectedMethod === \"GET\" ? this.fallbackMethod : expectedMethod,\n headers,\n body: serialized,\n signal: options.signal\n };\n }\n async decode(response) {\n const isOk = !isORPCErrorStatus(response.status);\n const deserialized = await (async () => {\n let isBodyOk = false;\n try {\n const body = await response.body();\n isBodyOk = true;\n return this.serializer.deserialize(body);\n } catch (error) {\n if (!isBodyOk) {\n throw new Error(\"Cannot parse response body, please check the response body and content-type.\", {\n cause: error\n });\n }\n throw new Error(\"Invalid RPC response format.\", {\n cause: error\n });\n }\n })();\n if (!isOk) {\n if (isORPCErrorJson(deserialized)) {\n throw createORPCErrorFromJson(deserialized);\n }\n throw new ORPCError(getMalformedResponseErrorCode(response.status), {\n status: response.status,\n data: { ...response, body: deserialized }\n });\n }\n return deserialized;\n }\n}\n\nclass StandardRPCSerializer {\n constructor(jsonSerializer) {\n this.jsonSerializer = jsonSerializer;\n }\n serialize(data) {\n if (isAsyncIteratorObject(data)) {\n return mapEventIterator(data, {\n value: async (value) => this.#serialize(value, false),\n error: async (e) => {\n return new ErrorEvent({\n data: this.#serialize(toORPCError(e).toJSON(), false),\n cause: e\n });\n }\n });\n }\n return this.#serialize(data, true);\n }\n #serialize(data, enableFormData) {\n const [json, meta_, maps, blobs] = this.jsonSerializer.serialize(data);\n const meta = meta_.length === 0 ? void 0 : meta_;\n if (!enableFormData || blobs.length === 0) {\n return {\n json,\n meta\n };\n }\n const form = new FormData();\n form.set(\"data\", stringifyJSON({ json, meta, maps }));\n blobs.forEach((blob, i) => {\n form.set(i.toString(), blob);\n });\n return form;\n }\n deserialize(data) {\n if (isAsyncIteratorObject(data)) {\n return mapEventIterator(data, {\n value: async (value) => this.#deserialize(value),\n error: async (e) => {\n if (!(e instanceof ErrorEvent)) {\n return e;\n }\n const deserialized = this.#deserialize(e.data);\n if (isORPCErrorJson(deserialized)) {\n return createORPCErrorFromJson(deserialized, { cause: e });\n }\n return new ErrorEvent({\n data: deserialized,\n cause: e\n });\n }\n });\n }\n return this.#deserialize(data);\n }\n #deserialize(data) {\n if (data === void 0) {\n return void 0;\n }\n if (!(data instanceof FormData)) {\n return this.jsonSerializer.deserialize(data.json, data.meta ?? []);\n }\n const serialized = JSON.parse(data.get(\"data\"));\n return this.jsonSerializer.deserialize(\n serialized.json,\n serialized.meta ?? [],\n serialized.maps,\n (i) => data.get(i.toString())\n );\n }\n}\n\nclass StandardRPCLink extends StandardLink {\n constructor(linkClient, options) {\n const jsonSerializer = new StandardRPCJsonSerializer(options);\n const serializer = new StandardRPCSerializer(jsonSerializer);\n const linkCodec = new StandardRPCLinkCodec(serializer, options);\n super(linkCodec, linkClient, options);\n }\n}\n\nexport { CompositeStandardLinkPlugin as C, StandardLink as S, STANDARD_RPC_JSON_SERIALIZER_BUILT_IN_TYPES as a, StandardRPCJsonSerializer as b, StandardRPCLink as c, StandardRPCLinkCodec as d, StandardRPCSerializer as e, toStandardHeaders as f, getMalformedResponseErrorCode as g, toHttpPath as t };\n","import { toArray, intercept } from '@orpc/shared';\nimport { toFetchRequest, toStandardLazyResponse } from '@orpc/standard-server-fetch';\nimport { C as CompositeStandardLinkPlugin, c as StandardRPCLink } from '../../shared/client.DrB9nq_G.mjs';\nimport '@orpc/standard-server';\nimport '../../shared/client.KWZYf6QD.mjs';\nimport '../../shared/client.BLtwTQUg.mjs';\n\nclass CompositeLinkFetchPlugin extends CompositeStandardLinkPlugin {\n initRuntimeAdapter(options) {\n for (const plugin of this.plugins) {\n plugin.initRuntimeAdapter?.(options);\n }\n }\n}\n\nclass LinkFetchClient {\n fetch;\n toFetchRequestOptions;\n adapterInterceptors;\n constructor(options) {\n const plugin = new CompositeLinkFetchPlugin(options.plugins);\n plugin.initRuntimeAdapter(options);\n this.fetch = options.fetch ?? globalThis.fetch.bind(globalThis);\n this.toFetchRequestOptions = options;\n this.adapterInterceptors = toArray(options.adapterInterceptors);\n }\n async call(standardRequest, options, path, input) {\n const request = toFetchRequest(standardRequest, this.toFetchRequestOptions);\n const fetchResponse = await intercept(\n this.adapterInterceptors,\n { ...options, request, path, input, init: { redirect: \"manual\" } },\n ({ request: request2, path: path2, input: input2, init, ...options2 }) => this.fetch(request2, init, options2, path2, input2)\n );\n const lazyResponse = toStandardLazyResponse(fetchResponse, { signal: request.signal });\n return lazyResponse;\n }\n}\n\nclass RPCLink extends StandardRPCLink {\n constructor(options) {\n const linkClient = new LinkFetchClient(options);\n super(linkClient, options);\n }\n}\n\nexport { LinkFetchClient, RPCLink };\n","import { RPCLink } from \"@orpc/client/fetch\";\n\nexport type ORPCHttpClientOptions = {\n /** Base URL for the oRPC API (e.g., \"http://localhost:3001/api/v3\") */\n baseUrl: string;\n /** Optional function to get auth token for requests */\n getAuthToken?: () => string | Promise<string | undefined> | undefined;\n /** Optional custom headers or async function to get headers */\n headers?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);\n /** Optional custom fetch function for intercepting requests/responses */\n fetch?: typeof globalThis.fetch;\n /** Optional callback called with each response for handling Set-Cookie headers etc */\n onResponse?: (response: Response) => void | Promise<void>;\n};\n\nexport function createLink(options: ORPCHttpClientOptions) {\n return new RPCLink({\n url: options.baseUrl,\n headers: async () => {\n const baseHeaders: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n // Get custom headers (supports both static and async)\n const customHeaders = typeof options.headers === \"function\" ? await options.headers() : options.headers;\n\n if (customHeaders) {\n Object.assign(baseHeaders, customHeaders);\n }\n\n if (options.getAuthToken) {\n const token = await options.getAuthToken();\n if (token) {\n baseHeaders[\"Cookie\"] = `tourial-session=${token}`;\n }\n }\n\n return baseHeaders;\n },\n fetch:\n options.fetch || options.onResponse\n ? async (request, init) => {\n const fetchFn = options.fetch || globalThis.fetch;\n const response = await fetchFn(request, init);\n\n if (options.onResponse) {\n await options.onResponse(response);\n }\n\n return response;\n }\n : undefined,\n });\n}\n","import { createORPCClient } from \"@orpc/client\";\nimport type { RouterClient } from \"@orpc/server\";\nimport { createLink, type ORPCHttpClientOptions } from \"../shared/client\";\nimport type { LiveRouter } from \"./router\";\n\n/** Type-safe HTTP client for the live oRPC API */\nexport type LiveHttpClient = RouterClient<LiveRouter>;\n\n/**\n * Create an HTTP client for calling live oRPC API endpoints\n */\nexport function createLiveHttpClient(options: ORPCHttpClientOptions): LiveHttpClient {\n return createORPCClient<LiveHttpClient>(createLink(options));\n}\n","import { createLiveHttpClient, type LiveHttpClient } from \"@navless/orpc/live/client\";\n\n/**\n * Normalize a branded-host origin into the `/api/v3` base the live API is served\n * under. Accepts a bare origin (\"https://guide.acme.com\") or a URL that already\n * ends with `/api/v3`.\n */\nexport function toApiBaseUrl(baseUrl: string): string {\n const trimmed = baseUrl.replace(/\\/+$/, \"\");\n return trimmed.endsWith(\"/api/v3\") ? trimmed : `${trimmed}/api/v3`;\n}\n\n/**\n * Wrap a fetch implementation so every request carries the visitor cookies.\n * This is the load-bearing piece: the branded host is same-site with the\n * customer's page, so `credentials: \"include\"` lets the existing\n * `navless-live-*` cookies attach in every browser.\n */\nexport function withCredentials(fetchImpl: typeof globalThis.fetch): typeof globalThis.fetch {\n return (input, init) => fetchImpl(input, { ...init, credentials: \"include\" });\n}\n\n/** Build the typed live oRPC client, reusing @navless/orpc's client factory. */\nexport function createApiClient(apiBaseUrl: string, fetchImpl: typeof globalThis.fetch): LiveHttpClient {\n return createLiveHttpClient({ baseUrl: apiBaseUrl, fetch: withCredentials(fetchImpl) });\n}\n","const UTM_KEYS = [\"utm_source\", \"utm_medium\", \"utm_campaign\", \"utm_term\", \"utm_content\"] as const;\nconst INTEGRATION_COOKIE_KEYS = [\"hubspotutk\", \"_mkto_trk\"] as const;\n\n/** Pull UTM attribution params out of a `location.search` string. */\nexport function extractUTMParams(search: string): Record<string, string> {\n const params = new URLSearchParams(search);\n const result: Record<string, string> = {};\n for (const key of UTM_KEYS) {\n const value = params.get(key);\n if (value) result[key] = value;\n }\n return result;\n}\n\n/**\n * Pull first-party integration cookies (HubSpot, Marketo) out of a\n * `document.cookie` string so they can be forwarded for CRM stitching.\n */\nexport function extractIntegrationCookies(cookieString: string): Record<string, string> {\n const cookies: Record<string, string> = {};\n for (const key of INTEGRATION_COOKIE_KEYS) {\n const match = cookieString.match(new RegExp(`(?:^|;\\\\s*)${key}=([^;]*)`));\n if (match?.[1]) cookies[key] = decodeURIComponent(match[1]);\n }\n return cookies;\n}\n\n/** Read `document.cookie`, swallowing the SecurityError thrown in opaque origins. */\nexport function safeCookieString(): string {\n if (typeof document === \"undefined\") return \"\";\n try {\n return document.cookie;\n } catch {\n return \"\";\n }\n}\n","// This package is deliberately self-contained: it imports NO types from\n// @navless/types. That package is a barrel (`export *` over dozens of modules),\n// so importing any symbol drags the whole surface into the bundled .d.ts and the\n// dts bundler chokes on it. The wire-protocol enums below are stable contracts,\n// hand-mirrored here so the published package has zero @navless/* runtime deps\n// and a self-contained declaration file.\n\n/** AG-UI protocol frame types written by the guide SSE stream. */\nexport const SSEMessageType = {\n RunStarted: \"RUN_STARTED\",\n RunFinished: \"RUN_FINISHED\",\n RunError: \"RUN_ERROR\",\n TextMessageStart: \"TEXT_MESSAGE_START\",\n TextMessageContent: \"TEXT_MESSAGE_CONTENT\",\n TextMessageEnd: \"TEXT_MESSAGE_END\",\n Custom: \"CUSTOM\",\n} as const;\nexport type SSEMessageTypeName = (typeof SSEMessageType)[keyof typeof SSEMessageType];\n\n/** The `name` on `CUSTOM` guide events (skill payloads). */\nexport const GuideEvent = {\n SkillStart: \"skill_start\",\n SkillContent: \"skill_content\",\n SkillDocuments: \"skill_documents\",\n SkillRecommendations: \"skill_recommendations\",\n SkillCTAs: \"skill_ctas\",\n SkillDiagnoseHeader: \"skill_diagnose_header\",\n SkillDiagnoseQuestion: \"skill_diagnose_question\",\n SkillPlaylistItems: \"skill_playlist_items\",\n SkillPlaylistHeader: \"skill_playlist_header\",\n SkillPlaylistRationale: \"skill_playlist_rationale\",\n SkillHowToOutline: \"skill_howto_outline\",\n SkillHowToSteps: \"skill_howto_steps\",\n SkillBusinessCaseChooser: \"skill_businesscase_chooser\",\n SkillBusinessCaseDelta: \"skill_businesscase_delta\",\n SkillSolutionDesignHeader: \"skill_solutiondesign_header\",\n SkillSolutionDesignDiagram: \"skill_solutiondesign_diagram\",\n SkillEnd: \"skill_end\",\n SkillError: \"skill_error\",\n SkillGate: \"skill_gate\",\n InputSuggestions: \"input_suggestions\",\n} as const;\nexport type GuideEventName = (typeof GuideEvent)[keyof typeof GuideEvent];\n\n/** The guide skill types. `answer` is always on; the rest are enabled per-guide. */\nexport const SkillResponseType = {\n Answer: \"answer\",\n HowTo: \"howto\",\n Diagnose: \"diagnose\",\n Recommend: \"recommend\",\n Playlist: \"playlist\",\n BusinessCase: \"businesscase\",\n SolutionDesign: \"solutiondesign\",\n} as const;\nexport type SkillResponseTypeType = (typeof SkillResponseType)[keyof typeof SkillResponseType];\n\n/** Consent tiers. `essential` is always granted server-side. */\nexport const ConsentTier = {\n Essential: \"essential\",\n Functional: \"functional\",\n Analytical: \"analytical\",\n} as const;\nexport type ConsentTierName = (typeof ConsentTier)[keyof typeof ConsentTier];\n\n/** Analytics events fired by the SDK bootstrap. */\nexport const EmbedTrackingEvent = {\n EmbedLoaded: \"embed_loaded\",\n EmbedPageView: \"embed_page_view\",\n EmbedTriggerClicked: \"embed_trigger_clicked\",\n EmbedSideTabClicked: \"embed_side_tab_clicked\",\n EmbedSideTabDismissed: \"embed_side_tab_dismissed\",\n} as const;\nexport type EmbedTrackingEventName = (typeof EmbedTrackingEvent)[keyof typeof EmbedTrackingEvent];\n\n/**\n * The `eventType` passed to {@link GuideClient.track}. Any server-recognized\n * event string is accepted — use an {@link EmbedTrackingEvent} member for the\n * common cases.\n */\nexport type TrackEventType = string;\n\n/** Consent tiers a visitor can grant. `essential` is always granted server-side. */\nexport interface ConsentLevels {\n functional?: boolean;\n analytical?: boolean;\n}\n\nexport interface ConsentFlags {\n essential: boolean;\n functional: boolean;\n analytical: boolean;\n}\n\n/** Per-guide UI copy overrides. */\nexport interface GuideCustomization {\n welcomeMessage?: string;\n chatInputPlaceholders?: string[];\n suggestionsTitle?: string;\n helpTitle?: string;\n pickUpWhereYouLeftOff?: string;\n showGuideName?: boolean;\n sideTabButtonText?: string;\n pdfDisclaimerLine1?: string;\n pdfDisclaimerLine2?: string;\n pdfDownloadDescription?: string;\n}\n\n/** Lightweight knowledge-graph snapshot for page-load visualization. */\nexport interface GuideGraphSnapshot {\n nodes: Array<{ id: string; name: string; type: string; tier: number }>;\n edges: Array<{ from: string; to: string; relationship: string; strength: number }>;\n}\n\n/**\n * Resolved guide metadata returned by `guides.resolve`. `theme` / `skillIconStyle`\n * are left as `unknown` in v1 — read them defensively or narrow as needed.\n */\nexport interface ResolvedGuide {\n id: string;\n name: string;\n slug: string;\n brandKitId: string | null;\n magicLinkFormId: string | null;\n accountId: string;\n companyName: string;\n gdprEnabled: boolean;\n advancedSettings: { gatePdfDownload: boolean };\n theme: unknown;\n skillIconStyle: unknown;\n faviconUrl: string | null;\n logoUrl: string | null;\n heroImageUrl: string | null;\n customization: GuideCustomization | null;\n graphSnapshot: GuideGraphSnapshot | null;\n}\n\n/** A conversation record. */\nexport interface Conversation {\n id: string;\n accountId: string;\n guideId: string;\n visitorId: string;\n sessionId: string;\n title: string | null;\n createdAt: Date;\n deletedAt: Date | null;\n}\n\n/** A persisted conversation message. */\nexport interface ConversationMessage {\n id: string;\n accountId: string;\n conversationId: string;\n role: \"human\" | \"assistant\";\n content: string | null;\n isSynthetic: boolean;\n createdAt: Date;\n deletedAt: Date | null;\n}\n\n/** A conversation plus a page of its messages. */\nexport interface ConversationWithMessages {\n conversation: Conversation;\n messages: ConversationMessage[];\n}\n\n/** A persisted skill deliverable. `data` shape varies by `type`. */\nexport interface SkillInstance {\n id: string;\n skillOutputId: string;\n accountId: string;\n conversationId: string;\n type: SkillResponseTypeType;\n visitorId: string;\n sessionId: string;\n title: string | null;\n data: Record<string, unknown>;\n surfacedCta: unknown;\n sharedAt: Date | null;\n createdAt: Date;\n updatedAt: Date;\n deletedAt: Date | null;\n}\n\n/** A skill instance as returned in history lists (no `data`/`surfacedCta`). */\nexport interface SkillHistoryInstance {\n id: string;\n skillOutputId: string;\n accountId: string;\n conversationId: string;\n type: SkillResponseTypeType;\n visitorId: string;\n sessionId: string;\n title: string | null;\n sharedAt: Date | null;\n createdAt: Date;\n updatedAt: Date;\n deletedAt: Date | null;\n stepsCompleted: number | null;\n totalSteps: number | null;\n}\n\n/** Skill history grouped by conversation. */\nexport interface SkillHistoryGroup {\n conversationId: string;\n conversationTitle: string | null;\n latestActivityAt: Date;\n instances: SkillHistoryInstance[];\n}\n\nexport interface UpdateSkillInstanceResult {\n id: string;\n data: Record<string, unknown>;\n updatedAt: Date;\n}\n\nexport interface SelectDraftResult {\n skillInstanceId: string | null;\n}\n\nexport interface MarkSharedResult {\n sharedAt: Date;\n}\n\nexport interface ImportSharedResult {\n skillInstanceId: string;\n type: SkillResponseTypeType;\n conversationId: string;\n}\n\n/** The current visitor's tracking + consent + email status. */\nexport interface VisitorStatus {\n visitorId: string;\n isTracked: boolean;\n consent: { functional: boolean; analytical: boolean };\n email: string | null;\n verified: boolean;\n}\n\n/** Result of an email-gate submission. */\nexport interface SubmitGateResult {\n success: boolean;\n needsVerification: boolean;\n}\n\n/** Optional lead-capture fields beyond the ones the SDK fills automatically. */\nexport interface SubmitGateOptions {\n redirectUrl?: string;\n skill?: string;\n prompt?: string;\n skillInstanceId?: string;\n hostUrl?: string;\n requireVerification?: boolean;\n downloadIntent?: boolean;\n shareIntent?: boolean;\n}\n\nexport interface InitGuideConfig {\n /**\n * Branded host origin the SDK talks to, e.g. \"https://guide.acme.com\". Must be\n * on the customer's own root domain so the visitor cookies stay same-site.\n * `/api/v3` is appended automatically.\n */\n baseUrl: string;\n /** Guide slug to resolve (e.g. \"default\"). */\n slug: string;\n /**\n * Host domain used for account resolution + attribution. Defaults to\n * `window.location.hostname`. Required when running without a browser window.\n */\n domain?: string;\n /**\n * Consent handling on init:\n * - `\"auto\"` (default): grant all tiers when the guide has GDPR disabled; wait\n * for an explicit `setConsent()` when it is enabled.\n * - explicit levels: submit these immediately.\n * - `false`: submit nothing; call `setConsent()` yourself.\n */\n consent?: \"auto\" | ConsentLevels | false;\n /** Fire an initial `embed_loaded` + page-view event on init. Default `true`. */\n trackLoad?: boolean;\n /**\n * Custom fetch implementation (SSR/testing). Defaults to `globalThis.fetch`.\n * `credentials: \"include\"` is always applied so visitor cookies ride along.\n */\n fetch?: typeof globalThis.fetch;\n}\n\n/** A message in the SDK's in-memory conversation history. */\nexport interface ChatMessage {\n id: string;\n role: \"user\" | \"assistant\";\n content: string;\n}\n\nexport interface AskOptions {\n /** Force a specific skill, bypassing server-side LLM routing. */\n forcedSkill?: SkillResponseTypeType;\n /** Abort the in-flight stream. */\n signal?: AbortSignal;\n}\n\n/**\n * A single event yielded by {@link GuideClient.ask}. The common case is `text`\n * (the streamed chat reply); `skill` carries every structured skill payload,\n * discriminated by its {@link GuideEventName} `name`.\n */\nexport type GuideStreamEvent =\n | { type: \"run-started\"; runId: string }\n | { type: \"message-start\"; messageId: string; role: string }\n | { type: \"text\"; messageId: string; delta: string }\n | { type: \"message-end\"; messageId: string }\n | { type: \"skill\"; name: GuideEventName; value: Record<string, unknown> }\n | { type: \"gate\"; skill: SkillResponseTypeType; prompt?: string; skillInstanceId?: string }\n | { type: \"error\"; message: string; code?: string }\n | { type: \"run-finished\"; finishReason?: string };\n","import { GuideEvent, SSEMessageType } from \"./types\";\nimport type { ChatMessage, GuideEventName, GuideStreamEvent, SkillResponseTypeType } from \"./types\";\n\nexport interface StreamConversationParams {\n apiBaseUrl: string;\n guideId: string;\n messages: ChatMessage[];\n forcedSkill?: SkillResponseTypeType;\n fetchImpl: typeof globalThis.fetch;\n signal?: AbortSignal;\n}\n\n/** Raw SSE frame as written by the API's `toSSE` adapter. */\ninterface SSEFrame {\n type: string;\n name?: string;\n value?: Record<string, unknown>;\n delta?: string;\n messageId?: string;\n role?: string;\n runId?: string;\n finishReason?: string;\n error?: { message: string; code?: string };\n}\n\nconst DATA_PREFIX = \"data:\";\nconst DONE_SENTINEL = \"[DONE]\";\n\n/**\n * Stream a guide chat turn. POSTs the conversation to the SSE route\n * (`/api/v3/guide/conversation`) and yields normalized {@link GuideStreamEvent}s\n * until the server writes `data: [DONE]`. This is the one endpoint that is not\n * part of the typed oRPC router, so it is spoken by hand here.\n */\nexport async function* streamConversation(params: StreamConversationParams): AsyncGenerator<GuideStreamEvent> {\n const { apiBaseUrl, guideId, messages, forcedSkill, fetchImpl, signal } = params;\n\n const body: Record<string, unknown> = {\n guideId,\n messages: messages.map((m) => ({ role: m.role, content: m.content })),\n };\n if (forcedSkill) body.forcedSkill = forcedSkill;\n\n const response = await fetchImpl(`${apiBaseUrl}/guide/conversation`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify(body),\n signal,\n });\n\n if (!response.ok || !response.body) {\n throw new Error(`[brand_brain] Conversation request failed with status ${response.status}`);\n }\n\n const reader = response.body.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n\n try {\n for (;;) {\n const { done, value } = await reader.read();\n if (done) break;\n buffer += decoder.decode(value, { stream: true });\n\n let separatorIndex = buffer.indexOf(\"\\n\\n\");\n while (separatorIndex !== -1) {\n const rawEvent = buffer.slice(0, separatorIndex);\n buffer = buffer.slice(separatorIndex + 2);\n separatorIndex = buffer.indexOf(\"\\n\\n\");\n\n const dataLine = rawEvent.split(\"\\n\").find((line) => line.startsWith(DATA_PREFIX));\n if (!dataLine) continue;\n\n const data = dataLine.slice(DATA_PREFIX.length).trim();\n if (data === DONE_SENTINEL) return;\n\n const mapped = mapFrame(JSON.parse(data) as SSEFrame);\n if (mapped) yield mapped;\n }\n }\n } finally {\n reader.releaseLock();\n }\n}\n\nfunction mapFrame(frame: SSEFrame): GuideStreamEvent | null {\n switch (frame.type) {\n case SSEMessageType.RunStarted:\n return { type: \"run-started\", runId: frame.runId ?? \"\" };\n case SSEMessageType.RunFinished:\n return { type: \"run-finished\", finishReason: frame.finishReason };\n case SSEMessageType.RunError:\n return { type: \"error\", message: frame.error?.message ?? \"Unknown error\", code: frame.error?.code };\n case SSEMessageType.TextMessageStart:\n return { type: \"message-start\", messageId: frame.messageId ?? \"\", role: frame.role ?? \"assistant\" };\n case SSEMessageType.TextMessageContent:\n return { type: \"text\", messageId: frame.messageId ?? \"\", delta: frame.delta ?? \"\" };\n case SSEMessageType.TextMessageEnd:\n return { type: \"message-end\", messageId: frame.messageId ?? \"\" };\n case SSEMessageType.Custom:\n return mapCustomFrame(frame);\n default:\n return null;\n }\n}\n\nfunction mapCustomFrame(frame: SSEFrame): GuideStreamEvent | null {\n if (!frame.name) return null;\n const value = frame.value ?? {};\n\n // Wire-boundary reads: `value` is untyped JSON from the SSE stream, so the\n // fields below are asserted against the shapes the API's toSSE adapter writes.\n if (frame.name === GuideEvent.SkillGate) {\n return {\n type: \"gate\",\n skill: value.skill as SkillResponseTypeType,\n prompt: value.prompt as string | undefined,\n skillInstanceId: value.skillInstanceId as string | undefined,\n };\n }\n if (frame.name === GuideEvent.SkillError) {\n return {\n type: \"error\",\n message: (value.message as string | undefined) ?? \"Skill error\",\n code: value.errorType as string | undefined,\n };\n }\n return { type: \"skill\", name: frame.name as GuideEventName, value };\n}\n","import type { LiveHttpClient } from \"@navless/orpc/live/client\";\nimport { createApiClient, toApiBaseUrl } from \"./api\";\nimport { extractIntegrationCookies, extractUTMParams, safeCookieString } from \"./analytics\";\nimport { streamConversation } from \"./chat-stream\";\nimport { EmbedTrackingEvent } from \"./types\";\nimport type {\n AskOptions,\n ChatMessage,\n ConsentLevels,\n Conversation,\n ConversationWithMessages,\n GuideStreamEvent,\n ImportSharedResult,\n InitGuideConfig,\n MarkSharedResult,\n ResolvedGuide,\n SelectDraftResult,\n SkillHistoryGroup,\n SkillInstance,\n SubmitGateOptions,\n SubmitGateResult,\n TrackEventType,\n UpdateSkillInstanceResult,\n VisitorStatus,\n} from \"./types\";\n\n// Explicit shapes for the grouped API namespaces, annotated with locally-authored\n// types rather than the deep @orpc/client-derived client types — so the published\n// .d.ts stays self-contained and never inlines an external type across chunks.\ninterface ConversationsApi {\n getOrCreate(): Promise<Conversation>;\n list(): Promise<Conversation[]>;\n get(conversationId: string, options?: { cursor?: string; limit?: number }): Promise<ConversationWithMessages>;\n delete(conversationId: string): Promise<Conversation>;\n}\n\ninterface SkillsApi {\n listHistory(): Promise<SkillHistoryGroup[]>;\n get(skillInstanceId: string): Promise<SkillInstance>;\n update(skillInstanceId: string, data: Record<string, unknown>): Promise<UpdateSkillInstanceResult>;\n selectDraft(draftId: string): Promise<SelectDraftResult>;\n markShared(skillInstanceId: string): Promise<MarkSharedResult>;\n importShared(sourceSkillInstanceId: string): Promise<ImportSharedResult>;\n}\n\nfunction resolveDomain(config: InitGuideConfig): string {\n if (config.domain) return config.domain;\n if (typeof window !== \"undefined\") return window.location.hostname;\n throw new Error(\"[brand_brain] `domain` is required when running without a browser `window`.\");\n}\n\ninterface GuideClientParams {\n guide: ResolvedGuide;\n apiBaseUrl: string;\n domain: string;\n fetchImpl: typeof globalThis.fetch;\n}\n\n/**\n * The client returned by {@link initGuide}. Holds the resolved guide, the\n * credentialed live API client, and the in-memory conversation history. Every\n * method reuses an existing public endpoint — the SDK adds no server surface.\n */\nexport class GuideClient {\n /** Resolved guide metadata (ids, theme, customization). */\n readonly guide: ResolvedGuide;\n\n private readonly apiBaseUrl: string;\n private readonly domain: string;\n private readonly fetchImpl: typeof globalThis.fetch;\n // ECMAScript-private so the heavy LiveHttpClient type never reaches the .d.ts.\n #api: LiveHttpClient;\n private readonly history: ChatMessage[] = [];\n\n private constructor(params: GuideClientParams) {\n this.guide = params.guide;\n this.apiBaseUrl = params.apiBaseUrl;\n this.domain = params.domain;\n this.fetchImpl = params.fetchImpl;\n this.#api = createApiClient(this.apiBaseUrl, this.fetchImpl);\n }\n\n static async init(config: InitGuideConfig): Promise<GuideClient> {\n const fetchImpl = config.fetch ?? globalThis.fetch.bind(globalThis);\n const apiBaseUrl = toApiBaseUrl(config.baseUrl);\n const domain = resolveDomain(config);\n\n // First credentialed call — resolves the guide AND mints the visitor +\n // session cookies via the live router middleware.\n const api = createApiClient(apiBaseUrl, fetchImpl);\n const guide = await api.guides.resolve({ domain, slug: config.slug });\n const client = new GuideClient({ guide, apiBaseUrl, domain, fetchImpl });\n\n await client.applyInitialConsent(config.consent ?? \"auto\", guide.gdprEnabled);\n if (config.trackLoad ?? true) client.trackLoad();\n\n return client;\n }\n\n /** The account this guide belongs to (used implicitly by history calls). */\n get accountId(): string {\n return this.guide.accountId;\n }\n\n /** The in-memory conversation history accumulated by {@link ask}. */\n get messages(): readonly ChatMessage[] {\n return this.history;\n }\n\n /**\n * Send a message and stream the reply. Yields text deltas for the chat bubble\n * plus every structured skill event; the full 7-skill surface flows through\n * one stream. The user + assistant turns are appended to {@link messages}.\n */\n async *ask(message: string, options: AskOptions = {}): AsyncGenerator<GuideStreamEvent> {\n this.history.push({ id: crypto.randomUUID(), role: \"user\", content: message });\n\n let assistant: ChatMessage | null = null;\n for await (const event of streamConversation({\n apiBaseUrl: this.apiBaseUrl,\n guideId: this.guide.id,\n messages: this.history,\n forcedSkill: options.forcedSkill,\n fetchImpl: this.fetchImpl,\n signal: options.signal,\n })) {\n if (event.type === \"message-start\") {\n assistant = { id: event.messageId || crypto.randomUUID(), role: \"assistant\", content: \"\" };\n this.history.push(assistant);\n } else if (event.type === \"text\" && assistant) {\n assistant.content += event.delta;\n }\n yield event;\n }\n }\n\n /** Clear the in-memory conversation history (server-side history is unaffected). */\n reset(): void {\n this.history.length = 0;\n }\n\n /** Grant consent tiers. `essential` is always forced true server-side. */\n async setConsent(levels: ConsentLevels): Promise<void> {\n await this.#api.visitors.setConsent({ domain: this.domain, consent: levels });\n }\n\n /** Read the current visitor's tracking + consent + email status. */\n getStatus(): Promise<VisitorStatus> {\n return this.#api.visitors.getVisitorStatus();\n }\n\n /** Capture a lead email (sends a magic link when verification is required). */\n submitGate(email: string, options: SubmitGateOptions = {}): Promise<SubmitGateResult> {\n return this.#api.visitors.submitGate({ email, domain: this.domain, guideId: this.guide.id, ...options });\n }\n\n /**\n * Fire an analytics event. Fire-and-forget — never throws into the host page.\n * Uses a raw request (the same shape the embed script posts) so it stays\n * decoupled from the typed client's event enum.\n */\n track(eventType: TrackEventType, properties?: Record<string, unknown>): void {\n void this.fetchImpl(`${this.apiBaseUrl}/events/track`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n credentials: \"include\",\n body: JSON.stringify({ json: { domain: this.domain, guideId: this.guide.id, eventType, properties: properties ?? {} } }),\n }).catch(() => {\n // Best-effort — analytics must not break the host page.\n });\n }\n\n /** Fire the initial `embed_loaded` (with attribution) + first page view. */\n trackLoad(): void {\n const search = typeof window !== \"undefined\" ? window.location.search : \"\";\n const parentUrl = typeof window !== \"undefined\" ? window.location.href : undefined;\n const referrer = typeof document !== \"undefined\" ? document.referrer : undefined;\n this.track(EmbedTrackingEvent.EmbedLoaded, {\n referrer,\n parentUrl,\n utmParams: extractUTMParams(search),\n integrationCookies: extractIntegrationCookies(safeCookieString()),\n });\n this.trackPageView();\n }\n\n /** Record a page view (call on client-side route changes in an SPA). */\n trackPageView(url?: string): void {\n const pageUrl = url ?? (typeof window !== \"undefined\" ? window.location.href : undefined);\n this.track(EmbedTrackingEvent.EmbedPageView, { pageUrl });\n }\n\n /** End the current visit (best to call on `pagehide`). */\n async endSession(): Promise<void> {\n await this.#api.sessions.endSession();\n }\n\n /** Conversation history CRUD, scoped to this guide + account. */\n readonly conversations: ConversationsApi = {\n getOrCreate: () => this.#api.conversations.getOrCreate({ guideId: this.guide.id, accountId: this.guide.accountId }),\n list: () => this.#api.conversations.list({ guideId: this.guide.id, accountId: this.guide.accountId }),\n get: (conversationId: string, options?: { cursor?: string; limit?: number }) =>\n this.#api.conversations.get({ conversationId, accountId: this.guide.accountId, ...options }),\n delete: (conversationId: string) => this.#api.conversations.delete({ conversationId, accountId: this.guide.accountId }),\n };\n\n /** Persisted skill deliverables (how-to progress, diagnose answers, etc.). */\n readonly skills: SkillsApi = {\n listHistory: () => this.#api.skillInstances.listHistory({ accountId: this.guide.accountId, guideId: this.guide.id }),\n get: (skillInstanceId: string) => this.#api.skillInstances.get({ skillInstanceId }),\n update: (skillInstanceId: string, data: Record<string, unknown>) =>\n this.#api.skillInstances.update({ skillInstanceId, data }),\n selectDraft: (draftId: string) => this.#api.skillInstances.selectDraft({ draftId }),\n markShared: (skillInstanceId: string) => this.#api.skillInstances.markShared({ skillInstanceId }),\n importShared: (sourceSkillInstanceId: string) =>\n this.#api.skillInstances.importShared({ sourceSkillInstanceId, accountId: this.guide.accountId }),\n };\n\n private async applyInitialConsent(consent: \"auto\" | ConsentLevels | false, gdprEnabled: boolean): Promise<void> {\n if (consent === false) return;\n try {\n if (consent === \"auto\") {\n // Non-GDPR guides auto-grant everything (mirrors the live app). GDPR\n // guides wait for an explicit setConsent() from the host.\n if (!gdprEnabled) await this.setConsent({ functional: true, analytical: true });\n return;\n }\n await this.setConsent(consent);\n } catch {\n // Best-effort at init — the host can retry via setConsent() and inspect\n // getStatus(). Don't fail init on a consent hiccup.\n }\n }\n}\n\n/** Bootstrap a guide session and return a ready-to-use {@link GuideClient}. */\nexport async function initGuide(config: InitGuideConfig): Promise<GuideClient> {\n return GuideClient.init(config);\n}\n","\"use client\";\n\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport { initGuide, type GuideClient } from \"../GuideClient\";\nimport type { AskOptions, ChatMessage, InitGuideConfig, ResolvedGuide } from \"../types\";\n\nexport interface UseGuideResult {\n /** The client once bootstrapped, else `null`. */\n client: GuideClient | null;\n /** Resolved guide metadata once ready, else `null`. */\n guide: ResolvedGuide | null;\n /** Conversation history, kept in sync with the client. */\n messages: ChatMessage[];\n /** `true` once the client has finished initializing. */\n isReady: boolean;\n /** `true` while a reply is streaming. */\n isStreaming: boolean;\n /** Init or stream error, else `null`. */\n error: Error | null;\n /** Send a message and stream the reply into `messages`. */\n ask: (message: string, options?: AskOptions) => Promise<void>;\n /** Clear the in-memory conversation. */\n reset: () => void;\n}\n\n/**\n * React binding over {@link initGuide}. Bootstraps once per `baseUrl`+`slug`,\n * mirrors the streamed reply into state, and ends the session on unmount —\n * encapsulating the streaming/cleanup patterns so generated UIs stay correct.\n */\nexport function useGuide(config: InitGuideConfig): UseGuideResult {\n const [client, setClient] = useState<GuideClient | null>(null);\n const [messages, setMessages] = useState<ChatMessage[]>([]);\n const [isStreaming, setIsStreaming] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n\n const { baseUrl, slug } = config;\n const configRef = useRef(config);\n configRef.current = config;\n\n useEffect(() => {\n let active = true;\n let created: GuideClient | null = null;\n\n void initGuide(configRef.current)\n .then((instance) => {\n if (!active) {\n void instance.endSession();\n return;\n }\n created = instance;\n setClient(instance);\n setError(null);\n })\n .catch((err: unknown) => {\n if (active) setError(err instanceof Error ? err : new Error(String(err)));\n });\n\n return () => {\n active = false;\n void created?.endSession();\n };\n }, [baseUrl, slug]);\n\n const ask = useCallback(\n async (message: string, options?: AskOptions) => {\n if (!client) return;\n setIsStreaming(true);\n setError(null);\n try {\n for await (const event of client.ask(message, options)) {\n if (event.type === \"text\" || event.type === \"message-start\") {\n setMessages([...client.messages]);\n }\n }\n setMessages([...client.messages]);\n } catch (err: unknown) {\n setError(err instanceof Error ? err : new Error(String(err)));\n } finally {\n setIsStreaming(false);\n }\n },\n [client],\n );\n\n const reset = useCallback(() => {\n client?.reset();\n setMessages([]);\n }, [client]);\n\n return {\n client,\n guide: client?.guide ?? null,\n messages,\n isReady: client !== null,\n isStreaming,\n error,\n ask,\n reset,\n };\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7],"mappings":";;AAEA,SAAS,4BAA4B,MAAM;AACzC,QAAO,KAAK,MAAM,EAAE;;AAGtB,SAAS,QAAQ,OAAO;AACtB,QAAO,MAAM,QAAQ,MAAM,GAAG,QAAQ,UAAU,KAAK,KAAK,UAAU,OAAO,EAAE,GAAG,CAAC,MAAM;;AAczF,MAAM,YAAY;AAClB,MAAM,2BAA2B;AACjC,MAAM,8BAA8B;AAEpC,IAAM,aAAN,cAAyB,MAAM;CAC7B,YAAY,GAAG,MAAM;AACnB,QAAM,GAAG,KAAK;AACd,OAAK,OAAO;;;AAIhB,SAAS,KAAK,IAAI;CAChB,IAAI;AACJ,cAAa;AACX,MAAI,OACF,QAAO,OAAO;EAEhB,MAAM,SAAS,IAAI;AACnB,WAAS,EAAE,QAAQ;AACnB,SAAO;;;AAGX,SAAS,WAAW,IAAI;CACtB,IAAI,uBAAuB,QAAQ,SAAS;AAC5C,SAAQ,GAAG,SAAS;AAClB,SAAO,uBAAuB,qBAAqB,YAAY,GAC7D,CAAC,WAAW;AACZ,UAAO,GAAG,GAAG,KAAK;IAClB;;;AAWN,MAAM,oBAAoB;AAC1B,MAAM,yBAAyB,KAAK,yBAAyB,GAAG,4BAA4B;AAI5F,SAAS,sBAAsB;AAC7B,QAAO,WAAW;;AAEpB,SAAS,UAAU,MAAM,UAAU,EAAE,EAAE,SAAS;AAE9C,SADe,qBAAqB,EAAE,SACvB,UAAU,MAAM,SAAS,QAAQ;;AAElD,SAAS,aAAa,MAAM,OAAO,UAAU,EAAE,EAAE;AAC/C,KAAI,CAAC,KACH;CAEF,MAAM,YAAY,gBAAgB,MAAM;AACxC,MAAK,gBAAgB,UAAU;AAC/B,KAAI,CAAC,QAAQ,QAAQ,WAAW,QAAQ,OAAO,WAAW,MACxD,MAAK,UAAU;EACb,MAAM;EACN,SAAS,UAAU;EACpB,CAAC;;AASN,SAAS,gBAAgB,OAAO;AAC9B,KAAI,iBAAiB,OAAO;EAC1B,MAAM,YAAY;GAChB,SAAS,MAAM;GACf,MAAM,MAAM;GACZ,OAAO,MAAM;GACd;AACD,MAAI,UAAU,UAAU,OAAO,MAAM,SAAS,YAAY,OAAO,MAAM,SAAS,UAC9E,WAAU,OAAO,MAAM;AAEzB,SAAO;;AAET,QAAO,EAAE,SAAS,OAAO,MAAM,EAAE;;AAoBnC,eAAe,YAAY,EAAE,MAAM,SAAS,GAAG,WAAW,IAAI;CAC5D,MAAM,SAAS,qBAAqB,EAAE;AACtC,KAAI,CAAC,OACH,QAAO,IAAI;CAEb,MAAM,WAAW,OAAO,SAAS;AAC/B,MAAI;AACF,UAAO,MAAM,GAAG,KAAK;WACd,GAAG;AACV,gBAAa,MAAM,GAAG,QAAQ;AAC9B,SAAM;YACE;AACR,QAAK,KAAK;;;AAGd,KAAI,QACF,QAAO,OAAO,gBAAgB,MAAM,SAAS,SAAS,SAAS;KAE/D,QAAO,OAAO,gBAAgB,MAAM,SAAS,SAAS;;AAG1D,eAAe,iBAAiB,MAAM,IAAI;CACxC,MAAM,aAAa,qBAAqB;AACxC,KAAI,CAAC,QAAQ,CAAC,WACZ,QAAO,IAAI;CAEb,MAAM,MAAM,WAAW,MAAM,QAAQ,WAAW,QAAQ,QAAQ,EAAE,KAAK;AACvE,QAAO,WAAW,QAAQ,KAAK,KAAK,GAAG;;AAmFzC,SAAS,sBAAsB,OAAO;AACpC,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;AAET,QAAO,UAAU,SAAS,OAAO,MAAM,SAAS,cAAc,OAAO,iBAAiB,SAAS,OAAO,MAAM,OAAO,mBAAmB;;AAGxI,MAAM,qBAAqB,OAAO,gBADC,OAAO,IAAI,eAAe;AAE7D,IAAM,qBAAN,MAAyB;CACvB,UAAU;CACV,qBAAqB;CACrB;CACA;CACA,YAAY,MAAM,SAAS;AACzB,QAAA,UAAgB;AAChB,QAAA,OAAa,WAAW,YAAY;AAClC,OAAI,MAAA,OACF,QAAO;IAAE,MAAM;IAAM,OAAO,KAAK;IAAG;AAEtC,OAAI;IACF,MAAM,SAAS,MAAM,MAAM;AAC3B,QAAI,OAAO,KACT,OAAA,SAAe;AAEjB,WAAO;YACA,KAAK;AACZ,UAAA,SAAe;AACf,UAAM;aACE;AACR,QAAI,MAAA,UAAgB,CAAC,MAAA,mBAAyB;AAC5C,WAAA,oBAA0B;AAC1B,WAAM,MAAA,QAAc,OAAO;;;IAG/B;;CAEJ,OAAO;AACL,SAAO,MAAA,MAAY;;CAErB,MAAM,OAAO,OAAO;AAClB,QAAA,SAAe;AACf,MAAI,CAAC,MAAA,mBAAyB;AAC5B,SAAA,oBAA0B;AAC1B,SAAM,MAAA,QAAc,SAAS;;AAE/B,SAAO;GAAE,MAAM;GAAM;GAAO;;CAE9B,MAAM,MAAM,KAAK;AACf,QAAA,SAAe;AACf,MAAI,CAAC,MAAA,mBAAyB;AAC5B,SAAA,oBAA0B;AAC1B,SAAM,MAAA,QAAc,QAAQ;;AAE9B,QAAM;;;;;CAKR,OAAO,sBAAsB;AAC3B,QAAA,SAAe;AACf,MAAI,CAAC,MAAA,mBAAyB;AAC5B,SAAA,oBAA0B;AAC1B,SAAM,MAAA,QAAc,UAAU;;;CAGlC,CAAC,OAAO,iBAAiB;AACvB,SAAO;;;AAoDX,SAAS,sBAAsB,EAAE,MAAM,GAAG,WAAW,UAAU;CAC7D,IAAI;AACJ,QAAO,IAAI,mBACT,YAAY;AACV,WAAS,UAAU,KAAK;AACxB,MAAI;GACF,MAAM,SAAS,MAAM,iBAAiB,YAAY,SAAS,MAAM,CAAC;AAClE,SAAM,SAAS,OAAO,OAAO,cAAc,UAAU;AACrD,UAAO;WACA,KAAK;AACZ,gBAAa,MAAM,KAAK,QAAQ;AAChC,SAAM;;IAGV,OAAO,WAAW;AAChB,MAAI;AACF,OAAI,WAAW,OACb,OAAM,iBAAiB,YAAY,SAAS,UAAU,CAAC;WAElD,KAAK;AACZ,gBAAa,MAAM,KAAK,QAAQ;AAChC,SAAM;YACE;AACR,SAAM,KAAK;;GAGhB;;AAsIH,SAAS,UAAU,cAAc,SAAS,MAAM;CAC9C,MAAM,QAAQ,UAAU,UAAU;EAChC,MAAM,cAAc,aAAa;AACjC,MAAI,CAAC,YACH,QAAO,KAAK,SAAS;AAEvB,SAAO,YAAY;GACjB,GAAG;GACH,OAAO,aAAa,aAAa,KAAK,YAAY,QAAQ,EAAE;GAC7D,CAAC;;AAEJ,QAAO,KAAK,SAAS,EAAE;;AAGzB,SAAS,mBAAmB,MAAM;AAChC,KAAI,CAAC,KACH;AAEF,QAAO,KAAK,MAAM,KAAK;;AAEzB,SAAS,cAAc,OAAO;AAC5B,QAAO,KAAK,UAAU,MAAM;;AAkB9B,SAAS,eAAe,OAAO;AAC7B,KAAI,CAAC,mBAAmB,MAAM,CAC5B,QAAO;AAET,QAAO,OAAO,eAAe,MAAM,EAAE;;AAEvC,SAAS,SAAS,OAAO;AACvB,KAAI,CAAC,SAAS,OAAO,UAAU,SAC7B,QAAO;CAET,MAAM,QAAQ,OAAO,eAAe,MAAM;AAC1C,QAAO,UAAU,OAAO,aAAa,CAAC,SAAS,CAAC,MAAM;;AAExD,SAAS,mBAAmB,OAAO;AACjC,QAAO,CAAC,CAAC,UAAU,OAAO,UAAU,YAAY,OAAO,UAAU;;AAwCnE,SAAS,MAAM,QAAQ,GAAG,MAAM;AAC9B,KAAI,OAAO,WAAW,WACpB,QAAO,OAAO,GAAG,KAAK;AAExB,QAAO;;AAMT,SAAS,mBAAmB,QAAQ;AAClC,QAAO,IAAI,MAAM,QAAQ,EACvB,IAAI,SAAS,MAAM,UAAU;EAC3B,MAAM,SAAS,QAAQ,IAAI,SAAS,MAAM,SAAS;AACnD,MAAI,SAAS,UAAU,OAAO,WAAW,WACvC,QAAO;AAET,SAAO,IAAI,MAAM,QAAQ,EACvB,MAAM,UAAU,SAAS,MAAM;AAC7B,OAAI,KAAK,WAAW,KAAK,KAAK,MAAM,QAAQ,CAAC,iBAAiB,IAAI,CAAC,CACjE,QAAO,QAAQ,MAAM,UAAU,SAAS,KAAK;GAE/C,IAAI,aAAa;AACjB,QAAK,GAAG,KAAK,SAAS,mBAAmB,IAAI,MAAM,SAAS,EAC1D,MAAM,SAAS,OAAO,cAAc;AAClC,QAAI,cAAc,UAAU,QAAQ;AAClC,kBAAa;AACb;;AAEF,WAAO,QAAQ,IAAI,SAAS,OAAO,UAAU;MAEhD,CAAC,CAAC,CAAC;KAEP,CAAC;IAEL,CAAC;;AAEJ,MAAM,wBAAwB;AAC9B,SAAS,iBAAiB,IAAI;AAC5B,QAAO,OAAO,OAAO,cAAc,sBAAsB,KAAK,GAAG,UAAU,CAAC;;AA2D9E,SAAS,sBAAsB,OAAO;AACpC,KAAI;AACF,SAAO,mBAAmB,MAAM;SAC1B;AACN,SAAO;;;;;AChsBX,MAAM,2BAA2B;AACjC,MAAM,8BAA8B;AAEpC,MAAM,yBAAyB;CAC7B,aAAa;EACX,QAAQ;EACR,SAAS;EACV;CACD,cAAc;EACZ,QAAQ;EACR,SAAS;EACV;CACD,WAAW;EACT,QAAQ;EACR,SAAS;EACV;CACD,WAAW;EACT,QAAQ;EACR,SAAS;EACV;CACD,sBAAsB;EACpB,QAAQ;EACR,SAAS;EACV;CACD,gBAAgB;EACd,QAAQ;EACR,SAAS;EACV;CACD,SAAS;EACP,QAAQ;EACR,SAAS;EACV;CACD,UAAU;EACR,QAAQ;EACR,SAAS;EACV;CACD,qBAAqB;EACnB,QAAQ;EACR,SAAS;EACV;CACD,mBAAmB;EACjB,QAAQ;EACR,SAAS;EACV;CACD,wBAAwB;EACtB,QAAQ;EACR,SAAS;EACV;CACD,uBAAuB;EACrB,QAAQ;EACR,SAAS;EACV;CACD,mBAAmB;EACjB,QAAQ;EACR,SAAS;EACV;CACD,uBAAuB;EACrB,QAAQ;EACR,SAAS;EACV;CACD,uBAAuB;EACrB,QAAQ;EACR,SAAS;EACV;CACD,iBAAiB;EACf,QAAQ;EACR,SAAS;EACV;CACD,aAAa;EACX,QAAQ;EACR,SAAS;EACV;CACD,qBAAqB;EACnB,QAAQ;EACR,SAAS;EACV;CACD,iBAAiB;EACf,QAAQ;EACR,SAAS;EACV;CACF;AACD,SAAS,wBAAwB,MAAM,QAAQ;AAC7C,QAAO,UAAU,uBAAuB,OAAO,UAAU;;AAE3D,SAAS,yBAAyB,MAAM,SAAS;AAC/C,QAAO,WAAW,uBAAuB,OAAO,WAAW;;AAE7D,MAAM,wCAAwC,OAAO,IAAI,KAAK,yBAAyB,GAAG,4BAA4B,kCAAkC;AAClJ,WAAW,2DAA2D,IAAI,SAAS;AACzF,MAAM,8BAA8B,WAAW;AAC/C,IAAM,YAAN,cAAwB,MAAM;CAC5B;CACA;CACA;CACA;CACA,YAAY,MAAM,GAAG,MAAM;EACzB,MAAM,UAAU,4BAA4B,KAAK;AACjD,MAAI,QAAQ,WAAW,KAAK,KAAK,CAAC,kBAAkB,QAAQ,OAAO,CACjE,OAAM,IAAI,MAAM,yCAAyC;EAE3D,MAAM,UAAU,yBAAyB,MAAM,QAAQ,QAAQ;AAC/D,QAAM,SAAS,QAAQ;AACvB,OAAK,OAAO;AACZ,OAAK,SAAS,wBAAwB,MAAM,QAAQ,OAAO;AAC3D,OAAK,UAAU,QAAQ,WAAW;AAClC,OAAK,OAAO,QAAQ;;CAEtB,SAAS;AACP,SAAO;GACL,SAAS,KAAK;GACd,MAAM,KAAK;GACX,QAAQ,KAAK;GACb,SAAS,KAAK;GACd,MAAM,KAAK;GACZ;;;;;;;;;;;;;;CAcH,QAAQ,OAAO,aAAa,UAAU;AACpC,MAAI,4BAA4B,IAAI,KAAK,EAAE;GACzC,MAAM,cAAc,eAAe,SAAS;AAC5C,OAAI,eAAe,4BAA4B,IAAI,YAAY,CAC7D,QAAO;;AAGX,SAAO,MAAM,OAAO,aAAa,SAAS;;;AAG9C,4BAA4B,IAAI,UAAU;AAI1C,SAAS,YAAY,OAAO;AAC1B,QAAO,iBAAiB,YAAY,QAAQ,IAAI,UAAU,yBAAyB;EACjF,SAAS;EACT,OAAO;EACR,CAAC;;AAEJ,SAAS,kBAAkB,QAAQ;AACjC,QAAO,SAAS,OAAO,UAAU;;AAEnC,SAAS,gBAAgB,MAAM;AAC7B,KAAI,CAAC,SAAS,KAAK,CACjB,QAAO;CAET,MAAM,YAAY;EAAC;EAAW;EAAQ;EAAU;EAAW;EAAO;AAClE,KAAI,OAAO,KAAK,KAAK,CAAC,MAAM,MAAM,CAAC,UAAU,SAAS,EAAE,CAAC,CACvD,QAAO;AAET,QAAO,aAAa,QAAQ,OAAO,KAAK,YAAY,aAAa,UAAU,QAAQ,OAAO,KAAK,SAAS,YAAY,YAAY,QAAQ,OAAO,KAAK,WAAW,YAAY,kBAAkB,KAAK,OAAO,IAAI,aAAa,QAAQ,OAAO,KAAK,YAAY;;AAE5P,SAAS,wBAAwB,MAAM,UAAU,EAAE,EAAE;AACnD,QAAO,IAAI,UAAU,KAAK,MAAM;EAC9B,GAAG;EACH,GAAG;EACJ,CAAC;;;;ACrKJ,IAAM,oBAAN,cAAgC,UAAU;AAE1C,IAAM,oBAAN,cAAgC,UAAU;AAE1C,IAAM,aAAN,cAAyB,MAAM;CAC7B;CACA,YAAY,SAAS;AACnB,QAAM,SAAS,WAAW,+BAA+B,QAAQ;AACjE,OAAK,OAAO,SAAS;;;AAIzB,SAAS,mBAAmB,SAAS;CACnC,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,GAAG,CAAC,MAAM,KAAK;CACrD,MAAM,UAAU;EACd,MAAM,KAAK;EACX,OAAO,KAAK;EACZ,IAAI,KAAK;EACT,OAAO,KAAK;EACZ,UAAU,EAAE;EACb;AACD,MAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,QAAQ,KAAK,QAAQ,IAAI;EAC/B,MAAM,MAAM,UAAU,KAAK,OAAO,KAAK,MAAM,GAAG,MAAM;EACtD,MAAM,QAAQ,UAAU,KAAK,KAAK,KAAK,MAAM,QAAQ,EAAE,CAAC,QAAQ,OAAO,GAAG;AAC1E,MAAI,UAAU,EACZ,SAAQ,SAAS,KAAK,MAAM;WACnB,QAAQ,QAAQ;AACzB,WAAQ,SAAS;AACjB,WAAQ,QAAQ,GAAG,MAAM;;aAEhB,QAAQ,QACjB,SAAQ,QAAQ;WACP,QAAQ,KACjB,SAAQ,KAAK;WACJ,QAAQ,SAAS;GAC1B,MAAM,eAAe,OAAO,SAAS,MAAM;AAC3C,OAAI,OAAO,UAAU,aAAa,IAAI,gBAAgB,KAAK,aAAa,UAAU,KAAK,MACrF,SAAQ,QAAQ;;;AAItB,SAAQ,OAAO,QAAQ,MAAM,QAAQ,OAAO,GAAG;AAC/C,QAAO;;AAET,IAAM,eAAN,MAAmB;CACjB,YAAY,UAAU,EAAE,EAAE;AACxB,OAAK,UAAU;;CAEjB,aAAa;CACb,KAAK,OAAO;AACV,OAAK,cAAc;EACnB,MAAM,oBAAoB,KAAK,WAAW,YAAY,OAAO;AAC7D,MAAI,sBAAsB,GACxB;EAEF,MAAM,YAAY,KAAK,WAAW,MAAM,GAAG,kBAAkB,CAAC,MAAM,OAAO;AAC3E,OAAK,aAAa,KAAK,WAAW,MAAM,oBAAoB,EAAE;AAC9D,OAAK,MAAM,WAAW,WAAW;GAC/B,MAAM,UAAU,mBAAmB,GAAG,QAAQ;;EAElD;AACI,OAAI,KAAK,QAAQ,QACf,MAAK,QAAQ,QAAQ,QAAQ;;;CAInC,MAAM;AACJ,MAAI,KAAK,WACP,OAAM,IAAI,kBAAkB,uCAAuC;;;AAIzE,IAAM,qBAAN,cAAiC,gBAAgB;CAC/C,cAAc;EACZ,IAAI;AACJ,QAAM;GACJ,MAAM,YAAY;AAChB,cAAU,IAAI,aAAa,EACzB,UAAU,UAAU;AAClB,gBAAW,QAAQ,MAAM;OAE5B,CAAC;;GAEJ,UAAU,OAAO;AACf,YAAQ,KAAK,MAAM;;GAErB,QAAQ;AACN,YAAQ,KAAK;;GAEhB,CAAC;;;AAIN,SAAS,cAAc,IAAI;AACzB,KAAI,GAAG,SAAS,KAAK,CACnB,OAAM,IAAI,kBAAkB,kDAAkD;;AAGlF,SAAS,gBAAgB,OAAO;AAC9B,KAAI,MAAM,SAAS,KAAK,CACtB,OAAM,IAAI,kBAAkB,qDAAqD;;AAGrF,SAAS,iBAAiB,OAAO;AAC/B,KAAI,CAAC,OAAO,UAAU,MAAM,IAAI,QAAQ,EACtC,OAAM,IAAI,kBAAkB,2CAA2C;;AAG3E,SAAS,mBAAmB,SAAS;AACnC,KAAI,QAAQ,SAAS,KAAK,CACxB,OAAM,IAAI,kBAAkB,uDAAuD;;AAGvF,SAAS,gBAAgB,MAAM;CAC7B,MAAM,QAAQ,MAAM,MAAM,KAAK,IAAI,EAAE;CACrC,IAAI,SAAS;AACb,MAAK,MAAM,QAAQ,MACjB,WAAU,SAAS,KAAK;;AAG1B,QAAO;;AAET,SAAS,oBAAoB,UAAU;CACrC,IAAI,SAAS;AACb,MAAK,MAAM,WAAW,YAAY,EAAE,EAAE;AACpC,qBAAmB,QAAQ;AAC3B,YAAU,KAAK,QAAQ;;;AAGzB,QAAO;;AAET,SAAS,mBAAmB,SAAS;CACnC,IAAI,SAAS;AACb,WAAU,oBAAoB,QAAQ,SAAS;AAC/C,KAAI,QAAQ,UAAU,KAAK,GAAG;AAC5B,kBAAgB,QAAQ,MAAM;AAC9B,YAAU,UAAU,QAAQ,MAAM;;;AAGpC,KAAI,QAAQ,UAAU,KAAK,GAAG;AAC5B,mBAAiB,QAAQ,MAAM;AAC/B,YAAU,UAAU,QAAQ,MAAM;;;AAGpC,KAAI,QAAQ,OAAO,KAAK,GAAG;AACzB,gBAAc,QAAQ,GAAG;AACzB,YAAU,OAAO,QAAQ,GAAG;;;AAG9B,WAAU,gBAAgB,QAAQ,KAAK;AACvC,WAAU;AACV,QAAO;;AAGT,MAAM,2BAA2B,OAAO,yBAAyB;AACjE,SAAS,cAAc,WAAW,MAAM;AACtC,KAAI,KAAK,OAAO,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK,CAAC,KAAK,UAAU,OACjE,QAAO;AAET,KAAI,KAAK,OAAO,KAAK,EACnB,eAAc,KAAK,GAAG;AAExB,KAAI,KAAK,UAAU,KAAK,EACtB,kBAAiB,KAAK,MAAM;AAE9B,KAAI,KAAK,aAAa,KAAK,EACzB,MAAK,MAAM,WAAW,KAAK,SACzB,oBAAmB,QAAQ;AAG/B,QAAO,IAAI,MAAM,WAAW,EAC1B,IAAI,QAAQ,MAAM,UAAU;AAC1B,MAAI,SAAS,yBACX,QAAO;AAET,SAAO,QAAQ,IAAI,QAAQ,MAAM,SAAS;IAE7C,CAAC;;AAEJ,SAAS,aAAa,WAAW;AAC/B,QAAO,mBAAmB,UAAU,GAAG,QAAQ,IAAI,WAAW,yBAAyB,GAAG,KAAK;;AAoBjG,SAAS,2BAA2B,UAAU,cAAc,UAAU;AAGpE,QAAO,GAAG,YAAY,cAFE,SAAS,QAAQ,iBAAiB,IAAI,CAAC,QAAQ,MAAM,OAAM,CAE/B,sBADxB,mBAAmB,SAAS,CAAC,QAAQ,YAAY,MAAM,IAAI,EAAE,WAAW,EAAE,CAAC,SAAS,GAAG,CAAC,aAAa,GAAG,CAAC,QAAQ,iBAAiB,KAAK,QAAQ,OAAO,aAAa,OAAO,SAAS,KAAK,GAAG,CAAC,CAAC;;AAG3N,SAAS,kCAAkC,oBAAoB;CAC7D,MAAM,2BAA2B,mBAAmB,MAAM,gCAAgC;AAC1F,KAAI,4BAA4B,OAAO,yBAAyB,OAAO,SACrE,QAAO,sBAAsB,yBAAyB,GAAG;CAE3D,MAAM,uBAAuB,mBAAmB,MAAM,8BAA8B;AACpF,KAAI,wBAAwB,OAAO,qBAAqB,OAAO,SAC7D,QAAO,qBAAqB,GAAG,QAAQ,QAAQ,KAAI;;AAGvD,SAAS,qBAAqB,GAAG,GAAG;CAClC,MAAM,SAAS,EAAE,GAAG,GAAG;AACvB,MAAK,MAAM,OAAO,EAChB,KAAI,MAAM,QAAQ,EAAE,KAAK,CACvB,QAAO,OAAO,CAAC,GAAG,QAAQ,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK;UACzC,EAAE,SAAS,KAAK,EACzB,KAAI,MAAM,QAAQ,OAAO,KAAK,CAC5B,QAAO,OAAO,CAAC,GAAG,OAAO,MAAM,EAAE,KAAK;UAC7B,OAAO,SAAS,KAAK,EAC9B,QAAO,OAAO,CAAC,OAAO,MAAM,EAAE,KAAK;KAEnC,QAAO,OAAO,EAAE;AAItB,QAAO;;;;ACtOT,SAAS,iBAAiB,UAAU,MAAM;CACxC,MAAM,WAAW,OAAO,UAAU;EAChC,IAAI,cAAc,MAAM,KAAK,MAAM,MAAM;AACzC,MAAI,gBAAgB,OAAO;GACzB,MAAM,OAAO,aAAa,MAAM;AAChC,OAAI,QAAQ,mBAAmB,YAAY,CACzC,eAAc,cAAc,aAAa,KAAK;;AAGlD,SAAO;;AAET,QAAO,IAAI,mBAAmB,YAAY;EACxC,MAAM,EAAE,MAAM,UAAU,OAAO,YAAY;AACzC,OAAI;AACF,WAAO,MAAM,SAAS,MAAM;YACrB,OAAO;AACd,UAAM,MAAM,SAAS,MAAM;;MAE3B;EACJ,IAAI,cAAc,MAAM,KAAK,MAAM,OAAO,KAAK;AAC/C,MAAI,gBAAgB,OAAO;GACzB,MAAM,OAAO,aAAa,MAAM;AAChC,OAAI,QAAQ,mBAAmB,YAAY,CACzC,eAAc,cAAc,aAAa,KAAK;;AAGlD,SAAO;GAAE;GAAM,OAAO;GAAa;IAClC,YAAY;AACb,MAAI;AACF,SAAM,SAAS,UAAU;WAClB,OAAO;AACd,SAAM,MAAM,SAAS,MAAM;;GAE7B;;;;ACRJ,SAAS,6BAA6B,SAAS;AAC7C,QAAO;EACL,GAAG;EACH,SAAS,QAAQ,WAAW,EAAE;EAE/B;;AAgCH,SAAS,iBAAiB,MAAM,UAAU,EAAE,EAAE;CAC5C,MAAM,OAAO,QAAQ,QAAQ,EAAE;CAC/B,MAAM,kBAAkB,OAAO,GAAG,CAAC,OAAO,WAAW,EAAE,MAAM;AAC3D,SAAO,MAAM,KAAK,KAAK,MAAM,OAAO,6BAA6B,SAAS,CAAC;;AAa7E,QAAO,mBAXW,IAAI,MAAM,iBAAiB,EAC3C,IAAI,QAAQ,KAAK;AACf,MAAI,OAAO,QAAQ,SACjB,QAAO,QAAQ,IAAI,QAAQ,IAAI;AAEjC,SAAO,iBAAiB,MAAM;GAC5B,GAAG;GACH,MAAM,CAAC,GAAG,MAAM,IAAI;GACrB,CAAC;IAEL,CAAC,CACkC;;;;AC9EtC,SAAS,gBAAgB,QAAQ,UAAU,EAAE,EAAE;CAE7C,MAAM,UADc,QAAQ,YAAY,IAAI,mBAAmB,CAAC,CAAC,YAAY,IAAI,oBAAoB,CAAC,GAC1E,WAAW;CACvC,IAAI;CACJ,IAAI,cAAc;AAClB,QAAO,IAAI,mBAAmB,YAAY;AACxC,WAAS,UAAU,gCAAgC;AACnD,MAAI;AACF,UAAO,MAAM;AACX,QAAI,WAAW,KAAK,EAClB,QAAO;KAAE,MAAM;KAAM,OAAO,KAAK;KAAG;IAEtC,MAAM,EAAE,MAAM,UAAU,MAAM,iBAAiB,YAAY,OAAO,MAAM,CAAC;AACzE,QAAI,MAAM;AACR,SAAI,YACF,OAAM,IAAI,WAAW,uBAAuB;AAE9C,YAAO;MAAE,MAAM;MAAM,OAAO,KAAK;MAAG;;AAEtC,YAAQ,MAAM,OAAd;KACE,KAAK,WAAW;MACd,IAAI,UAAU,mBAAmB,MAAM,KAAK;AAC5C,UAAI,mBAAmB,QAAQ,CAC7B,WAAU,cAAc,SAAS,MAAM;AAEzC,YAAM,SAAS,UAAU;AACzB,aAAO;OAAE,MAAM;OAAO,OAAO;OAAS;;KAExC,KAAK,SAAS;MACZ,IAAI,QAAQ,IAAI,WAAW,EACzB,MAAM,mBAAmB,MAAM,KAAK,EACrC,CAAC;AACF,cAAQ,cAAc,OAAO,MAAM;AACnC,YAAM,SAAS,QAAQ;AACvB,YAAM;;KAER,KAAK,QAAQ;MACX,IAAI,QAAQ,mBAAmB,MAAM,KAAK;AAC1C,UAAI,mBAAmB,MAAM,CAC3B,SAAQ,cAAc,OAAO,MAAM;AAErC,YAAM,SAAS,OAAO;AACtB,aAAO;OAAE,MAAM;OAAM,OAAO;OAAO;;KAErC,QACE,OAAM,SAAS,kBAAkB;;;WAIhC,GAAG;AACV,OAAI,EAAE,aAAa,YACjB,cAAa,MAAM,GAAG,QAAQ;AAEhC,SAAM;;IAEP,OAAO,WAAW;AACnB,MAAI;AACF,OAAI,WAAW,QAAQ;AACrB,kBAAc;AACd,UAAM,SAAS,YAAY;;AAE7B,SAAM,iBAAiB,YAAY,QAAQ,QAAQ,CAAC;WAC7C,GAAG;AACV,gBAAa,MAAM,GAAG,QAAQ;AAC9B,SAAM;YACE;AACR,SAAM,KAAK;;GAEb;;AAEJ,SAAS,cAAc,UAAU,UAAU,EAAE,EAAE;CAC7C,MAAM,mBAAmB,QAAQ,iCAAiC;CAClE,MAAM,oBAAoB,QAAQ,kCAAkC;CACpE,MAAM,mBAAmB,QAAQ,iCAAiC;CAClE,MAAM,wBAAwB,QAAQ,sCAAsC;CAC5E,MAAM,iBAAiB,QAAQ,+BAA+B;CAC9D,IAAI,YAAY;CAChB,IAAI;CACJ,IAAI;AAyEJ,QAxEe,IAAI,eAAe;EAChC,MAAM,YAAY;AAChB,UAAO,UAAU,wBAAwB;AACzC,OAAI,sBACF,YAAW,QAAQ,mBAAmB,EACpC,UAAU,CAAC,eAAe,EAC3B,CAAC,CAAC;;EAGP,MAAM,KAAK,YAAY;AACrB,OAAI;AACF,QAAI,iBACF,WAAU,kBAAkB;AAC1B,gBAAW,QAAQ,mBAAmB,EACpC,UAAU,CAAC,iBAAiB,EAC7B,CAAC,CAAC;AACH,WAAM,SAAS,YAAY;OAC1B,kBAAkB;IAEvB,MAAM,QAAQ,MAAM,iBAAiB,YAAY,SAAS,MAAM,CAAC;AACjE,kBAAc,QAAQ;AACtB,QAAI,UACF;IAEF,MAAM,OAAO,aAAa,MAAM,MAAM;AACtC,QAAI,CAAC,MAAM,QAAQ,MAAM,UAAU,KAAK,KAAK,SAAS,KAAK,GAAG;KAC5D,MAAM,QAAQ,MAAM,OAAO,SAAS;AACpC,gBAAW,QAAQ,mBAAmB;MACpC,GAAG;MACH;MACA,MAAM,cAAc,MAAM,MAAM;MACjC,CAAC,CAAC;AACH,WAAM,SAAS,MAAM;;AAEvB,QAAI,MAAM,MAAM;AACd,gBAAW,OAAO;AAClB,WAAM,KAAK;;YAEN,KAAK;AACZ,kBAAc,QAAQ;AACtB,QAAI,UACF;AAEF,QAAI,eAAe,YAAY;AAC7B,gBAAW,QAAQ,mBAAmB;MACpC,GAAG,aAAa,IAAI;MACpB,OAAO;MACP,MAAM,cAAc,IAAI,KAAK;MAC9B,CAAC,CAAC;AACH,WAAM,SAAS,QAAQ;AACvB,gBAAW,OAAO;WACb;AACL,kBAAa,MAAM,IAAI;AACvB,gBAAW,MAAM,IAAI;;AAEvB,UAAM,KAAK;;;EAGf,MAAM,SAAS;AACb,OAAI;AACF,gBAAY;AACZ,kBAAc,QAAQ;AACtB,UAAM,SAAS,YAAY;AAC3B,UAAM,iBAAiB,YAAY,SAAS,UAAU,CAAC;YAChD,GAAG;AACV,iBAAa,MAAM,EAAE;AACrB,UAAM;aACE;AACR,UAAM,KAAK;;;EAGhB,CAAC,CAAC,YAAY,IAAI,mBAAmB,CAAC;;AAIzC,SAAS,eAAe,IAAI,UAAU,EAAE,EAAE;AACxC,QAAO,YACL;EAAE,MAAM;EAAuB,QAAQ,QAAQ;EAAQ,EACvD,YAAY;EACV,MAAM,qBAAqB,GAAG,QAAQ,IAAI,sBAAsB;AAChE,MAAI,OAAO,uBAAuB,UAAU;GAC1C,MAAM,WAAW,kCAAkC,mBAAmB,IAAI;GAC1E,MAAM,QAAQ,MAAM,GAAG,MAAM;AAC7B,UAAO,IAAI,KAAK,CAAC,MAAM,EAAE,UAAU,EACjC,MAAM,MAAM,MACb,CAAC;;EAEJ,MAAM,cAAc,GAAG,QAAQ,IAAI,eAAe;AAClD,MAAI,CAAC,eAAe,YAAY,WAAW,mBAAmB,CAE5D,QAAO,mBADM,MAAM,GAAG,MAAM,CACG;AAEjC,MAAI,YAAY,WAAW,sBAAsB,CAC/C,QAAO,MAAM,GAAG,UAAU;AAE5B,MAAI,YAAY,WAAW,oCAAoC,EAAE;GAC/D,MAAM,OAAO,MAAM,GAAG,MAAM;AAC5B,UAAO,IAAI,gBAAgB,KAAK;;AAElC,MAAI,YAAY,WAAW,oBAAoB,CAC7C,QAAO,gBAAgB,GAAG,MAAM,QAAQ;AAE1C,MAAI,YAAY,WAAW,aAAa,CACtC,QAAO,MAAM,GAAG,MAAM;EAExB,MAAM,OAAO,MAAM,GAAG,MAAM;AAC5B,SAAO,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,EAC9B,MAAM,KAAK,MACZ,CAAC;GAEL;;AAEH,SAAS,YAAY,MAAM,SAAS,UAAU,EAAE,EAAE;AAChD,KAAI,gBAAgB,eAClB,QAAO;CAET,MAAM,4BAA4B,QAAQ,IAAI,sBAAsB;AACpE,SAAQ,OAAO,eAAe;AAC9B,SAAQ,OAAO,sBAAsB;AACrC,KAAI,SAAS,KAAK,EAChB;AAEF,KAAI,gBAAgB,MAAM;AACxB,UAAQ,IAAI,gBAAgB,KAAK,KAAK;AACtC,UAAQ,IAAI,kBAAkB,KAAK,KAAK,UAAU,CAAC;AACnD,UAAQ,IACN,uBACA,6BAA6B,2BAA2B,gBAAgB,OAAO,KAAK,OAAO,OAAO,CACnG;AACD,SAAO;;AAET,KAAI,gBAAgB,SAClB,QAAO;AAET,KAAI,gBAAgB,gBAClB,QAAO;AAET,KAAI,sBAAsB,KAAK,EAAE;AAC/B,UAAQ,IAAI,gBAAgB,oBAAoB;AAChD,SAAO,cAAc,MAAM,QAAQ;;AAErC,SAAQ,IAAI,gBAAgB,mBAAmB;AAC/C,QAAO,cAAc,KAAK;;AAG5B,SAASI,oBAAkB,SAAS,kBAAkB,EAAE,EAAE;AACxD,SAAQ,SAAS,OAAO,QAAQ;AAC9B,MAAI,MAAM,QAAQ,gBAAgB,KAAK,CACrC,iBAAgB,KAAK,KAAK,MAAM;WACvB,gBAAgB,SAAS,KAAK,EACvC,iBAAgB,OAAO,CAAC,gBAAgB,MAAM,MAAM;MAEpD,iBAAgB,OAAO;GAEzB;AACF,QAAO;;AAET,SAAS,eAAe,SAAS,eAAe,IAAI,SAAS,EAAE;AAC7D,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAChD,KAAI,MAAM,QAAQ,MAAM,CACtB,MAAK,MAAM,KAAK,MACd,cAAa,OAAO,KAAK,EAAE;UAEpB,UAAU,KAAK,EACxB,cAAa,OAAO,KAAK,MAAM;AAGnC,QAAO;;AAmBT,SAAS,eAAe,SAAS,UAAU,EAAE,EAAE;CAC7C,MAAM,UAAU,eAAe,QAAQ,QAAQ;CAC/C,MAAM,OAAO,YAAY,QAAQ,MAAM,SAAS,QAAQ;AACxD,QAAO,IAAI,QAAQ,QAAQ,KAAK;EAC9B,QAAQ,QAAQ;EAChB,QAAQ,QAAQ;EAChB;EACA;EACD,CAAC;;AAQJ,SAAS,uBAAuB,UAAU,UAAU,EAAE,EAAE;AACtD,QAAO;EACL,MAAM,WAAW,eAAe,UAAU,QAAQ,CAAC;EACnD,QAAQ,SAAS;EACjB,IAAI,UAAU;GACZ,MAAM,UAAUA,oBAAkB,SAAS,QAAQ;AACnD,UAAO,eAAe,MAAM,WAAW;IAAE,OAAO;IAAS,UAAU;IAAM,CAAC;AAC1E,UAAO;;EAET,IAAI,QAAQ,OAAO;AACjB,UAAO,eAAe,MAAM,WAAW;IAAE;IAAO,UAAU;IAAM,CAAC;;EAEpE;;;;AClSH,IAAM,8BAAN,MAAkC;CAChC;CACA,YAAY,UAAU,EAAE,EAAE;AACxB,OAAK,UAAU,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,OAAO,EAAE,SAAS,MAAM,EAAE,SAAS,GAAG;;CAE7E,KAAK,SAAS;AACZ,OAAK,MAAM,UAAU,KAAK,QACxB,QAAO,OAAO,QAAQ;;;AAK5B,IAAM,eAAN,MAAmB;CACjB,YAAY,OAAO,QAAQ,UAAU,EAAE,EAAE;AACvC,OAAK,QAAQ;AACb,OAAK,SAAS;AACC,MAAI,4BAA4B,QAAQ,QAAQ,CACxD,KAAK,QAAQ;AACpB,OAAK,eAAe,QAAQ,QAAQ,aAAa;AACjD,OAAK,qBAAqB,QAAQ,QAAQ,mBAAmB;;CAE/D;CACA;CACA,KAAK,MAAM,OAAO,SAAS;AACzB,SAAO,YACL;GAAE,MAAM,GAAG,UAAU,GAAG,KAAK,KAAK,IAAI;GAAI,QAAQ,QAAQ;GAAQ,GACjE,SAAS;AACR,SAAM,aAAa,cAAc,UAAU;AAC3C,SAAM,aAAa,cAAc,KAAK,KAAK,IAAI,CAAC;AAChD,OAAI,sBAAsB,MAAM,CAC9B,SAAQ,sBACN;IAAE,MAAM;IAAgC,QAAQ,QAAQ;IAAQ,EAChE,MACD;AAEH,UAAO,UAAU,KAAK,cAAc;IAAE,GAAG;IAAS;IAAM;IAAO,EAAE,OAAO,EAAE,MAAM,OAAO,OAAO,QAAQ,GAAG,eAAe;IACtH,MAAM,aAAa,qBAAqB;IACxC,IAAI;IACJ,MAAM,cAAc,YAAY,MAAM,eAAe,IAAI;AACzD,QAAI,eAAe,WACjB,eAAc,YAAY,MAAM,QAAQ,WAAW,QAAQ,QAAQ,EAAE,YAAY;IAEnF,MAAM,UAAU,MAAM,YACpB;KAAE,MAAM;KAAkB,SAAS;KAAa,QAC1C,KAAK,MAAM,OAAO,OAAO,QAAQ,SAAS,CACjD;IACD,MAAM,WAAW,MAAM,UACrB,KAAK,oBACL;KAAE,GAAG;KAAU,OAAO;KAAQ,MAAM;KAAO;KAAS,GACnD,EAAE,OAAO,QAAQ,MAAM,OAAO,SAAS,UAAU,GAAG,eAAe;AAClE,YAAO,YACL;MAAE,MAAM;MAAgB,QAAQ,SAAS;MAAQ,SAAS;MAAa,QACjE,KAAK,OAAO,KAAK,UAAU,UAAU,OAAO,OAAO,CAC1D;MAEJ;IACD,MAAM,SAAS,MAAM,YACnB;KAAE,MAAM;KAAmB,SAAS;KAAa,QAC3C,KAAK,MAAM,OAAO,UAAU,UAAU,OAAO,OAAO,CAC3D;AACD,QAAI,sBAAsB,OAAO,CAC/B,QAAO,sBACL;KAAE,MAAM;KAAiC,QAAQ,SAAS;KAAQ,EAClE,OACD;AAEH,WAAO;KACP;IAEL;;;AAIL,MAAM,8CAA8C;CAClD,QAAQ;CACR,MAAM;CACN,KAAK;CACL,WAAW;CACX,KAAK;CACL,QAAQ;CACR,KAAK;CACL,KAAK;CACN;AACD,IAAM,4BAAN,MAAgC;CAC9B;CACA,YAAY,UAAU,EAAE,EAAE;AACxB,OAAK,oBAAoB,QAAQ,yBAAyB,EAAE;AAC5D,MAAI,KAAK,kBAAkB,WAAW,IAAI,IAAI,KAAK,kBAAkB,KAAK,WAAW,OAAO,KAAK,CAAC,CAAC,KACjG,OAAM,IAAI,MAAM,yCAAyC;;CAG7D,UAAU,MAAM,WAAW,EAAE,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE;AAC/D,OAAK,MAAM,UAAU,KAAK,kBACxB,KAAI,OAAO,UAAU,KAAK,EAAE;GAC1B,MAAM,SAAS,KAAK,UAAU,OAAO,UAAU,KAAK,EAAE,UAAU,MAAM,MAAM,MAAM;AAClF,QAAK,KAAK,CAAC,OAAO,MAAM,GAAG,SAAS,CAAC;AACrC,UAAO;;AAGX,MAAI,gBAAgB,MAAM;AACxB,QAAK,KAAK,SAAS;AACnB,SAAM,KAAK,KAAK;AAChB,UAAO;IAAC;IAAM;IAAM;IAAM;IAAM;;AAElC,MAAI,OAAO,SAAS,UAAU;AAC5B,QAAK,KAAK,CAAC,4CAA4C,QAAQ,GAAG,SAAS,CAAC;AAC5E,UAAO;IAAC,KAAK,UAAU;IAAE;IAAM;IAAM;IAAM;;AAE7C,MAAI,gBAAgB,MAAM;AACxB,QAAK,KAAK,CAAC,4CAA4C,MAAM,GAAG,SAAS,CAAC;AAC1E,OAAI,OAAO,MAAM,KAAK,SAAS,CAAC,CAC9B,QAAO;IAAC;IAAM;IAAM;IAAM;IAAM;AAElC,UAAO;IAAC,KAAK,aAAa;IAAE;IAAM;IAAM;IAAM;;AAEhD,MAAI,OAAO,MAAM,KAAK,EAAE;AACtB,QAAK,KAAK,CAAC,4CAA4C,KAAK,GAAG,SAAS,CAAC;AACzE,UAAO;IAAC;IAAM;IAAM;IAAM;IAAM;;AAElC,MAAI,gBAAgB,KAAK;AACvB,QAAK,KAAK,CAAC,4CAA4C,KAAK,GAAG,SAAS,CAAC;AACzE,UAAO;IAAC,KAAK,UAAU;IAAE;IAAM;IAAM;IAAM;;AAE7C,MAAI,gBAAgB,QAAQ;AAC1B,QAAK,KAAK,CAAC,4CAA4C,QAAQ,GAAG,SAAS,CAAC;AAC5E,UAAO;IAAC,KAAK,UAAU;IAAE;IAAM;IAAM;IAAM;;AAE7C,MAAI,gBAAgB,KAAK;GACvB,MAAM,SAAS,KAAK,UAAU,MAAM,KAAK,KAAK,EAAE,UAAU,MAAM,MAAM,MAAM;AAC5E,QAAK,KAAK,CAAC,4CAA4C,KAAK,GAAG,SAAS,CAAC;AACzE,UAAO;;AAET,MAAI,gBAAgB,KAAK;GACvB,MAAM,SAAS,KAAK,UAAU,MAAM,KAAK,KAAK,SAAS,CAAC,EAAE,UAAU,MAAM,MAAM,MAAM;AACtF,QAAK,KAAK,CAAC,4CAA4C,KAAK,GAAG,SAAS,CAAC;AACzE,UAAO;;AAET,MAAI,MAAM,QAAQ,KAAK,CAQrB,QAAO;GAPM,KAAK,KAAK,GAAG,MAAM;AAC9B,QAAI,MAAM,KAAK,GAAG;AAChB,UAAK,KAAK;MAAC,4CAA4C;MAAW,GAAG;MAAU;MAAE,CAAC;AAClF,YAAO;;AAET,WAAO,KAAK,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,EAAE,MAAM,MAAM,MAAM,CAAC;KAC9D;GACY;GAAM;GAAM;GAAM;AAElC,MAAI,SAAS,KAAK,EAAE;GAClB,MAAM,OAAO,EAAE;AACf,QAAK,MAAM,KAAK,MAAM;AACpB,QAAI,MAAM,YAAY,OAAO,KAAK,OAAO,WACvC;AAEF,SAAK,KAAK,KAAK,UAAU,KAAK,IAAI,CAAC,GAAG,UAAU,EAAE,EAAE,MAAM,MAAM,MAAM,CAAC;;AAEzE,UAAO;IAAC;IAAM;IAAM;IAAM;IAAM;;AAElC,SAAO;GAAC;GAAM;GAAM;GAAM;GAAM;;CAElC,YAAY,MAAM,MAAM,MAAM,SAAS;EACrC,MAAM,MAAM,EAAE,MAAM,MAAM;AAC1B,MAAI,QAAQ,QACV,MAAK,SAAS,UAAU,MAAM;GAC5B,IAAI,aAAa;GACjB,IAAI,aAAa;AACjB,YAAS,SAAS,YAAY;AAC5B,iBAAa,WAAW;AACxB,iBAAa;AACb,QAAI,CAAC,OAAO,OAAO,YAAY,WAAW,CACxC,OAAM,IAAI,MAAM,qFAAqF,aAAa;KAEpH;AACF,cAAW,cAAc,QAAQ,EAAE;IACnC;AAEJ,OAAK,MAAM,QAAQ,MAAM;GACvB,MAAM,OAAO,KAAK;GAClB,IAAI,aAAa;GACjB,IAAI,aAAa;AACjB,QAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACpC,iBAAa,WAAW;AACxB,iBAAa,KAAK;AAClB,QAAI,CAAC,OAAO,OAAO,YAAY,WAAW,CACxC,OAAM,IAAI,MAAM,qFAAqF,aAAa;;AAGtH,QAAK,MAAM,UAAU,KAAK,kBACxB,KAAI,OAAO,SAAS,MAAM;AACxB,eAAW,cAAc,OAAO,YAAY,WAAW,YAAY;AACnE;;AAGJ,WAAQ,MAAR;IACE,KAAK,4CAA4C;AAC/C,gBAAW,cAAc,OAAO,WAAW,YAAY;AACvD;IACF,KAAK,4CAA4C;AAC/C,gBAAW,cAAc,IAAI,KAAK,WAAW,eAAe,eAAe;AAC3E;IACF,KAAK,4CAA4C;AAC/C,gBAAW,cAAc;AACzB;IACF,KAAK,4CAA4C;AAC/C,gBAAW,cAAc,KAAK;AAC9B;IACF,KAAK,4CAA4C;AAC/C,gBAAW,cAAc,IAAI,IAAI,WAAW,YAAY;AACxD;IACF,KAAK,4CAA4C,QAAQ;KACvD,MAAM,GAAG,SAAS,SAAS,WAAW,YAAY,MAAM,qBAAqB;AAC7E,gBAAW,cAAc,IAAI,OAAO,SAAS,MAAM;AACnD;;IAEF,KAAK,4CAA4C;AAC/C,gBAAW,cAAc,IAAI,IAAI,WAAW,YAAY;AACxD;IACF,KAAK,4CAA4C;AAC/C,gBAAW,cAAc,IAAI,IAAI,WAAW,YAAY;AACxD;;;AAGN,SAAO,IAAI;;;AAIf,SAAS,WAAW,MAAM;AACxB,QAAO,IAAI,KAAK,IAAI,mBAAmB,CAAC,KAAK,IAAI;;AAEnD,SAAS,kBAAkB,SAAS;AAClC,KAAI,OAAO,QAAQ,YAAY,WAC7B,QAAO,oBAAoB,QAAQ;AAErC,QAAO;;AAET,SAAS,8BAA8B,QAAQ;AAC7C,QAAO,OAAO,QAAQ,uBAAuB,CAAC,MAAM,GAAG,SAAS,IAAI,WAAW,OAAO,GAAG,MAAM;;AAGjG,IAAM,uBAAN,MAA2B;CACzB,YAAY,YAAY,SAAS;AAC/B,OAAK,aAAa;AAClB,OAAK,UAAU,QAAQ;AACvB,OAAK,eAAe,QAAQ,gBAAgB;AAC5C,OAAK,iBAAiB,QAAQ,kBAAkB;AAChD,OAAK,iBAAiB,QAAQ,UAAU,KAAK;AAC7C,OAAK,UAAU,QAAQ,WAAW,EAAE;;CAEtC;CACA;CACA;CACA;CACA;CACA,MAAM,OAAO,MAAM,OAAO,SAAS;EACjC,IAAI,UAAU,kBAAkB,MAAM,MAAM,KAAK,SAAS,SAAS,MAAM,MAAM,CAAC;AAChF,MAAI,QAAQ,gBAAgB,KAAK,EAC/B,WAAU,qBAAqB,SAAS,EAAE,iBAAiB,QAAQ,aAAa,CAAC;EAEnF,MAAM,iBAAiB,MAAM,MAAM,KAAK,gBAAgB,SAAS,MAAM,MAAM;EAC7E,MAAM,UAAU,MAAM,MAAM,KAAK,SAAS,SAAS,MAAM,MAAM;EAC/D,MAAM,MAAM,IAAI,IAAI,QAAQ;AAC5B,MAAI,WAAW,GAAG,IAAI,SAAS,QAAQ,OAAO,GAAG,GAAG,WAAW,KAAK;EACpE,MAAM,aAAa,KAAK,WAAW,UAAU,MAAM;AACnD,MAAI,mBAAmB,SAAS,EAAE,sBAAsB,aAAa,CAAC,sBAAsB,WAAW,EAAE;GACvG,MAAM,eAAe,MAAM,MAAM,KAAK,cAAc,SAAS,MAAM,MAAM;GACzE,MAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,UAAO,aAAa,OAAO,QAAQ,cAAc,WAAW,CAAC;AAC7D,OAAI,OAAO,UAAU,CAAC,UAAU,aAC9B,QAAO;IACL,MAAM,KAAK;IACX,QAAQ;IACR;IACA,KAAK;IACL,QAAQ,QAAQ;IACjB;;AAGL,SAAO;GACL;GACA,QAAQ,mBAAmB,QAAQ,KAAK,iBAAiB;GACzD;GACA,MAAM;GACN,QAAQ,QAAQ;GACjB;;CAEH,MAAM,OAAO,UAAU;EACrB,MAAM,OAAO,CAAC,kBAAkB,SAAS,OAAO;EAChD,MAAM,eAAe,OAAO,YAAY;GACtC,IAAI,WAAW;AACf,OAAI;IACF,MAAM,OAAO,MAAM,SAAS,MAAM;AAClC,eAAW;AACX,WAAO,KAAK,WAAW,YAAY,KAAK;YACjC,OAAO;AACd,QAAI,CAAC,SACH,OAAM,IAAI,MAAM,gFAAgF,EAC9F,OAAO,OACR,CAAC;AAEJ,UAAM,IAAI,MAAM,gCAAgC,EAC9C,OAAO,OACR,CAAC;;MAEF;AACJ,MAAI,CAAC,MAAM;AACT,OAAI,gBAAgB,aAAa,CAC/B,OAAM,wBAAwB,aAAa;AAE7C,SAAM,IAAI,UAAU,8BAA8B,SAAS,OAAO,EAAE;IAClE,QAAQ,SAAS;IACjB,MAAM;KAAE,GAAG;KAAU,MAAM;KAAc;IAC1C,CAAC;;AAEJ,SAAO;;;AAIX,IAAM,wBAAN,MAA4B;CAC1B,YAAY,gBAAgB;AAC1B,OAAK,iBAAiB;;CAExB,UAAU,MAAM;AACd,MAAI,sBAAsB,KAAK,CAC7B,QAAO,iBAAiB,MAAM;GAC5B,OAAO,OAAO,UAAU,MAAA,UAAgB,OAAO,MAAM;GACrD,OAAO,OAAO,MAAM;AAClB,WAAO,IAAI,WAAW;KACpB,MAAM,MAAA,UAAgB,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM;KACrD,OAAO;KACR,CAAC;;GAEL,CAAC;AAEJ,SAAO,MAAA,UAAgB,MAAM,KAAK;;CAEpC,WAAW,MAAM,gBAAgB;EAC/B,MAAM,CAAC,MAAM,OAAO,MAAM,SAAS,KAAK,eAAe,UAAU,KAAK;EACtE,MAAM,OAAO,MAAM,WAAW,IAAI,KAAK,IAAI;AAC3C,MAAI,CAAC,kBAAkB,MAAM,WAAW,EACtC,QAAO;GACL;GACA;GACD;EAEH,MAAM,OAAO,IAAI,UAAU;AAC3B,OAAK,IAAI,QAAQ,cAAc;GAAE;GAAM;GAAM;GAAM,CAAC,CAAC;AACrD,QAAM,SAAS,MAAM,MAAM;AACzB,QAAK,IAAI,EAAE,UAAU,EAAE,KAAK;IAC5B;AACF,SAAO;;CAET,YAAY,MAAM;AAChB,MAAI,sBAAsB,KAAK,CAC7B,QAAO,iBAAiB,MAAM;GAC5B,OAAO,OAAO,UAAU,MAAA,YAAkB,MAAM;GAChD,OAAO,OAAO,MAAM;AAClB,QAAI,EAAE,aAAa,YACjB,QAAO;IAET,MAAM,eAAe,MAAA,YAAkB,EAAE,KAAK;AAC9C,QAAI,gBAAgB,aAAa,CAC/B,QAAO,wBAAwB,cAAc,EAAE,OAAO,GAAG,CAAC;AAE5D,WAAO,IAAI,WAAW;KACpB,MAAM;KACN,OAAO;KACR,CAAC;;GAEL,CAAC;AAEJ,SAAO,MAAA,YAAkB,KAAK;;CAEhC,aAAa,MAAM;AACjB,MAAI,SAAS,KAAK,EAChB;AAEF,MAAI,EAAE,gBAAgB,UACpB,QAAO,KAAK,eAAe,YAAY,KAAK,MAAM,KAAK,QAAQ,EAAE,CAAC;EAEpE,MAAM,aAAa,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC;AAC/C,SAAO,KAAK,eAAe,YACzB,WAAW,MACX,WAAW,QAAQ,EAAE,EACrB,WAAW,OACV,MAAM,KAAK,IAAI,EAAE,UAAU,CAAC,CAC9B;;;AAIL,IAAM,kBAAN,cAA8B,aAAa;CACzC,YAAY,YAAY,SAAS;EAG/B,MAAM,YAAY,IAAI,qBADH,IAAI,sBADA,IAAI,0BAA0B,QAAQ,CACD,EACL,QAAQ;AAC/D,QAAM,WAAW,YAAY,QAAQ;;;;;ACxYzC,IAAM,2BAAN,cAAuC,4BAA4B;CACjE,mBAAmB,SAAS;AAC1B,OAAK,MAAM,UAAU,KAAK,QACxB,QAAO,qBAAqB,QAAQ;;;AAK1C,IAAM,kBAAN,MAAsB;CACpB;CACA;CACA;CACA,YAAY,SAAS;AACJ,MAAI,yBAAyB,QAAQ,QAAQ,CACrD,mBAAmB,QAAQ;AAClC,OAAK,QAAQ,QAAQ,SAAS,WAAW,MAAM,KAAK,WAAW;AAC/D,OAAK,wBAAwB;AAC7B,OAAK,sBAAsB,QAAQ,QAAQ,oBAAoB;;CAEjE,MAAM,KAAK,iBAAiB,SAAS,MAAM,OAAO;EAChD,MAAM,UAAU,eAAe,iBAAiB,KAAK,sBAAsB;AAO3E,SADqB,uBALC,MAAM,UAC1B,KAAK,qBACL;GAAE,GAAG;GAAS;GAAS;GAAM;GAAO,MAAM,EAAE,UAAU,UAAU;GAAE,GACjE,EAAE,SAAS,UAAU,MAAM,OAAO,OAAO,QAAQ,MAAM,GAAG,eAAe,KAAK,MAAM,UAAU,MAAM,UAAU,OAAO,OAAO,CAC9H,EAC0D,EAAE,QAAQ,QAAQ,QAAQ,CAAC;;;AAK1F,IAAM,UAAN,cAAsB,gBAAgB;CACpC,YAAY,SAAS;EACnB,MAAM,aAAa,IAAI,gBAAgB,QAAQ;AAC/C,QAAM,YAAY,QAAQ;;;;;AC1B9B,SAAgB,WAAW,SAAgC;AACzD,QAAO,IAAI,QAAQ;EACjB,KAAK,QAAQ;EACb,SAAS,YAAY;GACnB,MAAM,cAAsC,EAC1C,gBAAgB,oBACjB;GAGD,MAAM,gBAAgB,OAAO,QAAQ,YAAY,aAAa,MAAM,QAAQ,SAAS,GAAG,QAAQ;AAEhG,OAAI,cACF,QAAO,OAAO,aAAa,cAAc;AAG3C,OAAI,QAAQ,cAAc;IACxB,MAAM,QAAQ,MAAM,QAAQ,cAAc;AAC1C,QAAI,MACF,aAAY,YAAY,mBAAmB;;AAI/C,UAAO;;EAET,OACE,QAAQ,SAAS,QAAQ,aACrB,OAAO,SAAS,SAAS;GAEvB,MAAM,WAAW,OADD,QAAQ,SAAS,WAAW,OACb,SAAS,KAAK;AAE7C,OAAI,QAAQ,WACV,OAAM,QAAQ,WAAW,SAAS;AAGpC,UAAO;MAET,KAAA;EACP,CAAC;;;;;;;ACzCJ,SAAgB,qBAAqB,SAAgD;AACnF,QAAO,iBAAiC,WAAW,QAAQ,CAAC;;;;;;;;;ACL9D,SAAgB,aAAa,SAAyB;CACpD,MAAM,UAAU,QAAQ,QAAQ,QAAQ,GAAG;AAC3C,QAAO,QAAQ,SAAS,UAAU,GAAG,UAAU,GAAG,QAAQ;;;;;;;;AAS5D,SAAgB,gBAAgB,WAA6D;AAC3F,SAAQ,OAAO,SAAS,UAAU,OAAO;EAAE,GAAG;EAAM,aAAa;EAAW,CAAC;;;AAI/E,SAAgB,gBAAgB,YAAoB,WAAoD;AACtG,QAAO,qBAAqB;EAAE,SAAS;EAAY,OAAO,gBAAgB,UAAU;EAAE,CAAC;;;;ACxBzF,MAAM,WAAW;CAAC;CAAc;CAAc;CAAgB;CAAY;CAAc;AACxF,MAAM,0BAA0B,CAAC,cAAc,YAAY;;AAG3D,SAAgB,iBAAiB,QAAwC;CACvE,MAAM,SAAS,IAAI,gBAAgB,OAAO;CAC1C,MAAM,SAAiC,EAAE;AACzC,MAAK,MAAM,OAAO,UAAU;EAC1B,MAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,MAAI,MAAO,QAAO,OAAO;;AAE3B,QAAO;;;;;;AAOT,SAAgB,0BAA0B,cAA8C;CACtF,MAAM,UAAkC,EAAE;AAC1C,MAAK,MAAM,OAAO,yBAAyB;EACzC,MAAM,QAAQ,aAAa,MAAM,IAAI,OAAO,cAAc,IAAI,UAAU,CAAC;AACzE,MAAI,QAAQ,GAAI,SAAQ,OAAO,mBAAmB,MAAM,GAAG;;AAE7D,QAAO;;;AAIT,SAAgB,mBAA2B;AACzC,KAAI,OAAO,aAAa,YAAa,QAAO;AAC5C,KAAI;AACF,SAAO,SAAS;SACV;AACN,SAAO;;;;;;ACzBX,MAAa,iBAAiB;CAC5B,YAAY;CACZ,aAAa;CACb,UAAU;CACV,kBAAkB;CAClB,oBAAoB;CACpB,gBAAgB;CAChB,QAAQ;CACT;;AAID,MAAa,aAAa;CACxB,YAAY;CACZ,cAAc;CACd,gBAAgB;CAChB,sBAAsB;CACtB,WAAW;CACX,qBAAqB;CACrB,uBAAuB;CACvB,oBAAoB;CACpB,qBAAqB;CACrB,wBAAwB;CACxB,mBAAmB;CACnB,iBAAiB;CACjB,0BAA0B;CAC1B,wBAAwB;CACxB,2BAA2B;CAC3B,4BAA4B;CAC5B,UAAU;CACV,YAAY;CACZ,WAAW;CACX,kBAAkB;CACnB;;AAwBD,MAAa,qBAAqB;CAChC,aAAa;CACb,eAAe;CACf,qBAAqB;CACrB,qBAAqB;CACrB,uBAAuB;CACxB;;;AC9CD,MAAM,cAAc;AACpB,MAAM,gBAAgB;;;;;;;AAQtB,gBAAuB,mBAAmB,QAAoE;CAC5G,MAAM,EAAE,YAAY,SAAS,UAAU,aAAa,WAAW,WAAW;CAE1E,MAAM,OAAgC;EACpC;EACA,UAAU,SAAS,KAAK,OAAO;GAAE,MAAM,EAAE;GAAM,SAAS,EAAE;GAAS,EAAE;EACtE;AACD,KAAI,YAAa,MAAK,cAAc;CAEpC,MAAM,WAAW,MAAM,UAAU,GAAG,WAAW,sBAAsB;EACnE,QAAQ;EACR,SAAS,EAAE,gBAAgB,oBAAoB;EAC/C,aAAa;EACb,MAAM,KAAK,UAAU,KAAK;EAC1B;EACD,CAAC;AAEF,KAAI,CAAC,SAAS,MAAM,CAAC,SAAS,KAC5B,OAAM,IAAI,MAAM,yDAAyD,SAAS,SAAS;CAG7F,MAAM,SAAS,SAAS,KAAK,WAAW;CACxC,MAAM,UAAU,IAAI,aAAa;CACjC,IAAI,SAAS;AAEb,KAAI;AACF,WAAS;GACP,MAAM,EAAE,MAAM,UAAU,MAAM,OAAO,MAAM;AAC3C,OAAI,KAAM;AACV,aAAU,QAAQ,OAAO,OAAO,EAAE,QAAQ,MAAM,CAAC;GAEjD,IAAI,iBAAiB,OAAO,QAAQ,OAAO;AAC3C,UAAO,mBAAmB,IAAI;IAC5B,MAAM,WAAW,OAAO,MAAM,GAAG,eAAe;AAChD,aAAS,OAAO,MAAM,iBAAiB,EAAE;AACzC,qBAAiB,OAAO,QAAQ,OAAO;IAEvC,MAAM,WAAW,SAAS,MAAM,KAAK,CAAC,MAAM,SAAS,KAAK,WAAW,YAAY,CAAC;AAClF,QAAI,CAAC,SAAU;IAEf,MAAM,OAAO,SAAS,MAAM,EAAmB,CAAC,MAAM;AACtD,QAAI,SAAS,cAAe;IAE5B,MAAM,SAAS,SAAS,KAAK,MAAM,KAAK,CAAa;AACrD,QAAI,OAAQ,OAAM;;;WAGd;AACR,SAAO,aAAa;;;AAIxB,SAAS,SAAS,OAA0C;AAC1D,SAAQ,MAAM,MAAd;EACE,KAAK,eAAe,WAClB,QAAO;GAAE,MAAM;GAAe,OAAO,MAAM,SAAS;GAAI;EAC1D,KAAK,eAAe,YAClB,QAAO;GAAE,MAAM;GAAgB,cAAc,MAAM;GAAc;EACnE,KAAK,eAAe,SAClB,QAAO;GAAE,MAAM;GAAS,SAAS,MAAM,OAAO,WAAW;GAAiB,MAAM,MAAM,OAAO;GAAM;EACrG,KAAK,eAAe,iBAClB,QAAO;GAAE,MAAM;GAAiB,WAAW,MAAM,aAAa;GAAI,MAAM,MAAM,QAAQ;GAAa;EACrG,KAAK,eAAe,mBAClB,QAAO;GAAE,MAAM;GAAQ,WAAW,MAAM,aAAa;GAAI,OAAO,MAAM,SAAS;GAAI;EACrF,KAAK,eAAe,eAClB,QAAO;GAAE,MAAM;GAAe,WAAW,MAAM,aAAa;GAAI;EAClE,KAAK,eAAe,OAClB,QAAO,eAAe,MAAM;EAC9B,QACE,QAAO;;;AAIb,SAAS,eAAe,OAA0C;AAChE,KAAI,CAAC,MAAM,KAAM,QAAO;CACxB,MAAM,QAAQ,MAAM,SAAS,EAAE;AAI/B,KAAI,MAAM,SAAS,WAAW,UAC5B,QAAO;EACL,MAAM;EACN,OAAO,MAAM;EACb,QAAQ,MAAM;EACd,iBAAiB,MAAM;EACxB;AAEH,KAAI,MAAM,SAAS,WAAW,WAC5B,QAAO;EACL,MAAM;EACN,SAAU,MAAM,WAAkC;EAClD,MAAM,MAAM;EACb;AAEH,QAAO;EAAE,MAAM;EAAS,MAAM,MAAM;EAAwB;EAAO;;;;ACnFrE,SAAS,cAAc,QAAiC;AACtD,KAAI,OAAO,OAAQ,QAAO,OAAO;AACjC,KAAI,OAAO,WAAW,YAAa,QAAO,OAAO,SAAS;AAC1D,OAAM,IAAI,MAAM,8EAA8E;;;;;;;AAehG,IAAa,cAAb,MAAa,YAAY;CAQvB;CAGA,YAAoB,QAA2B;iBAFL,EAAE;uBA8HD;GACzC,mBAAmB,MAAA,IAAU,cAAc,YAAY;IAAE,SAAS,KAAK,MAAM;IAAI,WAAW,KAAK,MAAM;IAAW,CAAC;GACnH,YAAY,MAAA,IAAU,cAAc,KAAK;IAAE,SAAS,KAAK,MAAM;IAAI,WAAW,KAAK,MAAM;IAAW,CAAC;GACrG,MAAM,gBAAwB,YAC5B,MAAA,IAAU,cAAc,IAAI;IAAE;IAAgB,WAAW,KAAK,MAAM;IAAW,GAAG;IAAS,CAAC;GAC9F,SAAS,mBAA2B,MAAA,IAAU,cAAc,OAAO;IAAE;IAAgB,WAAW,KAAK,MAAM;IAAW,CAAC;GACxH;gBAG4B;GAC3B,mBAAmB,MAAA,IAAU,eAAe,YAAY;IAAE,WAAW,KAAK,MAAM;IAAW,SAAS,KAAK,MAAM;IAAI,CAAC;GACpH,MAAM,oBAA4B,MAAA,IAAU,eAAe,IAAI,EAAE,iBAAiB,CAAC;GACnF,SAAS,iBAAyB,SAChC,MAAA,IAAU,eAAe,OAAO;IAAE;IAAiB;IAAM,CAAC;GAC5D,cAAc,YAAoB,MAAA,IAAU,eAAe,YAAY,EAAE,SAAS,CAAC;GACnF,aAAa,oBAA4B,MAAA,IAAU,eAAe,WAAW,EAAE,iBAAiB,CAAC;GACjG,eAAe,0BACb,MAAA,IAAU,eAAe,aAAa;IAAE;IAAuB,WAAW,KAAK,MAAM;IAAW,CAAC;GACpG;AA7IC,OAAK,QAAQ,OAAO;AACpB,OAAK,aAAa,OAAO;AACzB,OAAK,SAAS,OAAO;AACrB,OAAK,YAAY,OAAO;AACxB,QAAA,MAAY,gBAAgB,KAAK,YAAY,KAAK,UAAU;;CAG9D,aAAa,KAAK,QAA+C;EAC/D,MAAM,YAAY,OAAO,SAAS,WAAW,MAAM,KAAK,WAAW;EACnE,MAAM,aAAa,aAAa,OAAO,QAAQ;EAC/C,MAAM,SAAS,cAAc,OAAO;EAKpC,MAAM,QAAQ,MADF,gBAAgB,YAAY,UAAU,CAC1B,OAAO,QAAQ;GAAE;GAAQ,MAAM,OAAO;GAAM,CAAC;EACrE,MAAM,SAAS,IAAI,YAAY;GAAE;GAAO;GAAY;GAAQ;GAAW,CAAC;AAExE,QAAM,OAAO,oBAAoB,OAAO,WAAW,QAAQ,MAAM,YAAY;AAC7E,MAAI,OAAO,aAAa,KAAM,QAAO,WAAW;AAEhD,SAAO;;;CAIT,IAAI,YAAoB;AACtB,SAAO,KAAK,MAAM;;;CAIpB,IAAI,WAAmC;AACrC,SAAO,KAAK;;;;;;;CAQd,OAAO,IAAI,SAAiB,UAAsB,EAAE,EAAoC;AACtF,OAAK,QAAQ,KAAK;GAAE,IAAI,OAAO,YAAY;GAAE,MAAM;GAAQ,SAAS;GAAS,CAAC;EAE9E,IAAI,YAAgC;AACpC,aAAW,MAAM,SAAS,mBAAmB;GAC3C,YAAY,KAAK;GACjB,SAAS,KAAK,MAAM;GACpB,UAAU,KAAK;GACf,aAAa,QAAQ;GACrB,WAAW,KAAK;GAChB,QAAQ,QAAQ;GACjB,CAAC,EAAE;AACF,OAAI,MAAM,SAAS,iBAAiB;AAClC,gBAAY;KAAE,IAAI,MAAM,aAAa,OAAO,YAAY;KAAE,MAAM;KAAa,SAAS;KAAI;AAC1F,SAAK,QAAQ,KAAK,UAAU;cACnB,MAAM,SAAS,UAAU,UAClC,WAAU,WAAW,MAAM;AAE7B,SAAM;;;;CAKV,QAAc;AACZ,OAAK,QAAQ,SAAS;;;CAIxB,MAAM,WAAW,QAAsC;AACrD,QAAM,MAAA,IAAU,SAAS,WAAW;GAAE,QAAQ,KAAK;GAAQ,SAAS;GAAQ,CAAC;;;CAI/E,YAAoC;AAClC,SAAO,MAAA,IAAU,SAAS,kBAAkB;;;CAI9C,WAAW,OAAe,UAA6B,EAAE,EAA6B;AACpF,SAAO,MAAA,IAAU,SAAS,WAAW;GAAE;GAAO,QAAQ,KAAK;GAAQ,SAAS,KAAK,MAAM;GAAI,GAAG;GAAS,CAAC;;;;;;;CAQ1G,MAAM,WAA2B,YAA4C;AACtE,OAAK,UAAU,GAAG,KAAK,WAAW,gBAAgB;GACrD,QAAQ;GACR,SAAS,EAAE,gBAAgB,oBAAoB;GAC/C,aAAa;GACb,MAAM,KAAK,UAAU,EAAE,MAAM;IAAE,QAAQ,KAAK;IAAQ,SAAS,KAAK,MAAM;IAAI;IAAW,YAAY,cAAc,EAAE;IAAE,EAAE,CAAC;GACzH,CAAC,CAAC,YAAY,GAEb;;;CAIJ,YAAkB;EAChB,MAAM,SAAS,OAAO,WAAW,cAAc,OAAO,SAAS,SAAS;EACxE,MAAM,YAAY,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO,KAAA;EACzE,MAAM,WAAW,OAAO,aAAa,cAAc,SAAS,WAAW,KAAA;AACvE,OAAK,MAAM,mBAAmB,aAAa;GACzC;GACA;GACA,WAAW,iBAAiB,OAAO;GACnC,oBAAoB,0BAA0B,kBAAkB,CAAC;GAClE,CAAC;AACF,OAAK,eAAe;;;CAItB,cAAc,KAAoB;EAChC,MAAM,UAAU,QAAQ,OAAO,WAAW,cAAc,OAAO,SAAS,OAAO,KAAA;AAC/E,OAAK,MAAM,mBAAmB,eAAe,EAAE,SAAS,CAAC;;;CAI3D,MAAM,aAA4B;AAChC,QAAM,MAAA,IAAU,SAAS,YAAY;;CAwBvC,MAAc,oBAAoB,SAAyC,aAAqC;AAC9G,MAAI,YAAY,MAAO;AACvB,MAAI;AACF,OAAI,YAAY,QAAQ;AAGtB,QAAI,CAAC,YAAa,OAAM,KAAK,WAAW;KAAE,YAAY;KAAM,YAAY;KAAM,CAAC;AAC/E;;AAEF,SAAM,KAAK,WAAW,QAAQ;UACxB;;;;AAQZ,eAAsB,UAAU,QAA+C;AAC7E,QAAO,YAAY,KAAK,OAAO;;;;;;;;;AC/MjC,SAAgB,SAAS,QAAyC;CAChE,MAAM,CAAC,QAAQ,aAAa,SAA6B,KAAK;CAC9D,MAAM,CAAC,UAAU,eAAe,SAAwB,EAAE,CAAC;CAC3D,MAAM,CAAC,aAAa,kBAAkB,SAAS,MAAM;CACrD,MAAM,CAAC,OAAO,YAAY,SAAuB,KAAK;CAEtD,MAAM,EAAE,SAAS,SAAS;CAC1B,MAAM,YAAY,OAAO,OAAO;AAChC,WAAU,UAAU;AAEpB,iBAAgB;EACd,IAAI,SAAS;EACb,IAAI,UAA8B;AAE7B,YAAU,UAAU,QAAQ,CAC9B,MAAM,aAAa;AAClB,OAAI,CAAC,QAAQ;AACN,aAAS,YAAY;AAC1B;;AAEF,aAAU;AACV,aAAU,SAAS;AACnB,YAAS,KAAK;IACd,CACD,OAAO,QAAiB;AACvB,OAAI,OAAQ,UAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,CAAC;IACzE;AAEJ,eAAa;AACX,YAAS;AACJ,YAAS,YAAY;;IAE3B,CAAC,SAAS,KAAK,CAAC;CAEnB,MAAM,MAAM,YACV,OAAO,SAAiB,YAAyB;AAC/C,MAAI,CAAC,OAAQ;AACb,iBAAe,KAAK;AACpB,WAAS,KAAK;AACd,MAAI;AACF,cAAW,MAAM,SAAS,OAAO,IAAI,SAAS,QAAQ,CACpD,KAAI,MAAM,SAAS,UAAU,MAAM,SAAS,gBAC1C,aAAY,CAAC,GAAG,OAAO,SAAS,CAAC;AAGrC,eAAY,CAAC,GAAG,OAAO,SAAS,CAAC;WAC1B,KAAc;AACrB,YAAS,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC,CAAC;YACrD;AACR,kBAAe,MAAM;;IAGzB,CAAC,OAAO,CACT;CAED,MAAM,QAAQ,kBAAkB;AAC9B,UAAQ,OAAO;AACf,cAAY,EAAE,CAAC;IACd,CAAC,OAAO,CAAC;AAEZ,QAAO;EACL;EACA,OAAO,QAAQ,SAAS;EACxB;EACA,SAAS,WAAW;EACpB;EACA;EACA;EACA;EACD"}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cms.ai/brand_brain",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"description": "Client-side SDK for building CMS.ai Brand Brain (Guide) experiences into your own website UI.",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": false,
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/Navless/navless.git",
|
|
11
|
+
"directory": "packages/brand_brain"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"dist",
|
|
15
|
+
"src"
|
|
16
|
+
],
|
|
17
|
+
"main": "./dist/index.cjs",
|
|
18
|
+
"types": "./dist/index.d.cts",
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"import": {
|
|
22
|
+
"types": "./dist/index.d.mts",
|
|
23
|
+
"default": "./dist/index.mjs"
|
|
24
|
+
},
|
|
25
|
+
"require": {
|
|
26
|
+
"types": "./dist/index.d.cts",
|
|
27
|
+
"default": "./dist/index.cjs"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"./react": {
|
|
31
|
+
"import": {
|
|
32
|
+
"types": "./dist/react/index.d.mts",
|
|
33
|
+
"default": "./dist/react/index.mjs"
|
|
34
|
+
},
|
|
35
|
+
"require": {
|
|
36
|
+
"types": "./dist/react/index.d.cts",
|
|
37
|
+
"default": "./dist/react/index.cjs"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"./package.json": "./package.json"
|
|
41
|
+
},
|
|
42
|
+
"publishConfig": {
|
|
43
|
+
"access": "public",
|
|
44
|
+
"registry": "https://registry.npmjs.org"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"react": ">=18",
|
|
48
|
+
"react-dom": ">=18"
|
|
49
|
+
},
|
|
50
|
+
"peerDependenciesMeta": {
|
|
51
|
+
"react": {
|
|
52
|
+
"optional": true
|
|
53
|
+
},
|
|
54
|
+
"react-dom": {
|
|
55
|
+
"optional": true
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"devDependencies": {
|
|
59
|
+
"@orpc/client": "^1.13.6",
|
|
60
|
+
"@orpc/server": "^1.13.6",
|
|
61
|
+
"@types/react": "^19",
|
|
62
|
+
"@types/react-dom": "^19",
|
|
63
|
+
"eslint": "^9",
|
|
64
|
+
"react": "^19",
|
|
65
|
+
"react-dom": "^19",
|
|
66
|
+
"typescript": "^5.9",
|
|
67
|
+
"vitest": "^4.1.6",
|
|
68
|
+
"@navless/eslint-config": "0.0.1",
|
|
69
|
+
"@navless/orpc": "0.0.19",
|
|
70
|
+
"@navless/typescript-config": "0.0.1",
|
|
71
|
+
"@navless/types": "0.0.34"
|
|
72
|
+
},
|
|
73
|
+
"scripts": {
|
|
74
|
+
"build": "tsdown",
|
|
75
|
+
"lint": "eslint .",
|
|
76
|
+
"typecheck": "tsc --noEmit",
|
|
77
|
+
"test": "vitest run",
|
|
78
|
+
"test:watch": "vitest"
|
|
79
|
+
}
|
|
80
|
+
}
|