@viu/emporix-sdk 2.11.0 → 2.13.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/CHANGELOG.md +14 -0
- package/dist/availability.d.cts +1 -1
- package/dist/availability.d.ts +1 -1
- package/dist/cart.d.cts +1 -1
- package/dist/cart.d.ts +1 -1
- package/dist/category.d.cts +1 -1
- package/dist/category.d.ts +1 -1
- package/dist/checkout.d.cts +1 -1
- package/dist/checkout.d.ts +1 -1
- package/dist/{chunk-KVBCTXVH.js → chunk-WW3H7VJ5.js} +10 -6
- package/dist/chunk-WW3H7VJ5.js.map +1 -0
- package/dist/companies.d.cts +1 -1
- package/dist/companies.d.ts +1 -1
- package/dist/contacts.d.cts +1 -1
- package/dist/contacts.d.ts +1 -1
- package/dist/{context-CmShWI_R.d.cts → context-CD7F_LHT.d.cts} +10 -0
- package/dist/{context-CmShWI_R.d.ts → context-CD7F_LHT.d.ts} +10 -0
- package/dist/customer-groups.d.cts +1 -1
- package/dist/customer-groups.d.ts +1 -1
- package/dist/customer.d.cts +1 -1
- package/dist/customer.d.ts +1 -1
- package/dist/index.cjs +58 -29
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +7 -2
- package/dist/index.d.ts +7 -2
- package/dist/index.js +52 -27
- package/dist/index.js.map +1 -1
- package/dist/locations.d.cts +1 -1
- package/dist/locations.d.ts +1 -1
- package/dist/media.d.cts +1 -1
- package/dist/media.d.ts +1 -1
- package/dist/orders.cjs +8 -4
- package/dist/orders.cjs.map +1 -1
- package/dist/orders.d.cts +1 -1
- package/dist/orders.d.ts +1 -1
- package/dist/orders.js +1 -1
- package/dist/payment.d.cts +1 -1
- package/dist/payment.d.ts +1 -1
- package/dist/price.d.cts +1 -1
- package/dist/price.d.ts +1 -1
- package/dist/product.d.cts +1 -1
- package/dist/product.d.ts +1 -1
- package/dist/segment.d.cts +1 -1
- package/dist/segment.d.ts +1 -1
- package/package.json +1 -1
- package/dist/chunk-KVBCTXVH.js.map +0 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/errors.ts","../src/core/config.ts","../src/core/logger.ts","../src/core/auth.ts","../src/core/http.ts","../src/core/require-customer.ts","../src/services/customer.ts","../src/core/context.ts","../src/services/product.ts","../src/services/category.ts","../src/services/cart.ts","../src/services/checkout.ts","../src/services/payment.ts","../src/services/price.ts","../src/services/media.ts","../src/services/segment.ts","../src/services/site.ts","../src/services/session-context.ts","../src/services/companies.ts","../src/services/contacts.ts","../src/services/locations.ts","../src/services/customer-groups.ts","../src/services/orders.ts","../src/services/availability.ts","../src/services/tenant-config.ts","../src/services/client-config.ts","../src/services/shopping-list.ts","../src/services/ai-rag-indexer.ts","../src/services/sequential-id.ts","../src/services/fee.ts","../src/services/cloud-functions.ts","../src/services/webhook.ts","../src/services/schema.ts","../src/services/ai.ts","../src/services/tax.ts","../src/services/coupon.ts","../src/services/reward-points.ts","../src/services/brand.ts","../src/services/label.ts","../src/services/country.ts","../src/services/currency.ts","../src/services/shipping.ts","../src/services/returns.ts","../src/services/sepa-export.ts","../src/services/indexing.ts","../src/services/unit-handling.ts","../src/services/catalog.ts","../src/services/vendor.ts","../src/services/pick-pack.ts","../src/services/customer-admin.ts","../src/services/approval.ts","../package.json","../src/version.ts","../src/client.ts","../src/core/yrn.ts"],"names":["auth","ANON","SERVICE","text","version","setIfDefined"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Keys whose values are stripped from any serialised error body. */\nconst REDACTED_BODY_KEYS = new Set([\n \"access_token\", \"refresh_token\", \"token\", \"customertoken\", \"saastoken\",\n \"secret\", \"client_secret\", \"authorization\", \"password\",\n]);\n\nfunction scrub(body: unknown): unknown {\n if (Array.isArray(body)) return body.map(scrub);\n if (body && typeof body === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(body as Record<string, unknown>)) {\n out[k] = REDACTED_BODY_KEYS.has(k.toLowerCase()) ? \"***redacted***\" : scrub(v);\n }\n return out;\n }\n return body;\n}\n\n/** Base class for every error thrown by the SDK. */\nexport class EmporixError extends Error {\n readonly status: number | undefined;\n readonly body: unknown;\n constructor(message: string, status?: number, body?: unknown) {\n super(message);\n this.name = new.target.name;\n this.status = status;\n this.body = body;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n /** Safe serialisation — token-like body fields are redacted. */\n toJSON(): Record<string, unknown> {\n return { name: this.name, message: this.message, status: this.status, body: scrub(this.body) };\n }\n}\n\n/** 401 — authentication failed or token expired. */\nexport class EmporixAuthError extends EmporixError {}\n/** 403 — authenticated but not permitted. */\nexport class EmporixForbiddenError extends EmporixError {}\n/** 404 — resource not found. */\nexport class EmporixNotFoundError extends EmporixError {}\n/** 400/422 — request validation failed. */\nexport class EmporixValidationError extends EmporixError {}\n/** 5xx — server-side failure. */\nexport class EmporixServerError extends EmporixError {}\n\n/**\n * 403 with a `missing scope: <name>` hint in the body's `details` array.\n * Subclasses {@link EmporixForbiddenError} so existing 403 catches still work.\n */\nexport class EmporixInsufficientScopeError extends EmporixForbiddenError {\n readonly requiredScope: string | undefined;\n constructor(message: string, status: number, body: unknown, requiredScope?: string) {\n super(message, status, body);\n this.requiredScope = requiredScope;\n }\n}\n\nconst SCOPE_HINT_RE = /missing scope[: ]+([a-z0-9._-]+)/i;\n\nfunction extractRequiredScope(body: unknown): string | undefined {\n if (body && typeof body === \"object\" && \"details\" in body) {\n const details = (body as { details?: unknown }).details;\n if (Array.isArray(details)) {\n for (const d of details) {\n if (typeof d === \"string\") {\n const m = d.match(SCOPE_HINT_RE);\n if (m) return m[1];\n }\n }\n }\n }\n return undefined;\n}\n\n/** Maps an HTTP status to the matching {@link EmporixError} subclass. */\nexport function errorFromResponse(status: number, message: string, body: unknown): EmporixError {\n if (status === 401) return new EmporixAuthError(message, status, body);\n if (status === 403) {\n const scope = extractRequiredScope(body);\n if (scope) return new EmporixInsufficientScopeError(message, status, body, scope);\n return new EmporixForbiddenError(message, status, body);\n }\n if (status === 404) return new EmporixNotFoundError(message, status, body);\n if (status === 400 || status === 422) return new EmporixValidationError(message, status, body);\n if (status >= 500) return new EmporixServerError(message, status, body);\n return new EmporixError(message, status, body);\n}\n","import type { LoggerConfig } from \"./logger\";\nimport type { TokenProvider } from \"./auth\";\n\n/** Default Emporix API host. */\nexport const DEFAULT_HOST = \"https://api.emporix.io\";\n\n/**\n * Tenant guard. Emporix docs only state \"always lowercase\"; the 3–16 char\n * `^[a-z][a-z0-9]+$` rule is an SDK-side guard, not a documented constraint.\n */\nconst TENANT_RE = /^[a-z][a-z0-9]{2,15}$/;\n\n/** A client-credentials credential set (service / custom). */\nexport interface ServiceCredentials {\n clientId: string;\n secret: string;\n scope?: string;\n}\n\n/** Storefront credential — anonymous token needs the client id only, no secret. */\nexport interface StorefrontCredentials {\n clientId: string;\n /**\n * Session context bound at anonymous-login time. Required for\n * `prices.matchByContext` to resolve currency/site/country server-side.\n * `targetLocation` is an ISO country code.\n */\n context?: { currency?: string; siteCode?: string; targetLocation?: string };\n}\n\n/** User-supplied SDK configuration. */\nexport interface EmporixConfig {\n tenant: string;\n host?: string;\n credentials: {\n /**\n * Service (client-credentials) credentials. Optional: storefront/SPA apps\n * use only `storefront` (anonymous) + caller-supplied customer tokens and\n * must never ship a backend secret. Required only when a `service`\n * AuthContext is actually used — enforced lazily by the TokenProvider.\n */\n backend?: ServiceCredentials;\n storefront?: StorefrontCredentials;\n custom?: Record<string, ServiceCredentials>;\n };\n tokenProvider?: TokenProvider;\n timeouts?: { connectMs?: number; readMs?: number };\n retry?: { maxAttempts?: number };\n cache?: { expirationBufferSeconds?: number; maxLifetimeSeconds?: number };\n logger?: LoggerConfig;\n}\n\n/** Fully-resolved configuration with defaults applied. */\nexport interface ResolvedConfig {\n tenant: string;\n host: string;\n credentials: EmporixConfig[\"credentials\"];\n tokenProvider: TokenProvider | undefined;\n timeouts: { connectMs: number; readMs: number };\n retry: { maxAttempts: number };\n cache: { expirationBufferSeconds: number; maxLifetimeSeconds: number };\n logger: LoggerConfig | undefined;\n}\n\n/** Validates user config and applies defaults. Throws on invalid tenant/credentials. */\nexport function validateConfig(input: EmporixConfig): ResolvedConfig {\n if (!TENANT_RE.test(input.tenant)) {\n throw new Error(\n `Invalid tenant \"${input.tenant}\": must be lowercase, 3–16 chars, match ^[a-z][a-z0-9]+$`,\n );\n }\n if (!input.credentials) {\n throw new Error(\"credentials is required (provide at least one of backend/storefront/custom)\");\n }\n return {\n tenant: input.tenant,\n host: input.host ?? DEFAULT_HOST,\n credentials: input.credentials,\n tokenProvider: input.tokenProvider,\n timeouts: {\n connectMs: input.timeouts?.connectMs ?? 10_000,\n readMs: input.timeouts?.readMs ?? 60_000,\n },\n retry: { maxAttempts: input.retry?.maxAttempts ?? 3 },\n cache: {\n expirationBufferSeconds: input.cache?.expirationBufferSeconds ?? 60,\n maxLifetimeSeconds: input.cache?.maxLifetimeSeconds ?? 3600,\n },\n logger: input.logger,\n };\n}\n","/** Log severity, low → high. */\nexport type LogLevel = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n\n/** Numeric ordering used for fast comparison. */\nexport const LEVEL: Record<LogLevel, number> = {\n trace: 10, debug: 20, info: 30, warn: 40, error: 50, silent: 60,\n};\n\n/** Services that bind their own logger and are independently level-controllable. */\nexport type ServiceName =\n | \"customer\"\n | \"product\"\n | \"category\"\n | \"cart\"\n | \"checkout\"\n | \"payment\"\n | \"price\"\n | \"media\"\n | \"segment\"\n | \"site\"\n | \"session-context\"\n | \"customer-management\"\n | \"iam\"\n | \"orders\"\n | \"sales-orders\"\n | \"availability\"\n | \"configuration\"\n | \"shopping-list\"\n | \"ai-rag-indexer\"\n | \"sequential-id\"\n | \"fee\"\n | \"webhook\"\n | \"schema\"\n | \"ai\"\n | \"tax\"\n | \"coupon\"\n | \"reward-points\"\n | \"brand\"\n | \"label\"\n | \"country\"\n | \"currency\"\n | \"shipping\"\n | \"returns\"\n | \"sepa-export\"\n | \"indexing\"\n | \"unit-handling\"\n | \"catalog\"\n | \"vendor\"\n | \"pick-pack\"\n | \"customer-admin\"\n | \"approval\"\n | \"cloud-functions\"\n | \"http\"\n | \"auth\";\n\n/** Arbitrary structured fields attached to a log line. */\nexport interface LogFields { [key: string]: unknown; }\n\n/** The logger contract consumers may implement or swap. */\nexport interface Logger {\n level: LogLevel;\n isLevelEnabled(level: LogLevel): boolean;\n trace(msg: string, fields?: LogFields): void;\n debug(msg: string, fields?: LogFields): void;\n info(msg: string, fields?: LogFields): void;\n warn(msg: string, fields?: LogFields): void;\n error(msg: string, fields?: LogFields): void;\n child(bindings: LogFields): Logger;\n}\n\n/** Object form of logger configuration. */\nexport interface LoggerObjectConfig {\n level?: LogLevel;\n services?: Partial<Record<ServiceName, LogLevel>>;\n pretty?: boolean;\n redact?: string[];\n}\n\n/** `false` → noop logger; `Logger` → user-supplied; object → built-in console logger. */\nexport type LoggerConfig = false | Logger | LoggerObjectConfig;\n\nfunction isValidLevel(v: string | undefined): v is LogLevel {\n return v !== undefined && v in LEVEL;\n}\n\n/** Browser-safe env read — `process` is undefined in browsers/edge runtimes. */\nfunction readEnv(name: string): string | undefined {\n try {\n return typeof process !== \"undefined\" && process.env ? process.env[name] : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolves the effective level per service following:\n * env per-service > env global > config.services[svc] > config.level > \"warn\".\n * Runtime `set()` mutates programmatic levels but never overrides env-set ones\n * unless `force` is passed.\n */\nexport class LevelResolver {\n private cfgLevel: LogLevel;\n private cfgServices: Partial<Record<ServiceName, LogLevel>>;\n private forcedServices: Partial<Record<ServiceName, LogLevel>> = {};\n private forcedGlobal: LogLevel | undefined;\n private warned = false;\n\n constructor(\n cfg: LoggerObjectConfig,\n private readonly warn: (msg: string) => void = () => {},\n ) {\n this.cfgLevel = cfg.level ?? \"warn\";\n this.cfgServices = { ...cfg.services };\n }\n\n private envFor(svc: ServiceName): LogLevel | undefined {\n const raw = readEnv(`EMPORIX_LOG_LEVEL_${svc.toUpperCase()}`);\n if (raw === undefined) return undefined;\n if (isValidLevel(raw)) return raw;\n if (!this.warned) {\n this.warned = true;\n this.warn(`Invalid EMPORIX_LOG_LEVEL_${svc.toUpperCase()}=\"${raw}\" ignored`);\n }\n return undefined;\n }\n\n private envGlobal(): LogLevel | undefined {\n const raw = readEnv(\"EMPORIX_LOG_LEVEL\");\n if (raw === undefined) return undefined;\n if (isValidLevel(raw)) return raw;\n if (!this.warned) {\n this.warned = true;\n this.warn(`Invalid EMPORIX_LOG_LEVEL=\"${raw}\" ignored`);\n }\n return undefined;\n }\n\n /**\n * Effective level for a service. Forced overrides (from `set(..., force)`)\n * take precedence over env vars; otherwise env > programmatic config.\n */\n get(svc: ServiceName): LogLevel {\n return (\n this.forcedServices[svc] ??\n this.envFor(svc) ??\n this.forcedGlobal ??\n this.envGlobal() ??\n this.cfgServices[svc] ??\n this.cfgLevel ??\n \"warn\"\n );\n }\n\n /** Numeric effective level for a service. */\n numericLevel(svc: ServiceName): number {\n return LEVEL[this.get(svc)];\n }\n\n /** True if `svc`'s effective level allows emitting at `at`. */\n isAtLeast(svc: ServiceName, at: LogLevel): boolean {\n return this.numericLevel(svc) <= LEVEL[at];\n }\n\n /** Mutates programmatic level (global or one service). Env-set levels are sticky unless `force`. */\n set(level: LogLevel, svc?: ServiceName, force = false): void {\n if (svc) {\n const envBound = readEnv(`EMPORIX_LOG_LEVEL_${svc.toUpperCase()}`) !== undefined;\n if (envBound && !force) {\n this.warn(`Level for \"${svc}\" is env-controlled; pass force to override`);\n return;\n }\n if (force) this.forcedServices[svc] = level;\n else this.cfgServices[svc] = level;\n } else {\n const envBound = readEnv(\"EMPORIX_LOG_LEVEL\") !== undefined;\n if (envBound && !force) {\n this.warn(\"Global level is env-controlled; pass force to override\");\n return;\n }\n if (force) this.forcedGlobal = level;\n else this.cfgLevel = level;\n }\n }\n}\n\n/** Default redaction floor — never reducible. */\nconst DEFAULT_REDACT = new Set([\n \"authorization\", \"password\", \"oldpassword\", \"newpassword\", \"clientsecret\",\n \"secret\", \"access_token\", \"refresh_token\", \"customertoken\", \"saastoken\",\n \"saas-token\", \"bearertoken\", \"apikey\", \"token\",\n]);\n\n/** Deep-clones `value`, replacing redacted keys with a mask. AuthContext token is stripped. */\nexport function redact(value: unknown, extra: string[] = []): unknown {\n const keys = new Set(DEFAULT_REDACT);\n for (const k of extra) keys.add(k.toLowerCase());\n const walk = (v: unknown): unknown => {\n if (Array.isArray(v)) return v.map(walk);\n if (v && typeof v === \"object\") {\n const src = v as Record<string, unknown>;\n // AuthContext: keep only `kind`.\n if (typeof src.kind === \"string\" && \"token\" in src) return { kind: src.kind };\n const out: Record<string, unknown> = {};\n for (const [k, val] of Object.entries(src)) {\n if (keys.has(k.toLowerCase())) {\n out[k] =\n k.toLowerCase() === \"authorization\" && typeof val === \"string\"\n ? \"Bearer ***redacted***\"\n : \"***redacted***\";\n } else {\n out[k] = walk(val);\n }\n }\n return out;\n }\n return v;\n };\n return walk(value);\n}\n\ninterface Sink {\n log: (...a: unknown[]) => void;\n info: (...a: unknown[]) => void;\n warn: (...a: unknown[]) => void;\n error: (...a: unknown[]) => void;\n}\n\nconst EMIT: Record<Exclude<LogLevel, \"silent\">, number> = {\n trace: LEVEL.trace, debug: LEVEL.debug, info: LEVEL.info, warn: LEVEL.warn, error: LEVEL.error,\n};\n\nabstract class BaseLogger implements Logger {\n constructor(\n protected readonly resolver: LevelResolver,\n protected readonly bindings: LogFields,\n protected readonly extraRedact: string[],\n ) {}\n private svc(): ServiceName {\n return (this.bindings.service as ServiceName) ?? \"http\";\n }\n get level(): LogLevel {\n return this.resolver.get(this.svc());\n }\n isLevelEnabled(level: LogLevel): boolean {\n return this.resolver.isAtLeast(this.svc(), level);\n }\n protected abstract emit(\n level: Exclude<LogLevel, \"silent\">,\n msg: string,\n fields: LogFields,\n ): void;\n private at(level: Exclude<LogLevel, \"silent\">, msg: string, fields?: LogFields): void {\n if (this.resolver.numericLevel(this.svc()) > EMIT[level]) return;\n const merged = { ...this.bindings, ...(fields ?? {}) };\n this.emit(level, msg, redact(merged, this.extraRedact) as LogFields);\n }\n trace(m: string, f?: LogFields): void { this.at(\"trace\", m, f); }\n debug(m: string, f?: LogFields): void { this.at(\"debug\", m, f); }\n info(m: string, f?: LogFields): void { this.at(\"info\", m, f); }\n warn(m: string, f?: LogFields): void { this.at(\"warn\", m, f); }\n error(m: string, f?: LogFields): void { this.at(\"error\", m, f); }\n abstract child(bindings: LogFields): Logger;\n}\n\nclass ConsoleLogger extends BaseLogger {\n constructor(\n resolver: LevelResolver,\n bindings: LogFields,\n extra: string[],\n private readonly sink: Sink,\n private readonly pretty: boolean,\n ) {\n super(resolver, bindings, extra);\n }\n protected emit(level: Exclude<LogLevel, \"silent\">, msg: string, fields: LogFields): void {\n if (this.pretty) {\n const fn =\n level === \"error\" ? this.sink.error\n : level === \"warn\" ? this.sink.warn\n : level === \"info\" ? this.sink.info\n : this.sink.log;\n fn(`[${level}] ${msg}`, fields);\n } else {\n this.sink.log(JSON.stringify({ ts: new Date().toISOString(), level, msg, ...fields }));\n }\n }\n child(bindings: LogFields): Logger {\n return new ConsoleLogger(\n this.resolver,\n { ...this.bindings, ...bindings },\n this.extraRedact,\n this.sink,\n this.pretty,\n );\n }\n}\n\nclass NoopLogger implements Logger {\n level: LogLevel = \"silent\";\n isLevelEnabled(): boolean { return false; }\n trace(): void {}\n debug(): void {}\n info(): void {}\n warn(): void {}\n error(): void {}\n child(): Logger { return this; }\n}\n\n/** Creates the built-in console logger. `opts.sink` overrides `console` (used in tests). */\nexport function createConsoleLogger(\n resolver: LevelResolver,\n bindings: LogFields = {},\n opts: { pretty?: boolean; redact?: string[]; sink?: Sink } = {},\n): Logger {\n const pretty = opts.pretty ?? readEnv(\"NODE_ENV\") !== \"production\";\n const sink: Sink = opts.sink ?? {\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error,\n };\n return new ConsoleLogger(resolver, bindings, opts.redact ?? [], sink, pretty);\n}\n\n/** Creates a logger that discards everything. */\nexport function createNoopLogger(): Logger {\n return new NoopLogger();\n}\n","import type { ResolvedConfig, ServiceCredentials } from \"./config\";\nimport { EmporixAuthError } from \"./errors\";\n\n/** Which token a call should use. */\nexport type AuthKind = \"service\" | \"customer\" | \"anonymous\" | \"raw\";\n\n/** Caller-supplied, per-call auth selector. Never stored on the client. */\nexport type AuthContext =\n | { kind: \"service\"; credentials?: string }\n | { kind: \"anonymous\" }\n | { kind: \"customer\"; token: string }\n | { kind: \"raw\"; token: string };\n\n/**\n * Supplies a fresh customer token when a `customer`-kind request 401s. The host\n * (e.g. EmporixProvider) implements this; the SDK never refreshes the\n * caller-owned customer token unless a refresher is registered.\n */\nexport interface CustomerTokenRefresher {\n /**\n * Called on a `customer`-kind 401. Receives the token that just failed;\n * returns a fresh customer token to retry with, or `null` to give up (the\n * 401 then propagates as EmporixAuthError).\n */\n refresh(expiredToken: string): Promise<string | null>;\n}\n\n/** An obtained anonymous storefront session. */\nexport interface AnonymousSession {\n accessToken: string;\n refreshToken: string;\n sessionId: string;\n expiresIn: number;\n}\n\n/**\n * Persistence callback for anonymous sessions. `read` is called once on the\n * first need for an anonymous token to bootstrap a possibly-existing session;\n * `write` is called after every successful login or refresh. `write(null)`\n * means the SDK is invalidating the stored session.\n */\nexport interface AnonymousSessionStore {\n read(): { refreshToken: string; sessionId: string } | null;\n write(session: { refreshToken: string; sessionId: string } | null): void;\n}\n\n/** Supplies SDK-managed tokens (service/custom + anonymous). May be user-injected. */\nexport interface TokenProvider {\n /** Service/custom client-credentials token for the named credential set. */\n getToken(credentialSet: string): Promise<string>;\n /** Cached anonymous storefront session (preserves sessionId across refreshes). */\n getAnonymousToken(): Promise<AnonymousSession>;\n /** Refresh the anonymous session, preserving sessionId. */\n refreshAnonymous?(): Promise<AnonymousSession>;\n /** Invalidate a cached SDK-managed token so the next call re-auths. */\n invalidate?(credentialSet: string): void;\n /** Invalidate the cached anonymous session entirely (next call re-logs in). */\n invalidateAnonymous?(): void;\n /**\n * Mark the anonymous access token stale but keep the refresh token, so the\n * next {@link getAnonymousToken} refreshes (preserving sessionId) rather\n * than starting a brand-new session.\n */\n expireAnonymous?(): void;\n /**\n * Install a persistence adapter for the anonymous session. The host (e.g.\n * `EmporixProvider`) calls this at construction so the SDK can bootstrap\n * an existing session and persist refreshes. Idempotent: a later call\n * replaces the previous adapter.\n */\n attachAnonymousStore?(store: AnonymousSessionStore): void;\n /**\n * Override the storefront context (currency/site/country) used for the next\n * anonymous login, then invalidate the current anonymous session so it\n * re-mints with the new context. No-op for providers without anon support.\n */\n setAnonymousContext?(ctx: {\n currency?: string;\n siteCode?: string;\n targetLocation?: string;\n }): void;\n /**\n * Subscribe to token-refresh events. Optional — implementations may no-op.\n * Returns an unsubscribe function. `DefaultTokenProvider` emits for the\n * anonymous-login / anonymous-refresh paths.\n */\n onRefresh?(\n listener: (event: { kind: \"anonymous\" | \"customer\"; success: boolean }) => void,\n ): () => void;\n}\n\n/** Tiny constructors for {@link AuthContext}. */\nexport const auth = {\n /** Service/custom credential set (default `backend`). */\n service: (credentials?: string): AuthContext =>\n credentials === undefined ? { kind: \"service\" } : { kind: \"service\", credentials },\n /** Cached anonymous storefront token. */\n anonymous: (): AuthContext => ({ kind: \"anonymous\" }),\n /** Caller-owned customer bearer token. */\n customer: (token: string): AuthContext => ({ kind: \"customer\", token }),\n /** Exact token, no transformation (SSO / token-exchange). */\n raw: (token: string): AuthContext => ({ kind: \"raw\", token }),\n};\n\n/** Resolves an {@link AuthContext} to a concrete bearer token. */\nexport async function resolveToken(ctx: AuthContext, provider: TokenProvider): Promise<string> {\n switch (ctx.kind) {\n case \"service\":\n return provider.getToken(ctx.credentials ?? \"backend\");\n case \"anonymous\":\n return (await provider.getAnonymousToken()).accessToken;\n case \"customer\":\n case \"raw\":\n return ctx.token;\n }\n}\n\n/**\n * Late-bindable, single-flight holder for an optional\n * {@link CustomerTokenRefresher}. Single-flight is required because Emporix\n * rotates the refresh token on each refresh — concurrent refreshes would\n * invalidate each other. Off (returns `null`) until a refresher is set.\n */\nexport class CustomerRefreshRegistry {\n private refresher: CustomerTokenRefresher | null = null;\n private inflight: Promise<string | null> | null = null;\n\n set(refresher: CustomerTokenRefresher | null): void {\n this.refresher = refresher;\n }\n\n get enabled(): boolean {\n return this.refresher !== null;\n }\n\n /** Concurrent callers share one in-flight refresh. */\n refresh(expiredToken: string): Promise<string | null> {\n if (!this.refresher) return Promise.resolve(null);\n if (this.inflight) return this.inflight;\n const p = Promise.resolve(this.refresher.refresh(expiredToken)).finally(() => {\n this.inflight = null;\n });\n this.inflight = p;\n return p;\n }\n}\n\ninterface CacheEntry {\n token: string;\n expiresAt: number;\n obtainedAt: number;\n}\n\n/** SDK-owned token provider: client-credentials service tokens + anonymous session. */\nexport class DefaultTokenProvider implements TokenProvider {\n private readonly serviceCache = new Map<string, CacheEntry>();\n private readonly serviceLocks = new Map<string, Promise<string>>();\n private anon: (AnonymousSession & { expiresAt: number }) | undefined;\n private anonLock: Promise<AnonymousSession> | undefined;\n private anonStore?: AnonymousSessionStore;\n private contextOverride:\n | { currency?: string; siteCode?: string; targetLocation?: string }\n | undefined;\n private readonly refreshListeners = new Set<\n (event: { kind: \"anonymous\" | \"customer\"; success: boolean }) => void\n >();\n\n constructor(private readonly cfg: ResolvedConfig) {}\n\n onRefresh(\n listener: (event: { kind: \"anonymous\" | \"customer\"; success: boolean }) => void,\n ): () => void {\n this.refreshListeners.add(listener);\n return () => {\n this.refreshListeners.delete(listener);\n };\n }\n\n private notifyRefresh(kind: \"anonymous\" | \"customer\", success: boolean): void {\n for (const l of this.refreshListeners) {\n try {\n l({ kind, success });\n } catch {\n // Never let a telemetry listener break the auth path.\n }\n }\n }\n\n attachAnonymousStore(store: AnonymousSessionStore): void {\n this.anonStore = store;\n // Bootstrap `this.anon` from the store if we don't have it yet. The seeded\n // session has expiresAt = 0 so the next getAnonymousToken triggers a refresh\n // (which preserves sessionId) instead of a fresh login.\n if (!this.anon) {\n const persisted = store.read();\n if (persisted) {\n this.anon = {\n accessToken: \"\",\n refreshToken: persisted.refreshToken,\n sessionId: persisted.sessionId,\n expiresIn: 0,\n expiresAt: 0,\n };\n }\n }\n }\n\n private creds(set: string): ServiceCredentials {\n if (set === \"backend\") {\n const b = this.cfg.credentials.backend;\n if (!b?.clientId || !b.secret) {\n throw new EmporixAuthError(\n \"A 'service' AuthContext was used but credentials.backend is not configured\",\n );\n }\n return b;\n }\n const c = this.cfg.credentials.custom?.[set];\n if (!c) throw new Error(`Unknown credential set \"${set}\"`);\n return c;\n }\n\n private fresh(e: CacheEntry | undefined): boolean {\n if (!e) return false;\n const now = Date.now();\n if (now - e.obtainedAt >= this.cfg.cache.maxLifetimeSeconds * 1000) return false;\n return now < e.expiresAt;\n }\n\n async getToken(set: string): Promise<string> {\n // Surface an unknown credential set before entering the cache/lock path.\n this.creds(set);\n const cached = this.serviceCache.get(set);\n if (this.fresh(cached)) return cached!.token;\n const inflight = this.serviceLocks.get(set);\n if (inflight) return inflight;\n const p = this.requestServiceToken(set).finally(() => this.serviceLocks.delete(set));\n this.serviceLocks.set(set, p);\n return p;\n }\n\n private async requestServiceToken(set: string): Promise<string> {\n const c = this.creds(set);\n const body = new URLSearchParams({\n grant_type: \"client_credentials\",\n client_id: c.clientId,\n client_secret: c.secret,\n });\n if (c.scope) body.set(\"scope\", c.scope);\n const res = await fetch(`${this.cfg.host}/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body,\n });\n const json = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n if (!res.ok) {\n throw new EmporixAuthError(`Token request failed for \"${set}\"`, res.status, json);\n }\n const obtainedAt = Date.now();\n const ttl = Number((json.expires_in as number | undefined) ?? 3600);\n this.serviceCache.set(set, {\n token: json.access_token as string,\n obtainedAt,\n expiresAt: obtainedAt + (ttl - this.cfg.cache.expirationBufferSeconds) * 1000,\n });\n return this.serviceCache.get(set)!.token;\n }\n\n invalidate(set: string): void {\n this.serviceCache.delete(set);\n }\n\n private anonFresh(): boolean {\n return !!this.anon && Date.now() < this.anon.expiresAt;\n }\n\n async getAnonymousToken(): Promise<AnonymousSession> {\n if (this.anonFresh()) return this.stripExpiry(this.anon!);\n if (this.anonLock) return this.anonLock;\n // Token expired but a refresh token survives → refresh to keep the same\n // sessionId; only fall back to a brand-new login if the refresh fails.\n const canRefresh = !!this.anon?.refreshToken;\n const obtain = canRefresh\n ? this.fetchAnonymous(\"refresh\").catch(() => this.fetchAnonymous(\"login\"))\n : this.fetchAnonymous(\"login\");\n const p = obtain.finally(() => {\n this.anonLock = undefined;\n });\n this.anonLock = p;\n return p;\n }\n\n /** Refreshes the anonymous session, preserving its sessionId. */\n async refreshAnonymous(): Promise<AnonymousSession> {\n if (!this.anon) return this.getAnonymousToken();\n return this.fetchAnonymous(\"refresh\");\n }\n\n invalidateAnonymous(): void {\n this.anon = undefined;\n this.anonStore?.write(null);\n }\n\n setAnonymousContext(ctx: {\n currency?: string;\n siteCode?: string;\n targetLocation?: string;\n }): void {\n const base = this.contextOverride ?? this.cfg.credentials.storefront?.context ?? {};\n this.contextOverride = { ...base, ...ctx };\n this.invalidateAnonymous();\n }\n\n /** Force a stale access token while keeping the refresh token + sessionId. */\n expireAnonymous(): void {\n if (this.anon) this.anon = { ...this.anon, expiresAt: 0 };\n }\n\n private stripExpiry(s: AnonymousSession & { expiresAt: number }): AnonymousSession {\n const { expiresAt: _expiresAt, ...rest } = s;\n return rest;\n }\n\n private async fetchAnonymous(mode: \"login\" | \"refresh\"): Promise<AnonymousSession> {\n const sf = this.cfg.credentials.storefront;\n if (!sf?.clientId) {\n throw new Error(\"credentials.storefront.clientId is required for anonymous tokens\");\n }\n const url = new URL(`${this.cfg.host}/customerlogin/auth/anonymous/${mode}`);\n url.searchParams.set(\"tenant\", this.cfg.tenant);\n url.searchParams.set(\"client_id\", sf.clientId);\n // Context is the runtime override (set via setAnonymousContext) if present,\n // else the config-fixed context.\n const c = this.contextOverride ?? sf.context;\n if (c?.currency) url.searchParams.set(\"currency\", c.currency);\n if (c?.siteCode) url.searchParams.set(\"siteCode\", c.siteCode);\n if (c?.targetLocation) url.searchParams.set(\"targetLocation\", c.targetLocation);\n if (mode === \"refresh\" && this.anon) {\n url.searchParams.set(\"refresh_token\", this.anon.refreshToken);\n }\n try {\n const res = await fetch(url, { method: \"GET\" });\n const json = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n if (!res.ok) {\n this.notifyRefresh(\"anonymous\", false);\n throw new EmporixAuthError(`Anonymous token ${mode} failed`, res.status, json);\n }\n const obtainedAt = Date.now();\n this.anon = {\n accessToken: json.access_token as string,\n refreshToken: json.refresh_token as string,\n sessionId: json.sessionId as string,\n expiresIn: json.expires_in as number,\n expiresAt:\n obtainedAt +\n ((json.expires_in as number) - this.cfg.cache.expirationBufferSeconds) * 1000,\n };\n this.anonStore?.write({\n refreshToken: this.anon.refreshToken,\n sessionId: this.anon.sessionId,\n });\n this.notifyRefresh(\"anonymous\", true);\n return this.stripExpiry(this.anon);\n } catch (err) {\n // Re-throw EmporixAuthError as-is; for non-Emporix errors (network), also notify.\n if (!(err instanceof EmporixAuthError)) {\n this.notifyRefresh(\"anonymous\", false);\n }\n throw err;\n }\n }\n}\n// Customer-token refreshes happen via client.customers.refresh() and don't\n// route through this TokenProvider — only the anonymous flow notifies.\n// React-side useCustomerSession.refresh emits its own telemetry event in a\n// follow-up if needed.\n","import {\n type AuthContext,\n type TokenProvider,\n type CustomerRefreshRegistry,\n resolveToken,\n} from \"./auth\";\nimport { errorFromResponse } from \"./errors\";\nimport type { Logger } from \"./logger\";\n\n/** A single HTTP request through the SDK. */\nexport interface RequestOptions {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n path: string;\n auth: AuthContext;\n query?: Record<string, string | number | undefined>;\n body?: unknown;\n /** Extra request headers (merged before auth; cannot override Authorization). */\n headers?: Record<string, string>;\n /** Per-request abort timeout override (ms). */\n timeoutMs?: number;\n}\n\n/** Construction options for {@link HttpClient}. */\nexport interface HttpClientOptions {\n host: string;\n provider: TokenProvider;\n logger: Logger;\n retry: { maxAttempts: number };\n timeouts: { connectMs: number; readMs: number };\n /** Override the retry backoff delay (ms → Promise). Defaults to a real timer. */\n sleep?: (ms: number) => Promise<void>;\n /** Opt-in customer-token refresher registry (off unless a refresher is set). */\n customerRefresh?: CustomerRefreshRegistry;\n}\n\nlet requestSeq = 0;\n\nfunction safeJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n/** Fetch wrapper: auth resolution, JSON parsing, typed error mapping, logging. */\nexport class HttpClient {\n private readonly sleep: (ms: number) => Promise<void>;\n constructor(private readonly opts: HttpClientOptions) {\n this.sleep =\n opts.sleep ?? ((ms: number) => new Promise<void>((r) => setTimeout(r, ms)));\n }\n\n async request<T = unknown>(o: RequestOptions): Promise<T> {\n const requestId = `req-${++requestSeq}`;\n const log = this.opts.logger.child({ requestId });\n const url = new URL(this.opts.host + o.path);\n for (const [k, v] of Object.entries(o.query ?? {})) {\n if (v !== undefined) url.searchParams.set(k, String(v));\n }\n const sdkManaged = o.auth.kind === \"service\" || o.auth.kind === \"anonymous\";\n const maxAttempts = this.opts.retry.maxAttempts;\n let reauthed = false;\n let customerToken = o.auth.kind === \"customer\" ? o.auth.token : undefined;\n let customerReauthed = false;\n\n for (let attempt = 1; ; attempt++) {\n const token = customerToken ?? (await resolveToken(o.auth, this.opts.provider));\n log.debug(\"http request\", {\n authKind: o.auth.kind,\n method: o.method,\n url: url.pathname,\n attempt,\n });\n\n const controller = new AbortController();\n const timer = setTimeout(\n () => controller.abort(),\n o.timeoutMs ?? this.opts.timeouts.readMs,\n );\n const isFormData =\n typeof FormData !== \"undefined\" && o.body instanceof FormData;\n const init: RequestInit = {\n method: o.method,\n headers: {\n ...(o.headers ?? {}),\n Authorization: `Bearer ${token}`,\n // JSON bodies: set Content-Type. FormData bodies: let `fetch`\n // emit `multipart/form-data; boundary=...` itself.\n ...(o.body !== undefined && !isFormData\n ? { \"Content-Type\": \"application/json\" }\n : {}),\n },\n signal: controller.signal,\n };\n if (o.body !== undefined) {\n init.body = isFormData ? (o.body as FormData) : JSON.stringify(o.body);\n }\n let res: Response;\n try {\n res = await fetch(url, init);\n } finally {\n clearTimeout(timer);\n }\n\n const text = await res.text();\n const parsed = text ? safeJson(text) : undefined;\n if (res.ok) {\n log.debug(\"http ok\", { status: res.status });\n return parsed as T;\n }\n\n // 401 asymmetry.\n if (res.status === 401) {\n if (sdkManaged && !reauthed) {\n reauthed = true;\n if (o.auth.kind === \"service\") {\n this.opts.provider.invalidate?.(o.auth.credentials ?? \"backend\");\n } else if (this.opts.provider.expireAnonymous) {\n // Keep the refresh token so the retry refreshes (same sessionId)\n // instead of starting a new anonymous session.\n this.opts.provider.expireAnonymous();\n } else {\n this.opts.provider.invalidateAnonymous?.();\n }\n log.warn(\"sdk-managed 401, re-authing once\", { authKind: o.auth.kind });\n continue;\n }\n if (\n o.auth.kind === \"customer\" &&\n !customerReauthed &&\n this.opts.customerRefresh?.enabled\n ) {\n customerReauthed = true;\n const fresh = await this.opts.customerRefresh.refresh(customerToken!);\n if (fresh) {\n customerToken = fresh;\n log.warn(\"customer 401, refreshed once\", { authKind: o.auth.kind });\n continue;\n }\n }\n throw errorFromResponse(res.status, `${o.method} ${o.path} → 401`, parsed);\n }\n\n // Retry 5xx / 429.\n const retryable = res.status >= 500 || res.status === 429;\n if (retryable && attempt < maxAttempts) {\n const retryAfter = Number(res.headers.get(\"Retry-After\"));\n const backoff =\n Number.isFinite(retryAfter) && retryAfter >= 0\n ? retryAfter * 1000\n : Math.min(1000 * 2 ** (attempt - 1), 8000) + Math.random() * 100;\n log.warn(\"retryable failure\", { status: res.status, attempt, backoffMs: backoff });\n await this.sleep(backoff);\n continue;\n }\n\n log.error(\"http error (final)\", { status: res.status, attempt });\n throw errorFromResponse(res.status, `${o.method} ${o.path} → ${res.status}`, parsed);\n }\n }\n\n /**\n * Single-shot fetch that returns the raw {@link Response} unparsed. Used by\n * endpoints whose responses are not JSON (binary downloads, redirect-only\n * endpoints). Skips the retry-on-5xx and 401-reauth-once paths intentionally\n * — those depend on parsing the JSON error body, which a raw consumer must\n * handle itself if needed. Auth resolution + timeout + logging are still\n * applied.\n *\n * `extra.redirect` is forwarded to `fetch` so callers can use `'manual'` to\n * capture 30x responses with their `Location` header (Node fetch exposes\n * the header in this mode; browser fetch returns an opaque response).\n */\n async requestRaw(\n o: RequestOptions,\n extra?: { redirect?: \"follow\" | \"manual\" | \"error\" },\n ): Promise<Response> {\n const requestId = `req-${++requestSeq}`;\n const log = this.opts.logger.child({ requestId });\n const url = new URL(this.opts.host + o.path);\n for (const [k, v] of Object.entries(o.query ?? {})) {\n if (v !== undefined) url.searchParams.set(k, String(v));\n }\n const token = await resolveToken(o.auth, this.opts.provider);\n log.debug(\"http requestRaw\", {\n authKind: o.auth.kind,\n method: o.method,\n url: url.pathname,\n redirect: extra?.redirect ?? \"follow\",\n });\n const controller = new AbortController();\n const timer = setTimeout(\n () => controller.abort(),\n o.timeoutMs ?? this.opts.timeouts.readMs,\n );\n const isFormData =\n typeof FormData !== \"undefined\" && o.body instanceof FormData;\n const init: RequestInit = {\n method: o.method,\n headers: {\n ...(o.headers ?? {}),\n Authorization: `Bearer ${token}`,\n ...(o.body !== undefined && !isFormData\n ? { \"Content-Type\": \"application/json\" }\n : {}),\n },\n signal: controller.signal,\n ...(extra?.redirect ? { redirect: extra.redirect } : {}),\n };\n if (o.body !== undefined) {\n init.body = isFormData ? (o.body as FormData) : JSON.stringify(o.body);\n }\n try {\n return await fetch(url, init);\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","import type { AuthContext } from \"./auth\";\nimport { EmporixAuthError } from \"./errors\";\n\n/**\n * Enforces a caller-owned customer or raw token. Throws `EmporixAuthError`\n * for any other `AuthContext` kind (or when `auth` is missing). Shared by\n * services whose endpoints require a customer scope (`/me`, payments,\n * customer-segments…).\n */\nexport function requireCustomer(auth: AuthContext | undefined): AuthContext {\n if (auth && (auth.kind === \"customer\" || auth.kind === \"raw\")) return auth;\n throw new EmporixAuthError(\"This operation requires a customer or raw AuthContext\");\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext, AnonymousSession } from \"../core/auth\";\nimport { EmporixAuthError } from \"../core/errors\";\nimport { requireCustomer } from \"../core/require-customer\";\nimport type {\n Customer as GeneratedCustomer,\n Address as GeneratedAddress,\n CustomerSignup,\n CustomerUpdateDto,\n PasswordChangeDto,\n PasswordResetRequestDto,\n PasswordUpdate,\n AddressCreateDto,\n AddressUpdateDto,\n} from \"../generated/customer\";\n\n/**\n * Caller-owned customer session. Maps the Emporix `CustomerToken` wire shape to\n * idiomatic names: `access_token` → `customerToken`, `saas_token` →\n * `saasToken`. `saasToken` is a JWT required for the checkout (`saas-token`\n * header). The wire's `*_token` (snake_case) fields are canonical; the\n * camelCase variants are deprecated in the Emporix spec.\n */\nexport interface CustomerSession {\n customerToken: string;\n /** JWT required for completing checkout (sent as the `saas-token` header). */\n saasToken: string;\n refreshToken: string;\n /** Same session as the anonymous token — preserves the cart across login. */\n sessionId: string | undefined;\n /** Customer access-token lifetime in seconds. */\n expiresIn: number | undefined;\n /** Only set by `socialLogin`: the IdP access token echoed by Emporix. */\n socialAccessToken?: string;\n /** Only set by `socialLogin`: the IdP ID token echoed by Emporix. */\n socialIdToken?: string;\n}\n\n/** Customer profile as returned by the Customer service (all generated fields). */\nexport type Customer = GeneratedCustomer;\n\n/** A customer address as returned by the Customer service (all generated fields). */\nexport type Address = GeneratedAddress;\n\n/** Generated request bodies (caller sends the exact wire shape). */\nexport type CustomerSignupInput = CustomerSignup;\nexport type CustomerUpdateInput = CustomerUpdateDto;\nexport type PasswordChangeInput = PasswordChangeDto;\nexport type PasswordResetRequestInput = PasswordResetRequestDto;\nexport type PasswordResetConfirmInput = PasswordUpdate;\nexport type AddressCreateInput = AddressCreateDto;\nexport type AddressUpdateInput = AddressUpdateDto;\n\n/** Customer signup, session, profile and addresses. */\nexport class CustomerService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Obtains an anonymous storefront session (accessToken + sessionId + refreshToken). */\n async anonymous(): Promise<AnonymousSession> {\n return this.ctx.tokenProvider.getAnonymousToken();\n }\n\n /** Registers a customer. Default auth: anonymous. */\n async signup(\n input: CustomerSignupInput,\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<Customer> {\n return this.ctx.http.request<Customer>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/signup`,\n auth,\n body: input,\n });\n }\n\n /**\n * Logs a customer in. Threads the anonymous token so the session (and its\n * cart) survives — losing it silently creates a new session per Emporix docs.\n * Wire `accessToken` is mapped to `customerToken`.\n */\n async login(\n creds: { email: string; password: string },\n opts: { anonymousToken?: string } = {},\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<CustomerSession> {\n const effective: AuthContext = opts.anonymousToken\n ? { kind: \"raw\", token: opts.anonymousToken }\n : auth;\n const wire = await this.ctx.http.request<{\n access_token?: string;\n saas_token?: string;\n refresh_token?: string;\n session_id?: string;\n expires_in?: number;\n // Deprecated camelCase variants (Emporix spec marks these deprecated).\n accessToken?: string;\n saasToken?: string;\n refreshToken?: string;\n }>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/login`,\n auth: effective,\n body: creds,\n });\n // Wire→facade mapping. snake_case is canonical; camelCase is the\n // deprecated fallback (see design §2 — vendored spec is source of truth).\n return {\n customerToken: wire.access_token ?? wire.accessToken ?? \"\",\n saasToken: wire.saas_token ?? wire.saasToken ?? \"\",\n refreshToken: wire.refresh_token ?? wire.refreshToken ?? \"\",\n sessionId: wire.session_id,\n expiresIn: wire.expires_in,\n };\n }\n\n /**\n * Refreshes an authenticated customer session via its refresh token,\n * preserving the same `sessionId`. Calls\n * `GET /customer/{tenant}/refreshauthtoken?refreshToken=…`, which **must be\n * authorized with an anonymous token** (default auth: anonymous) — not the\n * expired customer token. The refresh response does **not** include a\n * `saas_token`; pass the original `saasToken` to carry it forward (it has\n * its own, independent lifetime).\n */\n async refresh(\n input: { refreshToken: string; saasToken?: string; legalEntityId?: string },\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<CustomerSession> {\n const query: Record<string, string> = { refreshToken: input.refreshToken };\n if (input.legalEntityId) query.legalEntityId = input.legalEntityId;\n const wire = await this.ctx.http.request<{\n access_token?: string;\n refresh_token?: string;\n session_id?: string;\n expires_in?: number;\n // Deprecated camelCase variants (Emporix spec marks these deprecated).\n accessToken?: string;\n refreshToken?: string;\n }>({\n method: \"GET\",\n path: `/customer/${this.ctx.tenant}/refreshauthtoken`,\n query,\n auth,\n });\n return {\n customerToken: wire.access_token ?? wire.accessToken ?? \"\",\n // Refresh does not return a saas_token — carry the original forward.\n saasToken: input.saasToken ?? \"\",\n refreshToken: wire.refresh_token ?? wire.refreshToken ?? \"\",\n sessionId: wire.session_id,\n expiresIn: wire.expires_in,\n };\n }\n\n /**\n * Logs the customer out server-side: `GET /customer/{tenant}/logout?\n * accessToken=…` authorized with the customer token. Invalidates the\n * access token (204 No Content). Requires customer/raw auth — the token is\n * sent both as the bearer and the `accessToken` query param (per Emporix).\n */\n async logout(auth?: AuthContext): Promise<void> {\n const ctx = requireCustomer(auth);\n const token = (ctx as { token: string }).token;\n await this.ctx.http.request<void>({\n method: \"GET\",\n path: `/customer/${this.ctx.tenant}/logout`,\n query: { accessToken: token },\n auth: ctx,\n });\n }\n\n /**\n * Authorization-Code SSO: exchanges the IdP `code` for an Emporix customer\n * session via `POST /customer/{tenant}/socialLogin`. The browser performs\n * the IdP redirect itself; the SDK only does this Emporix exchange.\n * Default auth: anonymous (Emporix requires an anonymous Bearer). The\n * response has no `session_id` and returns `expires_in` as a string —\n * normalized to a number here.\n */\n async socialLogin(\n input: { code: string; redirectUri: string; codeVerifier?: string; sessionId?: string },\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<CustomerSession> {\n const query: Record<string, string> = {\n code: input.code,\n redirect_uri: input.redirectUri,\n };\n if (input.codeVerifier) query.code_verifier = input.codeVerifier;\n const wire = await this.ctx.http.request<{\n social_access_token?: string;\n social_id_token?: string;\n access_token?: string;\n saas_token?: string;\n refresh_token?: string;\n session_id?: string;\n expires_in?: string | number;\n // Deprecated camelCase variants (Emporix spec marks these deprecated).\n accessToken?: string;\n saasToken?: string;\n refreshToken?: string;\n }>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/socialLogin`,\n query,\n auth,\n ...(input.sessionId ? { headers: { \"session-id\": input.sessionId } } : {}),\n });\n return {\n customerToken: wire.access_token ?? wire.accessToken ?? \"\",\n saasToken: wire.saas_token ?? wire.saasToken ?? \"\",\n refreshToken: wire.refresh_token ?? wire.refreshToken ?? \"\",\n sessionId: wire.session_id,\n expiresIn: wire.expires_in != null ? Number(wire.expires_in) : undefined,\n ...(wire.social_access_token ? { socialAccessToken: wire.social_access_token } : {}),\n ...(wire.social_id_token ? { socialIdToken: wire.social_id_token } : {}),\n };\n }\n\n /**\n * RFC 8693 token exchange: exchanges an external IdP JWT for an Emporix\n * customer session via `POST /customer/{tenant}/exchangeauthtoken`.\n * Emporix uses a proprietary query-param wire (not the RFC form body).\n * Default auth: anonymous. `config` selects a site-specific IdP config\n * (multi-site); omit for the tenant default. Returns `session_id` and a\n * fresh `saas_token`; `expires_in` is an integer (normalized anyway).\n */\n async exchangeToken(\n input: { subjectToken: string; config?: string },\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<CustomerSession> {\n const query: Record<string, string> = { subjectAccessToken: input.subjectToken };\n if (input.config) query.config = input.config;\n const wire = await this.ctx.http.request<{\n access_token?: string;\n saas_token?: string;\n refresh_token?: string;\n session_id?: string;\n expires_in?: string | number;\n accessToken?: string;\n saasToken?: string;\n refreshToken?: string;\n }>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/exchangeauthtoken`,\n query,\n auth,\n });\n return {\n customerToken: wire.access_token ?? wire.accessToken ?? \"\",\n saasToken: wire.saas_token ?? wire.saasToken ?? \"\",\n refreshToken: wire.refresh_token ?? wire.refreshToken ?? \"\",\n sessionId: wire.session_id,\n expiresIn: wire.expires_in != null ? Number(wire.expires_in) : undefined,\n };\n }\n\n /** Returns the authenticated customer. Requires customer/raw auth. */\n async me(auth?: AuthContext): Promise<Customer> {\n return this.ctx.http.request<Customer>({\n method: \"GET\",\n path: `/customer/${this.ctx.tenant}/me`,\n auth: requireCustomer(auth),\n });\n }\n\n /** Updates the authenticated customer. Requires customer/raw auth. */\n async update(patch: CustomerUpdateInput, auth?: AuthContext): Promise<Customer> {\n return this.ctx.http.request<Customer>({\n method: \"PUT\",\n path: `/customer/${this.ctx.tenant}/me`,\n auth: requireCustomer(auth),\n body: patch,\n });\n }\n\n /** Changes the password. Requires customer/raw auth. */\n async changePassword(input: PasswordChangeInput, auth?: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `/customer/${this.ctx.tenant}/password`,\n auth: requireCustomer(auth),\n body: input,\n });\n }\n\n /** Requests a password reset email. Default auth: anonymous. */\n async requestPasswordReset(\n input: PasswordResetRequestInput,\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/password/reset`,\n auth,\n body: input,\n });\n }\n\n /** Confirms a password reset. Default auth: anonymous. */\n async confirmPasswordReset(\n input: PasswordResetConfirmInput,\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/password/reset/confirm`,\n auth,\n body: input,\n });\n }\n\n /** Address sub-resource. All operations require customer/raw auth. */\n readonly addresses = {\n list: async (auth?: AuthContext): Promise<Address[]> =>\n this.ctx.http.request<Address[]>({\n method: \"GET\",\n path: `/customer/${this.ctx.tenant}/me/addresses`,\n auth: requireCustomer(auth),\n }),\n add: async (address: AddressCreateInput, auth?: AuthContext): Promise<Address> =>\n this.ctx.http.request<Address>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/me/addresses`,\n auth: requireCustomer(auth),\n body: address,\n }),\n update: async (id: string, patch: AddressUpdateInput, auth?: AuthContext): Promise<Address> =>\n this.ctx.http.request<Address>({\n method: \"PUT\",\n path: `/customer/${this.ctx.tenant}/me/addresses/${id}`,\n auth: requireCustomer(auth),\n body: patch,\n }),\n remove: async (id: string, auth?: AuthContext): Promise<void> =>\n this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `/customer/${this.ctx.tenant}/me/addresses/${id}`,\n auth: requireCustomer(auth),\n }),\n };\n}\n","import type { HttpClient } from \"./http\";\nimport type { TokenProvider, AuthContext } from \"./auth\";\nimport type { Logger } from \"./logger\";\n\n/** Shared dependencies every service facade receives. */\nexport interface ClientContext {\n tenant: string;\n http: HttpClient;\n tokenProvider: TokenProvider;\n logger: Logger;\n}\n\n/**\n * A cursor-paged collection — `pageNumber`/`pageSize` indexing with a\n * `hasNextPage` signal driven by the source page being full. Used by all\n * paginated services and hooks across the SDK.\n */\nexport interface PaginatedItems<T> {\n items: T[];\n pageNumber: number;\n pageSize: number;\n hasNextPage: boolean;\n}\n\n/** Default `AuthContext` applied by a service when the caller passes none. */\nexport type DefaultAuth = AuthContext | undefined;\n\n/**\n * Async-iterates every item across pages of a `PaginatedItems<T>` source.\n * Stops when the source reports `hasNextPage: false`.\n *\n * @param fetchPage - given a 1-based page number, returns the page.\n * @param start - first page to fetch (default `1`).\n */\nexport async function* iterateAll<T>(\n fetchPage: (pageNumber: number) => Promise<PaginatedItems<T>>,\n start = 1,\n): AsyncIterable<T> {\n let p = start;\n for (;;) {\n const page = await fetchPage(p);\n for (const it of page.items) yield it;\n if (!page.hasNextPage) return;\n p += 1;\n }\n}\n\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport { iterateAll } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n BasicProductWithId,\n BundleProductWithId,\n ParentVariantProductWithId,\n ProductMedia,\n} from \"../generated/product\";\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\n\n/** A product as returned by the Product service (all generated fields). */\nexport type Product = BasicProductWithId | BundleProductWithId | ParentVariantProductWithId;\n\n/** A single product media entry (generated; `ProductMedia` is the list type). */\nexport type Media = ProductMedia[number];\n\n/** Catalog reads. Default auth: anonymous; pass customer for personalized pricing. */\nexport class ProductService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Fetches one product by id. */\n async get(\n productId: string,\n _opts?: Record<string, never>,\n auth: AuthContext = ANON,\n ): Promise<Product> {\n return this.ctx.http.request<Product>({\n method: \"GET\",\n path: `/product/${this.ctx.tenant}/products/${productId}`,\n auth,\n });\n }\n\n /** Fetches one product by its code. */\n async getByCode(code: string, auth: AuthContext = ANON): Promise<Product> {\n const rows = await this.ctx.http.request<Product[]>({\n method: \"GET\",\n path: `/product/${this.ctx.tenant}/products`,\n query: { q: `code:${code}` },\n auth,\n });\n const first = rows[0];\n if (!first) throw new Error(`No product with code \"${code}\"`);\n return first;\n }\n\n /** One page of products. */\n async list(\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Product>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const items = await this.ctx.http.request<Product[]>({\n method: \"GET\",\n path: `/product/${this.ctx.tenant}/products`,\n query: { pageNumber, pageSize },\n auth,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Async-iterates every product across pages. */\n listAll(params: { pageSize?: number } = {}, auth: AuthContext = ANON): AsyncIterable<Product> {\n const pageSize = params.pageSize ?? 50;\n return iterateAll<Product>((pageNumber) => this.list({ pageNumber, pageSize }, auth));\n }\n\n /** Searches products by free-text query. */\n async search(\n query: string,\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Product>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const items = await this.ctx.http.request<Product[]>({\n method: \"GET\",\n path: `/product/${this.ctx.tenant}/products`,\n query: { q: query, pageNumber, pageSize },\n auth,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /**\n * Free-text product search by name. The product `q` is a `field:value` DSL,\n * so a bare term (e.g. \"in time\") 400s with \"No value for key …\". This builds\n * a `name:(~<term>)` regex filter (regex metacharacters escaped) and delegates\n * to {@link search}.\n */\n async searchByName(\n query: string,\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Product>> {\n const escaped = query.trim().replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return this.search(`name:(~${escaped})`, params, auth);\n }\n\n /**\n * Bulk fetch by id. POSTs `/products/search` with `q=\"id:(id1,id2,…)\"`,\n * chunking when the list is larger than `options.chunkSize` (default\n * 100). An empty list short-circuits with no HTTP call. **Order is not\n * guaranteed** across chunks — re-index by `id` if order matters.\n */\n async searchByIds(\n ids: string[],\n options: { chunkSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Product[]> {\n if (ids.length === 0) return [];\n const chunkSize = options.chunkSize ?? 100;\n const chunks: string[][] = [];\n for (let i = 0; i < ids.length; i += chunkSize) {\n chunks.push(ids.slice(i, i + chunkSize));\n }\n const pages = await Promise.all(\n chunks.map((chunk) =>\n this.ctx.http.request<Product[]>({\n method: \"POST\",\n path: `/product/${this.ctx.tenant}/products/search`,\n query: { pageSize: chunk.length },\n auth,\n body: { q: `id:(${chunk.join(\",\")})` },\n }),\n ),\n );\n return pages.flat();\n }\n\n /**\n * Bulk fetch by code. POSTs `/products/search` with `q=\"code:(c1,c2,…)\"`,\n * chunking when the list is larger than `options.chunkSize` (default 100).\n * Duplicate codes are de-duplicated. Codes containing query-delimiter\n * characters (`(`, `)`, `,`, whitespace, `\"`) are dropped with a logged\n * warning, because the Emporix `q` syntax uses them as delimiters and does\n * not support escaping them in a plain IN-list. An empty list — or one with\n * no safe codes — short-circuits with no HTTP call. **Order is not\n * guaranteed** across chunks — re-index by `code` if order matters.\n */\n async searchByCodes(\n codes: string[],\n options: { chunkSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Product[]> {\n const unique = [...new Set(codes)];\n const unsafe = /[(),\"\\s]/;\n const safe = unique.filter((c) => !unsafe.test(c));\n const dropped = unique.filter((c) => unsafe.test(c));\n if (dropped.length > 0) {\n this.ctx.logger.warn(\n \"products.searchByCodes: dropped codes containing query-delimiter characters\",\n { dropped },\n );\n }\n if (safe.length === 0) return [];\n const chunkSize = options.chunkSize ?? 100;\n const chunks: string[][] = [];\n for (let i = 0; i < safe.length; i += chunkSize) {\n chunks.push(safe.slice(i, i + chunkSize));\n }\n const pages = await Promise.all(\n chunks.map((chunk) =>\n this.ctx.http.request<Product[]>({\n method: \"POST\",\n path: `/product/${this.ctx.tenant}/products/search`,\n query: { pageSize: chunk.length },\n auth,\n body: { q: `code:(${chunk.join(\",\")})` },\n }),\n ),\n );\n return pages.flat();\n }\n\n /**\n * Streams the VARIANT children of a PARENT_VARIANT product, page by page,\n * via the search query `productType:VARIANT parentVariantId:<id>`. Default\n * pageSize 200. The query syntax (space-separated fields = implicit AND) is\n * encapsulated here so consumers don't build it themselves.\n */\n listVariantChildrenAll(\n parentVariantId: string,\n params: { pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): AsyncIterable<Product> {\n const pageSize = params.pageSize ?? 200;\n const q = `productType:VARIANT parentVariantId:${parentVariantId}`;\n return iterateAll<Product>((pageNumber) => this.search(q, { pageNumber, pageSize }, auth));\n }\n\n /**\n * Resolves ALL VARIANT children of a PARENT_VARIANT product into a flat\n * array (loads every page). Default pageSize 200. Returns `[]` when there are\n * no children — never throws.\n */\n async listVariantChildren(\n parentVariantId: string,\n params: { pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Product[]> {\n const out: Product[] = [];\n for await (const child of this.listVariantChildrenAll(parentVariantId, params, auth)) {\n out.push(child);\n }\n return out;\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport { iterateAll } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Product } from \"./product\";\nimport type { Category as GeneratedCategory, CategoryTree } from \"../generated/category\";\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\n\n/** A category as returned by the Category service (all generated fields). */\nexport type Category = GeneratedCategory;\n\n/** The category tree as returned by the Category service. */\nexport type CategoryNode = CategoryTree;\n\n/** Category reads. Default auth: anonymous. */\nexport class CategoryService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Fetches one category by id. */\n async get(categoryId: string, auth: AuthContext = ANON): Promise<Category> {\n return this.ctx.http.request<Category>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/categories/${categoryId}`,\n auth,\n });\n }\n\n /** One page of categories. */\n async list(\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Category>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const items = await this.ctx.http.request<Category[]>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/categories`,\n query: { pageNumber, pageSize },\n auth,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Async-iterates every category across pages. */\n listAll(params: { pageSize?: number } = {}, auth: AuthContext = ANON): AsyncIterable<Category> {\n const pageSize = params.pageSize ?? 50;\n return iterateAll<Category>((pageNumber) => this.list({ pageNumber, pageSize }, auth));\n }\n\n /**\n * The catalogue's **root categories** — the published category trees\n * (`GET /category-trees`). Use these for top-level storefront navigation;\n * drill into a node's children with {@link subcategories}.\n */\n async tree(auth: AuthContext = ANON): Promise<Category[]> {\n return this.ctx.http.request<Category[]>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/category-trees`,\n auth,\n });\n }\n\n /**\n * Direct child categories of a category (for hierarchy drill-down). Mirrors\n * {@link productsIn}: reads the category's **assignments** and keeps the\n * `CATEGORY` references, resolving them to full categories. Returns an empty\n * array when the category has no child categories.\n */\n async subcategories(\n categoryId: string,\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Category[]> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const assignments = await this.ctx.http.request<Array<{ ref?: { id?: string; type?: string } }>>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/categories/${categoryId}/assignments`,\n query: { pageNumber, pageSize },\n auth,\n });\n const categoryIds = assignments\n .map((a) => (a.ref?.type?.toUpperCase() === \"CATEGORY\" ? a.ref.id : undefined))\n .filter((id): id is string => Boolean(id));\n if (categoryIds.length === 0) return [];\n return this.searchByIds(categoryIds, {}, auth);\n }\n\n /**\n * One page of products in a category. The category service exposes products\n * as **assignments** (`/categories/{id}/assignments`) — references, not full\n * products — so this fetches a page of assignments, keeps the `PRODUCT`\n * references, and resolves them to full products via `/products/search`.\n * `hasNextPage` reflects the assignments page (the source of truth for\n * pagination).\n */\n async productsIn(\n categoryId: string,\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Product>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const assignments = await this.ctx.http.request<Array<{ ref?: { id?: string; type?: string } }>>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/categories/${categoryId}/assignments`,\n query: { pageNumber, pageSize },\n auth,\n });\n const hasNextPage = assignments.length === pageSize;\n const productIds = assignments\n .map((a) => (a.ref?.type?.toUpperCase() === \"PRODUCT\" ? a.ref.id : undefined))\n .filter((id): id is string => Boolean(id));\n if (productIds.length === 0) {\n return { items: [], pageNumber, pageSize, hasNextPage };\n }\n const items = await this.ctx.http.request<Product[]>({\n method: \"POST\",\n path: `/product/${this.ctx.tenant}/products/search`,\n query: { pageSize: productIds.length },\n auth,\n body: { q: `id:(${productIds.join(\",\")})` },\n });\n return { items, pageNumber, pageSize, hasNextPage };\n }\n\n /**\n * Bulk fetch by id. POSTs `/categories/search` with `q=\"id:(id1,id2,…)\"`,\n * chunking when the list is larger than `options.chunkSize` (default\n * 100). An empty list short-circuits with no HTTP call. **Order is not\n * guaranteed** across chunks — re-index by `id` if order matters.\n */\n async searchByIds(\n ids: string[],\n options: { chunkSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Category[]> {\n if (ids.length === 0) return [];\n const chunkSize = options.chunkSize ?? 100;\n const chunks: string[][] = [];\n for (let i = 0; i < ids.length; i += chunkSize) {\n chunks.push(ids.slice(i, i + chunkSize));\n }\n const pages = await Promise.all(\n chunks.map((chunk) =>\n this.ctx.http.request<Category[]>({\n method: \"POST\",\n path: `/category/${this.ctx.tenant}/categories/search`,\n query: { pageSize: chunk.length },\n auth,\n body: { q: `id:(${chunk.join(\",\")})` },\n }),\n ),\n );\n return pages.flat();\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixNotFoundError, EmporixValidationError } from \"../core/errors\";\nimport type {\n Cart as GeneratedCart,\n CreateCart,\n CreatedCart,\n CartItemRequest,\n UpdateCartItem,\n AddressRequest,\n BatchResponse as GeneratedBatchResponse,\n SingleBatchResponse as GeneratedSingleBatchResponse,\n} from \"../generated/cart\";\n\n/** A cart as returned by the Cart service (all generated fields). */\nexport type Cart = GeneratedCart;\n\n/** The cart-create response (`{ cartId, yrn }`, generated). */\nexport type CartCreated = CreatedCart;\n\n/** Generated request bodies (caller sends the exact wire shape). */\nexport type CreateCartInput = CreateCart;\nexport type CartItemInput = CartItemRequest;\nexport type CartItemUpdate = UpdateCartItem;\n\n/** Per-entry result of `addItemsBatch`. `status` is HTTP-style per entry (e.g. 201 = added, 4xx = failed). */\nexport type CartItemBatchEntry = GeneratedSingleBatchResponse;\n/** Response shape of `addItemsBatch` — one entry per input item, matching by `index`. */\nexport type CartItemsBatchResponse = GeneratedBatchResponse;\n\n/** An address payload for cart shipping/billing (generated). */\nexport type CartAddress = AddressRequest;\n\nfunction requireCartAuth(auth: AuthContext | undefined): AuthContext {\n if (auth && (auth.kind === \"customer\" || auth.kind === \"anonymous\")) return auth;\n throw new EmporixValidationError(\n \"CartService requires an explicit { kind: 'customer' } or { kind: 'anonymous' } AuthContext\",\n );\n}\n\nfunction requireCustomerAuth(auth: AuthContext | undefined): AuthContext {\n if (auth && auth.kind === \"customer\") return auth;\n throw new EmporixValidationError(\"cart.merge requires a { kind: 'customer' } AuthContext\");\n}\n\n/** Cart operations. Every method requires an explicit customer/anonymous context. */\nexport class CartService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/cart/${this.ctx.tenant}/carts`;\n }\n\n /** Creates a cart. */\n async create(\n input: CreateCartInput | undefined,\n auth: AuthContext,\n ): Promise<CartCreated> {\n return this.ctx.http.request<CartCreated>({\n method: \"POST\",\n path: this.base(),\n auth: requireCartAuth(auth),\n body: input ?? {},\n });\n }\n\n /** Fetches a cart by id. */\n async get(cartId: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"GET\",\n path: `${this.base()}/${cartId}`,\n auth: requireCartAuth(auth),\n });\n }\n\n /** Returns the current cart for the session, or null if none. */\n /**\n * Get the customer / anonymous cart matching the given criteria. Per Emporix:\n * uniqueness is defined by `siteCode` + `type` + `legalEntityId` +\n * (`customerId` derived from a customer token, or `sessionId` derived from an\n * anonymous token). With `create: true`, Emporix creates a new cart if none\n * matches.\n *\n * Returns `null` on 404 (no cart found and `create` was not set). All other\n * errors are propagated.\n */\n async getCurrent(\n auth: AuthContext,\n opts: { siteCode: string; type?: string; legalEntityId?: string; create?: boolean },\n ): Promise<Cart | null> {\n const query: Record<string, string | number> = { siteCode: opts.siteCode };\n if (opts.type !== undefined) query.type = opts.type;\n if (opts.legalEntityId !== undefined) query.legalEntityId = opts.legalEntityId;\n if (opts.create) query.create = \"true\";\n try {\n return await this.ctx.http.request<Cart>({\n method: \"GET\",\n path: this.base(),\n query,\n auth: requireCartAuth(auth),\n });\n } catch (e) {\n if (e instanceof EmporixNotFoundError) return null;\n throw e;\n }\n }\n\n /** Adds an item. */\n async addItem(\n cartId: string,\n item: CartItemInput,\n auth: AuthContext,\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"POST\",\n path: `${this.base()}/${cartId}/items`,\n auth: requireCartAuth(auth),\n body: item,\n });\n }\n\n /**\n * Adds multiple items in a single request via `POST /carts/{id}/itemsBatch`.\n * Server-side limit is 200 entries per call — callers handling larger sets\n * must chunk. The response carries a per-entry `status` (HTTP-style: 201\n * for added, 4xx/5xx for failed) and `index` matching the input position;\n * partial failures do **not** throw — inspect `status` per entry.\n */\n async addItemsBatch(\n cartId: string,\n items: CartItemInput[],\n auth: AuthContext,\n ): Promise<CartItemsBatchResponse> {\n return this.ctx.http.request<CartItemsBatchResponse>({\n method: \"POST\",\n path: `${this.base()}/${cartId}/itemsBatch`,\n auth: requireCartAuth(auth),\n body: items,\n });\n }\n\n /**\n * Updates an item. By default this is a **full replace** — the server expects\n * the complete item (e.g. `itemYrn` + the `price` row). Pass\n * `{ partial: true }` to send a **partial update** (`?partial=true`), e.g. a\n * quantity-only change with just `{ quantity }`.\n */\n async updateItem(\n cartId: string,\n itemId: string,\n patch: CartItemUpdate,\n auth: AuthContext,\n opts: { partial?: boolean } = {},\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"PUT\",\n path: `${this.base()}/${cartId}/items/${itemId}`,\n auth: requireCartAuth(auth),\n body: patch,\n ...(opts.partial ? { query: { partial: \"true\" } } : {}),\n });\n }\n\n /** Removes an item. */\n async removeItem(cartId: string, itemId: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"DELETE\",\n path: `${this.base()}/${cartId}/items/${itemId}`,\n auth: requireCartAuth(auth),\n });\n }\n\n /** Empties the cart. */\n async clear(cartId: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"DELETE\",\n path: `${this.base()}/${cartId}/items`,\n auth: requireCartAuth(auth),\n });\n }\n\n /** Applies a coupon. */\n async applyCoupon(cartId: string, code: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"POST\",\n path: `${this.base()}/${cartId}/coupons`,\n auth: requireCartAuth(auth),\n body: { code },\n });\n }\n\n /** Removes a coupon. */\n async removeCoupon(cartId: string, code: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"DELETE\",\n path: `${this.base()}/${cartId}/coupons/${code}`,\n auth: requireCartAuth(auth),\n });\n }\n\n /** Sets the shipping address. */\n async setShippingAddress(\n cartId: string,\n address: CartAddress,\n auth: AuthContext,\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"PUT\",\n path: `${this.base()}/${cartId}/shipping-address`,\n auth: requireCartAuth(auth),\n body: address,\n });\n }\n\n /** Sets the billing address. */\n async setBillingAddress(\n cartId: string,\n address: CartAddress,\n auth: AuthContext,\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"PUT\",\n path: `${this.base()}/${cartId}/billing-address`,\n auth: requireCartAuth(auth),\n body: address,\n });\n }\n\n /**\n * Merges one or more anonymous carts into the specified customer cart.\n * Per Emporix: the target cart in the path **must belong to the logged-in\n * customer**, and each id in `anonymousCartIds` must belong to an anonymous\n * customer. Anonymous carts go `CLOSED` on success.\n *\n * Requires a customer `AuthContext`.\n */\n async merge(\n customerCartId: string,\n anonymousCartIds: string[],\n auth: AuthContext,\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"POST\",\n path: `${this.base()}/${customerCartId}/merge`,\n auth: requireCustomerAuth(auth),\n body: { carts: anonymousCartIds },\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixAuthError } from \"../core/errors\";\nimport type {\n ResponseCheckout,\n RequestCheckout,\n RequestFromQuoteCheckout,\n CustomerJson,\n} from \"../generated/checkout\";\n\n/** `requestCheckout` body (cart-based, generated). */\nexport type CheckoutInput = RequestCheckout;\n\n/** `requestFromQuoteCheckout` body (quote-based, generated). */\nexport type QuoteCheckoutInput = RequestFromQuoteCheckout;\n\n/** `responseCheckout` — the full generated checkout response. */\nexport type CheckoutResult = ResponseCheckout;\n\n/** Options for a checkout call. */\nexport interface CheckoutOptions {\n /** Customer `saasToken` from `customers.login()` — required for logged-in checkout. */\n saasToken?: string;\n /** Site code (`?siteCode=`). */\n siteCode?: string;\n}\n\nfunction isGuest(customer: CustomerJson | undefined): boolean {\n return customer?.guest === true;\n}\n\nfunction resolveAuth(auth: AuthContext | undefined, guest: boolean): AuthContext {\n if (auth && (auth.kind === \"customer\" || auth.kind === \"raw\")) return auth;\n if (guest && auth && auth.kind === \"anonymous\") return auth;\n throw new EmporixAuthError(\n \"checkout requires a customer/raw AuthContext (or anonymous for a guest checkout)\",\n );\n}\n\n/** Triggers Emporix checkout (atomic: validate → order → payment → close cart). */\nexport class CheckoutService {\n constructor(private readonly ctx: ClientContext) {}\n\n private headers(opts: CheckoutOptions, guest: boolean): Record<string, string> | undefined {\n if (guest || !opts.saasToken) return undefined;\n return { \"saas-token\": opts.saasToken };\n }\n\n private query(opts: CheckoutOptions): Record<string, string> | undefined {\n return opts.siteCode ? { siteCode: opts.siteCode } : undefined;\n }\n\n /** Checkout from a cart. Requires customer/raw auth (or anonymous for guest). */\n async placeOrder(\n input: CheckoutInput,\n auth?: AuthContext,\n opts: CheckoutOptions = {},\n ): Promise<CheckoutResult> {\n const guest = isGuest(input.customer);\n const headers = this.headers(opts, guest);\n const query = this.query(opts);\n return this.ctx.http.request<CheckoutResult>({\n method: \"POST\",\n path: `/checkout/${this.ctx.tenant}/checkouts/order`,\n auth: resolveAuth(auth, guest),\n ...(query ? { query } : {}),\n ...(headers ? { headers } : {}),\n body: input,\n });\n }\n\n /** Checkout from a quote. */\n async placeOrderFromQuote(\n input: QuoteCheckoutInput,\n auth?: AuthContext,\n opts: CheckoutOptions = {},\n ): Promise<CheckoutResult> {\n const headers = this.headers(opts, false);\n const query = this.query(opts);\n return this.ctx.http.request<CheckoutResult>({\n method: \"POST\",\n path: `/checkout/${this.ctx.tenant}/checkouts/order`,\n auth: resolveAuth(auth, false),\n ...(query ? { query } : {}),\n ...(headers ? { headers } : {}),\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixAuthError } from \"../core/errors\";\nimport { requireCustomer } from \"../core/require-customer\";\nimport type {\n PaymentModeFrontendResponse,\n AuthorizePaymentRequest,\n} from \"../generated/payment\";\n\n/** A frontend payment mode (generated). */\nexport type PaymentMode = PaymentModeFrontendResponse;\n\n/** Post-checkout authorize request (generated; caller sends the exact wire shape). */\nexport type AuthorizePaymentInput = AuthorizePaymentRequest;\n\n/** Post-checkout authorize result. */\nexport interface AuthorizePaymentResult {\n successful: boolean;\n paymentTransactionId?: string;\n authorizationToken?: string;\n requiresExternalPayment?: boolean;\n externalPaymentRedirectURL?: string;\n externalPaymentHttpMethod?: string;\n [k: string]: unknown;\n}\n\n/** Payment-Gateway: list frontend payment modes, authorize deferred payments. */\nexport class PaymentGatewayService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Lists configured frontend payment modes. */\n async listPaymentModes(auth?: AuthContext): Promise<PaymentMode[]> {\n return this.ctx.http.request<PaymentMode[]>({\n method: \"GET\",\n path: `/payment-gateway/${this.ctx.tenant}/paymentmodes/frontend`,\n auth: requireCustomer(auth),\n });\n }\n\n /** Authorizes a post-checkout (deferred) payment for an existing order. */\n async authorize(\n input: AuthorizePaymentInput,\n auth?: AuthContext,\n ): Promise<AuthorizePaymentResult> {\n return this.ctx.http.request<AuthorizePaymentResult>({\n method: \"POST\",\n path: `/payment-gateway/${this.ctx.tenant}/payment/frontend/authorize`,\n auth: requireCustomer(auth),\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixAuthError } from \"../core/errors\";\nimport type { Match, MatchByContext, MatchResponse } from \"../generated/price\";\n\n/** Session-context match request body (generated). */\nexport type PriceMatchByContextInput = MatchByContext;\n\n/** Explicit-context match request body (generated). */\nexport type PriceMatchInput = Match;\n\n/** Item (product or price) a price was matched for. */\nexport interface PriceMatchItemRef {\n itemType?: string;\n id?: string;\n /** Localized (or plain) product name — present on the live API, absent from the OpenAPI doc. */\n name?: Record<string, string> | string;\n}\n\n/**\n * A resolved price. Superset of the generated match-response schema: the\n * deployed API returns the matched item under `itemId` (with a localized\n * `name`), while the OpenAPI doc/codegen call it `itemRef`.\n */\nexport type PriceMatch = Omit<MatchResponse, \"itemRef\"> & {\n /** Item the price was matched for, as returned by the API. */\n itemId?: PriceMatchItemRef;\n /**\n * @deprecated The OpenAPI doc names this `itemRef`, but the deployed API\n * returns `itemId`. Mirrored from `itemId` for back-compat — prefer `itemId`.\n */\n itemRef?: PriceMatchItemRef;\n};\n\n/**\n * Normalizes a raw match row: the deployed API returns `itemId`, while the\n * codegen type calls it `itemRef`. Expose `itemId` canonically and mirror it\n * to the deprecated `itemRef` so existing consumers keep working.\n */\nfunction normalizeMatch(raw: MatchResponse): PriceMatch {\n const itemId = (raw as MatchResponse & { itemId?: PriceMatchItemRef }).itemId ?? raw.itemRef;\n const base = raw as PriceMatch;\n if (!itemId) return base;\n // Mirror only id/type into the deprecated itemRef (drop name); build without\n // explicit `undefined` for exactOptionalPropertyTypes.\n const itemRef: PriceMatchItemRef = {\n ...(itemId.itemType !== undefined ? { itemType: itemId.itemType } : {}),\n ...(itemId.id !== undefined ? { id: itemId.id } : {}),\n };\n return { ...base, itemId, itemRef };\n}\n\n/** Options for {@link PriceService.matchByContextChunked}. */\nexport interface MatchByContextChunkedOptions {\n /** Items per request. Default 50. Must be >= 1. */\n chunkSize?: number;\n /** Maximum number of requests in flight at once. Default 4. Must be >= 1. */\n concurrency?: number;\n /** Invoked once per failed chunk (default mode only — not when throwing). */\n onChunkError?: (err: unknown, chunkIndex: number) => void;\n /** When true, the first failing chunk rejects the whole call. Default false. */\n throwOnAnyChunkError?: boolean;\n}\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\nconst SERVICE: AuthContext = { kind: \"service\" };\n\nfunction requireContextAuth(auth: AuthContext | undefined): AuthContext {\n const a = auth ?? ANON;\n if (a.kind === \"anonymous\" || a.kind === \"customer\" || a.kind === \"raw\") return a;\n throw new EmporixAuthError(\n \"match-prices-by-context requires an anonymous, customer, or raw AuthContext\",\n );\n}\n\n/**\n * Price matching. The Cart service does not resolve prices — call this\n * explicitly before rendering money and again right before placing an order.\n * The SDK is stateless: it never caches or revalidates prices.\n */\nexport class PriceService {\n constructor(private readonly ctx: ClientContext) {}\n\n /**\n * Resolves prices using the session context bound to the bearer token\n * (currency/site/country were set at anonymous-login time). Default auth:\n * anonymous; pass a customer/raw context for personalized pricing.\n */\n async matchByContext(\n input: PriceMatchByContextInput,\n auth?: AuthContext,\n ): Promise<PriceMatch[]> {\n const rows = await this.ctx.http.request<MatchResponse[]>({\n method: \"POST\",\n path: `/price/${this.ctx.tenant}/match-prices-by-context`,\n auth: requireContextAuth(auth),\n body: input,\n });\n return rows.map(normalizeMatch);\n }\n\n /**\n * Resolves prices from an explicit context. Default auth: service\n * (requires `price.price_read` / `price.price_manage`).\n */\n async match(input: PriceMatchInput, auth: AuthContext = SERVICE): Promise<PriceMatch[]> {\n const rows = await this.ctx.http.request<MatchResponse[]>({\n method: \"POST\",\n path: `/price/${this.ctx.tenant}/match-prices`,\n auth,\n body: input,\n });\n return rows.map(normalizeMatch);\n }\n\n /**\n * Chunked variant of {@link matchByContext} for large `items` arrays. The\n * Emporix backend handles only a limited number of items per request\n * (production limit ~50), so this splits `input.items` into chunks and runs\n * `matchByContext` with bounded concurrency.\n *\n * By default a failing chunk is skipped (its items are absent from the\n * result) and `opts.onChunkError` is called once for it; pass\n * `throwOnAnyChunkError: true` to reject on the first failure instead.\n *\n * **Result order is not guaranteed** — match entries back to your items by\n * `priceId` / `itemId.id`.\n */\n async matchByContextChunked(\n input: PriceMatchByContextInput,\n opts: MatchByContextChunkedOptions = {},\n auth?: AuthContext,\n ): Promise<PriceMatch[]> {\n const chunkSize = opts.chunkSize ?? 50;\n const concurrency = opts.concurrency ?? 4;\n if (chunkSize < 1) throw new Error(\"chunkSize must be >= 1\");\n if (concurrency < 1) throw new Error(\"concurrency must be >= 1\");\n\n const items = input.items ?? [];\n if (items.length === 0) return [];\n\n const chunks: PriceMatchByContextInput[] = [];\n for (let i = 0; i < items.length; i += chunkSize) {\n chunks.push({ ...input, items: items.slice(i, i + chunkSize) });\n }\n\n const results: PriceMatch[][] = new Array(chunks.length);\n let cursor = 0;\n\n const worker = async (): Promise<void> => {\n for (;;) {\n const idx = cursor++;\n const chunk = chunks[idx];\n if (chunk === undefined) return; // past the end\n try {\n results[idx] = await this.matchByContext(chunk, auth);\n } catch (err) {\n if (opts.throwOnAnyChunkError) throw err;\n results[idx] = [];\n opts.onChunkError?.(err, idx);\n }\n }\n };\n\n const workerCount = Math.min(concurrency, chunks.length);\n await Promise.all(Array.from({ length: workerCount }, () => worker()));\n\n return results.flat();\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixError, errorFromResponse } from \"../core/errors\";\nimport type {\n AssetCreateBlob,\n AssetCreateLink,\n AssetUpdateBlob,\n AssetUpdateLink,\n GetAsset,\n RefId,\n} from \"../generated/media\";\n\n/** Generated media types (caller sends the exact wire shape). */\nexport type AssetCreateBlobInput = AssetCreateBlob;\nexport type AssetCreateLinkInput = AssetCreateLink;\nexport type AssetUpdateBlobInput = AssetUpdateBlob;\nexport type AssetUpdateLinkInput = AssetUpdateLink;\nexport type AssetUpdateInput = AssetUpdateBlob | AssetUpdateLink;\nexport type Asset = GetAsset;\nexport type AssetRefId = RefId;\n\n/**\n * Filter / pagination options for {@link MediaService.list}. The explicit\n * fields are typed for autocomplete; the index signature stays open so\n * Emporix `q`-syntax filters like `\"refIds.id\"` can be passed verbatim.\n */\nexport interface ListAssetsQuery {\n pageNumber?: number;\n pageSize?: number;\n /** Emporix sort syntax, e.g. `\"name,metadata.createdAt:desc\"`. */\n sort?: string;\n /** Emporix `q`-syntax filter, e.g. `\"name:hero\"`. */\n q?: string;\n [key: string]: string | number | undefined;\n}\n\n/**\n * Result of {@link MediaService.download}. The endpoint's behaviour depends\n * on the asset's `access`:\n * - `PUBLIC` assets respond with a 30x redirect whose `Location` header\n * carries the externally-cacheable storage URL — useful when the\n * storefront wants to send the user there directly.\n * - `PRIVATE` assets respond with the raw bytes (plus an `ETag` header\n * for caching). The asset is delivered through Cloudinary behind the\n * server-side service token, never publicly addressable.\n */\nexport type DownloadResult =\n | { kind: \"redirect\"; url: string }\n | {\n kind: \"bytes\";\n data: ArrayBuffer;\n etag?: string;\n contentType?: string;\n };\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\nfunction isProductRef(r: AssetRefId, productId: string): boolean {\n return r.type === \"PRODUCT\" && r.id === productId;\n}\n\n/**\n * Media assets (BLOB/LINK). All endpoints require a backend-only scope\n * (`media.asset_manage` / `media.asset_read`) — default auth: service.\n */\nexport class MediaService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/media/${this.ctx.tenant}/assets`;\n }\n\n /** Create an asset. BLOB uploads via multipart; LINK via JSON. */\n async create(\n input:\n | { kind: \"blob\"; file: Blob; body: AssetCreateBlobInput }\n | { kind: \"link\"; body: AssetCreateLinkInput },\n auth: AuthContext = SERVICE,\n ): Promise<{ id: string }> {\n if (input.kind === \"blob\") {\n const fd = new FormData();\n fd.set(\"file\", input.file);\n fd.set(\"body\", JSON.stringify(input.body));\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: fd,\n });\n }\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input.body,\n });\n }\n\n /**\n * List assets, wrapped in the shared {@link PaginatedItems} envelope so\n * callers can iterate over pages consistently with the rest of the SDK.\n * `hasNextPage` is the standard SDK heuristic: `true` when the returned\n * page is full (`items.length === requested pageSize`). Pagination\n * defaults match Emporix's server defaults (`pageNumber: 1`,\n * `pageSize: 60`) so an empty `query` produces stable expectations.\n */\n async list(\n query: ListAssetsQuery = {},\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<Asset>> {\n const pageNumber = query.pageNumber ?? 1;\n const pageSize = query.pageSize ?? 60;\n const items = await this.ctx.http.request<Asset[]>({\n method: \"GET\",\n path: this.base(),\n auth,\n query: { ...query, pageNumber, pageSize },\n });\n return {\n items,\n pageNumber,\n pageSize,\n hasNextPage: items.length === pageSize,\n };\n }\n\n /** Fetch an asset by id. */\n async get(assetId: string, auth: AuthContext = SERVICE): Promise<Asset> {\n return this.ctx.http.request<Asset>({\n method: \"GET\",\n path: `${this.base()}/${assetId}`,\n auth,\n });\n }\n\n /**\n * Update an asset. The input is a discriminated union mirroring\n * {@link create}:\n * - `{ kind: \"json\", body }` — metadata-only patch (BLOB or LINK).\n * Sends `application/json`. Used for `refIds`, `details`, `metadata`,\n * or `url` changes.\n * - `{ kind: \"blob\", file, body }` — replaces the BLOB file content\n * (max 10MB) AND patches metadata in the same request. Sends\n * `multipart/form-data`.\n *\n * `type` and `access` are immutable per Emporix — they must match the\n * existing asset's values. Optimistic-locking is via `body.metadata.version`;\n * the server returns 409 Conflict on a stale version.\n */\n async update(\n assetId: string,\n input:\n | { kind: \"json\"; body: AssetUpdateInput }\n | { kind: \"blob\"; file: Blob; body: AssetUpdateBlobInput },\n auth: AuthContext = SERVICE,\n ): Promise<Asset> {\n if (input.kind === \"blob\") {\n const fd = new FormData();\n fd.set(\"file\", input.file);\n fd.set(\"body\", JSON.stringify(input.body));\n return this.ctx.http.request<Asset>({\n method: \"PUT\",\n path: `${this.base()}/${assetId}`,\n auth,\n body: fd,\n });\n }\n return this.ctx.http.request<Asset>({\n method: \"PUT\",\n path: `${this.base()}/${assetId}`,\n auth,\n body: input.body,\n });\n }\n\n /** Remove an asset. */\n async remove(assetId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${assetId}`,\n auth,\n });\n }\n\n /**\n * Download an asset by id. Returns a discriminated union:\n * - `{ kind: \"redirect\", url }` for `PUBLIC` assets (server-side 30x with\n * the storage URL in `Location`).\n * - `{ kind: \"bytes\", data }` for `PRIVATE` assets (server-side 200 with\n * the asset bytes; `etag` + `contentType` headers are exposed for\n * caching). When the server reports `text/plain` Content-Type (the\n * OpenAPI-documented format), the SDK decodes the base64 stream into\n * an `ArrayBuffer` transparently; binary Content-Types are passed\n * through verbatim.\n *\n * Implementation note: uses `redirect: \"manual\"` so the redirect-location\n * is observable. In Node.js this works; in a browser the redirect Location\n * is intentionally hidden by fetch — there, `PUBLIC` downloads will\n * surface as an opaque-redirect and the SDK throws. Browser code should\n * use the asset's `url` field from `get()` for `LINK` assets, or the\n * direct storage URL for `PUBLIC` `BLOB` assets (typically delivered via\n * an `<img>` tag rather than `download()`).\n */\n async download(\n assetId: string,\n auth: AuthContext = SERVICE,\n ): Promise<DownloadResult> {\n const path = `${this.base()}/${assetId}/download`;\n const res = await this.ctx.http.requestRaw(\n { method: \"GET\", path, auth },\n { redirect: \"manual\" },\n );\n\n // PUBLIC: server-side redirect — capture Location.\n if (res.status >= 300 && res.status < 400) {\n const url = res.headers.get(\"location\");\n if (!url) {\n throw new EmporixError(\n `media.download: ${res.status} response without a Location header`,\n res.status,\n );\n }\n return { kind: \"redirect\", url };\n }\n\n // PRIVATE: bytes.\n if (res.ok) {\n const etag = res.headers.get(\"etag\") ?? undefined;\n const contentType = res.headers.get(\"content-type\") ?? undefined;\n let data: ArrayBuffer;\n if (contentType?.startsWith(\"text/plain\")) {\n // Per OpenAPI spec the server returns the byte stream as a\n // base64-encoded text/plain body. Decode once into raw bytes\n // so callers always see an ArrayBuffer.\n const text = await res.text();\n const bin = atob(text);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) arr[i] = bin.charCodeAt(i);\n data = arr.buffer;\n } else {\n data = await res.arrayBuffer();\n }\n return {\n kind: \"bytes\",\n data,\n ...(etag !== undefined ? { etag } : {}),\n ...(contentType !== undefined ? { contentType } : {}),\n };\n }\n\n // Error: surface via the standard EmporixError hierarchy.\n const text = await res.text();\n let parsed: unknown = undefined;\n if (text) {\n try {\n parsed = JSON.parse(text);\n } catch {\n parsed = text;\n }\n }\n throw errorFromResponse(res.status, `GET ${path} → ${res.status}`, parsed);\n }\n\n /** Multipart upload sugar: builds `AssetCreateBlob` from input. */\n async uploadFile(\n input: {\n file: Blob;\n productId?: string;\n filename?: string;\n mimeType?: string;\n access?: \"PUBLIC\" | \"PRIVATE\";\n },\n auth: AuthContext = SERVICE,\n ): Promise<{ id: string }> {\n const body: AssetCreateBlobInput = {\n type: \"BLOB\",\n access: input.access ?? \"PUBLIC\",\n ...(input.productId\n ? { refIds: [{ type: \"PRODUCT\", id: input.productId }] }\n : {}),\n ...(input.filename || input.mimeType\n ? {\n details: {\n ...(input.filename ? { filename: input.filename } : {}),\n ...(input.mimeType ? { mimeType: input.mimeType } : {}),\n },\n }\n : {}),\n };\n return this.create({ kind: \"blob\", file: input.file, body }, auth);\n }\n\n /**\n * Replace the file content of an existing BLOB asset. Sugar over\n * {@link update} with `kind: \"blob\"`. `access` is required because the\n * field is immutable and the server validates that the patch matches.\n * Pass `version` from `asset.metadata.version` if you want optimistic\n * locking (recommended when concurrent writers are possible).\n */\n async replaceFile(\n assetId: string,\n input: {\n file: Blob;\n access: \"PUBLIC\" | \"PRIVATE\";\n filename?: string;\n mimeType?: string;\n version?: number;\n },\n auth: AuthContext = SERVICE,\n ): Promise<Asset> {\n const body: AssetUpdateBlobInput = {\n type: \"BLOB\",\n access: input.access,\n ...(input.filename || input.mimeType\n ? {\n details: {\n ...(input.filename ? { filename: input.filename } : {}),\n ...(input.mimeType ? { mimeType: input.mimeType } : {}),\n },\n }\n : {}),\n ...(input.version !== undefined\n ? { metadata: { version: input.version } }\n : {}),\n };\n return this.update(assetId, { kind: \"blob\", file: input.file, body }, auth);\n }\n\n /** External-URL sugar: builds `AssetCreateLink`. */\n async link(\n input: { url: string; productId?: string; access?: \"PUBLIC\" | \"PRIVATE\" },\n auth: AuthContext = SERVICE,\n ): Promise<{ id: string }> {\n const body: AssetCreateLinkInput = {\n type: \"LINK\",\n access: input.access ?? \"PUBLIC\",\n url: input.url,\n ...(input.productId\n ? { refIds: [{ type: \"PRODUCT\", id: input.productId }] }\n : {}),\n };\n return this.create({ kind: \"link\", body }, auth);\n }\n\n /** Idempotently add a PRODUCT refId to an asset. */\n async attachToProduct(\n assetId: string,\n productId: string,\n auth: AuthContext = SERVICE,\n ): Promise<Asset> {\n const a = await this.get(assetId, auth);\n const refIds: AssetRefId[] = a.refIds ?? [];\n if (refIds.some((r) => isProductRef(r, productId))) return a;\n const next: AssetRefId[] = [...refIds, { type: \"PRODUCT\", id: productId }];\n // Preserve the asset's type discriminator so the update body satisfies\n // the AssetUpdateBlob | AssetUpdateLink union.\n const patch = { type: a.type, refIds: next } as unknown as AssetUpdateInput;\n return this.update(assetId, { kind: \"json\", body: patch }, auth);\n }\n\n /** Remove a PRODUCT refId from an asset (no-op if absent). */\n async detachFromProduct(\n assetId: string,\n productId: string,\n auth: AuthContext = SERVICE,\n ): Promise<Asset> {\n const a = await this.get(assetId, auth);\n const refIds: AssetRefId[] = a.refIds ?? [];\n const next = refIds.filter((r) => !isProductRef(r, productId));\n if (next.length === refIds.length) return a;\n const patch = { type: a.type, refIds: next } as unknown as AssetUpdateInput;\n return this.update(assetId, { kind: \"json\", body: patch }, auth);\n }\n\n /** Convenience: list assets attached to a product (server-side filter). */\n async listForProduct(\n productId: string,\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<Asset>> {\n return this.list({ \"refIds.id\": productId }, auth);\n }\n}\n\n// Re-export so consumers can `import { isProductRef } from \"@viu/emporix-sdk/media\"`?\n// Internal helper — kept module-private; convenience methods in Task 4 use it.\nexport const _internalMedia = { isProductRef };\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { requireCustomer } from \"../core/require-customer\";\nimport type { ProductService } from \"./product\";\nimport type { CategoryService } from \"./category\";\nimport type {\n SegmentResponse,\n ItemAssignmentResponse,\n CategoryTreeResponse,\n} from \"../generated/customer-segment\";\n\n/** Generated segment types (read shapes — storefront `segment_read_own`). */\nexport type Segment = SegmentResponse;\nexport type SegmentItem = ItemAssignmentResponse;\nexport type SegmentCategoryTree = CategoryTreeResponse;\nexport type SegmentCategoryTreeNode = CategoryTreeResponse[number];\n\n/** Cross-service hydrate dependencies, injected from `EmporixClient`. */\nexport interface SegmentServiceDeps {\n products: ProductService;\n categories: CategoryService;\n}\n\nfunction setIfDefined<V>(\n q: Record<string, string | number | undefined>,\n key: string,\n value: V | undefined,\n): void {\n if (value !== undefined && value !== \"\") {\n q[key] = value as unknown as string | number;\n }\n}\n\n/**\n * Customer-segment reads. Every method requires a customer/raw\n * `AuthContext` — the `segment_read_own` scope is on the customer token.\n * The standard product/category endpoints do **not** auto-filter by\n * segment; the storefront uses these reads to discover what to fetch.\n */\nexport class SegmentService {\n constructor(\n private readonly ctx: ClientContext,\n private readonly deps: SegmentServiceDeps,\n ) {}\n\n private base(): string {\n return `/customer-segment/${this.ctx.tenant}/segments`;\n }\n\n /** Lists segments the caller belongs to (with `segment_read_own`). */\n async list(\n query: { q?: string; pageNumber?: number; pageSize?: number } = {},\n auth?: AuthContext,\n ): Promise<Segment[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n return this.ctx.http.request<Segment[]>({\n method: \"GET\",\n path: this.base(),\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Fetches a single segment by id. */\n async get(segmentId: string, auth?: AuthContext): Promise<Segment> {\n return this.ctx.http.request<Segment>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}`,\n auth: requireCustomer(auth),\n });\n }\n\n /** Item assignments (PRODUCT + CATEGORY) across all the caller's active segments. */\n async listItems(\n query: {\n q?: string;\n siteCode?: string;\n legalEntityId?: string;\n onlyActive?: boolean;\n pageNumber?: number;\n pageSize?: number;\n } = {},\n auth?: AuthContext,\n ): Promise<SegmentItem[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"siteCode\", query.siteCode);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n if (query.onlyActive !== undefined) q.onlyActive = String(query.onlyActive);\n return this.ctx.http.request<SegmentItem[]>({\n method: \"GET\",\n path: `${this.base()}/items`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Item assignments of one specific segment. */\n async listSegmentItems(\n segmentId: string,\n query: {\n q?: string;\n legalEntityId?: string;\n pageNumber?: number;\n pageSize?: number;\n } = {},\n auth?: AuthContext,\n ): Promise<SegmentItem[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n return this.ctx.http.request<SegmentItem[]>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}/items`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Category tree built only from the caller's active segments. */\n async getCategoryTree(\n query: { siteCode?: string; legalEntityId?: string } = {},\n auth?: AuthContext,\n ): Promise<SegmentCategoryTree> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"siteCode\", query.siteCode);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n return this.ctx.http.request<SegmentCategoryTree>({\n method: \"GET\",\n path: `${this.base()}/items/category-trees`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n private async pickItemIds(\n kind: \"PRODUCT\" | \"CATEGORY\",\n query: Parameters<SegmentService[\"listItems\"]>[0],\n auth: AuthContext | undefined,\n ): Promise<string[]> {\n const rows = await this.listItems(query, auth);\n const ids: string[] = [];\n for (const r of rows) {\n const id = r.item?.id;\n if (r.type === kind && typeof id === \"string\") ids.push(id);\n }\n return ids;\n }\n\n /** Product ids assigned to the caller's active segments. */\n async listMyProductIds(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<string[]> {\n return this.pickItemIds(\"PRODUCT\", query ?? {}, auth);\n }\n\n /** Category ids assigned to the caller's active segments. */\n async listMyCategoryIds(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<string[]> {\n return this.pickItemIds(\"CATEGORY\", query ?? {}, auth);\n }\n\n /**\n * Hydrates `listMyProductIds` via `ProductService.get` in parallel.\n * Resolves in the same order as the id list. Any single failure rejects\n * the whole batch (`Promise.all`); use the id-list method + your own\n * tolerance strategy if partial success matters.\n */\n async listMyProducts(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<PaginatedItems<Awaited<ReturnType<ProductService[\"get\"]>>>> {\n const pageNumber = query?.pageNumber ?? 1;\n const pageSize = query?.pageSize ?? 20;\n const sourceItems = await this.listItems(\n { ...(query ?? {}), pageNumber, pageSize },\n auth,\n );\n const ids: string[] = [];\n for (const r of sourceItems) {\n if (r.type === \"PRODUCT\" && typeof r.item?.id === \"string\") ids.push(r.item.id);\n }\n const items = await this.deps.products.searchByIds(ids, undefined, auth);\n return { items, pageNumber, pageSize, hasNextPage: sourceItems.length === pageSize };\n }\n\n /**\n * Hydrates a page of the caller's segment CATEGORY assignments into\n * real categories via one bulk `categories.searchByIds` call. Same\n * `hasNextPage` semantic as `listMyProducts`.\n */\n async listMyCategories(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<PaginatedItems<Awaited<ReturnType<CategoryService[\"get\"]>>>> {\n const pageNumber = query?.pageNumber ?? 1;\n const pageSize = query?.pageSize ?? 20;\n const sourceItems = await this.listItems(\n { ...(query ?? {}), pageNumber, pageSize },\n auth,\n );\n const ids: string[] = [];\n for (const r of sourceItems) {\n if (r.type === \"CATEGORY\" && typeof r.item?.id === \"string\") ids.push(r.item.id);\n }\n const items = await this.deps.categories.searchByIds(ids, undefined, auth);\n return { items, pageNumber, pageSize, hasNextPage: sourceItems.length === pageSize };\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport { auth, type AuthContext } from \"../core/auth\";\n\nconst ANON: AuthContext = auth.anonymous();\n\n/**\n * One site as returned by the Site Settings Service. Mirrors the public\n * SiteDto schema with the fields a storefront actually consumes.\n */\nexport interface Site {\n code: string;\n name: string;\n active: boolean;\n default: boolean;\n includesTax?: boolean;\n defaultLanguage: string;\n languages: string[];\n currency: string;\n availableCurrencies?: string[];\n homeBase: {\n address: {\n country: string;\n zipCode: string;\n street?: string;\n city?: string;\n state?: string;\n };\n timezone?: string;\n };\n shipToCountries: string[];\n cartCalculationScale?: number;\n metadata?: { version?: number };\n}\n\n/**\n * Read-only access to the tenant's site catalog. List returns active sites\n * visible to the storefront context (the `site_manage` scope is only needed\n * to read inactive sites).\n */\nexport class SiteService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Lists active sites. */\n async list(authCtx: AuthContext = ANON): Promise<Site[]> {\n return this.ctx.http.request<Site[]>({\n method: \"GET\",\n path: `/site/${this.ctx.tenant}/sites`,\n auth: authCtx,\n });\n }\n\n /** Retrieves one site by code. */\n async get(code: string, authCtx: AuthContext = ANON): Promise<Site> {\n return this.ctx.http.request<Site>({\n method: \"GET\",\n path: `/site/${this.ctx.tenant}/sites/${code}`,\n auth: authCtx,\n });\n }\n\n /**\n * Returns the tenant's default site (the one with `default: true`).\n * Throws if no default is configured — a tenant should always have one.\n */\n async current(authCtx: AuthContext = ANON): Promise<Site> {\n const sites = await this.list(authCtx);\n const def = sites.find((s) => s.default);\n if (!def) {\n throw new Error(\n `SiteService.current: no default site for tenant \"${this.ctx.tenant}\"`,\n );\n }\n return def;\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport { auth, type AuthContext } from \"../core/auth\";\n\nconst ANON: AuthContext = auth.anonymous();\n\n/**\n * One session context as returned by `GET /session-context/{tenant}/me/context`.\n * Created server-side when the user creates a cart. Until then, the server\n * returns 404 and {@link SessionContextService.get} resolves to `null`.\n */\nexport interface SessionContext {\n sessionId: string;\n customerId?: string;\n siteCode?: string;\n currency?: string;\n cartId?: string;\n targetLocation?: string;\n language?: string;\n context?: Record<string, unknown>;\n metadata?: {\n version?: number;\n createdAt?: string;\n modifiedAt?: string;\n };\n}\n\n/**\n * Input for {@link SessionContextService.patch}. Only the listed fields are\n * accepted by the server; everything else is ignored.\n *\n * If `version` is omitted, the service fetches the current version via GET\n * before PATCHing (one extra round-trip). Pass it explicitly when you already\n * know it (e.g. after a `get()` call earlier in the same flow).\n */\nexport interface SessionContextPatch {\n siteCode?: string;\n currency?: string;\n targetLocation?: string;\n language?: string;\n context?: Record<string, unknown>;\n /** Override for optimistic-locking version. If omitted, GET resolves it. */\n version?: number;\n}\n\n/**\n * Session-context binding for the current storefront session. Both endpoints\n * resolve the session-id from the `Authorization` token — no path/query\n * parameter required.\n */\nexport class SessionContextService {\n constructor(private readonly ctx: ClientContext) {}\n\n /**\n * Retrieves the current session context, or `null` when the server returns\n * 404 (no session exists yet — the session-context is created server-side\n * only after the user creates a cart).\n */\n async get(authCtx: AuthContext = ANON): Promise<SessionContext | null> {\n try {\n return await this.ctx.http.request<SessionContext>({\n method: \"GET\",\n path: `/session-context/${this.ctx.tenant}/me/context`,\n auth: authCtx,\n });\n } catch (err) {\n if (isNotFound(err)) return null;\n throw err;\n }\n }\n\n /**\n * Partially updates the current session context. Returns `true` when the\n * PATCH was applied, `false` when there is no session context yet (the\n * server returned 404 on the version-lookup GET, so there is nothing to\n * update). Non-404 errors propagate.\n */\n async patch(input: SessionContextPatch, authCtx: AuthContext = ANON): Promise<boolean> {\n let version = input.version;\n if (version === undefined) {\n const current = await this.get(authCtx);\n if (current === null) return false;\n version = current.metadata?.version;\n if (version === undefined) {\n throw new Error(\n \"SessionContextService.patch: no metadata.version in server response\",\n );\n }\n }\n const { version: _v, ...fields } = input;\n void _v;\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `/session-context/${this.ctx.tenant}/me/context`,\n body: {\n ...fields,\n metadata: { version },\n },\n auth: authCtx,\n });\n return true;\n }\n}\n\nfunction isNotFound(err: unknown): boolean {\n if (err && typeof err === \"object\") {\n const status = (err as { status?: unknown }).status;\n if (typeof status === \"number\" && status === 404) return true;\n }\n return false;\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n LegalEntity,\n LegalEntityCreate,\n LegalEntityUpdate,\n} from \"../generated/customer-management\";\n\n/**\n * Storefront-customer access to Legal Entities.\n *\n * `listMine`/`get` require `customermanagement.legalentity_read_own` on the\n * customer token. `create`/`update`/`delete` require the corresponding\n * `_manage` scopes — typically only granted to Admin-group customers; a 403\n * surfaces as `EmporixInsufficientScopeError`.\n */\nexport class CompaniesService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/customer-management/${this.ctx.tenant}/legal-entities`;\n }\n\n /** Lists the legal entities the calling customer is assigned to. */\n async listMine(auth: AuthContext): Promise<LegalEntity[]> {\n return this.ctx.http.request<LegalEntity[]>({\n method: \"GET\",\n path: this.base(),\n auth,\n });\n }\n\n /** Fetches a single legal entity by id. */\n async get(legalEntityId: string, auth: AuthContext): Promise<LegalEntity> {\n return this.ctx.http.request<LegalEntity>({\n method: \"GET\",\n path: `${this.base()}/${legalEntityId}`,\n auth,\n });\n }\n\n /** Creates a legal entity. Requires `customermanagement.legalentity_manage`. */\n async create(input: LegalEntityCreate, auth: AuthContext): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /**\n * Patches a legal entity. The endpoint is a PATCH, so the body is a partial\n * of the generated `LegalEntityUpdate` (full-replace) shape.\n */\n async update(\n legalEntityId: string,\n patch: Partial<LegalEntityUpdate>,\n auth: AuthContext,\n ): Promise<LegalEntity> {\n return this.ctx.http.request<LegalEntity>({\n method: \"PATCH\",\n path: `${this.base()}/${legalEntityId}`,\n auth,\n body: patch,\n });\n }\n\n /** Deletes a legal entity (async cascade on the server). */\n async delete(legalEntityId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${legalEntityId}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n ContactAssignment,\n ContactAssignmentCreate,\n ContactAssignmentUpdate,\n} from \"../generated/customer-management\";\n\n/**\n * Manages contact assignments linking customers to legal entities.\n *\n * `listForCompany` requires `customermanagement.contactassignment_read`;\n * `assign`/`update`/`unassign` require `_manage`. The query param\n * `legalEntityId` scopes the list to one company.\n */\nexport class ContactsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/customer-management/${this.ctx.tenant}/contact-assignments`;\n }\n\n /** Lists contact assignments for one legal entity. */\n async listForCompany(legalEntityId: string, auth: AuthContext): Promise<ContactAssignment[]> {\n return this.ctx.http.request<ContactAssignment[]>({\n method: \"GET\",\n path: this.base(),\n query: { legalEntityId },\n auth,\n });\n }\n\n /** Creates a contact assignment. */\n async assign(input: ContactAssignmentCreate, auth: AuthContext): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /**\n * Patches a contact assignment. PATCH endpoint, so the body is a partial of\n * the generated `ContactAssignmentUpdate` shape.\n */\n async update(\n contactAssignmentId: string,\n patch: Partial<ContactAssignmentUpdate>,\n auth: AuthContext,\n ): Promise<ContactAssignment> {\n return this.ctx.http.request<ContactAssignment>({\n method: \"PATCH\",\n path: `${this.base()}/${contactAssignmentId}`,\n auth,\n body: patch,\n });\n }\n\n /** Deletes a contact assignment. */\n async unassign(contactAssignmentId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${contactAssignmentId}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Location,\n LocationCreate,\n LocationUpdate,\n} from \"../generated/customer-management\";\n\n/**\n * Manages locations owned by a legal entity. Three types are supported:\n * HEADQUARTER, WAREHOUSE, OFFICE.\n *\n * Reads require `customermanagement.location_read`; mutations require\n * `_manage`.\n */\nexport class LocationsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/customer-management/${this.ctx.tenant}/locations`;\n }\n\n /** Lists locations owned by one legal entity. */\n async listForCompany(legalEntityId: string, auth: AuthContext): Promise<Location[]> {\n return this.ctx.http.request<Location[]>({\n method: \"GET\",\n path: this.base(),\n query: { legalEntityId },\n auth,\n });\n }\n\n /** Fetches one location by id. */\n async get(locationId: string, auth: AuthContext): Promise<Location> {\n return this.ctx.http.request<Location>({\n method: \"GET\",\n path: `${this.base()}/${locationId}`,\n auth,\n });\n }\n\n /** Creates a location for a legal entity. */\n async create(input: LocationCreate, auth: AuthContext): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /**\n * Patches a location. PATCH endpoint, so the body is a partial of the\n * generated `LocationUpdate` shape.\n */\n async update(\n locationId: string,\n patch: Partial<LocationUpdate>,\n auth: AuthContext,\n ): Promise<Location> {\n return this.ctx.http.request<Location>({\n method: \"PATCH\",\n path: `${this.base()}/${locationId}`,\n auth,\n body: patch,\n });\n }\n\n /** Deletes a location. */\n async delete(locationId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${locationId}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n GroupsQueryDocument,\n AssignmentCreateRequest,\n} from \"../generated/iam\";\n\n/**\n * Access to IAM customer groups for a legal entity.\n *\n * `listForCompany` requires `iam.group_read`; the member mutations\n * (`addMember`/`removeMember`) require `iam.group_manage` — typically only\n * granted to Admin-group customers; a 403 surfaces as\n * `EmporixInsufficientScopeError`.\n */\nexport class CustomerGroupsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/iam/${this.ctx.tenant}/groups`;\n }\n\n /** Lists customer groups belonging to one legal entity. */\n async listForCompany(legalEntityId: string, auth: AuthContext): Promise<GroupsQueryDocument[]> {\n return this.ctx.http.request<GroupsQueryDocument[]>({\n method: \"GET\",\n path: this.base(),\n query: { \"b2b.legalEntityId\": legalEntityId },\n auth,\n });\n }\n\n /** Adds a user (customer or employee) to a group. */\n async addMember(\n groupId: string,\n member: AssignmentCreateRequest,\n auth: AuthContext,\n ): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: `${this.base()}/${groupId}/users`,\n auth,\n body: member,\n });\n }\n\n /** Removes a user from a group. */\n async removeMember(groupId: string, userId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${groupId}/users/${userId}`,\n auth,\n });\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Order, OrderStatus, OrderUpdateDto } from \"../generated/order-v2\";\n\n/**\n * Salesorder PATCH body. The generated `orderUpdateDto` models a full order\n * (it requires `entries`/`customer`), but `PATCH /salesorders/{id}` accepts a\n * subset — so the SDK exposes a partial of it.\n */\nexport type SalesOrderPatch = Partial<OrderUpdateDto>;\n\n/** Optional fields supported by the order-v2 list endpoint. */\nexport interface ListMyOrdersOptions {\n pageNumber?: number;\n pageSize?: number;\n status?: OrderStatus;\n legalEntityId?: string;\n siteCode?: string;\n saasToken?: string;\n}\n\n/** Options for single-order reads (saas-token only). */\nexport interface GetOrderOptions {\n saasToken?: string;\n}\n\n/** Options for status transitions. */\nexport interface OrderTransitionOptions {\n saasToken?: string;\n comment?: string;\n}\n\n/** Options for `salesOrders.update`. */\nexport interface UpdateSalesOrderOptions {\n /** Forwarded as `?recalculate=`. Omit to use the server default (true). */\n recalculate?: boolean;\n}\n\nfunction setIfDefined<V>(\n q: Record<string, string | number | undefined>,\n key: string,\n value: V | undefined,\n): void {\n if (value !== undefined && value !== \"\") {\n q[key] = value as unknown as string | number;\n }\n}\n\n/**\n * Storefront-customer access to Order-v2's customer endpoints.\n *\n * `listMine`/`get` require `order.order_read_own`; transitions require\n * `order.order_manage_own`. All methods accept an optional `saasToken` that\n * is passed as the `saas-token` header (mirrors `checkout.placeOrder`).\n */\nexport class OrdersService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/order-v2/${this.ctx.tenant}/orders`;\n }\n\n private saasHeader(saasToken: string | undefined): Record<string, string> | undefined {\n return saasToken ? { \"saas-token\": saasToken } : undefined;\n }\n\n /** Lists the calling customer's orders. */\n async listMine(\n auth: AuthContext,\n opts: ListMyOrdersOptions = {},\n ): Promise<PaginatedItems<Order>> {\n const query: Record<string, string | number | undefined> = {};\n setIfDefined(query, \"pageNumber\", opts.pageNumber);\n setIfDefined(query, \"pageSize\", opts.pageSize);\n setIfDefined(query, \"status\", opts.status);\n setIfDefined(query, \"legalEntityId\", opts.legalEntityId);\n setIfDefined(query, \"siteCode\", opts.siteCode);\n const headers = this.saasHeader(opts.saasToken);\n return this.ctx.http.request<PaginatedItems<Order>>({\n method: \"GET\",\n path: this.base(),\n query,\n auth,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Fetches one of the calling customer's orders by id. */\n async get(\n orderId: string,\n auth: AuthContext,\n opts: GetOrderOptions = {},\n ): Promise<Order> {\n const headers = this.saasHeader(opts.saasToken);\n return this.ctx.http.request<Order>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Transitions an order to a new status. Server enforces legal transitions. */\n async transition(\n orderId: string,\n status: OrderStatus,\n auth: AuthContext,\n opts: OrderTransitionOptions = {},\n ): Promise<void> {\n const body: { status: OrderStatus; comment?: string } = { status };\n if (opts.comment !== undefined) body.comment = opts.comment;\n const headers = this.saasHeader(opts.saasToken);\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/${orderId}/transitions`,\n auth,\n body,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Convenience: transitions to `DECLINED` (customer cancel). */\n async cancel(\n orderId: string,\n auth: AuthContext,\n opts: { saasToken?: string } = {},\n ): Promise<void> {\n await this.transition(orderId, \"DECLINED\", auth, opts);\n }\n}\n\n/**\n * Backend / service-account access to the merchant-facing\n * `/salesorders/{id}` resource. Requires `order.order_read` (read) /\n * `order.order_manage` (update) scopes on a service token.\n *\n * The full admin list + filter surface is deferred to a follow-up\n * sub-spec. This service ships only single-resource read + patch — the\n * common backend use case (e.g. mixin updates after fulfilment).\n */\nexport class SalesOrdersService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/order-v2/${this.ctx.tenant}/salesorders`;\n }\n\n /** Fetches a single sales-order by id. */\n async get(orderId: string, auth: AuthContext): Promise<Order> {\n return this.ctx.http.request<Order>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n });\n }\n\n /** Patches an existing order (status, mixins, customAttributes, metadata). */\n async update(\n orderId: string,\n patch: SalesOrderPatch,\n auth: AuthContext,\n opts: UpdateSalesOrderOptions = {},\n ): Promise<Order> {\n const query: Record<string, string> = {};\n if (opts.recalculate === false) query.recalculate = \"false\";\n return this.ctx.http.request<Order>({\n method: \"PATCH\",\n path: `${this.base()}/${orderId}`,\n auth,\n ...(Object.keys(query).length > 0 ? { query } : {}),\n body: patch,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixNotFoundError } from \"../core/errors\";\nimport type { AvailabilityWithBundle } from \"../generated/availability\";\n\n/**\n * Site-aware product availability. Mirrors the Emporix Availability Service\n * `AvailabilityWithBundle` shape (the single-product GET and the batch search\n * both return the bundle-aware variant). There is no restock-date field.\n */\nexport type Availability = AvailabilityWithBundle;\n\n/** Shared options for {@link AvailabilityService} reads. */\nexport interface AvailabilityOptions {\n /**\n * When `true`, a product with no availability record resolves to a default\n * `{ available: true }` instead of throwing (single `get`) / being marked\n * unavailable (`getMany`). Off by default — opt in for tenants that sell\n * without stock management.\n */\n defaultAvailableOnNotFound?: boolean;\n}\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\n\n/**\n * Reads product availability per site. Default auth is anonymous (like\n * `PriceService.matchByContext`); pass a customer/raw/service context to use a\n * different token. Requires the `availability.availability_view` scope on\n * whichever token is used.\n */\nexport class AvailabilityService {\n constructor(private readonly ctx: ClientContext) {}\n\n /**\n * Single product. Resolves the availability record, or — when\n * `opts.defaultAvailableOnNotFound` is set — a default available record on 404.\n */\n async get(\n productId: string,\n siteCode: string,\n auth: AuthContext = ANON,\n opts: AvailabilityOptions = {},\n ): Promise<Availability> {\n try {\n return await this.ctx.http.request<Availability>({\n method: \"GET\",\n path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(\n productId,\n )}/${encodeURIComponent(siteCode)}`,\n auth,\n });\n } catch (err) {\n if (err instanceof EmporixNotFoundError && opts.defaultAvailableOnNotFound) {\n return { productId, site: siteCode, available: true };\n }\n throw err;\n }\n }\n\n /**\n * Batch read via `POST .../availability/search` (one request). Products with\n * no availability record are absent from the response; each is synthesized as\n * `{ available: false }` (or `{ available: true }` when\n * `opts.defaultAvailableOnNotFound` is set). The result preserves input order\n * and length. An empty `productIds` resolves to `[]` without a request.\n */\n async getMany(\n productIds: string[],\n siteCode: string,\n auth: AuthContext = ANON,\n opts: AvailabilityOptions = {},\n ): Promise<Availability[]> {\n if (productIds.length === 0) return [];\n const found = await this.ctx.http.request<Availability[]>({\n method: \"POST\",\n path: `/availability/${this.ctx.tenant}/availability/search`,\n auth,\n query: { site: siteCode, pageSize: productIds.length },\n body: productIds,\n });\n const byId = new Map<string, Availability>();\n for (const a of found) if (a.productId) byId.set(a.productId, a);\n return productIds.map(\n (id) =>\n byId.get(id) ?? {\n productId: id,\n site: siteCode,\n available: Boolean(opts.defaultAvailableOnNotFound),\n },\n );\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Configuration, ConfigurationDraft, ListConfigOptions } from \"./configuration-types\";\n\nexport type { Configuration, ConfigurationDraft, ListConfigOptions } from \"./configuration-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Tenant-wide configuration (`/configuration/{tenant}/configurations`).\n * Requires the backend-only `configuration.configuration_view` /\n * `configuration.configuration_manage` scopes — default auth: service.\n * Server-side use only; the service token must never reach a browser.\n */\nexport class TenantConfigService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/configuration/${this.ctx.tenant}/configurations`;\n }\n\n /** List tenant configurations, optionally filtered by `keys`. */\n async list(opts: ListConfigOptions = {}, auth: AuthContext = SERVICE): Promise<Configuration[]> {\n const query = opts.keys && opts.keys.length > 0 ? { keys: opts.keys.join(\",\") } : undefined;\n return this.ctx.http.request<Configuration[]>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(query ? { query } : {}),\n });\n }\n\n /** Retrieve one tenant configuration by key. */\n async get<T = unknown>(key: string, auth: AuthContext = SERVICE): Promise<Configuration<T>> {\n return this.ctx.http.request<Configuration<T>>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(key)}`,\n auth,\n });\n }\n\n /** Create one or more tenant configurations (array in, array out). */\n async create(drafts: ConfigurationDraft[], auth: AuthContext = SERVICE): Promise<Configuration[]> {\n return this.ctx.http.request<Configuration[]>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: drafts,\n });\n }\n\n /** Update one tenant configuration by key. */\n async update<T = unknown>(\n key: string,\n draft: ConfigurationDraft<T>,\n auth: AuthContext = SERVICE,\n ): Promise<Configuration<T>> {\n return this.ctx.http.request<Configuration<T>>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(key)}`,\n auth,\n body: draft,\n });\n }\n\n /** Delete one tenant configuration by key. */\n async delete(key: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(key)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { ClientConfiguration, ConfigurationDraft, ListConfigOptions } from \"./configuration-types\";\n\nexport type { ClientConfiguration } from \"./configuration-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Per-client configuration (`/configuration/{tenant}/clients/{client}/configurations`).\n * Requires the backend-only `configuration.configuration_view` /\n * `configuration.configuration_manage` scopes — default auth: service.\n * Server-side use only; the service token must never reach a browser.\n * The `client` arg is injected into each write body so callers don't repeat it.\n */\nexport class ClientConfigService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(client: string): string {\n return `/configuration/${this.ctx.tenant}/clients/${encodeURIComponent(client)}/configurations`;\n }\n\n /** List a client's configurations, optionally filtered by `keys`. */\n async list(\n client: string,\n opts: ListConfigOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<ClientConfiguration[]> {\n const query = opts.keys && opts.keys.length > 0 ? { keys: opts.keys.join(\",\") } : undefined;\n return this.ctx.http.request<ClientConfiguration[]>({\n method: \"GET\",\n path: this.base(client),\n auth,\n ...(query ? { query } : {}),\n });\n }\n\n /** Retrieve one client configuration by key. */\n async get<T = unknown>(\n client: string,\n key: string,\n auth: AuthContext = SERVICE,\n ): Promise<ClientConfiguration<T>> {\n return this.ctx.http.request<ClientConfiguration<T>>({\n method: \"GET\",\n path: `${this.base(client)}/${encodeURIComponent(key)}`,\n auth,\n });\n }\n\n /** Create one or more client configurations. Injects `client` into each item. */\n async create(\n client: string,\n drafts: ConfigurationDraft[],\n auth: AuthContext = SERVICE,\n ): Promise<ClientConfiguration[]> {\n const body = drafts.map((d) => ({ ...d, client }));\n return this.ctx.http.request<ClientConfiguration[]>({\n method: \"POST\",\n path: this.base(client),\n auth,\n body,\n });\n }\n\n /** Update one client configuration by key. Injects `client` into the body. */\n async update<T = unknown>(\n client: string,\n key: string,\n draft: ConfigurationDraft<T>,\n auth: AuthContext = SERVICE,\n ): Promise<ClientConfiguration<T>> {\n return this.ctx.http.request<ClientConfiguration<T>>({\n method: \"PUT\",\n path: `${this.base(client)}/${encodeURIComponent(key)}`,\n auth,\n body: { ...draft, client },\n });\n }\n\n /** Delete one client configuration by key. */\n async delete(client: string, key: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base(client)}/${encodeURIComponent(key)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixNotFoundError } from \"../core/errors\";\n\n/** A single shopping-list line item. */\nexport interface ShoppingListItem {\n id?: number;\n productId: string;\n quantity: number;\n cuttingOption?: string;\n servicePackagingOption?: string;\n comment?: string;\n mixins?: Record<string, unknown>;\n}\n\n/** A shopping list, normalized from the per-customer wire envelope. */\nexport interface ShoppingList {\n key: string;\n name: string;\n items: ShoppingListItem[];\n mixins?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\n/** Input for create / replace. */\nexport interface ShoppingListDraft {\n name: string;\n items?: ShoppingListItem[];\n mixins?: Record<string, unknown>;\n}\n\ninterface WireList {\n name?: string;\n items?: ShoppingListItem[];\n mixins?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\nconst RESERVED = new Set([\"customerId\", \"metadata\"]);\n\n/**\n * Per-customer shopping lists (`/shoppinglist/{tenant}/shopping-lists`).\n * `auth` is required: a customer token manages the caller's own lists;\n * a service token (employee scope) can act on any `customerId`. The Emporix\n * API has no item-level CRUD, so `addItem`/`removeItem`/`setItemQuantity`\n * read the list and `PUT` the full body — **last-write-wins**.\n */\nexport class ShoppingListService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/shoppinglist/${this.ctx.tenant}/shopping-lists`;\n }\n\n /** The caller's lists (or, with employee scope, all), normalized to an array. */\n async list(auth: AuthContext, opts: { name?: string } = {}): Promise<ShoppingList[]> {\n const envelopes = await this.ctx.http.request<Array<Record<string, unknown>>>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(opts.name ? { query: { name: opts.name } } : {}),\n });\n const out: ShoppingList[] = [];\n for (const env of envelopes ?? []) {\n for (const [key, value] of Object.entries(env)) {\n if (RESERVED.has(key) || value === null || typeof value !== \"object\") continue;\n const v = value as WireList;\n out.push({\n key,\n name: v.name ?? key,\n items: v.items ?? [],\n ...(v.mixins ? { mixins: v.mixins } : {}),\n ...(v.metadata ? { metadata: v.metadata } : {}),\n });\n }\n }\n return out;\n }\n\n /** Create a list; returns the new list id. */\n async create(draft: ShoppingListDraft, auth: AuthContext): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: draft,\n });\n }\n\n /** Replace the named list (low-level PUT). */\n async replace(customerId: string, draft: ShoppingListDraft, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(customerId)}`,\n auth,\n body: draft,\n });\n }\n\n /** Delete the named list, or all the customer's lists when `name` is omitted. */\n async delete(customerId: string, auth: AuthContext, opts: { name?: string } = {}): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(customerId)}`,\n auth,\n ...(opts.name ? { query: { name: opts.name } } : {}),\n });\n }\n\n private async loadList(listName: string, auth: AuthContext): Promise<ShoppingList> {\n const lists = await this.list(auth, { name: listName });\n const found = lists.find((l) => l.name === listName);\n if (!found) throw new EmporixNotFoundError(`Shopping list \"${listName}\" not found`, 404);\n return found;\n }\n\n private async put(customerId: string, list: ShoppingList, items: ShoppingListItem[], auth: AuthContext): Promise<void> {\n await this.replace(\n customerId,\n { name: list.name, items, ...(list.mixins ? { mixins: list.mixins } : {}) },\n auth,\n );\n }\n\n /** Add/replace an item by `productId` (read-modify-write, last-write-wins). */\n async addItem(customerId: string, listName: string, item: ShoppingListItem, auth: AuthContext): Promise<void> {\n const list = await this.loadList(listName, auth);\n const items = [...list.items.filter((i) => i.productId !== item.productId), item];\n await this.put(customerId, list, items, auth);\n }\n\n /** Remove an item by `productId` (no-op if absent). */\n async removeItem(customerId: string, listName: string, productId: string, auth: AuthContext): Promise<void> {\n const list = await this.loadList(listName, auth);\n const items = list.items.filter((i) => i.productId !== productId);\n await this.put(customerId, list, items, auth);\n }\n\n /** Set an item's quantity; `quantity <= 0` removes it. Adds the item if absent. */\n async setItemQuantity(customerId: string, listName: string, productId: string, quantity: number, auth: AuthContext): Promise<void> {\n if (quantity <= 0) return this.removeItem(customerId, listName, productId, auth);\n const list = await this.loadList(listName, auth);\n let items = list.items.map((i) => (i.productId === productId ? { ...i, quantity } : i));\n if (!items.some((i) => i.productId === productId)) items = [...items, { productId, quantity }];\n await this.put(customerId, list, items, auth);\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { MetadataFilter, RagType } from \"./ai-rag-indexer-types\";\n\nexport type { MetadataFilter, RagType } from \"./ai-rag-indexer-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * AI RAG Indexer (`/ai-rag-indexer/{tenant}/{type}`). Read which fields the RAG\n * index embeds / can filter on, and trigger a full asynchronous rebuild.\n *\n * Requires the backend-only `ai.agent_read` (reads) / `ai.agent_manage`\n * (`reindex`) scopes — default auth: service. **Server-side use only**; the\n * service token must never reach a browser.\n *\n * Quirks: only `PRODUCT` exists today (the `type` arg defaults to it);\n * `reindex` is a **full** rebuild (no delta), runs **asynchronously**, returns\n * `204` once *scheduled* (not on completion), has **no status endpoint** to\n * poll, and is costly — call it sparingly. The set of embedded fields is\n * configured in the AI Service, not here.\n */\nexport class RagIndexerService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(type: RagType): string {\n return `/ai-rag-indexer/${this.ctx.tenant}/${encodeURIComponent(type)}`;\n }\n\n /** The indexable embedding field names for `type` (default `\"PRODUCT\"`). */\n async ragMetadata(type: RagType = \"PRODUCT\", auth: AuthContext = SERVICE): Promise<string[]> {\n return this.ctx.http.request<string[]>({\n method: \"GET\",\n path: `${this.base(type)}/rag-metadata`,\n auth,\n });\n }\n\n /** The filterable metadata fields for `type` (default `\"PRODUCT\"`). */\n async filterMetadata(\n type: RagType = \"PRODUCT\",\n auth: AuthContext = SERVICE,\n ): Promise<MetadataFilter[]> {\n return this.ctx.http.request<MetadataFilter[]>({\n method: \"GET\",\n path: `${this.base(type)}/filter-metadata`,\n auth,\n });\n }\n\n /**\n * Schedule a full asynchronous re-index for `type` (default `\"PRODUCT\"`).\n * Resolves once the rebuild is *scheduled* (HTTP 204); there is no progress\n * to await or poll. Costly — avoid calling on a hot path.\n */\n async reindex(type: RagType = \"PRODUCT\", auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base(type)}/reindex`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n SequenceSchema,\n SequenceSchemaCreate,\n NextIdCommandRequest,\n NextIdResponse,\n NextIdOptions,\n NextIdsBatchRequest,\n NextIdsBatchResponse,\n} from \"./sequential-id-types\";\n\nexport type {\n SequenceSchema,\n SequenceSchemaCreate,\n NextIdCommandRequest,\n NextIdResponse,\n NextIdOptions,\n BatchNextIdEntry,\n NextIdsBatchRequest,\n NextIdsBatchResponse,\n} from \"./sequential-id-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Sequential ID Service (`/sequential-id/{tenant}/…`): server-managed,\n * gap-free sequential identifiers (order/invoice numbers, etc.) driven by\n * tenant-defined sequence schemas.\n *\n * Requires the backend-only `sequentialid.schema_view` (read + next-id) /\n * `sequentialid.schema_manage` (CRUD + set-active) scopes — default auth:\n * service. Server-side use only; the service token must never reach a browser.\n *\n * Schemas are immutable upstream (no PATCH/PUT): to change one, `deleteSchema`\n * then `createSchema`. The `maxValue` is a hard cap with no auto-reset, and\n * only one schema may be active per type.\n */\nexport class SequentialIdService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/sequential-id/${this.ctx.tenant}/schemas`;\n }\n\n /** List all sequence schemas for the tenant. */\n async listSchemas(auth: AuthContext = SERVICE): Promise<SequenceSchema[]> {\n return this.ctx.http.request<SequenceSchema[]>({\n method: \"GET\",\n path: this.base(),\n auth,\n });\n }\n\n /** Retrieve one sequence schema by id. */\n async getSchema(schemaId: string, auth: AuthContext = SERVICE): Promise<SequenceSchema> {\n return this.ctx.http.request<SequenceSchema>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(schemaId)}`,\n auth,\n });\n }\n\n /** Create a sequence schema. Schemas are immutable — there is no update. */\n async createSchema(\n schema: SequenceSchemaCreate,\n auth: AuthContext = SERVICE,\n ): Promise<SequenceSchema> {\n return this.ctx.http.request<SequenceSchema>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: schema,\n });\n }\n\n /** Delete a sequence schema by id. */\n async deleteSchema(schemaId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(schemaId)}`,\n auth,\n });\n }\n\n /** Mark a schema active for its type (only one schema may be active per type). */\n async setActiveSchema(schemaId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/${encodeURIComponent(schemaId)}/setActive`,\n auth,\n });\n }\n\n /** Get the active schema for a given schema type. */\n async listSchemasByType(schemaType: string, auth: AuthContext = SERVICE): Promise<SequenceSchema> {\n return this.ctx.http.request<SequenceSchema>({\n method: \"GET\",\n path: `${this.base()}/types/${encodeURIComponent(schemaType)}`,\n auth,\n });\n }\n\n /**\n * Generate the next id for a schema type. `body` carries an optional\n * `sequenceKey` (independent sub-pool counter) and `placeholders`.\n * `opts.siteCode` derives time/country placeholders from the site's settings.\n */\n async nextId(\n schemaType: string,\n body: NextIdCommandRequest = {},\n opts: NextIdOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<NextIdResponse> {\n const query = opts.siteCode ? { siteCode: opts.siteCode } : undefined;\n return this.ctx.http.request<NextIdResponse>({\n method: \"POST\",\n path: `${this.base()}/types/${encodeURIComponent(schemaType)}/nextId`,\n auth,\n body,\n ...(query ? { query } : {}),\n });\n }\n\n /**\n * Generate next ids for multiple schema types in one call. NOTE: the batch\n * endpoint path omits the `{tenant}` segment — the service derives the\n * tenant from the token.\n */\n async nextIdsBatch(\n req: NextIdsBatchRequest,\n auth: AuthContext = SERVICE,\n ): Promise<NextIdsBatchResponse> {\n return this.ctx.http.request<NextIdsBatchResponse>({\n method: \"POST\",\n path: `/sequential-id/sequenceSchemaBatch/nextIds`,\n auth,\n body: req,\n });\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Fee,\n ItemFee,\n FeeDraft,\n ItemFeeDraft,\n ItemFeeSearch,\n ListFeesQuery,\n SetItemFeesOptions,\n} from \"./fee-types\";\n\nexport type {\n Fee,\n ItemFee,\n FeeDraft,\n ItemFeeDraft,\n ItemFeeSearch,\n ListFeesQuery,\n SetItemFeesOptions,\n} from \"./fee-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Fee Service (`/fee/{tenant}/…`): fee definitions plus the\n * item/product mappings that attach them. Writes require a backend-only scope\n * (`fee.fee_*` / `fee.item_*`); GETs need a token but no scope. Default auth:\n * service. Server-side use only — the service token must never reach a browser.\n *\n * Quirks (server behavior, not handled here): a payment-type fee's `code` must\n * equal the payment-mode code or the fee is silently ignored; a wrong/missing\n * `siteCode` filters to an empty array rather than erroring; an expired\n * `activeTimespan` silently disables the fee; `setItemFees`/`setProductFees`\n * replace the whole mapping unless `partial` is set.\n */\nexport class FeeService {\n constructor(private readonly ctx: ClientContext) {}\n\n private feesBase(): string {\n return `/fee/${this.ctx.tenant}/fees`;\n }\n\n private itemFeesBase(): string {\n return `/fee/${this.ctx.tenant}/itemFees`;\n }\n\n private productFeesBase(): string {\n return `/fee/${this.ctx.tenant}/productFees`;\n }\n\n // --- Fee definitions ---\n\n /**\n * List fee definitions, wrapped in the shared {@link PaginatedItems}\n * envelope (same heuristic as `media.list`: `hasNextPage` is true when the\n * returned page is full). Defaults match Emporix server defaults\n * (`pageNumber: 1`, `pageSize: 60`).\n */\n async list(query: ListFeesQuery = {}, auth: AuthContext = SERVICE): Promise<PaginatedItems<Fee>> {\n const pageNumber = query.pageNumber ?? 1;\n const pageSize = query.pageSize ?? 60;\n const items = await this.ctx.http.request<Fee[]>({\n method: \"GET\",\n path: this.feesBase(),\n auth,\n query: { ...query, pageNumber, pageSize },\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Retrieve one fee definition by id. */\n async get(id: string, auth: AuthContext = SERVICE): Promise<Fee> {\n return this.ctx.http.request<Fee>({\n method: \"GET\",\n path: `${this.feesBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create a fee definition. */\n async create(draft: FeeDraft, auth: AuthContext = SERVICE): Promise<Fee> {\n return this.ctx.http.request<Fee>({\n method: \"POST\",\n path: this.feesBase(),\n auth,\n body: draft,\n });\n }\n\n /** Update a fee definition by id. */\n async update(id: string, draft: FeeDraft, auth: AuthContext = SERVICE): Promise<Fee> {\n return this.ctx.http.request<Fee>({\n method: \"PUT\",\n path: `${this.feesBase()}/${encodeURIComponent(id)}`,\n auth,\n body: draft,\n });\n }\n\n /** Delete a fee definition by id. */\n async delete(id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.feesBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n // --- Item-fee mappings ---\n\n /** List all item-fee mappings. */\n async listItemFees(auth: AuthContext = SERVICE): Promise<ItemFee[]> {\n return this.ctx.http.request<ItemFee[]>({\n method: \"GET\",\n path: this.itemFeesBase(),\n auth,\n });\n }\n\n /** Fee mappings for one item YRN. */\n async getItemFees(itemYrn: string, auth: AuthContext = SERVICE): Promise<ItemFee[]> {\n return this.ctx.http.request<ItemFee[]>({\n method: \"GET\",\n path: `${this.itemFeesBase()}/${encodeURIComponent(itemYrn)}/fees`,\n auth,\n });\n }\n\n /** Create an item-fee mapping. */\n async createItemFee(draft: ItemFeeDraft, auth: AuthContext = SERVICE): Promise<ItemFee> {\n return this.ctx.http.request<ItemFee>({\n method: \"POST\",\n path: this.itemFeesBase(),\n auth,\n body: draft,\n });\n }\n\n /**\n * Set the fee list for an item YRN. Destructive replace by default; pass\n * `{ partial: true }` to merge (`?partial=true`).\n */\n async setItemFees(\n itemYrn: string,\n feeIds: string[],\n opts: SetItemFeesOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<ItemFee> {\n return this.ctx.http.request<ItemFee>({\n method: \"PUT\",\n path: `${this.itemFeesBase()}/${encodeURIComponent(itemYrn)}/fees`,\n auth,\n body: { feeIds },\n ...(opts.partial ? { query: { partial: \"true\" } } : {}),\n });\n }\n\n /**\n * Delete item-fee mappings for a YRN. Without `feeId`, removes all mappings\n * for the YRN; with `feeId`, removes that single fee from the mapping.\n */\n async deleteItemFees(itemYrn: string, feeId?: string, auth: AuthContext = SERVICE): Promise<void> {\n const base = `${this.itemFeesBase()}/${encodeURIComponent(itemYrn)}/fees`;\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: feeId ? `${base}/${encodeURIComponent(feeId)}` : base,\n auth,\n });\n }\n\n /** Search item-fee mappings by item YRNs + site. */\n async searchItemFees(search: ItemFeeSearch, auth: AuthContext = SERVICE): Promise<ItemFee[]> {\n return this.ctx.http.request<ItemFee[]>({\n method: \"POST\",\n path: `${this.itemFeesBase()}/search`,\n auth,\n body: search,\n });\n }\n\n // --- Product-fee mappings ---\n\n /** Fee mappings for a product id. */\n async getProductFees(productId: string, auth: AuthContext = SERVICE): Promise<ItemFee[]> {\n return this.ctx.http.request<ItemFee[]>({\n method: \"GET\",\n path: `${this.productFeesBase()}/${encodeURIComponent(productId)}/fees`,\n auth,\n });\n }\n\n /**\n * Set the fee list for a product id. Destructive replace by default; pass\n * `{ partial: true }` to merge (`?partial=true`).\n */\n async setProductFees(\n productId: string,\n feeIds: string[],\n opts: SetItemFeesOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<ItemFee> {\n return this.ctx.http.request<ItemFee>({\n method: \"PUT\",\n path: `${this.productFeesBase()}/${encodeURIComponent(productId)}/fees`,\n auth,\n body: { feeIds },\n ...(opts.partial ? { query: { partial: \"true\" } } : {}),\n });\n }\n\n /** Delete all fee mappings for a product id. */\n async deleteProductFees(productId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.productFeesBase()}/${encodeURIComponent(productId)}/fees`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport { auth, type AuthContext } from \"../core/auth\";\n\n/** Options for {@link CloudFunctionsService.invoke}. */\nexport interface InvokeCloudFunctionOptions<TReq = unknown> {\n /** HTTP method. Default: \"POST\" (the canonical invoke). */\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n /** Optional sub-path the function exposes (leading slash optional). */\n path?: string;\n /** Request body (arbitrary JSON). */\n body?: TReq;\n /** Query-string params. */\n query?: Record<string, string | number | undefined>;\n /** Extra request headers (Content-Type: application/json is the default). */\n headers?: Record<string, string>;\n}\n\n/**\n * Invokes Emporix-hosted cloud functions. Request/response shapes are\n * caller-defined (generic) — there is no schema. Auth may be service,\n * customer, anonymous, or raw; the default is anonymous.\n */\nexport class CloudFunctionsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/cloud-functions/${this.ctx.tenant}/functions`;\n }\n\n async invoke<TRes = unknown, TReq = unknown>(\n functionId: string,\n options: InvokeCloudFunctionOptions<TReq> = {},\n authCtx: AuthContext = auth.anonymous(),\n ): Promise<TRes> {\n const sub = options.path ? `/${options.path.replace(/^\\//, \"\")}` : \"\";\n return this.ctx.http.request<TRes>({\n method: options.method ?? \"POST\",\n path: `${this.base()}/${functionId}${sub}`,\n auth: authCtx,\n ...(options.body !== undefined ? { body: options.body } : {}),\n ...(options.query ? { query: options.query } : {}),\n ...(options.headers ? { headers: options.headers } : {}),\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n WebhookSubscription,\n WebhookSubscriptionUpdateItem,\n WebhookSubscriptionUpdateResultItem,\n WebhookConfig,\n WebhookConfigDraft,\n WebhookConfigPatch,\n WebhookConfigCreated,\n WebhookStatistics,\n WebhookDashboardAccess,\n WebhookStatisticsQuery,\n DeleteConfigOptions,\n} from \"./webhook-types\";\n\nexport type {\n WebhookSubscription,\n WebhookSubscriptionUpdateItem,\n WebhookSubscriptionUpdateResultItem,\n WebhookConfig,\n WebhookConfigDraft,\n WebhookConfigPatch,\n WebhookConfigCreated,\n WebhookStatistics,\n WebhookDashboardAccess,\n WebhookStatisticsQuery,\n DeleteConfigOptions,\n} from \"./webhook-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Webhook administration (`/webhook/{tenant}/…`): the event-subscription\n * catalog and batch toggle, delivery-config CRUD, statistics, and Svix\n * dashboard access. Requires the backend-only `webhook.subscription_read` /\n * `webhook.subscription_manage` scopes — default auth: service. Server-side\n * use only; the service token must never reach a browser.\n */\nexport class WebhookService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/webhook/${this.ctx.tenant}`;\n }\n\n /** List the event-subscription catalog with each event's on/off state. */\n async listEventSubscriptions(auth: AuthContext = SERVICE): Promise<WebhookSubscription[]> {\n return this.ctx.http.request<WebhookSubscription[]>({\n method: \"GET\",\n path: `${this.base()}/event-subscriptions`,\n auth,\n });\n }\n\n /**\n * Batch subscribe/unsubscribe events. Returns the **207** per-item result\n * array verbatim — the batch can partially fail, so inspect each element's\n * `code`/`status` (e.g. `results.filter(r => (r.code ?? 0) >= 400)`). Does\n * NOT throw on a 207 with failed items; only a non-2xx HTTP status throws.\n */\n async updateEventSubscriptions(\n items: WebhookSubscriptionUpdateItem[],\n auth: AuthContext = SERVICE,\n ): Promise<WebhookSubscriptionUpdateResultItem[]> {\n return this.ctx.http.request<WebhookSubscriptionUpdateResultItem[]>({\n method: \"PATCH\",\n path: `${this.base()}/event-subscriptions`,\n auth,\n body: items,\n });\n }\n\n /** List delivery configurations. */\n async listConfigs(auth: AuthContext = SERVICE): Promise<WebhookConfig[]> {\n return this.ctx.http.request<WebhookConfig[]>({\n method: \"GET\",\n path: `${this.base()}/config`,\n auth,\n });\n }\n\n /** Retrieve one delivery configuration by code. */\n async getConfig(code: string, auth: AuthContext = SERVICE): Promise<WebhookConfig> {\n return this.ctx.http.request<WebhookConfig>({\n method: \"GET\",\n path: `${this.base()}/config/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /** Create a delivery configuration. Returns the server-assigned `{ code }`. */\n async createConfig(\n draft: WebhookConfigDraft,\n auth: AuthContext = SERVICE,\n ): Promise<WebhookConfigCreated> {\n return this.ctx.http.request<WebhookConfigCreated>({\n method: \"POST\",\n path: `${this.base()}/config`,\n auth,\n body: draft,\n });\n }\n\n /** Replace a delivery configuration by code (204). */\n async replaceConfig(\n code: string,\n draft: WebhookConfigDraft,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/config/${encodeURIComponent(code)}`,\n auth,\n body: draft,\n });\n }\n\n /**\n * Partially update a delivery configuration by code (204). The body is an\n * **array** of `{ op, path, value }` operations (UPSERT / REMOVE).\n */\n async patchConfig(\n code: string,\n patches: WebhookConfigPatch[],\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/config/${encodeURIComponent(code)}`,\n auth,\n body: patches,\n });\n }\n\n /**\n * Delete a delivery configuration by code. Pass `{ force: true }` to delete\n * the currently-active config (the server otherwise rejects it).\n */\n async deleteConfig(\n code: string,\n opts: DeleteConfigOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/config/${encodeURIComponent(code)}`,\n auth,\n ...(opts.force === true ? { query: { force: \"true\" } } : {}),\n });\n }\n\n /** Read delivery statistics over an optional `YYYY-MM` range. */\n async getStatistics(\n query: WebhookStatisticsQuery = {},\n auth: AuthContext = SERVICE,\n ): Promise<WebhookStatistics> {\n const q: Record<string, string> = {};\n if (query.fromYearMonth) q.fromYearMonth = query.fromYearMonth;\n if (query.toYearMonth) q.toYearMonth = query.toYearMonth;\n return this.ctx.http.request<WebhookStatistics>({\n method: \"GET\",\n path: `${this.base()}/statistics`,\n auth,\n ...(Object.keys(q).length > 0 ? { query: q } : {}),\n });\n }\n\n /** Obtain Svix dashboard access (URL / token). */\n async getDashboardAccess(auth: AuthContext = SERVICE): Promise<WebhookDashboardAccess> {\n return this.ctx.http.request<WebhookDashboardAccess>({\n method: \"GET\",\n path: `${this.base()}/dashboard-access`,\n auth,\n });\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Schema,\n SchemaDraft,\n SchemaUpdate,\n SchemaTypeName,\n ListSchemasQuery,\n CustomEntity,\n CustomEntityDraft,\n CustomInstance,\n CustomInstanceDraft,\n ListInstancesQuery,\n ListCustomEntitiesOptions,\n InstanceSearchBody,\n} from \"./schema-types\";\n\nexport type {\n Schema,\n SchemaAttribute,\n SchemaTypeName,\n SchemaDraft,\n SchemaUpdate,\n CustomEntity,\n CustomInstance,\n CustomEntityDraft,\n CustomInstanceDraft,\n ListSchemasQuery,\n ListInstancesQuery,\n ListCustomEntitiesOptions,\n InstanceSearchBody,\n} from \"./schema-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Schema Service (`/schema/{tenant}/…`): schemas, entity types, custom\n * entities and their instances. Requires the backend-only `schema.schema_*`\n * / `schema.custominstance_*` scopes — default auth: service. Server-side use\n * only; the service token must never reach a browser.\n */\nexport class SchemaService {\n constructor(private readonly ctx: ClientContext) {}\n\n private schemasBase(): string {\n return `/schema/${this.ctx.tenant}/schemas`;\n }\n\n private entitiesBase(): string {\n return `/schema/${this.ctx.tenant}/custom-entities`;\n }\n\n private instancesBase(type: string): string {\n return `${this.entitiesBase()}/${encodeURIComponent(type)}/instances`;\n }\n\n // --- (A) Schemas ---------------------------------------------------------\n\n /**\n * List schemas, wrapped in the shared {@link PaginatedItems} envelope.\n * `hasNextPage` is the standard SDK heuristic (`items.length === pageSize`).\n * Pagination defaults match the rest of the SDK (`pageNumber: 1`,\n * `pageSize: 60`).\n */\n async listSchemas(\n query: ListSchemasQuery = {},\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<Schema>> {\n const pageNumber = query.pageNumber ?? 1;\n const pageSize = query.pageSize ?? 60;\n const q: Record<string, string | number> = { pageNumber, pageSize };\n if (query.q) q.q = query.q;\n if (query.type) q.type = query.type;\n const items = await this.ctx.http.request<Schema[]>({\n method: \"GET\",\n path: this.schemasBase(),\n auth,\n query: q,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Retrieve one schema by id. */\n async getSchema(id: string, auth: AuthContext = SERVICE): Promise<Schema> {\n return this.ctx.http.request<Schema>({\n method: \"GET\",\n path: `${this.schemasBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create a schema. */\n async createSchema(draft: SchemaDraft, auth: AuthContext = SERVICE): Promise<Schema> {\n return this.ctx.http.request<Schema>({\n method: \"POST\",\n path: this.schemasBase(),\n auth,\n body: draft,\n });\n }\n\n /**\n * Update a schema. The upstream API requires `draft.metadata.version`; a\n * stale version yields 409 Conflict (propagated as the standard conflict\n * error).\n */\n async updateSchema(\n id: string,\n draft: SchemaUpdate,\n auth: AuthContext = SERVICE,\n ): Promise<Schema> {\n return this.ctx.http.request<Schema>({\n method: \"PUT\",\n path: `${this.schemasBase()}/${encodeURIComponent(id)}`,\n auth,\n body: draft,\n });\n }\n\n /** Delete a schema by id. */\n async deleteSchema(id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.schemasBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /**\n * Validate a schema document without persisting it (`POST /schemas/file`).\n * Returns the server's validation result verbatim.\n */\n async validateSchemaFile<R = unknown>(\n body: SchemaDraft,\n auth: AuthContext = SERVICE,\n ): Promise<R> {\n return this.ctx.http.request<R>({\n method: \"POST\",\n path: `${this.schemasBase()}/file`,\n auth,\n body,\n });\n }\n\n // --- (B) Types -----------------------------------------------------------\n\n /** List entity types that currently have at least one schema. */\n async listTypes(auth: AuthContext = SERVICE): Promise<SchemaTypeName[]> {\n return this.ctx.http.request<SchemaTypeName[]>({\n method: \"GET\",\n path: `/schema/${this.ctx.tenant}/types`,\n auth,\n });\n }\n\n /** Set the entity types a schema applies to (`PUT /schemas/{id}/types`). */\n async setSchemaTypes(\n id: string,\n types: SchemaTypeName[],\n auth: AuthContext = SERVICE,\n ): Promise<Schema> {\n return this.ctx.http.request<Schema>({\n method: \"PUT\",\n path: `${this.schemasBase()}/${encodeURIComponent(id)}/types`,\n auth,\n body: { types },\n });\n }\n\n // --- (C) Custom entities -------------------------------------------------\n\n /** List custom-entity definitions. `expandSchemas` inlines each schema body. */\n async listCustomEntities(\n opts: ListCustomEntitiesOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<CustomEntity[]> {\n return this.ctx.http.request<CustomEntity[]>({\n method: \"GET\",\n path: this.entitiesBase(),\n auth,\n ...(opts.expandSchemas ? { query: { expandSchemas: \"true\" } } : {}),\n });\n }\n\n /** Retrieve one custom-entity definition by id. */\n async getCustomEntity(id: string, auth: AuthContext = SERVICE): Promise<CustomEntity> {\n return this.ctx.http.request<CustomEntity>({\n method: \"GET\",\n path: `${this.entitiesBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create a custom-entity definition. */\n async createCustomEntity(\n draft: CustomEntityDraft,\n auth: AuthContext = SERVICE,\n ): Promise<CustomEntity> {\n return this.ctx.http.request<CustomEntity>({\n method: \"POST\",\n path: this.entitiesBase(),\n auth,\n body: draft,\n });\n }\n\n /** Update a custom-entity definition. */\n async updateCustomEntity(\n id: string,\n draft: CustomEntityDraft,\n auth: AuthContext = SERVICE,\n ): Promise<CustomEntity> {\n return this.ctx.http.request<CustomEntity>({\n method: \"PUT\",\n path: `${this.entitiesBase()}/${encodeURIComponent(id)}`,\n auth,\n body: draft,\n });\n }\n\n /**\n * Delete a custom-entity definition. The server rejects with 409 if\n * instances or schemas still reference it (propagated as the standard\n * conflict error).\n */\n async deleteCustomEntity(id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.entitiesBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n // --- (D) Custom instances ------------------------------------------------\n\n /**\n * List a custom entity's instances, wrapped in {@link PaginatedItems}.\n * `type` is the custom-entity type and is always the first argument.\n */\n async listInstances<T = Record<string, unknown>>(\n type: string,\n query: ListInstancesQuery = {},\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<CustomInstance<T>>> {\n const pageNumber = query.pageNumber ?? 1;\n const pageSize = query.pageSize ?? 60;\n const items = await this.ctx.http.request<CustomInstance<T>[]>({\n method: \"GET\",\n path: this.instancesBase(type),\n auth,\n query: { ...query, pageNumber, pageSize },\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Retrieve one instance by id. */\n async getInstance<T = Record<string, unknown>>(\n type: string,\n id: string,\n auth: AuthContext = SERVICE,\n ): Promise<CustomInstance<T>> {\n return this.ctx.http.request<CustomInstance<T>>({\n method: \"GET\",\n path: `${this.instancesBase(type)}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create an instance of a custom entity. */\n async createInstance<T = Record<string, unknown>>(\n type: string,\n draft: CustomInstanceDraft<T>,\n auth: AuthContext = SERVICE,\n ): Promise<CustomInstance<T>> {\n return this.ctx.http.request<CustomInstance<T>>({\n method: \"POST\",\n path: this.instancesBase(type),\n auth,\n body: draft,\n });\n }\n\n /** Replace an instance (full `PUT`). */\n async replaceInstance<T = Record<string, unknown>>(\n type: string,\n id: string,\n draft: CustomInstanceDraft<T>,\n auth: AuthContext = SERVICE,\n ): Promise<CustomInstance<T>> {\n return this.ctx.http.request<CustomInstance<T>>({\n method: \"PUT\",\n path: `${this.instancesBase(type)}/${encodeURIComponent(id)}`,\n auth,\n body: draft,\n });\n }\n\n /** Partially update an instance (`PATCH`). */\n async patchInstance<T = Record<string, unknown>>(\n type: string,\n id: string,\n patch: Partial<CustomInstanceDraft<T>>,\n auth: AuthContext = SERVICE,\n ): Promise<CustomInstance<T>> {\n return this.ctx.http.request<CustomInstance<T>>({\n method: \"PATCH\",\n path: `${this.instancesBase(type)}/${encodeURIComponent(id)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete an instance by id. */\n async deleteInstance(type: string, id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.instancesBase(type)}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /**\n * Structured search over a custom entity's instances\n * (`POST /instances/search`), wrapped in {@link PaginatedItems}.\n */\n async searchInstances<T = Record<string, unknown>>(\n type: string,\n body: InstanceSearchBody,\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<CustomInstance<T>>> {\n const items = await this.ctx.http.request<CustomInstance<T>[]>({\n method: \"POST\",\n path: `${this.instancesBase(type)}/search`,\n auth,\n body,\n });\n return { items, pageNumber: 1, pageSize: items.length, hasNextPage: false };\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n TextRequest,\n TextResponse,\n CompletionRequest,\n CompletionResponse,\n Agent,\n AgentInput,\n AgentPatchOp,\n AgentSearchQuery,\n ChatRequest,\n ChatResponse,\n JobIdResponse,\n DeleteAgentOptions,\n} from \"./ai-types\";\n\nexport type {\n TextRequest,\n TextResponse,\n CompletionMessage,\n CompletionRequest,\n CompletionResponse,\n Agent,\n AgentInput,\n AgentPatchOp,\n AgentSearchQuery,\n ChatRequest,\n ChatResponse,\n JobIdResponse,\n DeleteAgentOptions,\n} from \"./ai-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix AI Service (`/ai-service/{tenant}/…`): text generation, chat\n * completions, and the agentic layer (agent CRUD + synchronous/asynchronous\n * chat). Every endpoint requires a backend-only `ai.*` scope and the\n * **service (clientCredentials) token** — default auth: service.\n *\n * Server-side use only; the service token must never reach a browser. A\n * storefront chat (scope `ai.agentexecution_manage_own`) would require a\n * BFF / token-proxy — out of scope for this SDK.\n *\n * The model is server-fixed per tenant; there is no `model` parameter.\n */\nexport class AiService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/ai-service/${this.ctx.tenant}`;\n }\n\n /** Generate text from a single prompt (`POST /texts`). Honors `maxTokens`. */\n async generateText(input: TextRequest, auth: AuthContext = SERVICE): Promise<TextResponse> {\n return this.ctx.http.request<TextResponse>({\n method: \"POST\",\n path: `${this.base()}/texts`,\n auth,\n body: input,\n });\n }\n\n /** Run a chat completion over a message list (`POST /completions`). No `maxTokens`. */\n async complete(\n input: CompletionRequest,\n auth: AuthContext = SERVICE,\n ): Promise<CompletionResponse> {\n return this.ctx.http.request<CompletionResponse>({\n method: \"POST\",\n path: `${this.base()}/completions`,\n auth,\n body: input,\n });\n }\n\n /** List all agentic agents. */\n async listAgents(auth: AuthContext = SERVICE): Promise<Agent[]> {\n return this.ctx.http.request<Agent[]>({\n method: \"GET\",\n path: `${this.base()}/agentic/agents`,\n auth,\n });\n }\n\n /** Retrieve one agent by id. */\n async getAgent(id: string, auth: AuthContext = SERVICE): Promise<Agent> {\n return this.ctx.http.request<Agent>({\n method: \"GET\",\n path: `${this.base()}/agentic/agents/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create-or-replace an agent by id (`PUT`). Takes the agent write shape. */\n async upsertAgent(id: string, agent: AgentInput, auth: AuthContext = SERVICE): Promise<Agent> {\n return this.ctx.http.request<Agent>({\n method: \"PUT\",\n path: `${this.base()}/agentic/agents/${encodeURIComponent(id)}`,\n auth,\n body: agent,\n });\n }\n\n /**\n * Patch an agent with an op array (`PATCH`). `ops` use the upstream\n * UPPERCASE enum (`ADD | REMOVE | REPLACE`) and are sent verbatim — this is\n * NOT RFC-6902 JSON-Patch.\n */\n async patchAgent(\n id: string,\n ops: AgentPatchOp[],\n auth: AuthContext = SERVICE,\n ): Promise<Agent> {\n return this.ctx.http.request<Agent>({\n method: \"PATCH\",\n path: `${this.base()}/agentic/agents/${encodeURIComponent(id)}`,\n auth,\n body: ops,\n });\n }\n\n /**\n * Delete an agent by id. Pass `{ force: true }` to delete an agent that is\n * still referenced elsewhere (`?force=true`).\n */\n async deleteAgent(\n id: string,\n auth: AuthContext = SERVICE,\n opts: DeleteAgentOptions = {},\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/agentic/agents/${encodeURIComponent(id)}`,\n auth,\n ...(opts.force ? { query: { force: \"true\" } } : {}),\n });\n }\n\n /** Server-side agent search (`POST /agentic/agents/search`). */\n async searchAgents(query: AgentSearchQuery, auth: AuthContext = SERVICE): Promise<Agent[]> {\n return this.ctx.http.request<Agent[]>({\n method: \"POST\",\n path: `${this.base()}/agentic/agents/search`,\n auth,\n body: query,\n });\n }\n\n /**\n * Synchronous agent chat (`POST /agentic/chat`). Returns the response\n * ARRAY verbatim (the upstream contract is an array, not a single object).\n */\n async chat(input: ChatRequest, auth: AuthContext = SERVICE): Promise<ChatResponse[]> {\n return this.ctx.http.request<ChatResponse[]>({\n method: \"POST\",\n path: `${this.base()}/agentic/chat`,\n auth,\n body: input,\n });\n }\n\n /**\n * Fire-and-forget agent chat (`POST /agentic/chat-async`, HTTP 201).\n * Returns the job-id ARRAY verbatim.\n */\n async chatAsync(input: ChatRequest, auth: AuthContext = SERVICE): Promise<JobIdResponse[]> {\n return this.ctx.http.request<JobIdResponse[]>({\n method: \"POST\",\n path: `${this.base()}/agentic/chat-async`,\n auth,\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n TaxConfig,\n TaxConfigInput,\n TaxConfigUpdate,\n TaxConfigCreated,\n TaxCalculationRequest,\n TaxCalculationResult,\n} from \"./tax-types\";\n\nexport type {\n TaxClass,\n TaxLocation,\n TaxConfig,\n TaxConfigInput,\n TaxConfigUpdate,\n TaxConfigCreated,\n TaxCalculationInput,\n TaxCalculationRequest,\n TaxCalculationResult,\n} from \"./tax-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Tax Service (`/tax/{tenant}/…`): CRUD over per-location tax\n * configurations and the net/gross tax-calculation command. Every endpoint\n * requires a backend `tax.tax_read` / `tax.tax_manage` scope and the\n * **service (clientCredentials) token** — default auth: service.\n *\n * Server-side use only; the service token must never reach a browser.\n */\nexport class TaxService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/tax/${this.ctx.tenant}`;\n }\n\n /** List all per-location tax configurations. */\n async listTaxConfigs(auth: AuthContext = SERVICE): Promise<TaxConfig[]> {\n return this.ctx.http.request<TaxConfig[]>({\n method: \"GET\",\n path: `${this.base()}/taxes`,\n auth,\n });\n }\n\n /** Retrieve one tax configuration by its location (country) code. */\n async getTaxConfig(locationCode: string, auth: AuthContext = SERVICE): Promise<TaxConfig> {\n return this.ctx.http.request<TaxConfig>({\n method: \"GET\",\n path: `${this.base()}/taxes/${encodeURIComponent(locationCode)}`,\n auth,\n });\n }\n\n /** Create a tax configuration (`POST`). Returns the created `{ locationCode }`. */\n async createTaxConfig(\n input: TaxConfigInput,\n auth: AuthContext = SERVICE,\n ): Promise<TaxConfigCreated> {\n return this.ctx.http.request<TaxConfigCreated>({\n method: \"POST\",\n path: `${this.base()}/taxes`,\n auth,\n body: input,\n });\n }\n\n /**\n * Update a tax configuration by location code (`PUT`). `metadata.version` is\n * required (optimistic locking — a stale version yields 409).\n */\n async updateTaxConfig(\n locationCode: string,\n input: TaxConfigUpdate,\n auth: AuthContext = SERVICE,\n ): Promise<TaxConfig> {\n return this.ctx.http.request<TaxConfig>({\n method: \"PUT\",\n path: `${this.base()}/taxes/${encodeURIComponent(locationCode)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a tax configuration by location code. */\n async deleteTaxConfig(locationCode: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/taxes/${encodeURIComponent(locationCode)}`,\n auth,\n });\n }\n\n /**\n * Calculate net/gross values for a price (`PUT /taxes/calculation-commands`).\n * Single command in, single result out.\n */\n async calculateTax(\n request: TaxCalculationRequest,\n auth: AuthContext = SERVICE,\n ): Promise<TaxCalculationResult> {\n return this.ctx.http.request<TaxCalculationResult>({\n method: \"PUT\",\n path: `${this.base()}/taxes/calculation-commands`,\n auth,\n body: request,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n CouponList,\n Coupon,\n CouponInput,\n CouponUpdate,\n CouponCreated,\n Redemption,\n RedemptionInput,\n RedemptionCreated,\n ReferralCoupon,\n} from \"./coupon-types\";\n\nexport type {\n Coupon,\n CouponList,\n CouponInput,\n CouponUpdate,\n CouponCreated,\n Redemption,\n RedemptionInput,\n RedemptionCreated,\n ReferralCoupon,\n} from \"./coupon-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Coupon Service (`/coupon/{tenant}/…`): coupon CRUD, validation,\n * redemptions, and referral coupons.\n *\n * Every method defaults to the **service (clientCredentials) token**. For\n * customer-driven validation/redemption, pass `auth.customer(token)` as the\n * trailing argument (the React hooks do this with the browser context). The\n * service token must never reach a browser.\n */\nexport class CouponService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/coupon/${this.ctx.tenant}`;\n }\n\n /** List coupons by criteria. Returns a plain array. */\n async listCoupons(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CouponList> {\n return this.ctx.http.request<CouponList>({\n method: \"GET\",\n path: `${this.base()}/coupons`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one coupon by code. */\n async getCoupon(code: string, auth: AuthContext = SERVICE): Promise<Coupon> {\n return this.ctx.http.request<Coupon>({\n method: \"GET\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /** Create a coupon (`POST`, HTTP 201). Returns the created resource's `{ id?, yrn? }`. */\n async createCoupon(input: CouponInput, auth: AuthContext = SERVICE): Promise<CouponCreated> {\n return this.ctx.http.request<CouponCreated>({\n method: \"POST\",\n path: `${this.base()}/coupons`,\n auth,\n body: input,\n });\n }\n\n /** Replace a coupon by code (`PUT`). Resolves once the update is accepted. */\n async updateCoupon(code: string, input: CouponUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a coupon by code (`PATCH` merge body). */\n async patchCoupon(code: string, patch: CouponUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a coupon by code. */\n async deleteCoupon(code: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /**\n * Check whether a coupon can be redeemed (`POST /validation`). Resolves when\n * redeemable; throws an `EmporixError` otherwise (no response body).\n */\n async validateCoupon(\n code: string,\n redemption: RedemptionInput,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/validation`,\n auth,\n body: redemption,\n });\n }\n\n /** List a coupon's redemptions by criteria. */\n async listRedemptions(\n code: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<Redemption[]> {\n return this.ctx.http.request<Redemption[]>({\n method: \"GET\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/redemptions`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Redeem a coupon by creating a redemption (`POST`, HTTP 201). Returns the resource location. */\n async redeemCoupon(\n code: string,\n redemption: RedemptionInput,\n auth: AuthContext = SERVICE,\n ): Promise<RedemptionCreated> {\n return this.ctx.http.request<RedemptionCreated>({\n method: \"POST\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/redemptions`,\n auth,\n body: redemption,\n });\n }\n\n /** Retrieve one redemption by id. */\n async getRedemption(code: string, id: string, auth: AuthContext = SERVICE): Promise<Redemption> {\n return this.ctx.http.request<Redemption>({\n method: \"GET\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/redemptions/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Delete a redemption by id. */\n async deleteRedemption(code: string, id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/redemptions/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Retrieve a customer's referral coupon (resolves to an empty body when none exists). */\n async getReferralCoupon(customerNumber: string, auth: AuthContext = SERVICE): Promise<ReferralCoupon> {\n return this.ctx.http.request<ReferralCoupon>({\n method: \"GET\",\n path: `${this.base()}/referral-coupons/${encodeURIComponent(customerNumber)}`,\n auth,\n });\n }\n\n /** Create a referral coupon code for a customer (no request body). */\n async createReferralCoupon(\n customerNumber: string,\n auth: AuthContext = SERVICE,\n ): Promise<ReferralCoupon> {\n return this.ctx.http.request<ReferralCoupon>({\n method: \"POST\",\n path: `${this.base()}/referral-coupons/${encodeURIComponent(customerNumber)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n CustomerSummaryBatch,\n PointsSummary,\n NewPointsEntry,\n AddedPoints,\n RedeemedPoints,\n RedeemOption,\n RedeemOptionList,\n RedeemMyPointsInput,\n RedeemCouponResult,\n} from \"./reward-points-types\";\n\nexport type {\n CustomerSummaryBatch,\n PointsSummary,\n NewPointsEntry,\n AddedPoints,\n RedeemedPoints,\n RedeemOption,\n RedeemOptionList,\n RedeemMyPointsInput,\n RedeemCouponResult,\n} from \"./reward-points-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Reward Points Service (`/reward-points/…`): admin customer-points\n * management, the signed-in customer's own points, and redeem options.\n *\n * Auth differs per group: admin and redeem-option management default to the\n * **service token**; the `/public/*` methods require a **customer token** (they\n * accept only `CustomerAccessToken`). Note the mixed base paths — customer/\n * public/batch endpoints omit `{tenant}`, redeem options include it. A point\n * balance (`getCustomerPoints` / `getMyPoints`) is returned as a bare `number`.\n */\nexport class RewardPointsService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Base without tenant (customer / public / batch endpoints). */\n private base(): string {\n return `/reward-points`;\n }\n\n /** Tenant-scoped base (redeem options only). */\n private tenantBase(): string {\n return `/reward-points/${this.ctx.tenant}`;\n }\n\n // --- Admin: customer points management (service token) ---\n\n /** Batch summary across all customers. */\n async listAllSummaries(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CustomerSummaryBatch> {\n return this.ctx.http.request<CustomerSummaryBatch>({\n method: \"GET\",\n path: `${this.base()}/summaryBatch`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one customer's reward-points balance. */\n async getCustomerPoints(customerId: string, auth: AuthContext = SERVICE): Promise<number> {\n return this.ctx.http.request<number>({\n method: \"GET\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}`,\n auth,\n });\n }\n\n /** Create a reward-points entry for a customer. */\n async createCustomerPoints(\n customerId: string,\n input: NewPointsEntry,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a customer's reward points. */\n async deleteCustomerPoints(customerId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}`,\n auth,\n });\n }\n\n /** Retrieve a reward-points summary for one customer. */\n async getCustomerSummary(customerId: string, auth: AuthContext = SERVICE): Promise<PointsSummary> {\n return this.ctx.http.request<PointsSummary>({\n method: \"GET\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}/summary`,\n auth,\n });\n }\n\n /** Add reward points for a customer. */\n async addPoints(customerId: string, input: AddedPoints, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}/addPoints`,\n auth,\n body: input,\n });\n }\n\n /** Redeem a customer's reward points (on behalf). */\n async redeemPoints(customerId: string, input: RedeemedPoints, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}/redeemPoints`,\n auth,\n body: input,\n });\n }\n\n // --- Storefront: the signed-in customer's own points (customer token required) ---\n\n /** The signed-in customer's reward-points balance. Requires a customer `auth`. */\n async getMyPoints(auth: AuthContext): Promise<number> {\n return this.ctx.http.request<number>({\n method: \"GET\",\n path: `${this.base()}/public/customer`,\n auth,\n });\n }\n\n /** The signed-in customer's reward-points summary. Requires a customer `auth`. */\n async getMySummary(auth: AuthContext): Promise<PointsSummary> {\n return this.ctx.http.request<PointsSummary>({\n method: \"GET\",\n path: `${this.base()}/public/customer/summary`,\n auth,\n });\n }\n\n /**\n * Redeem the signed-in customer's points for a coupon code. Requires a\n * customer `auth`. Returns the issued coupon `{ code }`.\n */\n async redeemMyPoints(input: RedeemMyPointsInput, auth: AuthContext): Promise<RedeemCouponResult> {\n return this.ctx.http.request<RedeemCouponResult>({\n method: \"POST\",\n path: `${this.base()}/public/customer/redeem`,\n auth,\n body: input,\n });\n }\n\n // --- Redeem options (tenant-scoped; read open to customer, management service-only) ---\n\n /** List redeem options. Defaults to the service token; pass a customer `auth` for storefront reads. */\n async listRedeemOptions(auth: AuthContext = SERVICE): Promise<RedeemOptionList> {\n return this.ctx.http.request<RedeemOptionList>({\n method: \"GET\",\n path: `${this.tenantBase()}/redeemOptions`,\n auth,\n });\n }\n\n /** Create a redeem option. Returns the updated options list. */\n async createRedeemOption(input: RedeemOption, auth: AuthContext = SERVICE): Promise<RedeemOptionList> {\n return this.ctx.http.request<RedeemOptionList>({\n method: \"POST\",\n path: `${this.tenantBase()}/redeemOptions`,\n auth,\n body: input,\n });\n }\n\n /** Update a redeem option by id. Resolves once accepted (no response body). */\n async updateRedeemOption(\n redeemOptionId: string,\n input: RedeemOption,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.tenantBase()}/redeemOptions/${encodeURIComponent(redeemOptionId)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a redeem option by id. */\n async deleteRedeemOption(redeemOptionId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.tenantBase()}/redeemOptions/${encodeURIComponent(redeemOptionId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Brand, BrandList, BrandInput, BrandUpdate } from \"./brand-types\";\n\nexport type { Brand, BrandList, BrandInput, BrandUpdate } from \"./brand-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Brand Service (`/brand/brands`): CRUD over brands. Server-side;\n * defaults to the service token (reads also work with an anonymous token).\n * The path carries no `{tenant}` segment — the tenant comes from the token.\n */\nexport class BrandService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/brand/brands`;\n }\n\n /** List all brands. */\n async listBrands(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<BrandList> {\n return this.ctx.http.request<BrandList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one brand by id. */\n async getBrand(brandId: string, auth: AuthContext = SERVICE): Promise<Brand> {\n return this.ctx.http.request<Brand>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(brandId)}`,\n auth,\n });\n }\n\n /** Create a brand. */\n async createBrand(input: BrandInput, auth: AuthContext = SERVICE): Promise<Brand> {\n return this.ctx.http.request<Brand>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /** Replace a brand by id. */\n async updateBrand(brandId: string, input: BrandUpdate, auth: AuthContext = SERVICE): Promise<Brand> {\n return this.ctx.http.request<Brand>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(brandId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a brand by id. */\n async patchBrand(brandId: string, patch: BrandUpdate, auth: AuthContext = SERVICE): Promise<Brand> {\n return this.ctx.http.request<Brand>({\n method: \"PATCH\",\n path: `${this.base()}/${encodeURIComponent(brandId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a brand by id. */\n async deleteBrand(brandId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(brandId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Label, LabelList, LabelInput, LabelUpdate } from \"./label-types\";\n\nexport type { Label, LabelList, LabelInput, LabelUpdate } from \"./label-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Label Service (`/label/labels`): CRUD over product labels (e.g.\n * \"Sale\", \"New\"). Server-side; defaults to the service token. The path carries\n * no `{tenant}` segment — the tenant comes from the token.\n */\nexport class LabelService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/label/labels`;\n }\n\n /** List all labels. */\n async listLabels(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<LabelList> {\n return this.ctx.http.request<LabelList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one label by id. */\n async getLabel(labelId: string, auth: AuthContext = SERVICE): Promise<Label> {\n return this.ctx.http.request<Label>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(labelId)}`,\n auth,\n });\n }\n\n /** Create a label. */\n async createLabel(input: LabelInput, auth: AuthContext = SERVICE): Promise<Label> {\n return this.ctx.http.request<Label>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /** Replace a label by id. */\n async updateLabel(labelId: string, input: LabelUpdate, auth: AuthContext = SERVICE): Promise<Label> {\n return this.ctx.http.request<Label>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(labelId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a label by id. */\n async patchLabel(labelId: string, patch: LabelUpdate, auth: AuthContext = SERVICE): Promise<Label> {\n return this.ctx.http.request<Label>({\n method: \"PATCH\",\n path: `${this.base()}/${encodeURIComponent(labelId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a label by id. */\n async deleteLabel(labelId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(labelId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Country, CountryList, CountryUpdate, Region, RegionList } from \"./country-types\";\n\nexport type { Country, CountryList, CountryUpdate, Region, RegionList } from \"./country-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Country Service (`/country/{tenant}/…`): countries and regions\n * master data. Server-side; defaults to the service token (reads also work\n * with an anonymous token). Countries are predefined — list/get/patch only\n * (no create/delete).\n */\nexport class CountryService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/country/${this.ctx.tenant}`;\n }\n\n /** List all countries. */\n async listCountries(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CountryList> {\n return this.ctx.http.request<CountryList>({\n method: \"GET\",\n path: `${this.base()}/countries`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one country by code. */\n async getCountry(countryCode: string, auth: AuthContext = SERVICE): Promise<Country> {\n return this.ctx.http.request<Country>({\n method: \"GET\",\n path: `${this.base()}/countries/${encodeURIComponent(countryCode)}`,\n auth,\n });\n }\n\n /** Partially update a country by code. Resolves once accepted (no response body). */\n async patchCountry(countryCode: string, patch: CountryUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/countries/${encodeURIComponent(countryCode)}`,\n auth,\n body: patch,\n });\n }\n\n /** List all regions. */\n async listRegions(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<RegionList> {\n return this.ctx.http.request<RegionList>({\n method: \"GET\",\n path: `${this.base()}/regions`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one region by code. */\n async getRegion(regionCode: string, auth: AuthContext = SERVICE): Promise<Region> {\n return this.ctx.http.request<Region>({\n method: \"GET\",\n path: `${this.base()}/regions/${encodeURIComponent(regionCode)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Currency,\n CurrencyList,\n CurrencyInput,\n CurrencyUpdate,\n CurrencyCreated,\n ExchangeRate,\n ExchangeRateList,\n ExchangeRateInput,\n ExchangeRateUpdate,\n ExchangeRateCreated,\n} from \"./currency-types\";\n\nexport type {\n Currency,\n CurrencyList,\n CurrencyInput,\n CurrencyUpdate,\n CurrencyCreated,\n ExchangeRate,\n ExchangeRateList,\n ExchangeRateInput,\n ExchangeRateUpdate,\n ExchangeRateCreated,\n} from \"./currency-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Currency Service (`/currency/{tenant}/…`): currencies and exchange\n * rates. Server-side; defaults to the service token.\n */\nexport class CurrencyService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/currency/${this.ctx.tenant}`;\n }\n\n // --- Currencies ---\n\n /** List all currencies. */\n async listCurrencies(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CurrencyList> {\n return this.ctx.http.request<CurrencyList>({\n method: \"GET\",\n path: `${this.base()}/currencies`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one currency by code. */\n async getCurrency(code: string, auth: AuthContext = SERVICE): Promise<Currency> {\n return this.ctx.http.request<Currency>({\n method: \"GET\",\n path: `${this.base()}/currencies/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /** Create a currency. */\n async createCurrency(input: CurrencyInput, auth: AuthContext = SERVICE): Promise<CurrencyCreated> {\n return this.ctx.http.request<CurrencyCreated>({\n method: \"POST\",\n path: `${this.base()}/currencies`,\n auth,\n body: input,\n });\n }\n\n /** Update a currency by code. */\n async updateCurrency(code: string, input: CurrencyUpdate, auth: AuthContext = SERVICE): Promise<Currency> {\n return this.ctx.http.request<Currency>({\n method: \"PUT\",\n path: `${this.base()}/currencies/${encodeURIComponent(code)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a currency by code. */\n async deleteCurrency(code: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/currencies/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n // --- Exchange rates ---\n\n /** List all exchange rates. */\n async listExchangeRates(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ExchangeRateList> {\n return this.ctx.http.request<ExchangeRateList>({\n method: \"GET\",\n path: `${this.base()}/exchanges`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one exchange rate by code. */\n async getExchangeRate(code: string, auth: AuthContext = SERVICE): Promise<ExchangeRate> {\n return this.ctx.http.request<ExchangeRate>({\n method: \"GET\",\n path: `${this.base()}/exchanges/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /** Create an exchange rate. */\n async createExchangeRate(input: ExchangeRateInput, auth: AuthContext = SERVICE): Promise<ExchangeRateCreated> {\n return this.ctx.http.request<ExchangeRateCreated>({\n method: \"POST\",\n path: `${this.base()}/exchanges`,\n auth,\n body: input,\n });\n }\n\n /** Update an exchange rate by code. */\n async updateExchangeRate(code: string, input: ExchangeRateUpdate, auth: AuthContext = SERVICE): Promise<ExchangeRate> {\n return this.ctx.http.request<ExchangeRate>({\n method: \"PUT\",\n path: `${this.base()}/exchanges/${encodeURIComponent(code)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete an exchange rate by code. */\n async deleteExchangeRate(code: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/exchanges/${encodeURIComponent(code)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Site,\n SiteList,\n FindSiteInput,\n Zone,\n ZoneList,\n ShippingMethod,\n ShippingMethodList,\n ShippingGroup,\n ShippingGroupList,\n CgRelation,\n CgRelationList,\n QuoteInput,\n QuoteResult,\n QuoteSlotInput,\n MinimumFee,\n ResourceCreated,\n DeliveryWindowList,\n DeliveryWindowValidation,\n DeliveryTime,\n DeliveryTimeList,\n DeliveryTimeInput,\n DeliveryTimeUpdate,\n DeliverySlot,\n DeliverySlotList,\n DeliveryCycleInput,\n ShippingPatch,\n DeliveryCreated,\n} from \"./shipping-types\";\n\nexport type {\n Site,\n SiteList,\n FindSiteInput,\n Zone,\n ZoneList,\n ShippingMethod,\n ShippingMethodList,\n ShippingGroup,\n ShippingGroupList,\n CgRelation,\n CgRelationList,\n QuoteInput,\n QuoteResult,\n QuoteSlotInput,\n MinimumFee,\n ResourceCreated,\n DeliveryWindow,\n DeliveryWindowList,\n DeliveryWindowValidation,\n DeliveryTime,\n DeliveryTimeList,\n DeliveryTimeInput,\n DeliveryTimeUpdate,\n DeliverySlot,\n DeliverySlotList,\n DeliveryCycleInput,\n ShippingPatch,\n DeliveryCreated,\n} from \"./shipping-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Shipping Service (`/shipping/{tenant}/…`), Phase 1 — config: sites,\n * zones, methods, cost/quote, groups, customer-group relations. Server-side;\n * defaults to the service token. Most methods are site-scoped and take `site`\n * first; `findSites` is tenant-level. Delivery scheduling is Phase 2.\n */\nexport class ShippingService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/shipping/${this.ctx.tenant}`;\n }\n\n private siteBase(site: string): string {\n return `${this.base()}/${encodeURIComponent(site)}`;\n }\n\n // --- Sites ---\n\n /** Find shipping-related sites by postal code (`POST /findSite`). */\n async findSites(input: FindSiteInput, auth: AuthContext = SERVICE): Promise<SiteList> {\n return this.ctx.http.request<SiteList>({\n method: \"POST\",\n path: `${this.base()}/findSite`,\n auth,\n body: input,\n });\n }\n\n // --- Zones ---\n\n /** List shipping zones for a site. */\n async listZones(\n site: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ZoneList> {\n return this.ctx.http.request<ZoneList>({\n method: \"GET\",\n path: `${this.siteBase(site)}/zones`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one shipping zone. */\n async getZone(site: string, zoneId: string, auth: AuthContext = SERVICE): Promise<Zone> {\n return this.ctx.http.request<Zone>({\n method: \"GET\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}`,\n auth,\n });\n }\n\n /** Create a shipping zone. */\n async createZone(site: string, zone: Zone, auth: AuthContext = SERVICE): Promise<ResourceCreated> {\n return this.ctx.http.request<ResourceCreated>({\n method: \"POST\",\n path: `${this.siteBase(site)}/zones`,\n auth,\n body: zone,\n });\n }\n\n /** Replace a shipping zone. */\n async updateZone(site: string, zoneId: string, zone: Zone, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}`,\n auth,\n body: zone,\n });\n }\n\n /** Partially update a shipping zone. */\n async patchZone(site: string, zoneId: string, patch: Zone, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a shipping zone. */\n async deleteZone(site: string, zoneId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}`,\n auth,\n });\n }\n\n // --- Methods (per zone) ---\n\n /** List shipping methods of a zone. */\n async listMethods(\n site: string,\n zoneId: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ShippingMethodList> {\n return this.ctx.http.request<ShippingMethodList>({\n method: \"GET\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one shipping method. */\n async getMethod(site: string, zoneId: string, methodId: string, auth: AuthContext = SERVICE): Promise<ShippingMethod> {\n return this.ctx.http.request<ShippingMethod>({\n method: \"GET\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods/${encodeURIComponent(methodId)}`,\n auth,\n });\n }\n\n /** Create a shipping method in a zone. */\n async createMethod(site: string, zoneId: string, method: ShippingMethod, auth: AuthContext = SERVICE): Promise<ResourceCreated> {\n return this.ctx.http.request<ResourceCreated>({\n method: \"POST\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods`,\n auth,\n body: method,\n });\n }\n\n /** Replace a shipping method. */\n async updateMethod(site: string, zoneId: string, methodId: string, method: ShippingMethod, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods/${encodeURIComponent(methodId)}`,\n auth,\n body: method,\n });\n }\n\n /** Partially update a shipping method. */\n async patchMethod(site: string, zoneId: string, methodId: string, patch: ShippingMethod, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods/${encodeURIComponent(methodId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a shipping method. */\n async deleteMethod(site: string, zoneId: string, methodId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods/${encodeURIComponent(methodId)}`,\n auth,\n });\n }\n\n // --- Cost / quote ---\n\n /** Calculate the final shipping cost (`POST /quote`). */\n async quote(site: string, input: QuoteInput, auth: AuthContext = SERVICE): Promise<QuoteResult> {\n return this.ctx.http.request<QuoteResult>({\n method: \"POST\",\n path: `${this.siteBase(site)}/quote`,\n auth,\n body: input,\n });\n }\n\n /** Calculate the minimum shipping cost (`POST /quote/minimum`). */\n async quoteMinimum(site: string, input: QuoteInput, auth: AuthContext = SERVICE): Promise<MinimumFee> {\n return this.ctx.http.request<MinimumFee>({\n method: \"POST\",\n path: `${this.siteBase(site)}/quote/minimum`,\n auth,\n body: input,\n });\n }\n\n /** Calculate the shipping cost for a given slot (`POST /quote/slot`). */\n async quoteSlot(site: string, input: QuoteSlotInput, auth: AuthContext = SERVICE): Promise<MinimumFee> {\n return this.ctx.http.request<MinimumFee>({\n method: \"POST\",\n path: `${this.siteBase(site)}/quote/slot`,\n auth,\n body: input,\n });\n }\n\n // --- Groups ---\n\n /** List shipping groups for a site. */\n async listGroups(\n site: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ShippingGroupList> {\n return this.ctx.http.request<ShippingGroupList>({\n method: \"GET\",\n path: `${this.siteBase(site)}/groups`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one shipping group. */\n async getGroup(site: string, groupId: string, auth: AuthContext = SERVICE): Promise<ShippingGroup> {\n return this.ctx.http.request<ShippingGroup>({\n method: \"GET\",\n path: `${this.siteBase(site)}/groups/${encodeURIComponent(groupId)}`,\n auth,\n });\n }\n\n /** Create a shipping group. */\n async createGroup(site: string, group: ShippingGroup, auth: AuthContext = SERVICE): Promise<ResourceCreated> {\n return this.ctx.http.request<ResourceCreated>({\n method: \"POST\",\n path: `${this.siteBase(site)}/groups`,\n auth,\n body: group,\n });\n }\n\n /** Replace a shipping group. */\n async updateGroup(site: string, groupId: string, group: ShippingGroup, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.siteBase(site)}/groups/${encodeURIComponent(groupId)}`,\n auth,\n body: group,\n });\n }\n\n /** Delete a shipping group. */\n async deleteGroup(site: string, groupId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.siteBase(site)}/groups/${encodeURIComponent(groupId)}`,\n auth,\n });\n }\n\n // --- Customer-group relations ---\n\n /** List customer-group relations for a site. */\n async listCgRelations(\n site: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CgRelationList> {\n return this.ctx.http.request<CgRelationList>({\n method: \"GET\",\n path: `${this.siteBase(site)}/cgrelations`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a customer's customer-group relations. */\n async getCgRelations(site: string, customerId: string, auth: AuthContext = SERVICE): Promise<CgRelation> {\n return this.ctx.http.request<CgRelation>({\n method: \"GET\",\n path: `${this.siteBase(site)}/cgrelations/${encodeURIComponent(customerId)}`,\n auth,\n });\n }\n\n /** Create a customer-group relation. */\n async createCgRelation(site: string, relation: CgRelation, auth: AuthContext = SERVICE): Promise<ResourceCreated> {\n return this.ctx.http.request<ResourceCreated>({\n method: \"POST\",\n path: `${this.siteBase(site)}/cgrelations`,\n auth,\n body: relation,\n });\n }\n\n /** Update a customer's customer-group relations. */\n async updateCgRelations(site: string, customerId: string, relation: CgRelation, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.siteBase(site)}/cgrelations/${encodeURIComponent(customerId)}`,\n auth,\n body: relation,\n });\n }\n\n /** Delete a customer's customer-group relation. */\n async deleteCgRelation(site: string, customerId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.siteBase(site)}/cgrelations/${encodeURIComponent(customerId)}`,\n auth,\n });\n }\n\n // --- Phase 2: delivery windows ---\n\n /** Retrieve delivery windows for a delivery area + cart. */\n async getAreaDeliveryWindows(deliveryAreaId: string, cartId: string, auth: AuthContext = SERVICE): Promise<DeliveryWindowList> {\n return this.ctx.http.request<DeliveryWindowList>({\n method: \"GET\",\n path: `${this.base()}/areaDeliveryTimes/${encodeURIComponent(deliveryAreaId)}/${encodeURIComponent(cartId)}`,\n auth,\n });\n }\n\n /** Retrieve delivery windows for a cart. */\n async getCartDeliveryWindows(cartId: string, auth: AuthContext = SERVICE): Promise<DeliveryWindowList> {\n return this.ctx.http.request<DeliveryWindowList>({\n method: \"GET\",\n path: `${this.base()}/actualDeliveryWindows/${encodeURIComponent(cartId)}`,\n auth,\n });\n }\n\n /** Increment the delivery-window counter. */\n async incrementDeliveryWindowCounter(input: DeliveryWindowValidation, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/actualDeliveryWindows/incrementCounter`,\n auth,\n body: input,\n });\n }\n\n /** Validate a delivery window. Resolves when valid; throws otherwise. */\n async validateDeliveryWindow(input: DeliveryWindowValidation, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/deliveryWindowValidation`,\n auth,\n body: input,\n });\n }\n\n // --- Phase 2: delivery times ---\n\n /** List all delivery times. */\n async listDeliveryTimes(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<DeliveryTimeList> {\n return this.ctx.http.request<DeliveryTimeList>({\n method: \"GET\",\n path: `${this.base()}/delivery-times`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one delivery time. */\n async getDeliveryTime(deliveryTimeId: string, auth: AuthContext = SERVICE): Promise<DeliveryTime> {\n return this.ctx.http.request<DeliveryTime>({\n method: \"GET\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}`,\n auth,\n });\n }\n\n /** Create a delivery time. */\n async createDeliveryTime(input: DeliveryTimeInput, auth: AuthContext = SERVICE): Promise<DeliveryCreated> {\n return this.ctx.http.request<DeliveryCreated>({\n method: \"POST\",\n path: `${this.base()}/delivery-times`,\n auth,\n body: input,\n });\n }\n\n /** Create multiple delivery times (`POST /delivery-times/bulk`). */\n async createDeliveryTimesBulk(inputs: DeliveryTimeInput[], auth: AuthContext = SERVICE): Promise<DeliveryCreated[]> {\n return this.ctx.http.request<DeliveryCreated[]>({\n method: \"POST\",\n path: `${this.base()}/delivery-times/bulk`,\n auth,\n body: inputs,\n });\n }\n\n /** Replace a delivery time. */\n async updateDeliveryTime(deliveryTimeId: string, input: DeliveryTimeUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a delivery time (JSON-Patch op array). */\n async patchDeliveryTime(deliveryTimeId: string, ops: ShippingPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}`,\n auth,\n body: ops,\n });\n }\n\n /** Delete a delivery time. */\n async deleteDeliveryTime(deliveryTimeId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}`,\n auth,\n });\n }\n\n // --- Phase 2: delivery time slots ---\n\n /** List slots of a delivery time. */\n async listSlots(deliveryTimeId: string, auth: AuthContext = SERVICE): Promise<DeliverySlotList> {\n return this.ctx.http.request<DeliverySlotList>({\n method: \"GET\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots`,\n auth,\n });\n }\n\n /** Retrieve one slot. */\n async getSlot(deliveryTimeId: string, slotId: string, auth: AuthContext = SERVICE): Promise<DeliverySlot> {\n return this.ctx.http.request<DeliverySlot>({\n method: \"GET\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots/${encodeURIComponent(slotId)}`,\n auth,\n });\n }\n\n /** Create a slot in a delivery time. */\n async createSlot(deliveryTimeId: string, input: DeliverySlot, auth: AuthContext = SERVICE): Promise<DeliveryCreated> {\n return this.ctx.http.request<DeliveryCreated>({\n method: \"POST\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots`,\n auth,\n body: input,\n });\n }\n\n /** Replace a slot. */\n async updateSlot(deliveryTimeId: string, slotId: string, input: DeliverySlot, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots/${encodeURIComponent(slotId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a slot (JSON-Patch op array). */\n async patchSlot(deliveryTimeId: string, slotId: string, ops: ShippingPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots/${encodeURIComponent(slotId)}`,\n auth,\n body: ops,\n });\n }\n\n /** Delete a slot. */\n async deleteSlot(deliveryTimeId: string, slotId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots/${encodeURIComponent(slotId)}`,\n auth,\n });\n }\n\n /** Delete all slots of a delivery time. */\n async deleteAllSlots(deliveryTimeId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots`,\n auth,\n });\n }\n\n // --- Phase 2: delivery cycles ---\n\n /** Generate a delivery cycle (`POST /delivery-cycles/generate`). Returns the cycle id. */\n async generateDeliveryCycle(input: DeliveryCycleInput, auth: AuthContext = SERVICE): Promise<string> {\n return this.ctx.http.request<string>({\n method: \"POST\",\n path: `${this.base()}/delivery-cycles/generate`,\n auth,\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Return, ReturnList, ReturnInput, ReturnUpdate, ReturnPatch, ReturnCreated } from \"./returns-types\";\n\nexport type { Return, ReturnList, ReturnInput, ReturnUpdate, ReturnPatch, ReturnCreated } from \"./returns-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Returns Service (`/return/{tenant}/returns`): CRUD over returns\n * (RMA). Defaults to the service token; for customer self-service (own returns)\n * pass `auth.customer(token)` (the React hooks do this).\n */\nexport class ReturnsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/return/${this.ctx.tenant}/returns`;\n }\n\n /** List returns (paged; supports `pageSize`/`pageNumber`/`sort`/`q`). */\n async listReturns(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ReturnList> {\n return this.ctx.http.request<ReturnList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one return by id. */\n async getReturn(returnId: string, auth: AuthContext = SERVICE): Promise<Return> {\n return this.ctx.http.request<Return>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(returnId)}`,\n auth,\n });\n }\n\n /** Create a return. Returns the created `{ id }`. */\n async createReturn(input: ReturnInput, auth: AuthContext = SERVICE): Promise<ReturnCreated> {\n return this.ctx.http.request<ReturnCreated>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /** Replace a return by id (`PUT`). */\n async updateReturn(returnId: string, input: ReturnUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(returnId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a return by id (`PATCH`, JSON-Patch op-array). */\n async patchReturn(returnId: string, ops: ReturnPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/${encodeURIComponent(returnId)}`,\n auth,\n body: ops,\n });\n }\n\n /** Delete a return by id. */\n async deleteReturn(returnId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(returnId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { errorFromResponse } from \"../core/errors\";\nimport type { SepaJob, SepaJobInput, SepaJobCreated } from \"./sepa-export-types\";\n\nexport type { SepaJob, SepaJobInput, SepaJobCreated } from \"./sepa-export-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix SEPA Export Service (`/sepa-export/{tenant}/…`): export jobs and file\n * retrieval. Server-side; defaults to the service token.\n */\nexport class SepaExportService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/sepa-export/${this.ctx.tenant}`;\n }\n\n /** Retrieve a SEPA export file by id. Returns the raw file content (text). */\n async getFile(fileId: string, auth: AuthContext = SERVICE): Promise<string> {\n const path = `${this.base()}/files/${encodeURIComponent(fileId)}`;\n const res = await this.ctx.http.requestRaw({ method: \"GET\", path, auth });\n if (!res.ok) {\n const errBody = await res.text().catch(() => undefined);\n throw errorFromResponse(res.status, `GET ${path} → ${res.status}`, errBody);\n }\n return res.text();\n }\n\n /** List export jobs. */\n async listJobs(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<SepaJob[]> {\n return this.ctx.http.request<SepaJob[]>({\n method: \"GET\",\n path: `${this.base()}/jobs`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Create an export job. */\n async createJob(input: SepaJobInput, auth: AuthContext = SERVICE): Promise<SepaJobCreated> {\n return this.ctx.http.request<SepaJobCreated>({\n method: \"POST\",\n path: `${this.base()}/jobs`,\n auth,\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { IndexConfig, IndexConfigCreated, IndexPublicConfig, ReindexInput } from \"./indexing-types\";\n\nexport type { IndexConfig, IndexConfigCreated, IndexPublicConfig, ReindexInput } from \"./indexing-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Indexing Service (`/indexing/{tenant}/…`): search-index provider\n * configurations and reindex. Server-side; defaults to the service token.\n */\nexport class IndexingService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/indexing/${this.ctx.tenant}`;\n }\n\n /** List indexing configurations. */\n async listConfigurations(auth: AuthContext = SERVICE): Promise<IndexConfig[]> {\n return this.ctx.http.request<IndexConfig[]>({ method: \"GET\", path: `${this.base()}/configurations`, auth });\n }\n\n /** Get a configuration by provider name. */\n async getConfiguration(provider: string, auth: AuthContext = SERVICE): Promise<IndexConfig> {\n return this.ctx.http.request<IndexConfig>({\n method: \"GET\",\n path: `${this.base()}/configurations/${encodeURIComponent(provider)}`,\n auth,\n });\n }\n\n /** Create a configuration. */\n async createConfiguration(input: IndexConfig, auth: AuthContext = SERVICE): Promise<IndexConfigCreated> {\n return this.ctx.http.request<IndexConfigCreated>({\n method: \"POST\",\n path: `${this.base()}/configurations`,\n auth,\n body: input,\n });\n }\n\n /** Update a configuration by provider name. */\n async updateConfiguration(provider: string, input: IndexConfig, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/configurations/${encodeURIComponent(provider)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a configuration by provider name. */\n async deleteConfiguration(provider: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/configurations/${encodeURIComponent(provider)}`,\n auth,\n });\n }\n\n /** List public indexing configurations. */\n async listPublicConfigurations(auth: AuthContext = SERVICE): Promise<IndexPublicConfig[]> {\n return this.ctx.http.request<IndexPublicConfig[]>({ method: \"GET\", path: `${this.base()}/public/configurations`, auth });\n }\n\n /** Get a public configuration by provider name. */\n async getPublicConfiguration(provider: string, auth: AuthContext = SERVICE): Promise<IndexPublicConfig> {\n return this.ctx.http.request<IndexPublicConfig>({\n method: \"GET\",\n path: `${this.base()}/public/configurations/${encodeURIComponent(provider)}`,\n auth,\n });\n }\n\n /** Trigger a reindex. */\n async reindex(input: ReindexInput, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"POST\", path: `${this.base()}/reindex`, auth, body: input });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Unit,\n UnitInput,\n UnitUpdate,\n UnitCreated,\n ConversionFactorInput,\n ConversionFactorResult,\n ConvertUnitInput,\n ConvertUnitResult,\n} from \"./unit-handling-types\";\n\nexport type {\n Unit,\n UnitInput,\n UnitUpdate,\n UnitCreated,\n ConversionFactorInput,\n ConversionFactorResult,\n ConvertUnitInput,\n ConvertUnitResult,\n} from \"./unit-handling-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Unit Handling Service (`/unit-handling/{tenant}/…`): units CRUD, unit\n * types, and conversion commands. Server-side; defaults to the service token.\n */\nexport class UnitHandlingService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/unit-handling/${this.ctx.tenant}`;\n }\n\n /** Find units (filter/sort/page). */\n async listUnits(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<Unit[]> {\n return this.ctx.http.request<Unit[]>({\n method: \"GET\",\n path: `${this.base()}/units`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a unit by code. */\n async getUnit(unitCode: string, auth: AuthContext = SERVICE): Promise<Unit> {\n return this.ctx.http.request<Unit>({\n method: \"GET\",\n path: `${this.base()}/units/${encodeURIComponent(unitCode)}`,\n auth,\n });\n }\n\n /** Add a new unit. */\n async createUnit(input: UnitInput, auth: AuthContext = SERVICE): Promise<UnitCreated> {\n return this.ctx.http.request<UnitCreated>({ method: \"POST\", path: `${this.base()}/units`, auth, body: input });\n }\n\n /** Update a unit by code. */\n async updateUnit(unitCode: string, input: UnitUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/units/${encodeURIComponent(unitCode)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a unit by code. */\n async deleteUnit(unitCode: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/units/${encodeURIComponent(unitCode)}`,\n auth,\n });\n }\n\n /** Delete multiple units by code (bulk). The codes are sent as the request body. */\n async deleteUnits(codes: string[], auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/units`,\n auth,\n body: codes,\n });\n }\n\n /** Fetch a conversion factor (`PUT /units/conversion-factor-commands`). */\n async getConversionFactor(input: ConversionFactorInput, auth: AuthContext = SERVICE): Promise<ConversionFactorResult> {\n return this.ctx.http.request<ConversionFactorResult>({\n method: \"PUT\",\n path: `${this.base()}/units/conversion-factor-commands`,\n auth,\n body: input,\n });\n }\n\n /** Convert a value between units (`PUT /units/convert-unit-commands`). */\n async convertUnit(input: ConvertUnitInput, auth: AuthContext = SERVICE): Promise<ConvertUnitResult> {\n return this.ctx.http.request<ConvertUnitResult>({\n method: \"PUT\",\n path: `${this.base()}/units/convert-unit-commands`,\n auth,\n body: input,\n });\n }\n\n /** List all unit types. */\n async listUnitTypes(auth: AuthContext = SERVICE): Promise<string[]> {\n return this.ctx.http.request<string[]>({ method: \"GET\", path: `${this.base()}/types`, auth });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Catalog, CatalogList, CatalogInput, CatalogUpdate, CatalogPatch, CatalogCreated } from \"./catalog-types\";\n\nexport type { Catalog, CatalogList, CatalogInput, CatalogUpdate, CatalogPatch, CatalogCreated } from \"./catalog-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Catalog Management (`/catalog/{tenant}/catalogs`): CRUD over catalogs.\n * Server-side; defaults to the service token. `updateCatalog` is an upsert (PUT).\n */\nexport class CatalogService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/catalog/${this.ctx.tenant}/catalogs`;\n }\n\n /** List catalogs (filtered/sorted). */\n async listCatalogs(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<CatalogList> {\n return this.ctx.http.request<CatalogList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a catalog by id. */\n async getCatalog(catalogId: string, auth: AuthContext = SERVICE): Promise<Catalog> {\n return this.ctx.http.request<Catalog>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(catalogId)}`,\n auth,\n });\n }\n\n /** Retrieve all catalogs that contain a category. */\n async getCatalogsForCategory(categoryId: string, auth: AuthContext = SERVICE): Promise<CatalogList> {\n return this.ctx.http.request<CatalogList>({\n method: \"GET\",\n path: `${this.base()}/categories/${encodeURIComponent(categoryId)}`,\n auth,\n });\n }\n\n /** Create a catalog. */\n async createCatalog(input: CatalogInput, auth: AuthContext = SERVICE): Promise<CatalogCreated> {\n return this.ctx.http.request<CatalogCreated>({ method: \"POST\", path: this.base(), auth, body: input });\n }\n\n /** Upsert a catalog by id (`PUT`). */\n async updateCatalog(catalogId: string, input: CatalogUpdate, auth: AuthContext = SERVICE): Promise<CatalogCreated> {\n return this.ctx.http.request<CatalogCreated>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(catalogId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a catalog by id (`PATCH`). */\n async patchCatalog(catalogId: string, patch: CatalogPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/${encodeURIComponent(catalogId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Remove a catalog by id. */\n async deleteCatalog(catalogId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(catalogId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Vendor,\n VendorList,\n VendorInput,\n VendorUpdate,\n VendorCreated,\n VendorSearchQuery,\n VendorLocation,\n VendorLocationList,\n VendorLocationInput,\n VendorLocationUpdate,\n} from \"./vendor-types\";\n\nexport type {\n Vendor,\n VendorList,\n VendorInput,\n VendorUpdate,\n VendorCreated,\n VendorSearchQuery,\n VendorLocation,\n VendorLocationList,\n VendorLocationInput,\n VendorLocationUpdate,\n} from \"./vendor-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Vendor Service (`/vendor/{tenant}/…`): vendors and their locations.\n * Server-side; defaults to the service token. PUT methods are upserts. Vendor\n * locations are the vendor's own pickup/warehouse locations (distinct from the\n * customer-management `client.locations`).\n */\nexport class VendorService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/vendor/${this.ctx.tenant}`;\n }\n\n // --- Vendors ---\n\n /** List all vendors. */\n async listVendors(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<VendorList> {\n return this.ctx.http.request<VendorList>({\n method: \"GET\",\n path: `${this.base()}/vendors`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a vendor by id. */\n async getVendor(vendorId: string, auth: AuthContext = SERVICE): Promise<Vendor> {\n return this.ctx.http.request<Vendor>({\n method: \"GET\",\n path: `${this.base()}/vendors/${encodeURIComponent(vendorId)}`,\n auth,\n });\n }\n\n /** Search vendors (`POST /vendors/search`). */\n async searchVendors(query: VendorSearchQuery, auth: AuthContext = SERVICE): Promise<VendorList> {\n return this.ctx.http.request<VendorList>({\n method: \"POST\",\n path: `${this.base()}/vendors/search`,\n auth,\n body: query,\n });\n }\n\n /** Create a vendor. */\n async createVendor(input: VendorInput, auth: AuthContext = SERVICE): Promise<VendorCreated> {\n return this.ctx.http.request<VendorCreated>({ method: \"POST\", path: `${this.base()}/vendors`, auth, body: input });\n }\n\n /** Upsert a vendor by id (`PUT`). */\n async updateVendor(vendorId: string, input: VendorUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/vendors/${encodeURIComponent(vendorId)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a vendor by id. */\n async deleteVendor(vendorId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/vendors/${encodeURIComponent(vendorId)}`,\n auth,\n });\n }\n\n // --- Vendor locations ---\n\n /** List all vendor locations. */\n async listVendorLocations(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<VendorLocationList> {\n return this.ctx.http.request<VendorLocationList>({\n method: \"GET\",\n path: `${this.base()}/locations`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a vendor location by id. */\n async getVendorLocation(locationId: string, auth: AuthContext = SERVICE): Promise<VendorLocation> {\n return this.ctx.http.request<VendorLocation>({\n method: \"GET\",\n path: `${this.base()}/locations/${encodeURIComponent(locationId)}`,\n auth,\n });\n }\n\n /** Create a vendor location. */\n async createVendorLocation(input: VendorLocationInput, auth: AuthContext = SERVICE): Promise<VendorCreated> {\n return this.ctx.http.request<VendorCreated>({ method: \"POST\", path: `${this.base()}/locations`, auth, body: input });\n }\n\n /** Upsert a vendor location by id (`PUT`). */\n async updateVendorLocation(locationId: string, input: VendorLocationUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/locations/${encodeURIComponent(locationId)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a vendor location by id. */\n async deleteVendorLocation(locationId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/locations/${encodeURIComponent(locationId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n PickOrder,\n PickOrderList,\n OrderStatusChange,\n PackagingProductsChange,\n Assignee,\n OrderEntryEventCreate,\n PackingEventList,\n OrderCycleList,\n RecalculationJobInput,\n RecalculationJob,\n PickPackAck,\n RecalculationJobCreated,\n} from \"./pick-pack-types\";\n\nexport type {\n PickOrder,\n PickOrderList,\n OrderStatusChange,\n PackagingProductsChange,\n Assignee,\n OrderEntryEventCreate,\n PackingEvent,\n PackingEventList,\n OrderCycleList,\n RecalculationJobInput,\n RecalculationJob,\n PickPackAck,\n RecalculationJobCreated,\n} from \"./pick-pack-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Pick-Pack Service (`/pick-pack/{tenant}/…`): fulfillment/packlist\n * orders, assignees, packaging, packing events, and recalculation jobs.\n * Server-side; defaults to the service token. Several mutating endpoints return\n * an acknowledgement (`{ message?, code? }`).\n */\nexport class PickPackService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/pick-pack/${this.ctx.tenant}`;\n }\n\n private orderPath(orderId: string): string {\n return `${this.base()}/orders/${encodeURIComponent(orderId)}`;\n }\n\n /** List packlist orders. */\n async listOrders(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<PickOrderList> {\n return this.ctx.http.request<PickOrderList>({\n method: \"GET\",\n path: `${this.base()}/orders`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a packlist order by id. */\n async getOrder(orderId: string, auth: AuthContext = SERVICE): Promise<PickOrder> {\n return this.ctx.http.request<PickOrder>({ method: \"GET\", path: this.orderPath(orderId), auth });\n }\n\n /** Update an order's status (`PATCH`). Returns an acknowledgement. */\n async updateOrder(orderId: string, change: OrderStatusChange, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"PATCH\", path: this.orderPath(orderId), auth, body: change });\n }\n\n /** Finish an order. Returns an acknowledgement. */\n async finishOrder(orderId: string, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"POST\", path: `${this.orderPath(orderId)}/finish`, auth });\n }\n\n /** List order cycles (ids). */\n async listOrderCycles(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<OrderCycleList> {\n return this.ctx.http.request<OrderCycleList>({\n method: \"GET\",\n path: `${this.base()}/orderCycles`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Add an assignee to an order. Returns an acknowledgement. */\n async addAssignee(orderId: string, assignee: Assignee, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"POST\", path: `${this.orderPath(orderId)}/assignees`, auth, body: assignee });\n }\n\n /** Remove an assignee from an order. */\n async removeAssignee(orderId: string, assigneeId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.orderPath(orderId)}/assignees/${encodeURIComponent(assigneeId)}`,\n auth,\n });\n }\n\n /** Update packaging products for an order (`PUT`). Returns an acknowledgement. */\n async updatePackaging(orderId: string, change: PackagingProductsChange, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"PUT\", path: `${this.orderPath(orderId)}/packaging`, auth, body: change });\n }\n\n /** Create a packing event. Returns an acknowledgement. */\n async createEvent(event: OrderEntryEventCreate, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"POST\", path: `${this.base()}/events`, auth, body: event });\n }\n\n /** List packing events. */\n async listEvents(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<PackingEventList> {\n return this.ctx.http.request<PackingEventList>({\n method: \"GET\",\n path: `${this.base()}/events`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Trigger an order recalculation. Returns the created job's id. */\n async triggerRecalculation(input: RecalculationJobInput, auth: AuthContext = SERVICE): Promise<RecalculationJobCreated> {\n return this.ctx.http.request<RecalculationJobCreated>({\n method: \"POST\",\n path: `${this.base()}/jobs/recalculations`,\n auth,\n body: input,\n });\n }\n\n /** Retrieve a recalculation job by id. */\n async getRecalculationJob(jobId: string, auth: AuthContext = SERVICE): Promise<RecalculationJob> {\n return this.ctx.http.request<RecalculationJob>({\n method: \"GET\",\n path: `${this.base()}/jobs/recalculations/${encodeURIComponent(jobId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n AdminCustomer,\n AdminCustomerList,\n AdminCustomerInput,\n AdminCustomerUpdate,\n AdminCustomerPatch,\n AdminCustomerCreated,\n AdminCustomerSearchQuery,\n AdminCustomerAddress,\n AdminCustomerAddressList,\n AdminCustomerAddressInput,\n AdminCustomerAddressUpdate,\n} from \"./customer-admin-types\";\n\nexport type {\n AdminCustomer,\n AdminCustomerList,\n AdminCustomerInput,\n AdminCustomerUpdate,\n AdminCustomerPatch,\n AdminCustomerCreated,\n AdminCustomerSearchQuery,\n AdminCustomerAddress,\n AdminCustomerAddressList,\n AdminCustomerAddressInput,\n AdminCustomerAddressUpdate,\n} from \"./customer-admin-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Customer Service — tenant/seller-managed customer profiles and\n * addresses (`/customer/{tenant}/customers`). Server-side; defaults to the\n * service token. Distinct from the storefront `client.customers`.\n */\nexport class CustomerAdminService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/customer/${this.ctx.tenant}/customers`;\n }\n\n private customerPath(customerNumber: string): string {\n return `${this.base()}/${encodeURIComponent(customerNumber)}`;\n }\n\n private addressPath(customerNumber: string, addressId: string): string {\n return `${this.customerPath(customerNumber)}/addresses/${encodeURIComponent(addressId)}`;\n }\n\n // --- Customers ---\n\n /** List customers. */\n async listCustomers(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<AdminCustomerList> {\n return this.ctx.http.request<AdminCustomerList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Search customers (`POST /customers/search`). */\n async searchCustomers(query: AdminCustomerSearchQuery, auth: AuthContext = SERVICE): Promise<AdminCustomerList> {\n return this.ctx.http.request<AdminCustomerList>({ method: \"POST\", path: `${this.base()}/search`, auth, body: query });\n }\n\n /** Retrieve a customer profile by number. */\n async getCustomer(customerNumber: string, auth: AuthContext = SERVICE): Promise<AdminCustomer> {\n return this.ctx.http.request<AdminCustomer>({ method: \"GET\", path: this.customerPath(customerNumber), auth });\n }\n\n /** Create a customer. */\n async createCustomer(input: AdminCustomerInput, auth: AuthContext = SERVICE): Promise<AdminCustomerCreated> {\n return this.ctx.http.request<AdminCustomerCreated>({ method: \"POST\", path: this.base(), auth, body: input });\n }\n\n /** Upsert a customer profile by number (`PUT`). */\n async upsertCustomer(customerNumber: string, input: AdminCustomerUpdate, auth: AuthContext = SERVICE): Promise<AdminCustomerCreated> {\n return this.ctx.http.request<AdminCustomerCreated>({ method: \"PUT\", path: this.customerPath(customerNumber), auth, body: input });\n }\n\n /** Partially update a customer profile (`PATCH`). */\n async patchCustomer(customerNumber: string, patch: AdminCustomerPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"PATCH\", path: this.customerPath(customerNumber), auth, body: patch });\n }\n\n /** Delete a customer profile. */\n async deleteCustomer(customerNumber: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"DELETE\", path: this.customerPath(customerNumber), auth });\n }\n\n // --- Addresses ---\n\n /** List a customer's addresses. */\n async listAddresses(customerNumber: string, auth: AuthContext = SERVICE): Promise<AdminCustomerAddressList> {\n return this.ctx.http.request<AdminCustomerAddressList>({\n method: \"GET\",\n path: `${this.customerPath(customerNumber)}/addresses`,\n auth,\n });\n }\n\n /** Retrieve one address. */\n async getAddress(customerNumber: string, addressId: string, auth: AuthContext = SERVICE): Promise<AdminCustomerAddress> {\n return this.ctx.http.request<AdminCustomerAddress>({ method: \"GET\", path: this.addressPath(customerNumber, addressId), auth });\n }\n\n /** Add an address. */\n async addAddress(customerNumber: string, input: AdminCustomerAddressInput, auth: AuthContext = SERVICE): Promise<AdminCustomerCreated> {\n return this.ctx.http.request<AdminCustomerCreated>({\n method: \"POST\",\n path: `${this.customerPath(customerNumber)}/addresses`,\n auth,\n body: input,\n });\n }\n\n /** Upsert an address by id (`PUT`). */\n async upsertAddress(customerNumber: string, addressId: string, input: AdminCustomerAddressUpdate, auth: AuthContext = SERVICE): Promise<AdminCustomerCreated> {\n return this.ctx.http.request<AdminCustomerCreated>({ method: \"PUT\", path: this.addressPath(customerNumber, addressId), auth, body: input });\n }\n\n /** Partially update an address by id (`PATCH`). */\n async patchAddress(customerNumber: string, addressId: string, patch: AdminCustomerAddressUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"PATCH\", path: this.addressPath(customerNumber, addressId), auth, body: patch });\n }\n\n /** Delete an address by id. */\n async deleteAddress(customerNumber: string, addressId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"DELETE\", path: this.addressPath(customerNumber, addressId), auth });\n }\n\n /** Add tags to an address (`?tags=` query). */\n async addAddressTags(customerNumber: string, addressId: string, tags: string[], auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.addressPath(customerNumber, addressId)}/tags`,\n auth,\n query: { tags: tags.join(\",\") },\n });\n }\n\n /** Remove tags from an address (`?tags=` query). */\n async removeAddressTags(customerNumber: string, addressId: string, tags: string[], auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.addressPath(customerNumber, addressId)}/tags`,\n auth,\n query: { tags: tags.join(\",\") },\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Approval,\n ApprovalList,\n ApprovalInput,\n ApprovalPatch,\n ApprovalCreated,\n ApprovalPermittedInput,\n ApprovalPermittedResult,\n ApprovalUsersQuery,\n ApprovalUsersResult,\n} from \"./approval-types\";\n\nexport type {\n Approval,\n ApprovalList,\n ApprovalInput,\n ApprovalPatch,\n ApprovalCreated,\n ApprovalPermittedInput,\n ApprovalPermittedResult,\n ApprovalUsersQuery,\n ApprovalUsersResult,\n} from \"./approval-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Approval Service (`/approval/{tenant}/…`): B2B cart/quote approval\n * workflows — list/view approvals, create an approval request, approve or reject\n * via JSON-Patch, plus permitted-checks and approver search.\n *\n * Every endpoint is **CustomerAccessToken-only**. The trailing `auth` keeps the\n * SDK's uniform method shape, but a customer token is required in practice — pass\n * `auth.customer(token)` (the React hooks supply the browser context). The\n * service token will be rejected by Emporix.\n */\nexport class ApprovalService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/approval/${this.ctx.tenant}`;\n }\n\n /** List approvals (paged via `pageNumber`/`pageSize`/`sort`/`q`). Returns an array. */\n async listApprovals(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ApprovalList> {\n return this.ctx.http.request<ApprovalList>({\n method: \"GET\",\n path: `${this.base()}/approvals`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a single approval by id. */\n async getApproval(approvalId: string, auth: AuthContext = SERVICE): Promise<Approval> {\n return this.ctx.http.request<Approval>({\n method: \"GET\",\n path: `${this.base()}/approvals/${encodeURIComponent(approvalId)}`,\n auth,\n });\n }\n\n /** Create an approval request (cart or quote). Returns the created `{ id }`. */\n async createApproval(input: ApprovalInput, auth: AuthContext = SERVICE): Promise<ApprovalCreated> {\n return this.ctx.http.request<ApprovalCreated>({\n method: \"POST\",\n path: `${this.base()}/approvals`,\n auth,\n body: input,\n });\n }\n\n /** Approve/reject/amend an approval via a JSON-Patch op-array (`PATCH`). */\n async updateApproval(\n approvalId: string,\n ops: ApprovalPatch,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/approvals/${encodeURIComponent(approvalId)}`,\n auth,\n body: ops,\n });\n }\n\n /** Delete an approval by id. */\n async deleteApproval(approvalId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/approvals/${encodeURIComponent(approvalId)}`,\n auth,\n });\n }\n\n /** Check whether an operation on a resource is permitted / needs approval. */\n async checkPermitted(\n input: ApprovalPermittedInput,\n auth: AuthContext = SERVICE,\n ): Promise<ApprovalPermittedResult> {\n return this.ctx.http.request<ApprovalPermittedResult>({\n method: \"POST\",\n path: `${this.base()}/approval/permitted`,\n auth,\n body: input,\n });\n }\n\n /** Search for users eligible to approve a resource. Returns an array. */\n async searchApprovers(\n input: ApprovalUsersQuery,\n auth: AuthContext = SERVICE,\n ): Promise<ApprovalUsersResult> {\n return this.ctx.http.request<ApprovalUsersResult>({\n method: \"POST\",\n path: `${this.base()}/search/users`,\n auth,\n body: input,\n });\n }\n}\n","{\n \"name\": \"@viu/emporix-sdk\",\n \"version\": \"2.11.0\",\n \"description\": \"TypeScript SDK for the Emporix Commerce Engine\",\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"viu\",\n \"url\": \"https://github.com/viuteam\"\n },\n \"homepage\": \"https://github.com/viuteam/emporix-sdk#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/viuteam/emporix-sdk.git\",\n \"directory\": \"packages/sdk\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/viuteam/emporix-sdk/issues\"\n },\n \"keywords\": [\n \"emporix\",\n \"ecommerce\",\n \"commerce\",\n \"sdk\",\n \"typescript\",\n \"storefront\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"LICENSE\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./customer\": {\n \"types\": \"./dist/customer.d.ts\",\n \"import\": \"./dist/customer.js\",\n \"require\": \"./dist/customer.cjs\"\n },\n \"./product\": {\n \"types\": \"./dist/product.d.ts\",\n \"import\": \"./dist/product.js\",\n \"require\": \"./dist/product.cjs\"\n },\n \"./category\": {\n \"types\": \"./dist/category.d.ts\",\n \"import\": \"./dist/category.js\",\n \"require\": \"./dist/category.cjs\"\n },\n \"./cart\": {\n \"types\": \"./dist/cart.d.ts\",\n \"import\": \"./dist/cart.js\",\n \"require\": \"./dist/cart.cjs\"\n },\n \"./checkout\": {\n \"types\": \"./dist/checkout.d.ts\",\n \"import\": \"./dist/checkout.js\",\n \"require\": \"./dist/checkout.cjs\"\n },\n \"./payment\": {\n \"types\": \"./dist/payment.d.ts\",\n \"import\": \"./dist/payment.js\",\n \"require\": \"./dist/payment.cjs\"\n },\n \"./price\": {\n \"types\": \"./dist/price.d.ts\",\n \"import\": \"./dist/price.js\",\n \"require\": \"./dist/price.cjs\"\n },\n \"./media\": {\n \"types\": \"./dist/media.d.ts\",\n \"import\": \"./dist/media.js\",\n \"require\": \"./dist/media.cjs\"\n },\n \"./segment\": {\n \"types\": \"./dist/segment.d.ts\",\n \"import\": \"./dist/segment.js\",\n \"require\": \"./dist/segment.cjs\"\n },\n \"./companies\": {\n \"types\": \"./dist/companies.d.ts\",\n \"import\": \"./dist/companies.js\",\n \"require\": \"./dist/companies.cjs\"\n },\n \"./contacts\": {\n \"types\": \"./dist/contacts.d.ts\",\n \"import\": \"./dist/contacts.js\",\n \"require\": \"./dist/contacts.cjs\"\n },\n \"./locations\": {\n \"types\": \"./dist/locations.d.ts\",\n \"import\": \"./dist/locations.js\",\n \"require\": \"./dist/locations.cjs\"\n },\n \"./customer-groups\": {\n \"types\": \"./dist/customer-groups.d.ts\",\n \"import\": \"./dist/customer-groups.js\",\n \"require\": \"./dist/customer-groups.cjs\"\n },\n \"./orders\": {\n \"types\": \"./dist/orders.d.ts\",\n \"import\": \"./dist/orders.js\",\n \"require\": \"./dist/orders.cjs\"\n },\n \"./availability\": {\n \"types\": \"./dist/availability.d.ts\",\n \"import\": \"./dist/availability.js\",\n \"require\": \"./dist/availability.cjs\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run --coverage\",\n \"lint\": \"eslint src\",\n \"typecheck\": \"tsc --noEmit\",\n \"fetch:specs\": \"tsx scripts/fetch-specs.ts\",\n \"generate\": \"tsx scripts/generate.ts\"\n },\n \"devDependencies\": {\n \"@hey-api/openapi-ts\": \"^0.64.0\",\n \"@types/node\": \"^24.0.0\",\n \"tsx\": \"^4.19.0\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^2.0.0\",\n \"eslint\": \"^9.0.0\",\n \"msw\": \"^2.4.0\",\n \"prettier\": \"^3.3.0\",\n \"tsup\": \"^8.2.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^2.0.0\"\n }\n}\n","import { version } from \"../package.json\";\n\n/**\n * The published `@viu/emporix-sdk` version, surfaced on every log line as\n * `sdkVersion`. Read from `package.json` so it always matches the released\n * package; esbuild inlines the literal at build time (browser-safe — no\n * runtime filesystem access).\n */\nexport const SDK_VERSION: string = version;\n","import { validateConfig, type EmporixConfig, type ResolvedConfig } from \"./core/config\";\nimport {\n DefaultTokenProvider,\n CustomerRefreshRegistry,\n type TokenProvider,\n type CustomerTokenRefresher,\n} from \"./core/auth\";\nimport { HttpClient } from \"./core/http\";\nimport {\n LevelResolver,\n createConsoleLogger,\n createNoopLogger,\n type Logger,\n type LogLevel,\n type ServiceName,\n type LoggerObjectConfig,\n} from \"./core/logger\";\nimport type { ClientContext } from \"./core/context\";\nimport { CustomerService } from \"./services/customer\";\nimport { ProductService } from \"./services/product\";\nimport { CategoryService } from \"./services/category\";\nimport { CartService } from \"./services/cart\";\nimport { CheckoutService } from \"./services/checkout\";\nimport { PaymentGatewayService } from \"./services/payment\";\nimport { PriceService } from \"./services/price\";\nimport { MediaService } from \"./services/media\";\nimport { SegmentService } from \"./services/segment\";\nimport { SiteService } from \"./services/site\";\nimport { SessionContextService } from \"./services/session-context\";\nimport { CompaniesService } from \"./services/companies\";\nimport { ContactsService } from \"./services/contacts\";\nimport { LocationsService } from \"./services/locations\";\nimport { CustomerGroupsService } from \"./services/customer-groups\";\nimport { OrdersService, SalesOrdersService } from \"./services/orders\";\nimport { AvailabilityService } from \"./services/availability\";\nimport { TenantConfigService } from \"./services/tenant-config\";\nimport { ClientConfigService } from \"./services/client-config\";\nimport { ShoppingListService } from \"./services/shopping-list\";\nimport { RagIndexerService } from \"./services/ai-rag-indexer\";\nimport { SequentialIdService } from \"./services/sequential-id\";\nimport { FeeService } from \"./services/fee\";\nimport { CloudFunctionsService } from \"./services/cloud-functions\";\nimport { WebhookService } from \"./services/webhook\";\nimport { SchemaService } from \"./services/schema\";\nimport { AiService } from \"./services/ai\";\nimport { TaxService } from \"./services/tax\";\nimport { CouponService } from \"./services/coupon\";\nimport { RewardPointsService } from \"./services/reward-points\";\nimport { BrandService } from \"./services/brand\";\nimport { LabelService } from \"./services/label\";\nimport { CountryService } from \"./services/country\";\nimport { CurrencyService } from \"./services/currency\";\nimport { ShippingService } from \"./services/shipping\";\nimport { ReturnsService } from \"./services/returns\";\nimport { SepaExportService } from \"./services/sepa-export\";\nimport { IndexingService } from \"./services/indexing\";\nimport { UnitHandlingService } from \"./services/unit-handling\";\nimport { CatalogService } from \"./services/catalog\";\nimport { VendorService } from \"./services/vendor\";\nimport { PickPackService } from \"./services/pick-pack\";\nimport { CustomerAdminService } from \"./services/customer-admin\";\nimport { ApprovalService } from \"./services/approval\";\nimport { SDK_VERSION } from \"./version\";\n\n/** The Emporix SDK entry point. One instance safely serves many concurrent shoppers. */\nexport class EmporixClient {\n readonly customers: CustomerService;\n readonly products: ProductService;\n readonly categories: CategoryService;\n readonly carts: CartService;\n readonly checkout: CheckoutService;\n readonly payments: PaymentGatewayService;\n readonly prices: PriceService;\n readonly media: MediaService;\n readonly segments: SegmentService;\n readonly sites: SiteService;\n readonly sessionContext: SessionContextService;\n readonly companies: CompaniesService;\n readonly contacts: ContactsService;\n readonly locations: LocationsService;\n readonly customerGroups: CustomerGroupsService;\n readonly orders: OrdersService;\n readonly salesOrders: SalesOrdersService;\n readonly availability: AvailabilityService;\n readonly tenantConfig: TenantConfigService;\n readonly clientConfig: ClientConfigService;\n readonly shoppingLists: ShoppingListService;\n readonly ragIndexer: RagIndexerService;\n readonly sequentialIds: SequentialIdService;\n readonly fees: FeeService;\n readonly cloudFunctions: CloudFunctionsService;\n readonly webhooks: WebhookService;\n readonly schemas: SchemaService;\n readonly ai: AiService;\n readonly taxes: TaxService;\n readonly coupons: CouponService;\n readonly rewardPoints: RewardPointsService;\n readonly brands: BrandService;\n readonly labels: LabelService;\n readonly countries: CountryService;\n readonly currencies: CurrencyService;\n readonly shipping: ShippingService;\n readonly returns: ReturnsService;\n readonly sepaExport: SepaExportService;\n readonly indexing: IndexingService;\n readonly units: UnitHandlingService;\n readonly catalogs: CatalogService;\n readonly vendors: VendorService;\n readonly pickPack: PickPackService;\n readonly customerAdmin: CustomerAdminService;\n readonly approvals: ApprovalService;\n /** The validated tenant this client is bound to. */\n readonly tenant: string;\n /**\n * The token provider in use by this client. Exposed so React/Next hosts can\n * call `attachAnonymousStore` to wire session persistence. Treat as\n * read-only — replacing it after construction is not supported.\n */\n readonly tokenProvider: TokenProvider;\n /**\n * The validated config used to construct this client. Exposed so React /\n * Next hosts can read static settings such as `credentials.storefront.context`\n * (siteCode, currency, targetLocation) without re-plumbing them through the\n * Provider tree. Treat as read-only.\n */\n readonly config: ResolvedConfig;\n private readonly resolver: LevelResolver;\n private readonly customerRefresh: CustomerRefreshRegistry;\n\n constructor(config: EmporixConfig) {\n const cfg = validateConfig(config);\n this.tenant = cfg.tenant;\n this.config = cfg;\n\n let loggerObj: LoggerObjectConfig = {};\n let baseLogger: Logger | undefined;\n if (cfg.logger === false) {\n baseLogger = createNoopLogger();\n } else if (cfg.logger && typeof (cfg.logger as Logger).child === \"function\") {\n baseLogger = cfg.logger as Logger;\n } else if (cfg.logger) {\n loggerObj = cfg.logger as LoggerObjectConfig;\n }\n this.resolver = new LevelResolver(loggerObj);\n const root =\n baseLogger ??\n createConsoleLogger(this.resolver, {\n sdk: \"emporix\",\n sdkVersion: SDK_VERSION,\n tenant: cfg.tenant,\n });\n\n const tokenProvider: TokenProvider = cfg.tokenProvider ?? new DefaultTokenProvider(cfg);\n this.tokenProvider = tokenProvider;\n\n const customerRefresh = new CustomerRefreshRegistry();\n this.customerRefresh = customerRefresh;\n\n const mk = (service: ServiceName): ClientContext => ({\n tenant: cfg.tenant,\n tokenProvider,\n logger: root.child({ service }),\n http: new HttpClient({\n host: cfg.host,\n provider: tokenProvider,\n logger: root.child({ service: \"http\" }),\n retry: cfg.retry,\n timeouts: cfg.timeouts,\n customerRefresh,\n }),\n });\n\n this.customers = new CustomerService(mk(\"customer\"));\n this.products = new ProductService(mk(\"product\"));\n this.categories = new CategoryService(mk(\"category\"));\n this.carts = new CartService(mk(\"cart\"));\n this.checkout = new CheckoutService(mk(\"checkout\"));\n this.payments = new PaymentGatewayService(mk(\"payment\"));\n this.prices = new PriceService(mk(\"price\"));\n this.media = new MediaService(mk(\"media\"));\n this.segments = new SegmentService(mk(\"segment\"), {\n products: this.products,\n categories: this.categories,\n });\n this.sites = new SiteService(mk(\"site\"));\n this.sessionContext = new SessionContextService(mk(\"session-context\"));\n this.companies = new CompaniesService(mk(\"customer-management\"));\n this.contacts = new ContactsService(mk(\"customer-management\"));\n this.locations = new LocationsService(mk(\"customer-management\"));\n this.customerGroups = new CustomerGroupsService(mk(\"iam\"));\n this.orders = new OrdersService(mk(\"orders\"));\n this.salesOrders = new SalesOrdersService(mk(\"sales-orders\"));\n this.availability = new AvailabilityService(mk(\"availability\"));\n this.tenantConfig = new TenantConfigService(mk(\"configuration\"));\n this.clientConfig = new ClientConfigService(mk(\"configuration\"));\n this.shoppingLists = new ShoppingListService(mk(\"shopping-list\"));\n this.ragIndexer = new RagIndexerService(mk(\"ai-rag-indexer\"));\n this.sequentialIds = new SequentialIdService(mk(\"sequential-id\"));\n this.fees = new FeeService(mk(\"fee\"));\n this.cloudFunctions = new CloudFunctionsService(mk(\"cloud-functions\"));\n this.webhooks = new WebhookService(mk(\"webhook\"));\n this.schemas = new SchemaService(mk(\"schema\"));\n this.ai = new AiService(mk(\"ai\"));\n this.taxes = new TaxService(mk(\"tax\"));\n this.coupons = new CouponService(mk(\"coupon\"));\n this.rewardPoints = new RewardPointsService(mk(\"reward-points\"));\n this.brands = new BrandService(mk(\"brand\"));\n this.labels = new LabelService(mk(\"label\"));\n this.countries = new CountryService(mk(\"country\"));\n this.currencies = new CurrencyService(mk(\"currency\"));\n this.shipping = new ShippingService(mk(\"shipping\"));\n this.returns = new ReturnsService(mk(\"returns\"));\n this.sepaExport = new SepaExportService(mk(\"sepa-export\"));\n this.indexing = new IndexingService(mk(\"indexing\"));\n this.units = new UnitHandlingService(mk(\"unit-handling\"));\n this.catalogs = new CatalogService(mk(\"catalog\"));\n this.vendors = new VendorService(mk(\"vendor\"));\n this.pickPack = new PickPackService(mk(\"pick-pack\"));\n this.customerAdmin = new CustomerAdminService(mk(\"customer-admin\"));\n this.approvals = new ApprovalService(mk(\"approval\"));\n }\n\n /**\n * Re-binds the storefront price context (currency / siteCode / targetLocation)\n * for anonymous pricing and invalidates the current anonymous session, so the\n * next request re-mints a token bound to the new context. Use this to switch\n * currency at runtime. Carts are currency-bound — clear the cart after a\n * currency change (the React `setCurrency` does this for you).\n */\n setStorefrontContext(ctx: {\n currency?: string;\n siteCode?: string;\n targetLocation?: string;\n }): void {\n this.tokenProvider.setAnonymousContext?.(ctx);\n }\n\n /** Sets the runtime log level globally or for one service. */\n setLogLevel(level: LogLevel, opts: { service?: ServiceName; force?: boolean } = {}): void {\n this.resolver.set(level, opts.service, opts.force ?? false);\n }\n\n /** Returns the effective log level for a service. */\n getLogLevel(service: ServiceName): LogLevel {\n return this.resolver.get(service);\n }\n\n /**\n * Registers (or clears with `null`) a customer-token refresher. When set, a\n * `customer`-kind 401 triggers one refresh-and-retry. Off by default — the\n * customer token stays caller-owned. The React `EmporixProvider` wires this\n * automatically via `autoRefreshCustomerToken`.\n */\n setCustomerTokenRefresher(refresher: CustomerTokenRefresher | null): void {\n this.customerRefresh.set(refresher);\n }\n}\n","/**\n * Extracts the product id from a product `itemYrn`\n * (`urn:yaas:hybris:product:product:<tenant>;<productId>`). Cart and order line\n * items carry only the YRN, not a bare product id. Returns \"\" when the YRN is\n * missing or has no `;` segment.\n */\nexport function productIdFromYrn(yrn: string | undefined): string {\n if (!yrn) return \"\";\n const semi = yrn.lastIndexOf(\";\");\n return semi >= 0 ? yrn.slice(semi + 1) : \"\";\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/errors.ts","../src/core/config.ts","../src/core/logger.ts","../src/core/auth.ts","../src/core/http.ts","../src/core/require-customer.ts","../src/services/customer.ts","../src/core/context.ts","../src/services/product.ts","../src/services/category.ts","../src/services/cart.ts","../src/services/checkout.ts","../src/services/payment.ts","../src/services/price.ts","../src/services/media.ts","../src/services/segment.ts","../src/services/site.ts","../src/services/session-context.ts","../src/services/companies.ts","../src/services/contacts.ts","../src/services/locations.ts","../src/services/customer-groups.ts","../src/services/orders.ts","../src/services/availability.ts","../src/services/tenant-config.ts","../src/services/client-config.ts","../src/services/shopping-list.ts","../src/services/ai-rag-indexer.ts","../src/services/sequential-id.ts","../src/services/fee.ts","../src/services/cloud-functions.ts","../src/services/webhook.ts","../src/services/schema.ts","../src/services/ai.ts","../src/services/tax.ts","../src/services/coupon.ts","../src/services/reward-points.ts","../src/services/brand.ts","../src/services/label.ts","../src/services/country.ts","../src/services/currency.ts","../src/services/shipping.ts","../src/services/returns.ts","../src/services/sepa-export.ts","../src/services/indexing.ts","../src/services/unit-handling.ts","../src/services/catalog.ts","../src/services/vendor.ts","../src/services/pick-pack.ts","../src/services/customer-admin.ts","../src/services/approval.ts","../package.json","../src/version.ts","../src/client.ts","../src/core/yrn.ts"],"names":["auth","ANON","SERVICE","text","version","setIfDefined"],"mappings":";;;AACA,IAAM,kBAAA,uBAAyB,GAAA,CAAI;AAAA,EACjC,cAAA;AAAA,EAAgB,eAAA;AAAA,EAAiB,OAAA;AAAA,EAAS,eAAA;AAAA,EAAiB,WAAA;AAAA,EAC3D,QAAA;AAAA,EAAU,eAAA;AAAA,EAAiB,eAAA;AAAA,EAAiB;AAC9C,CAAC,CAAA;AAED,SAAS,MAAM,IAAA,EAAwB;AACrC,EAAA,IAAI,MAAM,OAAA,CAAQ,IAAI,GAAG,OAAO,IAAA,CAAK,IAAI,KAAK,CAAA;AAC9C,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,EAAU;AACpC,IAAA,MAAM,MAA+B,EAAC;AACtC,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,KAAK,MAAA,CAAO,OAAA,CAAQ,IAA+B,CAAA,EAAG;AACpE,MAAA,GAAA,CAAI,CAAC,CAAA,GAAI,kBAAA,CAAmB,GAAA,CAAI,CAAA,CAAE,aAAa,CAAA,GAAI,gBAAA,GAAmB,KAAA,CAAM,CAAC,CAAA;AAAA,IAC/E;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AAGO,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EAC7B,MAAA;AAAA,EACA,IAAA;AAAA,EACT,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAiB,IAAA,EAAgB;AAC5D,IAAA,KAAA,CAAM,OAAO,CAAA;AACb,IAAA,IAAA,CAAK,OAAO,GAAA,CAAA,MAAA,CAAW,IAAA;AACvB,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AACd,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,MAAA,CAAO,cAAA,CAAe,IAAA,EAAM,GAAA,CAAA,MAAA,CAAW,SAAS,CAAA;AAAA,EAClD;AAAA;AAAA,EAEA,MAAA,GAAkC;AAChC,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,SAAS,IAAA,CAAK,OAAA,EAAS,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAQ,IAAA,EAAM,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,EAAE;AAAA,EAC/F;AACF;AAGO,IAAM,gBAAA,GAAN,cAA+B,YAAA,CAAa;AAAC;AAE7C,IAAM,qBAAA,GAAN,cAAoC,YAAA,CAAa;AAAC;AAElD,IAAM,oBAAA,GAAN,cAAmC,YAAA,CAAa;AAAC;AAEjD,IAAM,sBAAA,GAAN,cAAqC,YAAA,CAAa;AAAC;AAEnD,IAAM,kBAAA,GAAN,cAAiC,YAAA,CAAa;AAAC;AAM/C,IAAM,6BAAA,GAAN,cAA4C,qBAAA,CAAsB;AAAA,EAC9D,aAAA;AAAA,EACT,WAAA,CAAY,OAAA,EAAiB,MAAA,EAAgB,IAAA,EAAe,aAAA,EAAwB;AAClF,IAAA,KAAA,CAAM,OAAA,EAAS,QAAQ,IAAI,CAAA;AAC3B,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AACF;AAEA,IAAM,aAAA,GAAgB,mCAAA;AAEtB,SAAS,qBAAqB,IAAA,EAAmC;AAC/D,EAAA,IAAI,IAAA,IAAQ,OAAO,IAAA,KAAS,QAAA,IAAY,aAAa,IAAA,EAAM;AACzD,IAAA,MAAM,UAAW,IAAA,CAA+B,OAAA;AAChD,IAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC1B,MAAA,KAAA,MAAW,KAAK,OAAA,EAAS;AACvB,QAAA,IAAI,OAAO,MAAM,QAAA,EAAU;AACzB,UAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,aAAa,CAAA;AAC/B,UAAA,IAAI,CAAA,EAAG,OAAO,CAAA,CAAE,CAAC,CAAA;AAAA,QACnB;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,MAAA;AACT;AAGO,SAAS,iBAAA,CAAkB,MAAA,EAAgB,OAAA,EAAiB,IAAA,EAA6B;AAC9F,EAAA,IAAI,WAAW,GAAA,EAAK,OAAO,IAAI,gBAAA,CAAiB,OAAA,EAAS,QAAQ,IAAI,CAAA;AACrE,EAAA,IAAI,WAAW,GAAA,EAAK;AAClB,IAAA,MAAM,KAAA,GAAQ,qBAAqB,IAAI,CAAA;AACvC,IAAA,IAAI,OAAO,OAAO,IAAI,8BAA8B,OAAA,EAAS,MAAA,EAAQ,MAAM,KAAK,CAAA;AAChF,IAAA,OAAO,IAAI,qBAAA,CAAsB,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAAA,EACxD;AACA,EAAA,IAAI,WAAW,GAAA,EAAK,OAAO,IAAI,oBAAA,CAAqB,OAAA,EAAS,QAAQ,IAAI,CAAA;AACzE,EAAA,IAAI,MAAA,KAAW,OAAO,MAAA,KAAW,GAAA,SAAY,IAAI,sBAAA,CAAuB,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAC7F,EAAA,IAAI,UAAU,GAAA,EAAK,OAAO,IAAI,kBAAA,CAAmB,OAAA,EAAS,QAAQ,IAAI,CAAA;AACtE,EAAA,OAAO,IAAI,YAAA,CAAa,OAAA,EAAS,MAAA,EAAQ,IAAI,CAAA;AAC/C;;;ACnFO,IAAM,YAAA,GAAe;AAM5B,IAAM,SAAA,GAAY,uBAAA;AAuDX,SAAS,eAAe,KAAA,EAAsC;AACnE,EAAA,IAAI,CAAC,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,EAAG;AACjC,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,CAAA,gBAAA,EAAmB,MAAM,MAAM,CAAA,6DAAA;AAAA,KACjC;AAAA,EACF;AACA,EAAA,IAAI,CAAC,MAAM,WAAA,EAAa;AACtB,IAAA,MAAM,IAAI,MAAM,6EAA6E,CAAA;AAAA,EAC/F;AACA,EAAA,OAAO;AAAA,IACL,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,IAAA,EAAM,MAAM,IAAA,IAAQ,YAAA;AAAA,IACpB,aAAa,KAAA,CAAM,WAAA;AAAA,IACnB,eAAe,KAAA,CAAM,aAAA;AAAA,IACrB,QAAA,EAAU;AAAA,MACR,SAAA,EAAW,KAAA,CAAM,QAAA,EAAU,SAAA,IAAa,GAAA;AAAA,MACxC,MAAA,EAAQ,KAAA,CAAM,QAAA,EAAU,MAAA,IAAU;AAAA,KACpC;AAAA,IACA,OAAO,EAAE,WAAA,EAAa,KAAA,CAAM,KAAA,EAAO,eAAe,CAAA,EAAE;AAAA,IACpD,KAAA,EAAO;AAAA,MACL,uBAAA,EAAyB,KAAA,CAAM,KAAA,EAAO,uBAAA,IAA2B,EAAA;AAAA,MACjE,kBAAA,EAAoB,KAAA,CAAM,KAAA,EAAO,kBAAA,IAAsB;AAAA,KACzD;AAAA,IACA,QAAQ,KAAA,CAAM;AAAA,GAChB;AACF;;;ACtFO,IAAM,KAAA,GAAkC;AAAA,EAC7C,KAAA,EAAO,EAAA;AAAA,EAAI,KAAA,EAAO,EAAA;AAAA,EAAI,IAAA,EAAM,EAAA;AAAA,EAAI,IAAA,EAAM,EAAA;AAAA,EAAI,KAAA,EAAO,EAAA;AAAA,EAAI,MAAA,EAAQ;AAC/D;AA2EA,SAAS,aAAa,CAAA,EAAsC;AAC1D,EAAA,OAAO,CAAA,KAAM,UAAa,CAAA,IAAK,KAAA;AACjC;AAGA,SAAS,QAAQ,IAAA,EAAkC;AACjD,EAAA,IAAI;AACF,IAAA,OAAO,OAAO,YAAY,WAAA,IAAe,OAAA,CAAQ,MAAM,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,GAAI,KAAA,CAAA;AAAA,EAC7E,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,MAAA;AAAA,EACT;AACF;AAQO,IAAM,gBAAN,MAAoB;AAAA,EAOzB,WAAA,CACE,GAAA,EACiB,IAAA,GAA8B,MAAM;AAAA,EAAC,CAAA,EACtD;AADiB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAEjB,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,KAAA,IAAS,MAAA;AAC7B,IAAA,IAAA,CAAK,WAAA,GAAc,EAAE,GAAG,GAAA,CAAI,QAAA,EAAS;AAAA,EACvC;AAAA,EAJmB,IAAA;AAAA,EARX,QAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAyD,EAAC;AAAA,EAC1D,YAAA;AAAA,EACA,MAAA,GAAS,KAAA;AAAA,EAUT,OAAO,GAAA,EAAwC;AACrD,IAAA,MAAM,MAAM,OAAA,CAAQ,CAAA,kBAAA,EAAqB,GAAA,CAAI,WAAA,EAAa,CAAA,CAAE,CAAA;AAC5D,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,MAAA;AAC9B,IAAA,IAAI,YAAA,CAAa,GAAG,CAAA,EAAG,OAAO,GAAA;AAC9B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,MAAA,IAAA,CAAK,KAAK,CAAA,0BAAA,EAA6B,GAAA,CAAI,aAAa,CAAA,EAAA,EAAK,GAAG,CAAA,SAAA,CAAW,CAAA;AAAA,IAC7E;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA,EAEQ,SAAA,GAAkC;AACxC,IAAA,MAAM,GAAA,GAAM,QAAQ,mBAAmB,CAAA;AACvC,IAAA,IAAI,GAAA,KAAQ,QAAW,OAAO,MAAA;AAC9B,IAAA,IAAI,YAAA,CAAa,GAAG,CAAA,EAAG,OAAO,GAAA;AAC9B,IAAA,IAAI,CAAC,KAAK,MAAA,EAAQ;AAChB,MAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,MAAA,IAAA,CAAK,IAAA,CAAK,CAAA,2BAAA,EAA8B,GAAG,CAAA,SAAA,CAAW,CAAA;AAAA,IACxD;AACA,IAAA,OAAO,MAAA;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,IAAI,GAAA,EAA4B;AAC9B,IAAA,OACE,KAAK,cAAA,CAAe,GAAG,KACvB,IAAA,CAAK,MAAA,CAAO,GAAG,CAAA,IACf,IAAA,CAAK,YAAA,IACL,IAAA,CAAK,WAAU,IACf,IAAA,CAAK,YAAY,GAAG,CAAA,IACpB,KAAK,QAAA,IACL,MAAA;AAAA,EAEJ;AAAA;AAAA,EAGA,aAAa,GAAA,EAA0B;AACrC,IAAA,OAAO,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,EAC5B;AAAA;AAAA,EAGA,SAAA,CAAU,KAAkB,EAAA,EAAuB;AACjD,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAG,CAAA,IAAK,MAAM,EAAE,CAAA;AAAA,EAC3C;AAAA;AAAA,EAGA,GAAA,CAAI,KAAA,EAAiB,GAAA,EAAmB,KAAA,GAAQ,KAAA,EAAa;AAC3D,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,MAAM,WAAW,OAAA,CAAQ,CAAA,kBAAA,EAAqB,IAAI,WAAA,EAAa,EAAE,CAAA,KAAM,MAAA;AACvE,MAAA,IAAI,QAAA,IAAY,CAAC,KAAA,EAAO;AACtB,QAAA,IAAA,CAAK,IAAA,CAAK,CAAA,WAAA,EAAc,GAAG,CAAA,2CAAA,CAA6C,CAAA;AACxE,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,EAAO,IAAA,CAAK,cAAA,CAAe,GAAG,CAAA,GAAI,KAAA;AAAA,WACjC,IAAA,CAAK,WAAA,CAAY,GAAG,CAAA,GAAI,KAAA;AAAA,IAC/B,CAAA,MAAO;AACL,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,mBAAmB,CAAA,KAAM,MAAA;AAClD,MAAA,IAAI,QAAA,IAAY,CAAC,KAAA,EAAO;AACtB,QAAA,IAAA,CAAK,KAAK,wDAAwD,CAAA;AAClE,QAAA;AAAA,MACF;AACA,MAAA,IAAI,KAAA,OAAY,YAAA,GAAe,KAAA;AAAA,gBACrB,QAAA,GAAW,KAAA;AAAA,IACvB;AAAA,EACF;AACF;AAGA,IAAM,cAAA,uBAAqB,GAAA,CAAI;AAAA,EAC7B,eAAA;AAAA,EAAiB,UAAA;AAAA,EAAY,aAAA;AAAA,EAAe,aAAA;AAAA,EAAe,cAAA;AAAA,EAC3D,QAAA;AAAA,EAAU,cAAA;AAAA,EAAgB,eAAA;AAAA,EAAiB,eAAA;AAAA,EAAiB,WAAA;AAAA,EAC5D,YAAA;AAAA,EAAc,aAAA;AAAA,EAAe,QAAA;AAAA,EAAU;AACzC,CAAC,CAAA;AAGM,SAAS,MAAA,CAAO,KAAA,EAAgB,KAAA,GAAkB,EAAC,EAAY;AACpE,EAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,cAAc,CAAA;AACnC,EAAA,KAAA,MAAW,KAAK,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,aAAa,CAAA;AAC/C,EAAA,MAAM,IAAA,GAAO,CAAC,CAAA,KAAwB;AACpC,IAAA,IAAI,MAAM,OAAA,CAAQ,CAAC,GAAG,OAAO,CAAA,CAAE,IAAI,IAAI,CAAA;AACvC,IAAA,IAAI,CAAA,IAAK,OAAO,CAAA,KAAM,QAAA,EAAU;AAC9B,MAAA,MAAM,GAAA,GAAM,CAAA;AAEZ,MAAA,IAAI,OAAO,GAAA,CAAI,IAAA,KAAS,QAAA,IAAY,OAAA,IAAW,KAAK,OAAO,EAAE,IAAA,EAAM,GAAA,CAAI,IAAA,EAAK;AAC5E,MAAA,MAAM,MAA+B,EAAC;AACtC,MAAA,KAAA,MAAW,CAAC,CAAA,EAAG,GAAG,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC1C,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,WAAA,EAAa,CAAA,EAAG;AAC7B,UAAA,GAAA,CAAI,CAAC,IACH,CAAA,CAAE,WAAA,OAAkB,eAAA,IAAmB,OAAO,GAAA,KAAQ,QAAA,GAClD,uBAAA,GACA,gBAAA;AAAA,QACR,CAAA,MAAO;AACL,UAAA,GAAA,CAAI,CAAC,CAAA,GAAI,IAAA,CAAK,GAAG,CAAA;AAAA,QACnB;AAAA,MACF;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,OAAO,CAAA;AAAA,EACT,CAAA;AACA,EAAA,OAAO,KAAK,KAAK,CAAA;AACnB;AASA,IAAM,IAAA,GAAoD;AAAA,EACxD,OAAO,KAAA,CAAM,KAAA;AAAA,EAAO,OAAO,KAAA,CAAM,KAAA;AAAA,EAAO,MAAM,KAAA,CAAM,IAAA;AAAA,EAAM,MAAM,KAAA,CAAM,IAAA;AAAA,EAAM,OAAO,KAAA,CAAM;AAC3F,CAAA;AAEA,IAAe,aAAf,MAA4C;AAAA,EAC1C,WAAA,CACqB,QAAA,EACA,QAAA,EACA,WAAA,EACnB;AAHmB,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,QAAA,GAAA,QAAA;AACA,IAAA,IAAA,CAAA,WAAA,GAAA,WAAA;AAAA,EAClB;AAAA,EAHkB,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EAEb,GAAA,GAAmB;AACzB,IAAA,OAAQ,IAAA,CAAK,SAAS,OAAA,IAA2B,MAAA;AAAA,EACnD;AAAA,EACA,IAAI,KAAA,GAAkB;AACpB,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,IAAA,CAAK,KAAK,CAAA;AAAA,EACrC;AAAA,EACA,eAAe,KAAA,EAA0B;AACvC,IAAA,OAAO,KAAK,QAAA,CAAS,SAAA,CAAU,IAAA,CAAK,GAAA,IAAO,KAAK,CAAA;AAAA,EAClD;AAAA,EAMQ,EAAA,CAAG,KAAA,EAAoC,GAAA,EAAa,MAAA,EAA0B;AACpF,IAAA,IAAI,IAAA,CAAK,SAAS,YAAA,CAAa,IAAA,CAAK,KAAK,CAAA,GAAI,IAAA,CAAK,KAAK,CAAA,EAAG;AAC1D,IAAA,MAAM,MAAA,GAAS,EAAE,GAAG,IAAA,CAAK,UAAU,GAAI,MAAA,IAAU,EAAC,EAAG;AACrD,IAAA,IAAA,CAAK,KAAK,KAAA,EAAO,GAAA,EAAK,OAAO,MAAA,EAAQ,IAAA,CAAK,WAAW,CAAc,CAAA;AAAA,EACrE;AAAA,EACA,KAAA,CAAM,GAAW,CAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AAAA,EAAG;AAAA,EAChE,KAAA,CAAM,GAAW,CAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AAAA,EAAG;AAAA,EAChE,IAAA,CAAK,GAAW,CAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,EAAA,CAAG,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,EAAG;AAAA,EAC9D,IAAA,CAAK,GAAW,CAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,EAAA,CAAG,MAAA,EAAQ,CAAA,EAAG,CAAC,CAAA;AAAA,EAAG;AAAA,EAC9D,KAAA,CAAM,GAAW,CAAA,EAAqB;AAAE,IAAA,IAAA,CAAK,EAAA,CAAG,OAAA,EAAS,CAAA,EAAG,CAAC,CAAA;AAAA,EAAG;AAElE,CAAA;AAEA,IAAM,aAAA,GAAN,MAAM,cAAA,SAAsB,UAAA,CAAW;AAAA,EACrC,WAAA,CACE,QAAA,EACA,QAAA,EACA,KAAA,EACiB,MACA,MAAA,EACjB;AACA,IAAA,KAAA,CAAM,QAAA,EAAU,UAAU,KAAK,CAAA;AAHd,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AACA,IAAA,IAAA,CAAA,MAAA,GAAA,MAAA;AAAA,EAGnB;AAAA,EAJmB,IAAA;AAAA,EACA,MAAA;AAAA,EAIT,IAAA,CAAK,KAAA,EAAoC,GAAA,EAAa,MAAA,EAAyB;AACvF,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,MAAM,KACJ,KAAA,KAAU,OAAA,GAAU,IAAA,CAAK,IAAA,CAAK,QAC5B,KAAA,KAAU,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,OAC7B,KAAA,KAAU,MAAA,GAAS,KAAK,IAAA,CAAK,IAAA,GAC7B,KAAK,IAAA,CAAK,GAAA;AACd,MAAA,EAAA,CAAG,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,GAAG,IAAI,MAAM,CAAA;AAAA,IAChC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,KAAK,GAAA,CAAI,IAAA,CAAK,SAAA,CAAU,EAAE,qBAAI,IAAI,IAAA,EAAK,EAAE,WAAA,IAAe,KAAA,EAAO,GAAA,EAAK,GAAG,MAAA,EAAQ,CAAC,CAAA;AAAA,IACvF;AAAA,EACF;AAAA,EACA,MAAM,QAAA,EAA6B;AACjC,IAAA,OAAO,IAAI,cAAA;AAAA,MACT,IAAA,CAAK,QAAA;AAAA,MACL,EAAE,GAAG,IAAA,CAAK,QAAA,EAAU,GAAG,QAAA,EAAS;AAAA,MAChC,IAAA,CAAK,WAAA;AAAA,MACL,IAAA,CAAK,IAAA;AAAA,MACL,IAAA,CAAK;AAAA,KACP;AAAA,EACF;AACF,CAAA;AAEA,IAAM,aAAN,MAAmC;AAAA,EACjC,KAAA,GAAkB,QAAA;AAAA,EAClB,cAAA,GAA0B;AAAE,IAAA,OAAO,KAAA;AAAA,EAAO;AAAA,EAC1C,KAAA,GAAc;AAAA,EAAC;AAAA,EACf,KAAA,GAAc;AAAA,EAAC;AAAA,EACf,IAAA,GAAa;AAAA,EAAC;AAAA,EACd,IAAA,GAAa;AAAA,EAAC;AAAA,EACd,KAAA,GAAc;AAAA,EAAC;AAAA,EACf,KAAA,GAAgB;AAAE,IAAA,OAAO,IAAA;AAAA,EAAM;AACjC,CAAA;AAGO,SAAS,oBACd,QAAA,EACA,QAAA,GAAsB,EAAC,EACvB,IAAA,GAA6D,EAAC,EACtD;AACR,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,MAAA,IAAU,OAAA,CAAQ,UAAU,CAAA,KAAM,YAAA;AACtD,EAAA,MAAM,IAAA,GAAa,KAAK,IAAA,IAAQ;AAAA,IAC9B,KAAK,OAAA,CAAQ,GAAA;AAAA,IACb,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,MAAM,OAAA,CAAQ,IAAA;AAAA,IACd,OAAO,OAAA,CAAQ;AAAA,GACjB;AACA,EAAA,OAAO,IAAI,cAAc,QAAA,EAAU,QAAA,EAAU,KAAK,MAAA,IAAU,EAAC,EAAG,IAAA,EAAM,MAAM,CAAA;AAC9E;AAGO,SAAS,gBAAA,GAA2B;AACzC,EAAA,OAAO,IAAI,UAAA,EAAW;AACxB;;;AC3OO,IAAM,IAAA,GAAO;AAAA;AAAA,EAElB,OAAA,EAAS,CAAC,WAAA,KACR,WAAA,KAAgB,MAAA,GAAY,EAAE,IAAA,EAAM,SAAA,EAAU,GAAI,EAAE,IAAA,EAAM,SAAA,EAAW,WAAA,EAAY;AAAA;AAAA,EAEnF,SAAA,EAAW,OAAoB,EAAE,IAAA,EAAM,WAAA,EAAY,CAAA;AAAA;AAAA,EAEnD,UAAU,CAAC,KAAA,MAAgC,EAAE,IAAA,EAAM,YAAY,KAAA,EAAM,CAAA;AAAA;AAAA,EAErE,KAAK,CAAC,KAAA,MAAgC,EAAE,IAAA,EAAM,OAAO,KAAA,EAAM;AAC7D;AAGA,eAAsB,YAAA,CAAa,KAAkB,QAAA,EAA0C;AAC7F,EAAA,QAAQ,IAAI,IAAA;AAAM,IAChB,KAAK,SAAA;AACH,MAAA,OAAO,QAAA,CAAS,QAAA,CAAS,GAAA,CAAI,WAAA,IAAe,SAAS,CAAA;AAAA,IACvD,KAAK,WAAA;AACH,MAAA,OAAA,CAAQ,MAAM,QAAA,CAAS,iBAAA,EAAkB,EAAG,WAAA;AAAA,IAC9C,KAAK,UAAA;AAAA,IACL,KAAK,KAAA;AACH,MAAA,OAAO,GAAA,CAAI,KAAA;AAAA;AAEjB;AAQO,IAAM,0BAAN,MAA8B;AAAA,EAC3B,SAAA,GAA2C,IAAA;AAAA,EAC3C,QAAA,GAA0C,IAAA;AAAA,EAElD,IAAI,SAAA,EAAgD;AAClD,IAAA,IAAA,CAAK,SAAA,GAAY,SAAA;AAAA,EACnB;AAAA,EAEA,IAAI,OAAA,GAAmB;AACrB,IAAA,OAAO,KAAK,SAAA,KAAc,IAAA;AAAA,EAC5B;AAAA;AAAA,EAGA,QAAQ,YAAA,EAA8C;AACpD,IAAA,IAAI,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAChD,IAAA,IAAI,IAAA,CAAK,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA;AAC/B,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,OAAA,CAAQ,IAAA,CAAK,SAAA,CAAU,QAAQ,YAAY,CAAC,CAAA,CAAE,OAAA,CAAQ,MAAM;AAC5E,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,IAClB,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AAChB,IAAA,OAAO,CAAA;AAAA,EACT;AACF;AASO,IAAM,uBAAN,MAAoD;AAAA,EAazD,YAA6B,GAAA,EAAqB;AAArB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAsB;AAAA,EAAtB,GAAA;AAAA,EAZZ,YAAA,uBAAmB,GAAA,EAAwB;AAAA,EAC3C,YAAA,uBAAmB,GAAA,EAA6B;AAAA,EACzD,IAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EAGS,gBAAA,uBAAuB,GAAA,EAEtC;AAAA,EAIF,UACE,QAAA,EACY;AACZ,IAAA,IAAA,CAAK,gBAAA,CAAiB,IAAI,QAAQ,CAAA;AAClC,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,gBAAA,CAAiB,OAAO,QAAQ,CAAA;AAAA,IACvC,CAAA;AAAA,EACF;AAAA,EAEQ,aAAA,CAAc,MAAgC,OAAA,EAAwB;AAC5E,IAAA,KAAA,MAAW,CAAA,IAAK,KAAK,gBAAA,EAAkB;AACrC,MAAA,IAAI;AACF,QAAA,CAAA,CAAE,EAAE,IAAA,EAAM,OAAA,EAAS,CAAA;AAAA,MACrB,CAAA,CAAA,MAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEA,qBAAqB,KAAA,EAAoC;AACvD,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AAIjB,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AACd,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,EAAK;AAC7B,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,IAAA,CAAK,IAAA,GAAO;AAAA,UACV,WAAA,EAAa,EAAA;AAAA,UACb,cAAc,SAAA,CAAU,YAAA;AAAA,UACxB,WAAW,SAAA,CAAU,SAAA;AAAA,UACrB,SAAA,EAAW,CAAA;AAAA,UACX,SAAA,EAAW;AAAA,SACb;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,MAAM,GAAA,EAAiC;AAC7C,IAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,OAAA;AAC/B,MAAA,IAAI,CAAC,CAAA,EAAG,QAAA,IAAY,CAAC,EAAE,MAAA,EAAQ;AAC7B,QAAA,MAAM,IAAI,gBAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AACA,MAAA,OAAO,CAAA;AAAA,IACT;AACA,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,SAAS,GAAG,CAAA;AAC3C,IAAA,IAAI,CAAC,CAAA,EAAG,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,GAAG,CAAA,CAAA,CAAG,CAAA;AACzD,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEQ,MAAM,CAAA,EAAoC;AAChD,IAAA,IAAI,CAAC,GAAG,OAAO,KAAA;AACf,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,IAAI,GAAA,GAAM,EAAE,UAAA,IAAc,IAAA,CAAK,IAAI,KAAA,CAAM,kBAAA,GAAqB,KAAM,OAAO,KAAA;AAC3E,IAAA,OAAO,MAAM,CAAA,CAAE,SAAA;AAAA,EACjB;AAAA,EAEA,MAAM,SAAS,GAAA,EAA8B;AAE3C,IAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACd,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AACxC,IAAA,IAAI,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,SAAU,MAAA,CAAQ,KAAA;AACvC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA;AAC1C,IAAA,IAAI,UAAU,OAAO,QAAA;AACrB,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,mBAAA,CAAoB,GAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,IAAA,CAAK,YAAA,CAAa,MAAA,CAAO,GAAG,CAAC,CAAA;AACnF,IAAA,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,GAAA,EAAK,CAAC,CAAA;AAC5B,IAAA,OAAO,CAAA;AAAA,EACT;AAAA,EAEA,MAAc,oBAAoB,GAAA,EAA8B;AAC9D,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AACxB,IAAA,MAAM,IAAA,GAAO,IAAI,eAAA,CAAgB;AAAA,MAC/B,UAAA,EAAY,oBAAA;AAAA,MACZ,WAAW,CAAA,CAAE,QAAA;AAAA,MACb,eAAe,CAAA,CAAE;AAAA,KAClB,CAAA;AACD,IAAA,IAAI,EAAE,KAAA,EAAO,IAAA,CAAK,GAAA,CAAI,OAAA,EAAS,EAAE,KAAK,CAAA;AACtC,IAAA,MAAM,MAAM,MAAM,KAAA,CAAM,GAAG,IAAA,CAAK,GAAA,CAAI,IAAI,CAAA,YAAA,CAAA,EAAgB;AAAA,MACtD,MAAA,EAAQ,MAAA;AAAA,MACR,OAAA,EAAS,EAAE,cAAA,EAAgB,mCAAA,EAAoC;AAAA,MAC/D;AAAA,KACD,CAAA;AACD,IAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAC/C,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,IAAI,gBAAA,CAAiB,CAAA,0BAAA,EAA6B,GAAG,CAAA,CAAA,CAAA,EAAK,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,IAClF;AACA,IAAA,MAAM,UAAA,GAAa,KAAK,GAAA,EAAI;AAC5B,IAAA,MAAM,GAAA,GAAM,MAAA,CAAQ,IAAA,CAAK,UAAA,IAAqC,IAAI,CAAA;AAClE,IAAA,IAAA,CAAK,YAAA,CAAa,IAAI,GAAA,EAAK;AAAA,MACzB,OAAO,IAAA,CAAK,YAAA;AAAA,MACZ,UAAA;AAAA,MACA,WAAW,UAAA,GAAA,CAAc,GAAA,GAAM,IAAA,CAAK,GAAA,CAAI,MAAM,uBAAA,IAA2B;AAAA,KAC1E,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,YAAA,CAAa,GAAA,CAAI,GAAG,CAAA,CAAG,KAAA;AAAA,EACrC;AAAA,EAEA,WAAW,GAAA,EAAmB;AAC5B,IAAA,IAAA,CAAK,YAAA,CAAa,OAAO,GAAG,CAAA;AAAA,EAC9B;AAAA,EAEQ,SAAA,GAAqB;AAC3B,IAAA,OAAO,CAAC,CAAC,IAAA,CAAK,IAAA,IAAQ,KAAK,GAAA,EAAI,GAAI,KAAK,IAAA,CAAK,SAAA;AAAA,EAC/C;AAAA,EAEA,MAAM,iBAAA,GAA+C;AACnD,IAAA,IAAI,KAAK,SAAA,EAAU,SAAU,IAAA,CAAK,WAAA,CAAY,KAAK,IAAK,CAAA;AACxD,IAAA,IAAI,IAAA,CAAK,QAAA,EAAU,OAAO,IAAA,CAAK,QAAA;AAG/B,IAAA,MAAM,UAAA,GAAa,CAAC,CAAC,IAAA,CAAK,IAAA,EAAM,YAAA;AAChC,IAAA,MAAM,MAAA,GAAS,UAAA,GACX,IAAA,CAAK,cAAA,CAAe,SAAS,CAAA,CAAE,KAAA,CAAM,MAAM,IAAA,CAAK,eAAe,OAAO,CAAC,CAAA,GACvE,IAAA,CAAK,eAAe,OAAO,CAAA;AAC/B,IAAA,MAAM,CAAA,GAAI,MAAA,CAAO,OAAA,CAAQ,MAAM;AAC7B,MAAA,IAAA,CAAK,QAAA,GAAW,MAAA;AAAA,IAClB,CAAC,CAAA;AACD,IAAA,IAAA,CAAK,QAAA,GAAW,CAAA;AAChB,IAAA,OAAO,CAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,gBAAA,GAA8C;AAClD,IAAA,IAAI,CAAC,IAAA,CAAK,IAAA,EAAM,OAAO,KAAK,iBAAA,EAAkB;AAC9C,IAAA,OAAO,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA,EACtC;AAAA,EAEA,mBAAA,GAA4B;AAC1B,IAAA,IAAA,CAAK,IAAA,GAAO,MAAA;AACZ,IAAA,IAAA,CAAK,SAAA,EAAW,MAAM,IAAI,CAAA;AAAA,EAC5B;AAAA,EAEA,oBAAoB,GAAA,EAIX;AACP,IAAA,MAAM,IAAA,GAAO,KAAK,eAAA,IAAmB,IAAA,CAAK,IAAI,WAAA,CAAY,UAAA,EAAY,WAAW,EAAC;AAClF,IAAA,IAAA,CAAK,eAAA,GAAkB,EAAE,GAAG,IAAA,EAAM,GAAG,GAAA,EAAI;AACzC,IAAA,IAAA,CAAK,mBAAA,EAAoB;AAAA,EAC3B;AAAA;AAAA,EAGA,eAAA,GAAwB;AACtB,IAAA,IAAI,IAAA,CAAK,MAAM,IAAA,CAAK,IAAA,GAAO,EAAE,GAAG,IAAA,CAAK,IAAA,EAAM,SAAA,EAAW,CAAA,EAAE;AAAA,EAC1D;AAAA,EAEQ,YAAY,CAAA,EAA+D;AACjF,IAAA,MAAM,EAAE,SAAA,EAAW,UAAA,EAAY,GAAG,MAAK,GAAI,CAAA;AAC3C,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,MAAc,eAAe,IAAA,EAAsD;AACjF,IAAA,MAAM,EAAA,GAAK,IAAA,CAAK,GAAA,CAAI,WAAA,CAAY,UAAA;AAChC,IAAA,IAAI,CAAC,IAAI,QAAA,EAAU;AACjB,MAAA,MAAM,IAAI,MAAM,kEAAkE,CAAA;AAAA,IACpF;AACA,IAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,IAAI,CAAA,8BAAA,EAAiC,IAAI,CAAA,CAAE,CAAA;AAC3E,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,QAAA,EAAU,IAAA,CAAK,IAAI,MAAM,CAAA;AAC9C,IAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,WAAA,EAAa,EAAA,CAAG,QAAQ,CAAA;AAG7C,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,eAAA,IAAmB,EAAA,CAAG,OAAA;AACrC,IAAA,IAAI,GAAG,QAAA,EAAU,GAAA,CAAI,aAAa,GAAA,CAAI,UAAA,EAAY,EAAE,QAAQ,CAAA;AAC5D,IAAA,IAAI,GAAG,QAAA,EAAU,GAAA,CAAI,aAAa,GAAA,CAAI,UAAA,EAAY,EAAE,QAAQ,CAAA;AAC5D,IAAA,IAAI,GAAG,cAAA,EAAgB,GAAA,CAAI,aAAa,GAAA,CAAI,gBAAA,EAAkB,EAAE,cAAc,CAAA;AAC9E,IAAA,IAAI,IAAA,KAAS,SAAA,IAAa,IAAA,CAAK,IAAA,EAAM;AACnC,MAAA,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,eAAA,EAAiB,IAAA,CAAK,KAAK,YAAY,CAAA;AAAA,IAC9D;AACA,IAAA,IAAI;AACF,MAAA,MAAM,MAAM,MAAM,KAAA,CAAM,KAAK,EAAE,MAAA,EAAQ,OAAO,CAAA;AAC9C,MAAA,MAAM,IAAA,GAAQ,MAAM,GAAA,CAAI,IAAA,GAAO,KAAA,CAAM,OAAO,EAAC,CAAE,CAAA;AAC/C,MAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,QAAA,IAAA,CAAK,aAAA,CAAc,aAAa,KAAK,CAAA;AACrC,QAAA,MAAM,IAAI,gBAAA,CAAiB,CAAA,gBAAA,EAAmB,IAAI,CAAA,OAAA,CAAA,EAAW,GAAA,CAAI,QAAQ,IAAI,CAAA;AAAA,MAC/E;AACA,MAAA,MAAM,UAAA,GAAa,KAAK,GAAA,EAAI;AAC5B,MAAA,IAAA,CAAK,IAAA,GAAO;AAAA,QACV,aAAa,IAAA,CAAK,YAAA;AAAA,QAClB,cAAc,IAAA,CAAK,aAAA;AAAA,QACnB,WAAW,IAAA,CAAK,SAAA;AAAA,QAChB,WAAW,IAAA,CAAK,UAAA;AAAA,QAChB,WACE,UAAA,GAAA,CACE,IAAA,CAAK,aAAwB,IAAA,CAAK,GAAA,CAAI,MAAM,uBAAA,IAA2B;AAAA,OAC7E;AACA,MAAA,IAAA,CAAK,WAAW,KAAA,CAAM;AAAA,QACpB,YAAA,EAAc,KAAK,IAAA,CAAK,YAAA;AAAA,QACxB,SAAA,EAAW,KAAK,IAAA,CAAK;AAAA,OACtB,CAAA;AACD,MAAA,IAAA,CAAK,aAAA,CAAc,aAAa,IAAI,CAAA;AACpC,MAAA,OAAO,IAAA,CAAK,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA;AAAA,IACnC,SAAS,GAAA,EAAK;AAEZ,MAAA,IAAI,EAAE,eAAe,gBAAA,CAAA,EAAmB;AACtC,QAAA,IAAA,CAAK,aAAA,CAAc,aAAa,KAAK,CAAA;AAAA,MACvC;AACA,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AACF;;;AC1UA,IAAI,UAAA,GAAa,CAAA;AAEjB,SAAS,SAAS,IAAA,EAAuB;AACvC,EAAA,IAAI;AACF,IAAA,OAAO,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,EACxB,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAGO,IAAM,aAAN,MAAiB;AAAA,EAEtB,YAA6B,IAAA,EAAyB;AAAzB,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAC3B,IAAA,IAAA,CAAK,KAAA,GACH,IAAA,CAAK,KAAA,KAAU,CAAC,EAAA,KAAe,IAAI,OAAA,CAAc,CAAC,CAAA,KAAM,UAAA,CAAW,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,EAC7E;AAAA,EAH6B,IAAA;AAAA,EADZ,KAAA;AAAA,EAMT,YAAA,CACN,CAAA,EACA,KAAA,EACA,UAAA,EACwB;AACxB,IAAA,OAAO;AAAA,MACL,GAAI,IAAA,CAAK,IAAA,CAAK,cAAA,EAAgB,QAAA,GAC1B,EAAE,iBAAA,EAAmB,IAAA,CAAK,IAAA,CAAK,cAAA,CAAe,QAAA,EAAS,GACvD,EAAC;AAAA,MACL,GAAI,CAAA,CAAE,OAAA,IAAW,EAAC;AAAA,MAClB,aAAA,EAAe,UAAU,KAAK,CAAA,CAAA;AAAA;AAAA;AAAA,MAG9B,GAAI,CAAA,CAAE,IAAA,KAAS,MAAA,IAAa,CAAC,aACzB,EAAE,cAAA,EAAgB,kBAAA,EAAmB,GACrC;AAAC,KACP;AAAA,EACF;AAAA,EAEA,MAAM,QAAqB,CAAA,EAA+B;AACxD,IAAA,MAAM,SAAA,GAAY,CAAA,IAAA,EAAO,EAAE,UAAU,CAAA,CAAA;AACrC,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,KAAA,CAAM,EAAE,WAAW,CAAA;AAChD,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,KAAK,IAAA,CAAK,IAAA,GAAO,EAAE,IAAI,CAAA;AAC3C,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,QAAQ,CAAA,CAAE,KAAA,IAAS,EAAE,CAAA,EAAG;AAClD,MAAA,IAAI,CAAA,KAAM,QAAW,GAAA,CAAI,YAAA,CAAa,IAAI,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACxD;AACA,IAAA,MAAM,aAAa,CAAA,CAAE,IAAA,CAAK,SAAS,SAAA,IAAa,CAAA,CAAE,KAAK,IAAA,KAAS,WAAA;AAChE,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,IAAA,CAAK,KAAA,CAAM,WAAA;AACpC,IAAA,IAAI,QAAA,GAAW,KAAA;AACf,IAAA,IAAI,gBAAgB,CAAA,CAAE,IAAA,CAAK,SAAS,UAAA,GAAa,CAAA,CAAE,KAAK,KAAA,GAAQ,MAAA;AAChE,IAAA,IAAI,gBAAA,GAAmB,KAAA;AAEvB,IAAA,KAAA,IAAS,OAAA,GAAU,KAAK,OAAA,EAAA,EAAW;AACjC,MAAA,MAAM,KAAA,GAAQ,iBAAkB,MAAM,YAAA,CAAa,EAAE,IAAA,EAAM,IAAA,CAAK,KAAK,QAAQ,CAAA;AAC7E,MAAA,GAAA,CAAI,MAAM,cAAA,EAAgB;AAAA,QACxB,QAAA,EAAU,EAAE,IAAA,CAAK,IAAA;AAAA,QACjB,QAAQ,CAAA,CAAE,MAAA;AAAA,QACV,KAAK,GAAA,CAAI,QAAA;AAAA,QACT;AAAA,OACD,CAAA;AAED,MAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,MAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,QACZ,MAAM,WAAW,KAAA,EAAM;AAAA,QACvB,CAAA,CAAE,SAAA,IAAa,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS;AAAA,OACpC;AACA,MAAA,MAAM,UAAA,GACJ,OAAO,QAAA,KAAa,WAAA,IAAe,EAAE,IAAA,YAAgB,QAAA;AACvD,MAAA,MAAM,IAAA,GAAoB;AAAA,QACxB,QAAQ,CAAA,CAAE,MAAA;AAAA,QACV,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,CAAA,EAAG,OAAO,UAAU,CAAA;AAAA,QAC/C,QAAQ,UAAA,CAAW;AAAA,OACrB;AACA,MAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAW;AACxB,QAAA,IAAA,CAAK,OAAO,UAAA,GAAc,CAAA,CAAE,OAAoB,IAAA,CAAK,SAAA,CAAU,EAAE,IAAI,CAAA;AAAA,MACvE;AACA,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI;AACF,QAAA,GAAA,GAAM,MAAM,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AAAA,MAC7B,CAAA,SAAE;AACA,QAAA,YAAA,CAAa,KAAK,CAAA;AAAA,MACpB;AAEA,MAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,MAAA,MAAM,MAAA,GAAS,IAAA,GAAO,QAAA,CAAS,IAAI,CAAA,GAAI,MAAA;AACvC,MAAA,IAAI,IAAI,EAAA,EAAI;AACV,QAAA,GAAA,CAAI,MAAM,SAAA,EAAW,EAAE,MAAA,EAAQ,GAAA,CAAI,QAAQ,CAAA;AAC3C,QAAA,OAAO,MAAA;AAAA,MACT;AAGA,MAAA,IAAI,GAAA,CAAI,WAAW,GAAA,EAAK;AACtB,QAAA,IAAI,UAAA,IAAc,CAAC,QAAA,EAAU;AAC3B,UAAA,QAAA,GAAW,IAAA;AACX,UAAA,IAAI,CAAA,CAAE,IAAA,CAAK,IAAA,KAAS,SAAA,EAAW;AAC7B,YAAA,IAAA,CAAK,KAAK,QAAA,CAAS,UAAA,GAAa,CAAA,CAAE,IAAA,CAAK,eAAe,SAAS,CAAA;AAAA,UACjE,CAAA,MAAA,IAAW,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,eAAA,EAAiB;AAG7C,YAAA,IAAA,CAAK,IAAA,CAAK,SAAS,eAAA,EAAgB;AAAA,UACrC,CAAA,MAAO;AACL,YAAA,IAAA,CAAK,IAAA,CAAK,SAAS,mBAAA,IAAsB;AAAA,UAC3C;AACA,UAAA,GAAA,CAAI,KAAK,kCAAA,EAAoC,EAAE,UAAU,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AACtE,UAAA;AAAA,QACF;AACA,QAAA,IACE,CAAA,CAAE,KAAK,IAAA,KAAS,UAAA,IAChB,CAAC,gBAAA,IACD,IAAA,CAAK,IAAA,CAAK,eAAA,EAAiB,OAAA,EAC3B;AACA,UAAA,gBAAA,GAAmB,IAAA;AACnB,UAAA,MAAM,QAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,eAAA,CAAgB,QAAQ,aAAc,CAAA;AACpE,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,aAAA,GAAgB,KAAA;AAChB,YAAA,GAAA,CAAI,KAAK,8BAAA,EAAgC,EAAE,UAAU,CAAA,CAAE,IAAA,CAAK,MAAM,CAAA;AAClE,YAAA;AAAA,UACF;AAAA,QACF;AACA,QAAA,MAAM,iBAAA,CAAkB,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,WAAA,CAAA,EAAU,MAAM,CAAA;AAAA,MAC3E;AAGA,MAAA,MAAM,SAAA,GAAY,GAAA,CAAI,MAAA,IAAU,GAAA,IAAO,IAAI,MAAA,KAAW,GAAA;AACtD,MAAA,IAAI,SAAA,IAAa,UAAU,WAAA,EAAa;AACtC,QAAA,MAAM,aAAa,MAAA,CAAO,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,aAAa,CAAC,CAAA;AACxD,QAAA,MAAM,UACJ,MAAA,CAAO,QAAA,CAAS,UAAU,CAAA,IAAK,UAAA,IAAc,IACzC,UAAA,GAAa,GAAA,GACb,KAAK,GAAA,CAAI,GAAA,GAAO,MAAM,OAAA,GAAU,CAAA,CAAA,EAAI,GAAI,CAAA,GAAI,IAAA,CAAK,QAAO,GAAI,GAAA;AAClE,QAAA,GAAA,CAAI,IAAA,CAAK,qBAAqB,EAAE,MAAA,EAAQ,IAAI,MAAA,EAAQ,OAAA,EAAS,SAAA,EAAW,OAAA,EAAS,CAAA;AACjF,QAAA,MAAM,IAAA,CAAK,MAAM,OAAO,CAAA;AACxB,QAAA;AAAA,MACF;AAEA,MAAA,GAAA,CAAI,MAAM,oBAAA,EAAsB,EAAE,QAAQ,GAAA,CAAI,MAAA,EAAQ,SAAS,CAAA;AAC/D,MAAA,MAAM,iBAAA,CAAkB,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAG,CAAA,CAAE,MAAM,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,QAAA,EAAM,GAAA,CAAI,MAAM,IAAI,MAAM,CAAA;AAAA,IACrF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,MAAM,UAAA,CACJ,CAAA,EACA,KAAA,EACmB;AACnB,IAAA,MAAM,SAAA,GAAY,CAAA,IAAA,EAAO,EAAE,UAAU,CAAA,CAAA;AACrC,IAAA,MAAM,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,KAAA,CAAM,EAAE,WAAW,CAAA;AAChD,IAAA,MAAM,MAAM,IAAI,GAAA,CAAI,KAAK,IAAA,CAAK,IAAA,GAAO,EAAE,IAAI,CAAA;AAC3C,IAAA,KAAA,MAAW,CAAC,CAAA,EAAG,CAAC,CAAA,IAAK,MAAA,CAAO,QAAQ,CAAA,CAAE,KAAA,IAAS,EAAE,CAAA,EAAG;AAClD,MAAA,IAAI,CAAA,KAAM,QAAW,GAAA,CAAI,YAAA,CAAa,IAAI,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAAA,IACxD;AACA,IAAA,MAAM,QAAQ,MAAM,YAAA,CAAa,EAAE,IAAA,EAAM,IAAA,CAAK,KAAK,QAAQ,CAAA;AAC3D,IAAA,GAAA,CAAI,MAAM,iBAAA,EAAmB;AAAA,MAC3B,QAAA,EAAU,EAAE,IAAA,CAAK,IAAA;AAAA,MACjB,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,KAAK,GAAA,CAAI,QAAA;AAAA,MACT,QAAA,EAAU,OAAO,QAAA,IAAY;AAAA,KAC9B,CAAA;AACD,IAAA,MAAM,UAAA,GAAa,IAAI,eAAA,EAAgB;AACvC,IAAA,MAAM,KAAA,GAAQ,UAAA;AAAA,MACZ,MAAM,WAAW,KAAA,EAAM;AAAA,MACvB,CAAA,CAAE,SAAA,IAAa,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS;AAAA,KACpC;AACA,IAAA,MAAM,UAAA,GACJ,OAAO,QAAA,KAAa,WAAA,IAAe,EAAE,IAAA,YAAgB,QAAA;AACvD,IAAA,MAAM,IAAA,GAAoB;AAAA,MACxB,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,OAAA,EAAS,IAAA,CAAK,YAAA,CAAa,CAAA,EAAG,OAAO,UAAU,CAAA;AAAA,MAC/C,QAAQ,UAAA,CAAW,MAAA;AAAA,MACnB,GAAI,OAAO,QAAA,GAAW,EAAE,UAAU,KAAA,CAAM,QAAA,KAAa;AAAC,KACxD;AACA,IAAA,IAAI,CAAA,CAAE,SAAS,MAAA,EAAW;AACxB,MAAA,IAAA,CAAK,OAAO,UAAA,GAAc,CAAA,CAAE,OAAoB,IAAA,CAAK,SAAA,CAAU,EAAE,IAAI,CAAA;AAAA,IACvE;AACA,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,KAAA,CAAM,GAAA,EAAK,IAAI,CAAA;AAAA,IAC9B,CAAA,SAAE;AACA,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB;AAAA,EACF;AACF;;;AC7NO,SAAS,gBAAgBA,KAAAA,EAA4C;AAC1E,EAAA,IAAIA,UAASA,KAAAA,CAAK,IAAA,KAAS,cAAcA,KAAAA,CAAK,IAAA,KAAS,QAAQ,OAAOA,KAAAA;AACtE,EAAA,MAAM,IAAI,iBAAiB,uDAAuD,CAAA;AACpF;;;AC0CO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA,EAG7B,MAAM,SAAA,GAAuC;AAC3C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,aAAA,CAAc,iBAAA,EAAkB;AAAA,EAClD;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,KAAA,EACAA,QAAoB,EAAE,IAAA,EAAM,aAAY,EACrB;AACnB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,OAAA,CAAA;AAAA,MAClC,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,KAAA,CACJ,KAAA,EACA,IAAA,GAAoC,IACpCA,KAAAA,GAAoB,EAAE,IAAA,EAAM,WAAA,EAAY,EACd;AAC1B,IAAA,MAAM,SAAA,GAAyB,KAAK,cAAA,GAChC,EAAE,MAAM,KAAA,EAAO,KAAA,EAAO,IAAA,CAAK,cAAA,EAAe,GAC1CA,KAAAA;AACJ,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAU9B;AAAA,MACD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,MAAA,CAAA;AAAA,MAClC,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM;AAAA,KACP,CAAA;AAGD,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,WAAA,IAAe,EAAA;AAAA,MACxD,SAAA,EAAW,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,SAAA,IAAa,EAAA;AAAA,MAChD,YAAA,EAAc,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,YAAA,IAAgB,EAAA;AAAA,MACzD,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,WAAW,IAAA,CAAK;AAAA,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,MAAM,OAAA,CACJ,KAAA,EACAA,QAAoB,EAAE,IAAA,EAAM,aAAY,EACd;AAC1B,IAAA,MAAM,KAAA,GAAgC,EAAE,YAAA,EAAc,KAAA,CAAM,YAAA,EAAa;AACzE,IAAA,IAAI,KAAA,CAAM,aAAA,EAAe,KAAA,CAAM,aAAA,GAAgB,KAAA,CAAM,aAAA;AACrD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAQ9B;AAAA,MACD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,iBAAA,CAAA;AAAA,MAClC,KAAA;AAAA,MACA,IAAA,EAAAA;AAAA,KACD,CAAA;AACD,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,WAAA,IAAe,EAAA;AAAA;AAAA,MAExD,SAAA,EAAW,MAAM,SAAA,IAAa,EAAA;AAAA,MAC9B,YAAA,EAAc,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,YAAA,IAAgB,EAAA;AAAA,MACzD,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,WAAW,IAAA,CAAK;AAAA,KAClB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,OAAOA,KAAAA,EAAmC;AAC9C,IAAA,MAAM,GAAA,GAAM,gBAAgBA,KAAI,CAAA;AAChC,IAAA,MAAM,QAAS,GAAA,CAA0B,KAAA;AACzC,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,OAAA,CAAA;AAAA,MAClC,KAAA,EAAO,EAAE,WAAA,EAAa,KAAA,EAAM;AAAA,MAC5B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WAAA,CACJ,KAAA,EACAA,QAAoB,EAAE,IAAA,EAAM,aAAY,EACd;AAC1B,IAAA,MAAM,KAAA,GAAgC;AAAA,MACpC,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,cAAc,KAAA,CAAM;AAAA,KACtB;AACA,IAAA,IAAI,KAAA,CAAM,YAAA,EAAc,KAAA,CAAM,aAAA,GAAgB,KAAA,CAAM,YAAA;AACpD,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAY9B;AAAA,MACD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,YAAA,CAAA;AAAA,MAClC,KAAA;AAAA,MACA,IAAA,EAAAA,KAAAA;AAAA,MACA,GAAI,KAAA,CAAM,SAAA,GAAY,EAAE,OAAA,EAAS,EAAE,YAAA,EAAc,KAAA,CAAM,SAAA,EAAU,EAAE,GAAI;AAAC,KACzE,CAAA;AACD,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,WAAA,IAAe,EAAA;AAAA,MACxD,SAAA,EAAW,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,SAAA,IAAa,EAAA;AAAA,MAChD,YAAA,EAAc,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,YAAA,IAAgB,EAAA;AAAA,MACzD,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,WAAW,IAAA,CAAK,UAAA,IAAc,OAAO,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,GAAI,MAAA;AAAA,MAC/D,GAAI,KAAK,mBAAA,GAAsB,EAAE,mBAAmB,IAAA,CAAK,mBAAA,KAAwB,EAAC;AAAA,MAClF,GAAI,KAAK,eAAA,GAAkB,EAAE,eAAe,IAAA,CAAK,eAAA,KAAoB;AAAC,KACxE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aAAA,CACJ,KAAA,EACAA,QAAoB,EAAE,IAAA,EAAM,aAAY,EACd;AAC1B,IAAA,MAAM,KAAA,GAAgC,EAAE,kBAAA,EAAoB,KAAA,CAAM,YAAA,EAAa;AAC/E,IAAA,IAAI,KAAA,CAAM,MAAA,EAAQ,KAAA,CAAM,MAAA,GAAS,KAAA,CAAM,MAAA;AACvC,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAS9B;AAAA,MACD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,kBAAA,CAAA;AAAA,MAClC,KAAA;AAAA,MACA,IAAA,EAAAA;AAAA,KACD,CAAA;AACD,IAAA,OAAO;AAAA,MACL,aAAA,EAAe,IAAA,CAAK,YAAA,IAAgB,IAAA,CAAK,WAAA,IAAe,EAAA;AAAA,MACxD,SAAA,EAAW,IAAA,CAAK,UAAA,IAAc,IAAA,CAAK,SAAA,IAAa,EAAA;AAAA,MAChD,YAAA,EAAc,IAAA,CAAK,aAAA,IAAiB,IAAA,CAAK,YAAA,IAAgB,EAAA;AAAA,MACzD,WAAW,IAAA,CAAK,UAAA;AAAA,MAChB,WAAW,IAAA,CAAK,UAAA,IAAc,OAAO,MAAA,CAAO,IAAA,CAAK,UAAU,CAAA,GAAI;AAAA,KACjE;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,GAAGA,KAAAA,EAAuC;AAC9C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAA,CAAA;AAAA,MAClC,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,KAAA,EAA4BA,KAAAA,EAAuC;AAC9E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,GAAA,CAAA;AAAA,MAClC,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,KAAA,EAA4BA,KAAAA,EAAmC;AAClF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,SAAA,CAAA;AAAA,MAClC,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,oBAAA,CACJ,KAAA,EACAA,QAAoB,EAAE,IAAA,EAAM,aAAY,EACzB;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,eAAA,CAAA;AAAA,MAClC,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,oBAAA,CACJ,KAAA,EACAA,QAAoB,EAAE,IAAA,EAAM,aAAY,EACzB;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,uBAAA,CAAA;AAAA,MAClC,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGS,SAAA,GAAY;AAAA,IACnB,MAAM,OAAOA,KAAAA,KACX,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAmB;AAAA,MAC/B,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,aAAA,CAAA;AAAA,MAClC,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B,CAAA;AAAA,IACH,KAAK,OAAO,OAAA,EAA6BA,UACvC,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAiB;AAAA,MAC7B,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,aAAA,CAAA;AAAA,MAClC,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,IACH,MAAA,EAAQ,OAAO,EAAA,EAAY,KAAA,EAA2BA,UACpD,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAiB;AAAA,MAC7B,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,iBAAiB,EAAE,CAAA,CAAA;AAAA,MACrD,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,IACH,QAAQ,OAAO,EAAA,EAAYA,UACzB,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAc;AAAA,MAC1B,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,iBAAiB,EAAE,CAAA,CAAA;AAAA,MACrD,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B;AAAA,GACL;AACF;;;AClTA,gBAAuB,UAAA,CACrB,SAAA,EACA,KAAA,GAAQ,CAAA,EACU;AAClB,EAAA,IAAI,CAAA,GAAI,KAAA;AACR,EAAA,WAAS;AACP,IAAA,MAAM,IAAA,GAAO,MAAM,SAAA,CAAU,CAAC,CAAA;AAC9B,IAAA,KAAA,MAAW,EAAA,IAAM,IAAA,CAAK,KAAA,EAAO,MAAM,EAAA;AACnC,IAAA,IAAI,CAAC,KAAK,WAAA,EAAa;AACvB,IAAA,CAAA,IAAK,CAAA;AAAA,EACP;AACF;;;ACnCA,IAAM,IAAA,GAAoB,EAAE,IAAA,EAAM,WAAA,EAAY;AASvC,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA,EAG7B,MAAM,GAAA,CACJ,SAAA,EACA,KAAA,EACAA,QAAoB,IAAA,EACF;AAClB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,aAAa,SAAS,CAAA,CAAA;AAAA,MACvD,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,IAAA,EAAcA,KAAAA,GAAoB,IAAA,EAAwB;AACxE,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAmB;AAAA,MAClD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,SAAA,CAAA;AAAA,MACjC,KAAA,EAAO,EAAE,CAAA,EAAG,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA,EAAG;AAAA,MAC3B,IAAA,EAAAA;AAAA,KACD,CAAA;AACD,IAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,KAAA,CAAM,CAAA,sBAAA,EAAyB,IAAI,CAAA,CAAA,CAAG,CAAA;AAC5D,IAAA,OAAO,KAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,IAAA,CACJ,MAAA,GAAqD,EAAC,EACtDA,QAAoB,IAAA,EACc;AAClC,IAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAmB;AAAA,MACnD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,SAAA,CAAA;AAAA,MACjC,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,EAAS;AAAA,MAC9B,IAAA,EAAAA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA,EAGA,OAAA,CAAQ,MAAA,GAAgC,EAAC,EAAGA,QAAoB,IAAA,EAA8B;AAC5F,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,OAAO,UAAA,CAAoB,CAAC,UAAA,KAAe,IAAA,CAAK,IAAA,CAAK,EAAE,UAAA,EAAY,QAAA,EAAS,EAAGA,KAAI,CAAC,CAAA;AAAA,EACtF;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,KAAA,EACA,SAAqD,EAAC,EACtDA,QAAoB,IAAA,EACc;AAClC,IAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAmB;AAAA,MACnD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,SAAA,CAAA;AAAA,MACjC,KAAA,EAAO,EAAE,CAAA,EAAG,KAAA,EAAO,YAAY,QAAA,EAAS;AAAA,MACxC,IAAA,EAAAA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,YAAA,CACJ,KAAA,EACA,SAAqD,EAAC,EACtDA,QAAoB,IAAA,EACc;AAClC,IAAA,MAAM,UAAU,KAAA,CAAM,IAAA,EAAK,CAAE,OAAA,CAAQ,uBAAuB,MAAM,CAAA;AAClE,IAAA,OAAO,KAAK,MAAA,CAAO,CAAA,OAAA,EAAU,OAAO,CAAA,CAAA,CAAA,EAAK,QAAQA,KAAI,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAA,CACJ,GAAA,EACA,UAAkC,EAAC,EACnCA,QAAoB,IAAA,EACA;AACpB,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAC9B,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,SAAA,EAAW;AAC9C,MAAA,MAAA,CAAO,KAAK,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IACzC;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC1B,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,KACV,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAmB;AAAA,UAC/B,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,gBAAA,CAAA;AAAA,UACjC,KAAA,EAAO,EAAE,QAAA,EAAU,KAAA,CAAM,MAAA,EAAO;AAAA,UAChC,IAAA,EAAAA,KAAAA;AAAA,UACA,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,IAAA,EAAO,MAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAI,SACtC;AAAA;AACH,KACF;AACA,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAM,aAAA,CACJ,KAAA,EACA,UAAkC,EAAC,EACnCA,QAAoB,IAAA,EACA;AACpB,IAAA,MAAM,SAAS,CAAC,GAAG,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA;AACjC,IAAA,MAAM,MAAA,GAAS,UAAA;AACf,IAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO,CAAC,MAAM,CAAC,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AACjD,IAAA,MAAM,OAAA,GAAU,OAAO,MAAA,CAAO,CAAC,MAAM,MAAA,CAAO,IAAA,CAAK,CAAC,CAAC,CAAA;AACnD,IAAA,IAAI,OAAA,CAAQ,SAAS,CAAA,EAAG;AACtB,MAAA,IAAA,CAAK,IAAI,MAAA,CAAO,IAAA;AAAA,QACd,6EAAA;AAAA,QACA,EAAE,OAAA;AAAQ,OACZ;AAAA,IACF;AACA,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAC/B,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,MAAA,EAAQ,KAAK,SAAA,EAAW;AAC/C,MAAA,MAAA,CAAO,KAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IAC1C;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC1B,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,KACV,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAmB;AAAA,UAC/B,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,gBAAA,CAAA;AAAA,UACjC,KAAA,EAAO,EAAE,QAAA,EAAU,KAAA,CAAM,MAAA,EAAO;AAAA,UAChC,IAAA,EAAAA,KAAAA;AAAA,UACA,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,MAAA,EAAS,MAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAI,SACxC;AAAA;AACH,KACF;AACA,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,uBACE,eAAA,EACA,MAAA,GAAgC,EAAC,EACjCA,QAAoB,IAAA,EACI;AACxB,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,GAAA;AACpC,IAAA,MAAM,CAAA,GAAI,uCAAuC,eAAe,CAAA,CAAA;AAChE,IAAA,OAAO,UAAA,CAAoB,CAAC,UAAA,KAAe,IAAA,CAAK,MAAA,CAAO,CAAA,EAAG,EAAE,UAAA,EAAY,QAAA,EAAS,EAAGA,KAAI,CAAC,CAAA;AAAA,EAC3F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,mBAAA,CACJ,eAAA,EACA,SAAgC,EAAC,EACjCA,QAAoB,IAAA,EACA;AACpB,IAAA,MAAM,MAAiB,EAAC;AACxB,IAAA,WAAA,MAAiB,SAAS,IAAA,CAAK,sBAAA,CAAuB,eAAA,EAAiB,MAAA,EAAQA,KAAI,CAAA,EAAG;AACpF,MAAA,GAAA,CAAI,KAAK,KAAK,CAAA;AAAA,IAChB;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;;;AC5MA,IAAMC,KAAAA,GAAoB,EAAE,IAAA,EAAM,WAAA,EAAY;AASvC,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA,EAG7B,MAAM,GAAA,CAAI,UAAA,EAAoBD,KAAAA,GAAoBC,KAAAA,EAAyB;AACzE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,eAAe,UAAU,CAAA,CAAA;AAAA,MAC3D,IAAA,EAAAD;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,IAAA,CACJ,MAAA,GAAqD,EAAC,EACtDA,QAAoBC,KAAAA,EACe;AACnC,IAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAoB;AAAA,MACpD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,WAAA,CAAA;AAAA,MAClC,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,EAAS;AAAA,MAC9B,IAAA,EAAAD;AAAA,KACD,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA,EAGA,OAAA,CAAQ,MAAA,GAAgC,EAAC,EAAGA,QAAoBC,KAAAA,EAA+B;AAC7F,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,OAAO,UAAA,CAAqB,CAAC,UAAA,KAAe,IAAA,CAAK,IAAA,CAAK,EAAE,UAAA,EAAY,QAAA,EAAS,EAAGD,KAAI,CAAC,CAAA;AAAA,EACvF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,IAAA,CAAKA,KAAAA,GAAoBC,KAAAA,EAA2B;AACxD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,eAAA,CAAA;AAAA,MAClC,IAAA,EAAAD;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAA,CACJ,UAAA,EACA,SAAqD,EAAC,EACtDA,QAAoBC,KAAAA,EACC;AACrB,IAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAyD;AAAA,MAC/F,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,eAAe,UAAU,CAAA,YAAA,CAAA;AAAA,MAC3D,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,EAAS;AAAA,MAC9B,IAAA,EAAAD;AAAA,KACD,CAAA;AACD,IAAA,MAAM,WAAA,GAAc,YACjB,GAAA,CAAI,CAAC,MAAO,CAAA,CAAE,GAAA,EAAK,MAAM,WAAA,EAAY,KAAM,aAAa,CAAA,CAAE,GAAA,CAAI,KAAK,MAAU,CAAA,CAC7E,OAAO,CAAC,EAAA,KAAqB,OAAA,CAAQ,EAAE,CAAC,CAAA;AAC3C,IAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AACtC,IAAA,OAAO,IAAA,CAAK,WAAA,CAAY,WAAA,EAAa,IAAIA,KAAI,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,UAAA,CACJ,UAAA,EACA,SAAqD,EAAC,EACtDA,QAAoBC,KAAAA,EACc;AAClC,IAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAyD;AAAA,MAC/F,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,eAAe,UAAU,CAAA,YAAA,CAAA;AAAA,MAC3D,KAAA,EAAO,EAAE,UAAA,EAAY,QAAA,EAAS;AAAA,MAC9B,IAAA,EAAAD;AAAA,KACD,CAAA;AACD,IAAA,MAAM,WAAA,GAAc,YAAY,MAAA,KAAW,QAAA;AAC3C,IAAA,MAAM,UAAA,GAAa,YAChB,GAAA,CAAI,CAAC,MAAO,CAAA,CAAE,GAAA,EAAK,MAAM,WAAA,EAAY,KAAM,YAAY,CAAA,CAAE,GAAA,CAAI,KAAK,MAAU,CAAA,CAC5E,OAAO,CAAC,EAAA,KAAqB,OAAA,CAAQ,EAAE,CAAC,CAAA;AAC3C,IAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,MAAA,OAAO,EAAE,KAAA,EAAO,EAAC,EAAG,UAAA,EAAY,UAAU,WAAA,EAAY;AAAA,IACxD;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAmB;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,gBAAA,CAAA;AAAA,MACjC,KAAA,EAAO,EAAE,QAAA,EAAU,UAAA,CAAW,MAAA,EAAO;AAAA,MACrC,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,IAAA,EAAO,WAAW,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAI,KAC3C,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,WAAA,EAAY;AAAA,EACpD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WAAA,CACJ,GAAA,EACA,UAAkC,EAAC,EACnCA,QAAoBC,KAAAA,EACC;AACrB,IAAA,IAAI,GAAA,CAAI,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAC9B,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,GAAA;AACvC,IAAA,MAAM,SAAqB,EAAC;AAC5B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,KAAK,SAAA,EAAW;AAC9C,MAAA,MAAA,CAAO,KAAK,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAC,CAAA;AAAA,IACzC;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,CAAQ,GAAA;AAAA,MAC1B,MAAA,CAAO,GAAA;AAAA,QAAI,CAAC,KAAA,KACV,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAoB;AAAA,UAChC,MAAA,EAAQ,MAAA;AAAA,UACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,kBAAA,CAAA;AAAA,UAClC,KAAA,EAAO,EAAE,QAAA,EAAU,KAAA,CAAM,MAAA,EAAO;AAAA,UAChC,IAAA,EAAAD,KAAAA;AAAA,UACA,IAAA,EAAM,EAAE,CAAA,EAAG,CAAA,IAAA,EAAO,MAAM,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAAI,SACtC;AAAA;AACH,KACF;AACA,IAAA,OAAO,MAAM,IAAA,EAAK;AAAA,EACpB;AACF;;;AC3HA,SAAS,gBAAgBA,KAAAA,EAA4C;AACnE,EAAA,IAAIA,UAASA,KAAAA,CAAK,IAAA,KAAS,cAAcA,KAAAA,CAAK,IAAA,KAAS,cAAc,OAAOA,KAAAA;AAC5E,EAAA,MAAM,IAAI,sBAAA;AAAA,IACR;AAAA,GACF;AACF;AAEA,SAAS,oBAAoBA,KAAAA,EAA4C;AACvE,EAAA,IAAIA,KAAAA,IAAQA,KAAAA,CAAK,IAAA,KAAS,UAAA,EAAY,OAAOA,KAAAA;AAC7C,EAAA,MAAM,IAAI,uBAAuB,wDAAwD,CAAA;AAC3F;AAGO,IAAM,cAAN,MAAkB;AAAA,EACvB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,MAAA,CAAA;AAAA,EACjC;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,KAAA,EACAA,KAAAA,EACsB;AACtB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM,SAAS;AAAC,KACjB,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,MAAA,EAAgBA,KAAAA,EAAkC;AAC1D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,MAAM,CAAA,CAAA;AAAA,MAC9B,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,MAAM,UAAA,CACJA,KAAAA,EACA,IAAA,EACsB;AACtB,IAAA,MAAM,KAAA,GAAyC,EAAE,QAAA,EAAU,IAAA,CAAK,QAAA,EAAS;AACzE,IAAA,IAAI,IAAA,CAAK,IAAA,KAAS,MAAA,EAAW,KAAA,CAAM,OAAO,IAAA,CAAK,IAAA;AAC/C,IAAA,IAAI,IAAA,CAAK,aAAA,KAAkB,MAAA,EAAW,KAAA,CAAM,gBAAgB,IAAA,CAAK,aAAA;AACjE,IAAA,IAAI,IAAA,CAAK,MAAA,EAAQ,KAAA,CAAM,MAAA,GAAS,MAAA;AAChC,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,QACvC,MAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,QAChB,KAAA;AAAA,QACA,IAAA,EAAM,gBAAgBA,KAAI;AAAA,OAC3B,CAAA;AAAA,IACH,SAAS,CAAA,EAAG;AACV,MAAA,IAAI,CAAA,YAAa,sBAAsB,OAAO,IAAA;AAC9C,MAAA,MAAM,CAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OAAA,CACJ,MAAA,EACA,IAAA,EACAA,KAAAA,EACe;AACf,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,MAAM,CAAA,MAAA,CAAA;AAAA,MAC9B,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,aAAA,CACJ,MAAA,EACA,KAAA,EACAA,KAAAA,EACiC;AACjC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgC;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,MAAM,CAAA,WAAA,CAAA;AAAA,MAC9B,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,WACJ,MAAA,EACA,MAAA,EACA,OACAA,KAAAA,EACA,IAAA,GAA8B,EAAC,EAChB;AACf,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,MAAM,UAAU,MAAM,CAAA,CAAA;AAAA,MAC9C,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM,KAAA;AAAA,MACN,GAAI,IAAA,CAAK,OAAA,GAAU,EAAE,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAO,EAAE,GAAI;AAAC,KACtD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,MAAA,EAAgB,MAAA,EAAgBA,KAAAA,EAAkC;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,MAAM,UAAU,MAAM,CAAA,CAAA;AAAA,MAC9C,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,KAAA,CAAM,MAAA,EAAgBA,KAAAA,EAAkC;AAC5D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,MAAM,CAAA,MAAA,CAAA;AAAA,MAC9B,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,MAAA,EAAgB,IAAA,EAAcA,KAAAA,EAAkC;AAChF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,MAAM,CAAA,QAAA,CAAA;AAAA,MAC9B,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM,EAAE,IAAA;AAAK,KACd,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,MAAA,EAAgB,IAAA,EAAcA,KAAAA,EAAkC;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,MAAM,YAAY,IAAI,CAAA,CAAA;AAAA,MAC9C,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CACJ,MAAA,EACA,OAAA,EACAA,KAAAA,EACe;AACf,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,MAAM,CAAA,iBAAA,CAAA;AAAA,MAC9B,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CACJ,MAAA,EACA,OAAA,EACAA,KAAAA,EACe;AACf,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,MAAM,CAAA,gBAAA,CAAA;AAAA,MAC9B,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,KAAA,CACJ,cAAA,EACA,gBAAA,EACAA,KAAAA,EACe;AACf,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,cAAc,CAAA,MAAA,CAAA;AAAA,MACtC,IAAA,EAAM,oBAAoBA,KAAI,CAAA;AAAA,MAC9B,IAAA,EAAM,EAAE,KAAA,EAAO,gBAAA;AAAiB,KACjC,CAAA;AAAA,EACH;AACF;;;AC7NA,SAAS,QAAQ,QAAA,EAA6C;AAC5D,EAAA,OAAO,UAAU,KAAA,KAAU,IAAA;AAC7B;AAEA,SAAS,WAAA,CAAYA,OAA+B,KAAA,EAA6B;AAC/E,EAAA,IAAIA,UAASA,KAAAA,CAAK,IAAA,KAAS,cAAcA,KAAAA,CAAK,IAAA,KAAS,QAAQ,OAAOA,KAAAA;AACtE,EAAA,IAAI,KAAA,IAASA,KAAAA,IAAQA,KAAAA,CAAK,IAAA,KAAS,aAAa,OAAOA,KAAAA;AACvD,EAAA,MAAM,IAAI,gBAAA;AAAA,IACR;AAAA,GACF;AACF;AAGO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,OAAA,CAAQ,MAAuB,KAAA,EAAoD;AACzF,IAAA,IAAI,KAAA,IAAS,CAAC,IAAA,CAAK,SAAA,EAAW,OAAO,MAAA;AACrC,IAAA,OAAO,EAAE,YAAA,EAAc,IAAA,CAAK,SAAA,EAAU;AAAA,EACxC;AAAA,EAEQ,MAAM,IAAA,EAA2D;AACvE,IAAA,OAAO,KAAK,QAAA,GAAW,EAAE,QAAA,EAAU,IAAA,CAAK,UAAS,GAAI,MAAA;AAAA,EACvD;AAAA;AAAA,EAGA,MAAM,UAAA,CACJ,KAAA,EACAA,KAAAA,EACA,IAAA,GAAwB,EAAC,EACA;AACzB,IAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,QAAQ,CAAA;AACpC,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,gBAAA,CAAA;AAAA,MAClC,IAAA,EAAM,WAAA,CAAYA,KAAAA,EAAM,KAAK,CAAA;AAAA,MAC7B,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,MACzB,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY,EAAC;AAAA,MAC7B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,mBAAA,CACJ,KAAA,EACAA,KAAAA,EACA,IAAA,GAAwB,EAAC,EACA;AACzB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,OAAA,CAAQ,IAAA,EAAM,KAAK,CAAA;AACxC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,gBAAA,CAAA;AAAA,MAClC,IAAA,EAAM,WAAA,CAAYA,KAAAA,EAAM,KAAK,CAAA;AAAA,MAC7B,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU,EAAC;AAAA,MACzB,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY,EAAC;AAAA,MAC7B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;AC7DO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA,EAG7B,MAAM,iBAAiBA,KAAAA,EAA4C;AACjE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,iBAAA,EAAoB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,sBAAA,CAAA;AAAA,MACzC,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CACJ,KAAA,EACAA,KAAAA,EACiC;AACjC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgC;AAAA,MACnD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,iBAAA,EAAoB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,2BAAA,CAAA;AAAA,MACzC,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;ACZA,SAAS,eAAe,GAAA,EAAgC;AACtD,EAAA,MAAM,MAAA,GAAU,GAAA,CAAuD,MAAA,IAAU,GAAA,CAAI,OAAA;AACrF,EAAA,MAAM,IAAA,GAAO,GAAA;AACb,EAAA,IAAI,CAAC,QAAQ,OAAO,IAAA;AAGpB,EAAA,MAAM,OAAA,GAA6B;AAAA,IACjC,GAAI,OAAO,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,MAAA,CAAO,QAAA,EAAS,GAAI,EAAC;AAAA,IACrE,GAAI,OAAO,EAAA,KAAO,MAAA,GAAY,EAAE,EAAA,EAAI,MAAA,CAAO,EAAA,EAAG,GAAI;AAAC,GACrD;AACA,EAAA,OAAO,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAQ;AACpC;AAcA,IAAMC,KAAAA,GAAoB,EAAE,IAAA,EAAM,WAAA,EAAY;AAC9C,IAAM,OAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAE/C,SAAS,mBAAmBD,KAAAA,EAA4C;AACtE,EAAA,MAAM,IAAIA,KAAAA,IAAQC,KAAAA;AAClB,EAAA,IAAI,CAAA,CAAE,SAAS,WAAA,IAAe,CAAA,CAAE,SAAS,UAAA,IAAc,CAAA,CAAE,IAAA,KAAS,KAAA,EAAO,OAAO,CAAA;AAChF,EAAA,MAAM,IAAI,gBAAA;AAAA,IACR;AAAA,GACF;AACF;AAOO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7B,MAAM,cAAA,CACJ,KAAA,EACAD,KAAAA,EACuB;AACvB,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAyB;AAAA,MACxD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,wBAAA,CAAA;AAAA,MAC/B,IAAA,EAAM,mBAAmBA,KAAI,CAAA;AAAA,MAC7B,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,IAAI,cAAc,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,KAAA,CAAM,KAAA,EAAwBA,KAAAA,GAAoB,OAAA,EAAgC;AACtF,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAyB;AAAA,MACxD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,aAAA,CAAA;AAAA,MAC/B,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO,IAAA,CAAK,IAAI,cAAc,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAeA,MAAM,qBAAA,CACJ,KAAA,EACA,IAAA,GAAqC,IACrCA,KAAAA,EACuB;AACvB,IAAA,MAAM,SAAA,GAAY,KAAK,SAAA,IAAa,EAAA;AACpC,IAAA,MAAM,WAAA,GAAc,KAAK,WAAA,IAAe,CAAA;AACxC,IAAA,IAAI,SAAA,GAAY,CAAA,EAAG,MAAM,IAAI,MAAM,wBAAwB,CAAA;AAC3D,IAAA,IAAI,WAAA,GAAc,CAAA,EAAG,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAE/D,IAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,EAAC;AAC9B,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AAEhC,IAAA,MAAM,SAAqC,EAAC;AAC5C,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAA,CAAM,MAAA,EAAQ,KAAK,SAAA,EAAW;AAChD,MAAA,MAAA,CAAO,IAAA,CAAK,EAAE,GAAG,KAAA,EAAO,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAA,GAAI,SAAS,CAAA,EAAG,CAAA;AAAA,IAChE;AAEA,IAAA,MAAM,OAAA,GAA0B,IAAI,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA;AACvD,IAAA,IAAI,MAAA,GAAS,CAAA;AAEb,IAAA,MAAM,SAAS,YAA2B;AACxC,MAAA,WAAS;AACP,QAAA,MAAM,GAAA,GAAM,MAAA,EAAA;AACZ,QAAA,MAAM,KAAA,GAAQ,OAAO,GAAG,CAAA;AACxB,QAAA,IAAI,UAAU,MAAA,EAAW;AACzB,QAAA,IAAI;AACF,UAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,MAAM,IAAA,CAAK,cAAA,CAAe,OAAOA,KAAI,CAAA;AAAA,QACtD,SAAS,GAAA,EAAK;AACZ,UAAA,IAAI,IAAA,CAAK,sBAAsB,MAAM,GAAA;AACrC,UAAA,OAAA,CAAQ,GAAG,IAAI,EAAC;AAChB,UAAA,IAAA,CAAK,YAAA,GAAe,KAAK,GAAG,CAAA;AAAA,QAC9B;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,IAAA,CAAK,GAAA,CAAI,WAAA,EAAa,OAAO,MAAM,CAAA;AACvD,IAAA,MAAM,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,WAAA,EAAY,EAAG,MAAM,MAAA,EAAQ,CAAC,CAAA;AAErE,IAAA,OAAO,QAAQ,IAAA,EAAK;AAAA,EACtB;AACF;;;AClHA,IAAME,QAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAE/C,SAAS,YAAA,CAAa,GAAe,SAAA,EAA4B;AAC/D,EAAA,OAAO,CAAA,CAAE,IAAA,KAAS,SAAA,IAAa,CAAA,CAAE,EAAA,KAAO,SAAA;AAC1C;AAMO,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,OAAA,EAAU,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,OAAA,CAAA;AAAA,EAClC;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,KAAA,EAGAF,KAAAA,GAAoBE,QAAAA,EACK;AACzB,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,MAAA,MAAM,EAAA,GAAK,IAAI,QAAA,EAAS;AACxB,MAAA,EAAA,CAAG,GAAA,CAAI,MAAA,EAAQ,KAAA,CAAM,IAAI,CAAA;AACzB,MAAA,EAAA,CAAG,IAAI,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AACzC,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,QAC3C,MAAA,EAAQ,MAAA;AAAA,QACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,QAChB,IAAA,EAAAF,KAAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAA,KAAAA;AAAA,MACA,MAAM,KAAA,CAAM;AAAA,KACb,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,IAAA,CACJ,KAAA,GAAyB,EAAC,EAC1BA,QAAoBE,QAAAA,EACY;AAChC,IAAA,MAAM,UAAA,GAAa,MAAM,UAAA,IAAc,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,EAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAiB;AAAA,MACjD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,YAAY,QAAA;AAAS,KACzC,CAAA;AACD,IAAA,OAAO;AAAA,MACL,KAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA,EAAa,MAAM,MAAA,KAAW;AAAA,KAChC;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,OAAA,EAAiBA,KAAAA,GAAoBE,QAAAA,EAAyB;AACtE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBA,MAAM,MAAA,CACJ,OAAA,EACA,KAAA,EAGAA,QAAoBE,QAAAA,EACJ;AAChB,IAAA,IAAI,KAAA,CAAM,SAAS,MAAA,EAAQ;AACzB,MAAA,MAAM,EAAA,GAAK,IAAI,QAAA,EAAS;AACxB,MAAA,EAAA,CAAG,GAAA,CAAI,MAAA,EAAQ,KAAA,CAAM,IAAI,CAAA;AACzB,MAAA,EAAA,CAAG,IAAI,MAAA,EAAQ,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,IAAI,CAAC,CAAA;AACzC,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,QAClC,MAAA,EAAQ,KAAA;AAAA,QACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,QAC/B,IAAA,EAAAF,KAAAA;AAAA,QACA,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAAA,KAAAA;AAAA,MACA,MAAM,KAAA,CAAM;AAAA,KACb,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,OAAA,EAAiBA,KAAAA,GAAoBE,QAAAA,EAAwB;AACxE,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAqBA,MAAM,QAAA,CACJ,OAAA,EACAA,KAAAA,GAAoBE,QAAAA,EACK;AACzB,IAAA,MAAM,OAAO,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,SAAA,CAAA;AACtC,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,UAAA;AAAA,MAC9B,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,MAAAF,KAAAA,EAAK;AAAA,MAC5B,EAAE,UAAU,QAAA;AAAS,KACvB;AAGA,IAAA,IAAI,GAAA,CAAI,MAAA,IAAU,GAAA,IAAO,GAAA,CAAI,SAAS,GAAA,EAAK;AACzC,MAAA,MAAM,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,UAAU,CAAA;AACtC,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,IAAI,YAAA;AAAA,UACR,CAAA,gBAAA,EAAmB,IAAI,MAAM,CAAA,mCAAA,CAAA;AAAA,UAC7B,GAAA,CAAI;AAAA,SACN;AAAA,MACF;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAI;AAAA,IACjC;AAGA,IAAA,IAAI,IAAI,EAAA,EAAI;AACV,MAAA,MAAM,IAAA,GAAO,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,IAAK,MAAA;AACxC,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,MAAA;AACvD,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,WAAA,EAAa,UAAA,CAAW,YAAY,CAAA,EAAG;AAIzC,QAAA,MAAMG,KAAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,QAAA,MAAM,GAAA,GAAM,KAAKA,KAAI,CAAA;AACrB,QAAA,MAAM,GAAA,GAAM,IAAI,UAAA,CAAW,GAAA,CAAI,MAAM,CAAA;AACrC,QAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,GAAA,CAAI,MAAA,EAAQ,CAAA,EAAA,EAAK,GAAA,CAAI,CAAC,CAAA,GAAI,GAAA,CAAI,UAAA,CAAW,CAAC,CAAA;AAC9D,QAAA,IAAA,GAAO,GAAA,CAAI,MAAA;AAAA,MACb,CAAA,MAAO;AACL,QAAA,IAAA,GAAO,MAAM,IAAI,WAAA,EAAY;AAAA,MAC/B;AACA,MAAA,OAAO;AAAA,QACL,IAAA,EAAM,OAAA;AAAA,QACN,IAAA;AAAA,QACA,GAAI,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,KAAS,EAAC;AAAA,QACrC,GAAI,WAAA,KAAgB,MAAA,GAAY,EAAE,WAAA,KAAgB;AAAC,OACrD;AAAA,IACF;AAGA,IAAA,MAAM,IAAA,GAAO,MAAM,GAAA,CAAI,IAAA,EAAK;AAC5B,IAAA,IAAI,MAAA,GAAkB,MAAA;AACtB,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,IAAI;AACF,QAAA,MAAA,GAAS,IAAA,CAAK,MAAM,IAAI,CAAA;AAAA,MAC1B,CAAA,CAAA,MAAQ;AACN,QAAA,MAAA,GAAS,IAAA;AAAA,MACX;AAAA,IACF;AACA,IAAA,MAAM,iBAAA,CAAkB,IAAI,MAAA,EAAQ,CAAA,IAAA,EAAO,IAAI,CAAA,QAAA,EAAM,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA;AAAA,EAC3E;AAAA;AAAA,EAGA,MAAM,UAAA,CACJ,KAAA,EAOAH,KAAAA,GAAoBE,QAAAA,EACK;AACzB,IAAA,MAAM,IAAA,GAA6B;AAAA,MACjC,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,MAAM,MAAA,IAAU,QAAA;AAAA,MACxB,GAAI,KAAA,CAAM,SAAA,GACN,EAAE,QAAQ,CAAC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,KAAA,CAAM,SAAA,EAAW,CAAA,KACnD,EAAC;AAAA,MACL,GAAI,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA,GACxB;AAAA,QACE,OAAA,EAAS;AAAA,UACP,GAAI,MAAM,QAAA,GAAW,EAAE,UAAU,KAAA,CAAM,QAAA,KAAa,EAAC;AAAA,UACrD,GAAI,MAAM,QAAA,GAAW,EAAE,UAAU,KAAA,CAAM,QAAA,KAAa;AAAC;AACvD,UAEF;AAAC,KACP;AACA,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAK,EAAGF,KAAI,CAAA;AAAA,EACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,WAAA,CACJ,OAAA,EACA,KAAA,EAOAA,QAAoBE,QAAAA,EACJ;AAChB,IAAA,MAAM,IAAA,GAA6B;AAAA,MACjC,IAAA,EAAM,MAAA;AAAA,MACN,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,GAAI,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,QAAA,GACxB;AAAA,QACE,OAAA,EAAS;AAAA,UACP,GAAI,MAAM,QAAA,GAAW,EAAE,UAAU,KAAA,CAAM,QAAA,KAAa,EAAC;AAAA,UACrD,GAAI,MAAM,QAAA,GAAW,EAAE,UAAU,KAAA,CAAM,QAAA,KAAa;AAAC;AACvD,UAEF,EAAC;AAAA,MACL,GAAI,KAAA,CAAM,OAAA,KAAY,MAAA,GAClB,EAAE,QAAA,EAAU,EAAE,OAAA,EAAS,KAAA,CAAM,OAAA,EAAQ,EAAE,GACvC;AAAC,KACP;AACA,IAAA,OAAO,IAAA,CAAK,MAAA,CAAO,OAAA,EAAS,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,KAAA,CAAM,IAAA,EAAM,IAAA,EAAK,EAAGF,KAAI,CAAA;AAAA,EAC5E;AAAA;AAAA,EAGA,MAAM,IAAA,CACJ,KAAA,EACAA,KAAAA,GAAoBE,QAAAA,EACK;AACzB,IAAA,MAAM,IAAA,GAA6B;AAAA,MACjC,IAAA,EAAM,MAAA;AAAA,MACN,MAAA,EAAQ,MAAM,MAAA,IAAU,QAAA;AAAA,MACxB,KAAK,KAAA,CAAM,GAAA;AAAA,MACX,GAAI,KAAA,CAAM,SAAA,GACN,EAAE,QAAQ,CAAC,EAAE,IAAA,EAAM,SAAA,EAAW,IAAI,KAAA,CAAM,SAAA,EAAW,CAAA,KACnD;AAAC,KACP;AACA,IAAA,OAAO,KAAK,MAAA,CAAO,EAAE,MAAM,MAAA,EAAQ,IAAA,IAAQF,KAAI,CAAA;AAAA,EACjD;AAAA;AAAA,EAGA,MAAM,eAAA,CACJ,OAAA,EACA,SAAA,EACAA,QAAoBE,QAAAA,EACJ;AAChB,IAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,GAAA,CAAI,SAASF,KAAI,CAAA;AACtC,IAAA,MAAM,MAAA,GAAuB,CAAA,CAAE,MAAA,IAAU,EAAC;AAC1C,IAAA,IAAI,MAAA,CAAO,KAAK,CAAC,CAAA,KAAM,aAAa,CAAA,EAAG,SAAS,CAAC,CAAA,EAAG,OAAO,CAAA;AAC3D,IAAA,MAAM,IAAA,GAAqB,CAAC,GAAG,MAAA,EAAQ,EAAE,IAAA,EAAM,SAAA,EAAW,EAAA,EAAI,SAAA,EAAW,CAAA;AAGzE,IAAA,MAAM,QAAQ,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,QAAQ,IAAA,EAAK;AAC3C,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,EAAS,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAM,EAAGA,KAAI,CAAA;AAAA,EACjE;AAAA;AAAA,EAGA,MAAM,iBAAA,CACJ,OAAA,EACA,SAAA,EACAA,QAAoBE,QAAAA,EACJ;AAChB,IAAA,MAAM,CAAA,GAAI,MAAM,IAAA,CAAK,GAAA,CAAI,SAASF,KAAI,CAAA;AACtC,IAAA,MAAM,MAAA,GAAuB,CAAA,CAAE,MAAA,IAAU,EAAC;AAC1C,IAAA,MAAM,IAAA,GAAO,OAAO,MAAA,CAAO,CAAC,MAAM,CAAC,YAAA,CAAa,CAAA,EAAG,SAAS,CAAC,CAAA;AAC7D,IAAA,IAAI,IAAA,CAAK,MAAA,KAAW,MAAA,CAAO,MAAA,EAAQ,OAAO,CAAA;AAC1C,IAAA,MAAM,QAAQ,EAAE,IAAA,EAAM,CAAA,CAAE,IAAA,EAAM,QAAQ,IAAA,EAAK;AAC3C,IAAA,OAAO,IAAA,CAAK,OAAO,OAAA,EAAS,EAAE,MAAM,MAAA,EAAQ,IAAA,EAAM,KAAA,EAAM,EAAGA,KAAI,CAAA;AAAA,EACjE;AAAA;AAAA,EAGA,MAAM,cAAA,CACJ,SAAA,EACAA,KAAAA,GAAoBE,QAAAA,EACY;AAChC,IAAA,OAAO,KAAK,IAAA,CAAK,EAAE,WAAA,EAAa,SAAA,IAAaF,KAAI,CAAA;AAAA,EACnD;AACF;;;ACtWA,SAAS,YAAA,CACP,CAAA,EACA,GAAA,EACA,KAAA,EACM;AACN,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,EAAI;AACvC,IAAA,CAAA,CAAE,GAAG,CAAA,GAAI,KAAA;AAAA,EACX;AACF;AAQO,IAAM,iBAAN,MAAqB;AAAA,EAC1B,WAAA,CACmB,KACA,IAAA,EACjB;AAFiB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AACA,IAAA,IAAA,CAAA,IAAA,GAAA,IAAA;AAAA,EAChB;AAAA,EAFgB,GAAA;AAAA,EACA,IAAA;AAAA,EAGX,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,kBAAA,EAAqB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,SAAA,CAAA;AAAA,EAC7C;AAAA;AAAA,EAGA,MAAM,IAAA,CACJ,KAAA,GAAgE,IAChEA,KAAAA,EACoB;AACpB,IAAA,MAAM,IAAiD,EAAC;AACxD,IAAA,YAAA,CAAa,CAAA,EAAG,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AAC5B,IAAA,YAAA,CAAa,CAAA,EAAG,YAAA,EAAc,KAAA,CAAM,UAAU,CAAA;AAC9C,IAAA,YAAA,CAAa,CAAA,EAAG,UAAA,EAAY,KAAA,CAAM,QAAQ,CAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,GAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,SAAS,EAAE,KAAA,EAAO,CAAA,EAAE,GAAI;AAAC,KAC7C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,SAAA,EAAmBA,KAAAA,EAAsC;AACjE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,SAAS,CAAA,CAAA;AAAA,MACjC,IAAA,EAAM,gBAAgBA,KAAI;AAAA,KAC3B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CACJ,KAAA,GAOI,IACJA,KAAAA,EACwB;AACxB,IAAA,MAAM,IAAiD,EAAC;AACxD,IAAA,YAAA,CAAa,CAAA,EAAG,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AAC5B,IAAA,YAAA,CAAa,CAAA,EAAG,UAAA,EAAY,KAAA,CAAM,QAAQ,CAAA;AAC1C,IAAA,YAAA,CAAa,CAAA,EAAG,eAAA,EAAiB,KAAA,CAAM,aAAa,CAAA;AACpD,IAAA,YAAA,CAAa,CAAA,EAAG,YAAA,EAAc,KAAA,CAAM,UAAU,CAAA;AAC9C,IAAA,YAAA,CAAa,CAAA,EAAG,UAAA,EAAY,KAAA,CAAM,QAAQ,CAAA;AAC1C,IAAA,IAAI,MAAM,UAAA,KAAe,MAAA,IAAa,UAAA,GAAa,MAAA,CAAO,MAAM,UAAU,CAAA;AAC1E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,MAAA,CAAA;AAAA,MACpB,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,GAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,SAAS,EAAE,KAAA,EAAO,CAAA,EAAE,GAAI;AAAC,KAC7C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,gBAAA,CACJ,SAAA,EACA,KAAA,GAKI,IACJA,KAAAA,EACwB;AACxB,IAAA,MAAM,IAAiD,EAAC;AACxD,IAAA,YAAA,CAAa,CAAA,EAAG,GAAA,EAAK,KAAA,CAAM,CAAC,CAAA;AAC5B,IAAA,YAAA,CAAa,CAAA,EAAG,eAAA,EAAiB,KAAA,CAAM,aAAa,CAAA;AACpD,IAAA,YAAA,CAAa,CAAA,EAAG,YAAA,EAAc,KAAA,CAAM,UAAU,CAAA;AAC9C,IAAA,YAAA,CAAa,CAAA,EAAG,UAAA,EAAY,KAAA,CAAM,QAAQ,CAAA;AAC1C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,SAAS,CAAA,MAAA,CAAA;AAAA,MACjC,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,GAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,SAAS,EAAE,KAAA,EAAO,CAAA,EAAE,GAAI;AAAC,KAC7C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CACJ,KAAA,GAAuD,IACvDA,KAAAA,EAC8B;AAC9B,IAAA,MAAM,IAAiD,EAAC;AACxD,IAAA,YAAA,CAAa,CAAA,EAAG,UAAA,EAAY,KAAA,CAAM,QAAQ,CAAA;AAC1C,IAAA,YAAA,CAAa,CAAA,EAAG,eAAA,EAAiB,KAAA,CAAM,aAAa,CAAA;AACpD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA6B;AAAA,MAChD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,qBAAA,CAAA;AAAA,MACpB,IAAA,EAAM,gBAAgBA,KAAI,CAAA;AAAA,MAC1B,GAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,SAAS,EAAE,KAAA,EAAO,CAAA,EAAE,GAAI;AAAC,KAC7C,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,WAAA,CACZ,IAAA,EACA,KAAA,EACAA,KAAAA,EACmB;AACnB,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,SAAA,CAAU,OAAOA,KAAI,CAAA;AAC7C,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,KAAK,IAAA,EAAM;AACpB,MAAA,MAAM,EAAA,GAAK,EAAE,IAAA,EAAM,EAAA;AACnB,MAAA,IAAI,CAAA,CAAE,SAAS,IAAA,IAAQ,OAAO,OAAO,QAAA,EAAU,GAAA,CAAI,KAAK,EAAE,CAAA;AAAA,IAC5D;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,gBAAA,CACJ,KAAA,EACAA,KAAAA,EACmB;AACnB,IAAA,OAAO,KAAK,WAAA,CAAY,SAAA,EAAW,KAAA,IAAS,IAAIA,KAAI,CAAA;AAAA,EACtD;AAAA;AAAA,EAGA,MAAM,iBAAA,CACJ,KAAA,EACAA,KAAAA,EACmB;AACnB,IAAA,OAAO,KAAK,WAAA,CAAY,UAAA,EAAY,KAAA,IAAS,IAAIA,KAAI,CAAA;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAA,CACJ,KAAA,EACAA,KAAAA,EACqE;AACrE,IAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,SAAA;AAAA,MAC7B,EAAE,GAAI,KAAA,IAAS,EAAC,EAAI,YAAY,QAAA,EAAS;AAAA,MACzCA;AAAA,KACF;AACA,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,SAAA,IAAa,OAAO,CAAA,CAAE,IAAA,EAAM,EAAA,KAAO,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,IAChF;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,SAAS,WAAA,CAAY,GAAA,EAAK,QAAWA,KAAI,CAAA;AACvE,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,WAAA,CAAY,WAAW,QAAA,EAAS;AAAA,EACrF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,gBAAA,CACJ,KAAA,EACAA,KAAAA,EACsE;AACtE,IAAA,MAAM,UAAA,GAAa,OAAO,UAAA,IAAc,CAAA;AACxC,IAAA,MAAM,QAAA,GAAW,OAAO,QAAA,IAAY,EAAA;AACpC,IAAA,MAAM,WAAA,GAAc,MAAM,IAAA,CAAK,SAAA;AAAA,MAC7B,EAAE,GAAI,KAAA,IAAS,EAAC,EAAI,YAAY,QAAA,EAAS;AAAA,MACzCA;AAAA,KACF;AACA,IAAA,MAAM,MAAgB,EAAC;AACvB,IAAA,KAAA,MAAW,KAAK,WAAA,EAAa;AAC3B,MAAA,IAAI,CAAA,CAAE,IAAA,KAAS,UAAA,IAAc,OAAO,CAAA,CAAE,IAAA,EAAM,EAAA,KAAO,QAAA,EAAU,GAAA,CAAI,IAAA,CAAK,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,IACjF;AACA,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,WAAW,WAAA,CAAY,GAAA,EAAK,QAAWA,KAAI,CAAA;AACzE,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,WAAA,CAAY,WAAW,QAAA,EAAS;AAAA,EACrF;AACF;;;ACvNA,IAAMC,KAAAA,GAAoB,KAAK,SAAA,EAAU;AAoClC,IAAM,cAAN,MAAkB;AAAA,EACvB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA,EAG7B,MAAM,IAAA,CAAK,OAAA,GAAuBA,KAAAA,EAAuB;AACvD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,MAAA,CAAA;AAAA,MAC9B,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,IAAA,EAAc,OAAA,GAAuBA,KAAAA,EAAqB;AAClE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,MAAA,EAAS,IAAA,CAAK,GAAA,CAAI,MAAM,UAAU,IAAI,CAAA,CAAA;AAAA,MAC5C,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,OAAA,CAAQ,OAAA,GAAuBA,KAAAA,EAAqB;AACxD,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,CAAK,OAAO,CAAA;AACrC,IAAA,MAAM,MAAM,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,OAAO,CAAA;AACvC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,MAAM,IAAI,KAAA;AAAA,QACR,CAAA,iDAAA,EAAoD,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,OACrE;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AACF;;;ACvEA,IAAMA,KAAAA,GAAoB,KAAK,SAAA,EAAU;AA8ClC,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAO7B,MAAM,GAAA,CAAI,OAAA,GAAuBA,KAAAA,EAAsC;AACrE,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,QACjD,MAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAM,CAAA,iBAAA,EAAoB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,WAAA,CAAA;AAAA,QACzC,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,UAAA,CAAW,GAAG,CAAA,EAAG,OAAO,IAAA;AAC5B,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,KAAA,CAAM,KAAA,EAA4B,OAAA,GAAuBA,KAAAA,EAAwB;AACrF,IAAA,IAAIG,WAAU,KAAA,CAAM,OAAA;AACpB,IAAA,IAAIA,aAAY,MAAA,EAAW;AACzB,MAAA,MAAM,OAAA,GAAU,MAAM,IAAA,CAAK,GAAA,CAAI,OAAO,CAAA;AACtC,MAAA,IAAI,OAAA,KAAY,MAAM,OAAO,KAAA;AAC7B,MAAAA,QAAAA,GAAU,QAAQ,QAAA,EAAU,OAAA;AAC5B,MAAA,IAAIA,aAAY,MAAA,EAAW;AACzB,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SACF;AAAA,MACF;AAAA,IACF;AACA,IAAA,MAAM,EAAE,OAAA,EAAS,EAAA,EAAI,GAAG,QAAO,GAAI,KAAA;AAEnC,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,CAAA,iBAAA,EAAoB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,WAAA,CAAA;AAAA,MACzC,IAAA,EAAM;AAAA,QACJ,GAAG,MAAA;AAAA,QACH,QAAA,EAAU,EAAE,OAAA,EAAAA,QAAAA;AAAQ,OACtB;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AACF;AAEA,SAAS,WAAW,GAAA,EAAuB;AACzC,EAAA,IAAI,GAAA,IAAO,OAAO,GAAA,KAAQ,QAAA,EAAU;AAClC,IAAA,MAAM,SAAU,GAAA,CAA6B,MAAA;AAC7C,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,KAAW,KAAK,OAAO,IAAA;AAAA,EAC3D;AACA,EAAA,OAAO,KAAA;AACT;;;AC7FO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,qBAAA,EAAwB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,eAAA,CAAA;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,SAASJ,KAAAA,EAA2C;AACxD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,aAAA,EAAuBA,KAAAA,EAAyC;AACxE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,aAAa,CAAA,CAAA;AAAA,MACrC,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,KAAA,EAA0BA,KAAAA,EAA4C;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAA,CACJ,aAAA,EACA,KAAA,EACAA,KAAAA,EACsB;AACtB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,aAAa,CAAA,CAAA;AAAA,MACrC,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,aAAA,EAAuBA,KAAAA,EAAkC;AACpE,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,aAAa,CAAA,CAAA;AAAA,MACrC,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AC7DO,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,qBAAA,EAAwB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,oBAAA,CAAA;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,aAAA,EAAuBA,KAAAA,EAAiD;AAC3F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA6B;AAAA,MAChD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,KAAA,EAAO,EAAE,aAAA,EAAc;AAAA,MACvB,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,KAAA,EAAgCA,KAAAA,EAA4C;AACvF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAA,CACJ,mBAAA,EACA,KAAA,EACAA,KAAAA,EAC4B;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,mBAAmB,CAAA,CAAA;AAAA,MAC3C,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAA,CAAS,mBAAA,EAA6BA,KAAAA,EAAkC;AAC5E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,mBAAmB,CAAA,CAAA;AAAA,MAC3C,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACpDO,IAAM,mBAAN,MAAuB;AAAA,EAC5B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,qBAAA,EAAwB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,UAAA,CAAA;AAAA,EAChD;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,aAAA,EAAuBA,KAAAA,EAAwC;AAClF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,KAAA,EAAO,EAAE,aAAA,EAAc;AAAA,MACvB,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,UAAA,EAAoBA,KAAAA,EAAsC;AAClE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,UAAU,CAAA,CAAA;AAAA,MAClC,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,KAAA,EAAuBA,KAAAA,EAA4C;AAC9E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,MAAA,CACJ,UAAA,EACA,KAAA,EACAA,KAAAA,EACmB;AACnB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,UAAU,CAAA,CAAA;AAAA,MAClC,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,UAAA,EAAoBA,KAAAA,EAAkC;AACjE,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,UAAU,CAAA,CAAA;AAAA,MAClC,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AC7DO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,OAAA,CAAA;AAAA,EAChC;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,aAAA,EAAuBA,KAAAA,EAAmD;AAC7F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA+B;AAAA,MAClD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,KAAA,EAAO,EAAE,mBAAA,EAAqB,aAAA,EAAc;AAAA,MAC5C,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CACJ,OAAA,EACA,MAAA,EACAA,KAAAA,EACyB;AACzB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,MAAA,CAAA;AAAA,MAC/B,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,OAAA,EAAiB,MAAA,EAAgBA,KAAAA,EAAkC;AACpF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,OAAO,UAAU,MAAM,CAAA,CAAA;AAAA,MAC/C,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AChBA,SAASK,aAAAA,CACP,CAAA,EACA,GAAA,EACA,KAAA,EACM;AACN,EAAA,IAAI,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,EAAA,EAAI;AACvC,IAAA,CAAA,CAAE,GAAG,CAAA,GAAI,KAAA;AAAA,EACX;AACF;AASO,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,OAAA,CAAA;AAAA,EACrC;AAAA,EAEQ,WAAW,SAAA,EAAmE;AACpF,IAAA,OAAO,SAAA,GAAY,EAAE,YAAA,EAAc,SAAA,EAAU,GAAI,MAAA;AAAA,EACnD;AAAA;AAAA,EAGA,MAAM,QAAA,CACJL,KAAAA,EACA,IAAA,GAA4B,EAAC,EACG;AAChC,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,IAAc,CAAA;AACtC,IAAA,MAAM,QAAA,GAAW,KAAK,QAAA,IAAY,EAAA;AAClC,IAAA,MAAM,KAAA,GAAqD;AAAA,MACzD,UAAA;AAAA,MACA;AAAA,KACF;AACA,IAAAK,aAAAA,CAAa,KAAA,EAAO,QAAA,EAAU,IAAA,CAAK,MAAM,CAAA;AACzC,IAAAA,aAAAA,CAAa,KAAA,EAAO,eAAA,EAAiB,IAAA,CAAK,aAAa,CAAA;AACvD,IAAAA,aAAAA,CAAa,KAAA,EAAO,UAAA,EAAY,IAAA,CAAK,QAAQ,CAAA;AAC7C,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAK9C,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAiB;AAAA,MACjD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,KAAA;AAAA,MACA,IAAA,EAAAL,KAAAA;AAAA,MACA,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC9B,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA,EAGA,MAAM,GAAA,CACJ,OAAA,EACAA,KAAAA,EACA,IAAA,GAAwB,EAAC,EACT;AAChB,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAC9C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAAA,KAAAA;AAAA,MACA,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC9B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CACJ,OAAA,EACA,QACAA,KAAAA,EACA,IAAA,GAA+B,EAAC,EACjB;AACf,IAAA,MAAM,IAAA,GAAkD,EAAE,MAAA,EAAO;AACjE,IAAA,IAAI,IAAA,CAAK,OAAA,KAAY,MAAA,EAAW,IAAA,CAAK,UAAU,IAAA,CAAK,OAAA;AACpD,IAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,IAAA,CAAK,SAAS,CAAA;AAC9C,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,YAAA,CAAA;AAAA,MAC/B,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAI,OAAA,GAAU,EAAE,OAAA,KAAY;AAAC,KAC9B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,OAAA,EACAA,KAAAA,EACA,IAAA,GAA+B,EAAC,EACjB;AACf,IAAA,MAAM,IAAA,CAAK,UAAA,CAAW,OAAA,EAAS,UAAA,EAAYA,OAAM,IAAI,CAAA;AAAA,EACvD;AACF;AAWO,IAAM,qBAAN,MAAyB;AAAA,EAC9B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,YAAA,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,OAAA,EAAiBA,KAAAA,EAAmC;AAC5D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAAA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,OAAA,EACA,OACAA,KAAAA,EACA,IAAA,GAAgC,EAAC,EACjB;AAChB,IAAA,MAAM,QAAgC,EAAC;AACvC,IAAA,IAAI,IAAA,CAAK,WAAA,KAAgB,KAAA,EAAO,KAAA,CAAM,WAAA,GAAc,OAAA;AACpD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,OAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,IAAI,OAAO,CAAA,CAAA;AAAA,MAC/B,IAAA,EAAAA,KAAAA;AAAA,MACA,GAAI,MAAA,CAAO,IAAA,CAAK,KAAK,CAAA,CAAE,SAAS,CAAA,GAAI,EAAE,KAAA,EAAM,GAAI,EAAC;AAAA,MACjD,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;AC9JA,IAAMC,KAAAA,GAAoB,EAAE,IAAA,EAAM,WAAA,EAAY;AAQvC,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAM7B,MAAM,IACJ,SAAA,EACA,QAAA,EACAD,QAAoBC,KAAAA,EACpB,IAAA,GAA4B,EAAC,EACN;AACvB,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,QAC/C,MAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAM,CAAA,cAAA,EAAiB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,cAAA,EAAiB,kBAAA;AAAA,UACrD;AAAA,SACD,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,QACjC,IAAA,EAAAD;AAAA,OACD,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,YAAe,oBAAA,IAAwB,IAAA,CAAK,0BAAA,EAA4B;AAC1E,QAAA,OAAO,EAAE,SAAA,EAAW,IAAA,EAAM,QAAA,EAAU,WAAW,IAAA,EAAK;AAAA,MACtD;AACA,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,QACJ,UAAA,EACA,QAAA,EACAA,QAAoBC,KAAAA,EACpB,IAAA,GAA4B,EAAC,EACJ;AACzB,IAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,EAAC;AACrC,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAwB;AAAA,MACxD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,cAAA,EAAiB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,oBAAA,CAAA;AAAA,MACtC,IAAA,EAAAD,KAAAA;AAAA,MACA,OAAO,EAAE,IAAA,EAAM,QAAA,EAAU,QAAA,EAAU,WAAW,MAAA,EAAO;AAAA,MACrD,IAAA,EAAM;AAAA,KACP,CAAA;AACD,IAAA,MAAM,IAAA,uBAAW,GAAA,EAA0B;AAC3C,IAAA,KAAA,MAAW,CAAA,IAAK,OAAO,IAAI,CAAA,CAAE,WAAW,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,SAAA,EAAW,CAAC,CAAA;AAC/D,IAAA,OAAO,UAAA,CAAW,GAAA;AAAA,MAChB,CAAC,EAAA,KACC,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,IAAK;AAAA,QACd,SAAA,EAAW,EAAA;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,SAAA,EAAW,OAAA,CAAQ,IAAA,CAAK,0BAA0B;AAAA;AACpD,KACJ;AAAA,EACF;AACF;;;ACtFA,IAAME,QAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAQxC,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,eAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,eAAA,CAAA;AAAA,EAC1C;AAAA;AAAA,EAGA,MAAM,IAAA,CAAK,IAAA,GAA0B,EAAC,EAAGF,QAAoBE,QAAAA,EAAmC;AAC9F,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA,GAAI,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,GAAE,GAAI,MAAA;AAClF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU;AAAC,KAC1B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,CAAiB,GAAA,EAAaA,KAAAA,GAAoBE,QAAAA,EAAoC;AAC1F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA;AAAA,MAC/C,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,MAAA,EAA8BA,KAAAA,GAAoBE,QAAAA,EAAmC;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,GAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACO;AAC3B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA;AAAA,MAC/C,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,GAAA,EAAaA,KAAAA,GAAoBE,QAAAA,EAAwB;AACpE,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA;AAAA,MAC/C,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACnEA,IAAME,QAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AASxC,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,KAAK,MAAA,EAAwB;AACnC,IAAA,OAAO,kBAAkB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,MAAM,CAAC,CAAA,eAAA,CAAA;AAAA,EAChF;AAAA;AAAA,EAGA,MAAM,IAAA,CACJ,MAAA,EACA,OAA0B,EAAC,EAC3BF,QAAoBE,QAAAA,EACY;AAChC,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,IAAA,IAAQ,IAAA,CAAK,KAAK,MAAA,GAAS,CAAA,GAAI,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,GAAG,GAAE,GAAI,MAAA;AAClF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA+B;AAAA,MAClD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,MACtB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU;AAAC,KAC1B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,GAAA,CACJ,MAAA,EACA,GAAA,EACAA,QAAoBE,QAAAA,EACa;AACjC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgC;AAAA,MACnD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,MAAA,EACA,MAAA,EACAA,QAAoBE,QAAAA,EACY;AAChC,IAAA,MAAM,IAAA,GAAO,OAAO,GAAA,CAAI,CAAC,OAAO,EAAE,GAAG,CAAA,EAAG,MAAA,EAAO,CAAE,CAAA;AACjD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA+B;AAAA,MAClD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,MAAM,CAAA;AAAA,MACtB,IAAA,EAAAF,KAAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CACJ,MAAA,EACA,GAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACa;AACjC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgC;AAAA,MACnD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM,EAAE,GAAG,KAAA,EAAO,MAAA;AAAO,KAC1B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,MAAA,EAAgB,GAAA,EAAaA,QAAoBE,QAAAA,EAAwB;AACpF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,GAAG,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AClDA,IAAM,2BAAW,IAAI,GAAA,CAAI,CAAC,YAAA,EAAc,UAAU,CAAC,CAAA;AAS5C,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,cAAA,EAAiB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,eAAA,CAAA;AAAA,EACzC;AAAA;AAAA,EAGA,MAAM,IAAA,CAAKA,KAAAA,EAAmB,IAAA,GAA0B,EAAC,EAA4B;AACnF,IAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAwC;AAAA,MAC5E,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAA,KAAAA;AAAA,MACA,GAAI,IAAA,CAAK,IAAA,GAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,EAAE,GAAI;AAAC,KACnD,CAAA;AACD,IAAA,MAAM,MAAsB,EAAC;AAC7B,IAAA,KAAA,MAAW,GAAA,IAAO,SAAA,IAAa,EAAC,EAAG;AACjC,MAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,GAAG,CAAA,EAAG;AAC9C,QAAA,IAAI,QAAA,CAAS,IAAI,GAAG,CAAA,IAAK,UAAU,IAAA,IAAQ,OAAO,UAAU,QAAA,EAAU;AACtE,QAAA,MAAM,CAAA,GAAI,KAAA;AACV,QAAA,GAAA,CAAI,IAAA,CAAK;AAAA,UACP,GAAA;AAAA,UACA,IAAA,EAAM,EAAE,IAAA,IAAQ,GAAA;AAAA,UAChB,KAAA,EAAO,CAAA,CAAE,KAAA,IAAS,EAAC;AAAA,UACnB,GAAI,EAAE,MAAA,GAAS,EAAE,QAAQ,CAAA,CAAE,MAAA,KAAW,EAAC;AAAA,UACvC,GAAI,EAAE,QAAA,GAAW,EAAE,UAAU,CAAA,CAAE,QAAA,KAAa;AAAC,SAC9C,CAAA;AAAA,MACH;AAAA,IACF;AACA,IAAA,OAAO,GAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,KAAA,EAA0BA,KAAAA,EAA4C;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,UAAA,EAAoB,KAAA,EAA0BA,KAAAA,EAAkC;AAC5F,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MACtD,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,UAAA,EAAoBA,KAAAA,EAAmB,IAAA,GAA0B,EAAC,EAAkB;AAC/F,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MACtD,IAAA,EAAAA,KAAAA;AAAA,MACA,GAAI,IAAA,CAAK,IAAA,GAAO,EAAE,KAAA,EAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAK,EAAE,GAAI;AAAC,KACnD,CAAA;AAAA,EACH;AAAA,EAEA,MAAc,QAAA,CAAS,QAAA,EAAkBA,KAAAA,EAA0C;AACjF,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,IAAA,CAAKA,OAAM,EAAE,IAAA,EAAM,UAAU,CAAA;AACtD,IAAA,MAAM,QAAQ,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,QAAQ,CAAA;AACnD,IAAA,IAAI,CAAC,OAAO,MAAM,IAAI,qBAAqB,CAAA,eAAA,EAAkB,QAAQ,eAAe,GAAG,CAAA;AACvF,IAAA,OAAO,KAAA;AAAA,EACT;AAAA,EAEA,MAAc,GAAA,CAAI,UAAA,EAAoB,IAAA,EAAoB,OAA2BA,KAAAA,EAAkC;AACrH,IAAA,MAAM,IAAA,CAAK,OAAA;AAAA,MACT,UAAA;AAAA,MACA,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,EAAM,OAAO,GAAI,IAAA,CAAK,MAAA,GAAS,EAAE,MAAA,EAAQ,IAAA,CAAK,MAAA,EAAO,GAAI,EAAC,EAAG;AAAA,MAC1EA;AAAA,KACF;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,UAAA,EAAoB,QAAA,EAAkB,MAAwBA,KAAAA,EAAkC;AAC5G,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA,CAAS,UAAUA,KAAI,CAAA;AAC/C,IAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,IAAA,CAAK,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,SAAA,KAAc,IAAA,CAAK,SAAS,GAAG,IAAI,CAAA;AAChF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,IAAA,EAAM,OAAOA,KAAI,CAAA;AAAA,EAC9C;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,UAAA,EAAoB,QAAA,EAAkB,WAAmBA,KAAAA,EAAkC;AAC1G,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA,CAAS,UAAUA,KAAI,CAAA;AAC/C,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,cAAc,SAAS,CAAA;AAChE,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,IAAA,EAAM,OAAOA,KAAI,CAAA;AAAA,EAC9C;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,UAAA,EAAoB,QAAA,EAAkB,SAAA,EAAmB,UAAkBA,KAAAA,EAAkC;AACjI,IAAA,IAAI,QAAA,IAAY,GAAG,OAAO,IAAA,CAAK,WAAW,UAAA,EAAY,QAAA,EAAU,WAAWA,KAAI,CAAA;AAC/E,IAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA,CAAS,UAAUA,KAAI,CAAA;AAC/C,IAAA,IAAI,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAA,CAAI,CAAC,CAAA,KAAO,CAAA,CAAE,SAAA,KAAc,SAAA,GAAY,EAAE,GAAG,CAAA,EAAG,QAAA,KAAa,CAAE,CAAA;AACtF,IAAA,IAAI,CAAC,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,EAAE,SAAA,KAAc,SAAS,CAAA,EAAG,KAAA,GAAQ,CAAC,GAAG,KAAA,EAAO,EAAE,SAAA,EAAW,UAAU,CAAA;AAC7F,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,UAAA,EAAY,IAAA,EAAM,OAAOA,KAAI,CAAA;AAAA,EAC9C;AACF;;;AC5IA,IAAME,QAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAgBxC,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,KAAK,IAAA,EAAuB;AAClC,IAAA,OAAO,mBAAmB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,EACvE;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,IAAA,GAAgB,SAAA,EAAWF,QAAoBE,QAAAA,EAA4B;AAC3F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,aAAA,CAAA;AAAA,MACxB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CACJ,IAAA,GAAgB,SAAA,EAChBA,QAAoBE,QAAAA,EACO;AAC3B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,gBAAA,CAAA;AAAA,MACxB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,OAAA,CAAQ,IAAA,GAAgB,SAAA,EAAWA,QAAoBE,QAAAA,EAAwB;AACnF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,CAAK,IAAI,CAAC,CAAA,QAAA,CAAA;AAAA,MACxB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACvCA,IAAME,QAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAexC,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,eAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,QAAA,CAAA;AAAA,EAC1C;AAAA;AAAA,EAGA,MAAM,WAAA,CAAYF,KAAAA,GAAoBE,QAAAA,EAAoC;AACxE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,QAAA,EAAkBA,KAAAA,GAAoBE,QAAAA,EAAkC;AACtF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACpD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CACJ,MAAA,EACAA,KAAAA,GAAoBE,QAAAA,EACK;AACzB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,QAAA,EAAkBA,KAAAA,GAAoBE,QAAAA,EAAwB;AAC/E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACpD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,QAAA,EAAkBA,KAAAA,GAAoBE,QAAAA,EAAwB;AAClF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,UAAA,CAAA;AAAA,MACpD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,UAAA,EAAoBA,KAAAA,GAAoBE,QAAAA,EAAkC;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC5D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,MAAA,CACJ,UAAA,EACA,IAAA,GAA6B,IAC7B,IAAA,GAAsB,EAAC,EACvBA,KAAAA,GAAoBE,QAAAA,EACK;AACzB,IAAA,MAAM,QAAQ,IAAA,CAAK,QAAA,GAAW,EAAE,QAAA,EAAU,IAAA,CAAK,UAAS,GAAI,MAAA;AAC5D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,UAAU,CAAC,CAAA,OAAA,CAAA;AAAA,MAC5D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA;AAAA,MACA,GAAI,KAAA,GAAQ,EAAE,KAAA,KAAU;AAAC,KAC1B,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAA,CACJ,GAAA,EACAA,KAAAA,GAAoBE,QAAAA,EACW;AAC/B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B;AAAA,MACjD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,0CAAA,CAAA;AAAA,MACN,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;ACtHA,IAAME,QAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAcxC,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,QAAA,GAAmB;AACzB,IAAA,OAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,KAAA,CAAA;AAAA,EAChC;AAAA,EAEQ,YAAA,GAAuB;AAC7B,IAAA,OAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,SAAA,CAAA;AAAA,EAChC;AAAA,EAEQ,eAAA,GAA0B;AAChC,IAAA,OAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,YAAA,CAAA;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,IAAA,CAAK,KAAA,GAAuB,EAAC,EAAGF,QAAoBE,QAAAA,EAAuC;AAC/F,IAAA,MAAM,UAAA,GAAa,MAAM,UAAA,IAAc,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,EAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAe;AAAA,MAC/C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,QAAA,EAAS;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,YAAY,QAAA;AAAS,KACzC,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA,EAGA,MAAM,GAAA,CAAI,EAAA,EAAYA,KAAAA,GAAoBE,QAAAA,EAAuB;AAC/D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAa;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,EAAU,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAClD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,KAAA,EAAiBA,KAAAA,GAAoBE,QAAAA,EAAuB;AACvE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAa;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,QAAA,EAAS;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,EAAA,EAAY,KAAA,EAAiBA,QAAoBE,QAAAA,EAAuB;AACnF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAa;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,EAAU,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAClD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,MAAA,CAAO,EAAA,EAAYA,KAAAA,GAAoBE,QAAAA,EAAwB;AACnE,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,EAAU,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAClD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,YAAA,CAAaA,KAAAA,GAAoBE,QAAAA,EAA6B;AAClE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,YAAA,EAAa;AAAA,MACxB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAA,EAAiBA,KAAAA,GAAoBE,QAAAA,EAA6B;AAClF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,YAAA,EAAc,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,KAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,KAAA,EAAqBA,KAAAA,GAAoBE,QAAAA,EAA2B;AACtF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,YAAA,EAAa;AAAA,MACxB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YACJ,OAAA,EACA,MAAA,EACA,OAA2B,EAAC,EAC5BA,QAAoBE,QAAAA,EACF;AAClB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,YAAA,EAAc,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,KAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,MACf,GAAI,IAAA,CAAK,OAAA,GAAU,EAAE,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAO,EAAE,GAAI;AAAC,KACtD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAA,CAAe,OAAA,EAAiB,KAAA,EAAgBA,QAAoBE,QAAAA,EAAwB;AAChG,IAAA,MAAM,IAAA,GAAO,GAAG,IAAA,CAAK,YAAA,EAAc,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,KAAA,CAAA;AAClE,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,QAAQ,CAAA,EAAG,IAAI,IAAI,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA,GAAK,IAAA;AAAA,MACvD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,MAAA,EAAuBA,KAAAA,GAAoBE,QAAAA,EAA6B;AAC3F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,YAAA,EAAc,CAAA,OAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CAAe,SAAA,EAAmBA,KAAAA,GAAoBE,QAAAA,EAA6B;AACvF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,eAAA,EAAiB,CAAA,CAAA,EAAI,kBAAA,CAAmB,SAAS,CAAC,CAAA,KAAA,CAAA;AAAA,MAChE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eACJ,SAAA,EACA,MAAA,EACA,OAA2B,EAAC,EAC5BA,QAAoBE,QAAAA,EACF;AAClB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,eAAA,EAAiB,CAAA,CAAA,EAAI,kBAAA,CAAmB,SAAS,CAAC,CAAA,KAAA,CAAA;AAAA,MAChE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,MACf,GAAI,IAAA,CAAK,OAAA,GAAU,EAAE,KAAA,EAAO,EAAE,OAAA,EAAS,MAAA,EAAO,EAAE,GAAI;AAAC,KACtD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,SAAA,EAAmBA,KAAAA,GAAoBE,QAAAA,EAAwB;AACrF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,eAAA,EAAiB,CAAA,CAAA,EAAI,kBAAA,CAAmB,SAAS,CAAC,CAAA,KAAA,CAAA;AAAA,MAChE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACrMO,IAAM,wBAAN,MAA4B;AAAA,EACjC,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,iBAAA,EAAoB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,UAAA,CAAA;AAAA,EAC5C;AAAA,EAEA,MAAM,OACJ,UAAA,EACA,OAAA,GAA4C,EAAC,EAC7C,OAAA,GAAuB,IAAA,CAAK,SAAA,EAAU,EACvB;AACf,IAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,IAAA,GAAO,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAC,CAAA,CAAA,GAAK,EAAA;AACnE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,QAAQ,MAAA,IAAU,MAAA;AAAA,MAC1B,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,UAAU,GAAG,GAAG,CAAA,CAAA;AAAA,MACxC,IAAA,EAAM,OAAA;AAAA,MACN,GAAI,QAAQ,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,OAAA,CAAQ,IAAA,EAAK,GAAI,EAAC;AAAA,MAC3D,GAAI,QAAQ,KAAA,GAAQ,EAAE,OAAO,OAAA,CAAQ,KAAA,KAAU,EAAC;AAAA,MAChD,GAAI,QAAQ,OAAA,GAAU,EAAE,SAAS,OAAA,CAAQ,OAAA,KAAY;AAAC,KACvD,CAAA;AAAA,EACH;AACF;;;ACdA,IAAME,QAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AASxC,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACpC;AAAA;AAAA,EAGA,MAAM,sBAAA,CAAuBF,KAAAA,GAAoBE,QAAAA,EAAyC;AACxF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA+B;AAAA,MAClD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,oBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,wBAAA,CACJ,KAAA,EACAA,KAAAA,GAAoBE,QAAAA,EAC4B;AAChD,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA+C;AAAA,MAClE,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,oBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAYA,KAAAA,GAAoBE,QAAAA,EAAmC;AACvE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,MACpB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,IAAA,EAAcA,KAAAA,GAAoBE,QAAAA,EAAiC;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,EAAW,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MACvD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CACJ,KAAA,EACAA,KAAAA,GAAoBE,QAAAA,EACW;AAC/B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B;AAAA,MACjD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CACJ,IAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACL;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,EAAW,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MACvD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CACJ,IAAA,EACA,OAAA,EACAA,QAAoBE,QAAAA,EACL;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,EAAW,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MACvD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAA,CACJ,IAAA,EACA,OAA4B,EAAC,EAC7BA,QAAoBE,QAAAA,EACL;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,EAAW,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MACvD,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,IAAA,CAAK,KAAA,KAAU,IAAA,GAAO,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO,EAAE,GAAI;AAAC,KAC3D,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CACJ,KAAA,GAAgC,EAAC,EACjCA,QAAoBE,QAAAA,EACQ;AAC5B,IAAA,MAAM,IAA4B,EAAC;AACnC,IAAA,IAAI,KAAA,CAAM,aAAA,EAAe,CAAA,CAAE,aAAA,GAAgB,KAAA,CAAM,aAAA;AACjD,IAAA,IAAI,KAAA,CAAM,WAAA,EAAa,CAAA,CAAE,WAAA,GAAc,KAAA,CAAM,WAAA;AAC7C,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,EAAE,KAAA,EAAO,CAAA,EAAE,GAAI;AAAC,KACjD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmBA,KAAAA,GAAoBE,QAAAA,EAA0C;AACrF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgC;AAAA,MACnD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,iBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AC/IA,IAAME,QAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAQxC,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,WAAA,GAAsB;AAC5B,IAAA,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,QAAA,CAAA;AAAA,EACnC;AAAA,EAEQ,YAAA,GAAuB;AAC7B,IAAA,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,gBAAA,CAAA;AAAA,EACnC;AAAA,EAEQ,cAAc,IAAA,EAAsB;AAC1C,IAAA,OAAO,GAAG,IAAA,CAAK,YAAA,EAAc,CAAA,CAAA,EAAI,kBAAA,CAAmB,IAAI,CAAC,CAAA,UAAA,CAAA;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WAAA,CACJ,KAAA,GAA0B,EAAC,EAC3BF,QAAoBE,QAAAA,EACa;AACjC,IAAA,MAAM,UAAA,GAAa,MAAM,UAAA,IAAc,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,EAAA;AACnC,IAAA,MAAM,CAAA,GAAqC,EAAE,UAAA,EAAY,QAAA,EAAS;AAClE,IAAA,IAAI,KAAA,CAAM,CAAA,EAAG,CAAA,CAAE,CAAA,GAAI,KAAA,CAAM,CAAA;AACzB,IAAA,IAAI,KAAA,CAAM,IAAA,EAAM,CAAA,CAAE,IAAA,GAAO,KAAA,CAAM,IAAA;AAC/B,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAAkB;AAAA,MAClD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,WAAA,EAAY;AAAA,MACvB,IAAA,EAAAF,KAAAA;AAAA,MACA,KAAA,EAAO;AAAA,KACR,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,EAAA,EAAYA,KAAAA,GAAoBE,QAAAA,EAA0B;AACxE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,KAAA,EAAoBA,KAAAA,GAAoBE,QAAAA,EAA0B;AACnF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,WAAA,EAAY;AAAA,MACvB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,YAAA,CACJ,EAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACH;AACjB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,EAAA,EAAYA,KAAAA,GAAoBE,QAAAA,EAAwB;AACzE,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBAAA,CACJ,IAAA,EACAA,KAAAA,GAAoBE,QAAAA,EACR;AACZ,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAW;AAAA,MAC9B,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,WAAA,EAAa,CAAA,KAAA,CAAA;AAAA,MAC3B,IAAA,EAAAF,KAAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAUA,KAAAA,GAAoBE,QAAAA,EAAoC;AACtE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,QAAA,EAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,MAAA,CAAA;AAAA,MAChC,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CACJ,EAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACH;AACjB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,WAAA,EAAa,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,MAAA,CAAA;AAAA,MACrD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM,EAAE,KAAA;AAAM,KACf,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAA,CACJ,IAAA,GAAkC,EAAC,EACnCA,QAAoBE,QAAAA,EACK;AACzB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,YAAA,EAAa;AAAA,MACxB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,IAAA,CAAK,aAAA,GAAgB,EAAE,KAAA,EAAO,EAAE,aAAA,EAAe,MAAA,EAAO,EAAE,GAAI;AAAC,KAClE,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,EAAA,EAAYA,KAAAA,GAAoBE,QAAAA,EAAgC;AACpF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,YAAA,EAAc,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MACtD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CACJ,KAAA,EACAA,KAAAA,GAAoBE,QAAAA,EACG;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,YAAA,EAAa;AAAA,MACxB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CACJ,EAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACG;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,YAAA,EAAc,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MACtD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,kBAAA,CAAmB,EAAA,EAAYA,KAAAA,GAAoBE,QAAAA,EAAwB;AAC/E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,YAAA,EAAc,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MACtD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,aAAA,CACJ,IAAA,EACA,QAA4B,EAAC,EAC7BA,QAAoBE,QAAAA,EACwB;AAC5C,IAAA,MAAM,UAAA,GAAa,MAAM,UAAA,IAAc,CAAA;AACvC,IAAA,MAAM,QAAA,GAAW,MAAM,QAAA,IAAY,EAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAA6B;AAAA,MAC7D,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAAA,MAC7B,IAAA,EAAAF,KAAAA;AAAA,MACA,KAAA,EAAO,EAAE,GAAG,KAAA,EAAO,YAAY,QAAA;AAAS,KACzC,CAAA;AACD,IAAA,OAAO,EAAE,KAAA,EAAO,UAAA,EAAY,UAAU,WAAA,EAAa,KAAA,CAAM,WAAW,QAAA,EAAS;AAAA,EAC/E;AAAA;AAAA,EAGA,MAAM,WAAA,CACJ,IAAA,EACA,EAAA,EACAA,QAAoBE,QAAAA,EACQ;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,aAAA,CAAc,IAAI,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CACJ,IAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACQ;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,IAAA,CAAK,aAAA,CAAc,IAAI,CAAA;AAAA,MAC7B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CACJ,IAAA,EACA,EAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACQ;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,aAAA,CAAc,IAAI,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CACJ,IAAA,EACA,EAAA,EACA,KAAA,EACAA,QAAoBE,QAAAA,EACQ;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,aAAA,CAAc,IAAI,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,IAAA,EAAc,EAAA,EAAYA,QAAoBE,QAAAA,EAAwB;AACzF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,aAAA,CAAc,IAAI,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,CACJ,IAAA,EACA,IAAA,EACAA,QAAoBE,QAAAA,EACwB;AAC5C,IAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,GAAA,CAAI,KAAK,OAAA,CAA6B;AAAA,MAC7D,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,aAAA,CAAc,IAAI,CAAC,CAAA,OAAA,CAAA;AAAA,MACjC,IAAA,EAAAF,KAAAA;AAAA,MACA;AAAA,KACD,CAAA;AACD,IAAA,OAAO,EAAE,OAAO,UAAA,EAAY,CAAA,EAAG,UAAU,KAAA,CAAM,MAAA,EAAQ,aAAa,KAAA,EAAM;AAAA,EAC5E;AACF;;;ACjTA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAcxC,IAAM,YAAN,MAAgB;AAAA,EACrB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,YAAA,EAAe,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACvC;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,KAAA,EAAoBF,KAAAA,GAAoBE,SAAAA,EAAgC;AACzF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,MAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAA,CACJ,KAAA,EACAA,KAAAA,GAAoBE,SAAAA,EACS;AAC7B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA4B;AAAA,MAC/C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,YAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAWA,KAAAA,GAAoBE,SAAAA,EAA2B;AAC9D,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,eAAA,CAAA;AAAA,MACpB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAA,CAAS,EAAA,EAAYA,KAAAA,GAAoBE,SAAAA,EAAyB;AACtE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC7D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,EAAA,EAAY,KAAA,EAAmBA,QAAoBE,SAAAA,EAAyB;AAC5F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC7D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAM,UAAA,CACJ,EAAA,EACA,GAAA,EACAA,QAAoBE,SAAAA,EACJ;AAChB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC7D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,WAAA,CACJ,EAAA,EACAA,QAAoBE,SAAAA,EACpB,IAAA,GAA2B,EAAC,EACb;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC7D,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,IAAA,CAAK,KAAA,GAAQ,EAAE,KAAA,EAAO,EAAE,KAAA,EAAO,MAAA,EAAO,EAAE,GAAI;AAAC,KAClD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,KAAA,EAAyBA,KAAAA,GAAoBE,SAAAA,EAA2B;AACzF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,sBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,IAAA,CAAK,KAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAkC;AACnF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,aAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,SAAA,CAAU,KAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAmC;AACzF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,mBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;ACxJA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAUxC,IAAM,aAAN,MAAiB;AAAA,EACtB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EAChC;AAAA;AAAA,EAGA,MAAM,cAAA,CAAeF,KAAAA,GAAoBE,SAAAA,EAA+B;AACtE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,MAAA,CAAA;AAAA,MACpB,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,YAAA,EAAsBA,KAAAA,GAAoBE,SAAAA,EAA6B;AACxF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,YAAY,CAAC,CAAA,CAAA;AAAA,MAC9D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CACJ,KAAA,EACAA,KAAAA,GAAoBE,SAAAA,EACO;AAC3B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,MAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,eAAA,CACJ,YAAA,EACA,KAAA,EACAA,QAAoBE,SAAAA,EACA;AACpB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,YAAY,CAAC,CAAA,CAAA;AAAA,MAC9D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,YAAA,EAAsBA,KAAAA,GAAoBE,SAAAA,EAAwB;AACtF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,YAAY,CAAC,CAAA,CAAA;AAAA,MAC9D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,YAAA,CACJ,OAAA,EACAA,KAAAA,GAAoBE,SAAAA,EACW;AAC/B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B;AAAA,MACjD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,2BAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;ACtFA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAWxC,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACnC;AAAA;AAAA,EAGA,MAAM,WAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CF,QAAoBE,SAAAA,EACC;AACrB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,IAAA,EAAcA,KAAAA,GAAoBE,SAAAA,EAA0B;AAC1E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MACxD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,KAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAiC;AAC1F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,IAAA,EAAc,KAAA,EAAqBA,QAAoBE,SAAAA,EAAwB;AAChG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MACxD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,IAAA,EAAc,KAAA,EAAqBA,QAAoBE,SAAAA,EAAwB;AAC/F,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MACxD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,IAAA,EAAcA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC3E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MACxD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAA,CACJ,IAAA,EACA,UAAA,EACAA,QAAoBE,SAAAA,EACL;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,WAAA,CAAA;AAAA,MACxD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CACJ,IAAA,EACA,QAAyC,EAAC,EAC1CA,QAAoBE,SAAAA,EACG;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,YAAA,CAAA;AAAA,MACxD,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CACJ,IAAA,EACA,UAAA,EACAA,QAAoBE,SAAAA,EACQ;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,YAAA,CAAA;AAAA,MACxD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,IAAA,EAAc,EAAA,EAAYA,QAAoBE,SAAAA,EAA8B;AAC9F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC9F,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,gBAAA,CAAiB,IAAA,EAAc,EAAA,EAAYA,QAAoBE,SAAAA,EAAwB;AAC3F,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,IAAI,CAAC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,EAAE,CAAC,CAAA,CAAA;AAAA,MAC9F,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAAkC;AACpG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,MAC3E,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,oBAAA,CACJ,cAAA,EACAA,KAAAA,GAAoBE,SAAAA,EACK;AACzB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,MAC3E,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACjKA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAYxC,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA;AAAA,EAGrB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,cAAA,CAAA;AAAA,EACT;AAAA;AAAA,EAGQ,UAAA,GAAqB;AAC3B,IAAA,OAAO,CAAA,eAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EAC1C;AAAA;AAAA;AAAA,EAKA,MAAM,gBAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CF,QAAoBE,SAAAA,EACW;AAC/B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B;AAAA,MACjD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,aAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAA0B;AACxF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,EAAa,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC/D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,oBAAA,CACJ,UAAA,EACA,KAAA,EACAA,QAAoBE,SAAAA,EACL;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,EAAa,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC/D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,oBAAA,CAAqB,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAwB;AACzF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,EAAa,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC/D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAiC;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,EAAa,kBAAA,CAAmB,UAAU,CAAC,CAAA,QAAA,CAAA;AAAA,MAC/D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,UAAA,EAAoB,KAAA,EAAoBA,QAAoBE,SAAAA,EAAwB;AAClG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,EAAa,kBAAA,CAAmB,UAAU,CAAC,CAAA,UAAA,CAAA;AAAA,MAC/D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,UAAA,EAAoB,KAAA,EAAuBA,QAAoBE,SAAAA,EAAwB;AACxG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,EAAa,kBAAA,CAAmB,UAAU,CAAC,CAAA,aAAA,CAAA;AAAA,MAC/D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,YAAYA,KAAAA,EAAoC;AAIpD,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,QACzC,MAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,CAAA;AAAA,QACpB,IAAA,EAAAA;AAAA,OACD,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,GAAA,YAAe,sBAAsB,OAAO,CAAA;AAChD,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aAAaA,KAAAA,EAA2C;AAG5D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,QAChD,MAAA,EAAQ,KAAA;AAAA,QACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,wBAAA,CAAA;AAAA,QACpB,IAAA,EAAAA;AAAA,OACD,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,IAAI,eAAe,oBAAA,EAAsB;AACvC,QAAA,OAAO,EAAE,cAAc,CAAA,EAAG,OAAA,EAAS,EAAE,eAAA,EAAiB,IAAG,EAAE;AAAA,MAC7D;AACA,MAAA,MAAM,GAAA;AAAA,IACR;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAA,CAAe,KAAA,EAA4BA,KAAAA,EAAgD;AAC/F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA4B;AAAA,MAC/C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,uBAAA,CAAA;AAAA,MACpB,IAAA,EAAAA,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkBA,KAAAA,GAAoBE,SAAAA,EAAoC;AAC9E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,UAAA,EAAY,CAAA,cAAA,CAAA;AAAA,MAC1B,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,KAAA,EAAqBA,KAAAA,GAAoBE,SAAAA,EAAoC;AACpG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,UAAA,EAAY,CAAA,cAAA,CAAA;AAAA,MAC1B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CACJ,cAAA,EACA,KAAA,EACAA,QAAoBE,SAAAA,EACL;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,UAAA,EAAY,CAAA,eAAA,EAAkB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,MAC9E,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC3F,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,UAAA,EAAY,CAAA,eAAA,EAAkB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,MAC9E,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACvNA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAOxC,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,aAAA,CAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,UAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CF,QAAoBE,SAAAA,EACA;AACpB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAA,CAAS,OAAA,EAAiBA,KAAAA,GAAoBE,SAAAA,EAAyB;AAC3E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACnD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,KAAA,EAAmBA,KAAAA,GAAoBE,SAAAA,EAAyB;AAChF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAA,EAAiB,KAAA,EAAoBA,QAAoBE,SAAAA,EAAyB;AAClG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACnD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,OAAA,EAAiB,KAAA,EAAoBA,QAAoBE,SAAAA,EAAyB;AACjG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACnD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAA,EAAiBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC7E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACnD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AC1EA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAOxC,IAAM,eAAN,MAAmB;AAAA,EACxB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,aAAA,CAAA;AAAA,EACT;AAAA;AAAA,EAGA,MAAM,UAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CF,QAAoBE,SAAAA,EACA;AACpB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAA,CAAS,OAAA,EAAiBA,KAAAA,GAAoBE,SAAAA,EAAyB;AAC3E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACnD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,KAAA,EAAmBA,KAAAA,GAAoBE,SAAAA,EAAyB;AAChF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAA,EAAiB,KAAA,EAAoBA,QAAoBE,SAAAA,EAAyB;AAClG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACnD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,OAAA,EAAiB,KAAA,EAAoBA,QAAoBE,SAAAA,EAAyB;AACjG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAe;AAAA,MAClC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACnD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAA,EAAiBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC7E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MACnD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AC1EA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAQxC,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACpC;AAAA;AAAA,EAGA,MAAM,aAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CF,QAAoBE,SAAAA,EACE;AACtB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,WAAA,EAAqBA,KAAAA,GAAoBE,SAAAA,EAA2B;AACnF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,WAAW,CAAC,CAAA,CAAA;AAAA,MACjE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,WAAA,EAAqB,KAAA,EAAsBA,QAAoBE,SAAAA,EAAwB;AACxG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,WAAW,CAAC,CAAA,CAAA;AAAA,MACjE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CA,QAAoBE,SAAAA,EACC;AACrB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAA0B;AAChF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC9D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AC9CA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAMxC,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACrC;AAAA;AAAA;AAAA,EAKA,MAAM,cAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CF,QAAoBE,SAAAA,EACG;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,IAAA,EAAcA,KAAAA,GAAoBE,SAAAA,EAA4B;AAC9E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,KAAA,EAAsBA,KAAAA,GAAoBE,SAAAA,EAAmC;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,IAAA,EAAc,KAAA,EAAuBA,QAAoBE,SAAAA,EAA4B;AACxG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,IAAA,EAAcA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC7E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MAC3D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CA,QAAoBE,SAAAA,EACO;AAC3B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,IAAA,EAAcA,KAAAA,GAAoBE,SAAAA,EAAgC;AACtF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MAC1D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,KAAA,EAA0BA,KAAAA,GAAoBE,SAAAA,EAAuC;AAC5G,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA6B;AAAA,MAChD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,IAAA,EAAc,KAAA,EAA2BA,QAAoBE,SAAAA,EAAgC;AACpH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MAC1D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,IAAA,EAAcA,KAAAA,GAAoBE,SAAAA,EAAwB;AACjF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,MAC1D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACnFA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAQxC,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACrC;AAAA,EAEQ,SAAS,IAAA,EAAsB;AACrC,IAAA,OAAO,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,IAAI,CAAC,CAAA,CAAA;AAAA,EACnD;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,KAAA,EAAsBF,KAAAA,GAAoBE,SAAAA,EAA4B;AACpF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CACJ,IAAA,EACA,QAAyC,EAAC,EAC1CA,QAAoBE,SAAAA,EACD;AACnB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,MAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,IAAA,EAAc,MAAA,EAAgBA,QAAoBE,SAAAA,EAAwB;AACtF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,IAAA,EAAc,IAAA,EAAYA,QAAoBE,SAAAA,EAAmC;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,MAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,IAAA,EAAc,MAAA,EAAgB,IAAA,EAAYA,QAAoBE,SAAAA,EAAwB;AACrG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,IAAA,EAAc,MAAA,EAAgB,KAAA,EAAaA,QAAoBE,SAAAA,EAAwB;AACrG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,IAAA,EAAc,MAAA,EAAgBA,QAAoBE,SAAAA,EAAwB;AACzF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,YACJ,IAAA,EACA,MAAA,EACA,QAAyC,EAAC,EAC1CA,QAAoBE,SAAAA,EACS;AAC7B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA4B;AAAA,MAC/C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,QAAA,CAAA;AAAA,MAChE,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,IAAA,EAAc,MAAA,EAAgB,QAAA,EAAkBA,QAAoBE,SAAAA,EAAkC;AACpH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACxG,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,IAAA,EAAc,MAAA,EAAgB,MAAA,EAAwBA,QAAoBE,SAAAA,EAAmC;AAC9H,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,QAAA,CAAA;AAAA,MAChE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,IAAA,EAAc,QAAgB,QAAA,EAAkB,MAAA,EAAwBA,QAAoBE,SAAAA,EAAwB;AACrI,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACxG,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,IAAA,EAAc,QAAgB,QAAA,EAAkB,KAAA,EAAuBA,QAAoBE,SAAAA,EAAwB;AACnI,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACxG,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,IAAA,EAAc,MAAA,EAAgB,QAAA,EAAkBA,QAAoBE,SAAAA,EAAwB;AAC7G,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACxG,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,CAAM,IAAA,EAAc,KAAA,EAAmBA,QAAoBE,SAAAA,EAA+B;AAC9F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,MAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,IAAA,EAAc,KAAA,EAAmBA,QAAoBE,SAAAA,EAA8B;AACpG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,cAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,IAAA,EAAc,KAAA,EAAuBA,QAAoBE,SAAAA,EAA8B;AACrG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,WAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,UAAA,CACJ,IAAA,EACA,QAAyC,EAAC,EAC1CA,QAAoBE,SAAAA,EACQ;AAC5B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAA,CAAS,IAAA,EAAc,OAAA,EAAiBA,QAAoBE,SAAAA,EAAiC;AACjG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,QAAA,EAAW,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MAClE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,IAAA,EAAc,KAAA,EAAsBA,QAAoBE,SAAAA,EAAmC;AAC3G,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,OAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,IAAA,EAAc,OAAA,EAAiB,KAAA,EAAsBA,QAAoBE,SAAAA,EAAwB;AACjH,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,QAAA,EAAW,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MAClE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,IAAA,EAAc,OAAA,EAAiBA,QAAoBE,SAAAA,EAAwB;AAC3F,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,QAAA,EAAW,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,MAClE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,eAAA,CACJ,IAAA,EACA,QAAyC,EAAC,EAC1CA,QAAoBE,SAAAA,EACK;AACzB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,YAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,IAAA,EAAc,UAAA,EAAoBA,QAAoBE,SAAAA,EAA8B;AACvG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC1E,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,gBAAA,CAAiB,IAAA,EAAc,QAAA,EAAsBA,QAAoBE,SAAAA,EAAmC;AAChH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,YAAA,CAAA;AAAA,MAC5B,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,IAAA,EAAc,UAAA,EAAoB,QAAA,EAAsBA,QAAoBE,SAAAA,EAAwB;AAC1H,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC1E,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,gBAAA,CAAiB,IAAA,EAAc,UAAA,EAAoBA,QAAoBE,SAAAA,EAAwB;AACnG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,QAAA,CAAS,IAAI,CAAC,CAAA,aAAA,EAAgB,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC1E,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,sBAAA,CAAuB,cAAA,EAAwB,MAAA,EAAgBA,QAAoBE,SAAAA,EAAsC;AAC7H,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA4B;AAAA,MAC/C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,mBAAA,EAAsB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA,EAAI,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAC1G,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,sBAAA,CAAuB,MAAA,EAAgBA,KAAAA,GAAoBE,SAAAA,EAAsC;AACrG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA4B;AAAA,MAC/C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,uBAAA,EAA0B,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MACxE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,8BAAA,CAA+B,KAAA,EAAiCA,KAAAA,GAAoBE,SAAAA,EAAwB;AAChH,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,uCAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,sBAAA,CAAuB,KAAA,EAAiCA,KAAAA,GAAoBE,SAAAA,EAAwB;AACxG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,yBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,iBAAA,CAAkB,KAAA,GAAyC,EAAC,EAAGA,QAAoBE,SAAAA,EAAoC;AAC3H,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,eAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAAgC;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,MACzE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,KAAA,EAA0BA,KAAAA,GAAoBE,SAAAA,EAAmC;AACxG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,eAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,uBAAA,CAAwB,MAAA,EAA6BA,KAAAA,GAAoBE,SAAAA,EAAqC;AAClH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,oBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,cAAA,EAAwB,KAAA,EAA2BA,QAAoBE,SAAAA,EAAwB;AACtH,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,MACzE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,cAAA,EAAwB,GAAA,EAAoBA,QAAoBE,SAAAA,EAAwB;AAC9G,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,MACzE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmB,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC3F,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,MACzE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,SAAA,CAAU,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAAoC;AAC9F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,MAAA,CAAA;AAAA,MACzE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,cAAA,EAAwB,MAAA,EAAgBA,QAAoBE,SAAAA,EAAgC;AACxG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAC7G,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,cAAA,EAAwB,KAAA,EAAqBA,QAAoBE,SAAAA,EAAmC;AACnH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,MAAA,CAAA;AAAA,MACzE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,cAAA,EAAwB,MAAA,EAAgB,KAAA,EAAqBA,QAAoBE,SAAAA,EAAwB;AACxH,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAC7G,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,cAAA,EAAwB,MAAA,EAAgB,GAAA,EAAoBA,QAAoBE,SAAAA,EAAwB;AACtH,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAC7G,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,cAAA,EAAwB,MAAA,EAAgBA,QAAoBE,SAAAA,EAAwB;AACnG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAAA,MAC7G,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAAwB;AACvF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,cAAc,CAAC,CAAA,MAAA,CAAA;AAAA,MACzE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,qBAAA,CAAsB,KAAA,EAA2BA,KAAAA,GAAoBE,SAAAA,EAA0B;AACnG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,yBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;ACliBA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAOxC,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,QAAA,CAAA;AAAA,EACnC;AAAA;AAAA,EAGA,MAAM,WAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CF,QAAoBE,SAAAA,EACC;AACrB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAA0B;AAC9E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACpD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,KAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAiC;AAC1F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,QAAA,EAAkB,KAAA,EAAqBA,QAAoBE,SAAAA,EAAwB;AACpG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACpD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,QAAA,EAAkB,GAAA,EAAkBA,QAAoBE,SAAAA,EAAwB;AAChG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACpD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC/E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACpD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACzEA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAMxC,IAAM,oBAAN,MAAwB;AAAA,EAC7B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,aAAA,EAAgB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACxC;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,MAAA,EAAgBF,KAAAA,GAAoBE,SAAAA,EAA0B;AAC1E,IAAA,MAAM,IAAA,GAAO,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,MAAM,CAAC,CAAA,CAAA;AAC/D,IAAA,MAAM,GAAA,GAAM,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,UAAA,CAAW,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,EAAAF,KAAAA,EAAM,CAAA;AACxE,IAAA,IAAI,CAAC,IAAI,EAAA,EAAI;AACX,MAAA,MAAM,UAAU,MAAM,GAAA,CAAI,MAAK,CAAE,KAAA,CAAM,MAAM,MAAS,CAAA;AACtD,MAAA,MAAM,iBAAA,CAAkB,IAAI,MAAA,EAAQ,CAAA,IAAA,EAAO,IAAI,CAAA,QAAA,EAAM,GAAA,CAAI,MAAM,CAAA,CAAA,EAAI,OAAO,CAAA;AAAA,IAC5E;AACA,IAAA,OAAO,IAAI,IAAA,EAAK;AAAA,EAClB;AAAA;AAAA,EAGA,MAAM,QAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CA,QAAoBE,SAAAA,EACA;AACpB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB;AAAA,MACtC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,KAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,KAAA,EAAqBA,KAAAA,GAAoBE,SAAAA,EAAkC;AACzF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,KAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;AC/CA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAMxC,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,MAAM,kBAAA,CAAmBF,KAAAA,GAAoBE,SAAAA,EAAiC;AAC5E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,KAAK,IAAA,EAAM,CAAA,eAAA,CAAA,EAAmB,IAAA,EAAAF,OAAM,CAAA;AAAA,EAC5G;AAAA;AAAA,EAGA,MAAM,gBAAA,CAAiB,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAA+B;AAC1F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACnE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,mBAAA,CAAoB,KAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAsC;AACtG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA4B;AAAA,MAC/C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,eAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,mBAAA,CAAoB,QAAA,EAAkB,KAAA,EAAoBA,QAAoBE,SAAAA,EAAwB;AAC1G,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACnE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,mBAAA,CAAoB,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAAwB;AACtF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,gBAAA,EAAmB,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MACnE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,wBAAA,CAAyBA,KAAAA,GAAoBE,SAAAA,EAAuC;AACxF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA6B,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,KAAK,IAAA,EAAM,CAAA,sBAAA,CAAA,EAA0B,IAAA,EAAAF,OAAM,CAAA;AAAA,EACzH;AAAA;AAAA,EAGA,MAAM,sBAAA,CAAuB,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAAqC;AACtG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,uBAAA,EAA0B,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MAC1E,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,KAAA,EAAqBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC7E,IAAA,MAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,QAAA,CAAA,EAAY,MAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACzG;AACF;;;ACxDA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAMxC,IAAM,sBAAN,MAA0B;AAAA,EAC/B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,eAAA,EAAkB,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EAC1C;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,KAAA,GAAyC,EAAC,EAAGF,QAAoBE,SAAAA,EAA0B;AACzG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,MAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,OAAA,CAAQ,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC1E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MACjC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MAC1D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,KAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAA+B;AACpF,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,MAAA,CAAA,EAAU,MAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EAC/G;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,QAAA,EAAkB,KAAA,EAAmBA,QAAoBE,SAAAA,EAAwB;AAChG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MAC1D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC7E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,EAAU,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MAC1D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,KAAA,EAAiBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC7E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,MAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,mBAAA,CAAoB,KAAA,EAA8BA,KAAAA,GAAoBE,SAAAA,EAA0C;AACpH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgC;AAAA,MACnD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,iCAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,KAAA,EAAyBA,KAAAA,GAAoBE,SAAAA,EAAqC;AAClG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,4BAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CAAcA,KAAAA,GAAoBE,SAAAA,EAA4B;AAClE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,CAAA,EAAG,KAAK,IAAA,EAAM,CAAA,MAAA,CAAA,EAAU,IAAA,EAAAF,OAAM,CAAA;AAAA,EAC9F;AACF;;;AC5GA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAMxC,IAAM,iBAAN,MAAqB;AAAA,EAC1B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,SAAA,EAAY,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,SAAA,CAAA;AAAA,EACpC;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,KAAA,GAAyC,EAAC,EAAGF,QAAoBE,SAAAA,EAA+B;AACjH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,SAAA,EAAmBA,KAAAA,GAAoBE,SAAAA,EAA2B;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiB;AAAA,MACpC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,sBAAA,CAAuB,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAA+B;AAClG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB;AAAA,MACxC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,YAAA,EAAe,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MACjE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,KAAA,EAAqBA,KAAAA,GAAoBE,SAAAA,EAAkC;AAC7F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,MAAK,EAAG,IAAA,EAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACvG;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,SAAA,EAAmB,KAAA,EAAsBA,QAAoBE,SAAAA,EAAkC;AACjH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,SAAA,EAAmB,KAAA,EAAqBA,QAAoBE,SAAAA,EAAwB;AACrG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,SAAA,EAAmBA,KAAAA,GAAoBE,SAAAA,EAAwB;AACjF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,MACrD,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;ACpDA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAQxC,IAAM,gBAAN,MAAoB;AAAA,EACzB,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,QAAA,EAAW,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACnC;AAAA;AAAA;AAAA,EAKA,MAAM,WAAA,CAAY,KAAA,GAAyC,EAAC,EAAGF,QAAoBE,SAAAA,EAA8B;AAC/G,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,SAAA,CAAU,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAA0B;AAC9E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAgB;AAAA,MACnC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MAC5D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,KAAA,EAA0BA,KAAAA,GAAoBE,SAAAA,EAA8B;AAC9F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAoB;AAAA,MACvC,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,eAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,KAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAiC;AAC1F,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,QAAA,CAAA,EAAY,MAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACnH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,QAAA,EAAkB,KAAA,EAAqBA,QAAoBE,SAAAA,EAAwB;AACpG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MAC5D,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,QAAA,EAAkBA,KAAAA,GAAoBE,SAAAA,EAAwB;AAC/E,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,SAAA,EAAY,kBAAA,CAAmB,QAAQ,CAAC,CAAA,CAAA;AAAA,MAC5D,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA;AAAA,EAKA,MAAM,mBAAA,CAAoB,KAAA,GAAyC,EAAC,EAAGA,QAAoBE,SAAAA,EAAsC;AAC/H,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA4B;AAAA,MAC/C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAkC;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,oBAAA,CAAqB,KAAA,EAA4BA,KAAAA,GAAoBE,SAAAA,EAAiC;AAC1G,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,UAAA,CAAA,EAAc,MAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACrH;AAAA;AAAA,EAGA,MAAM,oBAAA,CAAqB,UAAA,EAAoB,KAAA,EAA6BA,QAAoBE,SAAAA,EAAwB;AACtH,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,oBAAA,CAAqB,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAwB;AACzF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AC7GA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAQxC,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,WAAA,EAAc,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACtC;AAAA,EAEQ,UAAU,OAAA,EAAyB;AACzC,IAAA,OAAO,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,QAAA,EAAW,kBAAA,CAAmB,OAAO,CAAC,CAAA,CAAA;AAAA,EAC7D;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,KAAA,GAAyC,EAAC,EAAGF,QAAoBE,SAAAA,EAAiC;AACjH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB;AAAA,MAC1C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,QAAA,CAAS,OAAA,EAAiBA,KAAAA,GAAoBE,SAAAA,EAA6B;AAC/E,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAmB,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG,IAAA,EAAAF,OAAM,CAAA;AAAA,EAChG;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAA,EAAiB,MAAA,EAA2BA,QAAoBE,SAAAA,EAA+B;AAC/G,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB,EAAE,QAAQ,OAAA,EAAS,IAAA,EAAM,IAAA,CAAK,SAAA,CAAU,OAAO,CAAA,EAAG,IAAA,EAAAF,KAAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,EAClH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAA,EAAiBA,KAAAA,GAAoBE,SAAAA,EAA+B;AACpF,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,UAAU,OAAO,CAAC,CAAA,OAAA,CAAA,EAAW,IAAA,EAAAF,OAAM,CAAA;AAAA,EAC/G;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,KAAA,GAAyC,EAAC,EAAGA,QAAoBE,SAAAA,EAAkC;AACvH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAwB;AAAA,MAC3C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,YAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,OAAA,EAAiB,QAAA,EAAoBA,QAAoBE,SAAAA,EAA+B;AACxG,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,QAAqB,EAAE,MAAA,EAAQ,QAAQ,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,UAAA,CAAA,EAAc,MAAAF,KAAAA,EAAM,IAAA,EAAM,UAAU,CAAA;AAAA,EAClI;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,OAAA,EAAiB,UAAA,EAAoBA,QAAoBE,SAAAA,EAAwB;AACpG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAC5E,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,OAAA,EAAiB,MAAA,EAAiCA,QAAoBE,SAAAA,EAA+B;AACzH,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,QAAqB,EAAE,MAAA,EAAQ,OAAO,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA,UAAA,CAAA,EAAc,MAAAF,KAAAA,EAAM,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC/H;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,KAAA,EAA8BA,KAAAA,GAAoBE,SAAAA,EAA+B;AACjG,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAqB,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,OAAA,CAAA,EAAW,MAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EAChH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,KAAA,GAAyC,EAAC,EAAGA,QAAoBE,SAAAA,EAAoC;AACpH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,OAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,oBAAA,CAAqB,KAAA,EAA8BA,KAAAA,GAAoBE,SAAAA,EAA2C;AACtH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiC;AAAA,MACpD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,oBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,mBAAA,CAAoB,KAAA,EAAeA,KAAAA,GAAoBE,SAAAA,EAAoC;AAC/F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA0B;AAAA,MAC7C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,qBAAA,EAAwB,kBAAA,CAAmB,KAAK,CAAC,CAAA,CAAA;AAAA,MACrE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AACF;;;AC7GA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAOxC,IAAM,uBAAN,MAA2B;AAAA,EAChC,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,UAAA,CAAA;AAAA,EACrC;AAAA,EAEQ,aAAa,cAAA,EAAgC;AACnD,IAAA,OAAO,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,CAAA,EAAI,kBAAA,CAAmB,cAAc,CAAC,CAAA,CAAA;AAAA,EAC7D;AAAA,EAEQ,WAAA,CAAY,gBAAwB,SAAA,EAA2B;AACrE,IAAA,OAAO,CAAA,EAAG,KAAK,YAAA,CAAa,cAAc,CAAC,CAAA,WAAA,EAAc,kBAAA,CAAmB,SAAS,CAAC,CAAA,CAAA;AAAA,EACxF;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,KAAA,GAAyC,EAAC,EAAGF,QAAoBE,SAAAA,EAAqC;AACxH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B;AAAA,MAC9C,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,KAAK,IAAA,EAAK;AAAA,MAChB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CAAgB,KAAA,EAAiCA,KAAAA,GAAoBE,SAAAA,EAAqC;AAC9G,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA2B,EAAE,QAAQ,MAAA,EAAQ,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,OAAA,CAAA,EAAW,MAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACtH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAAiC;AAC7F,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAuB,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA,EAAG,IAAA,EAAAF,OAAM,CAAA;AAAA,EAC9G;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,KAAA,EAA2BA,KAAAA,GAAoBE,SAAAA,EAAwC;AAC1G,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B,EAAE,MAAA,EAAQ,MAAA,EAAQ,IAAA,EAAM,IAAA,CAAK,MAAK,EAAG,IAAA,EAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EAC7G;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,cAAA,EAAwB,KAAA,EAA4BA,QAAoBE,SAAAA,EAAwC;AACnI,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B,EAAE,QAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA,EAAG,IAAA,EAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EAClI;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,cAAA,EAAwB,KAAA,EAA2BA,QAAoBE,SAAAA,EAAwB;AACjH,IAAA,MAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc,EAAE,QAAQ,OAAA,EAAS,IAAA,EAAM,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA,EAAG,IAAA,EAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EACnH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAAwB;AACvF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,YAAA,CAAa,cAAc,CAAA,EAAG,IAAA,EAAAF,OAAM,CAAA;AAAA,EACvG;AAAA;AAAA;AAAA,EAKA,MAAM,aAAA,CAAc,cAAA,EAAwBA,KAAAA,GAAoBE,SAAAA,EAA4C;AAC1G,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkC;AAAA,MACrD,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,cAAc,CAAC,CAAA,UAAA,CAAA;AAAA,MAC1C,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,cAAA,EAAwB,SAAA,EAAmBA,QAAoBE,SAAAA,EAAwC;AACtH,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B,EAAE,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,YAAY,cAAA,EAAgB,SAAS,CAAA,EAAG,IAAA,EAAAF,OAAM,CAAA;AAAA,EAC/H;AAAA;AAAA,EAGA,MAAM,UAAA,CAAW,cAAA,EAAwB,KAAA,EAAkCA,QAAoBE,SAAAA,EAAwC;AACrI,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B;AAAA,MACjD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,YAAA,CAAa,cAAc,CAAC,CAAA,UAAA,CAAA;AAAA,MAC1C,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,cAAA,EAAwB,SAAA,EAAmB,KAAA,EAAmCA,QAAoBE,SAAAA,EAAwC;AAC5J,IAAA,OAAO,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA8B,EAAE,QAAQ,KAAA,EAAO,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,gBAAgB,SAAS,CAAA,EAAG,MAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EAC5I;AAAA;AAAA,EAGA,MAAM,YAAA,CAAa,cAAA,EAAwB,SAAA,EAAmB,KAAA,EAAmCA,QAAoBE,SAAAA,EAAwB;AAC3I,IAAA,MAAM,KAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc,EAAE,QAAQ,OAAA,EAAS,IAAA,EAAM,IAAA,CAAK,WAAA,CAAY,gBAAgB,SAAS,CAAA,EAAG,MAAAF,KAAAA,EAAM,IAAA,EAAM,OAAO,CAAA;AAAA,EAC7H;AAAA;AAAA,EAGA,MAAM,aAAA,CAAc,cAAA,EAAwB,SAAA,EAAmBA,QAAoBE,SAAAA,EAAwB;AACzG,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc,EAAE,MAAA,EAAQ,QAAA,EAAU,IAAA,EAAM,IAAA,CAAK,YAAY,cAAA,EAAgB,SAAS,CAAA,EAAG,IAAA,EAAAF,OAAM,CAAA;AAAA,EACjH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,cAAA,EAAwB,SAAA,EAAmB,IAAA,EAAgBA,QAAoBE,SAAAA,EAAwB;AAC1H,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,MAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,WAAA,CAAY,cAAA,EAAgB,SAAS,CAAC,CAAA,KAAA,CAAA;AAAA,MACpD,IAAA,EAAAF,KAAAA;AAAA,MACA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAE,KAC/B,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,iBAAA,CAAkB,cAAA,EAAwB,SAAA,EAAmB,IAAA,EAAgBA,QAAoBE,SAAAA,EAAwB;AAC7H,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,MAAM,CAAA,EAAG,IAAA,CAAK,WAAA,CAAY,cAAA,EAAgB,SAAS,CAAC,CAAA,KAAA,CAAA;AAAA,MACpD,IAAA,EAAAF,KAAAA;AAAA,MACA,OAAO,EAAE,IAAA,EAAM,IAAA,CAAK,IAAA,CAAK,GAAG,CAAA;AAAE,KAC/B,CAAA;AAAA,EACH;AACF;;;AChIA,IAAME,SAAAA,GAAuB,EAAE,IAAA,EAAM,SAAA,EAAU;AAYxC,IAAM,kBAAN,MAAsB;AAAA,EAC3B,YAA6B,GAAA,EAAoB;AAApB,IAAA,IAAA,CAAA,GAAA,GAAA,GAAA;AAAA,EAAqB;AAAA,EAArB,GAAA;AAAA,EAErB,IAAA,GAAe;AACrB,IAAA,OAAO,CAAA,UAAA,EAAa,IAAA,CAAK,GAAA,CAAI,MAAM,CAAA,CAAA;AAAA,EACrC;AAAA;AAAA,EAGA,MAAM,aAAA,CACJ,KAAA,GAAyC,EAAC,EAC1CF,QAAoBE,SAAAA,EACG;AACvB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAsB;AAAA,MACzC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,GAAI,OAAO,IAAA,CAAK,KAAK,EAAE,MAAA,GAAS,EAAE,KAAA,EAAM,GAAI;AAAC,KAC9C,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,WAAA,CAAY,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAA4B;AACpF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAkB;AAAA,MACrC,MAAA,EAAQ,KAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,KAAA,EAAsBA,KAAAA,GAAoBE,SAAAA,EAAmC;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAyB;AAAA,MAC5C,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,UAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CACJ,UAAA,EACA,GAAA,EACAA,QAAoBE,SAAAA,EACL;AACf,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,OAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CAAe,UAAA,EAAoBA,KAAAA,GAAoBE,SAAAA,EAAwB;AACnF,IAAA,MAAM,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAc;AAAA,MAChC,MAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAM,GAAG,IAAA,CAAK,IAAA,EAAM,CAAA,WAAA,EAAc,kBAAA,CAAmB,UAAU,CAAC,CAAA,CAAA;AAAA,MAChE,IAAA,EAAAF;AAAA,KACD,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,cAAA,CACJ,KAAA,EACAA,KAAAA,GAAoBE,SAAAA,EACc;AAClC,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAAiC;AAAA,MACpD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,mBAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA;AAAA,EAGA,MAAM,eAAA,CACJ,KAAA,EACAA,KAAAA,GAAoBE,SAAAA,EACU;AAC9B,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,OAAA,CAA6B;AAAA,MAChD,MAAA,EAAQ,MAAA;AAAA,MACR,IAAA,EAAM,CAAA,EAAG,IAAA,CAAK,IAAA,EAAM,CAAA,aAAA,CAAA;AAAA,MACpB,IAAA,EAAAF,KAAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AACF;;;AC3HE,IAAA,OAAA,GAAW,QAAA;;;ACMN,IAAM,WAAA,GAAsB,OAAA;;;ACyD5B,IAAM,gBAAN,MAAoB;AAAA,EAChB,SAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,cAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA;AAAA,EACA,aAAA;AAAA,EACA,IAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,EAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA;AAAA,EAEA,MAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,aAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,MAAA;AAAA,EACQ,QAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EAEjB,YAAY,MAAA,EAAuB;AACjC,IAAA,MAAM,GAAA,GAAM,eAAe,MAAM,CAAA;AACjC,IAAA,IAAA,CAAK,SAAS,GAAA,CAAI,MAAA;AAClB,IAAA,IAAA,CAAK,MAAA,GAAS,GAAA;AAEd,IAAA,IAAI,YAAgC,EAAC;AACrC,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,GAAA,CAAI,WAAW,KAAA,EAAO;AACxB,MAAA,UAAA,GAAa,gBAAA,EAAiB;AAAA,IAChC,WAAW,GAAA,CAAI,MAAA,IAAU,OAAQ,GAAA,CAAI,MAAA,CAAkB,UAAU,UAAA,EAAY;AAC3E,MAAA,UAAA,GAAa,GAAA,CAAI,MAAA;AAAA,IACnB,CAAA,MAAA,IAAW,IAAI,MAAA,EAAQ;AACrB,MAAA,SAAA,GAAY,GAAA,CAAI,MAAA;AAAA,IAClB;AACA,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,aAAA,CAAc,SAAS,CAAA;AAC3C,IAAA,MAAM,IAAA,GACJ,UAAA,IACA,mBAAA,CAAoB,IAAA,CAAK,QAAA,EAAU;AAAA,MACjC,GAAA,EAAK,SAAA;AAAA,MACL,UAAA,EAAY,WAAA;AAAA,MACZ,QAAQ,GAAA,CAAI;AAAA,KACb,CAAA;AAEH,IAAA,MAAM,aAAA,GAA+B,GAAA,CAAI,aAAA,IAAiB,IAAI,qBAAqB,GAAG,CAAA;AACtF,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAErB,IAAA,MAAM,eAAA,GAAkB,IAAI,uBAAA,EAAwB;AACpD,IAAA,IAAA,CAAK,eAAA,GAAkB,eAAA;AAEvB,IAAA,IAAA,CAAK,iBAAiB,EAAE,QAAA,EAAU,IAAI,WAAA,CAAY,UAAA,EAAY,SAAS,QAAA,EAAS;AAChF,IAAA,MAAM,iBAAiB,IAAA,CAAK,cAAA;AAE5B,IAAA,MAAM,EAAA,GAAK,CAAC,OAAA,MAAyC;AAAA,MACnD,QAAQ,GAAA,CAAI,MAAA;AAAA,MACZ,aAAA;AAAA,MACA,MAAA,EAAQ,IAAA,CAAK,KAAA,CAAM,EAAE,SAAS,CAAA;AAAA,MAC9B,IAAA,EAAM,IAAI,UAAA,CAAW;AAAA,QACnB,MAAM,GAAA,CAAI,IAAA;AAAA,QACV,QAAA,EAAU,aAAA;AAAA,QACV,QAAQ,IAAA,CAAK,KAAA,CAAM,EAAE,OAAA,EAAS,QAAQ,CAAA;AAAA,QACtC,OAAO,GAAA,CAAI,KAAA;AAAA,QACX,UAAU,GAAA,CAAI,QAAA;AAAA,QACd,eAAA;AAAA,QACA;AAAA,OACD;AAAA,KACH,CAAA;AAEA,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,eAAA,CAAgB,EAAA,CAAG,UAAU,CAAC,CAAA;AACnD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,cAAA,CAAe,EAAA,CAAG,SAAS,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,eAAA,CAAgB,EAAA,CAAG,UAAU,CAAC,CAAA;AACpD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,WAAA,CAAY,EAAA,CAAG,MAAM,CAAC,CAAA;AACvC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,CAAgB,EAAA,CAAG,UAAU,CAAC,CAAA;AAClD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,qBAAA,CAAsB,EAAA,CAAG,SAAS,CAAC,CAAA;AACvD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,CAAa,EAAA,CAAG,OAAO,CAAC,CAAA;AAC1C,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,YAAA,CAAa,EAAA,CAAG,OAAO,CAAC,CAAA;AACzC,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,cAAA,CAAe,EAAA,CAAG,SAAS,CAAA,EAAG;AAAA,MAChD,UAAU,IAAA,CAAK,QAAA;AAAA,MACf,YAAY,IAAA,CAAK;AAAA,KAClB,CAAA;AACD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,WAAA,CAAY,EAAA,CAAG,MAAM,CAAC,CAAA;AACvC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,qBAAA,CAAsB,EAAA,CAAG,iBAAiB,CAAC,CAAA;AACrE,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,CAAiB,EAAA,CAAG,qBAAqB,CAAC,CAAA;AAC/D,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,CAAgB,EAAA,CAAG,qBAAqB,CAAC,CAAA;AAC7D,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,gBAAA,CAAiB,EAAA,CAAG,qBAAqB,CAAC,CAAA;AAC/D,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,qBAAA,CAAsB,EAAA,CAAG,KAAK,CAAC,CAAA;AACzD,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,aAAA,CAAc,EAAA,CAAG,QAAQ,CAAC,CAAA;AAC5C,IAAA,IAAA,CAAK,WAAA,GAAc,IAAI,kBAAA,CAAmB,EAAA,CAAG,cAAc,CAAC,CAAA;AAC5D,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,mBAAA,CAAoB,EAAA,CAAG,cAAc,CAAC,CAAA;AAC9D,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,mBAAA,CAAoB,EAAA,CAAG,eAAe,CAAC,CAAA;AAC/D,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,mBAAA,CAAoB,EAAA,CAAG,eAAe,CAAC,CAAA;AAC/D,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,mBAAA,CAAoB,EAAA,CAAG,eAAe,CAAC,CAAA;AAChE,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,iBAAA,CAAkB,EAAA,CAAG,gBAAgB,CAAC,CAAA;AAC5D,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,mBAAA,CAAoB,EAAA,CAAG,eAAe,CAAC,CAAA;AAChE,IAAA,IAAA,CAAK,IAAA,GAAO,IAAI,UAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA;AACpC,IAAA,IAAA,CAAK,cAAA,GAAiB,IAAI,qBAAA,CAAsB,EAAA,CAAG,iBAAiB,CAAC,CAAA;AACrE,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,cAAA,CAAe,EAAA,CAAG,SAAS,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,aAAA,CAAc,EAAA,CAAG,QAAQ,CAAC,CAAA;AAC7C,IAAA,IAAA,CAAK,EAAA,GAAK,IAAI,SAAA,CAAU,EAAA,CAAG,IAAI,CAAC,CAAA;AAChC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,UAAA,CAAW,EAAA,CAAG,KAAK,CAAC,CAAA;AACrC,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,aAAA,CAAc,EAAA,CAAG,QAAQ,CAAC,CAAA;AAC7C,IAAA,IAAA,CAAK,YAAA,GAAe,IAAI,mBAAA,CAAoB,EAAA,CAAG,eAAe,CAAC,CAAA;AAC/D,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,CAAa,EAAA,CAAG,OAAO,CAAC,CAAA;AAC1C,IAAA,IAAA,CAAK,MAAA,GAAS,IAAI,YAAA,CAAa,EAAA,CAAG,OAAO,CAAC,CAAA;AAC1C,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,cAAA,CAAe,EAAA,CAAG,SAAS,CAAC,CAAA;AACjD,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,eAAA,CAAgB,EAAA,CAAG,UAAU,CAAC,CAAA;AACpD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,CAAgB,EAAA,CAAG,UAAU,CAAC,CAAA;AAClD,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,cAAA,CAAe,EAAA,CAAG,SAAS,CAAC,CAAA;AAC/C,IAAA,IAAA,CAAK,UAAA,GAAa,IAAI,iBAAA,CAAkB,EAAA,CAAG,aAAa,CAAC,CAAA;AACzD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,CAAgB,EAAA,CAAG,UAAU,CAAC,CAAA;AAClD,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAI,mBAAA,CAAoB,EAAA,CAAG,eAAe,CAAC,CAAA;AACxD,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,cAAA,CAAe,EAAA,CAAG,SAAS,CAAC,CAAA;AAChD,IAAA,IAAA,CAAK,OAAA,GAAU,IAAI,aAAA,CAAc,EAAA,CAAG,QAAQ,CAAC,CAAA;AAC7C,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,eAAA,CAAgB,EAAA,CAAG,WAAW,CAAC,CAAA;AACnD,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAI,oBAAA,CAAqB,EAAA,CAAG,gBAAgB,CAAC,CAAA;AAClE,IAAA,IAAA,CAAK,SAAA,GAAY,IAAI,eAAA,CAAgB,EAAA,CAAG,UAAU,CAAC,CAAA;AAAA,EACrD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,qBAAqB,GAAA,EAKZ;AACP,IAAA,IAAI,GAAA,CAAI,aAAa,MAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,cAAA,CAAe,QAAA,GAAW,GAAA,CAAI,QAAA,IAAY,MAAA;AAAA,IACjD;AACA,IAAA,MAAM,EAAE,QAAA,EAAU,SAAA,EAAW,GAAG,cAAa,GAAI,GAAA;AAGjD,IAAA,IAAI,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,SAAS,CAAA,EAAG;AACxC,MAAA,IAAA,CAAK,aAAA,CAAc,sBAAsB,YAAY,CAAA;AAAA,IACvD;AAAA,EACF;AAAA;AAAA,EAGA,WAAA,CAAY,KAAA,EAAiB,IAAA,GAAmD,EAAC,EAAS;AACxF,IAAA,IAAA,CAAK,SAAS,GAAA,CAAI,KAAA,EAAO,KAAK,OAAA,EAAS,IAAA,CAAK,SAAS,KAAK,CAAA;AAAA,EAC5D;AAAA;AAAA,EAGA,YAAY,OAAA,EAAgC;AAC1C,IAAA,OAAO,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAAA,EAClC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,0BAA0B,SAAA,EAAgD;AACxE,IAAA,IAAA,CAAK,eAAA,CAAgB,IAAI,SAAS,CAAA;AAAA,EACpC;AACF;;;AC3QO,SAAS,iBAAiB,GAAA,EAAiC;AAChE,EAAA,IAAI,CAAC,KAAK,OAAO,EAAA;AACjB,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,WAAA,CAAY,GAAG,CAAA;AAChC,EAAA,OAAO,QAAQ,CAAA,GAAI,GAAA,CAAI,KAAA,CAAM,IAAA,GAAO,CAAC,CAAA,GAAI,EAAA;AAC3C","file":"index.cjs","sourcesContent":["/** Keys whose values are stripped from any serialised error body. */\nconst REDACTED_BODY_KEYS = new Set([\n \"access_token\", \"refresh_token\", \"token\", \"customertoken\", \"saastoken\",\n \"secret\", \"client_secret\", \"authorization\", \"password\",\n]);\n\nfunction scrub(body: unknown): unknown {\n if (Array.isArray(body)) return body.map(scrub);\n if (body && typeof body === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(body as Record<string, unknown>)) {\n out[k] = REDACTED_BODY_KEYS.has(k.toLowerCase()) ? \"***redacted***\" : scrub(v);\n }\n return out;\n }\n return body;\n}\n\n/** Base class for every error thrown by the SDK. */\nexport class EmporixError extends Error {\n readonly status: number | undefined;\n readonly body: unknown;\n constructor(message: string, status?: number, body?: unknown) {\n super(message);\n this.name = new.target.name;\n this.status = status;\n this.body = body;\n Object.setPrototypeOf(this, new.target.prototype);\n }\n /** Safe serialisation — token-like body fields are redacted. */\n toJSON(): Record<string, unknown> {\n return { name: this.name, message: this.message, status: this.status, body: scrub(this.body) };\n }\n}\n\n/** 401 — authentication failed or token expired. */\nexport class EmporixAuthError extends EmporixError {}\n/** 403 — authenticated but not permitted. */\nexport class EmporixForbiddenError extends EmporixError {}\n/** 404 — resource not found. */\nexport class EmporixNotFoundError extends EmporixError {}\n/** 400/422 — request validation failed. */\nexport class EmporixValidationError extends EmporixError {}\n/** 5xx — server-side failure. */\nexport class EmporixServerError extends EmporixError {}\n\n/**\n * 403 with a `missing scope: <name>` hint in the body's `details` array.\n * Subclasses {@link EmporixForbiddenError} so existing 403 catches still work.\n */\nexport class EmporixInsufficientScopeError extends EmporixForbiddenError {\n readonly requiredScope: string | undefined;\n constructor(message: string, status: number, body: unknown, requiredScope?: string) {\n super(message, status, body);\n this.requiredScope = requiredScope;\n }\n}\n\nconst SCOPE_HINT_RE = /missing scope[: ]+([a-z0-9._-]+)/i;\n\nfunction extractRequiredScope(body: unknown): string | undefined {\n if (body && typeof body === \"object\" && \"details\" in body) {\n const details = (body as { details?: unknown }).details;\n if (Array.isArray(details)) {\n for (const d of details) {\n if (typeof d === \"string\") {\n const m = d.match(SCOPE_HINT_RE);\n if (m) return m[1];\n }\n }\n }\n }\n return undefined;\n}\n\n/** Maps an HTTP status to the matching {@link EmporixError} subclass. */\nexport function errorFromResponse(status: number, message: string, body: unknown): EmporixError {\n if (status === 401) return new EmporixAuthError(message, status, body);\n if (status === 403) {\n const scope = extractRequiredScope(body);\n if (scope) return new EmporixInsufficientScopeError(message, status, body, scope);\n return new EmporixForbiddenError(message, status, body);\n }\n if (status === 404) return new EmporixNotFoundError(message, status, body);\n if (status === 400 || status === 422) return new EmporixValidationError(message, status, body);\n if (status >= 500) return new EmporixServerError(message, status, body);\n return new EmporixError(message, status, body);\n}\n","import type { LoggerConfig } from \"./logger\";\nimport type { TokenProvider } from \"./auth\";\n\n/** Default Emporix API host. */\nexport const DEFAULT_HOST = \"https://api.emporix.io\";\n\n/**\n * Tenant guard. Emporix docs only state \"always lowercase\"; the 3–16 char\n * `^[a-z][a-z0-9]+$` rule is an SDK-side guard, not a documented constraint.\n */\nconst TENANT_RE = /^[a-z][a-z0-9]{2,15}$/;\n\n/** A client-credentials credential set (service / custom). */\nexport interface ServiceCredentials {\n clientId: string;\n secret: string;\n scope?: string;\n}\n\n/** Storefront credential — anonymous token needs the client id only, no secret. */\nexport interface StorefrontCredentials {\n clientId: string;\n /**\n * Session context bound at anonymous-login time. Required for\n * `prices.matchByContext` to resolve currency/site/country server-side.\n * `targetLocation` is an ISO country code.\n */\n context?: { currency?: string; siteCode?: string; targetLocation?: string; language?: string };\n}\n\n/** User-supplied SDK configuration. */\nexport interface EmporixConfig {\n tenant: string;\n host?: string;\n credentials: {\n /**\n * Service (client-credentials) credentials. Optional: storefront/SPA apps\n * use only `storefront` (anonymous) + caller-supplied customer tokens and\n * must never ship a backend secret. Required only when a `service`\n * AuthContext is actually used — enforced lazily by the TokenProvider.\n */\n backend?: ServiceCredentials;\n storefront?: StorefrontCredentials;\n custom?: Record<string, ServiceCredentials>;\n };\n tokenProvider?: TokenProvider;\n timeouts?: { connectMs?: number; readMs?: number };\n retry?: { maxAttempts?: number };\n cache?: { expirationBufferSeconds?: number; maxLifetimeSeconds?: number };\n logger?: LoggerConfig;\n}\n\n/** Fully-resolved configuration with defaults applied. */\nexport interface ResolvedConfig {\n tenant: string;\n host: string;\n credentials: EmporixConfig[\"credentials\"];\n tokenProvider: TokenProvider | undefined;\n timeouts: { connectMs: number; readMs: number };\n retry: { maxAttempts: number };\n cache: { expirationBufferSeconds: number; maxLifetimeSeconds: number };\n logger: LoggerConfig | undefined;\n}\n\n/** Validates user config and applies defaults. Throws on invalid tenant/credentials. */\nexport function validateConfig(input: EmporixConfig): ResolvedConfig {\n if (!TENANT_RE.test(input.tenant)) {\n throw new Error(\n `Invalid tenant \"${input.tenant}\": must be lowercase, 3–16 chars, match ^[a-z][a-z0-9]+$`,\n );\n }\n if (!input.credentials) {\n throw new Error(\"credentials is required (provide at least one of backend/storefront/custom)\");\n }\n return {\n tenant: input.tenant,\n host: input.host ?? DEFAULT_HOST,\n credentials: input.credentials,\n tokenProvider: input.tokenProvider,\n timeouts: {\n connectMs: input.timeouts?.connectMs ?? 10_000,\n readMs: input.timeouts?.readMs ?? 60_000,\n },\n retry: { maxAttempts: input.retry?.maxAttempts ?? 3 },\n cache: {\n expirationBufferSeconds: input.cache?.expirationBufferSeconds ?? 60,\n maxLifetimeSeconds: input.cache?.maxLifetimeSeconds ?? 3600,\n },\n logger: input.logger,\n };\n}\n","/** Log severity, low → high. */\nexport type LogLevel = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\";\n\n/** Numeric ordering used for fast comparison. */\nexport const LEVEL: Record<LogLevel, number> = {\n trace: 10, debug: 20, info: 30, warn: 40, error: 50, silent: 60,\n};\n\n/** Services that bind their own logger and are independently level-controllable. */\nexport type ServiceName =\n | \"customer\"\n | \"product\"\n | \"category\"\n | \"cart\"\n | \"checkout\"\n | \"payment\"\n | \"price\"\n | \"media\"\n | \"segment\"\n | \"site\"\n | \"session-context\"\n | \"customer-management\"\n | \"iam\"\n | \"orders\"\n | \"sales-orders\"\n | \"availability\"\n | \"configuration\"\n | \"shopping-list\"\n | \"ai-rag-indexer\"\n | \"sequential-id\"\n | \"fee\"\n | \"webhook\"\n | \"schema\"\n | \"ai\"\n | \"tax\"\n | \"coupon\"\n | \"reward-points\"\n | \"brand\"\n | \"label\"\n | \"country\"\n | \"currency\"\n | \"shipping\"\n | \"returns\"\n | \"sepa-export\"\n | \"indexing\"\n | \"unit-handling\"\n | \"catalog\"\n | \"vendor\"\n | \"pick-pack\"\n | \"customer-admin\"\n | \"approval\"\n | \"cloud-functions\"\n | \"http\"\n | \"auth\";\n\n/** Arbitrary structured fields attached to a log line. */\nexport interface LogFields { [key: string]: unknown; }\n\n/** The logger contract consumers may implement or swap. */\nexport interface Logger {\n level: LogLevel;\n isLevelEnabled(level: LogLevel): boolean;\n trace(msg: string, fields?: LogFields): void;\n debug(msg: string, fields?: LogFields): void;\n info(msg: string, fields?: LogFields): void;\n warn(msg: string, fields?: LogFields): void;\n error(msg: string, fields?: LogFields): void;\n child(bindings: LogFields): Logger;\n}\n\n/** Object form of logger configuration. */\nexport interface LoggerObjectConfig {\n level?: LogLevel;\n services?: Partial<Record<ServiceName, LogLevel>>;\n pretty?: boolean;\n redact?: string[];\n}\n\n/** `false` → noop logger; `Logger` → user-supplied; object → built-in console logger. */\nexport type LoggerConfig = false | Logger | LoggerObjectConfig;\n\nfunction isValidLevel(v: string | undefined): v is LogLevel {\n return v !== undefined && v in LEVEL;\n}\n\n/** Browser-safe env read — `process` is undefined in browsers/edge runtimes. */\nfunction readEnv(name: string): string | undefined {\n try {\n return typeof process !== \"undefined\" && process.env ? process.env[name] : undefined;\n } catch {\n return undefined;\n }\n}\n\n/**\n * Resolves the effective level per service following:\n * env per-service > env global > config.services[svc] > config.level > \"warn\".\n * Runtime `set()` mutates programmatic levels but never overrides env-set ones\n * unless `force` is passed.\n */\nexport class LevelResolver {\n private cfgLevel: LogLevel;\n private cfgServices: Partial<Record<ServiceName, LogLevel>>;\n private forcedServices: Partial<Record<ServiceName, LogLevel>> = {};\n private forcedGlobal: LogLevel | undefined;\n private warned = false;\n\n constructor(\n cfg: LoggerObjectConfig,\n private readonly warn: (msg: string) => void = () => {},\n ) {\n this.cfgLevel = cfg.level ?? \"warn\";\n this.cfgServices = { ...cfg.services };\n }\n\n private envFor(svc: ServiceName): LogLevel | undefined {\n const raw = readEnv(`EMPORIX_LOG_LEVEL_${svc.toUpperCase()}`);\n if (raw === undefined) return undefined;\n if (isValidLevel(raw)) return raw;\n if (!this.warned) {\n this.warned = true;\n this.warn(`Invalid EMPORIX_LOG_LEVEL_${svc.toUpperCase()}=\"${raw}\" ignored`);\n }\n return undefined;\n }\n\n private envGlobal(): LogLevel | undefined {\n const raw = readEnv(\"EMPORIX_LOG_LEVEL\");\n if (raw === undefined) return undefined;\n if (isValidLevel(raw)) return raw;\n if (!this.warned) {\n this.warned = true;\n this.warn(`Invalid EMPORIX_LOG_LEVEL=\"${raw}\" ignored`);\n }\n return undefined;\n }\n\n /**\n * Effective level for a service. Forced overrides (from `set(..., force)`)\n * take precedence over env vars; otherwise env > programmatic config.\n */\n get(svc: ServiceName): LogLevel {\n return (\n this.forcedServices[svc] ??\n this.envFor(svc) ??\n this.forcedGlobal ??\n this.envGlobal() ??\n this.cfgServices[svc] ??\n this.cfgLevel ??\n \"warn\"\n );\n }\n\n /** Numeric effective level for a service. */\n numericLevel(svc: ServiceName): number {\n return LEVEL[this.get(svc)];\n }\n\n /** True if `svc`'s effective level allows emitting at `at`. */\n isAtLeast(svc: ServiceName, at: LogLevel): boolean {\n return this.numericLevel(svc) <= LEVEL[at];\n }\n\n /** Mutates programmatic level (global or one service). Env-set levels are sticky unless `force`. */\n set(level: LogLevel, svc?: ServiceName, force = false): void {\n if (svc) {\n const envBound = readEnv(`EMPORIX_LOG_LEVEL_${svc.toUpperCase()}`) !== undefined;\n if (envBound && !force) {\n this.warn(`Level for \"${svc}\" is env-controlled; pass force to override`);\n return;\n }\n if (force) this.forcedServices[svc] = level;\n else this.cfgServices[svc] = level;\n } else {\n const envBound = readEnv(\"EMPORIX_LOG_LEVEL\") !== undefined;\n if (envBound && !force) {\n this.warn(\"Global level is env-controlled; pass force to override\");\n return;\n }\n if (force) this.forcedGlobal = level;\n else this.cfgLevel = level;\n }\n }\n}\n\n/** Default redaction floor — never reducible. */\nconst DEFAULT_REDACT = new Set([\n \"authorization\", \"password\", \"oldpassword\", \"newpassword\", \"clientsecret\",\n \"secret\", \"access_token\", \"refresh_token\", \"customertoken\", \"saastoken\",\n \"saas-token\", \"bearertoken\", \"apikey\", \"token\",\n]);\n\n/** Deep-clones `value`, replacing redacted keys with a mask. AuthContext token is stripped. */\nexport function redact(value: unknown, extra: string[] = []): unknown {\n const keys = new Set(DEFAULT_REDACT);\n for (const k of extra) keys.add(k.toLowerCase());\n const walk = (v: unknown): unknown => {\n if (Array.isArray(v)) return v.map(walk);\n if (v && typeof v === \"object\") {\n const src = v as Record<string, unknown>;\n // AuthContext: keep only `kind`.\n if (typeof src.kind === \"string\" && \"token\" in src) return { kind: src.kind };\n const out: Record<string, unknown> = {};\n for (const [k, val] of Object.entries(src)) {\n if (keys.has(k.toLowerCase())) {\n out[k] =\n k.toLowerCase() === \"authorization\" && typeof val === \"string\"\n ? \"Bearer ***redacted***\"\n : \"***redacted***\";\n } else {\n out[k] = walk(val);\n }\n }\n return out;\n }\n return v;\n };\n return walk(value);\n}\n\ninterface Sink {\n log: (...a: unknown[]) => void;\n info: (...a: unknown[]) => void;\n warn: (...a: unknown[]) => void;\n error: (...a: unknown[]) => void;\n}\n\nconst EMIT: Record<Exclude<LogLevel, \"silent\">, number> = {\n trace: LEVEL.trace, debug: LEVEL.debug, info: LEVEL.info, warn: LEVEL.warn, error: LEVEL.error,\n};\n\nabstract class BaseLogger implements Logger {\n constructor(\n protected readonly resolver: LevelResolver,\n protected readonly bindings: LogFields,\n protected readonly extraRedact: string[],\n ) {}\n private svc(): ServiceName {\n return (this.bindings.service as ServiceName) ?? \"http\";\n }\n get level(): LogLevel {\n return this.resolver.get(this.svc());\n }\n isLevelEnabled(level: LogLevel): boolean {\n return this.resolver.isAtLeast(this.svc(), level);\n }\n protected abstract emit(\n level: Exclude<LogLevel, \"silent\">,\n msg: string,\n fields: LogFields,\n ): void;\n private at(level: Exclude<LogLevel, \"silent\">, msg: string, fields?: LogFields): void {\n if (this.resolver.numericLevel(this.svc()) > EMIT[level]) return;\n const merged = { ...this.bindings, ...(fields ?? {}) };\n this.emit(level, msg, redact(merged, this.extraRedact) as LogFields);\n }\n trace(m: string, f?: LogFields): void { this.at(\"trace\", m, f); }\n debug(m: string, f?: LogFields): void { this.at(\"debug\", m, f); }\n info(m: string, f?: LogFields): void { this.at(\"info\", m, f); }\n warn(m: string, f?: LogFields): void { this.at(\"warn\", m, f); }\n error(m: string, f?: LogFields): void { this.at(\"error\", m, f); }\n abstract child(bindings: LogFields): Logger;\n}\n\nclass ConsoleLogger extends BaseLogger {\n constructor(\n resolver: LevelResolver,\n bindings: LogFields,\n extra: string[],\n private readonly sink: Sink,\n private readonly pretty: boolean,\n ) {\n super(resolver, bindings, extra);\n }\n protected emit(level: Exclude<LogLevel, \"silent\">, msg: string, fields: LogFields): void {\n if (this.pretty) {\n const fn =\n level === \"error\" ? this.sink.error\n : level === \"warn\" ? this.sink.warn\n : level === \"info\" ? this.sink.info\n : this.sink.log;\n fn(`[${level}] ${msg}`, fields);\n } else {\n this.sink.log(JSON.stringify({ ts: new Date().toISOString(), level, msg, ...fields }));\n }\n }\n child(bindings: LogFields): Logger {\n return new ConsoleLogger(\n this.resolver,\n { ...this.bindings, ...bindings },\n this.extraRedact,\n this.sink,\n this.pretty,\n );\n }\n}\n\nclass NoopLogger implements Logger {\n level: LogLevel = \"silent\";\n isLevelEnabled(): boolean { return false; }\n trace(): void {}\n debug(): void {}\n info(): void {}\n warn(): void {}\n error(): void {}\n child(): Logger { return this; }\n}\n\n/** Creates the built-in console logger. `opts.sink` overrides `console` (used in tests). */\nexport function createConsoleLogger(\n resolver: LevelResolver,\n bindings: LogFields = {},\n opts: { pretty?: boolean; redact?: string[]; sink?: Sink } = {},\n): Logger {\n const pretty = opts.pretty ?? readEnv(\"NODE_ENV\") !== \"production\";\n const sink: Sink = opts.sink ?? {\n log: console.log,\n info: console.info,\n warn: console.warn,\n error: console.error,\n };\n return new ConsoleLogger(resolver, bindings, opts.redact ?? [], sink, pretty);\n}\n\n/** Creates a logger that discards everything. */\nexport function createNoopLogger(): Logger {\n return new NoopLogger();\n}\n","import type { ResolvedConfig, ServiceCredentials } from \"./config\";\nimport { EmporixAuthError } from \"./errors\";\n\n/** Which token a call should use. */\nexport type AuthKind = \"service\" | \"customer\" | \"anonymous\" | \"raw\";\n\n/** Caller-supplied, per-call auth selector. Never stored on the client. */\nexport type AuthContext =\n | { kind: \"service\"; credentials?: string }\n | { kind: \"anonymous\" }\n | { kind: \"customer\"; token: string }\n | { kind: \"raw\"; token: string };\n\n/**\n * Supplies a fresh customer token when a `customer`-kind request 401s. The host\n * (e.g. EmporixProvider) implements this; the SDK never refreshes the\n * caller-owned customer token unless a refresher is registered.\n */\nexport interface CustomerTokenRefresher {\n /**\n * Called on a `customer`-kind 401. Receives the token that just failed;\n * returns a fresh customer token to retry with, or `null` to give up (the\n * 401 then propagates as EmporixAuthError).\n */\n refresh(expiredToken: string): Promise<string | null>;\n}\n\n/** An obtained anonymous storefront session. */\nexport interface AnonymousSession {\n accessToken: string;\n refreshToken: string;\n sessionId: string;\n expiresIn: number;\n}\n\n/**\n * Persistence callback for anonymous sessions. `read` is called once on the\n * first need for an anonymous token to bootstrap a possibly-existing session;\n * `write` is called after every successful login or refresh. `write(null)`\n * means the SDK is invalidating the stored session.\n */\nexport interface AnonymousSessionStore {\n read(): { refreshToken: string; sessionId: string } | null;\n write(session: { refreshToken: string; sessionId: string } | null): void;\n}\n\n/** Supplies SDK-managed tokens (service/custom + anonymous). May be user-injected. */\nexport interface TokenProvider {\n /** Service/custom client-credentials token for the named credential set. */\n getToken(credentialSet: string): Promise<string>;\n /** Cached anonymous storefront session (preserves sessionId across refreshes). */\n getAnonymousToken(): Promise<AnonymousSession>;\n /** Refresh the anonymous session, preserving sessionId. */\n refreshAnonymous?(): Promise<AnonymousSession>;\n /** Invalidate a cached SDK-managed token so the next call re-auths. */\n invalidate?(credentialSet: string): void;\n /** Invalidate the cached anonymous session entirely (next call re-logs in). */\n invalidateAnonymous?(): void;\n /**\n * Mark the anonymous access token stale but keep the refresh token, so the\n * next {@link getAnonymousToken} refreshes (preserving sessionId) rather\n * than starting a brand-new session.\n */\n expireAnonymous?(): void;\n /**\n * Install a persistence adapter for the anonymous session. The host (e.g.\n * `EmporixProvider`) calls this at construction so the SDK can bootstrap\n * an existing session and persist refreshes. Idempotent: a later call\n * replaces the previous adapter.\n */\n attachAnonymousStore?(store: AnonymousSessionStore): void;\n /**\n * Override the storefront context (currency/site/country) used for the next\n * anonymous login, then invalidate the current anonymous session so it\n * re-mints with the new context. No-op for providers without anon support.\n */\n setAnonymousContext?(ctx: {\n currency?: string;\n siteCode?: string;\n targetLocation?: string;\n }): void;\n /**\n * Subscribe to token-refresh events. Optional — implementations may no-op.\n * Returns an unsubscribe function. `DefaultTokenProvider` emits for the\n * anonymous-login / anonymous-refresh paths.\n */\n onRefresh?(\n listener: (event: { kind: \"anonymous\" | \"customer\"; success: boolean }) => void,\n ): () => void;\n}\n\n/** Tiny constructors for {@link AuthContext}. */\nexport const auth = {\n /** Service/custom credential set (default `backend`). */\n service: (credentials?: string): AuthContext =>\n credentials === undefined ? { kind: \"service\" } : { kind: \"service\", credentials },\n /** Cached anonymous storefront token. */\n anonymous: (): AuthContext => ({ kind: \"anonymous\" }),\n /** Caller-owned customer bearer token. */\n customer: (token: string): AuthContext => ({ kind: \"customer\", token }),\n /** Exact token, no transformation (SSO / token-exchange). */\n raw: (token: string): AuthContext => ({ kind: \"raw\", token }),\n};\n\n/** Resolves an {@link AuthContext} to a concrete bearer token. */\nexport async function resolveToken(ctx: AuthContext, provider: TokenProvider): Promise<string> {\n switch (ctx.kind) {\n case \"service\":\n return provider.getToken(ctx.credentials ?? \"backend\");\n case \"anonymous\":\n return (await provider.getAnonymousToken()).accessToken;\n case \"customer\":\n case \"raw\":\n return ctx.token;\n }\n}\n\n/**\n * Late-bindable, single-flight holder for an optional\n * {@link CustomerTokenRefresher}. Single-flight is required because Emporix\n * rotates the refresh token on each refresh — concurrent refreshes would\n * invalidate each other. Off (returns `null`) until a refresher is set.\n */\nexport class CustomerRefreshRegistry {\n private refresher: CustomerTokenRefresher | null = null;\n private inflight: Promise<string | null> | null = null;\n\n set(refresher: CustomerTokenRefresher | null): void {\n this.refresher = refresher;\n }\n\n get enabled(): boolean {\n return this.refresher !== null;\n }\n\n /** Concurrent callers share one in-flight refresh. */\n refresh(expiredToken: string): Promise<string | null> {\n if (!this.refresher) return Promise.resolve(null);\n if (this.inflight) return this.inflight;\n const p = Promise.resolve(this.refresher.refresh(expiredToken)).finally(() => {\n this.inflight = null;\n });\n this.inflight = p;\n return p;\n }\n}\n\ninterface CacheEntry {\n token: string;\n expiresAt: number;\n obtainedAt: number;\n}\n\n/** SDK-owned token provider: client-credentials service tokens + anonymous session. */\nexport class DefaultTokenProvider implements TokenProvider {\n private readonly serviceCache = new Map<string, CacheEntry>();\n private readonly serviceLocks = new Map<string, Promise<string>>();\n private anon: (AnonymousSession & { expiresAt: number }) | undefined;\n private anonLock: Promise<AnonymousSession> | undefined;\n private anonStore?: AnonymousSessionStore;\n private contextOverride:\n | { currency?: string; siteCode?: string; targetLocation?: string }\n | undefined;\n private readonly refreshListeners = new Set<\n (event: { kind: \"anonymous\" | \"customer\"; success: boolean }) => void\n >();\n\n constructor(private readonly cfg: ResolvedConfig) {}\n\n onRefresh(\n listener: (event: { kind: \"anonymous\" | \"customer\"; success: boolean }) => void,\n ): () => void {\n this.refreshListeners.add(listener);\n return () => {\n this.refreshListeners.delete(listener);\n };\n }\n\n private notifyRefresh(kind: \"anonymous\" | \"customer\", success: boolean): void {\n for (const l of this.refreshListeners) {\n try {\n l({ kind, success });\n } catch {\n // Never let a telemetry listener break the auth path.\n }\n }\n }\n\n attachAnonymousStore(store: AnonymousSessionStore): void {\n this.anonStore = store;\n // Bootstrap `this.anon` from the store if we don't have it yet. The seeded\n // session has expiresAt = 0 so the next getAnonymousToken triggers a refresh\n // (which preserves sessionId) instead of a fresh login.\n if (!this.anon) {\n const persisted = store.read();\n if (persisted) {\n this.anon = {\n accessToken: \"\",\n refreshToken: persisted.refreshToken,\n sessionId: persisted.sessionId,\n expiresIn: 0,\n expiresAt: 0,\n };\n }\n }\n }\n\n private creds(set: string): ServiceCredentials {\n if (set === \"backend\") {\n const b = this.cfg.credentials.backend;\n if (!b?.clientId || !b.secret) {\n throw new EmporixAuthError(\n \"A 'service' AuthContext was used but credentials.backend is not configured\",\n );\n }\n return b;\n }\n const c = this.cfg.credentials.custom?.[set];\n if (!c) throw new Error(`Unknown credential set \"${set}\"`);\n return c;\n }\n\n private fresh(e: CacheEntry | undefined): boolean {\n if (!e) return false;\n const now = Date.now();\n if (now - e.obtainedAt >= this.cfg.cache.maxLifetimeSeconds * 1000) return false;\n return now < e.expiresAt;\n }\n\n async getToken(set: string): Promise<string> {\n // Surface an unknown credential set before entering the cache/lock path.\n this.creds(set);\n const cached = this.serviceCache.get(set);\n if (this.fresh(cached)) return cached!.token;\n const inflight = this.serviceLocks.get(set);\n if (inflight) return inflight;\n const p = this.requestServiceToken(set).finally(() => this.serviceLocks.delete(set));\n this.serviceLocks.set(set, p);\n return p;\n }\n\n private async requestServiceToken(set: string): Promise<string> {\n const c = this.creds(set);\n const body = new URLSearchParams({\n grant_type: \"client_credentials\",\n client_id: c.clientId,\n client_secret: c.secret,\n });\n if (c.scope) body.set(\"scope\", c.scope);\n const res = await fetch(`${this.cfg.host}/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/x-www-form-urlencoded\" },\n body,\n });\n const json = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n if (!res.ok) {\n throw new EmporixAuthError(`Token request failed for \"${set}\"`, res.status, json);\n }\n const obtainedAt = Date.now();\n const ttl = Number((json.expires_in as number | undefined) ?? 3600);\n this.serviceCache.set(set, {\n token: json.access_token as string,\n obtainedAt,\n expiresAt: obtainedAt + (ttl - this.cfg.cache.expirationBufferSeconds) * 1000,\n });\n return this.serviceCache.get(set)!.token;\n }\n\n invalidate(set: string): void {\n this.serviceCache.delete(set);\n }\n\n private anonFresh(): boolean {\n return !!this.anon && Date.now() < this.anon.expiresAt;\n }\n\n async getAnonymousToken(): Promise<AnonymousSession> {\n if (this.anonFresh()) return this.stripExpiry(this.anon!);\n if (this.anonLock) return this.anonLock;\n // Token expired but a refresh token survives → refresh to keep the same\n // sessionId; only fall back to a brand-new login if the refresh fails.\n const canRefresh = !!this.anon?.refreshToken;\n const obtain = canRefresh\n ? this.fetchAnonymous(\"refresh\").catch(() => this.fetchAnonymous(\"login\"))\n : this.fetchAnonymous(\"login\");\n const p = obtain.finally(() => {\n this.anonLock = undefined;\n });\n this.anonLock = p;\n return p;\n }\n\n /** Refreshes the anonymous session, preserving its sessionId. */\n async refreshAnonymous(): Promise<AnonymousSession> {\n if (!this.anon) return this.getAnonymousToken();\n return this.fetchAnonymous(\"refresh\");\n }\n\n invalidateAnonymous(): void {\n this.anon = undefined;\n this.anonStore?.write(null);\n }\n\n setAnonymousContext(ctx: {\n currency?: string;\n siteCode?: string;\n targetLocation?: string;\n }): void {\n const base = this.contextOverride ?? this.cfg.credentials.storefront?.context ?? {};\n this.contextOverride = { ...base, ...ctx };\n this.invalidateAnonymous();\n }\n\n /** Force a stale access token while keeping the refresh token + sessionId. */\n expireAnonymous(): void {\n if (this.anon) this.anon = { ...this.anon, expiresAt: 0 };\n }\n\n private stripExpiry(s: AnonymousSession & { expiresAt: number }): AnonymousSession {\n const { expiresAt: _expiresAt, ...rest } = s;\n return rest;\n }\n\n private async fetchAnonymous(mode: \"login\" | \"refresh\"): Promise<AnonymousSession> {\n const sf = this.cfg.credentials.storefront;\n if (!sf?.clientId) {\n throw new Error(\"credentials.storefront.clientId is required for anonymous tokens\");\n }\n const url = new URL(`${this.cfg.host}/customerlogin/auth/anonymous/${mode}`);\n url.searchParams.set(\"tenant\", this.cfg.tenant);\n url.searchParams.set(\"client_id\", sf.clientId);\n // Context is the runtime override (set via setAnonymousContext) if present,\n // else the config-fixed context.\n const c = this.contextOverride ?? sf.context;\n if (c?.currency) url.searchParams.set(\"currency\", c.currency);\n if (c?.siteCode) url.searchParams.set(\"siteCode\", c.siteCode);\n if (c?.targetLocation) url.searchParams.set(\"targetLocation\", c.targetLocation);\n if (mode === \"refresh\" && this.anon) {\n url.searchParams.set(\"refresh_token\", this.anon.refreshToken);\n }\n try {\n const res = await fetch(url, { method: \"GET\" });\n const json = (await res.json().catch(() => ({}))) as Record<string, unknown>;\n if (!res.ok) {\n this.notifyRefresh(\"anonymous\", false);\n throw new EmporixAuthError(`Anonymous token ${mode} failed`, res.status, json);\n }\n const obtainedAt = Date.now();\n this.anon = {\n accessToken: json.access_token as string,\n refreshToken: json.refresh_token as string,\n sessionId: json.sessionId as string,\n expiresIn: json.expires_in as number,\n expiresAt:\n obtainedAt +\n ((json.expires_in as number) - this.cfg.cache.expirationBufferSeconds) * 1000,\n };\n this.anonStore?.write({\n refreshToken: this.anon.refreshToken,\n sessionId: this.anon.sessionId,\n });\n this.notifyRefresh(\"anonymous\", true);\n return this.stripExpiry(this.anon);\n } catch (err) {\n // Re-throw EmporixAuthError as-is; for non-Emporix errors (network), also notify.\n if (!(err instanceof EmporixAuthError)) {\n this.notifyRefresh(\"anonymous\", false);\n }\n throw err;\n }\n }\n}\n// Customer-token refreshes happen via client.customers.refresh() and don't\n// route through this TokenProvider — only the anonymous flow notifies.\n// React-side useCustomerSession.refresh emits its own telemetry event in a\n// follow-up if needed.\n","import {\n type AuthContext,\n type TokenProvider,\n type CustomerRefreshRegistry,\n resolveToken,\n} from \"./auth\";\nimport { errorFromResponse } from \"./errors\";\nimport type { Logger } from \"./logger\";\n\n/** A single HTTP request through the SDK. */\nexport interface RequestOptions {\n method: \"GET\" | \"POST\" | \"PUT\" | \"PATCH\" | \"DELETE\";\n path: string;\n auth: AuthContext;\n query?: Record<string, string | number | undefined>;\n body?: unknown;\n /** Extra request headers (merged before auth; cannot override Authorization). */\n headers?: Record<string, string>;\n /** Per-request abort timeout override (ms). */\n timeoutMs?: number;\n}\n\n/** Construction options for {@link HttpClient}. */\nexport interface HttpClientOptions {\n host: string;\n provider: TokenProvider;\n logger: Logger;\n retry: { maxAttempts: number };\n timeouts: { connectMs: number; readMs: number };\n /** Override the retry backoff delay (ms → Promise). Defaults to a real timer. */\n sleep?: (ms: number) => Promise<void>;\n /** Opt-in customer-token refresher registry (off unless a refresher is set). */\n customerRefresh?: CustomerRefreshRegistry;\n /**\n * Shared storefront request context. When `language` is set, every request\n * carries `Accept-Language: <language>`. Mutated at runtime via\n * `EmporixClient.setStorefrontContext({ language })`.\n */\n requestContext?: { language?: string | undefined };\n}\n\nlet requestSeq = 0;\n\nfunction safeJson(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n/** Fetch wrapper: auth resolution, JSON parsing, typed error mapping, logging. */\nexport class HttpClient {\n private readonly sleep: (ms: number) => Promise<void>;\n constructor(private readonly opts: HttpClientOptions) {\n this.sleep =\n opts.sleep ?? ((ms: number) => new Promise<void>((r) => setTimeout(r, ms)));\n }\n\n private buildHeaders(\n o: RequestOptions,\n token: string,\n isFormData: boolean,\n ): Record<string, string> {\n return {\n ...(this.opts.requestContext?.language\n ? { \"Accept-Language\": this.opts.requestContext.language }\n : {}),\n ...(o.headers ?? {}),\n Authorization: `Bearer ${token}`,\n // JSON bodies: set Content-Type. FormData bodies: let `fetch`\n // emit `multipart/form-data; boundary=...` itself.\n ...(o.body !== undefined && !isFormData\n ? { \"Content-Type\": \"application/json\" }\n : {}),\n };\n }\n\n async request<T = unknown>(o: RequestOptions): Promise<T> {\n const requestId = `req-${++requestSeq}`;\n const log = this.opts.logger.child({ requestId });\n const url = new URL(this.opts.host + o.path);\n for (const [k, v] of Object.entries(o.query ?? {})) {\n if (v !== undefined) url.searchParams.set(k, String(v));\n }\n const sdkManaged = o.auth.kind === \"service\" || o.auth.kind === \"anonymous\";\n const maxAttempts = this.opts.retry.maxAttempts;\n let reauthed = false;\n let customerToken = o.auth.kind === \"customer\" ? o.auth.token : undefined;\n let customerReauthed = false;\n\n for (let attempt = 1; ; attempt++) {\n const token = customerToken ?? (await resolveToken(o.auth, this.opts.provider));\n log.debug(\"http request\", {\n authKind: o.auth.kind,\n method: o.method,\n url: url.pathname,\n attempt,\n });\n\n const controller = new AbortController();\n const timer = setTimeout(\n () => controller.abort(),\n o.timeoutMs ?? this.opts.timeouts.readMs,\n );\n const isFormData =\n typeof FormData !== \"undefined\" && o.body instanceof FormData;\n const init: RequestInit = {\n method: o.method,\n headers: this.buildHeaders(o, token, isFormData),\n signal: controller.signal,\n };\n if (o.body !== undefined) {\n init.body = isFormData ? (o.body as FormData) : JSON.stringify(o.body);\n }\n let res: Response;\n try {\n res = await fetch(url, init);\n } finally {\n clearTimeout(timer);\n }\n\n const text = await res.text();\n const parsed = text ? safeJson(text) : undefined;\n if (res.ok) {\n log.debug(\"http ok\", { status: res.status });\n return parsed as T;\n }\n\n // 401 asymmetry.\n if (res.status === 401) {\n if (sdkManaged && !reauthed) {\n reauthed = true;\n if (o.auth.kind === \"service\") {\n this.opts.provider.invalidate?.(o.auth.credentials ?? \"backend\");\n } else if (this.opts.provider.expireAnonymous) {\n // Keep the refresh token so the retry refreshes (same sessionId)\n // instead of starting a new anonymous session.\n this.opts.provider.expireAnonymous();\n } else {\n this.opts.provider.invalidateAnonymous?.();\n }\n log.warn(\"sdk-managed 401, re-authing once\", { authKind: o.auth.kind });\n continue;\n }\n if (\n o.auth.kind === \"customer\" &&\n !customerReauthed &&\n this.opts.customerRefresh?.enabled\n ) {\n customerReauthed = true;\n const fresh = await this.opts.customerRefresh.refresh(customerToken!);\n if (fresh) {\n customerToken = fresh;\n log.warn(\"customer 401, refreshed once\", { authKind: o.auth.kind });\n continue;\n }\n }\n throw errorFromResponse(res.status, `${o.method} ${o.path} → 401`, parsed);\n }\n\n // Retry 5xx / 429.\n const retryable = res.status >= 500 || res.status === 429;\n if (retryable && attempt < maxAttempts) {\n const retryAfter = Number(res.headers.get(\"Retry-After\"));\n const backoff =\n Number.isFinite(retryAfter) && retryAfter >= 0\n ? retryAfter * 1000\n : Math.min(1000 * 2 ** (attempt - 1), 8000) + Math.random() * 100;\n log.warn(\"retryable failure\", { status: res.status, attempt, backoffMs: backoff });\n await this.sleep(backoff);\n continue;\n }\n\n log.error(\"http error (final)\", { status: res.status, attempt });\n throw errorFromResponse(res.status, `${o.method} ${o.path} → ${res.status}`, parsed);\n }\n }\n\n /**\n * Single-shot fetch that returns the raw {@link Response} unparsed. Used by\n * endpoints whose responses are not JSON (binary downloads, redirect-only\n * endpoints). Skips the retry-on-5xx and 401-reauth-once paths intentionally\n * — those depend on parsing the JSON error body, which a raw consumer must\n * handle itself if needed. Auth resolution + timeout + logging are still\n * applied.\n *\n * `extra.redirect` is forwarded to `fetch` so callers can use `'manual'` to\n * capture 30x responses with their `Location` header (Node fetch exposes\n * the header in this mode; browser fetch returns an opaque response).\n */\n async requestRaw(\n o: RequestOptions,\n extra?: { redirect?: \"follow\" | \"manual\" | \"error\" },\n ): Promise<Response> {\n const requestId = `req-${++requestSeq}`;\n const log = this.opts.logger.child({ requestId });\n const url = new URL(this.opts.host + o.path);\n for (const [k, v] of Object.entries(o.query ?? {})) {\n if (v !== undefined) url.searchParams.set(k, String(v));\n }\n const token = await resolveToken(o.auth, this.opts.provider);\n log.debug(\"http requestRaw\", {\n authKind: o.auth.kind,\n method: o.method,\n url: url.pathname,\n redirect: extra?.redirect ?? \"follow\",\n });\n const controller = new AbortController();\n const timer = setTimeout(\n () => controller.abort(),\n o.timeoutMs ?? this.opts.timeouts.readMs,\n );\n const isFormData =\n typeof FormData !== \"undefined\" && o.body instanceof FormData;\n const init: RequestInit = {\n method: o.method,\n headers: this.buildHeaders(o, token, isFormData),\n signal: controller.signal,\n ...(extra?.redirect ? { redirect: extra.redirect } : {}),\n };\n if (o.body !== undefined) {\n init.body = isFormData ? (o.body as FormData) : JSON.stringify(o.body);\n }\n try {\n return await fetch(url, init);\n } finally {\n clearTimeout(timer);\n }\n }\n}\n","import type { AuthContext } from \"./auth\";\nimport { EmporixAuthError } from \"./errors\";\n\n/**\n * Enforces a caller-owned customer or raw token. Throws `EmporixAuthError`\n * for any other `AuthContext` kind (or when `auth` is missing). Shared by\n * services whose endpoints require a customer scope (`/me`, payments,\n * customer-segments…).\n */\nexport function requireCustomer(auth: AuthContext | undefined): AuthContext {\n if (auth && (auth.kind === \"customer\" || auth.kind === \"raw\")) return auth;\n throw new EmporixAuthError(\"This operation requires a customer or raw AuthContext\");\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext, AnonymousSession } from \"../core/auth\";\nimport { EmporixAuthError } from \"../core/errors\";\nimport { requireCustomer } from \"../core/require-customer\";\nimport type {\n Customer as GeneratedCustomer,\n Address as GeneratedAddress,\n CustomerSignup,\n CustomerUpdateDto,\n PasswordChangeDto,\n PasswordResetRequestDto,\n PasswordUpdate,\n AddressCreateDto,\n AddressUpdateDto,\n} from \"../generated/customer\";\n\n/**\n * Caller-owned customer session. Maps the Emporix `CustomerToken` wire shape to\n * idiomatic names: `access_token` → `customerToken`, `saas_token` →\n * `saasToken`. `saasToken` is a JWT required for the checkout (`saas-token`\n * header). The wire's `*_token` (snake_case) fields are canonical; the\n * camelCase variants are deprecated in the Emporix spec.\n */\nexport interface CustomerSession {\n customerToken: string;\n /** JWT required for completing checkout (sent as the `saas-token` header). */\n saasToken: string;\n refreshToken: string;\n /** Same session as the anonymous token — preserves the cart across login. */\n sessionId: string | undefined;\n /** Customer access-token lifetime in seconds. */\n expiresIn: number | undefined;\n /** Only set by `socialLogin`: the IdP access token echoed by Emporix. */\n socialAccessToken?: string;\n /** Only set by `socialLogin`: the IdP ID token echoed by Emporix. */\n socialIdToken?: string;\n}\n\n/** Customer profile as returned by the Customer service (all generated fields). */\nexport type Customer = GeneratedCustomer;\n\n/** A customer address as returned by the Customer service (all generated fields). */\nexport type Address = GeneratedAddress;\n\n/** Generated request bodies (caller sends the exact wire shape). */\nexport type CustomerSignupInput = CustomerSignup;\nexport type CustomerUpdateInput = CustomerUpdateDto;\nexport type PasswordChangeInput = PasswordChangeDto;\nexport type PasswordResetRequestInput = PasswordResetRequestDto;\nexport type PasswordResetConfirmInput = PasswordUpdate;\nexport type AddressCreateInput = AddressCreateDto;\nexport type AddressUpdateInput = AddressUpdateDto;\n\n/** Customer signup, session, profile and addresses. */\nexport class CustomerService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Obtains an anonymous storefront session (accessToken + sessionId + refreshToken). */\n async anonymous(): Promise<AnonymousSession> {\n return this.ctx.tokenProvider.getAnonymousToken();\n }\n\n /** Registers a customer. Default auth: anonymous. */\n async signup(\n input: CustomerSignupInput,\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<Customer> {\n return this.ctx.http.request<Customer>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/signup`,\n auth,\n body: input,\n });\n }\n\n /**\n * Logs a customer in. Threads the anonymous token so the session (and its\n * cart) survives — losing it silently creates a new session per Emporix docs.\n * Wire `accessToken` is mapped to `customerToken`.\n */\n async login(\n creds: { email: string; password: string },\n opts: { anonymousToken?: string } = {},\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<CustomerSession> {\n const effective: AuthContext = opts.anonymousToken\n ? { kind: \"raw\", token: opts.anonymousToken }\n : auth;\n const wire = await this.ctx.http.request<{\n access_token?: string;\n saas_token?: string;\n refresh_token?: string;\n session_id?: string;\n expires_in?: number;\n // Deprecated camelCase variants (Emporix spec marks these deprecated).\n accessToken?: string;\n saasToken?: string;\n refreshToken?: string;\n }>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/login`,\n auth: effective,\n body: creds,\n });\n // Wire→facade mapping. snake_case is canonical; camelCase is the\n // deprecated fallback (see design §2 — vendored spec is source of truth).\n return {\n customerToken: wire.access_token ?? wire.accessToken ?? \"\",\n saasToken: wire.saas_token ?? wire.saasToken ?? \"\",\n refreshToken: wire.refresh_token ?? wire.refreshToken ?? \"\",\n sessionId: wire.session_id,\n expiresIn: wire.expires_in,\n };\n }\n\n /**\n * Refreshes an authenticated customer session via its refresh token,\n * preserving the same `sessionId`. Calls\n * `GET /customer/{tenant}/refreshauthtoken?refreshToken=…`, which **must be\n * authorized with an anonymous token** (default auth: anonymous) — not the\n * expired customer token. The refresh response does **not** include a\n * `saas_token`; pass the original `saasToken` to carry it forward (it has\n * its own, independent lifetime).\n */\n async refresh(\n input: { refreshToken: string; saasToken?: string; legalEntityId?: string },\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<CustomerSession> {\n const query: Record<string, string> = { refreshToken: input.refreshToken };\n if (input.legalEntityId) query.legalEntityId = input.legalEntityId;\n const wire = await this.ctx.http.request<{\n access_token?: string;\n refresh_token?: string;\n session_id?: string;\n expires_in?: number;\n // Deprecated camelCase variants (Emporix spec marks these deprecated).\n accessToken?: string;\n refreshToken?: string;\n }>({\n method: \"GET\",\n path: `/customer/${this.ctx.tenant}/refreshauthtoken`,\n query,\n auth,\n });\n return {\n customerToken: wire.access_token ?? wire.accessToken ?? \"\",\n // Refresh does not return a saas_token — carry the original forward.\n saasToken: input.saasToken ?? \"\",\n refreshToken: wire.refresh_token ?? wire.refreshToken ?? \"\",\n sessionId: wire.session_id,\n expiresIn: wire.expires_in,\n };\n }\n\n /**\n * Logs the customer out server-side: `GET /customer/{tenant}/logout?\n * accessToken=…` authorized with the customer token. Invalidates the\n * access token (204 No Content). Requires customer/raw auth — the token is\n * sent both as the bearer and the `accessToken` query param (per Emporix).\n */\n async logout(auth?: AuthContext): Promise<void> {\n const ctx = requireCustomer(auth);\n const token = (ctx as { token: string }).token;\n await this.ctx.http.request<void>({\n method: \"GET\",\n path: `/customer/${this.ctx.tenant}/logout`,\n query: { accessToken: token },\n auth: ctx,\n });\n }\n\n /**\n * Authorization-Code SSO: exchanges the IdP `code` for an Emporix customer\n * session via `POST /customer/{tenant}/socialLogin`. The browser performs\n * the IdP redirect itself; the SDK only does this Emporix exchange.\n * Default auth: anonymous (Emporix requires an anonymous Bearer). The\n * response has no `session_id` and returns `expires_in` as a string —\n * normalized to a number here.\n */\n async socialLogin(\n input: { code: string; redirectUri: string; codeVerifier?: string; sessionId?: string },\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<CustomerSession> {\n const query: Record<string, string> = {\n code: input.code,\n redirect_uri: input.redirectUri,\n };\n if (input.codeVerifier) query.code_verifier = input.codeVerifier;\n const wire = await this.ctx.http.request<{\n social_access_token?: string;\n social_id_token?: string;\n access_token?: string;\n saas_token?: string;\n refresh_token?: string;\n session_id?: string;\n expires_in?: string | number;\n // Deprecated camelCase variants (Emporix spec marks these deprecated).\n accessToken?: string;\n saasToken?: string;\n refreshToken?: string;\n }>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/socialLogin`,\n query,\n auth,\n ...(input.sessionId ? { headers: { \"session-id\": input.sessionId } } : {}),\n });\n return {\n customerToken: wire.access_token ?? wire.accessToken ?? \"\",\n saasToken: wire.saas_token ?? wire.saasToken ?? \"\",\n refreshToken: wire.refresh_token ?? wire.refreshToken ?? \"\",\n sessionId: wire.session_id,\n expiresIn: wire.expires_in != null ? Number(wire.expires_in) : undefined,\n ...(wire.social_access_token ? { socialAccessToken: wire.social_access_token } : {}),\n ...(wire.social_id_token ? { socialIdToken: wire.social_id_token } : {}),\n };\n }\n\n /**\n * RFC 8693 token exchange: exchanges an external IdP JWT for an Emporix\n * customer session via `POST /customer/{tenant}/exchangeauthtoken`.\n * Emporix uses a proprietary query-param wire (not the RFC form body).\n * Default auth: anonymous. `config` selects a site-specific IdP config\n * (multi-site); omit for the tenant default. Returns `session_id` and a\n * fresh `saas_token`; `expires_in` is an integer (normalized anyway).\n */\n async exchangeToken(\n input: { subjectToken: string; config?: string },\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<CustomerSession> {\n const query: Record<string, string> = { subjectAccessToken: input.subjectToken };\n if (input.config) query.config = input.config;\n const wire = await this.ctx.http.request<{\n access_token?: string;\n saas_token?: string;\n refresh_token?: string;\n session_id?: string;\n expires_in?: string | number;\n accessToken?: string;\n saasToken?: string;\n refreshToken?: string;\n }>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/exchangeauthtoken`,\n query,\n auth,\n });\n return {\n customerToken: wire.access_token ?? wire.accessToken ?? \"\",\n saasToken: wire.saas_token ?? wire.saasToken ?? \"\",\n refreshToken: wire.refresh_token ?? wire.refreshToken ?? \"\",\n sessionId: wire.session_id,\n expiresIn: wire.expires_in != null ? Number(wire.expires_in) : undefined,\n };\n }\n\n /** Returns the authenticated customer. Requires customer/raw auth. */\n async me(auth?: AuthContext): Promise<Customer> {\n return this.ctx.http.request<Customer>({\n method: \"GET\",\n path: `/customer/${this.ctx.tenant}/me`,\n auth: requireCustomer(auth),\n });\n }\n\n /** Updates the authenticated customer. Requires customer/raw auth. */\n async update(patch: CustomerUpdateInput, auth?: AuthContext): Promise<Customer> {\n return this.ctx.http.request<Customer>({\n method: \"PUT\",\n path: `/customer/${this.ctx.tenant}/me`,\n auth: requireCustomer(auth),\n body: patch,\n });\n }\n\n /** Changes the password. Requires customer/raw auth. */\n async changePassword(input: PasswordChangeInput, auth?: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `/customer/${this.ctx.tenant}/password`,\n auth: requireCustomer(auth),\n body: input,\n });\n }\n\n /** Requests a password reset email. Default auth: anonymous. */\n async requestPasswordReset(\n input: PasswordResetRequestInput,\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/password/reset`,\n auth,\n body: input,\n });\n }\n\n /** Confirms a password reset. Default auth: anonymous. */\n async confirmPasswordReset(\n input: PasswordResetConfirmInput,\n auth: AuthContext = { kind: \"anonymous\" },\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/password/reset/confirm`,\n auth,\n body: input,\n });\n }\n\n /** Address sub-resource. All operations require customer/raw auth. */\n readonly addresses = {\n list: async (auth?: AuthContext): Promise<Address[]> =>\n this.ctx.http.request<Address[]>({\n method: \"GET\",\n path: `/customer/${this.ctx.tenant}/me/addresses`,\n auth: requireCustomer(auth),\n }),\n add: async (address: AddressCreateInput, auth?: AuthContext): Promise<Address> =>\n this.ctx.http.request<Address>({\n method: \"POST\",\n path: `/customer/${this.ctx.tenant}/me/addresses`,\n auth: requireCustomer(auth),\n body: address,\n }),\n update: async (id: string, patch: AddressUpdateInput, auth?: AuthContext): Promise<Address> =>\n this.ctx.http.request<Address>({\n method: \"PUT\",\n path: `/customer/${this.ctx.tenant}/me/addresses/${id}`,\n auth: requireCustomer(auth),\n body: patch,\n }),\n remove: async (id: string, auth?: AuthContext): Promise<void> =>\n this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `/customer/${this.ctx.tenant}/me/addresses/${id}`,\n auth: requireCustomer(auth),\n }),\n };\n}\n","import type { HttpClient } from \"./http\";\nimport type { TokenProvider, AuthContext } from \"./auth\";\nimport type { Logger } from \"./logger\";\n\n/** Shared dependencies every service facade receives. */\nexport interface ClientContext {\n tenant: string;\n http: HttpClient;\n tokenProvider: TokenProvider;\n logger: Logger;\n}\n\n/**\n * A cursor-paged collection — `pageNumber`/`pageSize` indexing with a\n * `hasNextPage` signal driven by the source page being full. Used by all\n * paginated services and hooks across the SDK.\n */\nexport interface PaginatedItems<T> {\n items: T[];\n pageNumber: number;\n pageSize: number;\n hasNextPage: boolean;\n}\n\n/** Default `AuthContext` applied by a service when the caller passes none. */\nexport type DefaultAuth = AuthContext | undefined;\n\n/**\n * Async-iterates every item across pages of a `PaginatedItems<T>` source.\n * Stops when the source reports `hasNextPage: false`.\n *\n * @param fetchPage - given a 1-based page number, returns the page.\n * @param start - first page to fetch (default `1`).\n */\nexport async function* iterateAll<T>(\n fetchPage: (pageNumber: number) => Promise<PaginatedItems<T>>,\n start = 1,\n): AsyncIterable<T> {\n let p = start;\n for (;;) {\n const page = await fetchPage(p);\n for (const it of page.items) yield it;\n if (!page.hasNextPage) return;\n p += 1;\n }\n}\n\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport { iterateAll } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n BasicProductWithId,\n BundleProductWithId,\n ParentVariantProductWithId,\n ProductMedia,\n} from \"../generated/product\";\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\n\n/** A product as returned by the Product service (all generated fields). */\nexport type Product = BasicProductWithId | BundleProductWithId | ParentVariantProductWithId;\n\n/** A single product media entry (generated; `ProductMedia` is the list type). */\nexport type Media = ProductMedia[number];\n\n/** Catalog reads. Default auth: anonymous; pass customer for personalized pricing. */\nexport class ProductService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Fetches one product by id. */\n async get(\n productId: string,\n _opts?: Record<string, never>,\n auth: AuthContext = ANON,\n ): Promise<Product> {\n return this.ctx.http.request<Product>({\n method: \"GET\",\n path: `/product/${this.ctx.tenant}/products/${productId}`,\n auth,\n });\n }\n\n /** Fetches one product by its code. */\n async getByCode(code: string, auth: AuthContext = ANON): Promise<Product> {\n const rows = await this.ctx.http.request<Product[]>({\n method: \"GET\",\n path: `/product/${this.ctx.tenant}/products`,\n query: { q: `code:${code}` },\n auth,\n });\n const first = rows[0];\n if (!first) throw new Error(`No product with code \"${code}\"`);\n return first;\n }\n\n /** One page of products. */\n async list(\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Product>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const items = await this.ctx.http.request<Product[]>({\n method: \"GET\",\n path: `/product/${this.ctx.tenant}/products`,\n query: { pageNumber, pageSize },\n auth,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Async-iterates every product across pages. */\n listAll(params: { pageSize?: number } = {}, auth: AuthContext = ANON): AsyncIterable<Product> {\n const pageSize = params.pageSize ?? 50;\n return iterateAll<Product>((pageNumber) => this.list({ pageNumber, pageSize }, auth));\n }\n\n /** Searches products by free-text query. */\n async search(\n query: string,\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Product>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const items = await this.ctx.http.request<Product[]>({\n method: \"GET\",\n path: `/product/${this.ctx.tenant}/products`,\n query: { q: query, pageNumber, pageSize },\n auth,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /**\n * Free-text product search by name. The product `q` is a `field:value` DSL,\n * so a bare term (e.g. \"in time\") 400s with \"No value for key …\". This builds\n * a `name:(~<term>)` regex filter (regex metacharacters escaped) and delegates\n * to {@link search}.\n */\n async searchByName(\n query: string,\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Product>> {\n const escaped = query.trim().replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n return this.search(`name:(~${escaped})`, params, auth);\n }\n\n /**\n * Bulk fetch by id. POSTs `/products/search` with `q=\"id:(id1,id2,…)\"`,\n * chunking when the list is larger than `options.chunkSize` (default\n * 100). An empty list short-circuits with no HTTP call. **Order is not\n * guaranteed** across chunks — re-index by `id` if order matters.\n */\n async searchByIds(\n ids: string[],\n options: { chunkSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Product[]> {\n if (ids.length === 0) return [];\n const chunkSize = options.chunkSize ?? 100;\n const chunks: string[][] = [];\n for (let i = 0; i < ids.length; i += chunkSize) {\n chunks.push(ids.slice(i, i + chunkSize));\n }\n const pages = await Promise.all(\n chunks.map((chunk) =>\n this.ctx.http.request<Product[]>({\n method: \"POST\",\n path: `/product/${this.ctx.tenant}/products/search`,\n query: { pageSize: chunk.length },\n auth,\n body: { q: `id:(${chunk.join(\",\")})` },\n }),\n ),\n );\n return pages.flat();\n }\n\n /**\n * Bulk fetch by code. POSTs `/products/search` with `q=\"code:(c1,c2,…)\"`,\n * chunking when the list is larger than `options.chunkSize` (default 100).\n * Duplicate codes are de-duplicated. Codes containing query-delimiter\n * characters (`(`, `)`, `,`, whitespace, `\"`) are dropped with a logged\n * warning, because the Emporix `q` syntax uses them as delimiters and does\n * not support escaping them in a plain IN-list. An empty list — or one with\n * no safe codes — short-circuits with no HTTP call. **Order is not\n * guaranteed** across chunks — re-index by `code` if order matters.\n */\n async searchByCodes(\n codes: string[],\n options: { chunkSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Product[]> {\n const unique = [...new Set(codes)];\n const unsafe = /[(),\"\\s]/;\n const safe = unique.filter((c) => !unsafe.test(c));\n const dropped = unique.filter((c) => unsafe.test(c));\n if (dropped.length > 0) {\n this.ctx.logger.warn(\n \"products.searchByCodes: dropped codes containing query-delimiter characters\",\n { dropped },\n );\n }\n if (safe.length === 0) return [];\n const chunkSize = options.chunkSize ?? 100;\n const chunks: string[][] = [];\n for (let i = 0; i < safe.length; i += chunkSize) {\n chunks.push(safe.slice(i, i + chunkSize));\n }\n const pages = await Promise.all(\n chunks.map((chunk) =>\n this.ctx.http.request<Product[]>({\n method: \"POST\",\n path: `/product/${this.ctx.tenant}/products/search`,\n query: { pageSize: chunk.length },\n auth,\n body: { q: `code:(${chunk.join(\",\")})` },\n }),\n ),\n );\n return pages.flat();\n }\n\n /**\n * Streams the VARIANT children of a PARENT_VARIANT product, page by page,\n * via the search query `productType:VARIANT parentVariantId:<id>`. Default\n * pageSize 200. The query syntax (space-separated fields = implicit AND) is\n * encapsulated here so consumers don't build it themselves.\n */\n listVariantChildrenAll(\n parentVariantId: string,\n params: { pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): AsyncIterable<Product> {\n const pageSize = params.pageSize ?? 200;\n const q = `productType:VARIANT parentVariantId:${parentVariantId}`;\n return iterateAll<Product>((pageNumber) => this.search(q, { pageNumber, pageSize }, auth));\n }\n\n /**\n * Resolves ALL VARIANT children of a PARENT_VARIANT product into a flat\n * array (loads every page). Default pageSize 200. Returns `[]` when there are\n * no children — never throws.\n */\n async listVariantChildren(\n parentVariantId: string,\n params: { pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Product[]> {\n const out: Product[] = [];\n for await (const child of this.listVariantChildrenAll(parentVariantId, params, auth)) {\n out.push(child);\n }\n return out;\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport { iterateAll } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Product } from \"./product\";\nimport type { Category as GeneratedCategory, CategoryTree } from \"../generated/category\";\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\n\n/** A category as returned by the Category service (all generated fields). */\nexport type Category = GeneratedCategory;\n\n/** The category tree as returned by the Category service. */\nexport type CategoryNode = CategoryTree;\n\n/** Category reads. Default auth: anonymous. */\nexport class CategoryService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Fetches one category by id. */\n async get(categoryId: string, auth: AuthContext = ANON): Promise<Category> {\n return this.ctx.http.request<Category>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/categories/${categoryId}`,\n auth,\n });\n }\n\n /** One page of categories. */\n async list(\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Category>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const items = await this.ctx.http.request<Category[]>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/categories`,\n query: { pageNumber, pageSize },\n auth,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Async-iterates every category across pages. */\n listAll(params: { pageSize?: number } = {}, auth: AuthContext = ANON): AsyncIterable<Category> {\n const pageSize = params.pageSize ?? 50;\n return iterateAll<Category>((pageNumber) => this.list({ pageNumber, pageSize }, auth));\n }\n\n /**\n * The catalogue's **root categories** — the published category trees\n * (`GET /category-trees`). Use these for top-level storefront navigation;\n * drill into a node's children with {@link subcategories}.\n */\n async tree(auth: AuthContext = ANON): Promise<Category[]> {\n return this.ctx.http.request<Category[]>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/category-trees`,\n auth,\n });\n }\n\n /**\n * Direct child categories of a category (for hierarchy drill-down). Mirrors\n * {@link productsIn}: reads the category's **assignments** and keeps the\n * `CATEGORY` references, resolving them to full categories. Returns an empty\n * array when the category has no child categories.\n */\n async subcategories(\n categoryId: string,\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Category[]> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const assignments = await this.ctx.http.request<Array<{ ref?: { id?: string; type?: string } }>>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/categories/${categoryId}/assignments`,\n query: { pageNumber, pageSize },\n auth,\n });\n const categoryIds = assignments\n .map((a) => (a.ref?.type?.toUpperCase() === \"CATEGORY\" ? a.ref.id : undefined))\n .filter((id): id is string => Boolean(id));\n if (categoryIds.length === 0) return [];\n return this.searchByIds(categoryIds, {}, auth);\n }\n\n /**\n * One page of products in a category. The category service exposes products\n * as **assignments** (`/categories/{id}/assignments`) — references, not full\n * products — so this fetches a page of assignments, keeps the `PRODUCT`\n * references, and resolves them to full products via `/products/search`.\n * `hasNextPage` reflects the assignments page (the source of truth for\n * pagination).\n */\n async productsIn(\n categoryId: string,\n params: { pageNumber?: number; pageSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<PaginatedItems<Product>> {\n const pageNumber = params.pageNumber ?? 1;\n const pageSize = params.pageSize ?? 50;\n const assignments = await this.ctx.http.request<Array<{ ref?: { id?: string; type?: string } }>>({\n method: \"GET\",\n path: `/category/${this.ctx.tenant}/categories/${categoryId}/assignments`,\n query: { pageNumber, pageSize },\n auth,\n });\n const hasNextPage = assignments.length === pageSize;\n const productIds = assignments\n .map((a) => (a.ref?.type?.toUpperCase() === \"PRODUCT\" ? a.ref.id : undefined))\n .filter((id): id is string => Boolean(id));\n if (productIds.length === 0) {\n return { items: [], pageNumber, pageSize, hasNextPage };\n }\n const items = await this.ctx.http.request<Product[]>({\n method: \"POST\",\n path: `/product/${this.ctx.tenant}/products/search`,\n query: { pageSize: productIds.length },\n auth,\n body: { q: `id:(${productIds.join(\",\")})` },\n });\n return { items, pageNumber, pageSize, hasNextPage };\n }\n\n /**\n * Bulk fetch by id. POSTs `/categories/search` with `q=\"id:(id1,id2,…)\"`,\n * chunking when the list is larger than `options.chunkSize` (default\n * 100). An empty list short-circuits with no HTTP call. **Order is not\n * guaranteed** across chunks — re-index by `id` if order matters.\n */\n async searchByIds(\n ids: string[],\n options: { chunkSize?: number } = {},\n auth: AuthContext = ANON,\n ): Promise<Category[]> {\n if (ids.length === 0) return [];\n const chunkSize = options.chunkSize ?? 100;\n const chunks: string[][] = [];\n for (let i = 0; i < ids.length; i += chunkSize) {\n chunks.push(ids.slice(i, i + chunkSize));\n }\n const pages = await Promise.all(\n chunks.map((chunk) =>\n this.ctx.http.request<Category[]>({\n method: \"POST\",\n path: `/category/${this.ctx.tenant}/categories/search`,\n query: { pageSize: chunk.length },\n auth,\n body: { q: `id:(${chunk.join(\",\")})` },\n }),\n ),\n );\n return pages.flat();\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixNotFoundError, EmporixValidationError } from \"../core/errors\";\nimport type {\n Cart as GeneratedCart,\n CreateCart,\n CreatedCart,\n CartItemRequest,\n UpdateCartItem,\n AddressRequest,\n BatchResponse as GeneratedBatchResponse,\n SingleBatchResponse as GeneratedSingleBatchResponse,\n} from \"../generated/cart\";\n\n/** A cart as returned by the Cart service (all generated fields). */\nexport type Cart = GeneratedCart;\n\n/** The cart-create response (`{ cartId, yrn }`, generated). */\nexport type CartCreated = CreatedCart;\n\n/** Generated request bodies (caller sends the exact wire shape). */\nexport type CreateCartInput = CreateCart;\nexport type CartItemInput = CartItemRequest;\nexport type CartItemUpdate = UpdateCartItem;\n\n/** Per-entry result of `addItemsBatch`. `status` is HTTP-style per entry (e.g. 201 = added, 4xx = failed). */\nexport type CartItemBatchEntry = GeneratedSingleBatchResponse;\n/** Response shape of `addItemsBatch` — one entry per input item, matching by `index`. */\nexport type CartItemsBatchResponse = GeneratedBatchResponse;\n\n/** An address payload for cart shipping/billing (generated). */\nexport type CartAddress = AddressRequest;\n\nfunction requireCartAuth(auth: AuthContext | undefined): AuthContext {\n if (auth && (auth.kind === \"customer\" || auth.kind === \"anonymous\")) return auth;\n throw new EmporixValidationError(\n \"CartService requires an explicit { kind: 'customer' } or { kind: 'anonymous' } AuthContext\",\n );\n}\n\nfunction requireCustomerAuth(auth: AuthContext | undefined): AuthContext {\n if (auth && auth.kind === \"customer\") return auth;\n throw new EmporixValidationError(\"cart.merge requires a { kind: 'customer' } AuthContext\");\n}\n\n/** Cart operations. Every method requires an explicit customer/anonymous context. */\nexport class CartService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/cart/${this.ctx.tenant}/carts`;\n }\n\n /** Creates a cart. */\n async create(\n input: CreateCartInput | undefined,\n auth: AuthContext,\n ): Promise<CartCreated> {\n return this.ctx.http.request<CartCreated>({\n method: \"POST\",\n path: this.base(),\n auth: requireCartAuth(auth),\n body: input ?? {},\n });\n }\n\n /** Fetches a cart by id. */\n async get(cartId: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"GET\",\n path: `${this.base()}/${cartId}`,\n auth: requireCartAuth(auth),\n });\n }\n\n /** Returns the current cart for the session, or null if none. */\n /**\n * Get the customer / anonymous cart matching the given criteria. Per Emporix:\n * uniqueness is defined by `siteCode` + `type` + `legalEntityId` +\n * (`customerId` derived from a customer token, or `sessionId` derived from an\n * anonymous token). With `create: true`, Emporix creates a new cart if none\n * matches.\n *\n * Returns `null` on 404 (no cart found and `create` was not set). All other\n * errors are propagated.\n */\n async getCurrent(\n auth: AuthContext,\n opts: { siteCode: string; type?: string; legalEntityId?: string; create?: boolean },\n ): Promise<Cart | null> {\n const query: Record<string, string | number> = { siteCode: opts.siteCode };\n if (opts.type !== undefined) query.type = opts.type;\n if (opts.legalEntityId !== undefined) query.legalEntityId = opts.legalEntityId;\n if (opts.create) query.create = \"true\";\n try {\n return await this.ctx.http.request<Cart>({\n method: \"GET\",\n path: this.base(),\n query,\n auth: requireCartAuth(auth),\n });\n } catch (e) {\n if (e instanceof EmporixNotFoundError) return null;\n throw e;\n }\n }\n\n /** Adds an item. */\n async addItem(\n cartId: string,\n item: CartItemInput,\n auth: AuthContext,\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"POST\",\n path: `${this.base()}/${cartId}/items`,\n auth: requireCartAuth(auth),\n body: item,\n });\n }\n\n /**\n * Adds multiple items in a single request via `POST /carts/{id}/itemsBatch`.\n * Server-side limit is 200 entries per call — callers handling larger sets\n * must chunk. The response carries a per-entry `status` (HTTP-style: 201\n * for added, 4xx/5xx for failed) and `index` matching the input position;\n * partial failures do **not** throw — inspect `status` per entry.\n */\n async addItemsBatch(\n cartId: string,\n items: CartItemInput[],\n auth: AuthContext,\n ): Promise<CartItemsBatchResponse> {\n return this.ctx.http.request<CartItemsBatchResponse>({\n method: \"POST\",\n path: `${this.base()}/${cartId}/itemsBatch`,\n auth: requireCartAuth(auth),\n body: items,\n });\n }\n\n /**\n * Updates an item. By default this is a **full replace** — the server expects\n * the complete item (e.g. `itemYrn` + the `price` row). Pass\n * `{ partial: true }` to send a **partial update** (`?partial=true`), e.g. a\n * quantity-only change with just `{ quantity }`.\n */\n async updateItem(\n cartId: string,\n itemId: string,\n patch: CartItemUpdate,\n auth: AuthContext,\n opts: { partial?: boolean } = {},\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"PUT\",\n path: `${this.base()}/${cartId}/items/${itemId}`,\n auth: requireCartAuth(auth),\n body: patch,\n ...(opts.partial ? { query: { partial: \"true\" } } : {}),\n });\n }\n\n /** Removes an item. */\n async removeItem(cartId: string, itemId: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"DELETE\",\n path: `${this.base()}/${cartId}/items/${itemId}`,\n auth: requireCartAuth(auth),\n });\n }\n\n /** Empties the cart. */\n async clear(cartId: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"DELETE\",\n path: `${this.base()}/${cartId}/items`,\n auth: requireCartAuth(auth),\n });\n }\n\n /** Applies a coupon. */\n async applyCoupon(cartId: string, code: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"POST\",\n path: `${this.base()}/${cartId}/coupons`,\n auth: requireCartAuth(auth),\n body: { code },\n });\n }\n\n /** Removes a coupon. */\n async removeCoupon(cartId: string, code: string, auth: AuthContext): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"DELETE\",\n path: `${this.base()}/${cartId}/coupons/${code}`,\n auth: requireCartAuth(auth),\n });\n }\n\n /** Sets the shipping address. */\n async setShippingAddress(\n cartId: string,\n address: CartAddress,\n auth: AuthContext,\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"PUT\",\n path: `${this.base()}/${cartId}/shipping-address`,\n auth: requireCartAuth(auth),\n body: address,\n });\n }\n\n /** Sets the billing address. */\n async setBillingAddress(\n cartId: string,\n address: CartAddress,\n auth: AuthContext,\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"PUT\",\n path: `${this.base()}/${cartId}/billing-address`,\n auth: requireCartAuth(auth),\n body: address,\n });\n }\n\n /**\n * Merges one or more anonymous carts into the specified customer cart.\n * Per Emporix: the target cart in the path **must belong to the logged-in\n * customer**, and each id in `anonymousCartIds` must belong to an anonymous\n * customer. Anonymous carts go `CLOSED` on success.\n *\n * Requires a customer `AuthContext`.\n */\n async merge(\n customerCartId: string,\n anonymousCartIds: string[],\n auth: AuthContext,\n ): Promise<Cart> {\n return this.ctx.http.request<Cart>({\n method: \"POST\",\n path: `${this.base()}/${customerCartId}/merge`,\n auth: requireCustomerAuth(auth),\n body: { carts: anonymousCartIds },\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixAuthError } from \"../core/errors\";\nimport type {\n ResponseCheckout,\n RequestCheckout,\n RequestFromQuoteCheckout,\n CustomerJson,\n} from \"../generated/checkout\";\n\n/** `requestCheckout` body (cart-based, generated). */\nexport type CheckoutInput = RequestCheckout;\n\n/** `requestFromQuoteCheckout` body (quote-based, generated). */\nexport type QuoteCheckoutInput = RequestFromQuoteCheckout;\n\n/** `responseCheckout` — the full generated checkout response. */\nexport type CheckoutResult = ResponseCheckout;\n\n/** Options for a checkout call. */\nexport interface CheckoutOptions {\n /** Customer `saasToken` from `customers.login()` — required for logged-in checkout. */\n saasToken?: string;\n /** Site code (`?siteCode=`). */\n siteCode?: string;\n}\n\nfunction isGuest(customer: CustomerJson | undefined): boolean {\n return customer?.guest === true;\n}\n\nfunction resolveAuth(auth: AuthContext | undefined, guest: boolean): AuthContext {\n if (auth && (auth.kind === \"customer\" || auth.kind === \"raw\")) return auth;\n if (guest && auth && auth.kind === \"anonymous\") return auth;\n throw new EmporixAuthError(\n \"checkout requires a customer/raw AuthContext (or anonymous for a guest checkout)\",\n );\n}\n\n/** Triggers Emporix checkout (atomic: validate → order → payment → close cart). */\nexport class CheckoutService {\n constructor(private readonly ctx: ClientContext) {}\n\n private headers(opts: CheckoutOptions, guest: boolean): Record<string, string> | undefined {\n if (guest || !opts.saasToken) return undefined;\n return { \"saas-token\": opts.saasToken };\n }\n\n private query(opts: CheckoutOptions): Record<string, string> | undefined {\n return opts.siteCode ? { siteCode: opts.siteCode } : undefined;\n }\n\n /** Checkout from a cart. Requires customer/raw auth (or anonymous for guest). */\n async placeOrder(\n input: CheckoutInput,\n auth?: AuthContext,\n opts: CheckoutOptions = {},\n ): Promise<CheckoutResult> {\n const guest = isGuest(input.customer);\n const headers = this.headers(opts, guest);\n const query = this.query(opts);\n return this.ctx.http.request<CheckoutResult>({\n method: \"POST\",\n path: `/checkout/${this.ctx.tenant}/checkouts/order`,\n auth: resolveAuth(auth, guest),\n ...(query ? { query } : {}),\n ...(headers ? { headers } : {}),\n body: input,\n });\n }\n\n /** Checkout from a quote. */\n async placeOrderFromQuote(\n input: QuoteCheckoutInput,\n auth?: AuthContext,\n opts: CheckoutOptions = {},\n ): Promise<CheckoutResult> {\n const headers = this.headers(opts, false);\n const query = this.query(opts);\n return this.ctx.http.request<CheckoutResult>({\n method: \"POST\",\n path: `/checkout/${this.ctx.tenant}/checkouts/order`,\n auth: resolveAuth(auth, false),\n ...(query ? { query } : {}),\n ...(headers ? { headers } : {}),\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixAuthError } from \"../core/errors\";\nimport { requireCustomer } from \"../core/require-customer\";\nimport type {\n PaymentModeFrontendResponse,\n AuthorizePaymentRequest,\n} from \"../generated/payment\";\n\n/** A frontend payment mode (generated). */\nexport type PaymentMode = PaymentModeFrontendResponse;\n\n/** Post-checkout authorize request (generated; caller sends the exact wire shape). */\nexport type AuthorizePaymentInput = AuthorizePaymentRequest;\n\n/** Post-checkout authorize result. */\nexport interface AuthorizePaymentResult {\n successful: boolean;\n paymentTransactionId?: string;\n authorizationToken?: string;\n requiresExternalPayment?: boolean;\n externalPaymentRedirectURL?: string;\n externalPaymentHttpMethod?: string;\n [k: string]: unknown;\n}\n\n/** Payment-Gateway: list frontend payment modes, authorize deferred payments. */\nexport class PaymentGatewayService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Lists configured frontend payment modes. */\n async listPaymentModes(auth?: AuthContext): Promise<PaymentMode[]> {\n return this.ctx.http.request<PaymentMode[]>({\n method: \"GET\",\n path: `/payment-gateway/${this.ctx.tenant}/paymentmodes/frontend`,\n auth: requireCustomer(auth),\n });\n }\n\n /** Authorizes a post-checkout (deferred) payment for an existing order. */\n async authorize(\n input: AuthorizePaymentInput,\n auth?: AuthContext,\n ): Promise<AuthorizePaymentResult> {\n return this.ctx.http.request<AuthorizePaymentResult>({\n method: \"POST\",\n path: `/payment-gateway/${this.ctx.tenant}/payment/frontend/authorize`,\n auth: requireCustomer(auth),\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixAuthError } from \"../core/errors\";\nimport type { Match, MatchByContext, MatchResponse } from \"../generated/price\";\n\n/** Session-context match request body (generated). */\nexport type PriceMatchByContextInput = MatchByContext;\n\n/** Explicit-context match request body (generated). */\nexport type PriceMatchInput = Match;\n\n/** Item (product or price) a price was matched for. */\nexport interface PriceMatchItemRef {\n itemType?: string;\n id?: string;\n /** Localized (or plain) product name — present on the live API, absent from the OpenAPI doc. */\n name?: Record<string, string> | string;\n}\n\n/**\n * A resolved price. Superset of the generated match-response schema: the\n * deployed API returns the matched item under `itemId` (with a localized\n * `name`), while the OpenAPI doc/codegen call it `itemRef`.\n */\nexport type PriceMatch = Omit<MatchResponse, \"itemRef\"> & {\n /** Item the price was matched for, as returned by the API. */\n itemId?: PriceMatchItemRef;\n /**\n * @deprecated The OpenAPI doc names this `itemRef`, but the deployed API\n * returns `itemId`. Mirrored from `itemId` for back-compat — prefer `itemId`.\n */\n itemRef?: PriceMatchItemRef;\n};\n\n/**\n * Normalizes a raw match row: the deployed API returns `itemId`, while the\n * codegen type calls it `itemRef`. Expose `itemId` canonically and mirror it\n * to the deprecated `itemRef` so existing consumers keep working.\n */\nfunction normalizeMatch(raw: MatchResponse): PriceMatch {\n const itemId = (raw as MatchResponse & { itemId?: PriceMatchItemRef }).itemId ?? raw.itemRef;\n const base = raw as PriceMatch;\n if (!itemId) return base;\n // Mirror only id/type into the deprecated itemRef (drop name); build without\n // explicit `undefined` for exactOptionalPropertyTypes.\n const itemRef: PriceMatchItemRef = {\n ...(itemId.itemType !== undefined ? { itemType: itemId.itemType } : {}),\n ...(itemId.id !== undefined ? { id: itemId.id } : {}),\n };\n return { ...base, itemId, itemRef };\n}\n\n/** Options for {@link PriceService.matchByContextChunked}. */\nexport interface MatchByContextChunkedOptions {\n /** Items per request. Default 50. Must be >= 1. */\n chunkSize?: number;\n /** Maximum number of requests in flight at once. Default 4. Must be >= 1. */\n concurrency?: number;\n /** Invoked once per failed chunk (default mode only — not when throwing). */\n onChunkError?: (err: unknown, chunkIndex: number) => void;\n /** When true, the first failing chunk rejects the whole call. Default false. */\n throwOnAnyChunkError?: boolean;\n}\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\nconst SERVICE: AuthContext = { kind: \"service\" };\n\nfunction requireContextAuth(auth: AuthContext | undefined): AuthContext {\n const a = auth ?? ANON;\n if (a.kind === \"anonymous\" || a.kind === \"customer\" || a.kind === \"raw\") return a;\n throw new EmporixAuthError(\n \"match-prices-by-context requires an anonymous, customer, or raw AuthContext\",\n );\n}\n\n/**\n * Price matching. The Cart service does not resolve prices — call this\n * explicitly before rendering money and again right before placing an order.\n * The SDK is stateless: it never caches or revalidates prices.\n */\nexport class PriceService {\n constructor(private readonly ctx: ClientContext) {}\n\n /**\n * Resolves prices using the session context bound to the bearer token\n * (currency/site/country were set at anonymous-login time). Default auth:\n * anonymous; pass a customer/raw context for personalized pricing.\n */\n async matchByContext(\n input: PriceMatchByContextInput,\n auth?: AuthContext,\n ): Promise<PriceMatch[]> {\n const rows = await this.ctx.http.request<MatchResponse[]>({\n method: \"POST\",\n path: `/price/${this.ctx.tenant}/match-prices-by-context`,\n auth: requireContextAuth(auth),\n body: input,\n });\n return rows.map(normalizeMatch);\n }\n\n /**\n * Resolves prices from an explicit context. Default auth: service\n * (requires `price.price_read` / `price.price_manage`).\n */\n async match(input: PriceMatchInput, auth: AuthContext = SERVICE): Promise<PriceMatch[]> {\n const rows = await this.ctx.http.request<MatchResponse[]>({\n method: \"POST\",\n path: `/price/${this.ctx.tenant}/match-prices`,\n auth,\n body: input,\n });\n return rows.map(normalizeMatch);\n }\n\n /**\n * Chunked variant of {@link matchByContext} for large `items` arrays. The\n * Emporix backend handles only a limited number of items per request\n * (production limit ~50), so this splits `input.items` into chunks and runs\n * `matchByContext` with bounded concurrency.\n *\n * By default a failing chunk is skipped (its items are absent from the\n * result) and `opts.onChunkError` is called once for it; pass\n * `throwOnAnyChunkError: true` to reject on the first failure instead.\n *\n * **Result order is not guaranteed** — match entries back to your items by\n * `priceId` / `itemId.id`.\n */\n async matchByContextChunked(\n input: PriceMatchByContextInput,\n opts: MatchByContextChunkedOptions = {},\n auth?: AuthContext,\n ): Promise<PriceMatch[]> {\n const chunkSize = opts.chunkSize ?? 50;\n const concurrency = opts.concurrency ?? 4;\n if (chunkSize < 1) throw new Error(\"chunkSize must be >= 1\");\n if (concurrency < 1) throw new Error(\"concurrency must be >= 1\");\n\n const items = input.items ?? [];\n if (items.length === 0) return [];\n\n const chunks: PriceMatchByContextInput[] = [];\n for (let i = 0; i < items.length; i += chunkSize) {\n chunks.push({ ...input, items: items.slice(i, i + chunkSize) });\n }\n\n const results: PriceMatch[][] = new Array(chunks.length);\n let cursor = 0;\n\n const worker = async (): Promise<void> => {\n for (;;) {\n const idx = cursor++;\n const chunk = chunks[idx];\n if (chunk === undefined) return; // past the end\n try {\n results[idx] = await this.matchByContext(chunk, auth);\n } catch (err) {\n if (opts.throwOnAnyChunkError) throw err;\n results[idx] = [];\n opts.onChunkError?.(err, idx);\n }\n }\n };\n\n const workerCount = Math.min(concurrency, chunks.length);\n await Promise.all(Array.from({ length: workerCount }, () => worker()));\n\n return results.flat();\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixError, errorFromResponse } from \"../core/errors\";\nimport type {\n AssetCreateBlob,\n AssetCreateLink,\n AssetUpdateBlob,\n AssetUpdateLink,\n GetAsset,\n RefId,\n} from \"../generated/media\";\n\n/** Generated media types (caller sends the exact wire shape). */\nexport type AssetCreateBlobInput = AssetCreateBlob;\nexport type AssetCreateLinkInput = AssetCreateLink;\nexport type AssetUpdateBlobInput = AssetUpdateBlob;\nexport type AssetUpdateLinkInput = AssetUpdateLink;\nexport type AssetUpdateInput = AssetUpdateBlob | AssetUpdateLink;\nexport type Asset = GetAsset;\nexport type AssetRefId = RefId;\n\n/**\n * Filter / pagination options for {@link MediaService.list}. The explicit\n * fields are typed for autocomplete; the index signature stays open so\n * Emporix `q`-syntax filters like `\"refIds.id\"` can be passed verbatim.\n */\nexport interface ListAssetsQuery {\n pageNumber?: number;\n pageSize?: number;\n /** Emporix sort syntax, e.g. `\"name,metadata.createdAt:desc\"`. */\n sort?: string;\n /** Emporix `q`-syntax filter, e.g. `\"name:hero\"`. */\n q?: string;\n [key: string]: string | number | undefined;\n}\n\n/**\n * Result of {@link MediaService.download}. The endpoint's behaviour depends\n * on the asset's `access`:\n * - `PUBLIC` assets respond with a 30x redirect whose `Location` header\n * carries the externally-cacheable storage URL — useful when the\n * storefront wants to send the user there directly.\n * - `PRIVATE` assets respond with the raw bytes (plus an `ETag` header\n * for caching). The asset is delivered through Cloudinary behind the\n * server-side service token, never publicly addressable.\n */\nexport type DownloadResult =\n | { kind: \"redirect\"; url: string }\n | {\n kind: \"bytes\";\n data: ArrayBuffer;\n etag?: string;\n contentType?: string;\n };\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\nfunction isProductRef(r: AssetRefId, productId: string): boolean {\n return r.type === \"PRODUCT\" && r.id === productId;\n}\n\n/**\n * Media assets (BLOB/LINK). All endpoints require a backend-only scope\n * (`media.asset_manage` / `media.asset_read`) — default auth: service.\n */\nexport class MediaService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/media/${this.ctx.tenant}/assets`;\n }\n\n /** Create an asset. BLOB uploads via multipart; LINK via JSON. */\n async create(\n input:\n | { kind: \"blob\"; file: Blob; body: AssetCreateBlobInput }\n | { kind: \"link\"; body: AssetCreateLinkInput },\n auth: AuthContext = SERVICE,\n ): Promise<{ id: string }> {\n if (input.kind === \"blob\") {\n const fd = new FormData();\n fd.set(\"file\", input.file);\n fd.set(\"body\", JSON.stringify(input.body));\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: fd,\n });\n }\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input.body,\n });\n }\n\n /**\n * List assets, wrapped in the shared {@link PaginatedItems} envelope so\n * callers can iterate over pages consistently with the rest of the SDK.\n * `hasNextPage` is the standard SDK heuristic: `true` when the returned\n * page is full (`items.length === requested pageSize`). Pagination\n * defaults match Emporix's server defaults (`pageNumber: 1`,\n * `pageSize: 60`) so an empty `query` produces stable expectations.\n */\n async list(\n query: ListAssetsQuery = {},\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<Asset>> {\n const pageNumber = query.pageNumber ?? 1;\n const pageSize = query.pageSize ?? 60;\n const items = await this.ctx.http.request<Asset[]>({\n method: \"GET\",\n path: this.base(),\n auth,\n query: { ...query, pageNumber, pageSize },\n });\n return {\n items,\n pageNumber,\n pageSize,\n hasNextPage: items.length === pageSize,\n };\n }\n\n /** Fetch an asset by id. */\n async get(assetId: string, auth: AuthContext = SERVICE): Promise<Asset> {\n return this.ctx.http.request<Asset>({\n method: \"GET\",\n path: `${this.base()}/${assetId}`,\n auth,\n });\n }\n\n /**\n * Update an asset. The input is a discriminated union mirroring\n * {@link create}:\n * - `{ kind: \"json\", body }` — metadata-only patch (BLOB or LINK).\n * Sends `application/json`. Used for `refIds`, `details`, `metadata`,\n * or `url` changes.\n * - `{ kind: \"blob\", file, body }` — replaces the BLOB file content\n * (max 10MB) AND patches metadata in the same request. Sends\n * `multipart/form-data`.\n *\n * `type` and `access` are immutable per Emporix — they must match the\n * existing asset's values. Optimistic-locking is via `body.metadata.version`;\n * the server returns 409 Conflict on a stale version.\n */\n async update(\n assetId: string,\n input:\n | { kind: \"json\"; body: AssetUpdateInput }\n | { kind: \"blob\"; file: Blob; body: AssetUpdateBlobInput },\n auth: AuthContext = SERVICE,\n ): Promise<Asset> {\n if (input.kind === \"blob\") {\n const fd = new FormData();\n fd.set(\"file\", input.file);\n fd.set(\"body\", JSON.stringify(input.body));\n return this.ctx.http.request<Asset>({\n method: \"PUT\",\n path: `${this.base()}/${assetId}`,\n auth,\n body: fd,\n });\n }\n return this.ctx.http.request<Asset>({\n method: \"PUT\",\n path: `${this.base()}/${assetId}`,\n auth,\n body: input.body,\n });\n }\n\n /** Remove an asset. */\n async remove(assetId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${assetId}`,\n auth,\n });\n }\n\n /**\n * Download an asset by id. Returns a discriminated union:\n * - `{ kind: \"redirect\", url }` for `PUBLIC` assets (server-side 30x with\n * the storage URL in `Location`).\n * - `{ kind: \"bytes\", data }` for `PRIVATE` assets (server-side 200 with\n * the asset bytes; `etag` + `contentType` headers are exposed for\n * caching). When the server reports `text/plain` Content-Type (the\n * OpenAPI-documented format), the SDK decodes the base64 stream into\n * an `ArrayBuffer` transparently; binary Content-Types are passed\n * through verbatim.\n *\n * Implementation note: uses `redirect: \"manual\"` so the redirect-location\n * is observable. In Node.js this works; in a browser the redirect Location\n * is intentionally hidden by fetch — there, `PUBLIC` downloads will\n * surface as an opaque-redirect and the SDK throws. Browser code should\n * use the asset's `url` field from `get()` for `LINK` assets, or the\n * direct storage URL for `PUBLIC` `BLOB` assets (typically delivered via\n * an `<img>` tag rather than `download()`).\n */\n async download(\n assetId: string,\n auth: AuthContext = SERVICE,\n ): Promise<DownloadResult> {\n const path = `${this.base()}/${assetId}/download`;\n const res = await this.ctx.http.requestRaw(\n { method: \"GET\", path, auth },\n { redirect: \"manual\" },\n );\n\n // PUBLIC: server-side redirect — capture Location.\n if (res.status >= 300 && res.status < 400) {\n const url = res.headers.get(\"location\");\n if (!url) {\n throw new EmporixError(\n `media.download: ${res.status} response without a Location header`,\n res.status,\n );\n }\n return { kind: \"redirect\", url };\n }\n\n // PRIVATE: bytes.\n if (res.ok) {\n const etag = res.headers.get(\"etag\") ?? undefined;\n const contentType = res.headers.get(\"content-type\") ?? undefined;\n let data: ArrayBuffer;\n if (contentType?.startsWith(\"text/plain\")) {\n // Per OpenAPI spec the server returns the byte stream as a\n // base64-encoded text/plain body. Decode once into raw bytes\n // so callers always see an ArrayBuffer.\n const text = await res.text();\n const bin = atob(text);\n const arr = new Uint8Array(bin.length);\n for (let i = 0; i < bin.length; i++) arr[i] = bin.charCodeAt(i);\n data = arr.buffer;\n } else {\n data = await res.arrayBuffer();\n }\n return {\n kind: \"bytes\",\n data,\n ...(etag !== undefined ? { etag } : {}),\n ...(contentType !== undefined ? { contentType } : {}),\n };\n }\n\n // Error: surface via the standard EmporixError hierarchy.\n const text = await res.text();\n let parsed: unknown = undefined;\n if (text) {\n try {\n parsed = JSON.parse(text);\n } catch {\n parsed = text;\n }\n }\n throw errorFromResponse(res.status, `GET ${path} → ${res.status}`, parsed);\n }\n\n /** Multipart upload sugar: builds `AssetCreateBlob` from input. */\n async uploadFile(\n input: {\n file: Blob;\n productId?: string;\n filename?: string;\n mimeType?: string;\n access?: \"PUBLIC\" | \"PRIVATE\";\n },\n auth: AuthContext = SERVICE,\n ): Promise<{ id: string }> {\n const body: AssetCreateBlobInput = {\n type: \"BLOB\",\n access: input.access ?? \"PUBLIC\",\n ...(input.productId\n ? { refIds: [{ type: \"PRODUCT\", id: input.productId }] }\n : {}),\n ...(input.filename || input.mimeType\n ? {\n details: {\n ...(input.filename ? { filename: input.filename } : {}),\n ...(input.mimeType ? { mimeType: input.mimeType } : {}),\n },\n }\n : {}),\n };\n return this.create({ kind: \"blob\", file: input.file, body }, auth);\n }\n\n /**\n * Replace the file content of an existing BLOB asset. Sugar over\n * {@link update} with `kind: \"blob\"`. `access` is required because the\n * field is immutable and the server validates that the patch matches.\n * Pass `version` from `asset.metadata.version` if you want optimistic\n * locking (recommended when concurrent writers are possible).\n */\n async replaceFile(\n assetId: string,\n input: {\n file: Blob;\n access: \"PUBLIC\" | \"PRIVATE\";\n filename?: string;\n mimeType?: string;\n version?: number;\n },\n auth: AuthContext = SERVICE,\n ): Promise<Asset> {\n const body: AssetUpdateBlobInput = {\n type: \"BLOB\",\n access: input.access,\n ...(input.filename || input.mimeType\n ? {\n details: {\n ...(input.filename ? { filename: input.filename } : {}),\n ...(input.mimeType ? { mimeType: input.mimeType } : {}),\n },\n }\n : {}),\n ...(input.version !== undefined\n ? { metadata: { version: input.version } }\n : {}),\n };\n return this.update(assetId, { kind: \"blob\", file: input.file, body }, auth);\n }\n\n /** External-URL sugar: builds `AssetCreateLink`. */\n async link(\n input: { url: string; productId?: string; access?: \"PUBLIC\" | \"PRIVATE\" },\n auth: AuthContext = SERVICE,\n ): Promise<{ id: string }> {\n const body: AssetCreateLinkInput = {\n type: \"LINK\",\n access: input.access ?? \"PUBLIC\",\n url: input.url,\n ...(input.productId\n ? { refIds: [{ type: \"PRODUCT\", id: input.productId }] }\n : {}),\n };\n return this.create({ kind: \"link\", body }, auth);\n }\n\n /** Idempotently add a PRODUCT refId to an asset. */\n async attachToProduct(\n assetId: string,\n productId: string,\n auth: AuthContext = SERVICE,\n ): Promise<Asset> {\n const a = await this.get(assetId, auth);\n const refIds: AssetRefId[] = a.refIds ?? [];\n if (refIds.some((r) => isProductRef(r, productId))) return a;\n const next: AssetRefId[] = [...refIds, { type: \"PRODUCT\", id: productId }];\n // Preserve the asset's type discriminator so the update body satisfies\n // the AssetUpdateBlob | AssetUpdateLink union.\n const patch = { type: a.type, refIds: next } as unknown as AssetUpdateInput;\n return this.update(assetId, { kind: \"json\", body: patch }, auth);\n }\n\n /** Remove a PRODUCT refId from an asset (no-op if absent). */\n async detachFromProduct(\n assetId: string,\n productId: string,\n auth: AuthContext = SERVICE,\n ): Promise<Asset> {\n const a = await this.get(assetId, auth);\n const refIds: AssetRefId[] = a.refIds ?? [];\n const next = refIds.filter((r) => !isProductRef(r, productId));\n if (next.length === refIds.length) return a;\n const patch = { type: a.type, refIds: next } as unknown as AssetUpdateInput;\n return this.update(assetId, { kind: \"json\", body: patch }, auth);\n }\n\n /** Convenience: list assets attached to a product (server-side filter). */\n async listForProduct(\n productId: string,\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<Asset>> {\n return this.list({ \"refIds.id\": productId }, auth);\n }\n}\n\n// Re-export so consumers can `import { isProductRef } from \"@viu/emporix-sdk/media\"`?\n// Internal helper — kept module-private; convenience methods in Task 4 use it.\nexport const _internalMedia = { isProductRef };\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { requireCustomer } from \"../core/require-customer\";\nimport type { ProductService } from \"./product\";\nimport type { CategoryService } from \"./category\";\nimport type {\n SegmentResponse,\n ItemAssignmentResponse,\n CategoryTreeResponse,\n} from \"../generated/customer-segment\";\n\n/** Generated segment types (read shapes — storefront `segment_read_own`). */\nexport type Segment = SegmentResponse;\nexport type SegmentItem = ItemAssignmentResponse;\nexport type SegmentCategoryTree = CategoryTreeResponse;\nexport type SegmentCategoryTreeNode = CategoryTreeResponse[number];\n\n/** Cross-service hydrate dependencies, injected from `EmporixClient`. */\nexport interface SegmentServiceDeps {\n products: ProductService;\n categories: CategoryService;\n}\n\nfunction setIfDefined<V>(\n q: Record<string, string | number | undefined>,\n key: string,\n value: V | undefined,\n): void {\n if (value !== undefined && value !== \"\") {\n q[key] = value as unknown as string | number;\n }\n}\n\n/**\n * Customer-segment reads. Every method requires a customer/raw\n * `AuthContext` — the `segment_read_own` scope is on the customer token.\n * The standard product/category endpoints do **not** auto-filter by\n * segment; the storefront uses these reads to discover what to fetch.\n */\nexport class SegmentService {\n constructor(\n private readonly ctx: ClientContext,\n private readonly deps: SegmentServiceDeps,\n ) {}\n\n private base(): string {\n return `/customer-segment/${this.ctx.tenant}/segments`;\n }\n\n /** Lists segments the caller belongs to (with `segment_read_own`). */\n async list(\n query: { q?: string; pageNumber?: number; pageSize?: number } = {},\n auth?: AuthContext,\n ): Promise<Segment[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n return this.ctx.http.request<Segment[]>({\n method: \"GET\",\n path: this.base(),\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Fetches a single segment by id. */\n async get(segmentId: string, auth?: AuthContext): Promise<Segment> {\n return this.ctx.http.request<Segment>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}`,\n auth: requireCustomer(auth),\n });\n }\n\n /** Item assignments (PRODUCT + CATEGORY) across all the caller's active segments. */\n async listItems(\n query: {\n q?: string;\n siteCode?: string;\n legalEntityId?: string;\n onlyActive?: boolean;\n pageNumber?: number;\n pageSize?: number;\n } = {},\n auth?: AuthContext,\n ): Promise<SegmentItem[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"siteCode\", query.siteCode);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n if (query.onlyActive !== undefined) q.onlyActive = String(query.onlyActive);\n return this.ctx.http.request<SegmentItem[]>({\n method: \"GET\",\n path: `${this.base()}/items`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Item assignments of one specific segment. */\n async listSegmentItems(\n segmentId: string,\n query: {\n q?: string;\n legalEntityId?: string;\n pageNumber?: number;\n pageSize?: number;\n } = {},\n auth?: AuthContext,\n ): Promise<SegmentItem[]> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"q\", query.q);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n setIfDefined(q, \"pageNumber\", query.pageNumber);\n setIfDefined(q, \"pageSize\", query.pageSize);\n return this.ctx.http.request<SegmentItem[]>({\n method: \"GET\",\n path: `${this.base()}/${segmentId}/items`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n /** Category tree built only from the caller's active segments. */\n async getCategoryTree(\n query: { siteCode?: string; legalEntityId?: string } = {},\n auth?: AuthContext,\n ): Promise<SegmentCategoryTree> {\n const q: Record<string, string | number | undefined> = {};\n setIfDefined(q, \"siteCode\", query.siteCode);\n setIfDefined(q, \"legalEntityId\", query.legalEntityId);\n return this.ctx.http.request<SegmentCategoryTree>({\n method: \"GET\",\n path: `${this.base()}/items/category-trees`,\n auth: requireCustomer(auth),\n ...(Object.keys(q).length ? { query: q } : {}),\n });\n }\n\n private async pickItemIds(\n kind: \"PRODUCT\" | \"CATEGORY\",\n query: Parameters<SegmentService[\"listItems\"]>[0],\n auth: AuthContext | undefined,\n ): Promise<string[]> {\n const rows = await this.listItems(query, auth);\n const ids: string[] = [];\n for (const r of rows) {\n const id = r.item?.id;\n if (r.type === kind && typeof id === \"string\") ids.push(id);\n }\n return ids;\n }\n\n /** Product ids assigned to the caller's active segments. */\n async listMyProductIds(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<string[]> {\n return this.pickItemIds(\"PRODUCT\", query ?? {}, auth);\n }\n\n /** Category ids assigned to the caller's active segments. */\n async listMyCategoryIds(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<string[]> {\n return this.pickItemIds(\"CATEGORY\", query ?? {}, auth);\n }\n\n /**\n * Hydrates `listMyProductIds` via `ProductService.get` in parallel.\n * Resolves in the same order as the id list. Any single failure rejects\n * the whole batch (`Promise.all`); use the id-list method + your own\n * tolerance strategy if partial success matters.\n */\n async listMyProducts(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<PaginatedItems<Awaited<ReturnType<ProductService[\"get\"]>>>> {\n const pageNumber = query?.pageNumber ?? 1;\n const pageSize = query?.pageSize ?? 20;\n const sourceItems = await this.listItems(\n { ...(query ?? {}), pageNumber, pageSize },\n auth,\n );\n const ids: string[] = [];\n for (const r of sourceItems) {\n if (r.type === \"PRODUCT\" && typeof r.item?.id === \"string\") ids.push(r.item.id);\n }\n const items = await this.deps.products.searchByIds(ids, undefined, auth);\n return { items, pageNumber, pageSize, hasNextPage: sourceItems.length === pageSize };\n }\n\n /**\n * Hydrates a page of the caller's segment CATEGORY assignments into\n * real categories via one bulk `categories.searchByIds` call. Same\n * `hasNextPage` semantic as `listMyProducts`.\n */\n async listMyCategories(\n query?: Parameters<SegmentService[\"listItems\"]>[0],\n auth?: AuthContext,\n ): Promise<PaginatedItems<Awaited<ReturnType<CategoryService[\"get\"]>>>> {\n const pageNumber = query?.pageNumber ?? 1;\n const pageSize = query?.pageSize ?? 20;\n const sourceItems = await this.listItems(\n { ...(query ?? {}), pageNumber, pageSize },\n auth,\n );\n const ids: string[] = [];\n for (const r of sourceItems) {\n if (r.type === \"CATEGORY\" && typeof r.item?.id === \"string\") ids.push(r.item.id);\n }\n const items = await this.deps.categories.searchByIds(ids, undefined, auth);\n return { items, pageNumber, pageSize, hasNextPage: sourceItems.length === pageSize };\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport { auth, type AuthContext } from \"../core/auth\";\n\nconst ANON: AuthContext = auth.anonymous();\n\n/**\n * One site as returned by the Site Settings Service. Mirrors the public\n * SiteDto schema with the fields a storefront actually consumes.\n */\nexport interface Site {\n code: string;\n name: string;\n active: boolean;\n default: boolean;\n includesTax?: boolean;\n defaultLanguage: string;\n languages: string[];\n currency: string;\n availableCurrencies?: string[];\n homeBase: {\n address: {\n country: string;\n zipCode: string;\n street?: string;\n city?: string;\n state?: string;\n };\n timezone?: string;\n };\n shipToCountries: string[];\n cartCalculationScale?: number;\n metadata?: { version?: number };\n}\n\n/**\n * Read-only access to the tenant's site catalog. List returns active sites\n * visible to the storefront context (the `site_manage` scope is only needed\n * to read inactive sites).\n */\nexport class SiteService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Lists active sites. */\n async list(authCtx: AuthContext = ANON): Promise<Site[]> {\n return this.ctx.http.request<Site[]>({\n method: \"GET\",\n path: `/site/${this.ctx.tenant}/sites`,\n auth: authCtx,\n });\n }\n\n /** Retrieves one site by code. */\n async get(code: string, authCtx: AuthContext = ANON): Promise<Site> {\n return this.ctx.http.request<Site>({\n method: \"GET\",\n path: `/site/${this.ctx.tenant}/sites/${code}`,\n auth: authCtx,\n });\n }\n\n /**\n * Returns the tenant's default site (the one with `default: true`).\n * Throws if no default is configured — a tenant should always have one.\n */\n async current(authCtx: AuthContext = ANON): Promise<Site> {\n const sites = await this.list(authCtx);\n const def = sites.find((s) => s.default);\n if (!def) {\n throw new Error(\n `SiteService.current: no default site for tenant \"${this.ctx.tenant}\"`,\n );\n }\n return def;\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport { auth, type AuthContext } from \"../core/auth\";\n\nconst ANON: AuthContext = auth.anonymous();\n\n/**\n * One session context as returned by `GET /session-context/{tenant}/me/context`.\n * Created server-side when the user creates a cart. Until then, the server\n * returns 404 and {@link SessionContextService.get} resolves to `null`.\n */\nexport interface SessionContext {\n sessionId: string;\n customerId?: string;\n siteCode?: string;\n currency?: string;\n cartId?: string;\n targetLocation?: string;\n language?: string;\n context?: Record<string, unknown>;\n metadata?: {\n version?: number;\n createdAt?: string;\n modifiedAt?: string;\n };\n}\n\n/**\n * Input for {@link SessionContextService.patch}. Only the listed fields are\n * accepted by the server; everything else is ignored.\n *\n * If `version` is omitted, the service fetches the current version via GET\n * before PATCHing (one extra round-trip). Pass it explicitly when you already\n * know it (e.g. after a `get()` call earlier in the same flow).\n */\nexport interface SessionContextPatch {\n siteCode?: string;\n currency?: string;\n targetLocation?: string;\n language?: string;\n context?: Record<string, unknown>;\n /** Override for optimistic-locking version. If omitted, GET resolves it. */\n version?: number;\n}\n\n/**\n * Session-context binding for the current storefront session. Both endpoints\n * resolve the session-id from the `Authorization` token — no path/query\n * parameter required.\n */\nexport class SessionContextService {\n constructor(private readonly ctx: ClientContext) {}\n\n /**\n * Retrieves the current session context, or `null` when the server returns\n * 404 (no session exists yet — the session-context is created server-side\n * only after the user creates a cart).\n */\n async get(authCtx: AuthContext = ANON): Promise<SessionContext | null> {\n try {\n return await this.ctx.http.request<SessionContext>({\n method: \"GET\",\n path: `/session-context/${this.ctx.tenant}/me/context`,\n auth: authCtx,\n });\n } catch (err) {\n if (isNotFound(err)) return null;\n throw err;\n }\n }\n\n /**\n * Partially updates the current session context. Returns `true` when the\n * PATCH was applied, `false` when there is no session context yet (the\n * server returned 404 on the version-lookup GET, so there is nothing to\n * update). Non-404 errors propagate.\n */\n async patch(input: SessionContextPatch, authCtx: AuthContext = ANON): Promise<boolean> {\n let version = input.version;\n if (version === undefined) {\n const current = await this.get(authCtx);\n if (current === null) return false;\n version = current.metadata?.version;\n if (version === undefined) {\n throw new Error(\n \"SessionContextService.patch: no metadata.version in server response\",\n );\n }\n }\n const { version: _v, ...fields } = input;\n void _v;\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `/session-context/${this.ctx.tenant}/me/context`,\n body: {\n ...fields,\n metadata: { version },\n },\n auth: authCtx,\n });\n return true;\n }\n}\n\nfunction isNotFound(err: unknown): boolean {\n if (err && typeof err === \"object\") {\n const status = (err as { status?: unknown }).status;\n if (typeof status === \"number\" && status === 404) return true;\n }\n return false;\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n LegalEntity,\n LegalEntityCreate,\n LegalEntityUpdate,\n} from \"../generated/customer-management\";\n\n/**\n * Storefront-customer access to Legal Entities.\n *\n * `listMine`/`get` require `customermanagement.legalentity_read_own` on the\n * customer token. `create`/`update`/`delete` require the corresponding\n * `_manage` scopes — typically only granted to Admin-group customers; a 403\n * surfaces as `EmporixInsufficientScopeError`.\n */\nexport class CompaniesService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/customer-management/${this.ctx.tenant}/legal-entities`;\n }\n\n /** Lists the legal entities the calling customer is assigned to. */\n async listMine(auth: AuthContext): Promise<LegalEntity[]> {\n return this.ctx.http.request<LegalEntity[]>({\n method: \"GET\",\n path: this.base(),\n auth,\n });\n }\n\n /** Fetches a single legal entity by id. */\n async get(legalEntityId: string, auth: AuthContext): Promise<LegalEntity> {\n return this.ctx.http.request<LegalEntity>({\n method: \"GET\",\n path: `${this.base()}/${legalEntityId}`,\n auth,\n });\n }\n\n /** Creates a legal entity. Requires `customermanagement.legalentity_manage`. */\n async create(input: LegalEntityCreate, auth: AuthContext): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /**\n * Patches a legal entity. The endpoint is a PATCH, so the body is a partial\n * of the generated `LegalEntityUpdate` (full-replace) shape.\n */\n async update(\n legalEntityId: string,\n patch: Partial<LegalEntityUpdate>,\n auth: AuthContext,\n ): Promise<LegalEntity> {\n return this.ctx.http.request<LegalEntity>({\n method: \"PATCH\",\n path: `${this.base()}/${legalEntityId}`,\n auth,\n body: patch,\n });\n }\n\n /** Deletes a legal entity (async cascade on the server). */\n async delete(legalEntityId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${legalEntityId}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n ContactAssignment,\n ContactAssignmentCreate,\n ContactAssignmentUpdate,\n} from \"../generated/customer-management\";\n\n/**\n * Manages contact assignments linking customers to legal entities.\n *\n * `listForCompany` requires `customermanagement.contactassignment_read`;\n * `assign`/`update`/`unassign` require `_manage`. The query param\n * `legalEntityId` scopes the list to one company.\n */\nexport class ContactsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/customer-management/${this.ctx.tenant}/contact-assignments`;\n }\n\n /** Lists contact assignments for one legal entity. */\n async listForCompany(legalEntityId: string, auth: AuthContext): Promise<ContactAssignment[]> {\n return this.ctx.http.request<ContactAssignment[]>({\n method: \"GET\",\n path: this.base(),\n query: { legalEntityId },\n auth,\n });\n }\n\n /** Creates a contact assignment. */\n async assign(input: ContactAssignmentCreate, auth: AuthContext): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /**\n * Patches a contact assignment. PATCH endpoint, so the body is a partial of\n * the generated `ContactAssignmentUpdate` shape.\n */\n async update(\n contactAssignmentId: string,\n patch: Partial<ContactAssignmentUpdate>,\n auth: AuthContext,\n ): Promise<ContactAssignment> {\n return this.ctx.http.request<ContactAssignment>({\n method: \"PATCH\",\n path: `${this.base()}/${contactAssignmentId}`,\n auth,\n body: patch,\n });\n }\n\n /** Deletes a contact assignment. */\n async unassign(contactAssignmentId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${contactAssignmentId}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Location,\n LocationCreate,\n LocationUpdate,\n} from \"../generated/customer-management\";\n\n/**\n * Manages locations owned by a legal entity. Three types are supported:\n * HEADQUARTER, WAREHOUSE, OFFICE.\n *\n * Reads require `customermanagement.location_read`; mutations require\n * `_manage`.\n */\nexport class LocationsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/customer-management/${this.ctx.tenant}/locations`;\n }\n\n /** Lists locations owned by one legal entity. */\n async listForCompany(legalEntityId: string, auth: AuthContext): Promise<Location[]> {\n return this.ctx.http.request<Location[]>({\n method: \"GET\",\n path: this.base(),\n query: { legalEntityId },\n auth,\n });\n }\n\n /** Fetches one location by id. */\n async get(locationId: string, auth: AuthContext): Promise<Location> {\n return this.ctx.http.request<Location>({\n method: \"GET\",\n path: `${this.base()}/${locationId}`,\n auth,\n });\n }\n\n /** Creates a location for a legal entity. */\n async create(input: LocationCreate, auth: AuthContext): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /**\n * Patches a location. PATCH endpoint, so the body is a partial of the\n * generated `LocationUpdate` shape.\n */\n async update(\n locationId: string,\n patch: Partial<LocationUpdate>,\n auth: AuthContext,\n ): Promise<Location> {\n return this.ctx.http.request<Location>({\n method: \"PATCH\",\n path: `${this.base()}/${locationId}`,\n auth,\n body: patch,\n });\n }\n\n /** Deletes a location. */\n async delete(locationId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${locationId}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n GroupsQueryDocument,\n AssignmentCreateRequest,\n} from \"../generated/iam\";\n\n/**\n * Access to IAM customer groups for a legal entity.\n *\n * `listForCompany` requires `iam.group_read`; the member mutations\n * (`addMember`/`removeMember`) require `iam.group_manage` — typically only\n * granted to Admin-group customers; a 403 surfaces as\n * `EmporixInsufficientScopeError`.\n */\nexport class CustomerGroupsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/iam/${this.ctx.tenant}/groups`;\n }\n\n /** Lists customer groups belonging to one legal entity. */\n async listForCompany(legalEntityId: string, auth: AuthContext): Promise<GroupsQueryDocument[]> {\n return this.ctx.http.request<GroupsQueryDocument[]>({\n method: \"GET\",\n path: this.base(),\n query: { \"b2b.legalEntityId\": legalEntityId },\n auth,\n });\n }\n\n /** Adds a user (customer or employee) to a group. */\n async addMember(\n groupId: string,\n member: AssignmentCreateRequest,\n auth: AuthContext,\n ): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: `${this.base()}/${groupId}/users`,\n auth,\n body: member,\n });\n }\n\n /** Removes a user from a group. */\n async removeMember(groupId: string, userId: string, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${groupId}/users/${userId}`,\n auth,\n });\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Order, OrderStatus, OrderUpdateDto } from \"../generated/order-v2\";\n\n/**\n * Salesorder PATCH body. The generated `orderUpdateDto` models a full order\n * (it requires `entries`/`customer`), but `PATCH /salesorders/{id}` accepts a\n * subset — so the SDK exposes a partial of it.\n */\nexport type SalesOrderPatch = Partial<OrderUpdateDto>;\n\n/** Optional fields supported by the order-v2 list endpoint. */\nexport interface ListMyOrdersOptions {\n pageNumber?: number;\n pageSize?: number;\n status?: OrderStatus;\n legalEntityId?: string;\n siteCode?: string;\n saasToken?: string;\n}\n\n/** Options for single-order reads (saas-token only). */\nexport interface GetOrderOptions {\n saasToken?: string;\n}\n\n/** Options for status transitions. */\nexport interface OrderTransitionOptions {\n saasToken?: string;\n comment?: string;\n}\n\n/** Options for `salesOrders.update`. */\nexport interface UpdateSalesOrderOptions {\n /** Forwarded as `?recalculate=`. Omit to use the server default (true). */\n recalculate?: boolean;\n}\n\nfunction setIfDefined<V>(\n q: Record<string, string | number | undefined>,\n key: string,\n value: V | undefined,\n): void {\n if (value !== undefined && value !== \"\") {\n q[key] = value as unknown as string | number;\n }\n}\n\n/**\n * Storefront-customer access to Order-v2's customer endpoints.\n *\n * `listMine`/`get` require `order.order_read_own`; transitions require\n * `order.order_manage_own`. All methods accept an optional `saasToken` that\n * is passed as the `saas-token` header (mirrors `checkout.placeOrder`).\n */\nexport class OrdersService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/order-v2/${this.ctx.tenant}/orders`;\n }\n\n private saasHeader(saasToken: string | undefined): Record<string, string> | undefined {\n return saasToken ? { \"saas-token\": saasToken } : undefined;\n }\n\n /** Lists the calling customer's orders. */\n async listMine(\n auth: AuthContext,\n opts: ListMyOrdersOptions = {},\n ): Promise<PaginatedItems<Order>> {\n const pageNumber = opts.pageNumber ?? 1;\n const pageSize = opts.pageSize ?? 50;\n const query: Record<string, string | number | undefined> = {\n pageNumber,\n pageSize,\n };\n setIfDefined(query, \"status\", opts.status);\n setIfDefined(query, \"legalEntityId\", opts.legalEntityId);\n setIfDefined(query, \"siteCode\", opts.siteCode);\n const headers = this.saasHeader(opts.saasToken);\n // order-v2 returns a bare JSON array (the total count lives in the\n // X-Total-Count header), not a {items,...} envelope — so wrap it into the\n // shared PaginatedItems shape like every other paginated service.\n // hasNextPage is inferred from the page being full.\n const items = await this.ctx.http.request<Order[]>({\n method: \"GET\",\n path: this.base(),\n query,\n auth,\n ...(headers ? { headers } : {}),\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Fetches one of the calling customer's orders by id. */\n async get(\n orderId: string,\n auth: AuthContext,\n opts: GetOrderOptions = {},\n ): Promise<Order> {\n const headers = this.saasHeader(opts.saasToken);\n return this.ctx.http.request<Order>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Transitions an order to a new status. Server enforces legal transitions. */\n async transition(\n orderId: string,\n status: OrderStatus,\n auth: AuthContext,\n opts: OrderTransitionOptions = {},\n ): Promise<void> {\n const body: { status: OrderStatus; comment?: string } = { status };\n if (opts.comment !== undefined) body.comment = opts.comment;\n const headers = this.saasHeader(opts.saasToken);\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/${orderId}/transitions`,\n auth,\n body,\n ...(headers ? { headers } : {}),\n });\n }\n\n /** Convenience: transitions to `DECLINED` (customer cancel). */\n async cancel(\n orderId: string,\n auth: AuthContext,\n opts: { saasToken?: string } = {},\n ): Promise<void> {\n await this.transition(orderId, \"DECLINED\", auth, opts);\n }\n}\n\n/**\n * Backend / service-account access to the merchant-facing\n * `/salesorders/{id}` resource. Requires `order.order_read` (read) /\n * `order.order_manage` (update) scopes on a service token.\n *\n * The full admin list + filter surface is deferred to a follow-up\n * sub-spec. This service ships only single-resource read + patch — the\n * common backend use case (e.g. mixin updates after fulfilment).\n */\nexport class SalesOrdersService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/order-v2/${this.ctx.tenant}/salesorders`;\n }\n\n /** Fetches a single sales-order by id. */\n async get(orderId: string, auth: AuthContext): Promise<Order> {\n return this.ctx.http.request<Order>({\n method: \"GET\",\n path: `${this.base()}/${orderId}`,\n auth,\n });\n }\n\n /** Patches an existing order (status, mixins, customAttributes, metadata). */\n async update(\n orderId: string,\n patch: SalesOrderPatch,\n auth: AuthContext,\n opts: UpdateSalesOrderOptions = {},\n ): Promise<Order> {\n const query: Record<string, string> = {};\n if (opts.recalculate === false) query.recalculate = \"false\";\n return this.ctx.http.request<Order>({\n method: \"PATCH\",\n path: `${this.base()}/${orderId}`,\n auth,\n ...(Object.keys(query).length > 0 ? { query } : {}),\n body: patch,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixNotFoundError } from \"../core/errors\";\nimport type { AvailabilityWithBundle } from \"../generated/availability\";\n\n/**\n * Site-aware product availability. Mirrors the Emporix Availability Service\n * `AvailabilityWithBundle` shape (the single-product GET and the batch search\n * both return the bundle-aware variant). There is no restock-date field.\n */\nexport type Availability = AvailabilityWithBundle;\n\n/** Shared options for {@link AvailabilityService} reads. */\nexport interface AvailabilityOptions {\n /**\n * When `true`, a product with no availability record resolves to a default\n * `{ available: true }` instead of throwing (single `get`) / being marked\n * unavailable (`getMany`). Off by default — opt in for tenants that sell\n * without stock management.\n */\n defaultAvailableOnNotFound?: boolean;\n}\n\nconst ANON: AuthContext = { kind: \"anonymous\" };\n\n/**\n * Reads product availability per site. Default auth is anonymous (like\n * `PriceService.matchByContext`); pass a customer/raw/service context to use a\n * different token. Requires the `availability.availability_view` scope on\n * whichever token is used.\n */\nexport class AvailabilityService {\n constructor(private readonly ctx: ClientContext) {}\n\n /**\n * Single product. Resolves the availability record, or — when\n * `opts.defaultAvailableOnNotFound` is set — a default available record on 404.\n */\n async get(\n productId: string,\n siteCode: string,\n auth: AuthContext = ANON,\n opts: AvailabilityOptions = {},\n ): Promise<Availability> {\n try {\n return await this.ctx.http.request<Availability>({\n method: \"GET\",\n path: `/availability/${this.ctx.tenant}/availability/${encodeURIComponent(\n productId,\n )}/${encodeURIComponent(siteCode)}`,\n auth,\n });\n } catch (err) {\n if (err instanceof EmporixNotFoundError && opts.defaultAvailableOnNotFound) {\n return { productId, site: siteCode, available: true };\n }\n throw err;\n }\n }\n\n /**\n * Batch read via `POST .../availability/search` (one request). Products with\n * no availability record are absent from the response; each is synthesized as\n * `{ available: false }` (or `{ available: true }` when\n * `opts.defaultAvailableOnNotFound` is set). The result preserves input order\n * and length. An empty `productIds` resolves to `[]` without a request.\n */\n async getMany(\n productIds: string[],\n siteCode: string,\n auth: AuthContext = ANON,\n opts: AvailabilityOptions = {},\n ): Promise<Availability[]> {\n if (productIds.length === 0) return [];\n const found = await this.ctx.http.request<Availability[]>({\n method: \"POST\",\n path: `/availability/${this.ctx.tenant}/availability/search`,\n auth,\n query: { site: siteCode, pageSize: productIds.length },\n body: productIds,\n });\n const byId = new Map<string, Availability>();\n for (const a of found) if (a.productId) byId.set(a.productId, a);\n return productIds.map(\n (id) =>\n byId.get(id) ?? {\n productId: id,\n site: siteCode,\n available: Boolean(opts.defaultAvailableOnNotFound),\n },\n );\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Configuration, ConfigurationDraft, ListConfigOptions } from \"./configuration-types\";\n\nexport type { Configuration, ConfigurationDraft, ListConfigOptions } from \"./configuration-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Tenant-wide configuration (`/configuration/{tenant}/configurations`).\n * Requires the backend-only `configuration.configuration_view` /\n * `configuration.configuration_manage` scopes — default auth: service.\n * Server-side use only; the service token must never reach a browser.\n */\nexport class TenantConfigService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/configuration/${this.ctx.tenant}/configurations`;\n }\n\n /** List tenant configurations, optionally filtered by `keys`. */\n async list(opts: ListConfigOptions = {}, auth: AuthContext = SERVICE): Promise<Configuration[]> {\n const query = opts.keys && opts.keys.length > 0 ? { keys: opts.keys.join(\",\") } : undefined;\n return this.ctx.http.request<Configuration[]>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(query ? { query } : {}),\n });\n }\n\n /** Retrieve one tenant configuration by key. */\n async get<T = unknown>(key: string, auth: AuthContext = SERVICE): Promise<Configuration<T>> {\n return this.ctx.http.request<Configuration<T>>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(key)}`,\n auth,\n });\n }\n\n /** Create one or more tenant configurations (array in, array out). */\n async create(drafts: ConfigurationDraft[], auth: AuthContext = SERVICE): Promise<Configuration[]> {\n return this.ctx.http.request<Configuration[]>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: drafts,\n });\n }\n\n /** Update one tenant configuration by key. */\n async update<T = unknown>(\n key: string,\n draft: ConfigurationDraft<T>,\n auth: AuthContext = SERVICE,\n ): Promise<Configuration<T>> {\n return this.ctx.http.request<Configuration<T>>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(key)}`,\n auth,\n body: draft,\n });\n }\n\n /** Delete one tenant configuration by key. */\n async delete(key: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(key)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { ClientConfiguration, ConfigurationDraft, ListConfigOptions } from \"./configuration-types\";\n\nexport type { ClientConfiguration } from \"./configuration-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Per-client configuration (`/configuration/{tenant}/clients/{client}/configurations`).\n * Requires the backend-only `configuration.configuration_view` /\n * `configuration.configuration_manage` scopes — default auth: service.\n * Server-side use only; the service token must never reach a browser.\n * The `client` arg is injected into each write body so callers don't repeat it.\n */\nexport class ClientConfigService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(client: string): string {\n return `/configuration/${this.ctx.tenant}/clients/${encodeURIComponent(client)}/configurations`;\n }\n\n /** List a client's configurations, optionally filtered by `keys`. */\n async list(\n client: string,\n opts: ListConfigOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<ClientConfiguration[]> {\n const query = opts.keys && opts.keys.length > 0 ? { keys: opts.keys.join(\",\") } : undefined;\n return this.ctx.http.request<ClientConfiguration[]>({\n method: \"GET\",\n path: this.base(client),\n auth,\n ...(query ? { query } : {}),\n });\n }\n\n /** Retrieve one client configuration by key. */\n async get<T = unknown>(\n client: string,\n key: string,\n auth: AuthContext = SERVICE,\n ): Promise<ClientConfiguration<T>> {\n return this.ctx.http.request<ClientConfiguration<T>>({\n method: \"GET\",\n path: `${this.base(client)}/${encodeURIComponent(key)}`,\n auth,\n });\n }\n\n /** Create one or more client configurations. Injects `client` into each item. */\n async create(\n client: string,\n drafts: ConfigurationDraft[],\n auth: AuthContext = SERVICE,\n ): Promise<ClientConfiguration[]> {\n const body = drafts.map((d) => ({ ...d, client }));\n return this.ctx.http.request<ClientConfiguration[]>({\n method: \"POST\",\n path: this.base(client),\n auth,\n body,\n });\n }\n\n /** Update one client configuration by key. Injects `client` into the body. */\n async update<T = unknown>(\n client: string,\n key: string,\n draft: ConfigurationDraft<T>,\n auth: AuthContext = SERVICE,\n ): Promise<ClientConfiguration<T>> {\n return this.ctx.http.request<ClientConfiguration<T>>({\n method: \"PUT\",\n path: `${this.base(client)}/${encodeURIComponent(key)}`,\n auth,\n body: { ...draft, client },\n });\n }\n\n /** Delete one client configuration by key. */\n async delete(client: string, key: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base(client)}/${encodeURIComponent(key)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixNotFoundError } from \"../core/errors\";\n\n/** A single shopping-list line item. */\nexport interface ShoppingListItem {\n id?: number;\n productId: string;\n quantity: number;\n cuttingOption?: string;\n servicePackagingOption?: string;\n comment?: string;\n mixins?: Record<string, unknown>;\n}\n\n/** A shopping list, normalized from the per-customer wire envelope. */\nexport interface ShoppingList {\n key: string;\n name: string;\n items: ShoppingListItem[];\n mixins?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\n/** Input for create / replace. */\nexport interface ShoppingListDraft {\n name: string;\n items?: ShoppingListItem[];\n mixins?: Record<string, unknown>;\n}\n\ninterface WireList {\n name?: string;\n items?: ShoppingListItem[];\n mixins?: Record<string, unknown>;\n metadata?: Record<string, unknown>;\n}\n\nconst RESERVED = new Set([\"customerId\", \"metadata\"]);\n\n/**\n * Per-customer shopping lists (`/shoppinglist/{tenant}/shopping-lists`).\n * `auth` is required: a customer token manages the caller's own lists;\n * a service token (employee scope) can act on any `customerId`. The Emporix\n * API has no item-level CRUD, so `addItem`/`removeItem`/`setItemQuantity`\n * read the list and `PUT` the full body — **last-write-wins**.\n */\nexport class ShoppingListService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/shoppinglist/${this.ctx.tenant}/shopping-lists`;\n }\n\n /** The caller's lists (or, with employee scope, all), normalized to an array. */\n async list(auth: AuthContext, opts: { name?: string } = {}): Promise<ShoppingList[]> {\n const envelopes = await this.ctx.http.request<Array<Record<string, unknown>>>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(opts.name ? { query: { name: opts.name } } : {}),\n });\n const out: ShoppingList[] = [];\n for (const env of envelopes ?? []) {\n for (const [key, value] of Object.entries(env)) {\n if (RESERVED.has(key) || value === null || typeof value !== \"object\") continue;\n const v = value as WireList;\n out.push({\n key,\n name: v.name ?? key,\n items: v.items ?? [],\n ...(v.mixins ? { mixins: v.mixins } : {}),\n ...(v.metadata ? { metadata: v.metadata } : {}),\n });\n }\n }\n return out;\n }\n\n /** Create a list; returns the new list id. */\n async create(draft: ShoppingListDraft, auth: AuthContext): Promise<{ id: string }> {\n return this.ctx.http.request<{ id: string }>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: draft,\n });\n }\n\n /** Replace the named list (low-level PUT). */\n async replace(customerId: string, draft: ShoppingListDraft, auth: AuthContext): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(customerId)}`,\n auth,\n body: draft,\n });\n }\n\n /** Delete the named list, or all the customer's lists when `name` is omitted. */\n async delete(customerId: string, auth: AuthContext, opts: { name?: string } = {}): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(customerId)}`,\n auth,\n ...(opts.name ? { query: { name: opts.name } } : {}),\n });\n }\n\n private async loadList(listName: string, auth: AuthContext): Promise<ShoppingList> {\n const lists = await this.list(auth, { name: listName });\n const found = lists.find((l) => l.name === listName);\n if (!found) throw new EmporixNotFoundError(`Shopping list \"${listName}\" not found`, 404);\n return found;\n }\n\n private async put(customerId: string, list: ShoppingList, items: ShoppingListItem[], auth: AuthContext): Promise<void> {\n await this.replace(\n customerId,\n { name: list.name, items, ...(list.mixins ? { mixins: list.mixins } : {}) },\n auth,\n );\n }\n\n /** Add/replace an item by `productId` (read-modify-write, last-write-wins). */\n async addItem(customerId: string, listName: string, item: ShoppingListItem, auth: AuthContext): Promise<void> {\n const list = await this.loadList(listName, auth);\n const items = [...list.items.filter((i) => i.productId !== item.productId), item];\n await this.put(customerId, list, items, auth);\n }\n\n /** Remove an item by `productId` (no-op if absent). */\n async removeItem(customerId: string, listName: string, productId: string, auth: AuthContext): Promise<void> {\n const list = await this.loadList(listName, auth);\n const items = list.items.filter((i) => i.productId !== productId);\n await this.put(customerId, list, items, auth);\n }\n\n /** Set an item's quantity; `quantity <= 0` removes it. Adds the item if absent. */\n async setItemQuantity(customerId: string, listName: string, productId: string, quantity: number, auth: AuthContext): Promise<void> {\n if (quantity <= 0) return this.removeItem(customerId, listName, productId, auth);\n const list = await this.loadList(listName, auth);\n let items = list.items.map((i) => (i.productId === productId ? { ...i, quantity } : i));\n if (!items.some((i) => i.productId === productId)) items = [...items, { productId, quantity }];\n await this.put(customerId, list, items, auth);\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { MetadataFilter, RagType } from \"./ai-rag-indexer-types\";\n\nexport type { MetadataFilter, RagType } from \"./ai-rag-indexer-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * AI RAG Indexer (`/ai-rag-indexer/{tenant}/{type}`). Read which fields the RAG\n * index embeds / can filter on, and trigger a full asynchronous rebuild.\n *\n * Requires the backend-only `ai.agent_read` (reads) / `ai.agent_manage`\n * (`reindex`) scopes — default auth: service. **Server-side use only**; the\n * service token must never reach a browser.\n *\n * Quirks: only `PRODUCT` exists today (the `type` arg defaults to it);\n * `reindex` is a **full** rebuild (no delta), runs **asynchronously**, returns\n * `204` once *scheduled* (not on completion), has **no status endpoint** to\n * poll, and is costly — call it sparingly. The set of embedded fields is\n * configured in the AI Service, not here.\n */\nexport class RagIndexerService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(type: RagType): string {\n return `/ai-rag-indexer/${this.ctx.tenant}/${encodeURIComponent(type)}`;\n }\n\n /** The indexable embedding field names for `type` (default `\"PRODUCT\"`). */\n async ragMetadata(type: RagType = \"PRODUCT\", auth: AuthContext = SERVICE): Promise<string[]> {\n return this.ctx.http.request<string[]>({\n method: \"GET\",\n path: `${this.base(type)}/rag-metadata`,\n auth,\n });\n }\n\n /** The filterable metadata fields for `type` (default `\"PRODUCT\"`). */\n async filterMetadata(\n type: RagType = \"PRODUCT\",\n auth: AuthContext = SERVICE,\n ): Promise<MetadataFilter[]> {\n return this.ctx.http.request<MetadataFilter[]>({\n method: \"GET\",\n path: `${this.base(type)}/filter-metadata`,\n auth,\n });\n }\n\n /**\n * Schedule a full asynchronous re-index for `type` (default `\"PRODUCT\"`).\n * Resolves once the rebuild is *scheduled* (HTTP 204); there is no progress\n * to await or poll. Costly — avoid calling on a hot path.\n */\n async reindex(type: RagType = \"PRODUCT\", auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base(type)}/reindex`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n SequenceSchema,\n SequenceSchemaCreate,\n NextIdCommandRequest,\n NextIdResponse,\n NextIdOptions,\n NextIdsBatchRequest,\n NextIdsBatchResponse,\n} from \"./sequential-id-types\";\n\nexport type {\n SequenceSchema,\n SequenceSchemaCreate,\n NextIdCommandRequest,\n NextIdResponse,\n NextIdOptions,\n BatchNextIdEntry,\n NextIdsBatchRequest,\n NextIdsBatchResponse,\n} from \"./sequential-id-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Sequential ID Service (`/sequential-id/{tenant}/…`): server-managed,\n * gap-free sequential identifiers (order/invoice numbers, etc.) driven by\n * tenant-defined sequence schemas.\n *\n * Requires the backend-only `sequentialid.schema_view` (read + next-id) /\n * `sequentialid.schema_manage` (CRUD + set-active) scopes — default auth:\n * service. Server-side use only; the service token must never reach a browser.\n *\n * Schemas are immutable upstream (no PATCH/PUT): to change one, `deleteSchema`\n * then `createSchema`. The `maxValue` is a hard cap with no auto-reset, and\n * only one schema may be active per type.\n */\nexport class SequentialIdService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/sequential-id/${this.ctx.tenant}/schemas`;\n }\n\n /** List all sequence schemas for the tenant. */\n async listSchemas(auth: AuthContext = SERVICE): Promise<SequenceSchema[]> {\n return this.ctx.http.request<SequenceSchema[]>({\n method: \"GET\",\n path: this.base(),\n auth,\n });\n }\n\n /** Retrieve one sequence schema by id. */\n async getSchema(schemaId: string, auth: AuthContext = SERVICE): Promise<SequenceSchema> {\n return this.ctx.http.request<SequenceSchema>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(schemaId)}`,\n auth,\n });\n }\n\n /** Create a sequence schema. Schemas are immutable — there is no update. */\n async createSchema(\n schema: SequenceSchemaCreate,\n auth: AuthContext = SERVICE,\n ): Promise<SequenceSchema> {\n return this.ctx.http.request<SequenceSchema>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: schema,\n });\n }\n\n /** Delete a sequence schema by id. */\n async deleteSchema(schemaId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(schemaId)}`,\n auth,\n });\n }\n\n /** Mark a schema active for its type (only one schema may be active per type). */\n async setActiveSchema(schemaId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/${encodeURIComponent(schemaId)}/setActive`,\n auth,\n });\n }\n\n /** Get the active schema for a given schema type. */\n async listSchemasByType(schemaType: string, auth: AuthContext = SERVICE): Promise<SequenceSchema> {\n return this.ctx.http.request<SequenceSchema>({\n method: \"GET\",\n path: `${this.base()}/types/${encodeURIComponent(schemaType)}`,\n auth,\n });\n }\n\n /**\n * Generate the next id for a schema type. `body` carries an optional\n * `sequenceKey` (independent sub-pool counter) and `placeholders`.\n * `opts.siteCode` derives time/country placeholders from the site's settings.\n */\n async nextId(\n schemaType: string,\n body: NextIdCommandRequest = {},\n opts: NextIdOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<NextIdResponse> {\n const query = opts.siteCode ? { siteCode: opts.siteCode } : undefined;\n return this.ctx.http.request<NextIdResponse>({\n method: \"POST\",\n path: `${this.base()}/types/${encodeURIComponent(schemaType)}/nextId`,\n auth,\n body,\n ...(query ? { query } : {}),\n });\n }\n\n /**\n * Generate next ids for multiple schema types in one call. NOTE: the batch\n * endpoint path omits the `{tenant}` segment — the service derives the\n * tenant from the token.\n */\n async nextIdsBatch(\n req: NextIdsBatchRequest,\n auth: AuthContext = SERVICE,\n ): Promise<NextIdsBatchResponse> {\n return this.ctx.http.request<NextIdsBatchResponse>({\n method: \"POST\",\n path: `/sequential-id/sequenceSchemaBatch/nextIds`,\n auth,\n body: req,\n });\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Fee,\n ItemFee,\n FeeDraft,\n ItemFeeDraft,\n ItemFeeSearch,\n ListFeesQuery,\n SetItemFeesOptions,\n} from \"./fee-types\";\n\nexport type {\n Fee,\n ItemFee,\n FeeDraft,\n ItemFeeDraft,\n ItemFeeSearch,\n ListFeesQuery,\n SetItemFeesOptions,\n} from \"./fee-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Fee Service (`/fee/{tenant}/…`): fee definitions plus the\n * item/product mappings that attach them. Writes require a backend-only scope\n * (`fee.fee_*` / `fee.item_*`); GETs need a token but no scope. Default auth:\n * service. Server-side use only — the service token must never reach a browser.\n *\n * Quirks (server behavior, not handled here): a payment-type fee's `code` must\n * equal the payment-mode code or the fee is silently ignored; a wrong/missing\n * `siteCode` filters to an empty array rather than erroring; an expired\n * `activeTimespan` silently disables the fee; `setItemFees`/`setProductFees`\n * replace the whole mapping unless `partial` is set.\n */\nexport class FeeService {\n constructor(private readonly ctx: ClientContext) {}\n\n private feesBase(): string {\n return `/fee/${this.ctx.tenant}/fees`;\n }\n\n private itemFeesBase(): string {\n return `/fee/${this.ctx.tenant}/itemFees`;\n }\n\n private productFeesBase(): string {\n return `/fee/${this.ctx.tenant}/productFees`;\n }\n\n // --- Fee definitions ---\n\n /**\n * List fee definitions, wrapped in the shared {@link PaginatedItems}\n * envelope (same heuristic as `media.list`: `hasNextPage` is true when the\n * returned page is full). Defaults match Emporix server defaults\n * (`pageNumber: 1`, `pageSize: 60`).\n */\n async list(query: ListFeesQuery = {}, auth: AuthContext = SERVICE): Promise<PaginatedItems<Fee>> {\n const pageNumber = query.pageNumber ?? 1;\n const pageSize = query.pageSize ?? 60;\n const items = await this.ctx.http.request<Fee[]>({\n method: \"GET\",\n path: this.feesBase(),\n auth,\n query: { ...query, pageNumber, pageSize },\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Retrieve one fee definition by id. */\n async get(id: string, auth: AuthContext = SERVICE): Promise<Fee> {\n return this.ctx.http.request<Fee>({\n method: \"GET\",\n path: `${this.feesBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create a fee definition. */\n async create(draft: FeeDraft, auth: AuthContext = SERVICE): Promise<Fee> {\n return this.ctx.http.request<Fee>({\n method: \"POST\",\n path: this.feesBase(),\n auth,\n body: draft,\n });\n }\n\n /** Update a fee definition by id. */\n async update(id: string, draft: FeeDraft, auth: AuthContext = SERVICE): Promise<Fee> {\n return this.ctx.http.request<Fee>({\n method: \"PUT\",\n path: `${this.feesBase()}/${encodeURIComponent(id)}`,\n auth,\n body: draft,\n });\n }\n\n /** Delete a fee definition by id. */\n async delete(id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.feesBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n // --- Item-fee mappings ---\n\n /** List all item-fee mappings. */\n async listItemFees(auth: AuthContext = SERVICE): Promise<ItemFee[]> {\n return this.ctx.http.request<ItemFee[]>({\n method: \"GET\",\n path: this.itemFeesBase(),\n auth,\n });\n }\n\n /** Fee mappings for one item YRN. */\n async getItemFees(itemYrn: string, auth: AuthContext = SERVICE): Promise<ItemFee[]> {\n return this.ctx.http.request<ItemFee[]>({\n method: \"GET\",\n path: `${this.itemFeesBase()}/${encodeURIComponent(itemYrn)}/fees`,\n auth,\n });\n }\n\n /** Create an item-fee mapping. */\n async createItemFee(draft: ItemFeeDraft, auth: AuthContext = SERVICE): Promise<ItemFee> {\n return this.ctx.http.request<ItemFee>({\n method: \"POST\",\n path: this.itemFeesBase(),\n auth,\n body: draft,\n });\n }\n\n /**\n * Set the fee list for an item YRN. Destructive replace by default; pass\n * `{ partial: true }` to merge (`?partial=true`).\n */\n async setItemFees(\n itemYrn: string,\n feeIds: string[],\n opts: SetItemFeesOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<ItemFee> {\n return this.ctx.http.request<ItemFee>({\n method: \"PUT\",\n path: `${this.itemFeesBase()}/${encodeURIComponent(itemYrn)}/fees`,\n auth,\n body: { feeIds },\n ...(opts.partial ? { query: { partial: \"true\" } } : {}),\n });\n }\n\n /**\n * Delete item-fee mappings for a YRN. Without `feeId`, removes all mappings\n * for the YRN; with `feeId`, removes that single fee from the mapping.\n */\n async deleteItemFees(itemYrn: string, feeId?: string, auth: AuthContext = SERVICE): Promise<void> {\n const base = `${this.itemFeesBase()}/${encodeURIComponent(itemYrn)}/fees`;\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: feeId ? `${base}/${encodeURIComponent(feeId)}` : base,\n auth,\n });\n }\n\n /** Search item-fee mappings by item YRNs + site. */\n async searchItemFees(search: ItemFeeSearch, auth: AuthContext = SERVICE): Promise<ItemFee[]> {\n return this.ctx.http.request<ItemFee[]>({\n method: \"POST\",\n path: `${this.itemFeesBase()}/search`,\n auth,\n body: search,\n });\n }\n\n // --- Product-fee mappings ---\n\n /** Fee mappings for a product id. */\n async getProductFees(productId: string, auth: AuthContext = SERVICE): Promise<ItemFee[]> {\n return this.ctx.http.request<ItemFee[]>({\n method: \"GET\",\n path: `${this.productFeesBase()}/${encodeURIComponent(productId)}/fees`,\n auth,\n });\n }\n\n /**\n * Set the fee list for a product id. Destructive replace by default; pass\n * `{ partial: true }` to merge (`?partial=true`).\n */\n async setProductFees(\n productId: string,\n feeIds: string[],\n opts: SetItemFeesOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<ItemFee> {\n return this.ctx.http.request<ItemFee>({\n method: \"PUT\",\n path: `${this.productFeesBase()}/${encodeURIComponent(productId)}/fees`,\n auth,\n body: { feeIds },\n ...(opts.partial ? { query: { partial: \"true\" } } : {}),\n });\n }\n\n /** Delete all fee mappings for a product id. */\n async deleteProductFees(productId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.productFeesBase()}/${encodeURIComponent(productId)}/fees`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport { auth, type AuthContext } from \"../core/auth\";\n\n/** Options for {@link CloudFunctionsService.invoke}. */\nexport interface InvokeCloudFunctionOptions<TReq = unknown> {\n /** HTTP method. Default: \"POST\" (the canonical invoke). */\n method?: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\";\n /** Optional sub-path the function exposes (leading slash optional). */\n path?: string;\n /** Request body (arbitrary JSON). */\n body?: TReq;\n /** Query-string params. */\n query?: Record<string, string | number | undefined>;\n /** Extra request headers (Content-Type: application/json is the default). */\n headers?: Record<string, string>;\n}\n\n/**\n * Invokes Emporix-hosted cloud functions. Request/response shapes are\n * caller-defined (generic) — there is no schema. Auth may be service,\n * customer, anonymous, or raw; the default is anonymous.\n */\nexport class CloudFunctionsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/cloud-functions/${this.ctx.tenant}/functions`;\n }\n\n async invoke<TRes = unknown, TReq = unknown>(\n functionId: string,\n options: InvokeCloudFunctionOptions<TReq> = {},\n authCtx: AuthContext = auth.anonymous(),\n ): Promise<TRes> {\n const sub = options.path ? `/${options.path.replace(/^\\//, \"\")}` : \"\";\n return this.ctx.http.request<TRes>({\n method: options.method ?? \"POST\",\n path: `${this.base()}/${functionId}${sub}`,\n auth: authCtx,\n ...(options.body !== undefined ? { body: options.body } : {}),\n ...(options.query ? { query: options.query } : {}),\n ...(options.headers ? { headers: options.headers } : {}),\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n WebhookSubscription,\n WebhookSubscriptionUpdateItem,\n WebhookSubscriptionUpdateResultItem,\n WebhookConfig,\n WebhookConfigDraft,\n WebhookConfigPatch,\n WebhookConfigCreated,\n WebhookStatistics,\n WebhookDashboardAccess,\n WebhookStatisticsQuery,\n DeleteConfigOptions,\n} from \"./webhook-types\";\n\nexport type {\n WebhookSubscription,\n WebhookSubscriptionUpdateItem,\n WebhookSubscriptionUpdateResultItem,\n WebhookConfig,\n WebhookConfigDraft,\n WebhookConfigPatch,\n WebhookConfigCreated,\n WebhookStatistics,\n WebhookDashboardAccess,\n WebhookStatisticsQuery,\n DeleteConfigOptions,\n} from \"./webhook-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Webhook administration (`/webhook/{tenant}/…`): the event-subscription\n * catalog and batch toggle, delivery-config CRUD, statistics, and Svix\n * dashboard access. Requires the backend-only `webhook.subscription_read` /\n * `webhook.subscription_manage` scopes — default auth: service. Server-side\n * use only; the service token must never reach a browser.\n */\nexport class WebhookService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/webhook/${this.ctx.tenant}`;\n }\n\n /** List the event-subscription catalog with each event's on/off state. */\n async listEventSubscriptions(auth: AuthContext = SERVICE): Promise<WebhookSubscription[]> {\n return this.ctx.http.request<WebhookSubscription[]>({\n method: \"GET\",\n path: `${this.base()}/event-subscriptions`,\n auth,\n });\n }\n\n /**\n * Batch subscribe/unsubscribe events. Returns the **207** per-item result\n * array verbatim — the batch can partially fail, so inspect each element's\n * `code`/`status` (e.g. `results.filter(r => (r.code ?? 0) >= 400)`). Does\n * NOT throw on a 207 with failed items; only a non-2xx HTTP status throws.\n */\n async updateEventSubscriptions(\n items: WebhookSubscriptionUpdateItem[],\n auth: AuthContext = SERVICE,\n ): Promise<WebhookSubscriptionUpdateResultItem[]> {\n return this.ctx.http.request<WebhookSubscriptionUpdateResultItem[]>({\n method: \"PATCH\",\n path: `${this.base()}/event-subscriptions`,\n auth,\n body: items,\n });\n }\n\n /** List delivery configurations. */\n async listConfigs(auth: AuthContext = SERVICE): Promise<WebhookConfig[]> {\n return this.ctx.http.request<WebhookConfig[]>({\n method: \"GET\",\n path: `${this.base()}/config`,\n auth,\n });\n }\n\n /** Retrieve one delivery configuration by code. */\n async getConfig(code: string, auth: AuthContext = SERVICE): Promise<WebhookConfig> {\n return this.ctx.http.request<WebhookConfig>({\n method: \"GET\",\n path: `${this.base()}/config/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /** Create a delivery configuration. Returns the server-assigned `{ code }`. */\n async createConfig(\n draft: WebhookConfigDraft,\n auth: AuthContext = SERVICE,\n ): Promise<WebhookConfigCreated> {\n return this.ctx.http.request<WebhookConfigCreated>({\n method: \"POST\",\n path: `${this.base()}/config`,\n auth,\n body: draft,\n });\n }\n\n /** Replace a delivery configuration by code (204). */\n async replaceConfig(\n code: string,\n draft: WebhookConfigDraft,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/config/${encodeURIComponent(code)}`,\n auth,\n body: draft,\n });\n }\n\n /**\n * Partially update a delivery configuration by code (204). The body is an\n * **array** of `{ op, path, value }` operations (UPSERT / REMOVE).\n */\n async patchConfig(\n code: string,\n patches: WebhookConfigPatch[],\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/config/${encodeURIComponent(code)}`,\n auth,\n body: patches,\n });\n }\n\n /**\n * Delete a delivery configuration by code. Pass `{ force: true }` to delete\n * the currently-active config (the server otherwise rejects it).\n */\n async deleteConfig(\n code: string,\n opts: DeleteConfigOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/config/${encodeURIComponent(code)}`,\n auth,\n ...(opts.force === true ? { query: { force: \"true\" } } : {}),\n });\n }\n\n /** Read delivery statistics over an optional `YYYY-MM` range. */\n async getStatistics(\n query: WebhookStatisticsQuery = {},\n auth: AuthContext = SERVICE,\n ): Promise<WebhookStatistics> {\n const q: Record<string, string> = {};\n if (query.fromYearMonth) q.fromYearMonth = query.fromYearMonth;\n if (query.toYearMonth) q.toYearMonth = query.toYearMonth;\n return this.ctx.http.request<WebhookStatistics>({\n method: \"GET\",\n path: `${this.base()}/statistics`,\n auth,\n ...(Object.keys(q).length > 0 ? { query: q } : {}),\n });\n }\n\n /** Obtain Svix dashboard access (URL / token). */\n async getDashboardAccess(auth: AuthContext = SERVICE): Promise<WebhookDashboardAccess> {\n return this.ctx.http.request<WebhookDashboardAccess>({\n method: \"GET\",\n path: `${this.base()}/dashboard-access`,\n auth,\n });\n }\n}\n","import type { ClientContext, PaginatedItems } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Schema,\n SchemaDraft,\n SchemaUpdate,\n SchemaTypeName,\n ListSchemasQuery,\n CustomEntity,\n CustomEntityDraft,\n CustomInstance,\n CustomInstanceDraft,\n ListInstancesQuery,\n ListCustomEntitiesOptions,\n InstanceSearchBody,\n} from \"./schema-types\";\n\nexport type {\n Schema,\n SchemaAttribute,\n SchemaTypeName,\n SchemaDraft,\n SchemaUpdate,\n CustomEntity,\n CustomInstance,\n CustomEntityDraft,\n CustomInstanceDraft,\n ListSchemasQuery,\n ListInstancesQuery,\n ListCustomEntitiesOptions,\n InstanceSearchBody,\n} from \"./schema-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Schema Service (`/schema/{tenant}/…`): schemas, entity types, custom\n * entities and their instances. Requires the backend-only `schema.schema_*`\n * / `schema.custominstance_*` scopes — default auth: service. Server-side use\n * only; the service token must never reach a browser.\n */\nexport class SchemaService {\n constructor(private readonly ctx: ClientContext) {}\n\n private schemasBase(): string {\n return `/schema/${this.ctx.tenant}/schemas`;\n }\n\n private entitiesBase(): string {\n return `/schema/${this.ctx.tenant}/custom-entities`;\n }\n\n private instancesBase(type: string): string {\n return `${this.entitiesBase()}/${encodeURIComponent(type)}/instances`;\n }\n\n // --- (A) Schemas ---------------------------------------------------------\n\n /**\n * List schemas, wrapped in the shared {@link PaginatedItems} envelope.\n * `hasNextPage` is the standard SDK heuristic (`items.length === pageSize`).\n * Pagination defaults match the rest of the SDK (`pageNumber: 1`,\n * `pageSize: 60`).\n */\n async listSchemas(\n query: ListSchemasQuery = {},\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<Schema>> {\n const pageNumber = query.pageNumber ?? 1;\n const pageSize = query.pageSize ?? 60;\n const q: Record<string, string | number> = { pageNumber, pageSize };\n if (query.q) q.q = query.q;\n if (query.type) q.type = query.type;\n const items = await this.ctx.http.request<Schema[]>({\n method: \"GET\",\n path: this.schemasBase(),\n auth,\n query: q,\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Retrieve one schema by id. */\n async getSchema(id: string, auth: AuthContext = SERVICE): Promise<Schema> {\n return this.ctx.http.request<Schema>({\n method: \"GET\",\n path: `${this.schemasBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create a schema. */\n async createSchema(draft: SchemaDraft, auth: AuthContext = SERVICE): Promise<Schema> {\n return this.ctx.http.request<Schema>({\n method: \"POST\",\n path: this.schemasBase(),\n auth,\n body: draft,\n });\n }\n\n /**\n * Update a schema. The upstream API requires `draft.metadata.version`; a\n * stale version yields 409 Conflict (propagated as the standard conflict\n * error).\n */\n async updateSchema(\n id: string,\n draft: SchemaUpdate,\n auth: AuthContext = SERVICE,\n ): Promise<Schema> {\n return this.ctx.http.request<Schema>({\n method: \"PUT\",\n path: `${this.schemasBase()}/${encodeURIComponent(id)}`,\n auth,\n body: draft,\n });\n }\n\n /** Delete a schema by id. */\n async deleteSchema(id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.schemasBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /**\n * Validate a schema document without persisting it (`POST /schemas/file`).\n * Returns the server's validation result verbatim.\n */\n async validateSchemaFile<R = unknown>(\n body: SchemaDraft,\n auth: AuthContext = SERVICE,\n ): Promise<R> {\n return this.ctx.http.request<R>({\n method: \"POST\",\n path: `${this.schemasBase()}/file`,\n auth,\n body,\n });\n }\n\n // --- (B) Types -----------------------------------------------------------\n\n /** List entity types that currently have at least one schema. */\n async listTypes(auth: AuthContext = SERVICE): Promise<SchemaTypeName[]> {\n return this.ctx.http.request<SchemaTypeName[]>({\n method: \"GET\",\n path: `/schema/${this.ctx.tenant}/types`,\n auth,\n });\n }\n\n /** Set the entity types a schema applies to (`PUT /schemas/{id}/types`). */\n async setSchemaTypes(\n id: string,\n types: SchemaTypeName[],\n auth: AuthContext = SERVICE,\n ): Promise<Schema> {\n return this.ctx.http.request<Schema>({\n method: \"PUT\",\n path: `${this.schemasBase()}/${encodeURIComponent(id)}/types`,\n auth,\n body: { types },\n });\n }\n\n // --- (C) Custom entities -------------------------------------------------\n\n /** List custom-entity definitions. `expandSchemas` inlines each schema body. */\n async listCustomEntities(\n opts: ListCustomEntitiesOptions = {},\n auth: AuthContext = SERVICE,\n ): Promise<CustomEntity[]> {\n return this.ctx.http.request<CustomEntity[]>({\n method: \"GET\",\n path: this.entitiesBase(),\n auth,\n ...(opts.expandSchemas ? { query: { expandSchemas: \"true\" } } : {}),\n });\n }\n\n /** Retrieve one custom-entity definition by id. */\n async getCustomEntity(id: string, auth: AuthContext = SERVICE): Promise<CustomEntity> {\n return this.ctx.http.request<CustomEntity>({\n method: \"GET\",\n path: `${this.entitiesBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create a custom-entity definition. */\n async createCustomEntity(\n draft: CustomEntityDraft,\n auth: AuthContext = SERVICE,\n ): Promise<CustomEntity> {\n return this.ctx.http.request<CustomEntity>({\n method: \"POST\",\n path: this.entitiesBase(),\n auth,\n body: draft,\n });\n }\n\n /** Update a custom-entity definition. */\n async updateCustomEntity(\n id: string,\n draft: CustomEntityDraft,\n auth: AuthContext = SERVICE,\n ): Promise<CustomEntity> {\n return this.ctx.http.request<CustomEntity>({\n method: \"PUT\",\n path: `${this.entitiesBase()}/${encodeURIComponent(id)}`,\n auth,\n body: draft,\n });\n }\n\n /**\n * Delete a custom-entity definition. The server rejects with 409 if\n * instances or schemas still reference it (propagated as the standard\n * conflict error).\n */\n async deleteCustomEntity(id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.entitiesBase()}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n // --- (D) Custom instances ------------------------------------------------\n\n /**\n * List a custom entity's instances, wrapped in {@link PaginatedItems}.\n * `type` is the custom-entity type and is always the first argument.\n */\n async listInstances<T = Record<string, unknown>>(\n type: string,\n query: ListInstancesQuery = {},\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<CustomInstance<T>>> {\n const pageNumber = query.pageNumber ?? 1;\n const pageSize = query.pageSize ?? 60;\n const items = await this.ctx.http.request<CustomInstance<T>[]>({\n method: \"GET\",\n path: this.instancesBase(type),\n auth,\n query: { ...query, pageNumber, pageSize },\n });\n return { items, pageNumber, pageSize, hasNextPage: items.length === pageSize };\n }\n\n /** Retrieve one instance by id. */\n async getInstance<T = Record<string, unknown>>(\n type: string,\n id: string,\n auth: AuthContext = SERVICE,\n ): Promise<CustomInstance<T>> {\n return this.ctx.http.request<CustomInstance<T>>({\n method: \"GET\",\n path: `${this.instancesBase(type)}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create an instance of a custom entity. */\n async createInstance<T = Record<string, unknown>>(\n type: string,\n draft: CustomInstanceDraft<T>,\n auth: AuthContext = SERVICE,\n ): Promise<CustomInstance<T>> {\n return this.ctx.http.request<CustomInstance<T>>({\n method: \"POST\",\n path: this.instancesBase(type),\n auth,\n body: draft,\n });\n }\n\n /** Replace an instance (full `PUT`). */\n async replaceInstance<T = Record<string, unknown>>(\n type: string,\n id: string,\n draft: CustomInstanceDraft<T>,\n auth: AuthContext = SERVICE,\n ): Promise<CustomInstance<T>> {\n return this.ctx.http.request<CustomInstance<T>>({\n method: \"PUT\",\n path: `${this.instancesBase(type)}/${encodeURIComponent(id)}`,\n auth,\n body: draft,\n });\n }\n\n /** Partially update an instance (`PATCH`). */\n async patchInstance<T = Record<string, unknown>>(\n type: string,\n id: string,\n patch: Partial<CustomInstanceDraft<T>>,\n auth: AuthContext = SERVICE,\n ): Promise<CustomInstance<T>> {\n return this.ctx.http.request<CustomInstance<T>>({\n method: \"PATCH\",\n path: `${this.instancesBase(type)}/${encodeURIComponent(id)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete an instance by id. */\n async deleteInstance(type: string, id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.instancesBase(type)}/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /**\n * Structured search over a custom entity's instances\n * (`POST /instances/search`), wrapped in {@link PaginatedItems}.\n */\n async searchInstances<T = Record<string, unknown>>(\n type: string,\n body: InstanceSearchBody,\n auth: AuthContext = SERVICE,\n ): Promise<PaginatedItems<CustomInstance<T>>> {\n const items = await this.ctx.http.request<CustomInstance<T>[]>({\n method: \"POST\",\n path: `${this.instancesBase(type)}/search`,\n auth,\n body,\n });\n return { items, pageNumber: 1, pageSize: items.length, hasNextPage: false };\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n TextRequest,\n TextResponse,\n CompletionRequest,\n CompletionResponse,\n Agent,\n AgentInput,\n AgentPatchOp,\n AgentSearchQuery,\n ChatRequest,\n ChatResponse,\n JobIdResponse,\n DeleteAgentOptions,\n} from \"./ai-types\";\n\nexport type {\n TextRequest,\n TextResponse,\n CompletionMessage,\n CompletionRequest,\n CompletionResponse,\n Agent,\n AgentInput,\n AgentPatchOp,\n AgentSearchQuery,\n ChatRequest,\n ChatResponse,\n JobIdResponse,\n DeleteAgentOptions,\n} from \"./ai-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix AI Service (`/ai-service/{tenant}/…`): text generation, chat\n * completions, and the agentic layer (agent CRUD + synchronous/asynchronous\n * chat). Every endpoint requires a backend-only `ai.*` scope and the\n * **service (clientCredentials) token** — default auth: service.\n *\n * Server-side use only; the service token must never reach a browser. A\n * storefront chat (scope `ai.agentexecution_manage_own`) would require a\n * BFF / token-proxy — out of scope for this SDK.\n *\n * The model is server-fixed per tenant; there is no `model` parameter.\n */\nexport class AiService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/ai-service/${this.ctx.tenant}`;\n }\n\n /** Generate text from a single prompt (`POST /texts`). Honors `maxTokens`. */\n async generateText(input: TextRequest, auth: AuthContext = SERVICE): Promise<TextResponse> {\n return this.ctx.http.request<TextResponse>({\n method: \"POST\",\n path: `${this.base()}/texts`,\n auth,\n body: input,\n });\n }\n\n /** Run a chat completion over a message list (`POST /completions`). No `maxTokens`. */\n async complete(\n input: CompletionRequest,\n auth: AuthContext = SERVICE,\n ): Promise<CompletionResponse> {\n return this.ctx.http.request<CompletionResponse>({\n method: \"POST\",\n path: `${this.base()}/completions`,\n auth,\n body: input,\n });\n }\n\n /** List all agentic agents. */\n async listAgents(auth: AuthContext = SERVICE): Promise<Agent[]> {\n return this.ctx.http.request<Agent[]>({\n method: \"GET\",\n path: `${this.base()}/agentic/agents`,\n auth,\n });\n }\n\n /** Retrieve one agent by id. */\n async getAgent(id: string, auth: AuthContext = SERVICE): Promise<Agent> {\n return this.ctx.http.request<Agent>({\n method: \"GET\",\n path: `${this.base()}/agentic/agents/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Create-or-replace an agent by id (`PUT`). Takes the agent write shape. */\n async upsertAgent(id: string, agent: AgentInput, auth: AuthContext = SERVICE): Promise<Agent> {\n return this.ctx.http.request<Agent>({\n method: \"PUT\",\n path: `${this.base()}/agentic/agents/${encodeURIComponent(id)}`,\n auth,\n body: agent,\n });\n }\n\n /**\n * Patch an agent with an op array (`PATCH`). `ops` use the upstream\n * UPPERCASE enum (`ADD | REMOVE | REPLACE`) and are sent verbatim — this is\n * NOT RFC-6902 JSON-Patch.\n */\n async patchAgent(\n id: string,\n ops: AgentPatchOp[],\n auth: AuthContext = SERVICE,\n ): Promise<Agent> {\n return this.ctx.http.request<Agent>({\n method: \"PATCH\",\n path: `${this.base()}/agentic/agents/${encodeURIComponent(id)}`,\n auth,\n body: ops,\n });\n }\n\n /**\n * Delete an agent by id. Pass `{ force: true }` to delete an agent that is\n * still referenced elsewhere (`?force=true`).\n */\n async deleteAgent(\n id: string,\n auth: AuthContext = SERVICE,\n opts: DeleteAgentOptions = {},\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/agentic/agents/${encodeURIComponent(id)}`,\n auth,\n ...(opts.force ? { query: { force: \"true\" } } : {}),\n });\n }\n\n /** Server-side agent search (`POST /agentic/agents/search`). */\n async searchAgents(query: AgentSearchQuery, auth: AuthContext = SERVICE): Promise<Agent[]> {\n return this.ctx.http.request<Agent[]>({\n method: \"POST\",\n path: `${this.base()}/agentic/agents/search`,\n auth,\n body: query,\n });\n }\n\n /**\n * Synchronous agent chat (`POST /agentic/chat`). Returns the response\n * ARRAY verbatim (the upstream contract is an array, not a single object).\n */\n async chat(input: ChatRequest, auth: AuthContext = SERVICE): Promise<ChatResponse[]> {\n return this.ctx.http.request<ChatResponse[]>({\n method: \"POST\",\n path: `${this.base()}/agentic/chat`,\n auth,\n body: input,\n });\n }\n\n /**\n * Fire-and-forget agent chat (`POST /agentic/chat-async`, HTTP 201).\n * Returns the job-id ARRAY verbatim.\n */\n async chatAsync(input: ChatRequest, auth: AuthContext = SERVICE): Promise<JobIdResponse[]> {\n return this.ctx.http.request<JobIdResponse[]>({\n method: \"POST\",\n path: `${this.base()}/agentic/chat-async`,\n auth,\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n TaxConfig,\n TaxConfigInput,\n TaxConfigUpdate,\n TaxConfigCreated,\n TaxCalculationRequest,\n TaxCalculationResult,\n} from \"./tax-types\";\n\nexport type {\n TaxClass,\n TaxLocation,\n TaxConfig,\n TaxConfigInput,\n TaxConfigUpdate,\n TaxConfigCreated,\n TaxCalculationInput,\n TaxCalculationRequest,\n TaxCalculationResult,\n} from \"./tax-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Tax Service (`/tax/{tenant}/…`): CRUD over per-location tax\n * configurations and the net/gross tax-calculation command. Every endpoint\n * requires a backend `tax.tax_read` / `tax.tax_manage` scope and the\n * **service (clientCredentials) token** — default auth: service.\n *\n * Server-side use only; the service token must never reach a browser.\n */\nexport class TaxService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/tax/${this.ctx.tenant}`;\n }\n\n /** List all per-location tax configurations. */\n async listTaxConfigs(auth: AuthContext = SERVICE): Promise<TaxConfig[]> {\n return this.ctx.http.request<TaxConfig[]>({\n method: \"GET\",\n path: `${this.base()}/taxes`,\n auth,\n });\n }\n\n /** Retrieve one tax configuration by its location (country) code. */\n async getTaxConfig(locationCode: string, auth: AuthContext = SERVICE): Promise<TaxConfig> {\n return this.ctx.http.request<TaxConfig>({\n method: \"GET\",\n path: `${this.base()}/taxes/${encodeURIComponent(locationCode)}`,\n auth,\n });\n }\n\n /** Create a tax configuration (`POST`). Returns the created `{ locationCode }`. */\n async createTaxConfig(\n input: TaxConfigInput,\n auth: AuthContext = SERVICE,\n ): Promise<TaxConfigCreated> {\n return this.ctx.http.request<TaxConfigCreated>({\n method: \"POST\",\n path: `${this.base()}/taxes`,\n auth,\n body: input,\n });\n }\n\n /**\n * Update a tax configuration by location code (`PUT`). `metadata.version` is\n * required (optimistic locking — a stale version yields 409).\n */\n async updateTaxConfig(\n locationCode: string,\n input: TaxConfigUpdate,\n auth: AuthContext = SERVICE,\n ): Promise<TaxConfig> {\n return this.ctx.http.request<TaxConfig>({\n method: \"PUT\",\n path: `${this.base()}/taxes/${encodeURIComponent(locationCode)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a tax configuration by location code. */\n async deleteTaxConfig(locationCode: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/taxes/${encodeURIComponent(locationCode)}`,\n auth,\n });\n }\n\n /**\n * Calculate net/gross values for a price (`PUT /taxes/calculation-commands`).\n * Single command in, single result out.\n */\n async calculateTax(\n request: TaxCalculationRequest,\n auth: AuthContext = SERVICE,\n ): Promise<TaxCalculationResult> {\n return this.ctx.http.request<TaxCalculationResult>({\n method: \"PUT\",\n path: `${this.base()}/taxes/calculation-commands`,\n auth,\n body: request,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n CouponList,\n Coupon,\n CouponInput,\n CouponUpdate,\n CouponCreated,\n Redemption,\n RedemptionInput,\n RedemptionCreated,\n ReferralCoupon,\n} from \"./coupon-types\";\n\nexport type {\n Coupon,\n CouponList,\n CouponInput,\n CouponUpdate,\n CouponCreated,\n Redemption,\n RedemptionInput,\n RedemptionCreated,\n ReferralCoupon,\n} from \"./coupon-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Coupon Service (`/coupon/{tenant}/…`): coupon CRUD, validation,\n * redemptions, and referral coupons.\n *\n * Every method defaults to the **service (clientCredentials) token**. For\n * customer-driven validation/redemption, pass `auth.customer(token)` as the\n * trailing argument (the React hooks do this with the browser context). The\n * service token must never reach a browser.\n */\nexport class CouponService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/coupon/${this.ctx.tenant}`;\n }\n\n /** List coupons by criteria. Returns a plain array. */\n async listCoupons(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CouponList> {\n return this.ctx.http.request<CouponList>({\n method: \"GET\",\n path: `${this.base()}/coupons`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one coupon by code. */\n async getCoupon(code: string, auth: AuthContext = SERVICE): Promise<Coupon> {\n return this.ctx.http.request<Coupon>({\n method: \"GET\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /** Create a coupon (`POST`, HTTP 201). Returns the created resource's `{ id?, yrn? }`. */\n async createCoupon(input: CouponInput, auth: AuthContext = SERVICE): Promise<CouponCreated> {\n return this.ctx.http.request<CouponCreated>({\n method: \"POST\",\n path: `${this.base()}/coupons`,\n auth,\n body: input,\n });\n }\n\n /** Replace a coupon by code (`PUT`). Resolves once the update is accepted. */\n async updateCoupon(code: string, input: CouponUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a coupon by code (`PATCH` merge body). */\n async patchCoupon(code: string, patch: CouponUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a coupon by code. */\n async deleteCoupon(code: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /**\n * Check whether a coupon can be redeemed (`POST /validation`). Resolves when\n * redeemable; throws an `EmporixError` otherwise (no response body).\n */\n async validateCoupon(\n code: string,\n redemption: RedemptionInput,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/validation`,\n auth,\n body: redemption,\n });\n }\n\n /** List a coupon's redemptions by criteria. */\n async listRedemptions(\n code: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<Redemption[]> {\n return this.ctx.http.request<Redemption[]>({\n method: \"GET\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/redemptions`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Redeem a coupon by creating a redemption (`POST`, HTTP 201). Returns the resource location. */\n async redeemCoupon(\n code: string,\n redemption: RedemptionInput,\n auth: AuthContext = SERVICE,\n ): Promise<RedemptionCreated> {\n return this.ctx.http.request<RedemptionCreated>({\n method: \"POST\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/redemptions`,\n auth,\n body: redemption,\n });\n }\n\n /** Retrieve one redemption by id. */\n async getRedemption(code: string, id: string, auth: AuthContext = SERVICE): Promise<Redemption> {\n return this.ctx.http.request<Redemption>({\n method: \"GET\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/redemptions/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Delete a redemption by id. */\n async deleteRedemption(code: string, id: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/coupons/${encodeURIComponent(code)}/redemptions/${encodeURIComponent(id)}`,\n auth,\n });\n }\n\n /** Retrieve a customer's referral coupon (resolves to an empty body when none exists). */\n async getReferralCoupon(customerNumber: string, auth: AuthContext = SERVICE): Promise<ReferralCoupon> {\n return this.ctx.http.request<ReferralCoupon>({\n method: \"GET\",\n path: `${this.base()}/referral-coupons/${encodeURIComponent(customerNumber)}`,\n auth,\n });\n }\n\n /** Create a referral coupon code for a customer (no request body). */\n async createReferralCoupon(\n customerNumber: string,\n auth: AuthContext = SERVICE,\n ): Promise<ReferralCoupon> {\n return this.ctx.http.request<ReferralCoupon>({\n method: \"POST\",\n path: `${this.base()}/referral-coupons/${encodeURIComponent(customerNumber)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { EmporixNotFoundError } from \"../core/errors\";\nimport type {\n CustomerSummaryBatch,\n PointsSummary,\n NewPointsEntry,\n AddedPoints,\n RedeemedPoints,\n RedeemOption,\n RedeemOptionList,\n RedeemMyPointsInput,\n RedeemCouponResult,\n} from \"./reward-points-types\";\n\nexport type {\n CustomerSummaryBatch,\n PointsSummary,\n NewPointsEntry,\n AddedPoints,\n RedeemedPoints,\n RedeemOption,\n RedeemOptionList,\n RedeemMyPointsInput,\n RedeemCouponResult,\n} from \"./reward-points-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Reward Points Service (`/reward-points/…`): admin customer-points\n * management, the signed-in customer's own points, and redeem options.\n *\n * Auth differs per group: admin and redeem-option management default to the\n * **service token**; the `/public/*` methods require a **customer token** (they\n * accept only `CustomerAccessToken`). Note the mixed base paths — customer/\n * public/batch endpoints omit `{tenant}`, redeem options include it. A point\n * balance (`getCustomerPoints` / `getMyPoints`) is returned as a bare `number`.\n */\nexport class RewardPointsService {\n constructor(private readonly ctx: ClientContext) {}\n\n /** Base without tenant (customer / public / batch endpoints). */\n private base(): string {\n return `/reward-points`;\n }\n\n /** Tenant-scoped base (redeem options only). */\n private tenantBase(): string {\n return `/reward-points/${this.ctx.tenant}`;\n }\n\n // --- Admin: customer points management (service token) ---\n\n /** Batch summary across all customers. */\n async listAllSummaries(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CustomerSummaryBatch> {\n return this.ctx.http.request<CustomerSummaryBatch>({\n method: \"GET\",\n path: `${this.base()}/summaryBatch`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one customer's reward-points balance. */\n async getCustomerPoints(customerId: string, auth: AuthContext = SERVICE): Promise<number> {\n return this.ctx.http.request<number>({\n method: \"GET\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}`,\n auth,\n });\n }\n\n /** Create a reward-points entry for a customer. */\n async createCustomerPoints(\n customerId: string,\n input: NewPointsEntry,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a customer's reward points. */\n async deleteCustomerPoints(customerId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}`,\n auth,\n });\n }\n\n /** Retrieve a reward-points summary for one customer. */\n async getCustomerSummary(customerId: string, auth: AuthContext = SERVICE): Promise<PointsSummary> {\n return this.ctx.http.request<PointsSummary>({\n method: \"GET\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}/summary`,\n auth,\n });\n }\n\n /** Add reward points for a customer. */\n async addPoints(customerId: string, input: AddedPoints, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}/addPoints`,\n auth,\n body: input,\n });\n }\n\n /** Redeem a customer's reward points (on behalf). */\n async redeemPoints(customerId: string, input: RedeemedPoints, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/customer/${encodeURIComponent(customerId)}/redeemPoints`,\n auth,\n body: input,\n });\n }\n\n // --- Storefront: the signed-in customer's own points (customer token required) ---\n\n /** The signed-in customer's reward-points balance. Requires a customer `auth`. */\n async getMyPoints(auth: AuthContext): Promise<number> {\n // A customer who has never earned points has no entry, and Emporix answers\n // 404 \"No reward points found\" — for the signed-in customer that simply\n // means zero points, so map it to 0 rather than surfacing an error.\n try {\n return await this.ctx.http.request<number>({\n method: \"GET\",\n path: `${this.base()}/public/customer`,\n auth,\n });\n } catch (err) {\n if (err instanceof EmporixNotFoundError) return 0;\n throw err;\n }\n }\n\n /** The signed-in customer's reward-points summary. Requires a customer `auth`. */\n async getMySummary(auth: AuthContext): Promise<PointsSummary> {\n // Same as getMyPoints: a 404 means the signed-in customer has no entry yet,\n // i.e. an empty summary (zero active points, no history), not an error.\n try {\n return await this.ctx.http.request<PointsSummary>({\n method: \"GET\",\n path: `${this.base()}/public/customer/summary`,\n auth,\n });\n } catch (err) {\n if (err instanceof EmporixNotFoundError) {\n return { activePoints: 0, summary: { addedPointsList: [] } };\n }\n throw err;\n }\n }\n\n /**\n * Redeem the signed-in customer's points for a coupon code. Requires a\n * customer `auth`. Returns the issued coupon `{ code }`.\n */\n async redeemMyPoints(input: RedeemMyPointsInput, auth: AuthContext): Promise<RedeemCouponResult> {\n return this.ctx.http.request<RedeemCouponResult>({\n method: \"POST\",\n path: `${this.base()}/public/customer/redeem`,\n auth,\n body: input,\n });\n }\n\n // --- Redeem options (tenant-scoped; read open to customer, management service-only) ---\n\n /** List redeem options. Defaults to the service token; pass a customer `auth` for storefront reads. */\n async listRedeemOptions(auth: AuthContext = SERVICE): Promise<RedeemOptionList> {\n return this.ctx.http.request<RedeemOptionList>({\n method: \"GET\",\n path: `${this.tenantBase()}/redeemOptions`,\n auth,\n });\n }\n\n /** Create a redeem option. Returns the updated options list. */\n async createRedeemOption(input: RedeemOption, auth: AuthContext = SERVICE): Promise<RedeemOptionList> {\n return this.ctx.http.request<RedeemOptionList>({\n method: \"POST\",\n path: `${this.tenantBase()}/redeemOptions`,\n auth,\n body: input,\n });\n }\n\n /** Update a redeem option by id. Resolves once accepted (no response body). */\n async updateRedeemOption(\n redeemOptionId: string,\n input: RedeemOption,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.tenantBase()}/redeemOptions/${encodeURIComponent(redeemOptionId)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a redeem option by id. */\n async deleteRedeemOption(redeemOptionId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.tenantBase()}/redeemOptions/${encodeURIComponent(redeemOptionId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Brand, BrandList, BrandInput, BrandUpdate } from \"./brand-types\";\n\nexport type { Brand, BrandList, BrandInput, BrandUpdate } from \"./brand-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Brand Service (`/brand/brands`): CRUD over brands. Server-side;\n * defaults to the service token (reads also work with an anonymous token).\n * The path carries no `{tenant}` segment — the tenant comes from the token.\n */\nexport class BrandService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/brand/brands`;\n }\n\n /** List all brands. */\n async listBrands(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<BrandList> {\n return this.ctx.http.request<BrandList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one brand by id. */\n async getBrand(brandId: string, auth: AuthContext = SERVICE): Promise<Brand> {\n return this.ctx.http.request<Brand>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(brandId)}`,\n auth,\n });\n }\n\n /** Create a brand. */\n async createBrand(input: BrandInput, auth: AuthContext = SERVICE): Promise<Brand> {\n return this.ctx.http.request<Brand>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /** Replace a brand by id. */\n async updateBrand(brandId: string, input: BrandUpdate, auth: AuthContext = SERVICE): Promise<Brand> {\n return this.ctx.http.request<Brand>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(brandId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a brand by id. */\n async patchBrand(brandId: string, patch: BrandUpdate, auth: AuthContext = SERVICE): Promise<Brand> {\n return this.ctx.http.request<Brand>({\n method: \"PATCH\",\n path: `${this.base()}/${encodeURIComponent(brandId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a brand by id. */\n async deleteBrand(brandId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(brandId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Label, LabelList, LabelInput, LabelUpdate } from \"./label-types\";\n\nexport type { Label, LabelList, LabelInput, LabelUpdate } from \"./label-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Label Service (`/label/labels`): CRUD over product labels (e.g.\n * \"Sale\", \"New\"). Server-side; defaults to the service token. The path carries\n * no `{tenant}` segment — the tenant comes from the token.\n */\nexport class LabelService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/label/labels`;\n }\n\n /** List all labels. */\n async listLabels(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<LabelList> {\n return this.ctx.http.request<LabelList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one label by id. */\n async getLabel(labelId: string, auth: AuthContext = SERVICE): Promise<Label> {\n return this.ctx.http.request<Label>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(labelId)}`,\n auth,\n });\n }\n\n /** Create a label. */\n async createLabel(input: LabelInput, auth: AuthContext = SERVICE): Promise<Label> {\n return this.ctx.http.request<Label>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /** Replace a label by id. */\n async updateLabel(labelId: string, input: LabelUpdate, auth: AuthContext = SERVICE): Promise<Label> {\n return this.ctx.http.request<Label>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(labelId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a label by id. */\n async patchLabel(labelId: string, patch: LabelUpdate, auth: AuthContext = SERVICE): Promise<Label> {\n return this.ctx.http.request<Label>({\n method: \"PATCH\",\n path: `${this.base()}/${encodeURIComponent(labelId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a label by id. */\n async deleteLabel(labelId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(labelId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Country, CountryList, CountryUpdate, Region, RegionList } from \"./country-types\";\n\nexport type { Country, CountryList, CountryUpdate, Region, RegionList } from \"./country-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Country Service (`/country/{tenant}/…`): countries and regions\n * master data. Server-side; defaults to the service token (reads also work\n * with an anonymous token). Countries are predefined — list/get/patch only\n * (no create/delete).\n */\nexport class CountryService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/country/${this.ctx.tenant}`;\n }\n\n /** List all countries. */\n async listCountries(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CountryList> {\n return this.ctx.http.request<CountryList>({\n method: \"GET\",\n path: `${this.base()}/countries`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one country by code. */\n async getCountry(countryCode: string, auth: AuthContext = SERVICE): Promise<Country> {\n return this.ctx.http.request<Country>({\n method: \"GET\",\n path: `${this.base()}/countries/${encodeURIComponent(countryCode)}`,\n auth,\n });\n }\n\n /** Partially update a country by code. Resolves once accepted (no response body). */\n async patchCountry(countryCode: string, patch: CountryUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/countries/${encodeURIComponent(countryCode)}`,\n auth,\n body: patch,\n });\n }\n\n /** List all regions. */\n async listRegions(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<RegionList> {\n return this.ctx.http.request<RegionList>({\n method: \"GET\",\n path: `${this.base()}/regions`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one region by code. */\n async getRegion(regionCode: string, auth: AuthContext = SERVICE): Promise<Region> {\n return this.ctx.http.request<Region>({\n method: \"GET\",\n path: `${this.base()}/regions/${encodeURIComponent(regionCode)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Currency,\n CurrencyList,\n CurrencyInput,\n CurrencyUpdate,\n CurrencyCreated,\n ExchangeRate,\n ExchangeRateList,\n ExchangeRateInput,\n ExchangeRateUpdate,\n ExchangeRateCreated,\n} from \"./currency-types\";\n\nexport type {\n Currency,\n CurrencyList,\n CurrencyInput,\n CurrencyUpdate,\n CurrencyCreated,\n ExchangeRate,\n ExchangeRateList,\n ExchangeRateInput,\n ExchangeRateUpdate,\n ExchangeRateCreated,\n} from \"./currency-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Currency Service (`/currency/{tenant}/…`): currencies and exchange\n * rates. Server-side; defaults to the service token.\n */\nexport class CurrencyService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/currency/${this.ctx.tenant}`;\n }\n\n // --- Currencies ---\n\n /** List all currencies. */\n async listCurrencies(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CurrencyList> {\n return this.ctx.http.request<CurrencyList>({\n method: \"GET\",\n path: `${this.base()}/currencies`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one currency by code. */\n async getCurrency(code: string, auth: AuthContext = SERVICE): Promise<Currency> {\n return this.ctx.http.request<Currency>({\n method: \"GET\",\n path: `${this.base()}/currencies/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /** Create a currency. */\n async createCurrency(input: CurrencyInput, auth: AuthContext = SERVICE): Promise<CurrencyCreated> {\n return this.ctx.http.request<CurrencyCreated>({\n method: \"POST\",\n path: `${this.base()}/currencies`,\n auth,\n body: input,\n });\n }\n\n /** Update a currency by code. */\n async updateCurrency(code: string, input: CurrencyUpdate, auth: AuthContext = SERVICE): Promise<Currency> {\n return this.ctx.http.request<Currency>({\n method: \"PUT\",\n path: `${this.base()}/currencies/${encodeURIComponent(code)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a currency by code. */\n async deleteCurrency(code: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/currencies/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n // --- Exchange rates ---\n\n /** List all exchange rates. */\n async listExchangeRates(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ExchangeRateList> {\n return this.ctx.http.request<ExchangeRateList>({\n method: \"GET\",\n path: `${this.base()}/exchanges`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one exchange rate by code. */\n async getExchangeRate(code: string, auth: AuthContext = SERVICE): Promise<ExchangeRate> {\n return this.ctx.http.request<ExchangeRate>({\n method: \"GET\",\n path: `${this.base()}/exchanges/${encodeURIComponent(code)}`,\n auth,\n });\n }\n\n /** Create an exchange rate. */\n async createExchangeRate(input: ExchangeRateInput, auth: AuthContext = SERVICE): Promise<ExchangeRateCreated> {\n return this.ctx.http.request<ExchangeRateCreated>({\n method: \"POST\",\n path: `${this.base()}/exchanges`,\n auth,\n body: input,\n });\n }\n\n /** Update an exchange rate by code. */\n async updateExchangeRate(code: string, input: ExchangeRateUpdate, auth: AuthContext = SERVICE): Promise<ExchangeRate> {\n return this.ctx.http.request<ExchangeRate>({\n method: \"PUT\",\n path: `${this.base()}/exchanges/${encodeURIComponent(code)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete an exchange rate by code. */\n async deleteExchangeRate(code: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/exchanges/${encodeURIComponent(code)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Site,\n SiteList,\n FindSiteInput,\n Zone,\n ZoneList,\n ShippingMethod,\n ShippingMethodList,\n ShippingGroup,\n ShippingGroupList,\n CgRelation,\n CgRelationList,\n QuoteInput,\n QuoteResult,\n QuoteSlotInput,\n MinimumFee,\n ResourceCreated,\n DeliveryWindowList,\n DeliveryWindowValidation,\n DeliveryTime,\n DeliveryTimeList,\n DeliveryTimeInput,\n DeliveryTimeUpdate,\n DeliverySlot,\n DeliverySlotList,\n DeliveryCycleInput,\n ShippingPatch,\n DeliveryCreated,\n} from \"./shipping-types\";\n\nexport type {\n Site,\n SiteList,\n FindSiteInput,\n Zone,\n ZoneList,\n ShippingMethod,\n ShippingMethodList,\n ShippingGroup,\n ShippingGroupList,\n CgRelation,\n CgRelationList,\n QuoteInput,\n QuoteResult,\n QuoteSlotInput,\n MinimumFee,\n ResourceCreated,\n DeliveryWindow,\n DeliveryWindowList,\n DeliveryWindowValidation,\n DeliveryTime,\n DeliveryTimeList,\n DeliveryTimeInput,\n DeliveryTimeUpdate,\n DeliverySlot,\n DeliverySlotList,\n DeliveryCycleInput,\n ShippingPatch,\n DeliveryCreated,\n} from \"./shipping-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Shipping Service (`/shipping/{tenant}/…`), Phase 1 — config: sites,\n * zones, methods, cost/quote, groups, customer-group relations. Server-side;\n * defaults to the service token. Most methods are site-scoped and take `site`\n * first; `findSites` is tenant-level. Delivery scheduling is Phase 2.\n */\nexport class ShippingService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/shipping/${this.ctx.tenant}`;\n }\n\n private siteBase(site: string): string {\n return `${this.base()}/${encodeURIComponent(site)}`;\n }\n\n // --- Sites ---\n\n /** Find shipping-related sites by postal code (`POST /findSite`). */\n async findSites(input: FindSiteInput, auth: AuthContext = SERVICE): Promise<SiteList> {\n return this.ctx.http.request<SiteList>({\n method: \"POST\",\n path: `${this.base()}/findSite`,\n auth,\n body: input,\n });\n }\n\n // --- Zones ---\n\n /** List shipping zones for a site. */\n async listZones(\n site: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ZoneList> {\n return this.ctx.http.request<ZoneList>({\n method: \"GET\",\n path: `${this.siteBase(site)}/zones`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one shipping zone. */\n async getZone(site: string, zoneId: string, auth: AuthContext = SERVICE): Promise<Zone> {\n return this.ctx.http.request<Zone>({\n method: \"GET\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}`,\n auth,\n });\n }\n\n /** Create a shipping zone. */\n async createZone(site: string, zone: Zone, auth: AuthContext = SERVICE): Promise<ResourceCreated> {\n return this.ctx.http.request<ResourceCreated>({\n method: \"POST\",\n path: `${this.siteBase(site)}/zones`,\n auth,\n body: zone,\n });\n }\n\n /** Replace a shipping zone. */\n async updateZone(site: string, zoneId: string, zone: Zone, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}`,\n auth,\n body: zone,\n });\n }\n\n /** Partially update a shipping zone. */\n async patchZone(site: string, zoneId: string, patch: Zone, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a shipping zone. */\n async deleteZone(site: string, zoneId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}`,\n auth,\n });\n }\n\n // --- Methods (per zone) ---\n\n /** List shipping methods of a zone. */\n async listMethods(\n site: string,\n zoneId: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ShippingMethodList> {\n return this.ctx.http.request<ShippingMethodList>({\n method: \"GET\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one shipping method. */\n async getMethod(site: string, zoneId: string, methodId: string, auth: AuthContext = SERVICE): Promise<ShippingMethod> {\n return this.ctx.http.request<ShippingMethod>({\n method: \"GET\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods/${encodeURIComponent(methodId)}`,\n auth,\n });\n }\n\n /** Create a shipping method in a zone. */\n async createMethod(site: string, zoneId: string, method: ShippingMethod, auth: AuthContext = SERVICE): Promise<ResourceCreated> {\n return this.ctx.http.request<ResourceCreated>({\n method: \"POST\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods`,\n auth,\n body: method,\n });\n }\n\n /** Replace a shipping method. */\n async updateMethod(site: string, zoneId: string, methodId: string, method: ShippingMethod, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods/${encodeURIComponent(methodId)}`,\n auth,\n body: method,\n });\n }\n\n /** Partially update a shipping method. */\n async patchMethod(site: string, zoneId: string, methodId: string, patch: ShippingMethod, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods/${encodeURIComponent(methodId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Delete a shipping method. */\n async deleteMethod(site: string, zoneId: string, methodId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.siteBase(site)}/zones/${encodeURIComponent(zoneId)}/methods/${encodeURIComponent(methodId)}`,\n auth,\n });\n }\n\n // --- Cost / quote ---\n\n /** Calculate the final shipping cost (`POST /quote`). */\n async quote(site: string, input: QuoteInput, auth: AuthContext = SERVICE): Promise<QuoteResult> {\n return this.ctx.http.request<QuoteResult>({\n method: \"POST\",\n path: `${this.siteBase(site)}/quote`,\n auth,\n body: input,\n });\n }\n\n /** Calculate the minimum shipping cost (`POST /quote/minimum`). */\n async quoteMinimum(site: string, input: QuoteInput, auth: AuthContext = SERVICE): Promise<MinimumFee> {\n return this.ctx.http.request<MinimumFee>({\n method: \"POST\",\n path: `${this.siteBase(site)}/quote/minimum`,\n auth,\n body: input,\n });\n }\n\n /** Calculate the shipping cost for a given slot (`POST /quote/slot`). */\n async quoteSlot(site: string, input: QuoteSlotInput, auth: AuthContext = SERVICE): Promise<MinimumFee> {\n return this.ctx.http.request<MinimumFee>({\n method: \"POST\",\n path: `${this.siteBase(site)}/quote/slot`,\n auth,\n body: input,\n });\n }\n\n // --- Groups ---\n\n /** List shipping groups for a site. */\n async listGroups(\n site: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ShippingGroupList> {\n return this.ctx.http.request<ShippingGroupList>({\n method: \"GET\",\n path: `${this.siteBase(site)}/groups`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one shipping group. */\n async getGroup(site: string, groupId: string, auth: AuthContext = SERVICE): Promise<ShippingGroup> {\n return this.ctx.http.request<ShippingGroup>({\n method: \"GET\",\n path: `${this.siteBase(site)}/groups/${encodeURIComponent(groupId)}`,\n auth,\n });\n }\n\n /** Create a shipping group. */\n async createGroup(site: string, group: ShippingGroup, auth: AuthContext = SERVICE): Promise<ResourceCreated> {\n return this.ctx.http.request<ResourceCreated>({\n method: \"POST\",\n path: `${this.siteBase(site)}/groups`,\n auth,\n body: group,\n });\n }\n\n /** Replace a shipping group. */\n async updateGroup(site: string, groupId: string, group: ShippingGroup, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.siteBase(site)}/groups/${encodeURIComponent(groupId)}`,\n auth,\n body: group,\n });\n }\n\n /** Delete a shipping group. */\n async deleteGroup(site: string, groupId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.siteBase(site)}/groups/${encodeURIComponent(groupId)}`,\n auth,\n });\n }\n\n // --- Customer-group relations ---\n\n /** List customer-group relations for a site. */\n async listCgRelations(\n site: string,\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<CgRelationList> {\n return this.ctx.http.request<CgRelationList>({\n method: \"GET\",\n path: `${this.siteBase(site)}/cgrelations`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a customer's customer-group relations. */\n async getCgRelations(site: string, customerId: string, auth: AuthContext = SERVICE): Promise<CgRelation> {\n return this.ctx.http.request<CgRelation>({\n method: \"GET\",\n path: `${this.siteBase(site)}/cgrelations/${encodeURIComponent(customerId)}`,\n auth,\n });\n }\n\n /** Create a customer-group relation. */\n async createCgRelation(site: string, relation: CgRelation, auth: AuthContext = SERVICE): Promise<ResourceCreated> {\n return this.ctx.http.request<ResourceCreated>({\n method: \"POST\",\n path: `${this.siteBase(site)}/cgrelations`,\n auth,\n body: relation,\n });\n }\n\n /** Update a customer's customer-group relations. */\n async updateCgRelations(site: string, customerId: string, relation: CgRelation, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.siteBase(site)}/cgrelations/${encodeURIComponent(customerId)}`,\n auth,\n body: relation,\n });\n }\n\n /** Delete a customer's customer-group relation. */\n async deleteCgRelation(site: string, customerId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.siteBase(site)}/cgrelations/${encodeURIComponent(customerId)}`,\n auth,\n });\n }\n\n // --- Phase 2: delivery windows ---\n\n /** Retrieve delivery windows for a delivery area + cart. */\n async getAreaDeliveryWindows(deliveryAreaId: string, cartId: string, auth: AuthContext = SERVICE): Promise<DeliveryWindowList> {\n return this.ctx.http.request<DeliveryWindowList>({\n method: \"GET\",\n path: `${this.base()}/areaDeliveryTimes/${encodeURIComponent(deliveryAreaId)}/${encodeURIComponent(cartId)}`,\n auth,\n });\n }\n\n /** Retrieve delivery windows for a cart. */\n async getCartDeliveryWindows(cartId: string, auth: AuthContext = SERVICE): Promise<DeliveryWindowList> {\n return this.ctx.http.request<DeliveryWindowList>({\n method: \"GET\",\n path: `${this.base()}/actualDeliveryWindows/${encodeURIComponent(cartId)}`,\n auth,\n });\n }\n\n /** Increment the delivery-window counter. */\n async incrementDeliveryWindowCounter(input: DeliveryWindowValidation, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/actualDeliveryWindows/incrementCounter`,\n auth,\n body: input,\n });\n }\n\n /** Validate a delivery window. Resolves when valid; throws otherwise. */\n async validateDeliveryWindow(input: DeliveryWindowValidation, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.base()}/deliveryWindowValidation`,\n auth,\n body: input,\n });\n }\n\n // --- Phase 2: delivery times ---\n\n /** List all delivery times. */\n async listDeliveryTimes(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<DeliveryTimeList> {\n return this.ctx.http.request<DeliveryTimeList>({\n method: \"GET\",\n path: `${this.base()}/delivery-times`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one delivery time. */\n async getDeliveryTime(deliveryTimeId: string, auth: AuthContext = SERVICE): Promise<DeliveryTime> {\n return this.ctx.http.request<DeliveryTime>({\n method: \"GET\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}`,\n auth,\n });\n }\n\n /** Create a delivery time. */\n async createDeliveryTime(input: DeliveryTimeInput, auth: AuthContext = SERVICE): Promise<DeliveryCreated> {\n return this.ctx.http.request<DeliveryCreated>({\n method: \"POST\",\n path: `${this.base()}/delivery-times`,\n auth,\n body: input,\n });\n }\n\n /** Create multiple delivery times (`POST /delivery-times/bulk`). */\n async createDeliveryTimesBulk(inputs: DeliveryTimeInput[], auth: AuthContext = SERVICE): Promise<DeliveryCreated[]> {\n return this.ctx.http.request<DeliveryCreated[]>({\n method: \"POST\",\n path: `${this.base()}/delivery-times/bulk`,\n auth,\n body: inputs,\n });\n }\n\n /** Replace a delivery time. */\n async updateDeliveryTime(deliveryTimeId: string, input: DeliveryTimeUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a delivery time (JSON-Patch op array). */\n async patchDeliveryTime(deliveryTimeId: string, ops: ShippingPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}`,\n auth,\n body: ops,\n });\n }\n\n /** Delete a delivery time. */\n async deleteDeliveryTime(deliveryTimeId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}`,\n auth,\n });\n }\n\n // --- Phase 2: delivery time slots ---\n\n /** List slots of a delivery time. */\n async listSlots(deliveryTimeId: string, auth: AuthContext = SERVICE): Promise<DeliverySlotList> {\n return this.ctx.http.request<DeliverySlotList>({\n method: \"GET\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots`,\n auth,\n });\n }\n\n /** Retrieve one slot. */\n async getSlot(deliveryTimeId: string, slotId: string, auth: AuthContext = SERVICE): Promise<DeliverySlot> {\n return this.ctx.http.request<DeliverySlot>({\n method: \"GET\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots/${encodeURIComponent(slotId)}`,\n auth,\n });\n }\n\n /** Create a slot in a delivery time. */\n async createSlot(deliveryTimeId: string, input: DeliverySlot, auth: AuthContext = SERVICE): Promise<DeliveryCreated> {\n return this.ctx.http.request<DeliveryCreated>({\n method: \"POST\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots`,\n auth,\n body: input,\n });\n }\n\n /** Replace a slot. */\n async updateSlot(deliveryTimeId: string, slotId: string, input: DeliverySlot, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots/${encodeURIComponent(slotId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a slot (JSON-Patch op array). */\n async patchSlot(deliveryTimeId: string, slotId: string, ops: ShippingPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots/${encodeURIComponent(slotId)}`,\n auth,\n body: ops,\n });\n }\n\n /** Delete a slot. */\n async deleteSlot(deliveryTimeId: string, slotId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots/${encodeURIComponent(slotId)}`,\n auth,\n });\n }\n\n /** Delete all slots of a delivery time. */\n async deleteAllSlots(deliveryTimeId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/delivery-times/${encodeURIComponent(deliveryTimeId)}/slots`,\n auth,\n });\n }\n\n // --- Phase 2: delivery cycles ---\n\n /** Generate a delivery cycle (`POST /delivery-cycles/generate`). Returns the cycle id. */\n async generateDeliveryCycle(input: DeliveryCycleInput, auth: AuthContext = SERVICE): Promise<string> {\n return this.ctx.http.request<string>({\n method: \"POST\",\n path: `${this.base()}/delivery-cycles/generate`,\n auth,\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Return, ReturnList, ReturnInput, ReturnUpdate, ReturnPatch, ReturnCreated } from \"./returns-types\";\n\nexport type { Return, ReturnList, ReturnInput, ReturnUpdate, ReturnPatch, ReturnCreated } from \"./returns-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Returns Service (`/return/{tenant}/returns`): CRUD over returns\n * (RMA). Defaults to the service token; for customer self-service (own returns)\n * pass `auth.customer(token)` (the React hooks do this).\n */\nexport class ReturnsService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/return/${this.ctx.tenant}/returns`;\n }\n\n /** List returns (paged; supports `pageSize`/`pageNumber`/`sort`/`q`). */\n async listReturns(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ReturnList> {\n return this.ctx.http.request<ReturnList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve one return by id. */\n async getReturn(returnId: string, auth: AuthContext = SERVICE): Promise<Return> {\n return this.ctx.http.request<Return>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(returnId)}`,\n auth,\n });\n }\n\n /** Create a return. Returns the created `{ id }`. */\n async createReturn(input: ReturnInput, auth: AuthContext = SERVICE): Promise<ReturnCreated> {\n return this.ctx.http.request<ReturnCreated>({\n method: \"POST\",\n path: this.base(),\n auth,\n body: input,\n });\n }\n\n /** Replace a return by id (`PUT`). */\n async updateReturn(returnId: string, input: ReturnUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(returnId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a return by id (`PATCH`, JSON-Patch op-array). */\n async patchReturn(returnId: string, ops: ReturnPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/${encodeURIComponent(returnId)}`,\n auth,\n body: ops,\n });\n }\n\n /** Delete a return by id. */\n async deleteReturn(returnId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(returnId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport { errorFromResponse } from \"../core/errors\";\nimport type { SepaJob, SepaJobInput, SepaJobCreated } from \"./sepa-export-types\";\n\nexport type { SepaJob, SepaJobInput, SepaJobCreated } from \"./sepa-export-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix SEPA Export Service (`/sepa-export/{tenant}/…`): export jobs and file\n * retrieval. Server-side; defaults to the service token.\n */\nexport class SepaExportService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/sepa-export/${this.ctx.tenant}`;\n }\n\n /** Retrieve a SEPA export file by id. Returns the raw file content (text). */\n async getFile(fileId: string, auth: AuthContext = SERVICE): Promise<string> {\n const path = `${this.base()}/files/${encodeURIComponent(fileId)}`;\n const res = await this.ctx.http.requestRaw({ method: \"GET\", path, auth });\n if (!res.ok) {\n const errBody = await res.text().catch(() => undefined);\n throw errorFromResponse(res.status, `GET ${path} → ${res.status}`, errBody);\n }\n return res.text();\n }\n\n /** List export jobs. */\n async listJobs(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<SepaJob[]> {\n return this.ctx.http.request<SepaJob[]>({\n method: \"GET\",\n path: `${this.base()}/jobs`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Create an export job. */\n async createJob(input: SepaJobInput, auth: AuthContext = SERVICE): Promise<SepaJobCreated> {\n return this.ctx.http.request<SepaJobCreated>({\n method: \"POST\",\n path: `${this.base()}/jobs`,\n auth,\n body: input,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { IndexConfig, IndexConfigCreated, IndexPublicConfig, ReindexInput } from \"./indexing-types\";\n\nexport type { IndexConfig, IndexConfigCreated, IndexPublicConfig, ReindexInput } from \"./indexing-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Indexing Service (`/indexing/{tenant}/…`): search-index provider\n * configurations and reindex. Server-side; defaults to the service token.\n */\nexport class IndexingService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/indexing/${this.ctx.tenant}`;\n }\n\n /** List indexing configurations. */\n async listConfigurations(auth: AuthContext = SERVICE): Promise<IndexConfig[]> {\n return this.ctx.http.request<IndexConfig[]>({ method: \"GET\", path: `${this.base()}/configurations`, auth });\n }\n\n /** Get a configuration by provider name. */\n async getConfiguration(provider: string, auth: AuthContext = SERVICE): Promise<IndexConfig> {\n return this.ctx.http.request<IndexConfig>({\n method: \"GET\",\n path: `${this.base()}/configurations/${encodeURIComponent(provider)}`,\n auth,\n });\n }\n\n /** Create a configuration. */\n async createConfiguration(input: IndexConfig, auth: AuthContext = SERVICE): Promise<IndexConfigCreated> {\n return this.ctx.http.request<IndexConfigCreated>({\n method: \"POST\",\n path: `${this.base()}/configurations`,\n auth,\n body: input,\n });\n }\n\n /** Update a configuration by provider name. */\n async updateConfiguration(provider: string, input: IndexConfig, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/configurations/${encodeURIComponent(provider)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a configuration by provider name. */\n async deleteConfiguration(provider: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/configurations/${encodeURIComponent(provider)}`,\n auth,\n });\n }\n\n /** List public indexing configurations. */\n async listPublicConfigurations(auth: AuthContext = SERVICE): Promise<IndexPublicConfig[]> {\n return this.ctx.http.request<IndexPublicConfig[]>({ method: \"GET\", path: `${this.base()}/public/configurations`, auth });\n }\n\n /** Get a public configuration by provider name. */\n async getPublicConfiguration(provider: string, auth: AuthContext = SERVICE): Promise<IndexPublicConfig> {\n return this.ctx.http.request<IndexPublicConfig>({\n method: \"GET\",\n path: `${this.base()}/public/configurations/${encodeURIComponent(provider)}`,\n auth,\n });\n }\n\n /** Trigger a reindex. */\n async reindex(input: ReindexInput, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"POST\", path: `${this.base()}/reindex`, auth, body: input });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Unit,\n UnitInput,\n UnitUpdate,\n UnitCreated,\n ConversionFactorInput,\n ConversionFactorResult,\n ConvertUnitInput,\n ConvertUnitResult,\n} from \"./unit-handling-types\";\n\nexport type {\n Unit,\n UnitInput,\n UnitUpdate,\n UnitCreated,\n ConversionFactorInput,\n ConversionFactorResult,\n ConvertUnitInput,\n ConvertUnitResult,\n} from \"./unit-handling-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Unit Handling Service (`/unit-handling/{tenant}/…`): units CRUD, unit\n * types, and conversion commands. Server-side; defaults to the service token.\n */\nexport class UnitHandlingService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/unit-handling/${this.ctx.tenant}`;\n }\n\n /** Find units (filter/sort/page). */\n async listUnits(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<Unit[]> {\n return this.ctx.http.request<Unit[]>({\n method: \"GET\",\n path: `${this.base()}/units`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a unit by code. */\n async getUnit(unitCode: string, auth: AuthContext = SERVICE): Promise<Unit> {\n return this.ctx.http.request<Unit>({\n method: \"GET\",\n path: `${this.base()}/units/${encodeURIComponent(unitCode)}`,\n auth,\n });\n }\n\n /** Add a new unit. */\n async createUnit(input: UnitInput, auth: AuthContext = SERVICE): Promise<UnitCreated> {\n return this.ctx.http.request<UnitCreated>({ method: \"POST\", path: `${this.base()}/units`, auth, body: input });\n }\n\n /** Update a unit by code. */\n async updateUnit(unitCode: string, input: UnitUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/units/${encodeURIComponent(unitCode)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a unit by code. */\n async deleteUnit(unitCode: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/units/${encodeURIComponent(unitCode)}`,\n auth,\n });\n }\n\n /** Delete multiple units by code (bulk). The codes are sent as the request body. */\n async deleteUnits(codes: string[], auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/units`,\n auth,\n body: codes,\n });\n }\n\n /** Fetch a conversion factor (`PUT /units/conversion-factor-commands`). */\n async getConversionFactor(input: ConversionFactorInput, auth: AuthContext = SERVICE): Promise<ConversionFactorResult> {\n return this.ctx.http.request<ConversionFactorResult>({\n method: \"PUT\",\n path: `${this.base()}/units/conversion-factor-commands`,\n auth,\n body: input,\n });\n }\n\n /** Convert a value between units (`PUT /units/convert-unit-commands`). */\n async convertUnit(input: ConvertUnitInput, auth: AuthContext = SERVICE): Promise<ConvertUnitResult> {\n return this.ctx.http.request<ConvertUnitResult>({\n method: \"PUT\",\n path: `${this.base()}/units/convert-unit-commands`,\n auth,\n body: input,\n });\n }\n\n /** List all unit types. */\n async listUnitTypes(auth: AuthContext = SERVICE): Promise<string[]> {\n return this.ctx.http.request<string[]>({ method: \"GET\", path: `${this.base()}/types`, auth });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type { Catalog, CatalogList, CatalogInput, CatalogUpdate, CatalogPatch, CatalogCreated } from \"./catalog-types\";\n\nexport type { Catalog, CatalogList, CatalogInput, CatalogUpdate, CatalogPatch, CatalogCreated } from \"./catalog-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Catalog Management (`/catalog/{tenant}/catalogs`): CRUD over catalogs.\n * Server-side; defaults to the service token. `updateCatalog` is an upsert (PUT).\n */\nexport class CatalogService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/catalog/${this.ctx.tenant}/catalogs`;\n }\n\n /** List catalogs (filtered/sorted). */\n async listCatalogs(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<CatalogList> {\n return this.ctx.http.request<CatalogList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a catalog by id. */\n async getCatalog(catalogId: string, auth: AuthContext = SERVICE): Promise<Catalog> {\n return this.ctx.http.request<Catalog>({\n method: \"GET\",\n path: `${this.base()}/${encodeURIComponent(catalogId)}`,\n auth,\n });\n }\n\n /** Retrieve all catalogs that contain a category. */\n async getCatalogsForCategory(categoryId: string, auth: AuthContext = SERVICE): Promise<CatalogList> {\n return this.ctx.http.request<CatalogList>({\n method: \"GET\",\n path: `${this.base()}/categories/${encodeURIComponent(categoryId)}`,\n auth,\n });\n }\n\n /** Create a catalog. */\n async createCatalog(input: CatalogInput, auth: AuthContext = SERVICE): Promise<CatalogCreated> {\n return this.ctx.http.request<CatalogCreated>({ method: \"POST\", path: this.base(), auth, body: input });\n }\n\n /** Upsert a catalog by id (`PUT`). */\n async updateCatalog(catalogId: string, input: CatalogUpdate, auth: AuthContext = SERVICE): Promise<CatalogCreated> {\n return this.ctx.http.request<CatalogCreated>({\n method: \"PUT\",\n path: `${this.base()}/${encodeURIComponent(catalogId)}`,\n auth,\n body: input,\n });\n }\n\n /** Partially update a catalog by id (`PATCH`). */\n async patchCatalog(catalogId: string, patch: CatalogPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/${encodeURIComponent(catalogId)}`,\n auth,\n body: patch,\n });\n }\n\n /** Remove a catalog by id. */\n async deleteCatalog(catalogId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/${encodeURIComponent(catalogId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Vendor,\n VendorList,\n VendorInput,\n VendorUpdate,\n VendorCreated,\n VendorSearchQuery,\n VendorLocation,\n VendorLocationList,\n VendorLocationInput,\n VendorLocationUpdate,\n} from \"./vendor-types\";\n\nexport type {\n Vendor,\n VendorList,\n VendorInput,\n VendorUpdate,\n VendorCreated,\n VendorSearchQuery,\n VendorLocation,\n VendorLocationList,\n VendorLocationInput,\n VendorLocationUpdate,\n} from \"./vendor-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Vendor Service (`/vendor/{tenant}/…`): vendors and their locations.\n * Server-side; defaults to the service token. PUT methods are upserts. Vendor\n * locations are the vendor's own pickup/warehouse locations (distinct from the\n * customer-management `client.locations`).\n */\nexport class VendorService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/vendor/${this.ctx.tenant}`;\n }\n\n // --- Vendors ---\n\n /** List all vendors. */\n async listVendors(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<VendorList> {\n return this.ctx.http.request<VendorList>({\n method: \"GET\",\n path: `${this.base()}/vendors`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a vendor by id. */\n async getVendor(vendorId: string, auth: AuthContext = SERVICE): Promise<Vendor> {\n return this.ctx.http.request<Vendor>({\n method: \"GET\",\n path: `${this.base()}/vendors/${encodeURIComponent(vendorId)}`,\n auth,\n });\n }\n\n /** Search vendors (`POST /vendors/search`). */\n async searchVendors(query: VendorSearchQuery, auth: AuthContext = SERVICE): Promise<VendorList> {\n return this.ctx.http.request<VendorList>({\n method: \"POST\",\n path: `${this.base()}/vendors/search`,\n auth,\n body: query,\n });\n }\n\n /** Create a vendor. */\n async createVendor(input: VendorInput, auth: AuthContext = SERVICE): Promise<VendorCreated> {\n return this.ctx.http.request<VendorCreated>({ method: \"POST\", path: `${this.base()}/vendors`, auth, body: input });\n }\n\n /** Upsert a vendor by id (`PUT`). */\n async updateVendor(vendorId: string, input: VendorUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/vendors/${encodeURIComponent(vendorId)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a vendor by id. */\n async deleteVendor(vendorId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/vendors/${encodeURIComponent(vendorId)}`,\n auth,\n });\n }\n\n // --- Vendor locations ---\n\n /** List all vendor locations. */\n async listVendorLocations(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<VendorLocationList> {\n return this.ctx.http.request<VendorLocationList>({\n method: \"GET\",\n path: `${this.base()}/locations`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a vendor location by id. */\n async getVendorLocation(locationId: string, auth: AuthContext = SERVICE): Promise<VendorLocation> {\n return this.ctx.http.request<VendorLocation>({\n method: \"GET\",\n path: `${this.base()}/locations/${encodeURIComponent(locationId)}`,\n auth,\n });\n }\n\n /** Create a vendor location. */\n async createVendorLocation(input: VendorLocationInput, auth: AuthContext = SERVICE): Promise<VendorCreated> {\n return this.ctx.http.request<VendorCreated>({ method: \"POST\", path: `${this.base()}/locations`, auth, body: input });\n }\n\n /** Upsert a vendor location by id (`PUT`). */\n async updateVendorLocation(locationId: string, input: VendorLocationUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PUT\",\n path: `${this.base()}/locations/${encodeURIComponent(locationId)}`,\n auth,\n body: input,\n });\n }\n\n /** Delete a vendor location by id. */\n async deleteVendorLocation(locationId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/locations/${encodeURIComponent(locationId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n PickOrder,\n PickOrderList,\n OrderStatusChange,\n PackagingProductsChange,\n Assignee,\n OrderEntryEventCreate,\n PackingEventList,\n OrderCycleList,\n RecalculationJobInput,\n RecalculationJob,\n PickPackAck,\n RecalculationJobCreated,\n} from \"./pick-pack-types\";\n\nexport type {\n PickOrder,\n PickOrderList,\n OrderStatusChange,\n PackagingProductsChange,\n Assignee,\n OrderEntryEventCreate,\n PackingEvent,\n PackingEventList,\n OrderCycleList,\n RecalculationJobInput,\n RecalculationJob,\n PickPackAck,\n RecalculationJobCreated,\n} from \"./pick-pack-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Pick-Pack Service (`/pick-pack/{tenant}/…`): fulfillment/packlist\n * orders, assignees, packaging, packing events, and recalculation jobs.\n * Server-side; defaults to the service token. Several mutating endpoints return\n * an acknowledgement (`{ message?, code? }`).\n */\nexport class PickPackService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/pick-pack/${this.ctx.tenant}`;\n }\n\n private orderPath(orderId: string): string {\n return `${this.base()}/orders/${encodeURIComponent(orderId)}`;\n }\n\n /** List packlist orders. */\n async listOrders(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<PickOrderList> {\n return this.ctx.http.request<PickOrderList>({\n method: \"GET\",\n path: `${this.base()}/orders`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a packlist order by id. */\n async getOrder(orderId: string, auth: AuthContext = SERVICE): Promise<PickOrder> {\n return this.ctx.http.request<PickOrder>({ method: \"GET\", path: this.orderPath(orderId), auth });\n }\n\n /** Update an order's status (`PATCH`). Returns an acknowledgement. */\n async updateOrder(orderId: string, change: OrderStatusChange, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"PATCH\", path: this.orderPath(orderId), auth, body: change });\n }\n\n /** Finish an order. Returns an acknowledgement. */\n async finishOrder(orderId: string, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"POST\", path: `${this.orderPath(orderId)}/finish`, auth });\n }\n\n /** List order cycles (ids). */\n async listOrderCycles(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<OrderCycleList> {\n return this.ctx.http.request<OrderCycleList>({\n method: \"GET\",\n path: `${this.base()}/orderCycles`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Add an assignee to an order. Returns an acknowledgement. */\n async addAssignee(orderId: string, assignee: Assignee, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"POST\", path: `${this.orderPath(orderId)}/assignees`, auth, body: assignee });\n }\n\n /** Remove an assignee from an order. */\n async removeAssignee(orderId: string, assigneeId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.orderPath(orderId)}/assignees/${encodeURIComponent(assigneeId)}`,\n auth,\n });\n }\n\n /** Update packaging products for an order (`PUT`). Returns an acknowledgement. */\n async updatePackaging(orderId: string, change: PackagingProductsChange, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"PUT\", path: `${this.orderPath(orderId)}/packaging`, auth, body: change });\n }\n\n /** Create a packing event. Returns an acknowledgement. */\n async createEvent(event: OrderEntryEventCreate, auth: AuthContext = SERVICE): Promise<PickPackAck> {\n return this.ctx.http.request<PickPackAck>({ method: \"POST\", path: `${this.base()}/events`, auth, body: event });\n }\n\n /** List packing events. */\n async listEvents(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<PackingEventList> {\n return this.ctx.http.request<PackingEventList>({\n method: \"GET\",\n path: `${this.base()}/events`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Trigger an order recalculation. Returns the created job's id. */\n async triggerRecalculation(input: RecalculationJobInput, auth: AuthContext = SERVICE): Promise<RecalculationJobCreated> {\n return this.ctx.http.request<RecalculationJobCreated>({\n method: \"POST\",\n path: `${this.base()}/jobs/recalculations`,\n auth,\n body: input,\n });\n }\n\n /** Retrieve a recalculation job by id. */\n async getRecalculationJob(jobId: string, auth: AuthContext = SERVICE): Promise<RecalculationJob> {\n return this.ctx.http.request<RecalculationJob>({\n method: \"GET\",\n path: `${this.base()}/jobs/recalculations/${encodeURIComponent(jobId)}`,\n auth,\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n AdminCustomer,\n AdminCustomerList,\n AdminCustomerInput,\n AdminCustomerUpdate,\n AdminCustomerPatch,\n AdminCustomerCreated,\n AdminCustomerSearchQuery,\n AdminCustomerAddress,\n AdminCustomerAddressList,\n AdminCustomerAddressInput,\n AdminCustomerAddressUpdate,\n} from \"./customer-admin-types\";\n\nexport type {\n AdminCustomer,\n AdminCustomerList,\n AdminCustomerInput,\n AdminCustomerUpdate,\n AdminCustomerPatch,\n AdminCustomerCreated,\n AdminCustomerSearchQuery,\n AdminCustomerAddress,\n AdminCustomerAddressList,\n AdminCustomerAddressInput,\n AdminCustomerAddressUpdate,\n} from \"./customer-admin-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Customer Service — tenant/seller-managed customer profiles and\n * addresses (`/customer/{tenant}/customers`). Server-side; defaults to the\n * service token. Distinct from the storefront `client.customers`.\n */\nexport class CustomerAdminService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/customer/${this.ctx.tenant}/customers`;\n }\n\n private customerPath(customerNumber: string): string {\n return `${this.base()}/${encodeURIComponent(customerNumber)}`;\n }\n\n private addressPath(customerNumber: string, addressId: string): string {\n return `${this.customerPath(customerNumber)}/addresses/${encodeURIComponent(addressId)}`;\n }\n\n // --- Customers ---\n\n /** List customers. */\n async listCustomers(query: Record<string, string | number> = {}, auth: AuthContext = SERVICE): Promise<AdminCustomerList> {\n return this.ctx.http.request<AdminCustomerList>({\n method: \"GET\",\n path: this.base(),\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Search customers (`POST /customers/search`). */\n async searchCustomers(query: AdminCustomerSearchQuery, auth: AuthContext = SERVICE): Promise<AdminCustomerList> {\n return this.ctx.http.request<AdminCustomerList>({ method: \"POST\", path: `${this.base()}/search`, auth, body: query });\n }\n\n /** Retrieve a customer profile by number. */\n async getCustomer(customerNumber: string, auth: AuthContext = SERVICE): Promise<AdminCustomer> {\n return this.ctx.http.request<AdminCustomer>({ method: \"GET\", path: this.customerPath(customerNumber), auth });\n }\n\n /** Create a customer. */\n async createCustomer(input: AdminCustomerInput, auth: AuthContext = SERVICE): Promise<AdminCustomerCreated> {\n return this.ctx.http.request<AdminCustomerCreated>({ method: \"POST\", path: this.base(), auth, body: input });\n }\n\n /** Upsert a customer profile by number (`PUT`). */\n async upsertCustomer(customerNumber: string, input: AdminCustomerUpdate, auth: AuthContext = SERVICE): Promise<AdminCustomerCreated> {\n return this.ctx.http.request<AdminCustomerCreated>({ method: \"PUT\", path: this.customerPath(customerNumber), auth, body: input });\n }\n\n /** Partially update a customer profile (`PATCH`). */\n async patchCustomer(customerNumber: string, patch: AdminCustomerPatch, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"PATCH\", path: this.customerPath(customerNumber), auth, body: patch });\n }\n\n /** Delete a customer profile. */\n async deleteCustomer(customerNumber: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"DELETE\", path: this.customerPath(customerNumber), auth });\n }\n\n // --- Addresses ---\n\n /** List a customer's addresses. */\n async listAddresses(customerNumber: string, auth: AuthContext = SERVICE): Promise<AdminCustomerAddressList> {\n return this.ctx.http.request<AdminCustomerAddressList>({\n method: \"GET\",\n path: `${this.customerPath(customerNumber)}/addresses`,\n auth,\n });\n }\n\n /** Retrieve one address. */\n async getAddress(customerNumber: string, addressId: string, auth: AuthContext = SERVICE): Promise<AdminCustomerAddress> {\n return this.ctx.http.request<AdminCustomerAddress>({ method: \"GET\", path: this.addressPath(customerNumber, addressId), auth });\n }\n\n /** Add an address. */\n async addAddress(customerNumber: string, input: AdminCustomerAddressInput, auth: AuthContext = SERVICE): Promise<AdminCustomerCreated> {\n return this.ctx.http.request<AdminCustomerCreated>({\n method: \"POST\",\n path: `${this.customerPath(customerNumber)}/addresses`,\n auth,\n body: input,\n });\n }\n\n /** Upsert an address by id (`PUT`). */\n async upsertAddress(customerNumber: string, addressId: string, input: AdminCustomerAddressUpdate, auth: AuthContext = SERVICE): Promise<AdminCustomerCreated> {\n return this.ctx.http.request<AdminCustomerCreated>({ method: \"PUT\", path: this.addressPath(customerNumber, addressId), auth, body: input });\n }\n\n /** Partially update an address by id (`PATCH`). */\n async patchAddress(customerNumber: string, addressId: string, patch: AdminCustomerAddressUpdate, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"PATCH\", path: this.addressPath(customerNumber, addressId), auth, body: patch });\n }\n\n /** Delete an address by id. */\n async deleteAddress(customerNumber: string, addressId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({ method: \"DELETE\", path: this.addressPath(customerNumber, addressId), auth });\n }\n\n /** Add tags to an address (`?tags=` query). */\n async addAddressTags(customerNumber: string, addressId: string, tags: string[], auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"POST\",\n path: `${this.addressPath(customerNumber, addressId)}/tags`,\n auth,\n query: { tags: tags.join(\",\") },\n });\n }\n\n /** Remove tags from an address (`?tags=` query). */\n async removeAddressTags(customerNumber: string, addressId: string, tags: string[], auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.addressPath(customerNumber, addressId)}/tags`,\n auth,\n query: { tags: tags.join(\",\") },\n });\n }\n}\n","import type { ClientContext } from \"../core/context\";\nimport type { AuthContext } from \"../core/auth\";\nimport type {\n Approval,\n ApprovalList,\n ApprovalInput,\n ApprovalPatch,\n ApprovalCreated,\n ApprovalPermittedInput,\n ApprovalPermittedResult,\n ApprovalUsersQuery,\n ApprovalUsersResult,\n} from \"./approval-types\";\n\nexport type {\n Approval,\n ApprovalList,\n ApprovalInput,\n ApprovalPatch,\n ApprovalCreated,\n ApprovalPermittedInput,\n ApprovalPermittedResult,\n ApprovalUsersQuery,\n ApprovalUsersResult,\n} from \"./approval-types\";\n\nconst SERVICE: AuthContext = { kind: \"service\" };\n\n/**\n * Emporix Approval Service (`/approval/{tenant}/…`): B2B cart/quote approval\n * workflows — list/view approvals, create an approval request, approve or reject\n * via JSON-Patch, plus permitted-checks and approver search.\n *\n * Every endpoint is **CustomerAccessToken-only**. The trailing `auth` keeps the\n * SDK's uniform method shape, but a customer token is required in practice — pass\n * `auth.customer(token)` (the React hooks supply the browser context). The\n * service token will be rejected by Emporix.\n */\nexport class ApprovalService {\n constructor(private readonly ctx: ClientContext) {}\n\n private base(): string {\n return `/approval/${this.ctx.tenant}`;\n }\n\n /** List approvals (paged via `pageNumber`/`pageSize`/`sort`/`q`). Returns an array. */\n async listApprovals(\n query: Record<string, string | number> = {},\n auth: AuthContext = SERVICE,\n ): Promise<ApprovalList> {\n return this.ctx.http.request<ApprovalList>({\n method: \"GET\",\n path: `${this.base()}/approvals`,\n auth,\n ...(Object.keys(query).length ? { query } : {}),\n });\n }\n\n /** Retrieve a single approval by id. */\n async getApproval(approvalId: string, auth: AuthContext = SERVICE): Promise<Approval> {\n return this.ctx.http.request<Approval>({\n method: \"GET\",\n path: `${this.base()}/approvals/${encodeURIComponent(approvalId)}`,\n auth,\n });\n }\n\n /** Create an approval request (cart or quote). Returns the created `{ id }`. */\n async createApproval(input: ApprovalInput, auth: AuthContext = SERVICE): Promise<ApprovalCreated> {\n return this.ctx.http.request<ApprovalCreated>({\n method: \"POST\",\n path: `${this.base()}/approvals`,\n auth,\n body: input,\n });\n }\n\n /** Approve/reject/amend an approval via a JSON-Patch op-array (`PATCH`). */\n async updateApproval(\n approvalId: string,\n ops: ApprovalPatch,\n auth: AuthContext = SERVICE,\n ): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"PATCH\",\n path: `${this.base()}/approvals/${encodeURIComponent(approvalId)}`,\n auth,\n body: ops,\n });\n }\n\n /** Delete an approval by id. */\n async deleteApproval(approvalId: string, auth: AuthContext = SERVICE): Promise<void> {\n await this.ctx.http.request<void>({\n method: \"DELETE\",\n path: `${this.base()}/approvals/${encodeURIComponent(approvalId)}`,\n auth,\n });\n }\n\n /** Check whether an operation on a resource is permitted / needs approval. */\n async checkPermitted(\n input: ApprovalPermittedInput,\n auth: AuthContext = SERVICE,\n ): Promise<ApprovalPermittedResult> {\n return this.ctx.http.request<ApprovalPermittedResult>({\n method: \"POST\",\n path: `${this.base()}/approval/permitted`,\n auth,\n body: input,\n });\n }\n\n /** Search for users eligible to approve a resource. Returns an array. */\n async searchApprovers(\n input: ApprovalUsersQuery,\n auth: AuthContext = SERVICE,\n ): Promise<ApprovalUsersResult> {\n return this.ctx.http.request<ApprovalUsersResult>({\n method: \"POST\",\n path: `${this.base()}/search/users`,\n auth,\n body: input,\n });\n }\n}\n","{\n \"name\": \"@viu/emporix-sdk\",\n \"version\": \"2.13.1\",\n \"description\": \"TypeScript SDK for the Emporix Commerce Engine\",\n \"license\": \"MIT\",\n \"author\": {\n \"name\": \"viu\",\n \"url\": \"https://github.com/viuteam\"\n },\n \"homepage\": \"https://github.com/viuteam/emporix-sdk#readme\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/viuteam/emporix-sdk.git\",\n \"directory\": \"packages/sdk\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/viuteam/emporix-sdk/issues\"\n },\n \"keywords\": [\n \"emporix\",\n \"ecommerce\",\n \"commerce\",\n \"sdk\",\n \"typescript\",\n \"storefront\"\n ],\n \"type\": \"module\",\n \"sideEffects\": false,\n \"engines\": {\n \"node\": \">=20.19.0\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"CHANGELOG.md\",\n \"LICENSE\"\n ],\n \"exports\": {\n \".\": {\n \"types\": \"./dist/index.d.ts\",\n \"import\": \"./dist/index.js\",\n \"require\": \"./dist/index.cjs\"\n },\n \"./customer\": {\n \"types\": \"./dist/customer.d.ts\",\n \"import\": \"./dist/customer.js\",\n \"require\": \"./dist/customer.cjs\"\n },\n \"./product\": {\n \"types\": \"./dist/product.d.ts\",\n \"import\": \"./dist/product.js\",\n \"require\": \"./dist/product.cjs\"\n },\n \"./category\": {\n \"types\": \"./dist/category.d.ts\",\n \"import\": \"./dist/category.js\",\n \"require\": \"./dist/category.cjs\"\n },\n \"./cart\": {\n \"types\": \"./dist/cart.d.ts\",\n \"import\": \"./dist/cart.js\",\n \"require\": \"./dist/cart.cjs\"\n },\n \"./checkout\": {\n \"types\": \"./dist/checkout.d.ts\",\n \"import\": \"./dist/checkout.js\",\n \"require\": \"./dist/checkout.cjs\"\n },\n \"./payment\": {\n \"types\": \"./dist/payment.d.ts\",\n \"import\": \"./dist/payment.js\",\n \"require\": \"./dist/payment.cjs\"\n },\n \"./price\": {\n \"types\": \"./dist/price.d.ts\",\n \"import\": \"./dist/price.js\",\n \"require\": \"./dist/price.cjs\"\n },\n \"./media\": {\n \"types\": \"./dist/media.d.ts\",\n \"import\": \"./dist/media.js\",\n \"require\": \"./dist/media.cjs\"\n },\n \"./segment\": {\n \"types\": \"./dist/segment.d.ts\",\n \"import\": \"./dist/segment.js\",\n \"require\": \"./dist/segment.cjs\"\n },\n \"./companies\": {\n \"types\": \"./dist/companies.d.ts\",\n \"import\": \"./dist/companies.js\",\n \"require\": \"./dist/companies.cjs\"\n },\n \"./contacts\": {\n \"types\": \"./dist/contacts.d.ts\",\n \"import\": \"./dist/contacts.js\",\n \"require\": \"./dist/contacts.cjs\"\n },\n \"./locations\": {\n \"types\": \"./dist/locations.d.ts\",\n \"import\": \"./dist/locations.js\",\n \"require\": \"./dist/locations.cjs\"\n },\n \"./customer-groups\": {\n \"types\": \"./dist/customer-groups.d.ts\",\n \"import\": \"./dist/customer-groups.js\",\n \"require\": \"./dist/customer-groups.cjs\"\n },\n \"./orders\": {\n \"types\": \"./dist/orders.d.ts\",\n \"import\": \"./dist/orders.js\",\n \"require\": \"./dist/orders.cjs\"\n },\n \"./availability\": {\n \"types\": \"./dist/availability.d.ts\",\n \"import\": \"./dist/availability.js\",\n \"require\": \"./dist/availability.cjs\"\n }\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"provenance\": true\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"test\": \"vitest run --coverage\",\n \"lint\": \"eslint src\",\n \"typecheck\": \"tsc --noEmit\",\n \"fetch:specs\": \"tsx scripts/fetch-specs.ts\",\n \"generate\": \"tsx scripts/generate.ts\"\n },\n \"devDependencies\": {\n \"@hey-api/openapi-ts\": \"^0.64.0\",\n \"@types/node\": \"^24.0.0\",\n \"tsx\": \"^4.19.0\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^2.0.0\",\n \"eslint\": \"^9.0.0\",\n \"msw\": \"^2.4.0\",\n \"prettier\": \"^3.3.0\",\n \"tsup\": \"^8.2.0\",\n \"typescript\": \"^5.6.0\",\n \"vitest\": \"^2.0.0\"\n }\n}\n","import { version } from \"../package.json\";\n\n/**\n * The published `@viu/emporix-sdk` version, surfaced on every log line as\n * `sdkVersion`. Read from `package.json` so it always matches the released\n * package; esbuild inlines the literal at build time (browser-safe — no\n * runtime filesystem access).\n */\nexport const SDK_VERSION: string = version;\n","import { validateConfig, type EmporixConfig, type ResolvedConfig } from \"./core/config\";\nimport {\n DefaultTokenProvider,\n CustomerRefreshRegistry,\n type TokenProvider,\n type CustomerTokenRefresher,\n} from \"./core/auth\";\nimport { HttpClient } from \"./core/http\";\nimport {\n LevelResolver,\n createConsoleLogger,\n createNoopLogger,\n type Logger,\n type LogLevel,\n type ServiceName,\n type LoggerObjectConfig,\n} from \"./core/logger\";\nimport type { ClientContext } from \"./core/context\";\nimport { CustomerService } from \"./services/customer\";\nimport { ProductService } from \"./services/product\";\nimport { CategoryService } from \"./services/category\";\nimport { CartService } from \"./services/cart\";\nimport { CheckoutService } from \"./services/checkout\";\nimport { PaymentGatewayService } from \"./services/payment\";\nimport { PriceService } from \"./services/price\";\nimport { MediaService } from \"./services/media\";\nimport { SegmentService } from \"./services/segment\";\nimport { SiteService } from \"./services/site\";\nimport { SessionContextService } from \"./services/session-context\";\nimport { CompaniesService } from \"./services/companies\";\nimport { ContactsService } from \"./services/contacts\";\nimport { LocationsService } from \"./services/locations\";\nimport { CustomerGroupsService } from \"./services/customer-groups\";\nimport { OrdersService, SalesOrdersService } from \"./services/orders\";\nimport { AvailabilityService } from \"./services/availability\";\nimport { TenantConfigService } from \"./services/tenant-config\";\nimport { ClientConfigService } from \"./services/client-config\";\nimport { ShoppingListService } from \"./services/shopping-list\";\nimport { RagIndexerService } from \"./services/ai-rag-indexer\";\nimport { SequentialIdService } from \"./services/sequential-id\";\nimport { FeeService } from \"./services/fee\";\nimport { CloudFunctionsService } from \"./services/cloud-functions\";\nimport { WebhookService } from \"./services/webhook\";\nimport { SchemaService } from \"./services/schema\";\nimport { AiService } from \"./services/ai\";\nimport { TaxService } from \"./services/tax\";\nimport { CouponService } from \"./services/coupon\";\nimport { RewardPointsService } from \"./services/reward-points\";\nimport { BrandService } from \"./services/brand\";\nimport { LabelService } from \"./services/label\";\nimport { CountryService } from \"./services/country\";\nimport { CurrencyService } from \"./services/currency\";\nimport { ShippingService } from \"./services/shipping\";\nimport { ReturnsService } from \"./services/returns\";\nimport { SepaExportService } from \"./services/sepa-export\";\nimport { IndexingService } from \"./services/indexing\";\nimport { UnitHandlingService } from \"./services/unit-handling\";\nimport { CatalogService } from \"./services/catalog\";\nimport { VendorService } from \"./services/vendor\";\nimport { PickPackService } from \"./services/pick-pack\";\nimport { CustomerAdminService } from \"./services/customer-admin\";\nimport { ApprovalService } from \"./services/approval\";\nimport { SDK_VERSION } from \"./version\";\n\n/** The Emporix SDK entry point. One instance safely serves many concurrent shoppers. */\nexport class EmporixClient {\n readonly customers: CustomerService;\n readonly products: ProductService;\n readonly categories: CategoryService;\n readonly carts: CartService;\n readonly checkout: CheckoutService;\n readonly payments: PaymentGatewayService;\n readonly prices: PriceService;\n readonly media: MediaService;\n readonly segments: SegmentService;\n readonly sites: SiteService;\n readonly sessionContext: SessionContextService;\n readonly companies: CompaniesService;\n readonly contacts: ContactsService;\n readonly locations: LocationsService;\n readonly customerGroups: CustomerGroupsService;\n readonly orders: OrdersService;\n readonly salesOrders: SalesOrdersService;\n readonly availability: AvailabilityService;\n readonly tenantConfig: TenantConfigService;\n readonly clientConfig: ClientConfigService;\n readonly shoppingLists: ShoppingListService;\n readonly ragIndexer: RagIndexerService;\n readonly sequentialIds: SequentialIdService;\n readonly fees: FeeService;\n readonly cloudFunctions: CloudFunctionsService;\n readonly webhooks: WebhookService;\n readonly schemas: SchemaService;\n readonly ai: AiService;\n readonly taxes: TaxService;\n readonly coupons: CouponService;\n readonly rewardPoints: RewardPointsService;\n readonly brands: BrandService;\n readonly labels: LabelService;\n readonly countries: CountryService;\n readonly currencies: CurrencyService;\n readonly shipping: ShippingService;\n readonly returns: ReturnsService;\n readonly sepaExport: SepaExportService;\n readonly indexing: IndexingService;\n readonly units: UnitHandlingService;\n readonly catalogs: CatalogService;\n readonly vendors: VendorService;\n readonly pickPack: PickPackService;\n readonly customerAdmin: CustomerAdminService;\n readonly approvals: ApprovalService;\n /** The validated tenant this client is bound to. */\n readonly tenant: string;\n /**\n * The token provider in use by this client. Exposed so React/Next hosts can\n * call `attachAnonymousStore` to wire session persistence. Treat as\n * read-only — replacing it after construction is not supported.\n */\n readonly tokenProvider: TokenProvider;\n /**\n * The validated config used to construct this client. Exposed so React /\n * Next hosts can read static settings such as `credentials.storefront.context`\n * (siteCode, currency, targetLocation) without re-plumbing them through the\n * Provider tree. Treat as read-only.\n */\n readonly config: ResolvedConfig;\n private readonly resolver: LevelResolver;\n private readonly customerRefresh: CustomerRefreshRegistry;\n private readonly requestContext: { language?: string | undefined };\n\n constructor(config: EmporixConfig) {\n const cfg = validateConfig(config);\n this.tenant = cfg.tenant;\n this.config = cfg;\n\n let loggerObj: LoggerObjectConfig = {};\n let baseLogger: Logger | undefined;\n if (cfg.logger === false) {\n baseLogger = createNoopLogger();\n } else if (cfg.logger && typeof (cfg.logger as Logger).child === \"function\") {\n baseLogger = cfg.logger as Logger;\n } else if (cfg.logger) {\n loggerObj = cfg.logger as LoggerObjectConfig;\n }\n this.resolver = new LevelResolver(loggerObj);\n const root =\n baseLogger ??\n createConsoleLogger(this.resolver, {\n sdk: \"emporix\",\n sdkVersion: SDK_VERSION,\n tenant: cfg.tenant,\n });\n\n const tokenProvider: TokenProvider = cfg.tokenProvider ?? new DefaultTokenProvider(cfg);\n this.tokenProvider = tokenProvider;\n\n const customerRefresh = new CustomerRefreshRegistry();\n this.customerRefresh = customerRefresh;\n\n this.requestContext = { language: cfg.credentials.storefront?.context?.language };\n const requestContext = this.requestContext;\n\n const mk = (service: ServiceName): ClientContext => ({\n tenant: cfg.tenant,\n tokenProvider,\n logger: root.child({ service }),\n http: new HttpClient({\n host: cfg.host,\n provider: tokenProvider,\n logger: root.child({ service: \"http\" }),\n retry: cfg.retry,\n timeouts: cfg.timeouts,\n customerRefresh,\n requestContext,\n }),\n });\n\n this.customers = new CustomerService(mk(\"customer\"));\n this.products = new ProductService(mk(\"product\"));\n this.categories = new CategoryService(mk(\"category\"));\n this.carts = new CartService(mk(\"cart\"));\n this.checkout = new CheckoutService(mk(\"checkout\"));\n this.payments = new PaymentGatewayService(mk(\"payment\"));\n this.prices = new PriceService(mk(\"price\"));\n this.media = new MediaService(mk(\"media\"));\n this.segments = new SegmentService(mk(\"segment\"), {\n products: this.products,\n categories: this.categories,\n });\n this.sites = new SiteService(mk(\"site\"));\n this.sessionContext = new SessionContextService(mk(\"session-context\"));\n this.companies = new CompaniesService(mk(\"customer-management\"));\n this.contacts = new ContactsService(mk(\"customer-management\"));\n this.locations = new LocationsService(mk(\"customer-management\"));\n this.customerGroups = new CustomerGroupsService(mk(\"iam\"));\n this.orders = new OrdersService(mk(\"orders\"));\n this.salesOrders = new SalesOrdersService(mk(\"sales-orders\"));\n this.availability = new AvailabilityService(mk(\"availability\"));\n this.tenantConfig = new TenantConfigService(mk(\"configuration\"));\n this.clientConfig = new ClientConfigService(mk(\"configuration\"));\n this.shoppingLists = new ShoppingListService(mk(\"shopping-list\"));\n this.ragIndexer = new RagIndexerService(mk(\"ai-rag-indexer\"));\n this.sequentialIds = new SequentialIdService(mk(\"sequential-id\"));\n this.fees = new FeeService(mk(\"fee\"));\n this.cloudFunctions = new CloudFunctionsService(mk(\"cloud-functions\"));\n this.webhooks = new WebhookService(mk(\"webhook\"));\n this.schemas = new SchemaService(mk(\"schema\"));\n this.ai = new AiService(mk(\"ai\"));\n this.taxes = new TaxService(mk(\"tax\"));\n this.coupons = new CouponService(mk(\"coupon\"));\n this.rewardPoints = new RewardPointsService(mk(\"reward-points\"));\n this.brands = new BrandService(mk(\"brand\"));\n this.labels = new LabelService(mk(\"label\"));\n this.countries = new CountryService(mk(\"country\"));\n this.currencies = new CurrencyService(mk(\"currency\"));\n this.shipping = new ShippingService(mk(\"shipping\"));\n this.returns = new ReturnsService(mk(\"returns\"));\n this.sepaExport = new SepaExportService(mk(\"sepa-export\"));\n this.indexing = new IndexingService(mk(\"indexing\"));\n this.units = new UnitHandlingService(mk(\"unit-handling\"));\n this.catalogs = new CatalogService(mk(\"catalog\"));\n this.vendors = new VendorService(mk(\"vendor\"));\n this.pickPack = new PickPackService(mk(\"pick-pack\"));\n this.customerAdmin = new CustomerAdminService(mk(\"customer-admin\"));\n this.approvals = new ApprovalService(mk(\"approval\"));\n }\n\n /**\n * Re-binds the storefront price context (currency / siteCode / targetLocation)\n * for anonymous pricing and invalidates the current anonymous session, so the\n * next request re-mints a token bound to the new context. Use this to switch\n * currency at runtime. Carts are currency-bound — clear the cart after a\n * currency change (the React `setCurrency` does this for you).\n *\n * Also sets the storefront `language` (an `Accept-Language` header on every\n * read); a language-only change does NOT re-mint the token.\n */\n setStorefrontContext(ctx: {\n currency?: string;\n siteCode?: string;\n targetLocation?: string;\n language?: string;\n }): void {\n if (ctx.language !== undefined) {\n this.requestContext.language = ctx.language || undefined;\n }\n const { language: _language, ...priceContext } = ctx;\n // Only currency/site/target re-mint the anonymous token; a language-only\n // change is just a request header and must NOT trigger a re-mint.\n if (Object.keys(priceContext).length > 0) {\n this.tokenProvider.setAnonymousContext?.(priceContext);\n }\n }\n\n /** Sets the runtime log level globally or for one service. */\n setLogLevel(level: LogLevel, opts: { service?: ServiceName; force?: boolean } = {}): void {\n this.resolver.set(level, opts.service, opts.force ?? false);\n }\n\n /** Returns the effective log level for a service. */\n getLogLevel(service: ServiceName): LogLevel {\n return this.resolver.get(service);\n }\n\n /**\n * Registers (or clears with `null`) a customer-token refresher. When set, a\n * `customer`-kind 401 triggers one refresh-and-retry. Off by default — the\n * customer token stays caller-owned. The React `EmporixProvider` wires this\n * automatically via `autoRefreshCustomerToken`.\n */\n setCustomerTokenRefresher(refresher: CustomerTokenRefresher | null): void {\n this.customerRefresh.set(refresher);\n }\n}\n","/**\n * Extracts the product id from a product `itemYrn`\n * (`urn:yaas:hybris:product:product:<tenant>;<productId>`). Cart and order line\n * items carry only the YRN, not a bare product id. Returns \"\" when the YRN is\n * missing or has no `;` segment.\n */\nexport function productIdFromYrn(yrn: string | undefined): string {\n if (!yrn) return \"\";\n const semi = yrn.lastIndexOf(\";\");\n return semi >= 0 ? yrn.slice(semi + 1) : \"\";\n}\n"]}
|