{"version":3,"sources":["../../src/locks/index.ts","../../src/locks/LockManager.ts","../../src/utils/time.ts","../../src/locks/LockErrors.ts","../../src/locks/LockLease.ts","../../src/locks/MemoryLockBackend.ts","../../src/registry/redis/SimpleRedisClient.ts","../../src/locks/redis/RedisLockBackend.ts","../../src/locks/LockFactory.ts"],"sourcesContent":["export { LockManager } from './LockManager.js'\nexport { LockLease } from './LockLease.js'\nexport { MemoryLockBackend } from './MemoryLockBackend.js'\nexport { LockFactory } from './LockFactory.js'\nexport { MeshLockError, MeshLockTimeoutError } from './LockErrors.js'\nexport { RedisLockBackend } from './redis/RedisLockBackend.js'\nexport type { MeshLockAcquireOptions, MeshLockBackend, MeshLockLease, MeshLockRecord, MeshLockRunOptions } from './types.js'\n","import { randomUUID } from 'node:crypto'\nimport { sleep } from '../utils/time.js'\nimport { MeshLockTimeoutError } from './LockErrors.js'\nimport type { MeshLockAcquireOptions, MeshLockBackend, MeshLockLease, MeshLockRecord, MeshLockRunOptions } from './types.js'\n\nexport class LockManager {\n  private readonly ownerId: string\n\n  public constructor(private readonly backend: MeshLockBackend, ownerId?: string) {\n    this.ownerId = ownerId ?? `mesh-${process.pid}-${randomUUID()}`\n  }\n\n  public async tryAcquire(key: string, options: MeshLockAcquireOptions = {}): Promise<MeshLockLease | null> {\n    return this.backend.acquire(key, this.ownerId, options)\n  }\n\n  public async acquire(key: string, options: MeshLockAcquireOptions = {}): Promise<MeshLockLease> {\n    const waitMs = options.waitMs ?? 0\n    const retryMs = options.retryMs ?? 250\n    const deadline = Date.now() + waitMs\n    while (true) {\n      const lease = await this.tryAcquire(key, options)\n      if (lease) return lease\n      if (Date.now() >= deadline) throw new MeshLockTimeoutError(key)\n      await sleep(Math.min(retryMs, Math.max(1, deadline - Date.now())))\n    }\n  }\n\n  public async runExclusive<T>(key: string, fn: (lease: MeshLockLease) => Promise<T> | T, options: MeshLockRunOptions = {}): Promise<T> {\n    const lease = await this.acquire(key, options)\n    const ttlMs = options.ttlMs ?? 30_000\n    let stopped = false\n    let timer: NodeJS.Timeout | null = null\n    if (options.autoRenew ?? true) {\n      const every = options.renewEveryMs ?? Math.max(1_000, Math.floor(ttlMs / 2))\n      timer = setInterval(() => { if (!stopped) void lease.renew(ttlMs) }, every)\n      timer.unref?.()\n    }\n    try {\n      return await fn(lease)\n    } finally {\n      stopped = true\n      if (timer) clearInterval(timer)\n      await lease.release()\n    }\n  }\n\n  public list(): Promise<readonly MeshLockRecord[]> {\n    return this.backend.list()\n  }\n}\n","export function nowIso(): string {\n  return new Date().toISOString()\n}\n\nexport function formatDurationSince(iso: string): string {\n  const started = new Date(iso).getTime()\n  const diff = Math.max(0, Date.now() - started)\n  const seconds = Math.floor(diff / 1000)\n  if (seconds < 60) return `${seconds}s`\n  const minutes = Math.floor(seconds / 60)\n  if (minutes < 60) return `${minutes}m`\n  const hours = Math.floor(minutes / 60)\n  if (hours < 24) return `${hours}h`\n  const days = Math.floor(hours / 24)\n  return `${days}d`\n}\n\nexport async function sleep(ms: number): Promise<void> {\n  if (ms <= 0) return\n  await new Promise<void>(resolve => setTimeout(resolve, ms))\n}\n","export class MeshLockError extends Error {\n  public constructor(message: string) {\n    super(message)\n    this.name = 'MeshLockError'\n  }\n}\n\nexport class MeshLockTimeoutError extends MeshLockError {\n  public constructor(key: string) {\n    super(`Timed out waiting for mesh lock \"${key}\".`)\n    this.name = 'MeshLockTimeoutError'\n  }\n}\n","import type { MeshLockBackend, MeshLockLease as MeshLockLeaseContract } from './types.js'\n\nexport class LockLease implements MeshLockLeaseContract {\n  public constructor(\n    private readonly backend: MeshLockBackend,\n    public readonly key: string,\n    public readonly ownerId: string,\n    public readonly acquiredAt: string,\n    public readonly expiresAt: string\n  ) {}\n\n  public async renew(ttlMs = 30_000): Promise<boolean> {\n    return this.backend.renew(this.key, this.ownerId, ttlMs)\n  }\n\n  public async release(): Promise<boolean> {\n    return this.backend.release(this.key, this.ownerId)\n  }\n}\n","import { LockLease } from './LockLease.js'\nimport type { MeshLockAcquireOptions, MeshLockBackend, MeshLockLease, MeshLockRecord } from './types.js'\n\nexport class MemoryLockBackend implements MeshLockBackend {\n  public readonly kind = 'memory'\n  private readonly locks = new Map<string, MeshLockRecord>()\n\n  public async acquire(key: string, ownerId: string, options: MeshLockAcquireOptions = {}): Promise<MeshLockLease | null> {\n    this.pruneExpired()\n    if (this.locks.has(key)) return null\n    const ttlMs = options.ttlMs ?? 30_000\n    const acquiredAt = new Date().toISOString()\n    const expiresAt = new Date(Date.now() + ttlMs).toISOString()\n    const record: MeshLockRecord = { key, ownerId, acquiredAt, expiresAt, ...(options.metadata ? { metadata: options.metadata } : {}) }\n    this.locks.set(key, record)\n    return new LockLease(this, key, ownerId, acquiredAt, expiresAt)\n  }\n\n  public async renew(key: string, ownerId: string, ttlMs: number): Promise<boolean> {\n    this.pruneExpired()\n    const current = this.locks.get(key)\n    if (!current || current.ownerId !== ownerId) return false\n    this.locks.set(key, { ...current, expiresAt: new Date(Date.now() + ttlMs).toISOString() })\n    return true\n  }\n\n  public async release(key: string, ownerId: string): Promise<boolean> {\n    this.pruneExpired()\n    const current = this.locks.get(key)\n    if (!current || current.ownerId !== ownerId) return false\n    this.locks.delete(key)\n    return true\n  }\n\n  public async list(): Promise<readonly MeshLockRecord[]> {\n    this.pruneExpired()\n    return Array.from(this.locks.values()).sort((a, b) => a.key.localeCompare(b.key))\n  }\n\n  private pruneExpired(): void {\n    const now = Date.now()\n    for (const [key, record] of this.locks) {\n      if (new Date(record.expiresAt).getTime() <= now) this.locks.delete(key)\n    }\n  }\n}\n","import net from 'node:net'\nimport tls from 'node:tls'\n\nexport type RedisCommandArg = string | number\n\nexport interface SimpleRedisClientOptions {\n  readonly url: string\n  readonly connectTimeoutMs?: number\n}\n\nexport class SimpleRedisClient {\n  private readonly url: URL\n  private readonly timeoutMs: number\n\n  public constructor(options: SimpleRedisClientOptions) {\n    this.url = new URL(options.url)\n    this.timeoutMs = options.connectTimeoutMs ?? 5_000\n  }\n\n  public async command(args: readonly RedisCommandArg[]): Promise<unknown> {\n    const socket = await this.connect()\n    try {\n      const reader = new RespReader(socket)\n      socket.write(this.encode(args))\n      return await reader.read()\n    } finally {\n      socket.end()\n    }\n  }\n\n  private async connect(): Promise<net.Socket> {\n    const port = Number(this.url.port || (this.url.protocol === 'rediss:' ? 6380 : 6379))\n    const host = this.url.hostname || '127.0.0.1'\n    const socket = this.url.protocol === 'rediss:' ? tls.connect({ port, host }) : net.connect({ port, host })\n\n    await new Promise<void>((resolve, reject) => {\n      const timer = setTimeout(() => {\n        socket.destroy(new Error('Redis connection timed out.'))\n      }, this.timeoutMs)\n      socket.once('connect', () => {\n        clearTimeout(timer)\n        resolve()\n      })\n      socket.once('error', error => {\n        clearTimeout(timer)\n        reject(error)\n      })\n    })\n\n    if (this.url.password) {\n      if (this.url.username) await this.commandOnSocket(socket, ['AUTH', decodeURIComponent(this.url.username), decodeURIComponent(this.url.password)])\n      else await this.commandOnSocket(socket, ['AUTH', decodeURIComponent(this.url.password)])\n    }\n\n    const db = this.url.pathname.replace(/^\\//, '')\n    if (db) await this.commandOnSocket(socket, ['SELECT', db])\n    return socket\n  }\n\n  private async commandOnSocket(socket: net.Socket, args: readonly RedisCommandArg[]): Promise<unknown> {\n    const reader = new RespReader(socket)\n    socket.write(this.encode(args))\n    return reader.read()\n  }\n\n  private encode(args: readonly RedisCommandArg[]): string {\n    return `*${args.length}\\r\\n${args.map(arg => {\n      const value = String(arg)\n      return `$${Buffer.byteLength(value)}\\r\\n${value}\\r\\n`\n    }).join('')}`\n  }\n}\n\nclass RespReader {\n  private buffer = Buffer.alloc(0)\n  private waiters: Array<() => void> = []\n\n  public constructor(private readonly socket: net.Socket) {\n    socket.on('data', chunk => {\n      this.buffer = Buffer.concat([this.buffer, chunk])\n      for (const waiter of this.waiters.splice(0)) waiter()\n    })\n  }\n\n  public async read(): Promise<unknown> {\n    while (true) {\n      const parsed = this.tryParse(0)\n      if (parsed) {\n        this.buffer = this.buffer.subarray(parsed.offset)\n        if (parsed.value instanceof RedisError) throw parsed.value\n        return parsed.value\n      }\n      await new Promise<void>((resolve, reject) => {\n        const onError = (error: Error): void => {\n          cleanup()\n          reject(error)\n        }\n        const onClose = (): void => {\n          cleanup()\n          reject(new Error('Redis socket closed before response.'))\n        }\n        const wake = (): void => {\n          cleanup()\n          resolve()\n        }\n        const cleanup = (): void => {\n          this.socket.off('error', onError)\n          this.socket.off('close', onClose)\n          const index = this.waiters.indexOf(wake)\n          if (index >= 0) this.waiters.splice(index, 1)\n        }\n        this.socket.once('error', onError)\n        this.socket.once('close', onClose)\n        this.waiters.push(wake)\n      })\n    }\n  }\n\n  private tryParse(offset: number): { value: unknown; offset: number } | null {\n    if (offset >= this.buffer.length) return null\n    const type = String.fromCharCode(this.buffer[offset]!)\n    const line = this.readLine(offset + 1)\n    if (!line) return null\n\n    if (type === '+') return { value: line.text, offset: line.offset }\n    if (type === '-') return { value: new RedisError(line.text), offset: line.offset }\n    if (type === ':') return { value: Number(line.text), offset: line.offset }\n    if (type === '$') {\n      const length = Number(line.text)\n      if (length === -1) return { value: null, offset: line.offset }\n      const end = line.offset + length\n      if (this.buffer.length < end + 2) return null\n      return { value: this.buffer.subarray(line.offset, end).toString('utf8'), offset: end + 2 }\n    }\n    if (type === '*') {\n      const count = Number(line.text)\n      if (count === -1) return { value: null, offset: line.offset }\n      const values: unknown[] = []\n      let current = line.offset\n      for (let index = 0; index < count; index += 1) {\n        const item = this.tryParse(current)\n        if (!item) return null\n        values.push(item.value)\n        current = item.offset\n      }\n      return { value: values, offset: current }\n    }\n    return null\n  }\n\n  private readLine(offset: number): { text: string; offset: number } | null {\n    const end = this.buffer.indexOf('\\r\\n', offset)\n    if (end < 0) return null\n    return { text: this.buffer.subarray(offset, end).toString('utf8'), offset: end + 2 }\n  }\n}\n\nclass RedisError extends Error {\n  public constructor(message: string) {\n    super(message)\n    this.name = 'RedisError'\n  }\n}\n","import { SimpleRedisClient, type SimpleRedisClientOptions } from '../../registry/redis/SimpleRedisClient.js'\nimport { LockLease } from '../LockLease.js'\nimport type { MeshLockAcquireOptions, MeshLockBackend, MeshLockLease, MeshLockRecord } from '../types.js'\n\nexport interface RedisLockBackendOptions extends SimpleRedisClientOptions {\n  readonly app: string\n  readonly keyPrefix?: string\n}\n\ninterface StoredLock {\n  readonly key: string\n  readonly ownerId: string\n  readonly acquiredAt: string\n  readonly expiresAt: string\n  readonly metadata?: Record<string, unknown>\n}\n\nexport class RedisLockBackend implements MeshLockBackend {\n  public readonly kind = 'redis'\n  private readonly client: SimpleRedisClient\n  private readonly prefix: string\n\n  public constructor(options: RedisLockBackendOptions) {\n    this.client = new SimpleRedisClient(options)\n    this.prefix = options.keyPrefix ?? `mesh:${options.app}`\n  }\n\n  public async acquire(key: string, ownerId: string, options: MeshLockAcquireOptions = {}): Promise<MeshLockLease | null> {\n    const ttlMs = options.ttlMs ?? 30_000\n    const acquiredAt = new Date().toISOString()\n    const expiresAt = new Date(Date.now() + ttlMs).toISOString()\n    const stored: StoredLock = { key, ownerId, acquiredAt, expiresAt, ...(options.metadata ? { metadata: options.metadata } : {}) }\n    const response = await this.client.command(['SET', this.lockKey(key), JSON.stringify(stored), 'NX', 'PX', ttlMs])\n    if (response !== 'OK') return null\n    await this.client.command(['SADD', this.indexKey(), key])\n    return new LockLease(this, key, ownerId, acquiredAt, expiresAt)\n  }\n\n  public async renew(key: string, ownerId: string, ttlMs: number): Promise<boolean> {\n    const script = `local v = redis.call('GET', KEYS[1]); if not v then return 0 end; local ok, decoded = pcall(cjson.decode, v); if not ok or decoded.ownerId ~= ARGV[1] then return 0 end; decoded.expiresAt = ARGV[3]; redis.call('SET', KEYS[1], cjson.encode(decoded), 'PX', ARGV[2]); return 1`\n    const result = await this.client.command(['EVAL', script, 1, this.lockKey(key), ownerId, ttlMs, new Date(Date.now() + ttlMs).toISOString()])\n    return result === 1\n  }\n\n  public async release(key: string, ownerId: string): Promise<boolean> {\n    const script = `local v = redis.call('GET', KEYS[1]); if not v then return 0 end; local ok, decoded = pcall(cjson.decode, v); if not ok or decoded.ownerId ~= ARGV[1] then return 0 end; redis.call('DEL', KEYS[1]); redis.call('SREM', KEYS[2], ARGV[2]); return 1`\n    const result = await this.client.command(['EVAL', script, 2, this.lockKey(key), this.indexKey(), ownerId, key])\n    return result === 1\n  }\n\n  public async list(): Promise<readonly MeshLockRecord[]> {\n    const keys = await this.keys()\n    const records: MeshLockRecord[] = []\n    const stale: string[] = []\n    for (const key of keys) {\n      const raw = await this.client.command(['GET', this.lockKey(key)])\n      if (typeof raw !== 'string') {\n        stale.push(key)\n        continue\n      }\n      try {\n        const parsed = JSON.parse(raw) as MeshLockRecord\n        records.push(parsed)\n      } catch {\n        stale.push(key)\n      }\n    }\n    if (stale.length > 0) await this.client.command(['SREM', this.indexKey(), ...stale])\n    return records.sort((a, b) => a.key.localeCompare(b.key))\n  }\n\n  private async keys(): Promise<readonly string[]> {\n    const value = await this.client.command(['SMEMBERS', this.indexKey()])\n    return Array.isArray(value) ? value.filter((item): item is string => typeof item === 'string') : []\n  }\n\n  private lockKey(key: string): string { return `${this.prefix}:lock:${key}` }\n  private indexKey(): string { return `${this.prefix}:locks` }\n}\n","import type { NormalizedMeshConfig } from '../core/types.js'\nimport { MemoryLockBackend } from './MemoryLockBackend.js'\nimport { LockManager } from './LockManager.js'\nimport { RedisLockBackend } from './redis/RedisLockBackend.js'\nimport type { MeshLockBackend } from './types.js'\n\nexport class LockFactory {\n  public createBackend(config: NormalizedMeshConfig): MeshLockBackend {\n    if (config.coordination.locks.backend === 'redis') {\n      return new RedisLockBackend({\n        app: config.app,\n        url: config.coordination.locks.url,\n        keyPrefix: config.coordination.keyPrefix,\n        connectTimeoutMs: config.coordination.connectTimeoutMs\n      })\n    }\n    return new MemoryLockBackend()\n  }\n\n  public createManager(config: NormalizedMeshConfig, ownerId?: string): LockManager {\n    return new LockManager(this.createBackend(config), ownerId)\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,yBAA2B;;;ACiB3B,eAAsB,MAAM,IAA2B;AACrD,MAAI,MAAM,EAAG;AACb,QAAM,IAAI,QAAc,aAAW,WAAW,SAAS,EAAE,CAAC;AAC5D;;;ACpBO,IAAM,gBAAN,cAA4B,MAAM;AAAA,EAChC,YAAY,SAAiB;AAClC,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,uBAAN,cAAmC,cAAc;AAAA,EAC/C,YAAY,KAAa;AAC9B,UAAM,oCAAoC,GAAG,IAAI;AACjD,SAAK,OAAO;AAAA,EACd;AACF;;;AFPO,IAAM,cAAN,MAAkB;AAAA,EAGhB,YAA6B,SAA0B,SAAkB;AAA5C;AAClC,SAAK,UAAU,WAAW,QAAQ,QAAQ,GAAG,QAAI,+BAAW,CAAC;AAAA,EAC/D;AAAA,EAFoC;AAAA,EAFnB;AAAA,EAMjB,MAAa,WAAW,KAAa,UAAkC,CAAC,GAAkC;AACxG,WAAO,KAAK,QAAQ,QAAQ,KAAK,KAAK,SAAS,OAAO;AAAA,EACxD;AAAA,EAEA,MAAa,QAAQ,KAAa,UAAkC,CAAC,GAA2B;AAC9F,UAAM,SAAS,QAAQ,UAAU;AACjC,UAAM,UAAU,QAAQ,WAAW;AACnC,UAAM,WAAW,KAAK,IAAI,IAAI;AAC9B,WAAO,MAAM;AACX,YAAM,QAAQ,MAAM,KAAK,WAAW,KAAK,OAAO;AAChD,UAAI,MAAO,QAAO;AAClB,UAAI,KAAK,IAAI,KAAK,SAAU,OAAM,IAAI,qBAAqB,GAAG;AAC9D,YAAM,MAAM,KAAK,IAAI,SAAS,KAAK,IAAI,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC;AAAA,IACnE;AAAA,EACF;AAAA,EAEA,MAAa,aAAgB,KAAa,IAA8C,UAA8B,CAAC,GAAe;AACpI,UAAM,QAAQ,MAAM,KAAK,QAAQ,KAAK,OAAO;AAC7C,UAAM,QAAQ,QAAQ,SAAS;AAC/B,QAAI,UAAU;AACd,QAAI,QAA+B;AACnC,QAAI,QAAQ,aAAa,MAAM;AAC7B,YAAM,QAAQ,QAAQ,gBAAgB,KAAK,IAAI,KAAO,KAAK,MAAM,QAAQ,CAAC,CAAC;AAC3E,cAAQ,YAAY,MAAM;AAAE,YAAI,CAAC,QAAS,MAAK,MAAM,MAAM,KAAK;AAAA,MAAE,GAAG,KAAK;AAC1E,YAAM,QAAQ;AAAA,IAChB;AACA,QAAI;AACF,aAAO,MAAM,GAAG,KAAK;AAAA,IACvB,UAAE;AACA,gBAAU;AACV,UAAI,MAAO,eAAc,KAAK;AAC9B,YAAM,MAAM,QAAQ;AAAA,IACtB;AAAA,EACF;AAAA,EAEO,OAA2C;AAChD,WAAO,KAAK,QAAQ,KAAK;AAAA,EAC3B;AACF;;;AGhDO,IAAM,YAAN,MAAiD;AAAA,EAC/C,YACY,SACD,KACA,SACA,YACA,WAChB;AALiB;AACD;AACA;AACA;AACA;AAAA,EACf;AAAA,EALgB;AAAA,EACD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGlB,MAAa,MAAM,QAAQ,KAA0B;AACnD,WAAO,KAAK,QAAQ,MAAM,KAAK,KAAK,KAAK,SAAS,KAAK;AAAA,EACzD;AAAA,EAEA,MAAa,UAA4B;AACvC,WAAO,KAAK,QAAQ,QAAQ,KAAK,KAAK,KAAK,OAAO;AAAA,EACpD;AACF;;;ACfO,IAAM,oBAAN,MAAmD;AAAA,EACxC,OAAO;AAAA,EACN,QAAQ,oBAAI,IAA4B;AAAA,EAEzD,MAAa,QAAQ,KAAa,SAAiB,UAAkC,CAAC,GAAkC;AACtH,SAAK,aAAa;AAClB,QAAI,KAAK,MAAM,IAAI,GAAG,EAAG,QAAO;AAChC,UAAM,QAAQ,QAAQ,SAAS;AAC/B,UAAM,cAAa,oBAAI,KAAK,GAAE,YAAY;AAC1C,UAAM,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,EAAE,YAAY;AAC3D,UAAM,SAAyB,EAAE,KAAK,SAAS,YAAY,WAAW,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC,EAAG;AAClI,SAAK,MAAM,IAAI,KAAK,MAAM;AAC1B,WAAO,IAAI,UAAU,MAAM,KAAK,SAAS,YAAY,SAAS;AAAA,EAChE;AAAA,EAEA,MAAa,MAAM,KAAa,SAAiB,OAAiC;AAChF,SAAK,aAAa;AAClB,UAAM,UAAU,KAAK,MAAM,IAAI,GAAG;AAClC,QAAI,CAAC,WAAW,QAAQ,YAAY,QAAS,QAAO;AACpD,SAAK,MAAM,IAAI,KAAK,EAAE,GAAG,SAAS,WAAW,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,EAAE,YAAY,EAAE,CAAC;AACzF,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,QAAQ,KAAa,SAAmC;AACnE,SAAK,aAAa;AAClB,UAAM,UAAU,KAAK,MAAM,IAAI,GAAG;AAClC,QAAI,CAAC,WAAW,QAAQ,YAAY,QAAS,QAAO;AACpD,SAAK,MAAM,OAAO,GAAG;AACrB,WAAO;AAAA,EACT;AAAA,EAEA,MAAa,OAA2C;AACtD,SAAK,aAAa;AAClB,WAAO,MAAM,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,IAAI,cAAc,EAAE,GAAG,CAAC;AAAA,EAClF;AAAA,EAEQ,eAAqB;AAC3B,UAAM,MAAM,KAAK,IAAI;AACrB,eAAW,CAAC,KAAK,MAAM,KAAK,KAAK,OAAO;AACtC,UAAI,IAAI,KAAK,OAAO,SAAS,EAAE,QAAQ,KAAK,IAAK,MAAK,MAAM,OAAO,GAAG;AAAA,IACxE;AAAA,EACF;AACF;;;AC7CA,sBAAgB;AAChB,sBAAgB;AAST,IAAM,oBAAN,MAAwB;AAAA,EACZ;AAAA,EACA;AAAA,EAEV,YAAY,SAAmC;AACpD,SAAK,MAAM,IAAI,IAAI,QAAQ,GAAG;AAC9B,SAAK,YAAY,QAAQ,oBAAoB;AAAA,EAC/C;AAAA,EAEA,MAAa,QAAQ,MAAoD;AACvE,UAAM,SAAS,MAAM,KAAK,QAAQ;AAClC,QAAI;AACF,YAAM,SAAS,IAAI,WAAW,MAAM;AACpC,aAAO,MAAM,KAAK,OAAO,IAAI,CAAC;AAC9B,aAAO,MAAM,OAAO,KAAK;AAAA,IAC3B,UAAE;AACA,aAAO,IAAI;AAAA,IACb;AAAA,EACF;AAAA,EAEA,MAAc,UAA+B;AAC3C,UAAM,OAAO,OAAO,KAAK,IAAI,SAAS,KAAK,IAAI,aAAa,YAAY,OAAO,KAAK;AACpF,UAAM,OAAO,KAAK,IAAI,YAAY;AAClC,UAAM,SAAS,KAAK,IAAI,aAAa,YAAY,gBAAAA,QAAI,QAAQ,EAAE,MAAM,KAAK,CAAC,IAAI,gBAAAC,QAAI,QAAQ,EAAE,MAAM,KAAK,CAAC;AAEzG,UAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,YAAM,QAAQ,WAAW,MAAM;AAC7B,eAAO,QAAQ,IAAI,MAAM,6BAA6B,CAAC;AAAA,MACzD,GAAG,KAAK,SAAS;AACjB,aAAO,KAAK,WAAW,MAAM;AAC3B,qBAAa,KAAK;AAClB,gBAAQ;AAAA,MACV,CAAC;AACD,aAAO,KAAK,SAAS,WAAS;AAC5B,qBAAa,KAAK;AAClB,eAAO,KAAK;AAAA,MACd,CAAC;AAAA,IACH,CAAC;AAED,QAAI,KAAK,IAAI,UAAU;AACrB,UAAI,KAAK,IAAI,SAAU,OAAM,KAAK,gBAAgB,QAAQ,CAAC,QAAQ,mBAAmB,KAAK,IAAI,QAAQ,GAAG,mBAAmB,KAAK,IAAI,QAAQ,CAAC,CAAC;AAAA,UAC3I,OAAM,KAAK,gBAAgB,QAAQ,CAAC,QAAQ,mBAAmB,KAAK,IAAI,QAAQ,CAAC,CAAC;AAAA,IACzF;AAEA,UAAM,KAAK,KAAK,IAAI,SAAS,QAAQ,OAAO,EAAE;AAC9C,QAAI,GAAI,OAAM,KAAK,gBAAgB,QAAQ,CAAC,UAAU,EAAE,CAAC;AACzD,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,gBAAgB,QAAoB,MAAoD;AACpG,UAAM,SAAS,IAAI,WAAW,MAAM;AACpC,WAAO,MAAM,KAAK,OAAO,IAAI,CAAC;AAC9B,WAAO,OAAO,KAAK;AAAA,EACrB;AAAA,EAEQ,OAAO,MAA0C;AACvD,WAAO,IAAI,KAAK,MAAM;AAAA,EAAO,KAAK,IAAI,SAAO;AAC3C,YAAM,QAAQ,OAAO,GAAG;AACxB,aAAO,IAAI,OAAO,WAAW,KAAK,CAAC;AAAA,EAAO,KAAK;AAAA;AAAA,IACjD,CAAC,EAAE,KAAK,EAAE,CAAC;AAAA,EACb;AACF;AAEA,IAAM,aAAN,MAAiB;AAAA,EAIR,YAA6B,QAAoB;AAApB;AAClC,WAAO,GAAG,QAAQ,WAAS;AACzB,WAAK,SAAS,OAAO,OAAO,CAAC,KAAK,QAAQ,KAAK,CAAC;AAChD,iBAAW,UAAU,KAAK,QAAQ,OAAO,CAAC,EAAG,QAAO;AAAA,IACtD,CAAC;AAAA,EACH;AAAA,EALoC;AAAA,EAH5B,SAAS,OAAO,MAAM,CAAC;AAAA,EACvB,UAA6B,CAAC;AAAA,EAStC,MAAa,OAAyB;AACpC,WAAO,MAAM;AACX,YAAM,SAAS,KAAK,SAAS,CAAC;AAC9B,UAAI,QAAQ;AACV,aAAK,SAAS,KAAK,OAAO,SAAS,OAAO,MAAM;AAChD,YAAI,OAAO,iBAAiB,WAAY,OAAM,OAAO;AACrD,eAAO,OAAO;AAAA,MAChB;AACA,YAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,cAAM,UAAU,CAAC,UAAuB;AACtC,kBAAQ;AACR,iBAAO,KAAK;AAAA,QACd;AACA,cAAM,UAAU,MAAY;AAC1B,kBAAQ;AACR,iBAAO,IAAI,MAAM,sCAAsC,CAAC;AAAA,QAC1D;AACA,cAAM,OAAO,MAAY;AACvB,kBAAQ;AACR,kBAAQ;AAAA,QACV;AACA,cAAM,UAAU,MAAY;AAC1B,eAAK,OAAO,IAAI,SAAS,OAAO;AAChC,eAAK,OAAO,IAAI,SAAS,OAAO;AAChC,gBAAM,QAAQ,KAAK,QAAQ,QAAQ,IAAI;AACvC,cAAI,SAAS,EAAG,MAAK,QAAQ,OAAO,OAAO,CAAC;AAAA,QAC9C;AACA,aAAK,OAAO,KAAK,SAAS,OAAO;AACjC,aAAK,OAAO,KAAK,SAAS,OAAO;AACjC,aAAK,QAAQ,KAAK,IAAI;AAAA,MACxB,CAAC;AAAA,IACH;AAAA,EACF;AAAA,EAEQ,SAAS,QAA2D;AAC1E,QAAI,UAAU,KAAK,OAAO,OAAQ,QAAO;AACzC,UAAM,OAAO,OAAO,aAAa,KAAK,OAAO,MAAM,CAAE;AACrD,UAAM,OAAO,KAAK,SAAS,SAAS,CAAC;AACrC,QAAI,CAAC,KAAM,QAAO;AAElB,QAAI,SAAS,IAAK,QAAO,EAAE,OAAO,KAAK,MAAM,QAAQ,KAAK,OAAO;AACjE,QAAI,SAAS,IAAK,QAAO,EAAE,OAAO,IAAI,WAAW,KAAK,IAAI,GAAG,QAAQ,KAAK,OAAO;AACjF,QAAI,SAAS,IAAK,QAAO,EAAE,OAAO,OAAO,KAAK,IAAI,GAAG,QAAQ,KAAK,OAAO;AACzE,QAAI,SAAS,KAAK;AAChB,YAAM,SAAS,OAAO,KAAK,IAAI;AAC/B,UAAI,WAAW,GAAI,QAAO,EAAE,OAAO,MAAM,QAAQ,KAAK,OAAO;AAC7D,YAAM,MAAM,KAAK,SAAS;AAC1B,UAAI,KAAK,OAAO,SAAS,MAAM,EAAG,QAAO;AACzC,aAAO,EAAE,OAAO,KAAK,OAAO,SAAS,KAAK,QAAQ,GAAG,EAAE,SAAS,MAAM,GAAG,QAAQ,MAAM,EAAE;AAAA,IAC3F;AACA,QAAI,SAAS,KAAK;AAChB,YAAM,QAAQ,OAAO,KAAK,IAAI;AAC9B,UAAI,UAAU,GAAI,QAAO,EAAE,OAAO,MAAM,QAAQ,KAAK,OAAO;AAC5D,YAAM,SAAoB,CAAC;AAC3B,UAAI,UAAU,KAAK;AACnB,eAAS,QAAQ,GAAG,QAAQ,OAAO,SAAS,GAAG;AAC7C,cAAM,OAAO,KAAK,SAAS,OAAO;AAClC,YAAI,CAAC,KAAM,QAAO;AAClB,eAAO,KAAK,KAAK,KAAK;AACtB,kBAAU,KAAK;AAAA,MACjB;AACA,aAAO,EAAE,OAAO,QAAQ,QAAQ,QAAQ;AAAA,IAC1C;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,SAAS,QAAyD;AACxE,UAAM,MAAM,KAAK,OAAO,QAAQ,QAAQ,MAAM;AAC9C,QAAI,MAAM,EAAG,QAAO;AACpB,WAAO,EAAE,MAAM,KAAK,OAAO,SAAS,QAAQ,GAAG,EAAE,SAAS,MAAM,GAAG,QAAQ,MAAM,EAAE;AAAA,EACrF;AACF;AAEA,IAAM,aAAN,cAAyB,MAAM;AAAA,EACtB,YAAY,SAAiB;AAClC,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;;ACjJO,IAAM,mBAAN,MAAkD;AAAA,EACvC,OAAO;AAAA,EACN;AAAA,EACA;AAAA,EAEV,YAAY,SAAkC;AACnD,SAAK,SAAS,IAAI,kBAAkB,OAAO;AAC3C,SAAK,SAAS,QAAQ,aAAa,QAAQ,QAAQ,GAAG;AAAA,EACxD;AAAA,EAEA,MAAa,QAAQ,KAAa,SAAiB,UAAkC,CAAC,GAAkC;AACtH,UAAM,QAAQ,QAAQ,SAAS;AAC/B,UAAM,cAAa,oBAAI,KAAK,GAAE,YAAY;AAC1C,UAAM,YAAY,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,EAAE,YAAY;AAC3D,UAAM,SAAqB,EAAE,KAAK,SAAS,YAAY,WAAW,GAAI,QAAQ,WAAW,EAAE,UAAU,QAAQ,SAAS,IAAI,CAAC,EAAG;AAC9H,UAAM,WAAW,MAAM,KAAK,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,GAAG,GAAG,KAAK,UAAU,MAAM,GAAG,MAAM,MAAM,KAAK,CAAC;AAChH,QAAI,aAAa,KAAM,QAAO;AAC9B,UAAM,KAAK,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS,GAAG,GAAG,CAAC;AACxD,WAAO,IAAI,UAAU,MAAM,KAAK,SAAS,YAAY,SAAS;AAAA,EAChE;AAAA,EAEA,MAAa,MAAM,KAAa,SAAiB,OAAiC;AAChF,UAAM,SAAS;AACf,UAAM,SAAS,MAAM,KAAK,OAAO,QAAQ,CAAC,QAAQ,QAAQ,GAAG,KAAK,QAAQ,GAAG,GAAG,SAAS,OAAO,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,EAAE,YAAY,CAAC,CAAC;AAC3I,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,MAAa,QAAQ,KAAa,SAAmC;AACnE,UAAM,SAAS;AACf,UAAM,SAAS,MAAM,KAAK,OAAO,QAAQ,CAAC,QAAQ,QAAQ,GAAG,KAAK,QAAQ,GAAG,GAAG,KAAK,SAAS,GAAG,SAAS,GAAG,CAAC;AAC9G,WAAO,WAAW;AAAA,EACpB;AAAA,EAEA,MAAa,OAA2C;AACtD,UAAM,OAAO,MAAM,KAAK,KAAK;AAC7B,UAAM,UAA4B,CAAC;AACnC,UAAM,QAAkB,CAAC;AACzB,eAAW,OAAO,MAAM;AACtB,YAAM,MAAM,MAAM,KAAK,OAAO,QAAQ,CAAC,OAAO,KAAK,QAAQ,GAAG,CAAC,CAAC;AAChE,UAAI,OAAO,QAAQ,UAAU;AAC3B,cAAM,KAAK,GAAG;AACd;AAAA,MACF;AACA,UAAI;AACF,cAAM,SAAS,KAAK,MAAM,GAAG;AAC7B,gBAAQ,KAAK,MAAM;AAAA,MACrB,QAAQ;AACN,cAAM,KAAK,GAAG;AAAA,MAChB;AAAA,IACF;AACA,QAAI,MAAM,SAAS,EAAG,OAAM,KAAK,OAAO,QAAQ,CAAC,QAAQ,KAAK,SAAS,GAAG,GAAG,KAAK,CAAC;AACnF,WAAO,QAAQ,KAAK,CAAC,GAAG,MAAM,EAAE,IAAI,cAAc,EAAE,GAAG,CAAC;AAAA,EAC1D;AAAA,EAEA,MAAc,OAAmC;AAC/C,UAAM,QAAQ,MAAM,KAAK,OAAO,QAAQ,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC;AACrE,WAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ,IAAI,CAAC;AAAA,EACpG;AAAA,EAEQ,QAAQ,KAAqB;AAAE,WAAO,GAAG,KAAK,MAAM,SAAS,GAAG;AAAA,EAAG;AAAA,EACnE,WAAmB;AAAE,WAAO,GAAG,KAAK,MAAM;AAAA,EAAS;AAC7D;;;ACxEO,IAAM,cAAN,MAAkB;AAAA,EAChB,cAAc,QAA+C;AAClE,QAAI,OAAO,aAAa,MAAM,YAAY,SAAS;AACjD,aAAO,IAAI,iBAAiB;AAAA,QAC1B,KAAK,OAAO;AAAA,QACZ,KAAK,OAAO,aAAa,MAAM;AAAA,QAC/B,WAAW,OAAO,aAAa;AAAA,QAC/B,kBAAkB,OAAO,aAAa;AAAA,MACxC,CAAC;AAAA,IACH;AACA,WAAO,IAAI,kBAAkB;AAAA,EAC/B;AAAA,EAEO,cAAc,QAA8B,SAA+B;AAChF,WAAO,IAAI,YAAY,KAAK,cAAc,MAAM,GAAG,OAAO;AAAA,EAC5D;AACF;","names":["tls","net"]}