mcp-jira-stdio 1.6.1 โ†’ 1.7.0

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/dist/index.js CHANGED
@@ -40,7 +40,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
40
40
 
41
41
  // node_modules/dotenv/package.json
42
42
  var require_package = __commonJS({
43
- "node_modules/dotenv/package.json"(exports, module) {
43
+ "node_modules/dotenv/package.json"(exports$1, module) {
44
44
  module.exports = {
45
45
  name: "dotenv",
46
46
  version: "17.2.3",
@@ -108,7 +108,7 @@ var require_package = __commonJS({
108
108
 
109
109
  // node_modules/dotenv/lib/main.js
110
110
  var require_main = __commonJS({
111
- "node_modules/dotenv/lib/main.js"(exports, module) {
111
+ "node_modules/dotenv/lib/main.js"(exports$1, module) {
112
112
  var fs = __require("fs");
113
113
  var path = __require("path");
114
114
  var os = __require("os");
@@ -437,10 +437,10 @@ var require_main = __commonJS({
437
437
 
438
438
  // package.json
439
439
  var require_package2 = __commonJS({
440
- "package.json"(exports, module) {
440
+ "package.json"(exports$1, module) {
441
441
  module.exports = {
442
442
  name: "mcp-jira-stdio",
443
- version: "1.6.1",
443
+ version: "1.7.0",
444
444
  description: "Model Context Protocol (MCP) server for Jira API integration",
445
445
  author: "graslt",
446
446
  license: "MIT",
@@ -486,29 +486,29 @@ var require_package2 = __commonJS({
486
486
  "ai"
487
487
  ],
488
488
  engines: {
489
- node: ">=18.0.0"
489
+ node: ">=20.0.0"
490
490
  },
491
491
  dependencies: {
492
492
  "@modelcontextprotocol/sdk": "^1.17.1",
493
493
  axios: "^1.7.0",
494
- "md-to-adf": "^0.6.4",
494
+ "md-to-adf": "^0.5.0",
495
495
  zod: "^3.22.4"
496
496
  },
497
497
  devDependencies: {
498
498
  "@types/node": "^22.5.0",
499
499
  "@typescript-eslint/eslint-plugin": "^8.0.0",
500
500
  "@typescript-eslint/parser": "^8.0.0",
501
- "@vitest/coverage-v8": "^3.2.4",
502
- "@vitest/ui": "^3.2.4",
501
+ "@vitest/coverage-v8": "^4.0.10",
502
+ "@vitest/ui": "^4.0.10",
503
503
  dotenv: "^17.2.1",
504
504
  eslint: "^9.9.0",
505
505
  "eslint-config-prettier": "^9.1.0",
506
506
  "eslint-plugin-prettier": "^5.2.0",
507
507
  prettier: "^3.5.0",
508
- tsup: "^8.0.0",
508
+ tsup: "^8.5.1",
509
509
  tsx: "^4.16.0",
510
510
  typescript: "^5.5.0",
511
- vitest: "^3.2.4"
511
+ vitest: "^4.0.10"
512
512
  },
513
513
  files: [
514
514
  "dist",
@@ -526,6 +526,10 @@ var require_package2 = __commonJS({
526
526
  homepage: "https://github.com/freema/mcp-jira-stdio#readme",
527
527
  publishConfig: {
528
528
  access: "public"
529
+ },
530
+ overrides: {
531
+ glob: ">=11.0.4",
532
+ marked: ">=4.0.10"
529
533
  }
530
534
  };
531
535
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../node_modules/dotenv/package.json","../node_modules/dotenv/lib/main.js","../package.json","../src/config/constants.ts","../src/utils/logger.ts","../src/utils/jira-auth.ts","../src/utils/validators.ts","../src/types/tools.ts","../src/utils/api-helpers.ts","../src/utils/redaction.ts","../src/utils/formatters.ts","../src/utils/error-handler.ts","../src/tools/get-visible-projects.ts","../src/tools/get-issue.ts","../src/tools/search-issues.ts","../src/tools/get-my-issues.ts","../src/tools/get-issue-types.ts","../src/tools/get-users.ts","../src/tools/get-priorities.ts","../src/tools/get-statuses.ts","../src/tools/create-issue.ts","../src/tools/update-issue.ts","../src/tools/add-comment.ts","../src/tools/get-project-info.ts","../src/tools/create-subtask.ts","../src/tools/get-create-meta.ts","../src/tools/get-custom-fields.ts","../src/tools/create-issue-link.ts","../src/index.ts"],"names":["path","require_package","z","log","message"],"mappings":"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","file":"index.js","sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"17.2.3\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run tests/**/*.js --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run tests/**/*.js --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\n// Array of tips to display randomly\nconst TIPS = [\n '๐Ÿ” encrypt with Dotenvx: https://dotenvx.com',\n '๐Ÿ” prevent committing .env to code: https://dotenvx.com/precommit',\n '๐Ÿ” prevent building .env in docker: https://dotenvx.com/prebuild',\n '๐Ÿ“ก add observability to secrets: https://dotenvx.com/ops',\n '๐Ÿ‘ฅ sync secrets across teammates & machines: https://dotenvx.com/ops',\n '๐Ÿ—‚๏ธ backup and recover secrets: https://dotenvx.com/ops',\n 'โœ… audit secrets and track compliance: https://dotenvx.com/ops',\n '๐Ÿ”„ add secrets lifecycle management: https://dotenvx.com/ops',\n '๐Ÿ”‘ add access controls to secrets: https://dotenvx.com/ops',\n '๐Ÿ› ๏ธ run anywhere with `dotenvx run -- yourcommand`',\n 'โš™๏ธ specify custom .env file path with { path: \\'/custom/path/.env\\' }',\n 'โš™๏ธ enable debug logging with { debug: true }',\n 'โš™๏ธ override existing env vars with { override: true }',\n 'โš™๏ธ suppress all logs with { quiet: true }',\n 'โš™๏ธ write to custom object with { processEnv: myObject }',\n 'โš™๏ธ load multiple .env files with { path: [\\'.env.local\\', \\'.env\\'] }'\n]\n\n// Get a random tip from the tips array\nfunction _getRandomTip () {\n return TIPS[Math.floor(Math.random() * TIPS.length)]\n}\n\nfunction parseBoolean (value) {\n if (typeof value === 'string') {\n return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())\n }\n return Boolean(value)\n}\n\nfunction supportsAnsi () {\n return process.stdout.isTTY // && process.env.TERM !== 'dumb'\n}\n\nfunction dim (text) {\n return supportsAnsi() ? `\\x1b[2m${text}\\x1b[0m` : text\n}\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.error(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))\n const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))\n let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n const populated = DotenvModule.populate(processEnv, parsedAll, options)\n\n // handle user settings DOTENV_CONFIG_ options inside .env file(s)\n debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)\n quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(populated).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')} ${dim(`-- tip: ${_getRandomTip()}`)}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n const populated = {}\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n }\n\n return populated\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","{\n \"name\": \"mcp-jira-stdio\",\n \"version\": \"1.6.1\",\n \"description\": \"Model Context Protocol (MCP) server for Jira API integration\",\n \"author\": \"graslt\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"mcp-jira-stdio\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"dev\": \"tsx watch src/index.ts\",\n \"build\": \"tsup\",\n \"start\": \"node dist/index.js\",\n \"clean\": \"rm -rf dist\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src --ext .ts\",\n \"lint:fix\": \"eslint src --ext .ts --fix\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"check\": \"npm run typecheck && npm run lint && npm run format:check\",\n \"check:all\": \"npm run check && npm run test:run && npm run build\",\n \"prepublishOnly\": \"npm run clean && npm run build\",\n \"inspector\": \"npx @modelcontextprotocol/inspector node dist/index.js\",\n \"inspector:dev\": \"NODE_ENV=development npx @modelcontextprotocol/inspector npx tsx src/index.ts\",\n \"setup:mcp\": \"node scripts/setup-mcp-config.js\",\n \"test\": \"vitest\",\n \"test:run\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\",\n \"test:watch\": \"vitest watch\",\n \"test:ui\": \"vitest --ui\",\n \"test:connection\": \"node scripts/test-connection.cjs\",\n \"docker:build\": \"docker build -t mcp-jira-stdio .\",\n \"docker:run\": \"docker run -it --rm mcp-jira-stdio\",\n \"docker:push\": \"docker push freema/mcp-jira-stdio:latest && docker push ghcr.io/freema/mcp-jira-stdio:latest\"\n },\n \"keywords\": [\n \"mcp\",\n \"model-context-protocol\",\n \"jira\",\n \"atlassian\",\n \"api\",\n \"claude\",\n \"ai\"\n ],\n \"engines\": {\n \"node\": \">=18.0.0\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.1\",\n \"axios\": \"^1.7.0\",\n \"md-to-adf\": \"^0.6.4\",\n \"zod\": \"^3.22.4\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.5.0\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"dotenv\": \"^17.2.1\",\n \"eslint\": \"^9.9.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-prettier\": \"^5.2.0\",\n \"prettier\": \"^3.5.0\",\n \"tsup\": \"^8.0.0\",\n \"tsx\": \"^4.16.0\",\n \"typescript\": \"^5.5.0\",\n \"vitest\": \"^3.2.4\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\",\n \"scripts\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/freema/mcp-jira-stdio.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/freema/mcp-jira-stdio/issues\"\n },\n \"homepage\": \"https://github.com/freema/mcp-jira-stdio#readme\",\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","export const JIRA_CONFIG = {\n API_VERSION: '3',\n BASE_PATH: '/rest/api/3',\n DEFAULT_TIMEOUT: 30000,\n MAX_RETRIES: 3,\n RETRY_DELAY: 1000,\n RATE_LIMIT: {\n MAX_REQUESTS: 100,\n WINDOW_MS: 60000, // 1 minute\n },\n} as const;\n\nexport const ERROR_MESSAGES = {\n AUTH_REQUIRED:\n 'Jira authentication required. Set JIRA_BASE_URL, JIRA_EMAIL, and JIRA_API_TOKEN environment variables.',\n INVALID_CREDENTIALS: 'Invalid Jira credentials. Please check your email and API token.',\n PROJECT_NOT_FOUND: \"Project not found or you don't have permission to access it.\",\n ISSUE_NOT_FOUND: \"Issue not found or you don't have permission to access it.\",\n RATE_LIMIT_EXCEEDED: 'Jira API rate limit exceeded. Please wait and try again.',\n NETWORK_ERROR: 'Network error occurred while connecting to Jira.',\n VALIDATION_ERROR: 'Input validation failed.',\n} as const;\n\nexport const TOOL_NAMES = {\n GET_VISIBLE_PROJECTS: 'jira_get_visible_projects',\n GET_ISSUE: 'jira_get_issue',\n SEARCH_ISSUES: 'jira_search_issues',\n GET_MY_ISSUES: 'jira_get_my_issues',\n GET_ISSUE_TYPES: 'jira_get_issue_types',\n GET_USERS: 'jira_get_users',\n GET_PRIORITIES: 'jira_get_priorities',\n GET_STATUSES: 'jira_get_statuses',\n CREATE_ISSUE: 'jira_create_issue',\n UPDATE_ISSUE: 'jira_update_issue',\n ADD_COMMENT: 'jira_add_comment',\n GET_PROJECT_INFO: 'jira_get_project_info',\n CREATE_SUBTASK: 'jira_create_subtask',\n GET_CREATE_META: 'jira_get_create_meta',\n GET_CUSTOM_FIELDS: 'jira_get_custom_fields',\n CREATE_ISSUE_LINK: 'jira_create_issue_link',\n} as const;\n","type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';\n\nconst levels: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n silent: 99,\n};\n\nfunction getLevel(): LogLevel {\n const env = (\n process.env.LOG_LEVEL || (process.env.NODE_ENV === 'development' ? 'debug' : 'info')\n ).toLowerCase();\n if (env === 'debug' || env === 'info' || env === 'warn' || env === 'error' || env === 'silent')\n return env;\n return 'info';\n}\n\nexport function createLogger(scope: string) {\n const level = getLevel();\n const min = levels[level];\n\n const fmt = (msg: any) => (typeof msg === 'string' ? msg : JSON.stringify(msg));\n const prefix = (lvl: string) => `[${lvl.toUpperCase()}] ${scope}:`;\n\n return {\n debug: (...args: any[]) => {\n if (min <= levels.debug) console.error(prefix('debug'), ...args.map(fmt));\n },\n info: (...args: any[]) => {\n if (min <= levels.info) console.error(prefix('info'), ...args.map(fmt));\n },\n warn: (...args: any[]) => {\n if (min <= levels.warn) console.error(prefix('warn'), ...args.map(fmt));\n },\n error: (...args: any[]) => {\n if (min <= levels.error) console.error(prefix('error'), ...args.map(fmt));\n },\n };\n}\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { JiraAuthConfig, RetryConfig } from '../types/common.js';\nimport { JIRA_CONFIG, ERROR_MESSAGES } from '../config/constants.js';\nimport { createLogger } from './logger.js';\n// keep client simple to match test expectations\n\nlet jiraClient: AxiosInstance | null = null;\nconst log = createLogger('jira-auth');\n\nexport function validateAuth(): JiraAuthConfig {\n const baseUrl = process.env.JIRA_BASE_URL;\n const email = process.env.JIRA_EMAIL;\n const apiToken = process.env.JIRA_API_TOKEN;\n\n if (!baseUrl || !email || !apiToken) {\n throw new Error(ERROR_MESSAGES.AUTH_REQUIRED);\n }\n\n // Normalize base URL\n const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n\n return {\n baseUrl: normalizedBaseUrl,\n email,\n apiToken,\n };\n}\n\nexport function getAuthenticatedClient(): AxiosInstance {\n if (jiraClient) {\n return jiraClient;\n }\n\n const auth = validateAuth();\n\n jiraClient = axios.create({\n baseURL: `${auth.baseUrl}${JIRA_CONFIG.BASE_PATH}`,\n timeout: JIRA_CONFIG.DEFAULT_TIMEOUT,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n auth: {\n username: auth.email,\n password: auth.apiToken,\n },\n });\n\n // Add request interceptor for logging\n jiraClient.interceptors.request.use(\n (config) => {\n log.debug(`Request: ${config.method?.toUpperCase()} ${config.baseURL}${config.url}`);\n return config;\n },\n (error) => {\n log.error('Request error:', error);\n return Promise.reject(error);\n }\n );\n\n // Add response interceptor for error handling\n jiraClient.interceptors.response.use(\n (response) => {\n log.debug(`Response: ${response.status} ${response.config.url}`);\n return response;\n },\n (error) => {\n log.error(`Jira API error: ${error.response?.status} ${error.config?.url}`);\n\n if (error.response?.status === 401) {\n throw new Error(ERROR_MESSAGES.INVALID_CREDENTIALS);\n } else if (error.response?.status === 404) {\n throw new Error('Resource not found or insufficient permissions');\n } else if (error.response?.status === 429) {\n throw new Error(ERROR_MESSAGES.RATE_LIMIT_EXCEEDED);\n } else if (!error.response) {\n throw new Error(ERROR_MESSAGES.NETWORK_ERROR);\n }\n\n return Promise.reject(error);\n }\n );\n\n return jiraClient;\n}\n\nexport async function makeJiraRequest<T = any>(\n config: AxiosRequestConfig,\n retryConfig: RetryConfig = {\n maxRetries: JIRA_CONFIG.MAX_RETRIES,\n retryDelay: JIRA_CONFIG.RETRY_DELAY,\n }\n): Promise<T> {\n const client = getAuthenticatedClient();\n let lastError: any;\n\n for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {\n try {\n const response = await client.request<T>(config);\n return response.data;\n } catch (error: any) {\n lastError = error;\n\n // Don't retry on authentication or client errors\n if (\n error.response?.status === 401 ||\n error.response?.status === 403 ||\n error.response?.status === 404 ||\n (error.response?.status >= 400 &&\n error.response?.status < 500 &&\n error.response?.status !== 429)\n ) {\n break;\n }\n\n // Don't retry if custom condition fails\n if (retryConfig.retryCondition && !retryConfig.retryCondition(error)) {\n break;\n }\n\n // Don't retry on last attempt\n if (attempt === retryConfig.maxRetries) {\n break;\n }\n\n // Compute backoff respecting Retry-After if present\n const retryAfterHeader = error.response?.headers?.['retry-after'];\n let delayMs = 0;\n if (retryAfterHeader) {\n const seconds = Number(retryAfterHeader);\n delayMs = !Number.isNaN(seconds) ? seconds * 1000 : retryConfig.retryDelay;\n } else {\n const base = retryConfig.retryDelay * Math.pow(2, attempt);\n const jitter = Math.floor(Math.random() * (retryConfig.retryDelay / 2));\n delayMs = base + jitter;\n }\n log.warn(\n `Retrying request in ${delayMs}ms (attempt ${attempt + 1}/${retryConfig.maxRetries})`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw lastError;\n}\n\nexport async function testConnection(): Promise<boolean> {\n try {\n await makeJiraRequest({\n method: 'GET',\n url: '/myself',\n });\n return true;\n } catch (error) {\n log.error('Connection test failed:', error);\n return false;\n }\n}\n","import { z, ZodSchema } from 'zod';\nimport { ERROR_MESSAGES } from '../config/constants.js';\n\nexport function validateInput<T>(schema: ZodSchema<T>, input: unknown): T {\n try {\n return schema.parse(input);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errorMessages = error.errors.map((err) => `${err.path.join('.')}: ${err.message}`);\n throw new Error(`${ERROR_MESSAGES.VALIDATION_ERROR}\\n${errorMessages.join('\\n')}`);\n }\n throw error;\n }\n}\n\nexport function isValidIssueKey(key: string): boolean {\n // Jira issue key format: PROJECT-123\n return /^[A-Z][A-Z0-9]*-\\d+$/.test(key);\n}\n\nexport function isValidProjectKey(key: string): boolean {\n // Jira project key format: uppercase letters and numbers, max 10 chars\n return /^[A-Z][A-Z0-9]{0,9}$/.test(key);\n}\n\nexport function isValidJQL(jql: string): boolean {\n // Basic JQL validation - non-empty string\n return typeof jql === 'string' && jql.trim().length > 0;\n}\n\nexport function sanitizeJQL(jql: string): string {\n // Remove potentially dangerous characters and normalize whitespace\n return jql\n .replace(/[<>\"'`]/g, '') // Remove potentially dangerous chars\n .replace(/\\s+/g, ' ') // Normalize whitespace\n .trim();\n}\n\nexport function validatePagination(startAt: number, maxResults: number): void {\n if (startAt < 0) {\n throw new Error('startAt must be non-negative');\n }\n if (maxResults < 1 || maxResults > 100) {\n throw new Error('maxResults must be between 1 and 100');\n }\n}\n\n// Extract a Jira issue key from a free-form string or URL\nexport function extractIssueKey(input: string): string | null {\n if (typeof input !== 'string') return null;\n const match = input.match(/[A-Z][A-Z0-9]*-\\d+/);\n return match ? match[0] : null;\n}\n","import { z } from 'zod';\nimport { isValidIssueKey, isValidProjectKey } from '../utils/validators.js';\n\n// Get visible projects\nexport const GetVisibleProjectsInputSchema = z.object({\n expand: z.array(z.string()).optional().describe('Additional project details to include'),\n recent: z.number().optional().describe('Limit to recently accessed projects'),\n});\n\nexport type GetVisibleProjectsInput = z.infer<typeof GetVisibleProjectsInputSchema>;\n\n// Get issue\nexport const GetIssueInputSchema = z.object({\n issueKey: z\n .string()\n .min(1)\n .describe(\n 'Issue key or full Jira URL (e.g., PROJECT-123 or https://your.atlassian.net/browse/PROJECT-123)'\n ),\n expand: z.array(z.string()).optional().describe('Additional issue details to include'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n});\n\nexport type GetIssueInput = z.infer<typeof GetIssueInputSchema>;\n\n// Search issues\nexport const SearchIssuesInputSchema = z.object({\n jql: z.string().min(1).describe('JQL query string'),\n nextPageToken: z\n .string()\n .optional()\n .describe(\n 'Token for pagination. Omit for first page, use value from previous response for next page.'\n ),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe('Maximum number of results to return per page'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n expand: z.array(z.string()).optional().describe('Additional details to include'),\n});\n\nexport type SearchIssuesInput = z.infer<typeof SearchIssuesInputSchema>;\n\n// Create issue\nexport const CreateIssueInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key where the issue will be created')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n summary: z.string().min(1).describe('Issue summary/title'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('Issue description. Accepts plain text or ADF object.'),\n issueType: z.string().describe('Issue type (e.g., Bug, Story, Task)'),\n priority: z.string().optional().describe('Issue priority'),\n assignee: z.string().optional().describe('Assignee account ID'),\n labels: z.array(z.string()).optional().describe('Issue labels'),\n components: z.array(z.string()).optional().describe('Component names'),\n customFields: z\n .record(z.any())\n .optional()\n .describe(\n 'Additional Jira field mappings, e.g. { \"customfield_12345\": value }. Use for required custom fields.'\n ),\n returnIssue: z\n .boolean()\n .optional()\n .describe('When false, skip fetching full issue after creation'),\n format: z\n .enum(['markdown', 'adf', 'plain'])\n .optional()\n .default('markdown')\n .describe(\n 'Description format: \"markdown\" (converts Markdown to ADF), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting). Default: \"markdown\"'\n ),\n});\n\nexport type CreateIssueInput = z.infer<typeof CreateIssueInputSchema>;\n\n// Update issue\nexport const UpdateIssueInputSchema = z.object({\n issueKey: z\n .string()\n .describe('Issue key to update')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n summary: z.string().optional().describe('New summary'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('New description. Accepts plain text or ADF object.'),\n priority: z.string().optional().describe('New priority'),\n assignee: z.string().optional().describe('New assignee account ID'),\n labels: z.array(z.string()).optional().describe('New labels (replaces existing)'),\n components: z.array(z.string()).optional().describe('New components (replaces existing)'),\n returnIssue: z.boolean().optional().describe('When false, skip fetching full issue after update'),\n format: z\n .enum(['markdown', 'adf', 'plain'])\n .optional()\n .default('markdown')\n .describe(\n 'Description format: \"markdown\" (converts Markdown to ADF), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting). Default: \"markdown\"'\n ),\n});\n\nexport type UpdateIssueInput = z.infer<typeof UpdateIssueInputSchema>;\n\n// Get my issues\nexport const GetMyIssuesInputSchema = z.object({\n nextPageToken: z\n .string()\n .optional()\n .describe(\n 'Token for pagination. Omit for first page, use value from previous response for next page.'\n ),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe('Maximum number of results to return per page'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n expand: z.array(z.string()).optional().describe('Additional details to include'),\n});\n\nexport type GetMyIssuesInput = z.infer<typeof GetMyIssuesInputSchema>;\n\n// Get issue types\nexport const GetIssueTypesInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to get issue types for specific project')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n});\n\nexport type GetIssueTypesInput = z.infer<typeof GetIssueTypesInputSchema>;\n\n// Get users\nexport const GetUsersInputSchema = z.object({\n query: z.string().optional().describe('Search query for user name or email'),\n username: z.string().optional().describe('Specific username to search for'),\n accountId: z.string().optional().describe('Specific account ID to search for'),\n startAt: z.number().min(0).default(0).describe('Index of first result to return'),\n maxResults: z.number().min(1).max(50).default(50).describe('Maximum number of results to return'),\n});\n\nexport type GetUsersInput = z.infer<typeof GetUsersInputSchema>;\n\n// Get priorities\nexport const GetPrioritiesInputSchema = z.object({});\n\nexport type GetPrioritiesInput = z.infer<typeof GetPrioritiesInputSchema>;\n\n// Get statuses\nexport const GetStatusesInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to get statuses for specific project')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n issueTypeId: z\n .string()\n .optional()\n .describe('Issue type ID to get statuses for specific issue type'),\n});\n\nexport type GetStatusesInput = z.infer<typeof GetStatusesInputSchema>;\n\n// Add comment\nexport const AddCommentInputSchema = z.object({\n issueKey: z\n .string()\n .describe('Issue key to add comment to')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n body: z.string().min(1).describe('Comment body text'),\n visibility: z\n .object({\n type: z.enum(['group', 'role']).describe('Visibility type'),\n value: z.string().describe('Group name or role name'),\n })\n .optional()\n .describe('Comment visibility restrictions'),\n format: z\n .enum(['markdown', 'adf', 'plain'])\n .optional()\n .default('markdown')\n .describe(\n 'Comment format: \"markdown\" (converts Markdown to ADF), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting). Default: \"markdown\"'\n ),\n});\n\nexport type AddCommentInput = z.infer<typeof AddCommentInputSchema>;\n\n// Get project info\nexport const GetProjectInfoInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key to get detailed information for')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n expand: z.array(z.string()).optional().describe('Additional project details to include'),\n});\n\nexport type GetProjectInfoInput = z.infer<typeof GetProjectInfoInputSchema>;\n\n// Create subtask\nexport const CreateSubtaskInputSchema = z.object({\n parentIssueKey: z.string().describe('Parent issue key'),\n summary: z.string().min(1).describe('Subtask summary/title'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('Subtask description. Accepts plain text or ADF object.'),\n priority: z.string().optional().describe('Subtask priority'),\n assignee: z.string().optional().describe('Assignee account ID'),\n labels: z.array(z.string()).optional().describe('Subtask labels'),\n components: z.array(z.string()).optional().describe('Component names'),\n format: z\n .enum(['markdown', 'adf', 'plain'])\n .optional()\n .default('markdown')\n .describe(\n 'Description format: \"markdown\" (converts Markdown to ADF), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting). Default: \"markdown\"'\n ),\n});\n\nexport type CreateSubtaskInput = z.infer<typeof CreateSubtaskInputSchema>;\n\n// Get create meta\nexport const GetCreateMetaInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key to get create metadata for')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n issueTypeName: z\n .string()\n .optional()\n .describe('Specific issue type name to get metadata for (optional)'),\n});\n\nexport type GetCreateMetaInput = z.infer<typeof GetCreateMetaInputSchema>;\n\n// Get custom fields\nexport const GetCustomFieldsInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to filter custom fields (optional)')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n});\n\nexport type GetCustomFieldsInput = z.infer<typeof GetCustomFieldsInputSchema>;\n\n// Create issue link\nexport const CreateIssueLinkInputSchema = z.object({\n fromIssue: z\n .string()\n .describe('Source issue key')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n toIssue: z\n .string()\n .describe('Target issue key')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n linkType: z\n .string()\n .describe(\n 'Link type: \"blocks\", \"is blocked by\", \"relates\", \"duplicates\", \"clones\", or custom link type name'\n ),\n});\n\nexport type CreateIssueLinkInput = z.infer<typeof CreateIssueLinkInputSchema>;\n","import { AxiosRequestConfig } from 'axios';\nimport { makeJiraRequest } from './jira-auth.js';\nimport {\n JiraProject,\n JiraIssue,\n JiraSearchResult,\n JiraUser,\n JiraIssueType,\n JiraPriority,\n JiraStatus,\n JiraComment,\n JiraProjectDetails,\n JiraCreateIssueResponse,\n JiraCreateMetaResponse,\n JiraField,\n} from '../types/jira.js';\nimport { PaginatedResponse } from '../types/common.js';\nimport { sanitizeJQL } from './validators.js';\nimport mdToAdf from 'md-to-adf';\n\n// Convert a description into Atlassian Document Format (ADF) based on the specified format.\n// Supports three formats:\n// - 'markdown': Converts Markdown syntax to ADF using md-to-adf\n// - 'adf': Returns the description as-is (assumes it's already an ADF object)\n// - 'plain': Converts plain text to ADF with basic formatting heuristics\nfunction ensureAdfDescription(desc: any, format: 'markdown' | 'adf' | 'plain' = 'markdown'): any {\n if (!desc) return desc;\n if (typeof desc === 'object') return desc; // assume already ADF\n if (typeof desc !== 'string') return desc;\n\n // Handle markdown format\n if (format === 'markdown') {\n try {\n return mdToAdf(desc);\n } catch (error) {\n // If markdown conversion fails, fall back to plain text conversion\n console.warn('Markdown to ADF conversion failed, falling back to plain text:', error);\n format = 'plain';\n }\n }\n\n // Handle ADF format (already handled above with typeof === 'object')\n if (format === 'adf') {\n return desc;\n }\n\n // Handle plain text format with basic heuristics\n // (original ensureAdfDescription logic below)\n\n const urlRegex = /https?:\\/\\/[^\\s)]+/g;\n\n const makeTextNodes = (text: string): any[] => {\n const nodes: any[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = urlRegex.exec(text)) !== null) {\n const [url] = match;\n const start = match.index;\n if (start > lastIndex) {\n nodes.push({ type: 'text', text: text.slice(lastIndex, start) });\n }\n nodes.push({ type: 'text', text: url, marks: [{ type: 'link', attrs: { href: url } }] });\n lastIndex = start + url.length;\n }\n if (lastIndex < text.length) {\n nodes.push({ type: 'text', text: text.slice(lastIndex) });\n }\n return nodes.length ? nodes : [{ type: 'text', text }];\n };\n\n const lines = desc.split(/\\r?\\n/);\n const content: any[] = [];\n\n let i = 0;\n while (i < lines.length) {\n const raw = lines[i] ?? '';\n const line = raw.trimEnd();\n if (line.trim().length === 0) {\n // Blank line โ€“ add empty paragraph for spacing\n content.push({ type: 'paragraph', content: [] });\n i++;\n continue;\n }\n\n // Section label on its own line: \"Something:\" โ†’ bold label paragraph\n const soloLabelMatch = /^(?<title>[^:]{2,}):\\s*$/.exec(line);\n if (soloLabelMatch?.groups?.title) {\n const title = `${soloLabelMatch.groups.title}:`;\n content.push({\n type: 'paragraph',\n content: [{ type: 'text', text: title, marks: [{ type: 'strong' }] }],\n });\n i++;\n\n // Special-case: Stack trace section โ†’ capture following non-empty lines as codeBlock\n if (/^stack\\s*trace$/i.test(soloLabelMatch.groups.title.trim())) {\n const codeLines: string[] = [];\n while (i < lines.length && (lines[i] ?? '').trim().length > 0) {\n codeLines.push(lines[i] as string);\n i++;\n }\n if (codeLines.length) {\n content.push({\n type: 'codeBlock',\n attrs: { language: '' },\n content: [{ type: 'text', text: codeLines.join('\\n') }],\n });\n }\n }\n continue;\n }\n\n // Ordered list group\n if (/^\\d+\\.\\s+/.test(line)) {\n const items: any[] = [];\n while (i < lines.length) {\n const cur = lines[i] ?? '';\n if (!/^\\d+\\.\\s+/.test(cur)) break;\n const itemText = cur.replace(/^\\d+\\.\\s+/, '');\n items.push({\n type: 'listItem',\n content: [{ type: 'paragraph', content: makeTextNodes(itemText) }],\n });\n i++;\n }\n content.push({ type: 'orderedList', content: items });\n continue;\n }\n\n // Bullet list group\n if (/^(?:[-โ€ข])\\s+/.test(line)) {\n const items: any[] = [];\n while (i < lines.length) {\n const cur = lines[i] ?? '';\n if (!/^(?:[-โ€ข])\\s+/.test(cur)) break;\n const itemText = cur.replace(/^(?:[-โ€ข])\\s+/, '');\n items.push({\n type: 'listItem',\n content: [{ type: 'paragraph', content: makeTextNodes(itemText) }],\n });\n i++;\n }\n content.push({ type: 'bulletList', content: items });\n continue;\n }\n\n // Label: value โ†’ bold label then text\n const labelMatch =\n /^(?<label>[A-ZรฤŒฤŽร‰ฤšรฤฝฤนล‡ร“ล˜ล ลครšลฎรลฝa-zรกฤฤรฉฤ›รญฤพฤบลˆรณล™ลกลฅรบลฏรฝลพ\\s]+):\\s+(?<value>.+)$/.exec(line);\n if (labelMatch?.groups?.label && labelMatch.groups.value) {\n content.push({\n type: 'paragraph',\n content: [\n { type: 'text', text: `${labelMatch.groups.label}:`, marks: [{ type: 'strong' }] },\n { type: 'text', text: ' ' },\n ...makeTextNodes(labelMatch.groups.value),\n ],\n });\n i++;\n continue;\n }\n\n // Fallback paragraph; make lines that look like paths/methods monospace\n if (/^\\//.test(line) || /[A-Za-z]:\\\\/.test(line)) {\n content.push({\n type: 'paragraph',\n content: [{ type: 'text', text: line, marks: [{ type: 'code' }] }],\n });\n } else {\n content.push({ type: 'paragraph', content: makeTextNodes(line) });\n }\n i++;\n }\n\n return { type: 'doc', version: 1, content };\n}\n\nexport async function getVisibleProjects(\n options: {\n expand?: string[];\n recent?: number;\n } = {}\n): Promise<JiraProject[]> {\n const allProjects: JiraProject[] = [];\n let startAt = 0;\n let isLast = false;\n\n // Fetch all pages of projects\n while (!isLast) {\n const params: Record<string, any> = {\n startAt,\n maxResults: 50, // Jira default, fetch 50 projects per page\n };\n\n if (options.expand) {\n params.expand = options.expand.join(',');\n }\n\n if (options.recent) {\n params.recent = options.recent;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/project/search',\n params,\n };\n\n const response = await makeJiraRequest<PaginatedResponse<JiraProject>>(config);\n\n allProjects.push(...response.values);\n isLast = response.isLast;\n startAt += response.maxResults;\n }\n\n return allProjects;\n}\n\nexport async function getIssue(\n issueKey: string,\n options: {\n expand?: string[];\n fields?: string[];\n } = {}\n): Promise<JiraIssue> {\n const params: Record<string, any> = {};\n\n if (options.expand) {\n params.expand = options.expand.join(',');\n }\n\n if (options.fields) {\n params.fields = options.fields.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: `/issue/${issueKey}`,\n params,\n };\n\n return await makeJiraRequest<JiraIssue>(config);\n}\n\nexport async function searchIssues(options: {\n jql: string;\n nextPageToken?: string;\n maxResults?: number;\n fields?: string[];\n expand?: string[];\n}): Promise<JiraSearchResult> {\n const { jql, nextPageToken, maxResults = 50 } = options;\n\n // Sanitize JQL\n const sanitizedJql = sanitizeJQL(jql);\n\n const data: Record<string, any> = {\n jql: sanitizedJql,\n maxResults,\n };\n\n if (nextPageToken) {\n data.nextPageToken = nextPageToken;\n }\n\n if (options.fields) {\n data.fields = options.fields;\n }\n\n if (options.expand && options.expand.length > 0) {\n // Jira API expects expand as comma-separated string for POST /search/jql\n data.expand = options.expand.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/search/jql',\n data,\n };\n\n return await makeJiraRequest<JiraSearchResult>(config);\n}\n\nexport async function createIssue(\n issueData: {\n projectKey: string;\n summary: string;\n description?: string;\n issueType: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n customFields?: Record<string, any>;\n format?: 'markdown' | 'adf' | 'plain';\n },\n options: { returnIssue?: boolean } = { returnIssue: true }\n): Promise<JiraIssue | string> {\n const fields: Record<string, any> = {\n project: { key: issueData.projectKey },\n summary: issueData.summary,\n issuetype: { name: issueData.issueType },\n };\n\n if (issueData.description !== undefined) {\n fields.description = ensureAdfDescription(\n issueData.description,\n issueData.format || 'markdown'\n );\n }\n\n if (issueData.priority) {\n fields.priority = { name: issueData.priority };\n }\n\n if (issueData.assignee) {\n fields.assignee = { accountId: issueData.assignee };\n }\n\n if (issueData.labels && issueData.labels.length > 0) {\n fields.labels = issueData.labels;\n }\n\n if (issueData.components && issueData.components.length > 0) {\n fields.components = issueData.components.map((name) => ({ name }));\n }\n\n // Merge any custom fields provided by the caller\n if (issueData.customFields && typeof issueData.customFields === 'object') {\n for (const [key, value] of Object.entries(issueData.customFields)) {\n // Do not overwrite standard fields if accidentally duplicated\n if (!(key in fields)) {\n fields[key] = value;\n }\n }\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issue',\n data: { fields },\n };\n\n const response = await makeJiraRequest<{ key: string; id: string; self: string }>(config);\n\n if (options.returnIssue === false) {\n return response.key;\n }\n\n // Return the created issue\n return await getIssue(response.key);\n}\n\nexport async function updateIssue(\n issueKey: string,\n updates: {\n summary?: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n format?: 'markdown' | 'adf' | 'plain';\n }\n): Promise<void> {\n const fields: Record<string, any> = {};\n\n if (updates.summary !== undefined) {\n fields.summary = updates.summary;\n }\n\n if (updates.description !== undefined) {\n fields.description = ensureAdfDescription(updates.description, updates.format || 'markdown');\n }\n\n if (updates.priority !== undefined) {\n fields.priority = { name: updates.priority };\n }\n\n if (updates.assignee !== undefined) {\n fields.assignee = updates.assignee ? { accountId: updates.assignee } : null;\n }\n\n if (updates.labels !== undefined) {\n fields.labels = updates.labels;\n }\n\n if (updates.components !== undefined) {\n fields.components = updates.components.map((name) => ({ name }));\n }\n\n const config: AxiosRequestConfig = {\n method: 'PUT',\n url: `/issue/${issueKey}`,\n data: { fields },\n };\n\n await makeJiraRequest(config);\n}\n\nexport async function getCurrentUser(): Promise<JiraUser> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/myself',\n };\n\n return await makeJiraRequest<JiraUser>(config);\n}\n\nexport async function getMyIssues(\n options: {\n nextPageToken?: string;\n maxResults?: number;\n fields?: string[];\n expand?: string[];\n } = {}\n): Promise<JiraSearchResult> {\n const jql = `assignee = currentUser() ORDER BY updated DESC`;\n\n const searchParams: any = {\n jql,\n maxResults: options.maxResults || 50,\n };\n\n if (options.nextPageToken !== undefined) searchParams.nextPageToken = options.nextPageToken;\n if (options.fields !== undefined) searchParams.fields = options.fields;\n if (options.expand !== undefined) searchParams.expand = options.expand;\n\n return await searchIssues(searchParams);\n}\n\nexport async function getIssueTypes(projectKey?: string): Promise<JiraIssueType[]> {\n let url = '/issuetype';\n\n if (projectKey) {\n url = `/project/${projectKey}/issuetype`;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url,\n };\n\n return await makeJiraRequest<JiraIssueType[]>(config);\n}\n\nexport async function getUsers(\n options: {\n query?: string;\n username?: string;\n accountId?: string;\n startAt?: number;\n maxResults?: number;\n } = {}\n): Promise<JiraUser[]> {\n const params: Record<string, any> = {};\n\n if (options.query) {\n params.query = options.query;\n }\n\n if (options.username) {\n params.username = options.username;\n }\n\n if (options.accountId) {\n params.accountId = options.accountId;\n }\n\n if (options.startAt !== undefined) {\n params.startAt = options.startAt;\n }\n\n if (options.maxResults !== undefined) {\n params.maxResults = options.maxResults;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/user/search',\n params,\n };\n\n return await makeJiraRequest<JiraUser[]>(config);\n}\n\nexport async function getPriorities(): Promise<JiraPriority[]> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/priority',\n };\n\n return await makeJiraRequest<JiraPriority[]>(config);\n}\n\nexport async function getStatuses(\n options: {\n projectKey?: string;\n issueTypeId?: string;\n } = {}\n): Promise<JiraStatus[]> {\n let url = '/status';\n\n if (options.projectKey && options.issueTypeId) {\n url = `/project/${options.projectKey}/statuses`;\n } else if (options.projectKey) {\n url = `/project/${options.projectKey}/statuses`;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url,\n };\n\n if (options.projectKey) {\n const response =\n await makeJiraRequest<Array<{ id?: string; name: string; statuses: JiraStatus[] }>>(config);\n if (options.issueTypeId) {\n const match = response.find(\n (issueType) =>\n issueType.id === options.issueTypeId || issueType.name === options.issueTypeId\n );\n if (match) return match.statuses;\n }\n // Flatten the statuses from all issue types\n return response.flatMap((issueType) => issueType.statuses);\n }\n return await makeJiraRequest<JiraStatus[]>(config);\n}\n\nexport async function addComment(\n issueKey: string,\n body: string,\n visibility?: { type: string; value: string },\n format?: 'markdown' | 'adf' | 'plain'\n): Promise<JiraComment> {\n // Convert body to ADF format (Jira expects ADF for comments)\n const adfBody = ensureAdfDescription(body, format || 'markdown');\n\n const data: any = {\n body: adfBody,\n };\n\n if (visibility) {\n data.visibility = visibility;\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: `/issue/${issueKey}/comment`,\n data,\n };\n\n return await makeJiraRequest<JiraComment>(config);\n}\n\nexport async function getProjectDetails(\n projectKey: string,\n expand?: string[]\n): Promise<JiraProjectDetails> {\n const params: Record<string, any> = {};\n\n if (expand) {\n params.expand = expand.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: `/project/${projectKey}`,\n params,\n };\n\n return await makeJiraRequest<JiraProjectDetails>(config);\n}\n\nexport async function createSubtask(\n parentIssueKey: string,\n subtaskData: {\n summary: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n format?: 'markdown' | 'adf' | 'plain';\n }\n): Promise<JiraIssue> {\n // First get parent issue to determine project and subtask issue type\n const parentIssue = await getIssue(parentIssueKey);\n const projectKey = parentIssue.fields.project.key;\n\n // Get available issue types for the project\n const issueTypes = await getIssueTypes(projectKey);\n const subtaskType = issueTypes.find((type) => type.subtask);\n\n if (!subtaskType) {\n throw new Error(`No subtask issue type found for project ${projectKey}`);\n }\n\n const fields: Record<string, any> = {\n project: { key: projectKey },\n parent: { key: parentIssueKey },\n summary: subtaskData.summary,\n issuetype: { id: subtaskType.id },\n };\n\n if (subtaskData.description !== undefined) {\n fields.description = ensureAdfDescription(\n subtaskData.description,\n subtaskData.format || 'markdown'\n );\n }\n\n if (subtaskData.priority) {\n fields.priority = { name: subtaskData.priority };\n }\n\n if (subtaskData.assignee) {\n fields.assignee = { accountId: subtaskData.assignee };\n }\n\n if (subtaskData.labels && subtaskData.labels.length > 0) {\n fields.labels = subtaskData.labels;\n }\n\n if (subtaskData.components && subtaskData.components.length > 0) {\n fields.components = subtaskData.components.map((name) => ({ name }));\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issue',\n data: { fields },\n };\n\n const response = await makeJiraRequest<JiraCreateIssueResponse>(config);\n\n // Return the created subtask\n return await getIssue(response.key);\n}\n\nexport async function getCreateMeta(\n options: {\n projectKeys?: string[];\n issueTypeNames?: string[];\n expand?: string;\n } = {}\n): Promise<JiraCreateMetaResponse> {\n // Use the classic createmeta endpoint with expand parameter for reliability\n // This endpoint is widely supported and returns complete field metadata including allowedValues\n const params: Record<string, any> = {};\n\n if (options.projectKeys && options.projectKeys.length > 0) {\n params.projectKeys = options.projectKeys.join(',');\n }\n\n if (options.issueTypeNames && options.issueTypeNames.length > 0) {\n params.issuetypeNames = options.issueTypeNames.join(',');\n }\n\n // Always use expand parameter to get full field metadata including allowedValues\n if (options.expand) {\n params.expand = options.expand;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/issue/createmeta',\n params,\n };\n\n return await makeJiraRequest<JiraCreateMetaResponse>(config);\n}\n\nexport async function getFields(): Promise<JiraField[]> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/field',\n };\n\n return await makeJiraRequest<JiraField[]>(config);\n}\n\nexport async function createIssueLink(\n fromIssue: string,\n toIssue: string,\n linkType: string\n): Promise<void> {\n // Map common link type names to Jira link type format\n // Jira link types are case-sensitive\n const linkTypeMap: Record<string, string> = {\n blocks: 'Blocks',\n 'is blocked by': 'Blocks',\n relates: 'Relates',\n 'relates to': 'Relates',\n duplicates: 'Duplicate',\n duplicate: 'Duplicate',\n 'is duplicated by': 'Duplicate',\n clones: 'Cloners',\n 'is cloned by': 'Cloners',\n };\n\n const normalizedLinkType = linkType.toLowerCase();\n const jiraLinkType = linkTypeMap[normalizedLinkType] || linkType;\n\n // Determine issue direction based on link type\n // For \"blocks\": fromIssue blocks toIssue (fromIssue = outward, toIssue = inward)\n // For \"is blocked by\": fromIssue is blocked by toIssue (fromIssue = inward, toIssue = outward)\n const isInward =\n normalizedLinkType === 'is blocked by' ||\n normalizedLinkType === 'is duplicated by' ||\n normalizedLinkType === 'is cloned by';\n\n const data: any = {\n type: {\n name: jiraLinkType,\n },\n };\n\n if (isInward) {\n data.inwardIssue = { key: fromIssue };\n data.outwardIssue = { key: toIssue };\n } else {\n data.outwardIssue = { key: fromIssue };\n data.inwardIssue = { key: toIssue };\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issueLink',\n data,\n };\n\n await makeJiraRequest(config);\n}\n","export function isRedactionEnabled(): boolean {\n const val = process.env.MCP_REDACT_SENSITIVE || process.env.REDACT_SENSITIVE;\n return val === '1' || val?.toLowerCase() === 'true';\n}\n\nexport function maybeRedactAccountId(accountId?: string | null): string {\n if (!accountId) return 'N/A';\n if (!isRedactionEnabled()) return accountId;\n // Show first 4 chars and mask the rest to keep stable identifiers without full disclosure\n const head = accountId.slice(0, 4);\n return `${head}โ€ฆ`; // masked\n}\n\nexport function maybeRedactEmail(email?: string | null): string {\n if (!email) return 'N/A';\n if (!isRedactionEnabled()) return email;\n return 'hidden';\n}\n","import { McpToolResponse } from '../types/common.js';\nimport { maybeRedactAccountId, maybeRedactEmail } from './redaction.js';\nimport {\n JiraProject,\n JiraIssue,\n JiraSearchResult,\n JiraUser,\n JiraIssueType,\n JiraPriority,\n JiraStatus,\n JiraComment,\n JiraProjectDetails,\n JiraCreateMetaResponse,\n JiraField,\n} from '../types/jira.js';\n\nexport function formatProjectsResponse(projects: JiraProject[]): McpToolResponse {\n const projectsList = projects\n .map(\n (project) =>\n `โ€ข **${project.key}** - ${project.name}\\n ${project.description || 'No description'}\\n Type: ${project.projectTypeKey} | Private: ${project.isPrivate ? 'Yes' : 'No'}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${projects.length} visible project(s):\\n\\n${projectsList}`,\n },\n ],\n };\n}\n\nfunction adfToPlainText(adf: any): string {\n // Very lightweight ADF to text conversion (best-effort)\n try {\n const walk = (node: any): string => {\n if (!node) return '';\n switch (node.type) {\n case 'text':\n return node.text || '';\n case 'paragraph':\n case 'heading':\n case 'blockquote':\n return (node.content || []).map(walk).join('');\n case 'codeBlock':\n return '\\n' + (node.content || []).map(walk).join('') + '\\n';\n case 'bulletList':\n case 'orderedList':\n return (node.content || []).map(walk).join('\\n');\n case 'listItem':\n return 'โ€ข ' + (node.content || []).map(walk).join('');\n case 'hardBreak':\n return '\\n';\n default:\n if (Array.isArray(node.content)) return node.content.map(walk).join('');\n return '';\n }\n };\n if (adf && Array.isArray(adf.content)) {\n return adf.content.map(walk).join('\\n').trim();\n }\n } catch {\n // ignore and fallback\n }\n return '';\n}\n\nexport function formatIssueResponse(issue: JiraIssue): McpToolResponse {\n const { key, fields } = issue;\n\n const summary = fields?.summary || 'No summary';\n\n const assigneeText = fields?.assignee\n ? `${fields.assignee.displayName} (${maybeRedactAccountId(fields.assignee.accountId)})`\n : 'Unassigned';\n\n const reporterText = fields?.reporter\n ? `${fields.reporter.displayName} (${maybeRedactAccountId(fields.reporter.accountId)})`\n : 'Unknown';\n\n const labelsArray = Array.isArray(fields?.labels) ? fields.labels : [];\n const labelsText = labelsArray.length > 0 ? labelsArray.join(', ') : 'None';\n\n const componentsArray = Array.isArray(fields?.components) ? fields.components : [];\n const componentsText =\n componentsArray.length > 0 ? componentsArray.map((c) => c.name).join(', ') : 'None';\n\n let description = fields?.description as any;\n if (description && typeof description === 'object') {\n const parsed = adfToPlainText(description);\n description = parsed || '[rich text description omitted]';\n }\n if (!description || typeof description !== 'string') {\n description = 'No description provided';\n }\n\n const createdText = fields?.created ? new Date(fields.created).toISOString() : 'N/A';\n const updatedText = fields?.updated ? new Date(fields.updated).toISOString() : 'N/A';\n\n return {\n content: [\n {\n type: 'text',\n text: `**${key}: ${summary}**\\n\\n**Status:** ${fields?.status?.name || 'Unknown'}\\n**Priority:** ${fields?.priority?.name || 'None'}\\n**Assignee:** ${assigneeText}\\n**Reporter:** ${reporterText}\\n**Project:** ${fields?.project?.name || 'Unknown'} (${fields?.project?.key || 'N/A'})\\n**Issue Type:** ${fields?.issuetype?.name || 'Unknown'}\\n**Labels:** ${labelsText}\\n**Components:** ${componentsText}\\n**Created:** ${createdText}\\n**Updated:** ${updatedText}\\n\\n**Description:**\\n${description}`,\n },\n ],\n };\n}\n\nexport function formatSearchResultsResponse(result: JiraSearchResult): McpToolResponse {\n if (result.issues.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No issues found matching your search criteria.',\n },\n ],\n };\n }\n\n const issuesList = result.issues\n .map((issue) => {\n const assignee = issue.fields?.assignee?.displayName || 'Unassigned';\n const summary = issue.fields?.summary || 'No summary';\n const status = issue.fields?.status?.name || 'Unknown';\n const priority = issue.fields?.priority?.name || 'None';\n return `โ€ข **${issue.key}** - ${summary}\\n Status: ${status} | Assignee: ${assignee} | Priority: ${priority}`;\n })\n .join('\\n\\n');\n\n const total = result.total ?? result.issues.length;\n const rangeStart = result.startAt + 1;\n const rangeEnd = Math.min(result.startAt + result.maxResults, total);\n const showRangeInline = total > result.maxResults || result.startAt > 0;\n\n // Build pagination info\n let paginationInfo = '';\n if (showRangeInline) {\n paginationInfo = `\\n\\n*Showing ${rangeStart}-${rangeEnd} of ${total} results*`;\n }\n\n // Add nextPageToken info if present and not last page\n if (result.nextPageToken && !result.isLast) {\n paginationInfo += `\\n*Next page token: \\`${result.nextPageToken}\\`*`;\n } else if (result.isLast) {\n paginationInfo += '\\n*This is the last page of results*';\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${total} issue(s)${showRangeInline ? ` (showing ${rangeStart}-${rangeEnd})` : ''}:\\n\\n${issuesList}${paginationInfo}`,\n },\n ],\n };\n}\n\nexport function formatErrorResponse(error: any): McpToolResponse {\n let errorMessage = 'An unexpected error occurred.';\n let hasCustomFieldError = false;\n\n if (typeof error === 'string') {\n errorMessage = error;\n hasCustomFieldError = error.includes('customfield_');\n } else if (error instanceof Error) {\n errorMessage = error.message;\n hasCustomFieldError = error.message.includes('customfield_');\n } else if (error?.response?.data) {\n const jiraError = error.response.data;\n if (jiraError.errorMessages && jiraError.errorMessages.length > 0) {\n errorMessage = jiraError.errorMessages.join(', ');\n } else if (jiraError.errors) {\n const errors = Object.entries(jiraError.errors);\n errorMessage = errors.map(([field, message]) => `${field}: ${message}`).join(', ');\n\n // Check if any error is related to custom fields\n hasCustomFieldError = errors.some(([field]) => field.startsWith('customfield_'));\n }\n }\n\n // Add helpful hint for custom field errors\n let hint = '';\n if (hasCustomFieldError) {\n hint = `\\n\\n๐Ÿ’ก **Hint:** This error involves custom fields. Use 'jira_get_create_meta' tool to discover required fields and their allowed values before creating an issue.`;\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `โŒ Error: ${errorMessage}${hint}`,\n },\n ],\n };\n}\n\nexport function formatSuccessResponse(message: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: `โœ… ${message}`,\n },\n ],\n };\n}\n\nexport function formatUsersResponse(users: JiraUser[]): McpToolResponse {\n if (users.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No users found matching your search criteria.',\n },\n ],\n };\n }\n\n const usersList = users\n .map(\n (user) =>\n `โ€ข **${user.displayName}** (${maybeRedactAccountId(user.accountId)})\\n Email: ${maybeRedactEmail(user.emailAddress)} | Active: ${user.active ? 'Yes' : 'No'} | Type: ${user.accountType}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${users.length} user(s):\\n\\n${usersList}`,\n },\n ],\n };\n}\n\nexport function formatIssueTypesResponse(issueTypes: JiraIssueType[]): McpToolResponse {\n if (issueTypes.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No issue types found.',\n },\n ],\n };\n }\n\n const typesList = issueTypes\n .map(\n (type) =>\n `โ€ข **${type.name}** (ID: ${type.id})\\n ${type.description}\\n Subtask: ${type.subtask ? 'Yes' : 'No'}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${issueTypes.length} issue type(s):\\n\\n${typesList}`,\n },\n ],\n };\n}\n\nexport function formatPrioritiesResponse(priorities: JiraPriority[]): McpToolResponse {\n if (priorities.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No priorities found.',\n },\n ],\n };\n }\n\n const prioritiesList = priorities\n .map((priority) => `โ€ข **${priority.name}** (ID: ${priority.id})\\n ${priority.description}`)\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${priorities.length} priority level(s):\\n\\n${prioritiesList}`,\n },\n ],\n };\n}\n\nexport function formatStatusesResponse(statuses: JiraStatus[]): McpToolResponse {\n if (statuses.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No statuses found.',\n },\n ],\n };\n }\n\n const statusesList = statuses\n .map(\n (status) =>\n `โ€ข **${status.name}** (ID: ${status.id})\\n ${status.description}\\n Category: ${status.statusCategory.name} (${status.statusCategory.key})`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${statuses.length} status(es):\\n\\n${statusesList}`,\n },\n ],\n };\n}\n\nexport function formatCommentResponse(comment: JiraComment): McpToolResponse {\n const visibilityText = comment.visibility\n ? `\\n**Visibility:** ${comment.visibility.type} - ${comment.visibility.value}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `**Comment added successfully**\n\n**Author:** ${comment.author.displayName}\n**Created:** ${new Date(comment.created).toISOString()}${visibilityText}\n\n**Content:**\n${comment.body}`,\n },\n ],\n };\n}\n\nexport function formatProjectDetailsResponse(project: JiraProjectDetails): McpToolResponse {\n const leadText = project.lead\n ? `${project.lead.displayName} (${project.lead.accountId})`\n : 'No lead assigned';\n\n const componentsText =\n project.components.length > 0 ? project.components.map((c) => c.name).join(', ') : 'None';\n\n const versionsText =\n project.versions.length > 0 ? project.versions.map((v) => v.name).join(', ') : 'None';\n\n const issueTypesText =\n project.issueTypes.length > 0\n ? project.issueTypes.map((t) => `${t.name}${t.subtask ? ' (Subtask)' : ''}`).join(', ')\n : 'None';\n\n const rolesText =\n Object.keys(project.roles).length > 0 ? Object.keys(project.roles).join(', ') : 'None';\n\n const insightText = project.insight\n ? `\\n\\n**Project Insights:**\nTotal Issues: ${project.insight.totalIssueCount}\nLast Updated: ${new Date(project.insight.lastIssueUpdateTime).toISOString()}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `**${project.key}: ${project.name}**\n\n**Description:** ${project.description || 'No description'}\n**Type:** ${project.projectTypeKey}\n**Private:** ${project.isPrivate ? 'Yes' : 'No'}\n**Lead:** ${leadText}\n\n**Components:** ${componentsText}\n**Versions:** ${versionsText}\n**Issue Types:** ${issueTypesText}\n**Roles:** ${rolesText}${insightText}`,\n },\n ],\n };\n}\n\nexport function formatCreateMetaResponse(meta: JiraCreateMetaResponse): McpToolResponse {\n if (!meta.projects || meta.projects.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No create metadata found for the specified project.',\n },\n ],\n };\n }\n\n const project = meta.projects[0];\n if (!project) {\n return {\n content: [\n {\n type: 'text',\n text: 'No create metadata found for the specified project.',\n },\n ],\n };\n }\n\n const issueTypesList = project.issuetypes\n .map((issueType) => {\n const requiredFields: string[] = [];\n const optionalFields: string[] = [];\n\n Object.entries(issueType.fields).forEach(([fieldKey, field]) => {\n const allowedValuesText = field.allowedValues\n ? `\\n Allowed values: ${field.allowedValues.map((v) => v.name || v.value || v.id).join(', ')}`\n : '';\n const defaultValueText = field.hasDefaultValue\n ? `\\n Default: ${JSON.stringify(field.defaultValue)}`\n : '';\n\n const fieldInfo = ` โ€ข **${field.name}** (${fieldKey})\\n Type: ${field.schema.type}${allowedValuesText}${defaultValueText}`;\n\n if (field.required) {\n requiredFields.push(fieldInfo);\n } else {\n optionalFields.push(fieldInfo);\n }\n });\n\n const requiredSection =\n requiredFields.length > 0\n ? `**Required Fields:**\\n${requiredFields.join('\\n\\n')}`\n : 'No required fields';\n const optionalSection =\n optionalFields.length > 0 ? `\\n\\n**Optional Fields:**\\n${optionalFields.join('\\n\\n')}` : '';\n\n return `### ${issueType.name} (${issueType.subtask ? 'Subtask' : 'Issue'})\\n${issueType.description}\\n\\n${requiredSection}${optionalSection}`;\n })\n .join('\\n\\n---\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `**Create Metadata for Project: ${project.name} (${project.key})**\\n\\n${issueTypesList}`,\n },\n ],\n };\n}\n\nexport function formatCustomFieldsResponse(\n fields: JiraField[],\n projectKey?: string\n): McpToolResponse {\n const customFields = fields.filter((field) => field.custom);\n\n if (customFields.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: projectKey\n ? `No custom fields found for project ${projectKey}.`\n : 'No custom fields found.',\n },\n ],\n };\n }\n\n const fieldsList = customFields\n .map((field) => {\n const schemaInfo = field.schema.custom\n ? `Custom Type: ${field.schema.custom}`\n : `Type: ${field.schema.type}`;\n return `โ€ข **${field.name}** (${field.key})\\n ${schemaInfo}\\n ID: ${field.id}`;\n })\n .join('\\n\\n');\n\n const header = projectKey\n ? `Found ${customFields.length} custom field(s) for project ${projectKey}:`\n : `Found ${customFields.length} custom field(s):`;\n\n return {\n content: [\n {\n type: 'text',\n text: `${header}\\n\\n${fieldsList}`,\n },\n ],\n };\n}\n","import { McpToolResponse } from '../types/common.js';\nimport { formatErrorResponse } from './formatters.js';\nimport { ERROR_MESSAGES } from '../config/constants.js';\nimport { createLogger } from './logger.js';\n\nconst log = createLogger('error-handler');\n\nexport class JiraApiError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public jiraErrors?: string[],\n public originalError?: any\n ) {\n super(message);\n this.name = 'JiraApiError';\n }\n}\n\nexport function handleError(error: any): McpToolResponse {\n log.error('Tool error:', error);\n\n // Direct string errors\n if (typeof error === 'string') {\n return formatErrorResponse(error);\n }\n\n // Handle known error types\n if (error instanceof JiraApiError) {\n return formatErrorResponse(error.message);\n }\n\n if (error?.response?.status === 401) {\n return formatErrorResponse(ERROR_MESSAGES.INVALID_CREDENTIALS);\n }\n\n if (error?.response?.status === 404) {\n return formatErrorResponse('Resource not found or insufficient permissions');\n }\n\n if (error?.response?.status === 429) {\n return formatErrorResponse(ERROR_MESSAGES.RATE_LIMIT_EXCEEDED);\n }\n\n if (!error?.response && error?.code === 'ECONNREFUSED') {\n return formatErrorResponse(ERROR_MESSAGES.NETWORK_ERROR);\n }\n\n // Handle validation errors\n if (error?.message?.includes('validation')) {\n return formatErrorResponse(error.message);\n }\n\n // Handle Jira API errors\n if (error?.response?.data) {\n const jiraError = error.response.data;\n\n if (jiraError.errorMessages && jiraError.errorMessages.length > 0) {\n return formatErrorResponse(jiraError.errorMessages.join(', '));\n }\n\n if (jiraError.errors) {\n const errorDetails = Object.entries(jiraError.errors)\n .map(([field, message]) => `${field}: ${message}`)\n .join(', ');\n return formatErrorResponse(errorDetails);\n }\n }\n\n // Default error handling\n const message = error?.message || 'An unexpected error occurred';\n return formatErrorResponse(message);\n}\n\nexport function createJiraApiError(error: any): JiraApiError {\n if (error.response) {\n const status = error.response.status;\n const data = error.response.data;\n\n let message = `Jira API error (${status})`;\n let jiraErrors: string[] = [];\n\n if (data?.errorMessages) {\n jiraErrors = data.errorMessages;\n message = data.errorMessages.join(', ');\n } else if (data?.errors) {\n jiraErrors = Object.values(data.errors);\n message = Object.entries(data.errors)\n .map(([field, msg]) => `${field}: ${msg}`)\n .join(', ');\n }\n\n return new JiraApiError(message, status, jiraErrors, error);\n }\n\n if (error.code === 'ECONNREFUSED') {\n return new JiraApiError(ERROR_MESSAGES.NETWORK_ERROR, undefined, [], error);\n }\n\n return new JiraApiError(error.message || 'Unknown Jira API error', undefined, [], error);\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetVisibleProjectsInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getVisibleProjects } from '../utils/api-helpers.js';\nimport { formatProjectsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-visible-projects');\n\nexport const getVisibleProjectsTool: Tool = {\n name: TOOL_NAMES.GET_VISIBLE_PROJECTS,\n description:\n 'Retrieves all projects accessible to the authenticated user. Returns project keys, names, descriptions, and basic metadata.',\n inputSchema: {\n type: 'object',\n properties: {\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional project details to include (e.g., [\"description\", \"lead\", \"issueTypes\"])',\n default: [],\n },\n recent: {\n type: 'number',\n description: 'Limit results to recently accessed projects (max number)',\n minimum: 1,\n maximum: 100,\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetVisibleProjects(input: any): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetVisibleProjectsInputSchema, input);\n\n log.info('Getting visible projects...');\n\n const getParams: any = {};\n\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n if (validated.recent !== undefined) getParams.recent = validated.recent;\n\n const projects = await getVisibleProjects(getParams);\n\n log.info(`Found ${projects.length} project(s)`);\n\n return formatProjectsResponse(projects);\n } catch (error) {\n log.error('Error in handleGetVisibleProjects:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetIssueInputSchema } from '../types/tools.js';\nimport { validateInput, extractIssueKey } from '../utils/validators.js';\nimport { getIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-issue');\n\nexport const getIssueTool: Tool = {\n name: TOOL_NAMES.GET_ISSUE,\n description:\n 'Retrieve details for a specific Jira issue by key or URL. Use this when the user mentions an issue like \"PAYWALL-943\" or pastes a Jira link (e.g., https://your.atlassian.net/browse/PAYWALL-943). Returns status, assignee, priority, project, type, labels, components, timestamps, and description.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description:\n 'Issue key or full Jira URL (e.g., PROJECT-123 or https://your.atlassian.net/browse/PROJECT-123)',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional issue details to include (e.g., [\"comments\", \"attachments\", \"changelog\"])',\n default: [],\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve (e.g., [\"summary\", \"status\", \"assignee\"])',\n },\n },\n required: ['issueKey'],\n },\n};\n\nexport async function handleGetIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetIssueInputSchema, input);\n\n // Accept either an issue key or a full Jira URL and extract the key\n const trimmedInput = (validated.issueKey || '').trim();\n const key = extractIssueKey(trimmedInput) || trimmedInput;\n\n log.info(`Getting issue ${key}...`);\n\n const getParams: any = {};\n\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n if (validated.fields !== undefined) getParams.fields = validated.fields;\n\n const issue = await getIssue(key, getParams);\n\n log.info(`Retrieved issue ${issue.key}`);\n\n return formatIssueResponse(issue);\n } catch (error) {\n log.error('Error in handleGetIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { SearchIssuesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { searchIssues } from '../utils/api-helpers.js';\nimport { formatSearchResultsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:search-issues');\n\nexport const searchIssuesTool: Tool = {\n name: TOOL_NAMES.SEARCH_ISSUES,\n description:\n 'Search for Jira issues using JQL. Supports complex queries with pagination and field selection. Examples: \"project = PROJECT AND status = Open\", \"assignee = currentUser()\". For pagination, use nextPageToken from previous response.',\n inputSchema: {\n type: 'object',\n properties: {\n jql: {\n type: 'string',\n description: 'JQL query string (e.g., \"project = PROJECT AND status = Open\")',\n },\n nextPageToken: {\n type: 'string',\n description:\n 'Token for pagination. Omit for first page, use value from previous response for next page.',\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return per page',\n minimum: 1,\n maximum: 100,\n default: 50,\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve for each issue',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description: 'Additional details to include for each issue',\n default: [],\n },\n },\n required: ['jql'],\n },\n};\n\nexport async function handleSearchIssues(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(SearchIssuesInputSchema, input);\n\n log.info(`Searching issues with JQL: \"${validated.jql}\"...`);\n\n const searchParams: any = {\n jql: validated.jql,\n };\n\n if (validated.nextPageToken !== undefined) searchParams.nextPageToken = validated.nextPageToken;\n if (validated.maxResults !== undefined) searchParams.maxResults = validated.maxResults;\n if (validated.fields !== undefined) searchParams.fields = validated.fields;\n if (validated.expand !== undefined) searchParams.expand = validated.expand;\n\n const result = await searchIssues(searchParams);\n\n log.info(`Found ${result.total ?? 0} issue(s), showing ${result.issues.length}`);\n\n return formatSearchResultsResponse(result);\n } catch (error) {\n log.error('Error in handleSearchIssues:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetMyIssuesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getMyIssues } from '../utils/api-helpers.js';\nimport { formatSearchResultsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-my-issues');\n\nexport const getMyIssuesTool: Tool = {\n name: TOOL_NAMES.GET_MY_ISSUES,\n description:\n 'Retrieves issues assigned to current user, sorted by most recently updated first. Supports pagination and field selection. For pagination, use nextPageToken from previous response.',\n inputSchema: {\n type: 'object',\n properties: {\n nextPageToken: {\n type: 'string',\n description:\n 'Token for pagination. Omit for first page, use value from previous response for next page.',\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return per page',\n minimum: 1,\n maximum: 100,\n default: 50,\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve for each issue',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description: 'Additional details to include for each issue',\n default: [],\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetMyIssues(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetMyIssuesInputSchema, input);\n\n log.info('Getting issues assigned to current user...');\n\n const getParams: any = {};\n\n if (validated.nextPageToken !== undefined) getParams.nextPageToken = validated.nextPageToken;\n if (validated.maxResults !== undefined) getParams.maxResults = validated.maxResults;\n if (validated.fields !== undefined) getParams.fields = validated.fields;\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n\n const result = await getMyIssues(getParams);\n\n log.info(\n `Found ${result.total ?? 0} issue(s) assigned to you, showing ${result.issues.length}`\n );\n\n return formatSearchResultsResponse(result);\n } catch (error) {\n log.error('Error in handleGetMyIssues:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetIssueTypesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getIssueTypes } from '../utils/api-helpers.js';\nimport { formatIssueTypesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-issue-types');\n\nexport const getIssueTypesTool: Tool = {\n name: TOOL_NAMES.GET_ISSUE_TYPES,\n description:\n 'Retrieves available issue types. Can get global issue types or project-specific issue types including regular issues and subtasks (Bug, Story, Task, Epic, etc.).',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description:\n 'Project key to get issue types for specific project (optional - if not provided, returns global issue types)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetIssueTypes(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetIssueTypesInputSchema, input);\n\n if (validated.projectKey) {\n log.info(`Getting issue types for project ${validated.projectKey}...`);\n } else {\n log.info('Getting global issue types...');\n }\n\n const issueTypes = await getIssueTypes(validated.projectKey);\n\n log.info(`Found ${issueTypes.length} issue type(s)`);\n\n return formatIssueTypesResponse(issueTypes);\n } catch (error) {\n log.error('Error in handleGetIssueTypes:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetUsersInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getUsers } from '../utils/api-helpers.js';\nimport { formatUsersResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-users');\n\nexport const getUsersTool: Tool = {\n name: TOOL_NAMES.GET_USERS,\n description:\n 'Search for users by name, email, username, or account ID. Returns display name, email, account status, and account type. Supports pagination.',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query for user name or email (partial matches supported)',\n },\n username: {\n type: 'string',\n description: 'Specific username to search for',\n },\n accountId: {\n type: 'string',\n description: 'Specific account ID to search for',\n },\n startAt: {\n type: 'number',\n description: 'Index of first result to return (for pagination)',\n minimum: 0,\n default: 0,\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return',\n minimum: 1,\n maximum: 50,\n default: 50,\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetUsers(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetUsersInputSchema, input);\n\n if (validated.query) {\n log.info(`Searching users with query: \"${validated.query}\"...`);\n } else if (validated.username) {\n log.info(`Searching for username: \"${validated.username}\"...`);\n } else if (validated.accountId) {\n log.info(`Searching for account ID: \"${validated.accountId}\"...`);\n } else {\n log.info('Getting all users...');\n }\n\n const getParams: any = {};\n\n if (validated.query !== undefined) getParams.query = validated.query;\n if (validated.username !== undefined) getParams.username = validated.username;\n if (validated.accountId !== undefined) getParams.accountId = validated.accountId;\n if (validated.startAt !== undefined) getParams.startAt = validated.startAt;\n if (validated.maxResults !== undefined) getParams.maxResults = validated.maxResults;\n\n const users = await getUsers(getParams);\n\n log.info(`Found ${users.length} user(s)`);\n\n return formatUsersResponse(users);\n } catch (error) {\n log.error('Error in handleGetUsers:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetPrioritiesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getPriorities } from '../utils/api-helpers.js';\nimport { formatPrioritiesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-priorities');\n\nexport const getPrioritiesTool: Tool = {\n name: TOOL_NAMES.GET_PRIORITIES,\n description:\n 'Retrieves available priorities (e.g., Highest, High, Medium, Low, Lowest). Returns IDs, names, and descriptions.',\n inputSchema: {\n type: 'object',\n properties: {},\n required: [],\n },\n};\n\nexport async function handleGetPriorities(input: unknown): Promise<McpToolResponse> {\n try {\n validateInput(GetPrioritiesInputSchema, input);\n\n log.info('Getting all priority levels...');\n\n const priorities = await getPriorities();\n\n log.info(`Found ${priorities.length} priority level(s)`);\n\n return formatPrioritiesResponse(priorities);\n } catch (error) {\n log.error('Error in handleGetPriorities:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetStatusesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getStatuses } from '../utils/api-helpers.js';\nimport { formatStatusesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-statuses');\n\nexport const getStatusesTool: Tool = {\n name: TOOL_NAMES.GET_STATUSES,\n description:\n 'Retrieves available statuses (global or project-specific, e.g., To Do, In Progress, Done). Returns status categories and workflow information.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get statuses for specific project (optional)',\n },\n issueTypeId: {\n type: 'string',\n description: 'Issue type ID to get statuses for specific issue type (requires projectKey)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetStatuses(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetStatusesInputSchema, input);\n\n if (validated.projectKey && validated.issueTypeId) {\n log.info(\n `Getting statuses for project ${validated.projectKey} and issue type ${validated.issueTypeId}...`\n );\n } else if (validated.projectKey) {\n log.info(`Getting statuses for project ${validated.projectKey}...`);\n } else {\n log.info('Getting global statuses...');\n }\n\n const getParams: any = {};\n\n if (validated.projectKey !== undefined) getParams.projectKey = validated.projectKey;\n if (validated.issueTypeId !== undefined) getParams.issueTypeId = validated.issueTypeId;\n\n const statuses = await getStatuses(getParams);\n\n log.info(`Found ${statuses.length} status(es)`);\n\n return formatStatusesResponse(statuses);\n } catch (error) {\n log.error('Error in handleGetStatuses:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\n\nconst log = createLogger('tool:create-issue');\n\nexport const createIssueTool: Tool = {\n name: TOOL_NAMES.CREATE_ISSUE,\n description:\n 'Creates a new Jira issue in the specified project. Supports setting issue type, priority, assignee, labels, components, and custom fields. Description format is controlled by the \"format\" parameter (default: markdown). For required custom fields, supply them via customFields (e.g., { \"customfield_12345\": { id: \"...\" } }). Returns the created issue with all details.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key where the issue will be created',\n },\n summary: {\n type: 'string',\n description: 'Issue summary/title',\n minLength: 1,\n },\n description: {\n anyOf: [{ type: 'string' }, { type: 'object' }],\n description:\n 'Detailed issue description (optional). Format depends on the \"format\" parameter.',\n },\n issueType: {\n type: 'string',\n description: 'Issue type name (e.g., Bug, Story, Task, Epic)',\n },\n priority: {\n type: 'string',\n description: 'Issue priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'Assignee account ID (optional)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Issue labels (optional)',\n default: [],\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'Component names (optional)',\n default: [],\n },\n customFields: {\n type: 'object',\n additionalProperties: true,\n description:\n 'Additional Jira fields, e.g. { \"customfield_10071\": value }. Use this to set required custom fields.',\n },\n returnIssue: {\n type: 'boolean',\n description: 'If false, returns only the issue key without fetching full details',\n default: true,\n },\n format: {\n type: 'string',\n enum: ['markdown', 'adf', 'plain'],\n description:\n 'Description format: \"markdown\" (converts Markdown to ADF, default), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting)',\n default: 'markdown',\n },\n },\n required: ['projectKey', 'summary', 'issueType'],\n },\n};\n\nexport async function handleCreateIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateIssueInputSchema, input);\n\n log.info(`Creating issue in project ${validated.projectKey}...`);\n\n const createParams: any = {\n projectKey: validated.projectKey,\n summary: validated.summary,\n issueType: validated.issueType,\n };\n\n if (validated.description !== undefined) createParams.description = validated.description;\n if (validated.priority !== undefined) createParams.priority = validated.priority;\n if (validated.assignee !== undefined) createParams.assignee = validated.assignee;\n if (validated.labels !== undefined) createParams.labels = validated.labels;\n if (validated.components !== undefined) createParams.components = validated.components;\n if (validated.customFields !== undefined) createParams.customFields = validated.customFields;\n if (validated.format !== undefined) createParams.format = validated.format;\n\n let issueOrKey;\n if (validated.returnIssue === false) {\n issueOrKey = await createIssue(createParams, { returnIssue: false });\n } else {\n // Default behavior: request full issue; keep API surface compatible with tests\n issueOrKey = await createIssue(createParams);\n }\n\n if (validated.returnIssue === false) {\n const key = typeof issueOrKey === 'string' ? issueOrKey : (issueOrKey as any).key;\n log.info(`Created issue ${key}`);\n return formatSuccessResponse(`Issue created: ${key}`);\n }\n\n const issue = issueOrKey as any;\n log.info(`Created issue ${issue.key}`);\n return formatIssueResponse(issue);\n } catch (error) {\n log.error('Error in handleCreateIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { UpdateIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { updateIssue, getIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\n\nconst log = createLogger('tool:update-issue');\n\nexport const updateIssueTool: Tool = {\n name: TOOL_NAMES.UPDATE_ISSUE,\n description:\n 'Updates an existing Jira issue by its key. Supports updating summary, description, priority, assignee, labels, and components. Description format is controlled by the \"format\" parameter (default: markdown). Only specified fields will be updated.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description: 'Issue key to update (e.g., PROJECT-123)',\n },\n summary: {\n type: 'string',\n description: 'New issue summary/title (optional)',\n },\n description: {\n anyOf: [{ type: 'string' }, { type: 'object' }],\n description: 'New issue description (optional). Format depends on the \"format\" parameter.',\n },\n priority: {\n type: 'string',\n description: 'New priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'New assignee account ID (optional, use null string to unassign)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'New labels array (replaces existing labels) - optional',\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'New components array (replaces existing components) - optional',\n },\n returnIssue: {\n type: 'boolean',\n description: 'If false, returns a success message without fetching the updated issue',\n default: true,\n },\n format: {\n type: 'string',\n enum: ['markdown', 'adf', 'plain'],\n description:\n 'Description format: \"markdown\" (converts Markdown to ADF, default), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting)',\n default: 'markdown',\n },\n },\n required: ['issueKey'],\n },\n};\n\nexport async function handleUpdateIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(UpdateIssueInputSchema, input);\n\n log.info(`Updating issue ${validated.issueKey}...`);\n\n const updateParams: any = {};\n\n if (validated.summary !== undefined) updateParams.summary = validated.summary;\n if (validated.description !== undefined) updateParams.description = validated.description;\n if (validated.priority !== undefined) updateParams.priority = validated.priority;\n if (validated.assignee !== undefined) updateParams.assignee = validated.assignee;\n if (validated.labels !== undefined) updateParams.labels = validated.labels;\n if (validated.components !== undefined) updateParams.components = validated.components;\n if (validated.format !== undefined) updateParams.format = validated.format;\n\n await updateIssue(validated.issueKey, updateParams);\n\n if (validated.returnIssue === false) {\n log.info(`Updated issue ${validated.issueKey}`);\n return formatSuccessResponse(`Issue ${validated.issueKey} updated successfully`);\n }\n\n // Get the updated issue to return current state\n const updatedIssue = await getIssue(validated.issueKey);\n\n log.info(`Updated issue ${updatedIssue.key}`);\n\n return formatIssueResponse(updatedIssue);\n } catch (error) {\n log.error('Error in handleUpdateIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { AddCommentInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { addComment } from '../utils/api-helpers.js';\nimport { formatCommentResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:add-comment');\n\nexport const addCommentTool: Tool = {\n name: TOOL_NAMES.ADD_COMMENT,\n description:\n 'Adds a comment to an issue. Supports visibility restrictions for groups or roles. Comment format is controlled by the \"format\" parameter (default: markdown). Returns the created comment with author details and timestamp.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description: 'Issue key to add comment to (e.g., PROJECT-123)',\n },\n body: {\n type: 'string',\n description: 'Comment body text. Format depends on the \"format\" parameter.',\n minLength: 1,\n },\n visibility: {\n type: 'object',\n description: 'Comment visibility restrictions (optional)',\n properties: {\n type: {\n type: 'string',\n enum: ['group', 'role'],\n description: 'Visibility type - either \"group\" or \"role\"',\n },\n value: {\n type: 'string',\n description: 'Group name or role name for visibility restriction',\n },\n },\n required: ['type', 'value'],\n },\n format: {\n type: 'string',\n enum: ['markdown', 'adf', 'plain'],\n description:\n 'Comment format: \"markdown\" (converts Markdown to ADF, default), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting)',\n default: 'markdown',\n },\n },\n required: ['issueKey', 'body'],\n },\n};\n\nexport async function handleAddComment(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(AddCommentInputSchema, input);\n\n log.info(`Adding comment to issue ${validated.issueKey}...`);\n\n const comment = await addComment(\n validated.issueKey,\n validated.body,\n validated.visibility,\n validated.format\n );\n\n log.info(`Added comment to ${validated.issueKey}`);\n\n return formatCommentResponse(comment);\n } catch (error) {\n log.error('Error in handleAddComment:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetProjectInfoInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getProjectDetails } from '../utils/api-helpers.js';\nimport { formatProjectDetailsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-project-info');\n\nexport const getProjectInfoTool: Tool = {\n name: TOOL_NAMES.GET_PROJECT_INFO,\n description:\n 'Retrieves detailed information about a project (components, versions, issue types, roles, insights). More comprehensive than the basic project list.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get detailed information for',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional project details to include (e.g., [\"description\", \"lead\", \"issueTypes\", \"versions\"])',\n default: [],\n },\n },\n required: ['projectKey'],\n },\n};\n\nexport async function handleGetProjectInfo(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetProjectInfoInputSchema, input);\n\n log.info(`Getting detailed project information for ${validated.projectKey}...`);\n\n const project = await getProjectDetails(validated.projectKey, validated.expand);\n\n log.info(`Retrieved project details for ${project.key}`);\n\n return formatProjectDetailsResponse(project);\n } catch (error) {\n log.error('Error in handleGetProjectInfo:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateSubtaskInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createSubtask } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:create-subtask');\n\nexport const createSubtaskTool: Tool = {\n name: TOOL_NAMES.CREATE_SUBTASK,\n description:\n 'Creates a subtask under an existing parent issue. Automatically determines the correct project and subtask issue type. Supports setting priority, assignee, labels, and components. Description format is controlled by the \"format\" parameter (default: markdown).',\n inputSchema: {\n type: 'object',\n properties: {\n parentIssueKey: {\n type: 'string',\n description: 'Parent issue key (e.g., PROJECT-123)',\n },\n summary: {\n type: 'string',\n description: 'Subtask summary/title',\n minLength: 1,\n },\n description: {\n type: 'string',\n description:\n 'Detailed subtask description (optional). Format depends on the \"format\" parameter.',\n },\n priority: {\n type: 'string',\n description: 'Subtask priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'Assignee account ID (optional)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Subtask labels (optional)',\n default: [],\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'Component names (optional)',\n default: [],\n },\n format: {\n type: 'string',\n enum: ['markdown', 'adf', 'plain'],\n description:\n 'Description format: \"markdown\" (converts Markdown to ADF, default), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting)',\n default: 'markdown',\n },\n },\n required: ['parentIssueKey', 'summary'],\n },\n};\n\nexport async function handleCreateSubtask(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateSubtaskInputSchema, input);\n\n log.info(`Creating subtask under parent issue ${validated.parentIssueKey}...`);\n\n const subtaskParams: any = {\n summary: validated.summary,\n };\n\n if (validated.description !== undefined) subtaskParams.description = validated.description;\n if (validated.priority !== undefined) subtaskParams.priority = validated.priority;\n if (validated.assignee !== undefined) subtaskParams.assignee = validated.assignee;\n if (validated.labels !== undefined) subtaskParams.labels = validated.labels;\n if (validated.components !== undefined) subtaskParams.components = validated.components;\n if (validated.format !== undefined) subtaskParams.format = validated.format;\n\n const subtask = await createSubtask(validated.parentIssueKey, subtaskParams);\n\n log.info(`Created subtask ${subtask.key}`);\n\n return formatIssueResponse(subtask);\n } catch (error) {\n log.error('Error in handleCreateSubtask:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetCreateMetaInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getCreateMeta } from '../utils/api-helpers.js';\nimport { formatCreateMetaResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-create-meta');\n\nexport const getCreateMetaTool: Tool = {\n name: TOOL_NAMES.GET_CREATE_META,\n description:\n 'Retrieves create metadata for a project, showing all available fields (including custom fields) for creating issues. Shows required vs optional fields, field types, and allowed values. Use this before creating issues to discover what fields are needed.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get create metadata for (e.g., PROJECT)',\n },\n issueTypeName: {\n type: 'string',\n description: 'Specific issue type name to get metadata for (optional)',\n },\n },\n required: ['projectKey'],\n },\n};\n\nexport async function handleGetCreateMeta(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetCreateMetaInputSchema, input);\n\n log.info(`Getting create metadata for project ${validated.projectKey}...`);\n\n const options: any = {\n projectKeys: [validated.projectKey],\n expand: 'projects.issuetypes.fields',\n };\n\n if (validated.issueTypeName) {\n options.issueTypeNames = [validated.issueTypeName];\n }\n\n const meta = await getCreateMeta(options);\n\n log.info(`Retrieved create metadata for ${validated.projectKey}`);\n\n return formatCreateMetaResponse(meta);\n } catch (error) {\n log.error('Error in handleGetCreateMeta:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetCustomFieldsInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getFields } from '../utils/api-helpers.js';\nimport { formatCustomFieldsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-custom-fields');\n\nexport const getCustomFieldsTool: Tool = {\n name: TOOL_NAMES.GET_CUSTOM_FIELDS,\n description:\n 'Retrieves all custom fields available in Jira. Shows custom field names, IDs (e.g., customfield_10071), and types. Useful for discovering what custom fields exist and their identifiers.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to filter custom fields (optional)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetCustomFields(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetCustomFieldsInputSchema, input);\n\n const projectMsg = validated.projectKey ? ` for project ${validated.projectKey}` : '';\n log.info(`Getting custom fields${projectMsg}...`);\n\n const fields = await getFields();\n\n log.info(`Retrieved ${fields.filter((f) => f.custom).length} custom fields`);\n\n return formatCustomFieldsResponse(fields, validated.projectKey);\n } catch (error) {\n log.error('Error in handleGetCustomFields:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateIssueLinkInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createIssueLink } from '../utils/api-helpers.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:create-issue-link');\n\nexport const createIssueLinkTool: Tool = {\n name: TOOL_NAMES.CREATE_ISSUE_LINK,\n description:\n 'Creates a link between two Jira issues. Supports common link types like \"blocks\", \"relates\", \"duplicates\", and \"clones\". Use this to establish relationships between issues.',\n inputSchema: {\n type: 'object',\n properties: {\n fromIssue: {\n type: 'string',\n description: 'Source issue key (e.g., PROJECT-123)',\n },\n toIssue: {\n type: 'string',\n description: 'Target issue key (e.g., PROJECT-456)',\n },\n linkType: {\n type: 'string',\n description:\n 'Link type: \"blocks\" (fromIssue blocks toIssue), \"is blocked by\", \"relates\", \"duplicates\", \"clones\", or custom link type name',\n },\n },\n required: ['fromIssue', 'toIssue', 'linkType'],\n },\n};\n\nexport async function handleCreateIssueLink(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateIssueLinkInputSchema, input);\n\n log.info(\n `Creating ${validated.linkType} link from ${validated.fromIssue} to ${validated.toIssue}...`\n );\n\n await createIssueLink(validated.fromIssue, validated.toIssue, validated.linkType);\n\n log.info('Issue link created successfully');\n\n return formatSuccessResponse(\n `Link created: ${validated.fromIssue} ${validated.linkType} ${validated.toIssue}`\n );\n } catch (error) {\n log.error('Error in handleCreateIssueLink:', error);\n return handleError(error);\n }\n}\n","// Load .env file in non-production modes\nif (process.env.NODE_ENV !== 'production') {\n try {\n const { config } = await import('dotenv');\n config();\n // Loaded .env silently; logging handled by logger\n } catch {\n // no-op; continue without .env\n }\n}\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n CallToolRequest,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { validateAuth } from './utils/jira-auth.js';\nimport { createLogger } from './utils/logger.js';\nimport { TOOL_NAMES } from './config/constants.js';\n\nconst log = createLogger('server');\n\n// Import all tools\nimport * as tools from './tools/index.js';\n\n// Tool handler mapping\nconst toolHandlers = new Map<string, (input: unknown) => Promise<any>>([\n [TOOL_NAMES.GET_VISIBLE_PROJECTS, tools.handleGetVisibleProjects],\n [TOOL_NAMES.GET_ISSUE, tools.handleGetIssue],\n [TOOL_NAMES.SEARCH_ISSUES, tools.handleSearchIssues],\n [TOOL_NAMES.GET_MY_ISSUES, tools.handleGetMyIssues],\n [TOOL_NAMES.GET_ISSUE_TYPES, tools.handleGetIssueTypes],\n [TOOL_NAMES.GET_USERS, tools.handleGetUsers],\n [TOOL_NAMES.GET_PRIORITIES, tools.handleGetPriorities],\n [TOOL_NAMES.GET_STATUSES, tools.handleGetStatuses],\n [TOOL_NAMES.CREATE_ISSUE, tools.handleCreateIssue],\n [TOOL_NAMES.UPDATE_ISSUE, tools.handleUpdateIssue],\n [TOOL_NAMES.ADD_COMMENT, tools.handleAddComment],\n [TOOL_NAMES.GET_PROJECT_INFO, tools.handleGetProjectInfo],\n [TOOL_NAMES.CREATE_SUBTASK, tools.handleCreateSubtask],\n [TOOL_NAMES.GET_CREATE_META, tools.handleGetCreateMeta],\n [TOOL_NAMES.GET_CUSTOM_FIELDS, tools.handleGetCustomFields],\n [TOOL_NAMES.CREATE_ISSUE_LINK, tools.handleCreateIssueLink],\n]);\n\n// All available tools\nconst allTools = [\n tools.getVisibleProjectsTool,\n tools.getIssueTool,\n tools.searchIssuesTool,\n tools.getMyIssuesTool,\n tools.getIssueTypesTool,\n tools.getUsersTool,\n tools.getPrioritiesTool,\n tools.getStatusesTool,\n tools.createIssueTool,\n tools.updateIssueTool,\n tools.addCommentTool,\n tools.getProjectInfoTool,\n tools.createSubtaskTool,\n tools.getCreateMetaTool,\n tools.getCustomFieldsTool,\n tools.createIssueLinkTool,\n];\n\nasync function main() {\n const isDryRun =\n (process.env.DRY_RUN || '').toLowerCase() === '1' ||\n (process.env.DRY_RUN || '').toLowerCase() === 'true';\n\n // Show auth info on startup when configured (skip in DRY_RUN)\n if (!isDryRun) {\n const hasAuthVars = Boolean(\n process.env.JIRA_BASE_URL && process.env.JIRA_EMAIL && process.env.JIRA_API_TOKEN\n );\n\n if (hasAuthVars) {\n try {\n const auth = validateAuth();\n console.error(`๐Ÿ” Authenticated as: ${auth.email}`);\n console.error(`๐ŸŒ Jira instance: ${auth.baseUrl}`);\n } catch (error: any) {\n console.error('โš ๏ธ Invalid Jira credentials:', error.message);\n }\n } else {\n console.error('โš ๏ธ Jira env vars missing (JIRA_BASE_URL, JIRA_EMAIL, JIRA_API_TOKEN)');\n }\n } else {\n console.error('๐Ÿงช DRY_RUN=1 set โ€” skipping Jira auth check');\n }\n\n // Read version from package.json\n let version = '0.0.0';\n try {\n const pkg = await import('../package.json', { assert: { type: 'json' } } as any);\n version = (pkg as any).default?.version || (pkg as any).version || version;\n } catch {\n // ignore\n }\n\n const server = new Server(\n {\n name: 'jira-mcp-server',\n version,\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n );\n\n // List available tools\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n console.error(`๐Ÿ“‹ Listing ${allTools.length} available tool(s)`);\n return { tools: allTools };\n });\n\n // Handle tool execution\n server.setRequestHandler(CallToolRequestSchema, async (request: CallToolRequest) => {\n const { name, arguments: args } = request.params;\n\n console.error(`๐Ÿ› ๏ธ Executing tool: ${name}`);\n\n const handler = toolHandlers.get(name);\n if (!handler) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n try {\n const result = await handler(args);\n console.error(`โœ… Tool ${name} executed successfully`);\n return result;\n } catch (error: any) {\n console.error(`โŒ Error executing tool ${name}:`, error.message);\n throw error;\n }\n });\n\n // List resources (not implemented for this server)\n server.setRequestHandler(ListResourcesRequestSchema, async () => {\n return { resources: [] };\n });\n\n // Read resource (not implemented for this server)\n server.setRequestHandler(ReadResourceRequestSchema, async () => {\n throw new Error('Resource reading not implemented');\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('๐Ÿš€ Jira MCP server running on stdio');\n}\n\nmain().catch((error) => {\n log.error('Fatal error:', error);\n process.exit(1);\n});\n"]}
1
+ {"version":3,"sources":["../node_modules/dotenv/package.json","../node_modules/dotenv/lib/main.js","../package.json","../src/config/constants.ts","../src/utils/logger.ts","../src/utils/jira-auth.ts","../src/utils/validators.ts","../src/types/tools.ts","../src/utils/api-helpers.ts","../src/utils/redaction.ts","../src/utils/formatters.ts","../src/utils/error-handler.ts","../src/tools/get-visible-projects.ts","../src/tools/get-issue.ts","../src/tools/search-issues.ts","../src/tools/get-my-issues.ts","../src/tools/get-issue-types.ts","../src/tools/get-users.ts","../src/tools/get-priorities.ts","../src/tools/get-statuses.ts","../src/tools/create-issue.ts","../src/tools/update-issue.ts","../src/tools/add-comment.ts","../src/tools/get-project-info.ts","../src/tools/create-subtask.ts","../src/tools/get-create-meta.ts","../src/tools/get-custom-fields.ts","../src/tools/create-issue-link.ts","../src/index.ts"],"names":["exports","path","require_package","z","log","message"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAA,eAAA,GAAA,UAAA,CAAA;AAAA,EAAA,kCAAA,CAAAA,SAAA,EAAA,MAAA,EAAA;AAAA,IAAA,MAAA,CAAA,OAAA,GAAA;AAAA,MACE,IAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAW,QAAA;AAAA,MACX,WAAA,EAAe,4CAAA;AAAA,MACf,IAAA,EAAQ,aAAA;AAAA,MACR,KAAA,EAAS,eAAA;AAAA,MACT,OAAA,EAAW;AAAA,QACT,GAAA,EAAK;AAAA,UACH,KAAA,EAAS,iBAAA;AAAA,UACT,OAAA,EAAW,eAAA;AAAA,UACX,OAAA,EAAW;AAAA,SACb;AAAA,QACA,UAAA,EAAY,aAAA;AAAA,QACZ,aAAA,EAAe,aAAA;AAAA,QACf,mBAAA,EAAqB,sBAAA;AAAA,QACrB,sBAAA,EAAwB,sBAAA;AAAA,QACxB,mBAAA,EAAqB,sBAAA;AAAA,QACrB,sBAAA,EAAwB,sBAAA;AAAA,QACxB,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,OAAA,EAAW;AAAA,QACT,WAAA,EAAa,yCAAA;AAAA,QACb,IAAA,EAAQ,UAAA;AAAA,QACR,OAAA,EAAW,mCAAA;AAAA,QACX,IAAA,EAAQ,iFAAA;AAAA,QACR,eAAA,EAAiB,0GAAA;AAAA,QACjB,UAAA,EAAc,UAAA;AAAA,QACd,OAAA,EAAW;AAAA,OACb;AAAA,MACA,UAAA,EAAc;AAAA,QACZ,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAY,2CAAA;AAAA,MACZ,OAAA,EAAW,qBAAA;AAAA,MACX,QAAA,EAAY;AAAA,QACV,QAAA;AAAA,QACA,KAAA;AAAA,QACA,MAAA;AAAA,QACA,aAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,cAAA,EAAkB,WAAA;AAAA,MAClB,OAAA,EAAW,cAAA;AAAA,MACX,eAAA,EAAmB;AAAA,QACjB,aAAA,EAAe,UAAA;AAAA,QACf,OAAA,EAAW,QAAA;AAAA,QACX,KAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAY,SAAA;AAAA,QACZ,kBAAA,EAAoB,QAAA;AAAA,QACpB,GAAA,EAAO,SAAA;AAAA,QACP,UAAA,EAAc;AAAA,OAChB;AAAA,MACA,OAAA,EAAW;AAAA,QACT,IAAA,EAAQ;AAAA,OACV;AAAA,MACA,OAAA,EAAW;AAAA,QACT,EAAA,EAAM;AAAA;AACR,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7DA,IAAA,YAAA,GAAA,UAAA,CAAA;AAAA,EAAA,iCAAA,CAAAA,SAAA,EAAA,MAAA,EAAA;AAAA,IAAA,IAAM,EAAA,GAAK,UAAQ,IAAI,CAAA;AACvB,IAAA,IAAM,IAAA,GAAO,UAAQ,MAAM,CAAA;AAC3B,IAAA,IAAM,EAAA,GAAK,UAAQ,IAAI,CAAA;AACvB,IAAA,IAAM,MAAA,GAAS,UAAQ,QAAQ,CAAA;AAC/B,IAAA,IAAM,WAAA,GAAc,eAAA,EAAA;AAEpB,IAAA,IAAM,UAAU,WAAA,CAAY,OAAA;AAG5B,IAAA,IAAM,IAAA,GAAO;AAAA,MACX,qDAAA;AAAA,MACA,0EAAA;AAAA,MACA,yEAAA;AAAA,MACA,iEAAA;AAAA,MACA,6EAAA;AAAA,MACA,qEAAA;AAAA,MACA,oEAAA;AAAA,MACA,qEAAA;AAAA,MACA,mEAAA;AAAA,MACA,iEAAA;AAAA,MACA,gFAAA;AAAA,MACA,yDAAA;AAAA,MACA,kEAAA;AAAA,MACA,sDAAA;AAAA,MACA,oEAAA;AAAA,MACA;AAAA,KACF;AAGA,IAAA,SAAS,aAAA,GAAiB;AACxB,MAAA,OAAO,IAAA,CAAK,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,GAAI,IAAA,CAAK,MAAM,CAAC,CAAA;AAAA,IACrD;AAEA,IAAA,SAAS,aAAc,KAAA,EAAO;AAC5B,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,OAAO,CAAC,CAAC,OAAA,EAAS,GAAA,EAAK,IAAA,EAAM,KAAA,EAAO,EAAE,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,WAAA,EAAa,CAAA;AAAA,MACtE;AACA,MAAA,OAAO,QAAQ,KAAK,CAAA;AAAA,IACtB;AAEA,IAAA,SAAS,YAAA,GAAgB;AACvB,MAAA,OAAO,QAAQ,MAAA,CAAO,KAAA;AAAA,IACxB;AAEA,IAAA,SAAS,IAAK,IAAA,EAAM;AAClB,MAAA,OAAO,YAAA,EAAa,GAAI,CAAA,OAAA,EAAU,IAAI,CAAA,OAAA,CAAA,GAAY,IAAA;AAAA,IACpD;AAEA,IAAA,IAAM,IAAA,GAAO,8IAAA;AAGb,IAAA,SAAS,MAAO,GAAA,EAAK;AACnB,MAAA,MAAM,MAAM,EAAC;AAGb,MAAA,IAAI,KAAA,GAAQ,IAAI,QAAA,EAAS;AAGzB,MAAA,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,SAAA,EAAW,IAAI,CAAA;AAErC,MAAA,IAAI,KAAA;AACJ,MAAA,OAAA,CAAQ,KAAA,GAAQ,IAAA,CAAK,IAAA,CAAK,KAAK,MAAM,IAAA,EAAM;AACzC,QAAA,MAAM,GAAA,GAAM,MAAM,CAAC,CAAA;AAGnB,QAAA,IAAI,KAAA,GAAS,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AAGzB,QAAA,KAAA,GAAQ,MAAM,IAAA,EAAK;AAGnB,QAAA,MAAM,UAAA,GAAa,MAAM,CAAC,CAAA;AAG1B,QAAA,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,wBAAA,EAA0B,IAAI,CAAA;AAGpD,QAAA,IAAI,eAAe,GAAA,EAAK;AACtB,UAAA,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA;AAClC,UAAA,KAAA,GAAQ,KAAA,CAAM,OAAA,CAAQ,MAAA,EAAQ,IAAI,CAAA;AAAA,QACpC;AAGA,QAAA,GAAA,CAAI,GAAG,CAAA,GAAI,KAAA;AAAA,MACb;AAEA,MAAA,OAAO,GAAA;AAAA,IACT;AAEA,IAAA,SAAS,YAAa,OAAA,EAAS;AAC7B,MAAA,OAAA,GAAU,WAAW,EAAC;AAEtB,MAAA,MAAM,SAAA,GAAY,WAAW,OAAO,CAAA;AACpC,MAAA,OAAA,CAAQ,IAAA,GAAO,SAAA;AACf,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,YAAA,CAAa,OAAO,CAAA;AAChD,MAAA,IAAI,CAAC,OAAO,MAAA,EAAQ;AAClB,QAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,SAAS,CAAA,sBAAA,CAAwB,CAAA;AACrF,QAAA,GAAA,CAAI,IAAA,GAAO,cAAA;AACX,QAAA,MAAM,GAAA;AAAA,MACR;AAIA,MAAA,MAAM,IAAA,GAAO,UAAA,CAAW,OAAO,CAAA,CAAE,MAAM,GAAG,CAAA;AAC1C,MAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AAEpB,MAAA,IAAI,SAAA;AACJ,MAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,MAAA,EAAQ,CAAA,EAAA,EAAK;AAC/B,QAAA,IAAI;AAEF,UAAA,MAAM,GAAA,GAAM,IAAA,CAAK,CAAC,CAAA,CAAE,IAAA,EAAK;AAGzB,UAAA,MAAM,KAAA,GAAQ,aAAA,CAAc,MAAA,EAAQ,GAAG,CAAA;AAGvC,UAAA,SAAA,GAAY,YAAA,CAAa,OAAA,CAAQ,KAAA,CAAM,UAAA,EAAY,MAAM,GAAG,CAAA;AAE5D,UAAA;AAAA,QACF,SAAS,KAAA,EAAO;AAEd,UAAA,IAAI,CAAA,GAAI,KAAK,MAAA,EAAQ;AACnB,YAAA,MAAM,KAAA;AAAA,UACR;AAAA,QAEF;AAAA,MACF;AAGA,MAAA,OAAO,YAAA,CAAa,MAAM,SAAS,CAAA;AAAA,IACrC;AAEA,IAAA,SAAS,MAAO,OAAA,EAAS;AACvB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,QAAA,EAAW,OAAO,CAAA,QAAA,EAAW,OAAO,CAAA,CAAE,CAAA;AAAA,IACtD;AAEA,IAAA,SAAS,OAAQ,OAAA,EAAS;AACxB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAO,CAAA,SAAA,EAAY,OAAO,CAAA,CAAE,CAAA;AAAA,IACrD;AAEA,IAAA,SAAS,KAAM,OAAA,EAAS;AACtB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,OAAO,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,IAC9C;AAEA,IAAA,SAAS,WAAY,OAAA,EAAS;AAE5B,MAAA,IAAI,WAAW,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,UAAA,CAAW,SAAS,CAAA,EAAG;AAClE,QAAA,OAAO,OAAA,CAAQ,UAAA;AAAA,MACjB;AAGA,MAAA,IAAI,QAAQ,GAAA,CAAI,UAAA,IAAc,QAAQ,GAAA,CAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/D,QAAA,OAAO,QAAQ,GAAA,CAAI,UAAA;AAAA,MACrB;AAGA,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,SAAS,aAAA,CAAe,QAAQ,SAAA,EAAW;AAEzC,MAAA,IAAI,GAAA;AACJ,MAAA,IAAI;AACF,QAAA,GAAA,GAAM,IAAI,IAAI,SAAS,CAAA;AAAA,MACzB,SAAS,KAAA,EAAO;AACd,QAAA,IAAI,KAAA,CAAM,SAAS,iBAAA,EAAmB;AACpC,UAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,4IAA4I,CAAA;AAClK,UAAA,GAAA,CAAI,IAAA,GAAO,oBAAA;AACX,UAAA,MAAM,GAAA;AAAA,QACR;AAEA,QAAA,MAAM,KAAA;AAAA,MACR;AAGA,MAAA,MAAM,MAAM,GAAA,CAAI,QAAA;AAChB,MAAA,IAAI,CAAC,GAAA,EAAK;AACR,QAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,sCAAsC,CAAA;AAC5D,QAAA,GAAA,CAAI,IAAA,GAAO,oBAAA;AACX,QAAA,MAAM,GAAA;AAAA,MACR;AAGA,MAAA,MAAM,WAAA,GAAc,GAAA,CAAI,YAAA,CAAa,GAAA,CAAI,aAAa,CAAA;AACtD,MAAA,IAAI,CAAC,WAAA,EAAa;AAChB,QAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,8CAA8C,CAAA;AACpE,QAAA,GAAA,CAAI,IAAA,GAAO,oBAAA;AACX,QAAA,MAAM,GAAA;AAAA,MACR;AAGA,MAAA,MAAM,cAAA,GAAiB,CAAA,aAAA,EAAgB,WAAA,CAAY,WAAA,EAAa,CAAA,CAAA;AAChE,MAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CAAO,cAAc,CAAA;AAC/C,MAAA,IAAI,CAAC,UAAA,EAAY;AACf,QAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,CAAA,wDAAA,EAA2D,cAAc,CAAA,yBAAA,CAA2B,CAAA;AAC1H,QAAA,GAAA,CAAI,IAAA,GAAO,8BAAA;AACX,QAAA,MAAM,GAAA;AAAA,MACR;AAEA,MAAA,OAAO,EAAE,YAAY,GAAA,EAAI;AAAA,IAC3B;AAEA,IAAA,SAAS,WAAY,OAAA,EAAS;AAC5B,MAAA,IAAI,iBAAA,GAAoB,IAAA;AAExB,MAAA,IAAI,WAAW,OAAA,CAAQ,IAAA,IAAQ,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,EAAG;AACtD,QAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAG;AAC/B,UAAA,KAAA,MAAW,QAAA,IAAY,QAAQ,IAAA,EAAM;AACnC,YAAA,IAAI,EAAA,CAAG,UAAA,CAAW,QAAQ,CAAA,EAAG;AAC3B,cAAA,iBAAA,GAAoB,SAAS,QAAA,CAAS,QAAQ,CAAA,GAAI,QAAA,GAAW,GAAG,QAAQ,CAAA,MAAA,CAAA;AAAA,YAC1E;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,iBAAA,GAAoB,OAAA,CAAQ,KAAK,QAAA,CAAS,QAAQ,IAAI,OAAA,CAAQ,IAAA,GAAO,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA,MAAA,CAAA;AAAA,QACtF;AAAA,MACF,CAAA,MAAO;AACL,QAAA,iBAAA,GAAoB,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,YAAY,CAAA;AAAA,MAC9D;AAEA,MAAA,IAAI,EAAA,CAAG,UAAA,CAAW,iBAAiB,CAAA,EAAG;AACpC,QAAA,OAAO,iBAAA;AAAA,MACT;AAEA,MAAA,OAAO,IAAA;AAAA,IACT;AAEA,IAAA,SAAS,aAAc,OAAA,EAAS;AAC9B,MAAA,OAAO,OAAA,CAAQ,CAAC,CAAA,KAAM,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,EAAA,CAAG,OAAA,EAAQ,EAAG,OAAA,CAAQ,KAAA,CAAM,CAAC,CAAC,CAAA,GAAI,OAAA;AAAA,IAC1E;AAEA,IAAA,SAAS,aAAc,OAAA,EAAS;AAC9B,MAAA,MAAM,QAAQ,YAAA,CAAa,OAAA,CAAQ,IAAI,mBAAA,IAAwB,OAAA,IAAW,QAAQ,KAAM,CAAA;AACxF,MAAA,MAAM,QAAQ,YAAA,CAAa,OAAA,CAAQ,IAAI,mBAAA,IAAwB,OAAA,IAAW,QAAQ,KAAM,CAAA;AAExF,MAAA,IAAI,KAAA,IAAS,CAAC,KAAA,EAAO;AACnB,QAAA,IAAA,CAAK,uCAAuC,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAM,MAAA,GAAS,YAAA,CAAa,WAAA,CAAY,OAAO,CAAA;AAE/C,MAAA,IAAI,aAAa,OAAA,CAAQ,GAAA;AACzB,MAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,UAAA,IAAc,IAAA,EAAM;AACzC,QAAA,UAAA,GAAa,OAAA,CAAQ,UAAA;AAAA,MACvB;AAEA,MAAA,YAAA,CAAa,QAAA,CAAS,UAAA,EAAY,MAAA,EAAQ,OAAO,CAAA;AAEjD,MAAA,OAAO,EAAE,MAAA,EAAO;AAAA,IAClB;AAEA,IAAA,SAAS,aAAc,OAAA,EAAS;AAC9B,MAAA,MAAM,aAAa,IAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,MAAM,CAAA;AACrD,MAAA,IAAI,QAAA,GAAW,MAAA;AACf,MAAA,IAAI,aAAa,OAAA,CAAQ,GAAA;AACzB,MAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,UAAA,IAAc,IAAA,EAAM;AACzC,QAAA,UAAA,GAAa,OAAA,CAAQ,UAAA;AAAA,MACvB;AACA,MAAA,IAAI,QAAQ,YAAA,CAAa,UAAA,CAAW,mBAAA,IAAwB,OAAA,IAAW,QAAQ,KAAM,CAAA;AACrF,MAAA,IAAI,QAAQ,YAAA,CAAa,UAAA,CAAW,mBAAA,IAAwB,OAAA,IAAW,QAAQ,KAAM,CAAA;AAErF,MAAA,IAAI,OAAA,IAAW,QAAQ,QAAA,EAAU;AAC/B,QAAA,QAAA,GAAW,OAAA,CAAQ,QAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,MAAA,CAAO,oDAAoD,CAAA;AAAA,QAC7D;AAAA,MACF;AAEA,MAAA,IAAI,WAAA,GAAc,CAAC,UAAU,CAAA;AAC7B,MAAA,IAAI,OAAA,IAAW,QAAQ,IAAA,EAAM;AAC3B,QAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAI,CAAA,EAAG;AAChC,UAAA,WAAA,GAAc,CAAC,YAAA,CAAa,OAAA,CAAQ,IAAI,CAAC,CAAA;AAAA,QAC3C,CAAA,MAAO;AACL,UAAA,WAAA,GAAc,EAAC;AACf,UAAA,KAAA,MAAW,QAAA,IAAY,QAAQ,IAAA,EAAM;AACnC,YAAA,WAAA,CAAY,IAAA,CAAK,YAAA,CAAa,QAAQ,CAAC,CAAA;AAAA,UACzC;AAAA,QACF;AAAA,MACF;AAIA,MAAA,IAAI,SAAA;AACJ,MAAA,MAAM,YAAY,EAAC;AACnB,MAAA,KAAA,MAAWC,SAAQ,WAAA,EAAa;AAC9B,QAAA,IAAI;AAEF,UAAA,MAAM,MAAA,GAAS,aAAa,KAAA,CAAM,EAAA,CAAG,aAAaA,KAAAA,EAAM,EAAE,QAAA,EAAU,CAAC,CAAA;AAErE,UAAA,YAAA,CAAa,QAAA,CAAS,SAAA,EAAW,MAAA,EAAQ,OAAO,CAAA;AAAA,QAClD,SAAS,CAAA,EAAG;AACV,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,MAAA,CAAO,CAAA,eAAA,EAAkBA,KAAI,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,UAC9C;AACA,UAAA,SAAA,GAAY,CAAA;AAAA,QACd;AAAA,MACF;AAEA,MAAA,MAAM,SAAA,GAAY,YAAA,CAAa,QAAA,CAAS,UAAA,EAAY,WAAW,OAAO,CAAA;AAGtE,MAAA,KAAA,GAAQ,YAAA,CAAa,UAAA,CAAW,mBAAA,IAAuB,KAAK,CAAA;AAC5D,MAAA,KAAA,GAAQ,YAAA,CAAa,UAAA,CAAW,mBAAA,IAAuB,KAAK,CAAA;AAE5D,MAAA,IAAI,KAAA,IAAS,CAAC,KAAA,EAAO;AACnB,QAAA,MAAM,SAAA,GAAY,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA,CAAE,MAAA;AACzC,QAAA,MAAM,aAAa,EAAC;AACpB,QAAA,KAAA,MAAW,YAAY,WAAA,EAAa;AAClC,UAAA,IAAI;AACF,YAAA,MAAM,WAAW,IAAA,CAAK,QAAA,CAAS,OAAA,CAAQ,GAAA,IAAO,QAAQ,CAAA;AACtD,YAAA,UAAA,CAAW,KAAK,QAAQ,CAAA;AAAA,UAC1B,SAAS,CAAA,EAAG;AACV,YAAA,IAAI,KAAA,EAAO;AACT,cAAA,MAAA,CAAO,CAAA,eAAA,EAAkB,QAAQ,CAAA,CAAA,EAAI,CAAA,CAAE,OAAO,CAAA,CAAE,CAAA;AAAA,YAClD;AACA,YAAA,SAAA,GAAY,CAAA;AAAA,UACd;AAAA,QACF;AAEA,QAAA,IAAA,CAAK,CAAA,eAAA,EAAkB,SAAS,CAAA,OAAA,EAAU,UAAA,CAAW,KAAK,GAAG,CAAC,CAAA,CAAA,EAAI,GAAA,CAAI,CAAA,QAAA,EAAW,aAAA,EAAe,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA;AAAA,MACvG;AAEA,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,OAAO,EAAE,MAAA,EAAQ,SAAA,EAAW,KAAA,EAAO,SAAA,EAAU;AAAA,MAC/C,CAAA,MAAO;AACL,QAAA,OAAO,EAAE,QAAQ,SAAA,EAAU;AAAA,MAC7B;AAAA,IACF;AAGA,IAAA,SAAS,OAAQ,OAAA,EAAS;AAExB,MAAA,IAAI,UAAA,CAAW,OAAO,CAAA,CAAE,MAAA,KAAW,CAAA,EAAG;AACpC,QAAA,OAAO,YAAA,CAAa,aAAa,OAAO,CAAA;AAAA,MAC1C;AAEA,MAAA,MAAM,SAAA,GAAY,WAAW,OAAO,CAAA;AAGpC,MAAA,IAAI,CAAC,SAAA,EAAW;AACd,QAAA,KAAA,CAAM,CAAA,4DAAA,EAA+D,SAAS,CAAA,6BAAA,CAA+B,CAAA;AAE7G,QAAA,OAAO,YAAA,CAAa,aAAa,OAAO,CAAA;AAAA,MAC1C;AAEA,MAAA,OAAO,YAAA,CAAa,aAAa,OAAO,CAAA;AAAA,IAC1C;AAEA,IAAA,SAAS,OAAA,CAAS,WAAW,MAAA,EAAQ;AACnC,MAAA,MAAM,MAAM,MAAA,CAAO,IAAA,CAAK,OAAO,KAAA,CAAM,GAAG,GAAG,KAAK,CAAA;AAChD,MAAA,IAAI,UAAA,GAAa,MAAA,CAAO,IAAA,CAAK,SAAA,EAAW,QAAQ,CAAA;AAEhD,MAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA;AACvC,MAAA,MAAM,OAAA,GAAU,UAAA,CAAW,QAAA,CAAS,GAAG,CAAA;AACvC,MAAA,UAAA,GAAa,UAAA,CAAW,QAAA,CAAS,EAAA,EAAI,GAAG,CAAA;AAExC,MAAA,IAAI;AACF,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,gBAAA,CAAiB,aAAA,EAAe,KAAK,KAAK,CAAA;AAChE,QAAA,MAAA,CAAO,WAAW,OAAO,CAAA;AACzB,QAAA,OAAO,CAAA,EAAG,OAAO,MAAA,CAAO,UAAU,CAAC,CAAA,EAAG,MAAA,CAAO,OAAO,CAAA,CAAA;AAAA,MACtD,SAAS,KAAA,EAAO;AACd,QAAA,MAAM,UAAU,KAAA,YAAiB,UAAA;AACjC,QAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,KAAY,oBAAA;AAC3C,QAAA,MAAM,gBAAA,GAAmB,MAAM,OAAA,KAAY,kDAAA;AAE3C,QAAA,IAAI,WAAW,gBAAA,EAAkB;AAC/B,UAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,6DAA6D,CAAA;AACnF,UAAA,GAAA,CAAI,IAAA,GAAO,oBAAA;AACX,UAAA,MAAM,GAAA;AAAA,QACR,WAAW,gBAAA,EAAkB;AAC3B,UAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,iDAAiD,CAAA;AACvE,UAAA,GAAA,CAAI,IAAA,GAAO,mBAAA;AACX,UAAA,MAAM,GAAA;AAAA,QACR,CAAA,MAAO;AACL,UAAA,MAAM,KAAA;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAGA,IAAA,SAAS,QAAA,CAAU,UAAA,EAAY,MAAA,EAAQ,OAAA,GAAU,EAAC,EAAG;AACnD,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,KAAK,CAAA;AAC9C,MAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,QAAQ,CAAA;AACpD,MAAA,MAAM,YAAY,EAAC;AAEnB,MAAA,IAAI,OAAO,WAAW,QAAA,EAAU;AAC9B,QAAA,MAAM,GAAA,GAAM,IAAI,KAAA,CAAM,gFAAgF,CAAA;AACtG,QAAA,GAAA,CAAI,IAAA,GAAO,iBAAA;AACX,QAAA,MAAM,GAAA;AAAA,MACR;AAGA,MAAA,KAAA,MAAW,GAAA,IAAO,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA,EAAG;AACrC,QAAA,IAAI,OAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,UAAA,EAAY,GAAG,CAAA,EAAG;AACzD,UAAA,IAAI,aAAa,IAAA,EAAM;AACrB,YAAA,UAAA,CAAW,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAC5B,YAAA,SAAA,CAAU,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,UAC7B;AAEA,UAAA,IAAI,KAAA,EAAO;AACT,YAAA,IAAI,aAAa,IAAA,EAAM;AACrB,cAAA,MAAA,CAAO,CAAA,CAAA,EAAI,GAAG,CAAA,wCAAA,CAA0C,CAAA;AAAA,YAC1D,CAAA,MAAO;AACL,cAAA,MAAA,CAAO,CAAA,CAAA,EAAI,GAAG,CAAA,4CAAA,CAA8C,CAAA;AAAA,YAC9D;AAAA,UACF;AAAA,QACF,CAAA,MAAO;AACL,UAAA,UAAA,CAAW,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAC5B,UAAA,SAAA,CAAU,GAAG,CAAA,GAAI,MAAA,CAAO,GAAG,CAAA;AAAA,QAC7B;AAAA,MACF;AAEA,MAAA,OAAO,SAAA;AAAA,IACT;AAEA,IAAA,IAAM,YAAA,GAAe;AAAA,MACnB,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AAEA,IAAA,MAAA,CAAO,OAAA,CAAQ,eAAe,YAAA,CAAa,YAAA;AAC3C,IAAA,MAAA,CAAO,OAAA,CAAQ,eAAe,YAAA,CAAa,YAAA;AAC3C,IAAA,MAAA,CAAO,OAAA,CAAQ,cAAc,YAAA,CAAa,WAAA;AAC1C,IAAA,MAAA,CAAO,OAAA,CAAQ,SAAS,YAAA,CAAa,MAAA;AACrC,IAAA,MAAA,CAAO,OAAA,CAAQ,UAAU,YAAA,CAAa,OAAA;AACtC,IAAA,MAAA,CAAO,OAAA,CAAQ,QAAQ,YAAA,CAAa,KAAA;AACpC,IAAA,MAAA,CAAO,OAAA,CAAQ,WAAW,YAAA,CAAa,QAAA;AAEvC,IAAA,MAAA,CAAO,OAAA,GAAU,YAAA;AAAA,EAAA;AAAA,CAAA,CAAA;;;ACjbjB,IAAAC,gBAAAA,GAAA,UAAA,CAAA;AAAA,EAAA,cAAA,CAAAF,SAAA,EAAA,MAAA,EAAA;AAAA,IAAA,MAAA,CAAA,OAAA,GAAA;AAAA,MACE,IAAA,EAAQ,gBAAA;AAAA,MACR,OAAA,EAAW,OAAA;AAAA,MACX,WAAA,EAAe,8DAAA;AAAA,MACf,MAAA,EAAU,QAAA;AAAA,MACV,OAAA,EAAW,KAAA;AAAA,MACX,IAAA,EAAQ,QAAA;AAAA,MACR,IAAA,EAAQ,eAAA;AAAA,MACR,KAAA,EAAS,iBAAA;AAAA,MACT,GAAA,EAAO;AAAA,QACL,gBAAA,EAAkB;AAAA,OACpB;AAAA,MACA,OAAA,EAAW;AAAA,QACT,GAAA,EAAO,wBAAA;AAAA,QACP,KAAA,EAAS,MAAA;AAAA,QACT,KAAA,EAAS,oBAAA;AAAA,QACT,KAAA,EAAS,aAAA;AAAA,QACT,SAAA,EAAa,cAAA;AAAA,QACb,IAAA,EAAQ,sBAAA;AAAA,QACR,UAAA,EAAY,4BAAA;AAAA,QACZ,MAAA,EAAU,oBAAA;AAAA,QACV,cAAA,EAAgB,oBAAA;AAAA,QAChB,KAAA,EAAS,2DAAA;AAAA,QACT,WAAA,EAAa,oDAAA;AAAA,QACb,cAAA,EAAkB,gCAAA;AAAA,QAClB,SAAA,EAAa,wDAAA;AAAA,QACb,eAAA,EAAiB,+EAAA;AAAA,QACjB,WAAA,EAAa,kCAAA;AAAA,QACb,IAAA,EAAQ,QAAA;AAAA,QACR,UAAA,EAAY,YAAA;AAAA,QACZ,eAAA,EAAiB,uBAAA;AAAA,QACjB,YAAA,EAAc,cAAA;AAAA,QACd,SAAA,EAAW,aAAA;AAAA,QACX,iBAAA,EAAmB,kCAAA;AAAA,QACnB,cAAA,EAAgB,kCAAA;AAAA,QAChB,YAAA,EAAc,oCAAA;AAAA,QACd,aAAA,EAAe;AAAA,OACjB;AAAA,MACA,QAAA,EAAY;AAAA,QACV,KAAA;AAAA,QACA,wBAAA;AAAA,QACA,MAAA;AAAA,QACA,WAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,OAAA,EAAW;AAAA,QACT,IAAA,EAAQ;AAAA,OACV;AAAA,MACA,YAAA,EAAgB;AAAA,QACd,2BAAA,EAA6B,SAAA;AAAA,QAC7B,KAAA,EAAS,QAAA;AAAA,QACT,WAAA,EAAa,QAAA;AAAA,QACb,GAAA,EAAO;AAAA,OACT;AAAA,MACA,eAAA,EAAmB;AAAA,QACjB,aAAA,EAAe,SAAA;AAAA,QACf,kCAAA,EAAoC,QAAA;AAAA,QACpC,2BAAA,EAA6B,QAAA;AAAA,QAC7B,qBAAA,EAAuB,SAAA;AAAA,QACvB,YAAA,EAAc,SAAA;AAAA,QACd,MAAA,EAAU,SAAA;AAAA,QACV,MAAA,EAAU,QAAA;AAAA,QACV,wBAAA,EAA0B,QAAA;AAAA,QAC1B,wBAAA,EAA0B,QAAA;AAAA,QAC1B,QAAA,EAAY,QAAA;AAAA,QACZ,IAAA,EAAQ,QAAA;AAAA,QACR,GAAA,EAAO,SAAA;AAAA,QACP,UAAA,EAAc,QAAA;AAAA,QACd,MAAA,EAAU;AAAA,OACZ;AAAA,MACA,KAAA,EAAS;AAAA,QACP,MAAA;AAAA,QACA,WAAA;AAAA,QACA,SAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,UAAA,EAAc;AAAA,QACZ,IAAA,EAAQ,KAAA;AAAA,QACR,GAAA,EAAO;AAAA,OACT;AAAA,MACA,IAAA,EAAQ;AAAA,QACN,GAAA,EAAO;AAAA,OACT;AAAA,MACA,QAAA,EAAY,iDAAA;AAAA,MACZ,aAAA,EAAiB;AAAA,QACf,MAAA,EAAU;AAAA,OACZ;AAAA,MACA,SAAA,EAAa;AAAA,QACX,IAAA,EAAQ,UAAA;AAAA,QACR,MAAA,EAAU;AAAA;AACZ,KACF;AAAA,EAAA;AAAA,CAAA,CAAA;;;AC7FO,IAAM,WAAA,GAAc;AAAA,EAEzB,SAAA,EAAW,aAAA;AAAA,EACX,eAAA,EAAiB,GAAA;AAAA,EACjB,WAAA,EAAa,CAAA;AAAA,EACb,WAAA,EAAa,GAKf,CAAA;AAEO,IAAM,cAAA,GAAiB;AAAA,EAC5B,aAAA,EACE,wGAAA;AAAA,EACF,mBAAA,EAAqB,kEAAA;AAAA,EAGrB,mBAAA,EAAqB,0DAAA;AAAA,EACrB,aAAA,EAAe,kDAAA;AAAA,EACf,gBAAA,EAAkB;AACpB,CAAA;AAEO,IAAM,UAAA,GAAa;AAAA,EACxB,oBAAA,EAAsB,2BAAA;AAAA,EACtB,SAAA,EAAW,gBAAA;AAAA,EACX,aAAA,EAAe,oBAAA;AAAA,EACf,aAAA,EAAe,oBAAA;AAAA,EACf,eAAA,EAAiB,sBAAA;AAAA,EACjB,SAAA,EAAW,gBAAA;AAAA,EACX,cAAA,EAAgB,qBAAA;AAAA,EAChB,YAAA,EAAc,mBAAA;AAAA,EACd,YAAA,EAAc,mBAAA;AAAA,EACd,YAAA,EAAc,mBAAA;AAAA,EACd,WAAA,EAAa,kBAAA;AAAA,EACb,gBAAA,EAAkB,uBAAA;AAAA,EAClB,cAAA,EAAgB,qBAAA;AAAA,EAChB,eAAA,EAAiB,sBAAA;AAAA,EACjB,iBAAA,EAAmB,wBAAA;AAAA,EACnB,iBAAA,EAAmB;AACrB,CAAA;;;ACtCA,IAAM,MAAA,GAAmC;AAAA,EACvC,KAAA,EAAO,EAAA;AAAA,EACP,IAAA,EAAM,EAAA;AAAA,EACN,IAAA,EAAM,EAAA;AAAA,EACN,KAAA,EAAO,EAAA;AAAA,EACP,MAAA,EAAQ;AACV,CAAA;AAEA,SAAS,QAAA,GAAqB;AAC5B,EAAA,MAAM,GAAA,GAAA,CACJ,OAAA,CAAQ,GAAA,CAAI,SAAA,KAAc,OAAA,CAAQ,IAAI,QAAA,KAAa,aAAA,GAAgB,OAAA,GAAU,MAAA,CAAA,EAC7E,WAAA,EAAY;AACd,EAAA,IAAI,GAAA,KAAQ,WAAW,GAAA,KAAQ,MAAA,IAAU,QAAQ,MAAA,IAAU,GAAA,KAAQ,WAAW,GAAA,KAAQ,QAAA;AACpF,IAAA,OAAO,GAAA;AACT,EAAA,OAAO,MAAA;AACT;AAEO,SAAS,aAAa,KAAA,EAAe;AAC1C,EAAA,MAAM,QAAQ,QAAA,EAAS;AACvB,EAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AAExB,EAAA,MAAM,GAAA,GAAM,CAAC,GAAA,KAAc,OAAO,QAAQ,QAAA,GAAW,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,GAAG,CAAA;AAC7E,EAAA,MAAM,MAAA,GAAS,CAAC,GAAA,KAAgB,CAAA,CAAA,EAAI,IAAI,WAAA,EAAa,KAAK,KAAK,CAAA,CAAA,CAAA;AAE/D,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,IAAI,IAAA,KAAgB;AACzB,MAAA,IAAI,GAAA,IAAO,MAAA,CAAO,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,EAAG,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,IAAA,EAAM,IAAI,IAAA,KAAgB;AACxB,MAAA,IAAI,GAAA,IAAO,MAAA,CAAO,IAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,EAAG,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,IAAA,EAAM,IAAI,IAAA,KAAgB;AACxB,MAAA,IAAI,GAAA,IAAO,MAAA,CAAO,IAAA,EAAM,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,EAAG,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,IACxE,CAAA;AAAA,IACA,KAAA,EAAO,IAAI,IAAA,KAAgB;AACzB,MAAA,IAAI,GAAA,IAAO,MAAA,CAAO,KAAA,EAAO,OAAA,CAAQ,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA,EAAG,GAAG,IAAA,CAAK,GAAA,CAAI,GAAG,CAAC,CAAA;AAAA,IAC1E;AAAA,GACF;AACF;;;AClCA,IAAI,UAAA,GAAmC,IAAA;AACvC,IAAM,GAAA,GAAM,aAAa,WAAW,CAAA;AAE7B,SAAS,YAAA,GAA+B;AAC7C,EAAA,MAAM,OAAA,GAAU,QAAQ,GAAA,CAAI,aAAA;AAC5B,EAAA,MAAM,KAAA,GAAQ,QAAQ,GAAA,CAAI,UAAA;AAC1B,EAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,CAAI,cAAA;AAE7B,EAAA,IAAI,CAAC,OAAA,IAAW,CAAC,KAAA,IAAS,CAAC,QAAA,EAAU;AACnC,IAAA,MAAM,IAAI,KAAA,CAAM,cAAA,CAAe,aAAa,CAAA;AAAA,EAC9C;AAGA,EAAA,MAAM,iBAAA,GAAoB,QAAQ,QAAA,CAAS,GAAG,IAAI,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA,GAAI,OAAA;AAEzE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,iBAAA;AAAA,IACT,KAAA;AAAA,IACA;AAAA,GACF;AACF;AAEO,SAAS,sBAAA,GAAwC;AACtD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,UAAA;AAAA,EACT;AAEA,EAAA,MAAM,OAAO,YAAA,EAAa;AAE1B,EAAA,UAAA,GAAa,MAAM,MAAA,CAAO;AAAA,IACxB,SAAS,CAAA,EAAG,IAAA,CAAK,OAAO,CAAA,EAAG,YAAY,SAAS,CAAA,CAAA;AAAA,IAChD,SAAS,WAAA,CAAY,eAAA;AAAA,IACrB,OAAA,EAAS;AAAA,MACP,MAAA,EAAQ,kBAAA;AAAA,MACR,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA,IAAA,EAAM;AAAA,MACJ,UAAU,IAAA,CAAK,KAAA;AAAA,MACf,UAAU,IAAA,CAAK;AAAA;AACjB,GACD,CAAA;AAGD,EAAA,UAAA,CAAW,aAAa,OAAA,CAAQ,GAAA;AAAA,IAC9B,CAAC,MAAA,KAAW;AACV,MAAA,GAAA,CAAI,KAAA,CAAM,CAAA,SAAA,EAAY,MAAA,CAAO,MAAA,EAAQ,WAAA,EAAa,CAAA,CAAA,EAAI,MAAA,CAAO,OAAO,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AACnF,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,KAAA,KAAU;AACT,MAAA,GAAA,CAAI,KAAA,CAAM,kBAAkB,KAAK,CAAA;AACjC,MAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IAC7B;AAAA,GACF;AAGA,EAAA,UAAA,CAAW,aAAa,QAAA,CAAS,GAAA;AAAA,IAC/B,CAAC,QAAA,KAAa;AACZ,MAAA,GAAA,CAAI,KAAA,CAAM,aAAa,QAAA,CAAS,MAAM,IAAI,QAAA,CAAS,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAC/D,MAAA,OAAO,QAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,KAAA,KAAU;AACT,MAAA,GAAA,CAAI,KAAA,CAAM,mBAAmB,KAAA,CAAM,QAAA,EAAU,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,MAAA,EAAQ,GAAG,CAAA,CAAE,CAAA;AAE1E,MAAA,IAAI,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AAClC,QAAA,MAAM,IAAI,KAAA,CAAM,cAAA,CAAe,mBAAmB,CAAA;AAAA,MACpD,CAAA,MAAA,IAAW,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AACzC,QAAA,MAAM,IAAI,MAAM,gDAAgD,CAAA;AAAA,MAClE,CAAA,MAAA,IAAW,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AACzC,QAAA,MAAM,IAAI,KAAA,CAAM,cAAA,CAAe,mBAAmB,CAAA;AAAA,MACpD,CAAA,MAAA,IAAW,CAAC,KAAA,CAAM,QAAA,EAAU;AAC1B,QAAA,MAAM,IAAI,KAAA,CAAM,cAAA,CAAe,aAAa,CAAA;AAAA,MAC9C;AAEA,MAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IAC7B;AAAA,GACF;AAEA,EAAA,OAAO,UAAA;AACT;AAEA,eAAsB,eAAA,CACpB,QACA,WAAA,GAA2B;AAAA,EACzB,YAAY,WAAA,CAAY,WAAA;AAAA,EACxB,YAAY,WAAA,CAAY;AAC1B,CAAA,EACY;AACZ,EAAA,MAAM,SAAS,sBAAA,EAAuB;AACtC,EAAA,IAAI,SAAA;AAEJ,EAAA,KAAA,IAAS,OAAA,GAAU,CAAA,EAAG,OAAA,IAAW,WAAA,CAAY,YAAY,OAAA,EAAA,EAAW;AAClE,IAAA,IAAI;AACF,MAAA,MAAM,QAAA,GAAW,MAAM,MAAA,CAAO,OAAA,CAAW,MAAM,CAAA;AAC/C,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,SAAS,KAAA,EAAY;AACnB,MAAA,SAAA,GAAY,KAAA;AAGZ,MAAA,IACE,KAAA,CAAM,UAAU,MAAA,KAAW,GAAA,IAC3B,MAAM,QAAA,EAAU,MAAA,KAAW,GAAA,IAC3B,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,OAC1B,KAAA,CAAM,QAAA,EAAU,MAAA,IAAU,GAAA,IACzB,KAAA,CAAM,QAAA,EAAU,SAAS,GAAA,IACzB,KAAA,CAAM,QAAA,EAAU,MAAA,KAAW,GAAA,EAC7B;AACA,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,YAAY,cAAA,IAAkB,CAAC,WAAA,CAAY,cAAA,CAAe,KAAK,CAAA,EAAG;AACpE,QAAA;AAAA,MACF;AAGA,MAAA,IAAI,OAAA,KAAY,YAAY,UAAA,EAAY;AACtC,QAAA;AAAA,MACF;AAGA,MAAA,MAAM,gBAAA,GAAmB,KAAA,CAAM,QAAA,EAAU,OAAA,GAAU,aAAa,CAAA;AAChE,MAAA,IAAI,OAAA,GAAU,CAAA;AACd,MAAA,IAAI,gBAAA,EAAkB;AACpB,QAAA,MAAM,OAAA,GAAU,OAAO,gBAAgB,CAAA;AACvC,QAAA,OAAA,GAAU,CAAC,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,GAAI,OAAA,GAAU,MAAO,WAAA,CAAY,UAAA;AAAA,MAClE,CAAA,MAAO;AACL,QAAA,MAAM,OAAO,WAAA,CAAY,UAAA,GAAa,IAAA,CAAK,GAAA,CAAI,GAAG,OAAO,CAAA;AACzD,QAAA,MAAM,MAAA,GAAS,KAAK,KAAA,CAAM,IAAA,CAAK,QAAO,IAAK,WAAA,CAAY,aAAa,CAAA,CAAE,CAAA;AACtE,QAAA,OAAA,GAAU,IAAA,GAAO,MAAA;AAAA,MACnB;AACA,MAAA,GAAA,CAAI,IAAA;AAAA,QACF,uBAAuB,OAAO,CAAA,YAAA,EAAe,UAAU,CAAC,CAAA,CAAA,EAAI,YAAY,UAAU,CAAA,CAAA;AAAA,OACpF;AACA,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,OAAO,CAAC,CAAA;AAAA,IAC7D;AAAA,EACF;AAEA,EAAA,MAAM,SAAA;AACR;AC7IO,SAAS,aAAA,CAAiB,QAAsB,KAAA,EAAmB;AACxE,EAAA,IAAI;AACF,IAAA,OAAO,MAAA,CAAO,MAAM,KAAK,CAAA;AAAA,EAC3B,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,KAAA,YAAiB,EAAE,QAAA,EAAU;AAC/B,MAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,CAAC,GAAA,KAAQ,CAAA,EAAG,GAAA,CAAI,IAAA,CAAK,KAAK,GAAG,CAAC,CAAA,EAAA,EAAK,GAAA,CAAI,OAAO,CAAA,CAAE,CAAA;AACvF,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,EAAG,cAAA,CAAe,gBAAgB;AAAA,EAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,IACnF;AACA,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAEO,SAAS,gBAAgB,GAAA,EAAsB;AAEpD,EAAA,OAAO,sBAAA,CAAuB,KAAK,GAAG,CAAA;AACxC;AAEO,SAAS,kBAAkB,GAAA,EAAsB;AAEtD,EAAA,OAAO,sBAAA,CAAuB,KAAK,GAAG,CAAA;AACxC;AAOO,SAAS,YAAY,GAAA,EAAqB;AAE/C,EAAA,OAAO,GAAA,CACJ,QAAQ,UAAA,EAAY,EAAE,EACtB,OAAA,CAAQ,MAAA,EAAQ,GAAG,CAAA,CACnB,IAAA,EAAK;AACV;AAYO,SAAS,gBAAgB,KAAA,EAA8B;AAC5D,EAAA,IAAI,OAAO,KAAA,KAAU,QAAA,EAAU,OAAO,IAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,CAAM,oBAAoB,CAAA;AAC9C,EAAA,OAAO,KAAA,GAAQ,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA;AAC5B;;;AChDO,IAAM,6BAAA,GAAgCG,EAAE,MAAA,CAAO;AAAA,EACpD,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,uCAAuC,CAAA;AAAA,EACvF,QAAQA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qCAAqC;AAC9E,CAAC,CAAA;AAKM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,UAAUA,CAAAA,CACP,MAAA,EAAO,CACP,GAAA,CAAI,CAAC,CAAA,CACL,QAAA;AAAA,IACC;AAAA,GACF;AAAA,EACF,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,qCAAqC,CAAA;AAAA,EACrF,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B;AAC/E,CAAC,CAAA;AAKM,IAAM,uBAAA,GAA0BA,EAAE,MAAA,CAAO;AAAA,EAC9C,GAAA,EAAKA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,kBAAkB,CAAA;AAAA,EAClD,aAAA,EAAeA,CAAAA,CACZ,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,IACC;AAAA,GACF;AAAA,EACF,UAAA,EAAYA,CAAAA,CACT,MAAA,EAAO,CACP,IAAI,CAAC,CAAA,CACL,GAAA,CAAI,GAAG,CAAA,CACP,OAAA,CAAQ,EAAE,CAAA,CACV,SAAS,8CAA8C,CAAA;AAAA,EAC1D,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,EAC7E,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+BAA+B;AACjF,CAAC,CAAA;AAKM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,UAAA,EAAYA,CAAAA,CACT,MAAA,EAAO,CACP,QAAA,CAAS,6CAA6C,CAAA,CACtD,MAAA,CAAO,CAAC,CAAA,KAAM,iBAAA,CAAkB,CAAC,GAAG,4BAA4B,CAAA;AAAA,EACnE,OAAA,EAASA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,qBAAqB,CAAA;AAAA,EACzD,WAAA,EAAaA,CAAAA,CACV,KAAA,CAAM,CAACA,EAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,GAAA,EAAK,CAAC,CAAA,CAC3B,QAAA,EAAS,CACT,SAAS,sDAAsD,CAAA;AAAA,EAClE,SAAA,EAAWA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,qCAAqC,CAAA;AAAA,EACpE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,gBAAgB,CAAA;AAAA,EACzD,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,EAC9D,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,cAAc,CAAA;AAAA,EAC9D,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,iBAAiB,CAAA;AAAA,EACrE,YAAA,EAAcA,EACX,MAAA,CAAOA,CAAAA,CAAE,KAAK,CAAA,CACd,UAAS,CACT,QAAA;AAAA,IACC;AAAA,GACF;AAAA,EACF,aAAaA,CAAAA,CACV,OAAA,GACA,QAAA,EAAS,CACT,SAAS,qDAAqD,CAAA;AAAA,EACjE,MAAA,EAAQA,CAAAA,CACL,IAAA,CAAK,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAC,CAAA,CACjC,QAAA,EAAS,CACT,OAAA,CAAQ,UAAU,CAAA,CAClB,QAAA;AAAA,IACC;AAAA;AAEN,CAAC,CAAA;AAKM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,QAAA,EAAUA,CAAAA,CACP,MAAA,EAAO,CACP,QAAA,CAAS,qBAAqB,CAAA,CAC9B,MAAA,CAAO,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAC,GAAG,0BAA0B,CAAA;AAAA,EAC/D,SAASA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,aAAa,CAAA;AAAA,EACrD,WAAA,EAAaA,CAAAA,CACV,KAAA,CAAM,CAACA,EAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,GAAA,EAAK,CAAC,CAAA,CAC3B,QAAA,EAAS,CACT,SAAS,oDAAoD,CAAA;AAAA,EAChE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,cAAc,CAAA;AAAA,EACvD,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,yBAAyB,CAAA;AAAA,EAClE,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,gCAAgC,CAAA;AAAA,EAChF,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,oCAAoC,CAAA;AAAA,EACxF,aAAaA,CAAAA,CAAE,OAAA,GAAU,QAAA,EAAS,CAAE,SAAS,mDAAmD,CAAA;AAAA,EAChG,MAAA,EAAQA,CAAAA,CACL,IAAA,CAAK,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAC,CAAA,CACjC,QAAA,EAAS,CACT,OAAA,CAAQ,UAAU,CAAA,CAClB,QAAA;AAAA,IACC;AAAA;AAEN,CAAC,CAAA;AAKM,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,aAAA,EAAeA,CAAAA,CACZ,MAAA,EAAO,CACP,UAAS,CACT,QAAA;AAAA,IACC;AAAA,GACF;AAAA,EACF,UAAA,EAAYA,CAAAA,CACT,MAAA,EAAO,CACP,IAAI,CAAC,CAAA,CACL,GAAA,CAAI,GAAG,CAAA,CACP,OAAA,CAAQ,EAAE,CAAA,CACV,SAAS,8CAA8C,CAAA;AAAA,EAC1D,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,6BAA6B,CAAA;AAAA,EAC7E,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,+BAA+B;AACjF,CAAC,CAAA;AAKM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC/C,YAAYA,CAAAA,CACT,MAAA,EAAO,CACP,QAAA,GACA,QAAA,CAAS,qDAAqD,CAAA,CAC9D,MAAA,CAAO,CAAC,CAAA,KAAO,CAAA,GAAI,kBAAkB,CAAC,CAAA,GAAI,MAAO,4BAA4B;AAClF,CAAC,CAAA;AAKM,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EAC1C,OAAOA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qCAAqC,CAAA;AAAA,EAC3E,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,iCAAiC,CAAA;AAAA,EAC1E,WAAWA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,mCAAmC,CAAA;AAAA,EAC7E,OAAA,EAASA,CAAAA,CAAE,MAAA,EAAO,CAAE,GAAA,CAAI,CAAC,CAAA,CAAE,OAAA,CAAQ,CAAC,CAAA,CAAE,QAAA,CAAS,iCAAiC,CAAA;AAAA,EAChF,UAAA,EAAYA,CAAAA,CAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,GAAA,CAAI,EAAE,CAAA,CAAE,OAAA,CAAQ,EAAE,CAAA,CAAE,SAAS,qCAAqC;AAClG,CAAC,CAAA;AAKM,IAAM,wBAAA,GAA2BA,CAAAA,CAAE,MAAA,CAAO,EAAE,CAAA;AAK5C,IAAM,sBAAA,GAAyBA,EAAE,MAAA,CAAO;AAAA,EAC7C,YAAYA,CAAAA,CACT,MAAA,EAAO,CACP,QAAA,GACA,QAAA,CAAS,kDAAkD,CAAA,CAC3D,MAAA,CAAO,CAAC,CAAA,KAAO,CAAA,GAAI,kBAAkB,CAAC,CAAA,GAAI,MAAO,4BAA4B,CAAA;AAAA,EAChF,aAAaA,CAAAA,CACV,MAAA,GACA,QAAA,EAAS,CACT,SAAS,uDAAuD;AACrE,CAAC,CAAA;AAKM,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EAC5C,QAAA,EAAUA,CAAAA,CACP,MAAA,EAAO,CACP,QAAA,CAAS,6BAA6B,CAAA,CACtC,MAAA,CAAO,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAC,GAAG,0BAA0B,CAAA;AAAA,EAC/D,IAAA,EAAMA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,mBAAmB,CAAA;AAAA,EACpD,UAAA,EAAYA,EACT,MAAA,CAAO;AAAA,IACN,IAAA,EAAMA,EAAE,IAAA,CAAK,CAAC,SAAS,MAAM,CAAC,CAAA,CAAE,QAAA,CAAS,iBAAiB,CAAA;AAAA,IAC1D,KAAA,EAAOA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,yBAAyB;AAAA,GACrD,CAAA,CACA,QAAA,EAAS,CACT,SAAS,iCAAiC,CAAA;AAAA,EAC7C,MAAA,EAAQA,CAAAA,CACL,IAAA,CAAK,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAC,CAAA,CACjC,QAAA,EAAS,CACT,OAAA,CAAQ,UAAU,CAAA,CAClB,QAAA;AAAA,IACC;AAAA;AAEN,CAAC,CAAA;AAKM,IAAM,yBAAA,GAA4BA,EAAE,MAAA,CAAO;AAAA,EAChD,UAAA,EAAYA,CAAAA,CACT,MAAA,EAAO,CACP,QAAA,CAAS,6CAA6C,CAAA,CACtD,MAAA,CAAO,CAAC,CAAA,KAAM,iBAAA,CAAkB,CAAC,GAAG,4BAA4B,CAAA;AAAA,EACnE,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,uCAAuC;AACzF,CAAC,CAAA;AAKM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC/C,cAAA,EAAgBA,CAAAA,CAAE,MAAA,EAAO,CAAE,SAAS,kBAAkB,CAAA;AAAA,EACtD,OAAA,EAASA,EAAE,MAAA,EAAO,CAAE,IAAI,CAAC,CAAA,CAAE,SAAS,uBAAuB,CAAA;AAAA,EAC3D,WAAA,EAAaA,CAAAA,CACV,KAAA,CAAM,CAACA,EAAE,MAAA,EAAO,EAAGA,CAAAA,CAAE,GAAA,EAAK,CAAC,CAAA,CAC3B,QAAA,EAAS,CACT,SAAS,wDAAwD,CAAA;AAAA,EACpE,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,kBAAkB,CAAA;AAAA,EAC3D,UAAUA,CAAAA,CAAE,MAAA,GAAS,QAAA,EAAS,CAAE,SAAS,qBAAqB,CAAA;AAAA,EAC9D,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,gBAAgB,CAAA;AAAA,EAChE,UAAA,EAAYA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,QAAA,EAAS,CAAE,QAAA,CAAS,iBAAiB,CAAA;AAAA,EACrE,MAAA,EAAQA,CAAAA,CACL,IAAA,CAAK,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAC,CAAA,CACjC,QAAA,EAAS,CACT,OAAA,CAAQ,UAAU,CAAA,CAClB,QAAA;AAAA,IACC;AAAA;AAEN,CAAC,CAAA;AAKM,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EAC/C,UAAA,EAAYA,CAAAA,CACT,MAAA,EAAO,CACP,QAAA,CAAS,wCAAwC,CAAA,CACjD,MAAA,CAAO,CAAC,CAAA,KAAM,iBAAA,CAAkB,CAAC,GAAG,4BAA4B,CAAA;AAAA,EACnE,eAAeA,CAAAA,CACZ,MAAA,GACA,QAAA,EAAS,CACT,SAAS,yDAAyD;AACvE,CAAC,CAAA;AAKM,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,YAAYA,CAAAA,CACT,MAAA,EAAO,CACP,QAAA,GACA,QAAA,CAAS,gDAAgD,CAAA,CACzD,MAAA,CAAO,CAAC,CAAA,KAAO,CAAA,GAAI,kBAAkB,CAAC,CAAA,GAAI,MAAO,4BAA4B;AAClF,CAAC,CAAA;AAKM,IAAM,0BAAA,GAA6BA,EAAE,MAAA,CAAO;AAAA,EACjD,SAAA,EAAWA,CAAAA,CACR,MAAA,EAAO,CACP,QAAA,CAAS,kBAAkB,CAAA,CAC3B,MAAA,CAAO,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAC,GAAG,0BAA0B,CAAA;AAAA,EAC/D,OAAA,EAASA,CAAAA,CACN,MAAA,EAAO,CACP,QAAA,CAAS,kBAAkB,CAAA,CAC3B,MAAA,CAAO,CAAC,CAAA,KAAM,eAAA,CAAgB,CAAC,GAAG,0BAA0B,CAAA;AAAA,EAC/D,QAAA,EAAUA,CAAAA,CACP,MAAA,EAAO,CACP,QAAA;AAAA,IACC;AAAA;AAEN,CAAC,CAAA;ACtPD,SAAS,oBAAA,CAAqB,IAAA,EAAW,MAAA,GAAuC,UAAA,EAAiB;AAC/F,EAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAClB,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,IAAA;AACrC,EAAA,IAAI,OAAO,IAAA,KAAS,QAAA,EAAU,OAAO,IAAA;AAGrC,EAAA,IAAI,WAAW,UAAA,EAAY;AACzB,IAAA,IAAI;AACF,MAAA,OAAO,QAAQ,IAAI,CAAA;AAAA,IACrB,SAAS,KAAA,EAAO;AAEd,MAAA,OAAA,CAAQ,IAAA,CAAK,kEAAkE,KAAK,CAAA;AACpF,MAAA,MAAA,GAAS,OAAA;AAAA,IACX;AAAA,EACF;AAGA,EAAA,IAAI,WAAW,KAAA,EAAO;AACpB,IAAA,OAAO,IAAA;AAAA,EACT;AAKA,EAAA,MAAM,QAAA,GAAW,qBAAA;AAEjB,EAAA,MAAM,aAAA,GAAgB,CAAC,IAAA,KAAwB;AAC7C,IAAA,MAAM,QAAe,EAAC;AACtB,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,IAAI,KAAA;AACJ,IAAA,OAAA,CAAQ,KAAA,GAAQ,QAAA,CAAS,IAAA,CAAK,IAAI,OAAO,IAAA,EAAM;AAC7C,MAAA,MAAM,CAAC,GAAG,CAAA,GAAI,KAAA;AACd,MAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,KAAK,KAAA,CAAM,SAAA,EAAW,KAAK,CAAA,EAAG,CAAA;AAAA,MACjE;AACA,MAAA,KAAA,CAAM,KAAK,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,GAAA,EAAK,OAAO,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAO,EAAE,IAAA,EAAM,KAAI,EAAG,GAAG,CAAA;AACvF,MAAA,SAAA,GAAY,QAAQ,GAAA,CAAI,MAAA;AAAA,IAC1B;AACA,IAAA,IAAI,SAAA,GAAY,KAAK,MAAA,EAAQ;AAC3B,MAAA,KAAA,CAAM,IAAA,CAAK,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,IAAA,CAAK,KAAA,CAAM,SAAS,CAAA,EAAG,CAAA;AAAA,IAC1D;AACA,IAAA,OAAO,KAAA,CAAM,SAAS,KAAA,GAAQ,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,CAAA;AAAA,EACvD,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,OAAO,CAAA;AAChC,EAAA,MAAM,UAAiB,EAAC;AAExB,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,IAAA,MAAM,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACxB,IAAA,MAAM,IAAA,GAAO,IAAI,OAAA,EAAQ;AACzB,IAAA,IAAI,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,KAAW,CAAA,EAAG;AAE5B,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,IAAI,CAAA;AAC/C,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,cAAA,GAAiB,0BAAA,CAA2B,IAAA,CAAK,IAAI,CAAA;AAC3D,IAAA,IAAI,cAAA,EAAgB,QAAQ,KAAA,EAAO;AACjC,MAAA,MAAM,KAAA,GAAQ,CAAA,EAAG,cAAA,CAAe,MAAA,CAAO,KAAK,CAAA,CAAA,CAAA;AAC5C,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,KAAA,EAAO,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,GAAG;AAAA,OACrE,CAAA;AACD,MAAA,CAAA,EAAA;AAGA,MAAA,IAAI,mBAAmB,IAAA,CAAK,cAAA,CAAe,OAAO,KAAA,CAAM,IAAA,EAAM,CAAA,EAAG;AAC/D,QAAA,MAAM,YAAsB,EAAC;AAC7B,QAAA,OAAO,CAAA,GAAI,KAAA,CAAM,MAAA,IAAA,CAAW,KAAA,CAAM,CAAC,KAAK,EAAA,EAAI,IAAA,EAAK,CAAE,MAAA,GAAS,CAAA,EAAG;AAC7D,UAAA,SAAA,CAAU,IAAA,CAAK,KAAA,CAAM,CAAC,CAAW,CAAA;AACjC,UAAA,CAAA,EAAA;AAAA,QACF;AACA,QAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,UAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,YACX,IAAA,EAAM,WAAA;AAAA,YACN,KAAA,EAAO,EAAE,QAAA,EAAU,EAAA,EAAG;AAAA,YACtB,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,SAAA,CAAU,IAAA,CAAK,IAAI,CAAA,EAAG;AAAA,WACvD,CAAA;AAAA,QACH;AAAA,MACF;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1B,MAAA,MAAM,QAAe,EAAC;AACtB,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACxB,QAAA,IAAI,CAAC,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA,EAAG;AAC5B,QAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAC5C,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,UAAA;AAAA,UACN,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,aAAA,CAAc,QAAQ,CAAA,EAAG;AAAA,SAClE,CAAA;AACD,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,OAAO,CAAA;AACpD,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,cAAA,CAAe,IAAA,CAAK,IAAI,CAAA,EAAG;AAC7B,MAAA,MAAM,QAAe,EAAC;AACtB,MAAA,OAAO,CAAA,GAAI,MAAM,MAAA,EAAQ;AACvB,QAAA,MAAM,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,IAAK,EAAA;AACxB,QAAA,IAAI,CAAC,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA,EAAG;AAC/B,QAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,cAAA,EAAgB,EAAE,CAAA;AAC/C,QAAA,KAAA,CAAM,IAAA,CAAK;AAAA,UACT,IAAA,EAAM,UAAA;AAAA,UACN,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,aAAA,CAAc,QAAQ,CAAA,EAAG;AAAA,SAClE,CAAA;AACD,QAAA,CAAA,EAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,KAAK,EAAE,IAAA,EAAM,YAAA,EAAc,OAAA,EAAS,OAAO,CAAA;AACnD,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,UAAA,GACJ,2EAAA,CAA4E,IAAA,CAAK,IAAI,CAAA;AACvF,IAAA,IAAI,UAAA,EAAY,MAAA,EAAQ,KAAA,IAAS,UAAA,CAAW,OAAO,KAAA,EAAO;AACxD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS;AAAA,UACP,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,GAAG,UAAA,CAAW,MAAA,CAAO,KAAK,CAAA,CAAA,CAAA,EAAK,OAAO,CAAC,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA,EAAE;AAAA,UACjF,EAAE,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,GAAA,EAAI;AAAA,UAC1B,GAAG,aAAA,CAAc,UAAA,CAAW,MAAA,CAAO,KAAK;AAAA;AAC1C,OACD,CAAA;AACD,MAAA,CAAA,EAAA;AACA,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,MAAM,IAAA,CAAK,IAAI,KAAK,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA,EAAG;AAChD,MAAA,OAAA,CAAQ,IAAA,CAAK;AAAA,QACX,IAAA,EAAM,WAAA;AAAA,QACN,OAAA,EAAS,CAAC,EAAE,IAAA,EAAM,QAAQ,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAG;AAAA,OAClE,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,IAAA,CAAK,EAAE,IAAA,EAAM,WAAA,EAAa,SAAS,aAAA,CAAc,IAAI,GAAG,CAAA;AAAA,IAClE;AACA,IAAA,CAAA,EAAA;AAAA,EACF;AAEA,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,OAAA,EAAS,GAAG,OAAA,EAAQ;AAC5C;AAEA,eAAsB,kBAAA,CACpB,OAAA,GAGI,EAAC,EACmB;AACxB,EAAA,MAAM,cAA6B,EAAC;AACpC,EAAA,IAAI,OAAA,GAAU,CAAA;AACd,EAAA,IAAI,MAAA,GAAS,KAAA;AAGb,EAAA,OAAO,CAAC,MAAA,EAAQ;AACd,IAAA,MAAM,MAAA,GAA8B;AAAA,MAClC,OAAA;AAAA,MACA,UAAA,EAAY;AAAA;AAAA,KACd;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAO,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,MAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,IAC1B;AAEA,IAAA,MAAM,MAAA,GAA6B;AAAA,MACjC,MAAA,EAAQ,KAAA;AAAA,MACR,GAAA,EAAK,iBAAA;AAAA,MACL;AAAA,KACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAgD,MAAM,CAAA;AAE7E,IAAA,WAAA,CAAY,IAAA,CAAK,GAAG,QAAA,CAAS,MAAM,CAAA;AACnC,IAAA,MAAA,GAAS,QAAA,CAAS,MAAA;AAClB,IAAA,OAAA,IAAW,QAAA,CAAS,UAAA;AAAA,EACtB;AAEA,EAAA,OAAO,WAAA;AACT;AAEA,eAAsB,QAAA,CACpB,QAAA,EACA,OAAA,GAGI,EAAC,EACe;AACpB,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,MAAA,CAAO,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,EACzC;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,MAAA,CAAO,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,EACzC;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR,GAAA,EAAK,UAAU,QAAQ,CAAA,CAAA;AAAA,IACvB;AAAA,GACF;AAEA,EAAA,OAAO,MAAM,gBAA2B,MAAM,CAAA;AAChD;AAEA,eAAsB,aAAa,OAAA,EAML;AAC5B,EAAA,MAAM,EAAE,GAAA,EAAK,aAAA,EAAe,UAAA,GAAa,IAAG,GAAI,OAAA;AAGhD,EAAA,MAAM,YAAA,GAAe,YAAY,GAAG,CAAA;AAEpC,EAAA,MAAM,IAAA,GAA4B;AAAA,IAChC,GAAA,EAAK,YAAA;AAAA,IACL;AAAA,GACF;AAEA,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,IAAA,CAAK,aAAA,GAAgB,aAAA;AAAA,EACvB;AAEA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,IAAA,CAAK,SAAS,OAAA,CAAQ,MAAA;AAAA,EACxB;AAEA,EAAA,IAAI,OAAA,CAAQ,MAAA,IAAU,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AAE/C,IAAA,IAAA,CAAK,MAAA,GAAS,OAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,EACvC;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA,EAAK,aAAA;AAAA,IACL;AAAA,GACF;AAEA,EAAA,OAAO,MAAM,gBAAkC,MAAM,CAAA;AACvD;AAEA,eAAsB,YACpB,SAAA,EAYA,OAAA,GAAqC,EAAE,WAAA,EAAa,MAAK,EAC5B;AAC7B,EAAA,MAAM,MAAA,GAA8B;AAAA,IAClC,OAAA,EAAS,EAAE,GAAA,EAAK,SAAA,CAAU,UAAA,EAAW;AAAA,IACrC,SAAS,SAAA,CAAU,OAAA;AAAA,IACnB,SAAA,EAAW,EAAE,IAAA,EAAM,SAAA,CAAU,SAAA;AAAU,GACzC;AAEA,EAAA,IAAI,SAAA,CAAU,gBAAgB,MAAA,EAAW;AACvC,IAAA,MAAA,CAAO,WAAA,GAAc,oBAAA;AAAA,MACnB,SAAA,CAAU,WAAA;AAAA,MACV,UAAU,MAAA,IAAU;AAAA,KACtB;AAAA,EACF;AAEA,EAAA,IAAI,UAAU,QAAA,EAAU;AACtB,IAAA,MAAA,CAAO,QAAA,GAAW,EAAE,IAAA,EAAM,SAAA,CAAU,QAAA,EAAS;AAAA,EAC/C;AAEA,EAAA,IAAI,UAAU,QAAA,EAAU;AACtB,IAAA,MAAA,CAAO,QAAA,GAAW,EAAE,SAAA,EAAW,SAAA,CAAU,QAAA,EAAS;AAAA,EACpD;AAEA,EAAA,IAAI,SAAA,CAAU,MAAA,IAAU,SAAA,CAAU,MAAA,CAAO,SAAS,CAAA,EAAG;AACnD,IAAA,MAAA,CAAO,SAAS,SAAA,CAAU,MAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,SAAA,CAAU,UAAA,IAAc,SAAA,CAAU,UAAA,CAAW,SAAS,CAAA,EAAG;AAC3D,IAAA,MAAA,CAAO,UAAA,GAAa,UAAU,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,MAAK,CAAE,CAAA;AAAA,EACnE;AAGA,EAAA,IAAI,SAAA,CAAU,YAAA,IAAgB,OAAO,SAAA,CAAU,iBAAiB,QAAA,EAAU;AACxE,IAAA,KAAA,MAAW,CAAC,KAAK,KAAK,CAAA,IAAK,OAAO,OAAA,CAAQ,SAAA,CAAU,YAAY,CAAA,EAAG;AAEjE,MAAA,IAAI,EAAE,OAAO,MAAA,CAAA,EAAS;AACpB,QAAA,MAAA,CAAO,GAAG,CAAA,GAAI,KAAA;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM,EAAE,MAAA;AAAO,GACjB;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAA2D,MAAM,CAAA;AAExF,EAAA,IAAI,OAAA,CAAQ,gBAAgB,KAAA,EAAO;AACjC,IAAA,OAAO,QAAA,CAAS,GAAA;AAAA,EAClB;AAGA,EAAA,OAAO,MAAM,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA;AACpC;AAEA,eAAsB,WAAA,CACpB,UACA,OAAA,EASe;AACf,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,IAAA,MAAA,CAAO,UAAU,OAAA,CAAQ,OAAA;AAAA,EAC3B;AAEA,EAAA,IAAI,OAAA,CAAQ,gBAAgB,MAAA,EAAW;AACrC,IAAA,MAAA,CAAO,cAAc,oBAAA,CAAqB,OAAA,CAAQ,WAAA,EAAa,OAAA,CAAQ,UAAU,UAAU,CAAA;AAAA,EAC7F;AAEA,EAAA,IAAI,OAAA,CAAQ,aAAa,MAAA,EAAW;AAClC,IAAA,MAAA,CAAO,QAAA,GAAW,EAAE,IAAA,EAAM,OAAA,CAAQ,QAAA,EAAS;AAAA,EAC7C;AAEA,EAAA,IAAI,OAAA,CAAQ,aAAa,MAAA,EAAW;AAClC,IAAA,MAAA,CAAO,WAAW,OAAA,CAAQ,QAAA,GAAW,EAAE,SAAA,EAAW,OAAA,CAAQ,UAAS,GAAI,IAAA;AAAA,EACzE;AAEA,EAAA,IAAI,OAAA,CAAQ,WAAW,MAAA,EAAW;AAChC,IAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,EAC1B;AAEA,EAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAW;AACpC,IAAA,MAAA,CAAO,UAAA,GAAa,QAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,MAAK,CAAE,CAAA;AAAA,EACjE;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR,GAAA,EAAK,UAAU,QAAQ,CAAA,CAAA;AAAA,IACvB,IAAA,EAAM,EAAE,MAAA;AAAO,GACjB;AAEA,EAAA,MAAM,gBAAgB,MAAM,CAAA;AAC9B;AAWA,eAAsB,WAAA,CACpB,OAAA,GAKI,EAAC,EACsB;AAC3B,EAAA,MAAM,GAAA,GAAM,CAAA,8CAAA,CAAA;AAEZ,EAAA,MAAM,YAAA,GAAoB;AAAA,IACxB,GAAA;AAAA,IACA,UAAA,EAAY,QAAQ,UAAA,IAAc;AAAA,GACpC;AAEA,EAAA,IAAI,OAAA,CAAQ,aAAA,KAAkB,MAAA,EAAW,YAAA,CAAa,gBAAgB,OAAA,CAAQ,aAAA;AAC9E,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAW,YAAA,CAAa,SAAS,OAAA,CAAQ,MAAA;AAChE,EAAA,IAAI,OAAA,CAAQ,MAAA,KAAW,MAAA,EAAW,YAAA,CAAa,SAAS,OAAA,CAAQ,MAAA;AAEhE,EAAA,OAAO,MAAM,aAAa,YAAY,CAAA;AACxC;AAEA,eAAsB,cAAc,UAAA,EAA+C;AACjF,EAAA,IAAI,GAAA,GAAM,YAAA;AAEV,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,GAAA,GAAM,YAAY,UAAU,CAAA,UAAA,CAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR;AAAA,GACF;AAEA,EAAA,OAAO,MAAM,gBAAiC,MAAM,CAAA;AACtD;AAEA,eAAsB,QAAA,CACpB,OAAA,GAMI,EAAC,EACgB;AACrB,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,MAAA,CAAO,QAAQ,OAAA,CAAQ,KAAA;AAAA,EACzB;AAEA,EAAA,IAAI,QAAQ,QAAA,EAAU;AACpB,IAAA,MAAA,CAAO,WAAW,OAAA,CAAQ,QAAA;AAAA,EAC5B;AAEA,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,MAAA,CAAO,YAAY,OAAA,CAAQ,SAAA;AAAA,EAC7B;AAEA,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,IAAA,MAAA,CAAO,UAAU,OAAA,CAAQ,OAAA;AAAA,EAC3B;AAEA,EAAA,IAAI,OAAA,CAAQ,eAAe,MAAA,EAAW;AACpC,IAAA,MAAA,CAAO,aAAa,OAAA,CAAQ,UAAA;AAAA,EAC9B;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR,GAAA,EAAK,cAAA;AAAA,IACL;AAAA,GACF;AAEA,EAAA,OAAO,MAAM,gBAA4B,MAAM,CAAA;AACjD;AAEA,eAAsB,aAAA,GAAyC;AAC7D,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR,GAAA,EAAK;AAAA,GACP;AAEA,EAAA,OAAO,MAAM,gBAAgC,MAAM,CAAA;AACrD;AAEA,eAAsB,WAAA,CACpB,OAAA,GAGI,EAAC,EACkB;AACvB,EAAA,IAAI,GAAA,GAAM,SAAA;AAEV,EAAA,IAAI,OAAA,CAAQ,UAAA,IAAc,OAAA,CAAQ,WAAA,EAAa;AAC7C,IAAA,GAAA,GAAM,CAAA,SAAA,EAAY,QAAQ,UAAU,CAAA,SAAA,CAAA;AAAA,EACtC,CAAA,MAAA,IAAW,QAAQ,UAAA,EAAY;AAC7B,IAAA,GAAA,GAAM,CAAA,SAAA,EAAY,QAAQ,UAAU,CAAA,SAAA,CAAA;AAAA,EACtC;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR;AAAA,GACF;AAEA,EAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,IAAA,MAAM,QAAA,GACJ,MAAM,eAAA,CAA8E,MAAM,CAAA;AAC5F,IAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,MAAA,MAAM,QAAQ,QAAA,CAAS,IAAA;AAAA,QACrB,CAAC,cACC,SAAA,CAAU,EAAA,KAAO,QAAQ,WAAA,IAAe,SAAA,CAAU,SAAS,OAAA,CAAQ;AAAA,OACvE;AACA,MAAA,IAAI,KAAA,SAAc,KAAA,CAAM,QAAA;AAAA,IAC1B;AAEA,IAAA,OAAO,QAAA,CAAS,OAAA,CAAQ,CAAC,SAAA,KAAc,UAAU,QAAQ,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,MAAM,gBAA8B,MAAM,CAAA;AACnD;AAEA,eAAsB,UAAA,CACpB,QAAA,EACA,IAAA,EACA,UAAA,EACA,MAAA,EACsB;AAEtB,EAAA,MAAM,OAAA,GAAU,oBAAA,CAAqB,IAAA,EAAM,MAAA,IAAU,UAAU,CAAA;AAE/D,EAAA,MAAM,IAAA,GAAY;AAAA,IAChB,IAAA,EAAM;AAAA,GACR;AAEA,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAA,CAAK,UAAA,GAAa,UAAA;AAAA,EACpB;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA,EAAK,UAAU,QAAQ,CAAA,QAAA,CAAA;AAAA,IACvB;AAAA,GACF;AAEA,EAAA,OAAO,MAAM,gBAA6B,MAAM,CAAA;AAClD;AAEA,eAAsB,iBAAA,CACpB,YACA,MAAA,EAC6B;AAC7B,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,EACjC;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR,GAAA,EAAK,YAAY,UAAU,CAAA,CAAA;AAAA,IAC3B;AAAA,GACF;AAEA,EAAA,OAAO,MAAM,gBAAoC,MAAM,CAAA;AACzD;AAEA,eAAsB,aAAA,CACpB,gBACA,WAAA,EASoB;AAEpB,EAAA,MAAM,WAAA,GAAc,MAAM,QAAA,CAAS,cAAc,CAAA;AACjD,EAAA,MAAM,UAAA,GAAa,WAAA,CAAY,MAAA,CAAO,OAAA,CAAQ,GAAA;AAG9C,EAAA,MAAM,UAAA,GAAa,MAAM,aAAA,CAAc,UAAU,CAAA;AACjD,EAAA,MAAM,cAAc,UAAA,CAAW,IAAA,CAAK,CAAC,IAAA,KAAS,KAAK,OAAO,CAAA;AAE1D,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wCAAA,EAA2C,UAAU,CAAA,CAAE,CAAA;AAAA,EACzE;AAEA,EAAA,MAAM,MAAA,GAA8B;AAAA,IAClC,OAAA,EAAS,EAAE,GAAA,EAAK,UAAA,EAAW;AAAA,IAC3B,MAAA,EAAQ,EAAE,GAAA,EAAK,cAAA,EAAe;AAAA,IAC9B,SAAS,WAAA,CAAY,OAAA;AAAA,IACrB,SAAA,EAAW,EAAE,EAAA,EAAI,WAAA,CAAY,EAAA;AAAG,GAClC;AAEA,EAAA,IAAI,WAAA,CAAY,gBAAgB,MAAA,EAAW;AACzC,IAAA,MAAA,CAAO,WAAA,GAAc,oBAAA;AAAA,MACnB,WAAA,CAAY,WAAA;AAAA,MACZ,YAAY,MAAA,IAAU;AAAA,KACxB;AAAA,EACF;AAEA,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,MAAA,CAAO,QAAA,GAAW,EAAE,IAAA,EAAM,WAAA,CAAY,QAAA,EAAS;AAAA,EACjD;AAEA,EAAA,IAAI,YAAY,QAAA,EAAU;AACxB,IAAA,MAAA,CAAO,QAAA,GAAW,EAAE,SAAA,EAAW,WAAA,CAAY,QAAA,EAAS;AAAA,EACtD;AAEA,EAAA,IAAI,WAAA,CAAY,MAAA,IAAU,WAAA,CAAY,MAAA,CAAO,SAAS,CAAA,EAAG;AACvD,IAAA,MAAA,CAAO,SAAS,WAAA,CAAY,MAAA;AAAA,EAC9B;AAEA,EAAA,IAAI,WAAA,CAAY,UAAA,IAAc,WAAA,CAAY,UAAA,CAAW,SAAS,CAAA,EAAG;AAC/D,IAAA,MAAA,CAAO,UAAA,GAAa,YAAY,UAAA,CAAW,GAAA,CAAI,CAAC,IAAA,MAAU,EAAE,MAAK,CAAE,CAAA;AAAA,EACrE;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM,EAAE,MAAA;AAAO,GACjB;AAEA,EAAA,MAAM,QAAA,GAAW,MAAM,eAAA,CAAyC,MAAM,CAAA;AAGtE,EAAA,OAAO,MAAM,QAAA,CAAS,QAAA,CAAS,GAAG,CAAA;AACpC;AAEA,eAAsB,aAAA,CACpB,OAAA,GAII,EAAC,EAC4B;AAGjC,EAAA,MAAM,SAA8B,EAAC;AAErC,EAAA,IAAI,OAAA,CAAQ,WAAA,IAAe,OAAA,CAAQ,WAAA,CAAY,SAAS,CAAA,EAAG;AACzD,IAAA,MAAA,CAAO,WAAA,GAAc,OAAA,CAAQ,WAAA,CAAY,IAAA,CAAK,GAAG,CAAA;AAAA,EACnD;AAEA,EAAA,IAAI,OAAA,CAAQ,cAAA,IAAkB,OAAA,CAAQ,cAAA,CAAe,SAAS,CAAA,EAAG;AAC/D,IAAA,MAAA,CAAO,cAAA,GAAiB,OAAA,CAAQ,cAAA,CAAe,IAAA,CAAK,GAAG,CAAA;AAAA,EACzD;AAGA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,MAAA,CAAO,SAAS,OAAA,CAAQ,MAAA;AAAA,EAC1B;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR,GAAA,EAAK,mBAAA;AAAA,IACL;AAAA,GACF;AAEA,EAAA,OAAO,MAAM,gBAAwC,MAAM,CAAA;AAC7D;AAEA,eAAsB,SAAA,GAAkC;AACtD,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,KAAA;AAAA,IACR,GAAA,EAAK;AAAA,GACP;AAEA,EAAA,OAAO,MAAM,gBAA6B,MAAM,CAAA;AAClD;AAEA,eAAsB,eAAA,CACpB,SAAA,EACA,OAAA,EACA,QAAA,EACe;AAGf,EAAA,MAAM,WAAA,GAAsC;AAAA,IAC1C,MAAA,EAAQ,QAAA;AAAA,IACR,eAAA,EAAiB,QAAA;AAAA,IACjB,OAAA,EAAS,SAAA;AAAA,IACT,YAAA,EAAc,SAAA;AAAA,IACd,UAAA,EAAY,WAAA;AAAA,IACZ,SAAA,EAAW,WAAA;AAAA,IACX,kBAAA,EAAoB,WAAA;AAAA,IACpB,MAAA,EAAQ,SAAA;AAAA,IACR,cAAA,EAAgB;AAAA,GAClB;AAEA,EAAA,MAAM,kBAAA,GAAqB,SAAS,WAAA,EAAY;AAChD,EAAA,MAAM,YAAA,GAAe,WAAA,CAAY,kBAAkB,CAAA,IAAK,QAAA;AAKxD,EAAA,MAAM,QAAA,GACJ,kBAAA,KAAuB,eAAA,IACvB,kBAAA,KAAuB,sBACvB,kBAAA,KAAuB,cAAA;AAEzB,EAAA,MAAM,IAAA,GAAY;AAAA,IAChB,IAAA,EAAM;AAAA,MACJ,IAAA,EAAM;AAAA;AACR,GACF;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,IAAA,CAAK,WAAA,GAAc,EAAE,GAAA,EAAK,SAAA,EAAU;AACpC,IAAA,IAAA,CAAK,YAAA,GAAe,EAAE,GAAA,EAAK,OAAA,EAAQ;AAAA,EACrC,CAAA,MAAO;AACL,IAAA,IAAA,CAAK,YAAA,GAAe,EAAE,GAAA,EAAK,SAAA,EAAU;AACrC,IAAA,IAAA,CAAK,WAAA,GAAc,EAAE,GAAA,EAAK,OAAA,EAAQ;AAAA,EACpC;AAEA,EAAA,MAAM,MAAA,GAA6B;AAAA,IACjC,MAAA,EAAQ,MAAA;AAAA,IACR,GAAA,EAAK,YAAA;AAAA,IACL;AAAA,GACF;AAEA,EAAA,MAAM,gBAAgB,MAAM,CAAA;AAC9B;;;AC9tBO,SAAS,kBAAA,GAA8B;AAC5C,EAAA,MAAM,GAAA,GAAM,OAAA,CAAQ,GAAA,CAAI,oBAAA,IAAwB,QAAQ,GAAA,CAAI,gBAAA;AAC5D,EAAA,OAAO,GAAA,KAAQ,GAAA,IAAO,GAAA,EAAK,WAAA,EAAY,KAAM,MAAA;AAC/C;AAEO,SAAS,qBAAqB,SAAA,EAAmC;AACtE,EAAA,IAAI,CAAC,WAAW,OAAO,KAAA;AACvB,EAAA,IAAI,CAAC,kBAAA,EAAmB,EAAG,OAAO,SAAA;AAElC,EAAA,MAAM,IAAA,GAAO,SAAA,CAAU,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACjC,EAAA,OAAO,GAAG,IAAI,CAAA,MAAA,CAAA;AAChB;AAEO,SAAS,iBAAiB,KAAA,EAA+B;AAC9D,EAAA,IAAI,CAAC,OAAO,OAAO,KAAA;AACnB,EAAA,IAAI,CAAC,kBAAA,EAAmB,EAAG,OAAO,KAAA;AAClC,EAAA,OAAO,QAAA;AACT;;;ACDO,SAAS,uBAAuB,QAAA,EAA0C;AAC/E,EAAA,MAAM,eAAe,QAAA,CAClB,GAAA;AAAA,IACC,CAAC,OAAA,KACC,CAAA,SAAA,EAAO,QAAQ,GAAG,CAAA,KAAA,EAAQ,QAAQ,IAAI;AAAA,EAAA,EAAO,OAAA,CAAQ,eAAe,gBAAgB;AAAA,QAAA,EAAa,QAAQ,cAAc,CAAA,YAAA,EAAe,OAAA,CAAQ,SAAA,GAAY,QAAQ,IAAI,CAAA;AAAA,GAC1K,CACC,KAAK,MAAM,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA,MAAA,EAAS,QAAA,CAAS,MAAM,CAAA;;AAAA,EAA2B,YAAY,CAAA;AAAA;AACvE;AACF,GACF;AACF;AAEA,SAAS,eAAe,GAAA,EAAkB;AAExC,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,CAAC,IAAA,KAAsB;AAClC,MAAA,IAAI,CAAC,MAAM,OAAO,EAAA;AAClB,MAAA,QAAQ,KAAK,IAAA;AAAM,QACjB,KAAK,MAAA;AACH,UAAA,OAAO,KAAK,IAAA,IAAQ,EAAA;AAAA,QACtB,KAAK,WAAA;AAAA,QACL,KAAK,SAAA;AAAA,QACL,KAAK,YAAA;AACH,UAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,EAAC,EAAG,IAAI,IAAI,CAAA,CAAE,KAAK,EAAE,CAAA;AAAA,QAC/C,KAAK,WAAA;AACH,UAAA,OAAO,IAAA,GAAA,CAAQ,IAAA,CAAK,OAAA,IAAW,EAAC,EAAG,IAAI,IAAI,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA,GAAI,IAAA;AAAA,QAC1D,KAAK,YAAA;AAAA,QACL,KAAK,aAAA;AACH,UAAA,OAAA,CAAQ,IAAA,CAAK,WAAW,EAAC,EAAG,IAAI,IAAI,CAAA,CAAE,KAAK,IAAI,CAAA;AAAA,QACjD,KAAK,UAAA;AACH,UAAA,OAAO,SAAA,GAAA,CAAQ,KAAK,OAAA,IAAW,IAAI,GAAA,CAAI,IAAI,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AAAA,QACtD,KAAK,WAAA;AACH,UAAA,OAAO,IAAA;AAAA,QACT;AACE,UAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,EAAG,OAAO,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,IAAI,CAAA,CAAE,IAAA,CAAK,EAAE,CAAA;AACtE,UAAA,OAAO,EAAA;AAAA;AACX,IACF,CAAA;AACA,IAAA,IAAI,GAAA,IAAO,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,OAAO,CAAA,EAAG;AACrC,MAAA,OAAO,GAAA,CAAI,QAAQ,GAAA,CAAI,IAAI,EAAE,IAAA,CAAK,IAAI,EAAE,IAAA,EAAK;AAAA,IAC/C;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AACA,EAAA,OAAO,EAAA;AACT;AAEO,SAAS,oBAAoB,KAAA,EAAmC;AACrE,EAAA,MAAM,EAAE,GAAA,EAAK,MAAA,EAAO,GAAI,KAAA;AAExB,EAAA,MAAM,OAAA,GAAU,QAAQ,OAAA,IAAW,YAAA;AAEnC,EAAA,MAAM,YAAA,GAAe,MAAA,EAAQ,QAAA,GACzB,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAA,EAAK,oBAAA,CAAqB,MAAA,CAAO,QAAA,CAAS,SAAS,CAAC,CAAA,CAAA,CAAA,GAClF,YAAA;AAEJ,EAAA,MAAM,YAAA,GAAe,MAAA,EAAQ,QAAA,GACzB,CAAA,EAAG,MAAA,CAAO,QAAA,CAAS,WAAW,CAAA,EAAA,EAAK,oBAAA,CAAqB,MAAA,CAAO,QAAA,CAAS,SAAS,CAAC,CAAA,CAAA,CAAA,GAClF,SAAA;AAEJ,EAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,MAAA,EAAQ,MAAM,CAAA,GAAI,MAAA,CAAO,SAAS,EAAC;AACrE,EAAA,MAAM,aAAa,WAAA,CAAY,MAAA,GAAS,IAAI,WAAA,CAAY,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAErE,EAAA,MAAM,eAAA,GAAkB,MAAM,OAAA,CAAQ,MAAA,EAAQ,UAAU,CAAA,GAAI,MAAA,CAAO,aAAa,EAAC;AACjF,EAAA,MAAM,cAAA,GACJ,eAAA,CAAgB,MAAA,GAAS,CAAA,GAAI,eAAA,CAAgB,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAE/E,EAAA,IAAI,cAAc,MAAA,EAAQ,WAAA;AAC1B,EAAA,IAAI,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,EAAU;AAClD,IAAA,MAAM,MAAA,GAAS,eAAe,WAAW,CAAA;AACzC,IAAA,WAAA,GAAc,MAAA,IAAU,iCAAA;AAAA,EAC1B;AACA,EAAA,IAAI,CAAC,WAAA,IAAe,OAAO,WAAA,KAAgB,QAAA,EAAU;AACnD,IAAA,WAAA,GAAc,yBAAA;AAAA,EAChB;AAEA,EAAA,MAAM,WAAA,GAAc,QAAQ,OAAA,GAAU,IAAI,KAAK,MAAA,CAAO,OAAO,CAAA,CAAE,WAAA,EAAY,GAAI,KAAA;AAC/E,EAAA,MAAM,WAAA,GAAc,QAAQ,OAAA,GAAU,IAAI,KAAK,MAAA,CAAO,OAAO,CAAA,CAAE,WAAA,EAAY,GAAI,KAAA;AAE/E,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA,EAAA,EAAK,GAAG,CAAA,EAAA,EAAK,OAAO,CAAA;;AAAA,YAAA,EAAqB,MAAA,EAAQ,MAAA,EAAQ,IAAA,IAAQ,SAAS;AAAA,cAAA,EAAmB,MAAA,EAAQ,QAAA,EAAU,IAAA,IAAQ,MAAM;AAAA,cAAA,EAAmB,YAAY;AAAA,cAAA,EAAmB,YAAY;AAAA,aAAA,EAAkB,MAAA,EAAQ,SAAS,IAAA,IAAQ,SAAS,KAAK,MAAA,EAAQ,OAAA,EAAS,OAAO,KAAK,CAAA;AAAA,gBAAA,EAAsB,MAAA,EAAQ,SAAA,EAAW,IAAA,IAAQ,SAAS;AAAA,YAAA,EAAiB,UAAU;AAAA,gBAAA,EAAqB,cAAc;AAAA,aAAA,EAAkB,WAAW;AAAA,aAAA,EAAkB,WAAW;;AAAA;AAAA,EAAyB,WAAW,CAAA;AAAA;AAC/e;AACF,GACF;AACF;AAEO,SAAS,4BAA4B,MAAA,EAA2C;AACrF,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG;AAC9B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,MAAA,CACvB,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,EAAQ,QAAA,EAAU,WAAA,IAAe,YAAA;AACxD,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,MAAA,EAAQ,OAAA,IAAW,YAAA;AACzC,IAAA,MAAM,MAAA,GAAS,KAAA,CAAM,MAAA,EAAQ,MAAA,EAAQ,IAAA,IAAQ,SAAA;AAC7C,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,MAAA,EAAQ,QAAA,EAAU,IAAA,IAAQ,MAAA;AACjD,IAAA,OAAO,CAAA,SAAA,EAAO,KAAA,CAAM,GAAG,CAAA,KAAA,EAAQ,OAAO;AAAA,UAAA,EAAe,MAAM,CAAA,aAAA,EAAgB,QAAQ,CAAA,aAAA,EAAgB,QAAQ,CAAA,CAAA;AAAA,EAC7G,CAAC,CAAA,CACA,IAAA,CAAK,MAAM,CAAA;AAEd,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,KAAA,IAAS,MAAA,CAAO,MAAA,CAAO,MAAA;AAC5C,EAAA,MAAM,UAAA,GAAa,OAAO,OAAA,GAAU,CAAA;AACpC,EAAA,MAAM,WAAW,IAAA,CAAK,GAAA,CAAI,OAAO,OAAA,GAAU,MAAA,CAAO,YAAY,KAAK,CAAA;AACnE,EAAA,MAAM,eAAA,GAAkB,KAAA,GAAQ,MAAA,CAAO,UAAA,IAAc,OAAO,OAAA,GAAU,CAAA;AAGtE,EAAA,IAAI,cAAA,GAAiB,EAAA;AACrB,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,cAAA,GAAiB;;AAAA,SAAA,EAAgB,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,IAAA,EAAO,KAAK,CAAA,SAAA,CAAA;AAAA,EACrE;AAGA,EAAA,IAAI,MAAA,CAAO,aAAA,IAAiB,CAAC,MAAA,CAAO,MAAA,EAAQ;AAC1C,IAAA,cAAA,IAAkB;AAAA,oBAAA,EAAyB,OAAO,aAAa,CAAA,GAAA,CAAA;AAAA,EACjE,CAAA,MAAA,IAAW,OAAO,MAAA,EAAQ;AACxB,IAAA,cAAA,IAAkB,sCAAA;AAAA,EACpB;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA,MAAA,EAAS,KAAK,CAAA,SAAA,EAAY,eAAA,GAAkB,aAAa,UAAU,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA,CAAA,GAAM,EAAE,CAAA;;AAAA,EAAQ,UAAU,GAAG,cAAc,CAAA;AAAA;AAClI;AACF,GACF;AACF;AAEO,SAAS,oBAAoB,KAAA,EAA6B;AAC/D,EAAA,IAAI,YAAA,GAAe,+BAAA;AACnB,EAAA,IAAI,mBAAA,GAAsB,KAAA;AAE1B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,YAAA,GAAe,KAAA;AACf,IAAA,mBAAA,GAAsB,KAAA,CAAM,SAAS,cAAc,CAAA;AAAA,EACrD,CAAA,MAAA,IAAW,iBAAiB,KAAA,EAAO;AACjC,IAAA,YAAA,GAAe,KAAA,CAAM,OAAA;AACrB,IAAA,mBAAA,GAAsB,KAAA,CAAM,OAAA,CAAQ,QAAA,CAAS,cAAc,CAAA;AAAA,EAC7D,CAAA,MAAA,IAAW,KAAA,EAAO,QAAA,EAAU,IAAA,EAAM;AAChC,IAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA;AACjC,IAAA,IAAI,SAAA,CAAU,aAAA,IAAiB,SAAA,CAAU,aAAA,CAAc,SAAS,CAAA,EAAG;AACjE,MAAA,YAAA,GAAe,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,IAAI,CAAA;AAAA,IAClD,CAAA,MAAA,IAAW,UAAU,MAAA,EAAQ;AAC3B,MAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,MAAM,CAAA;AAC9C,MAAA,YAAA,GAAe,MAAA,CAAO,GAAA,CAAI,CAAC,CAAC,OAAO,OAAO,CAAA,KAAM,CAAA,EAAG,KAAK,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA,CAAE,KAAK,IAAI,CAAA;AAGjF,MAAA,mBAAA,GAAsB,MAAA,CAAO,KAAK,CAAC,CAAC,KAAK,CAAA,KAAM,KAAA,CAAM,UAAA,CAAW,cAAc,CAAC,CAAA;AAAA,IACjF;AAAA,EACF;AAGA,EAAA,IAAI,IAAA,GAAO,EAAA;AACX,EAAA,IAAI,mBAAA,EAAqB;AACvB,IAAA,IAAA,GAAO;;AAAA,qKAAA,CAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA,cAAA,EAAY,YAAY,CAAA,EAAG,IAAI,CAAA;AAAA;AACvC;AACF,GACF;AACF;AAEO,SAAS,sBAAsB,OAAA,EAAkC;AACtE,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,UAAK,OAAO,CAAA;AAAA;AACpB;AACF,GACF;AACF;AAEO,SAAS,oBAAoB,KAAA,EAAoC;AACtE,EAAA,IAAI,KAAA,CAAM,WAAW,CAAA,EAAG;AACtB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,KAAA,CACf,GAAA;AAAA,IACC,CAAC,SACC,CAAA,SAAA,EAAO,IAAA,CAAK,WAAW,CAAA,IAAA,EAAO,oBAAA,CAAqB,IAAA,CAAK,SAAS,CAAC,CAAA;AAAA,SAAA,EAAe,gBAAA,CAAiB,IAAA,CAAK,YAAY,CAAC,CAAA,WAAA,EAAc,IAAA,CAAK,MAAA,GAAS,KAAA,GAAQ,IAAI,CAAA,SAAA,EAAY,IAAA,CAAK,WAAW,CAAA;AAAA,GAC5L,CACC,KAAK,MAAM,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA,MAAA,EAAS,KAAA,CAAM,MAAM,CAAA;;AAAA,EAAgB,SAAS,CAAA;AAAA;AACtD;AACF,GACF;AACF;AAEO,SAAS,yBAAyB,UAAA,EAA8C;AACrF,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,YAAY,UAAA,CACf,GAAA;AAAA,IACC,CAAC,IAAA,KACC,CAAA,SAAA,EAAO,KAAK,IAAI,CAAA,QAAA,EAAW,KAAK,EAAE,CAAA;AAAA,EAAA,EAAQ,KAAK,WAAW;AAAA,WAAA,EAAgB,IAAA,CAAK,OAAA,GAAU,KAAA,GAAQ,IAAI,CAAA;AAAA,GACzG,CACC,KAAK,MAAM,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA,MAAA,EAAS,UAAA,CAAW,MAAM,CAAA;;AAAA,EAAsB,SAAS,CAAA;AAAA;AACjE;AACF,GACF;AACF;AAEO,SAAS,yBAAyB,UAAA,EAA6C;AACpF,EAAA,IAAI,UAAA,CAAW,WAAW,CAAA,EAAG;AAC3B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,UAAA,CACpB,GAAA,CAAI,CAAC,QAAA,KAAa,YAAO,QAAA,CAAS,IAAI,CAAA,QAAA,EAAW,QAAA,CAAS,EAAE,CAAA;AAAA,EAAA,EAAQ,QAAA,CAAS,WAAW,CAAA,CAAE,CAAA,CAC1F,KAAK,MAAM,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA,MAAA,EAAS,UAAA,CAAW,MAAM,CAAA;;AAAA,EAA0B,cAAc,CAAA;AAAA;AAC1E;AACF,GACF;AACF;AAEO,SAAS,uBAAuB,QAAA,EAAyC;AAC9E,EAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,eAAe,QAAA,CAClB,GAAA;AAAA,IACC,CAAC,MAAA,KACC,CAAA,SAAA,EAAO,OAAO,IAAI,CAAA,QAAA,EAAW,OAAO,EAAE,CAAA;AAAA,EAAA,EAAQ,OAAO,WAAW;AAAA,YAAA,EAAiB,OAAO,cAAA,CAAe,IAAI,CAAA,EAAA,EAAK,MAAA,CAAO,eAAe,GAAG,CAAA,CAAA;AAAA,GAC7I,CACC,KAAK,MAAM,CAAA;AAEd,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA,MAAA,EAAS,QAAA,CAAS,MAAM,CAAA;;AAAA,EAAmB,YAAY,CAAA;AAAA;AAC/D;AACF,GACF;AACF;AAEO,SAAS,sBAAsB,OAAA,EAAuC;AAC3E,EAAA,MAAM,cAAA,GAAiB,QAAQ,UAAA,GAC3B;AAAA,gBAAA,EAAqB,QAAQ,UAAA,CAAW,IAAI,MAAM,OAAA,CAAQ,UAAA,CAAW,KAAK,CAAA,CAAA,GAC1E,EAAA;AAEJ,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,CAAA;;AAAA,YAAA,EAEA,OAAA,CAAQ,OAAO,WAAW;AAAA,aAAA,EACzB,IAAI,KAAK,OAAA,CAAQ,OAAO,EAAE,WAAA,EAAa,GAAG,cAAc;;AAAA;AAAA,EAGrE,QAAQ,IAAI,CAAA;AAAA;AACR;AACF,GACF;AACF;AAEO,SAAS,6BAA6B,OAAA,EAA8C;AACzF,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,IAAA,GACrB,CAAA,EAAG,OAAA,CAAQ,IAAA,CAAK,WAAW,CAAA,EAAA,EAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,CAAA,CAAA,GACtD,kBAAA;AAEJ,EAAA,MAAM,cAAA,GACJ,OAAA,CAAQ,UAAA,CAAW,MAAA,GAAS,IAAI,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAErF,EAAA,MAAM,YAAA,GACJ,OAAA,CAAQ,QAAA,CAAS,MAAA,GAAS,IAAI,OAAA,CAAQ,QAAA,CAAS,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAI,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAEjF,EAAA,MAAM,cAAA,GACJ,QAAQ,UAAA,CAAW,MAAA,GAAS,IACxB,OAAA,CAAQ,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,EAAG,EAAE,IAAI,CAAA,EAAG,EAAE,OAAA,GAAU,YAAA,GAAe,EAAE,CAAA,CAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GACpF,MAAA;AAEN,EAAA,MAAM,SAAA,GACJ,MAAA,CAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA,CAAE,MAAA,GAAS,CAAA,GAAI,MAAA,CAAO,KAAK,OAAA,CAAQ,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA,GAAI,MAAA;AAElF,EAAA,MAAM,WAAA,GAAc,QAAQ,OAAA,GACxB;;AAAA;AAAA,cAAA,EACU,OAAA,CAAQ,QAAQ,eAAe;AAAA,cAAA,EAC/B,IAAI,KAAK,OAAA,CAAQ,OAAA,CAAQ,mBAAmB,CAAA,CAAE,WAAA,EAAa,CAAA,CAAA,GACrE,EAAA;AAEJ,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,MAAM,CAAA,EAAA,EAAK,OAAA,CAAQ,GAAG,CAAA,EAAA,EAAK,QAAQ,IAAI,CAAA;;AAAA,iBAAA,EAE5B,OAAA,CAAQ,eAAe,gBAAgB;AAAA,UAAA,EAC9C,QAAQ,cAAc;AAAA,aAAA,EACnB,OAAA,CAAQ,SAAA,GAAY,KAAA,GAAQ,IAAI;AAAA,UAAA,EACnC,QAAQ;;AAAA,gBAAA,EAEF,cAAc;AAAA,cAAA,EAChB,YAAY;AAAA,iBAAA,EACT,cAAc;AAAA,WAAA,EACpB,SAAS,GAAG,WAAW,CAAA;AAAA;AAC9B;AACF,GACF;AACF;AAEO,SAAS,yBAAyB,IAAA,EAA+C;AACtF,EAAA,IAAI,CAAC,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,QAAA,CAAS,WAAW,CAAA,EAAG;AAChD,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,QAAA,CAAS,CAAC,CAAA;AAC/B,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM;AAAA;AACR;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,OAAA,CAAQ,UAAA,CAC5B,GAAA,CAAI,CAAC,SAAA,KAAc;AAClB,IAAA,MAAM,iBAA2B,EAAC;AAClC,IAAA,MAAM,iBAA2B,EAAC;AAElC,IAAA,MAAA,CAAO,OAAA,CAAQ,UAAU,MAAM,CAAA,CAAE,QAAQ,CAAC,CAAC,QAAA,EAAU,KAAK,CAAA,KAAM;AAC9D,MAAA,MAAM,iBAAA,GAAoB,MAAM,aAAA,GAC5B;AAAA,oBAAA,EAAyB,KAAA,CAAM,aAAA,CAAc,GAAA,CAAI,CAAC,MAAM,CAAA,CAAE,IAAA,IAAQ,CAAA,CAAE,KAAA,IAAS,EAAE,EAAE,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA,GAC7F,EAAA;AACJ,MAAA,MAAM,gBAAA,GAAmB,MAAM,eAAA,GAC3B;AAAA,aAAA,EAAkB,IAAA,CAAK,SAAA,CAAU,KAAA,CAAM,YAAY,CAAC,CAAA,CAAA,GACpD,EAAA;AAEJ,MAAA,MAAM,SAAA,GAAY,CAAA,WAAA,EAAS,KAAA,CAAM,IAAI,OAAO,QAAQ,CAAA;AAAA,UAAA,EAAgB,MAAM,MAAA,CAAO,IAAI,CAAA,EAAG,iBAAiB,GAAG,gBAAgB,CAAA,CAAA;AAE5H,MAAA,IAAI,MAAM,QAAA,EAAU;AAClB,QAAA,cAAA,CAAe,KAAK,SAAS,CAAA;AAAA,MAC/B,CAAA,MAAO;AACL,QAAA,cAAA,CAAe,KAAK,SAAS,CAAA;AAAA,MAC/B;AAAA,IACF,CAAC,CAAA;AAED,IAAA,MAAM,eAAA,GACJ,cAAA,CAAe,MAAA,GAAS,CAAA,GACpB,CAAA;AAAA,EAAyB,cAAA,CAAe,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,GACpD,oBAAA;AACN,IAAA,MAAM,eAAA,GACJ,cAAA,CAAe,MAAA,GAAS,CAAA,GAAI;;AAAA;AAAA,EAA6B,cAAA,CAAe,IAAA,CAAK,MAAM,CAAC,CAAA,CAAA,GAAK,EAAA;AAE3F,IAAA,OAAO,OAAO,SAAA,CAAU,IAAI,KAAK,SAAA,CAAU,OAAA,GAAU,YAAY,OAAO,CAAA;AAAA,EAAM,UAAU,WAAW;;AAAA,EAAO,eAAe,GAAG,eAAe,CAAA,CAAA;AAAA,EAC7I,CAAC,CAAA,CACA,IAAA,CAAK,aAAa,CAAA;AAErB,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,MAAM,CAAA,+BAAA,EAAkC,OAAA,CAAQ,IAAI,CAAA,EAAA,EAAK,QAAQ,GAAG,CAAA;;AAAA,EAAU,cAAc,CAAA;AAAA;AAC9F;AACF,GACF;AACF;AAEO,SAAS,0BAAA,CACd,QACA,UAAA,EACiB;AACjB,EAAA,MAAM,eAAe,MAAA,CAAO,MAAA,CAAO,CAAC,KAAA,KAAU,MAAM,MAAM,CAAA;AAE1D,EAAA,IAAI,YAAA,CAAa,WAAW,CAAA,EAAG;AAC7B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS;AAAA,QACP;AAAA,UACE,IAAA,EAAM,MAAA;AAAA,UACN,IAAA,EAAM,UAAA,GACF,CAAA,mCAAA,EAAsC,UAAU,CAAA,CAAA,CAAA,GAChD;AAAA;AACN;AACF,KACF;AAAA,EACF;AAEA,EAAA,MAAM,UAAA,GAAa,YAAA,CAChB,GAAA,CAAI,CAAC,KAAA,KAAU;AACd,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,MAAA,GAC5B,CAAA,aAAA,EAAgB,KAAA,CAAM,MAAA,CAAO,MAAM,CAAA,CAAA,GACnC,CAAA,MAAA,EAAS,KAAA,CAAM,MAAA,CAAO,IAAI,CAAA,CAAA;AAC9B,IAAA,OAAO,CAAA,SAAA,EAAO,KAAA,CAAM,IAAI,CAAA,IAAA,EAAO,MAAM,GAAG,CAAA;AAAA,EAAA,EAAQ,UAAU;AAAA,MAAA,EAAW,MAAM,EAAE,CAAA,CAAA;AAAA,EAC/E,CAAC,CAAA,CACA,IAAA,CAAK,MAAM,CAAA;AAEd,EAAA,MAAM,MAAA,GAAS,UAAA,GACX,CAAA,MAAA,EAAS,YAAA,CAAa,MAAM,gCAAgC,UAAU,CAAA,CAAA,CAAA,GACtE,CAAA,MAAA,EAAS,YAAA,CAAa,MAAM,CAAA,iBAAA,CAAA;AAEhC,EAAA,OAAO;AAAA,IACL,OAAA,EAAS;AAAA,MACP;AAAA,QACE,IAAA,EAAM,MAAA;AAAA,QACN,IAAA,EAAM,GAAG,MAAM;;AAAA,EAAO,UAAU,CAAA;AAAA;AAClC;AACF,GACF;AACF;;;AC5eA,IAAMC,IAAAA,GAAM,aAAa,eAAe,CAAA;AAEjC,IAAM,YAAA,GAAN,cAA2B,KAAA,CAAM;AAAA,EACtC,WAAA,CACE,OAAA,EACO,UAAA,EACA,UAAA,EACA,aAAA,EACP;AACA,IAAA,KAAA,CAAM,OAAO,CAAA;AAJN,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,UAAA,GAAA,UAAA;AACA,IAAA,IAAA,CAAA,aAAA,GAAA,aAAA;AAGP,IAAA,IAAA,CAAK,IAAA,GAAO,cAAA;AAAA,EACd;AACF,CAAA;AAEO,SAAS,YAAY,KAAA,EAA6B;AACvD,EAAAA,IAAAA,CAAI,KAAA,CAAM,aAAA,EAAe,KAAK,CAAA;AAG9B,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,EAClC;AAGA,EAAA,IAAI,iBAAiB,YAAA,EAAc;AACjC,IAAA,OAAO,mBAAA,CAAoB,MAAM,OAAO,CAAA;AAAA,EAC1C;AAEA,EAAA,IAAI,KAAA,EAAO,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AACnC,IAAA,OAAO,mBAAA,CAAoB,eAAe,mBAAmB,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,KAAA,EAAO,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AACnC,IAAA,OAAO,oBAAoB,gDAAgD,CAAA;AAAA,EAC7E;AAEA,EAAA,IAAI,KAAA,EAAO,QAAA,EAAU,MAAA,KAAW,GAAA,EAAK;AACnC,IAAA,OAAO,mBAAA,CAAoB,eAAe,mBAAmB,CAAA;AAAA,EAC/D;AAEA,EAAA,IAAI,CAAC,KAAA,EAAO,QAAA,IAAY,KAAA,EAAO,SAAS,cAAA,EAAgB;AACtD,IAAA,OAAO,mBAAA,CAAoB,eAAe,aAAa,CAAA;AAAA,EACzD;AAGA,EAAA,IAAI,KAAA,EAAO,OAAA,EAAS,QAAA,CAAS,YAAY,CAAA,EAAG;AAC1C,IAAA,OAAO,mBAAA,CAAoB,MAAM,OAAO,CAAA;AAAA,EAC1C;AAGA,EAAA,IAAI,KAAA,EAAO,UAAU,IAAA,EAAM;AACzB,IAAA,MAAM,SAAA,GAAY,MAAM,QAAA,CAAS,IAAA;AAEjC,IAAA,IAAI,SAAA,CAAU,aAAA,IAAiB,SAAA,CAAU,aAAA,CAAc,SAAS,CAAA,EAAG;AACjE,MAAA,OAAO,mBAAA,CAAoB,SAAA,CAAU,aAAA,CAAc,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,IAC/D;AAEA,IAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,MAAA,MAAM,eAAe,MAAA,CAAO,OAAA,CAAQ,UAAU,MAAM,CAAA,CACjD,IAAI,CAAC,CAAC,OAAOC,QAAO,CAAA,KAAM,GAAG,KAAK,CAAA,EAAA,EAAKA,QAAO,CAAA,CAAE,CAAA,CAChD,KAAK,IAAI,CAAA;AACZ,MAAA,OAAO,oBAAoB,YAAY,CAAA;AAAA,IACzC;AAAA,EACF;AAGA,EAAA,MAAM,OAAA,GAAU,OAAO,OAAA,IAAW,8BAAA;AAClC,EAAA,OAAO,oBAAoB,OAAO,CAAA;AACpC;;;AC9DA,IAAMD,IAAAA,GAAM,aAAa,2BAA2B,CAAA;AAE7C,IAAM,sBAAA,GAA+B;AAAA,EAC1C,MAAM,UAAA,CAAW,oBAAA;AAAA,EACjB,WAAA,EACE,6HAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EACE,qFAAA;AAAA,QACF,SAAS;AAAC,OACZ;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,0DAAA;AAAA,QACb,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,UAAU;AAAC;AAEf,CAAA;AAEA,eAAsB,yBAAyB,KAAA,EAAsC;AACnF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,6BAAA,EAA+B,KAAK,CAAA;AAEpE,IAAAA,IAAAA,CAAI,KAAK,6BAA6B,CAAA;AAEtC,IAAA,MAAM,YAAiB,EAAC;AAExB,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,SAAA,CAAU,SAAS,SAAA,CAAU,MAAA;AACjE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,SAAA,CAAU,SAAS,SAAA,CAAU,MAAA;AAEjE,IAAA,MAAM,QAAA,GAAW,MAAM,kBAAA,CAAmB,SAAS,CAAA;AAEnD,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,MAAA,EAAS,QAAA,CAAS,MAAM,CAAA,WAAA,CAAa,CAAA;AAE9C,IAAA,OAAO,uBAAuB,QAAQ,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAAA,IAAAA,CAAI,KAAA,CAAM,oCAAA,EAAsC,KAAK,CAAA;AACrD,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;AC/CA,IAAMA,IAAAA,GAAM,aAAa,gBAAgB,CAAA;AAElC,IAAM,YAAA,GAAqB;AAAA,EAChC,MAAM,UAAA,CAAW,SAAA;AAAA,EACjB,WAAA,EACE,wSAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE;AAAA,OACJ;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EACE,sFAAA;AAAA,QACF,SAAS;AAAC,OACZ;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,QAAA,EAAU,CAAC,UAAU;AAAA;AAEzB,CAAA;AAEA,eAAsB,eAAe,KAAA,EAA0C;AAC7E,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,mBAAA,EAAqB,KAAK,CAAA;AAG1D,IAAA,MAAM,YAAA,GAAA,CAAgB,SAAA,CAAU,QAAA,IAAY,EAAA,EAAI,IAAA,EAAK;AACrD,IAAA,MAAM,GAAA,GAAM,eAAA,CAAgB,YAAY,CAAA,IAAK,YAAA;AAE7C,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,cAAA,EAAiB,GAAG,CAAA,GAAA,CAAK,CAAA;AAElC,IAAA,MAAM,YAAiB,EAAC;AAExB,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,SAAA,CAAU,SAAS,SAAA,CAAU,MAAA;AACjE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,SAAA,CAAU,SAAS,SAAA,CAAU,MAAA;AAEjE,IAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,GAAA,EAAK,SAAS,CAAA;AAE3C,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,gBAAA,EAAmB,KAAA,CAAM,GAAG,CAAA,CAAE,CAAA;AAEvC,IAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,EAClC,SAAS,KAAA,EAAO;AACd,IAAAA,IAAAA,CAAI,KAAA,CAAM,0BAAA,EAA4B,KAAK,CAAA;AAC3C,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;ACvDA,IAAMA,IAAAA,GAAM,aAAa,oBAAoB,CAAA;AAEtC,IAAM,gBAAA,GAAyB;AAAA,EACpC,MAAM,UAAA,CAAW,aAAA;AAAA,EACjB,WAAA,EACE,wOAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,GAAA,EAAK;AAAA,QACH,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,aAAA,EAAe;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE;AAAA,OACJ;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,8CAAA;AAAA,QACb,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS,GAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa,8CAAA;AAAA,QACb,SAAS;AAAC;AACZ,KACF;AAAA,IACA,QAAA,EAAU,CAAC,KAAK;AAAA;AAEpB,CAAA;AAEA,eAAsB,mBAAmB,KAAA,EAA0C;AACjF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,uBAAA,EAAyB,KAAK,CAAA;AAE9D,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,4BAAA,EAA+B,SAAA,CAAU,GAAG,CAAA,IAAA,CAAM,CAAA;AAE3D,IAAA,MAAM,YAAA,GAAoB;AAAA,MACxB,KAAK,SAAA,CAAU;AAAA,KACjB;AAEA,IAAA,IAAI,SAAA,CAAU,aAAA,KAAkB,KAAA,CAAA,EAAW,YAAA,CAAa,gBAAgB,SAAA,CAAU,aAAA;AAClF,IAAA,IAAI,SAAA,CAAU,UAAA,KAAe,KAAA,CAAA,EAAW,YAAA,CAAa,aAAa,SAAA,CAAU,UAAA;AAC5E,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,YAAA,CAAa,SAAS,SAAA,CAAU,MAAA;AACpE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,YAAA,CAAa,SAAS,SAAA,CAAU,MAAA;AAEpE,IAAA,MAAM,MAAA,GAAS,MAAM,YAAA,CAAa,YAAY,CAAA;AAE9C,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,MAAA,EAAS,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA,mBAAA,EAAsB,MAAA,CAAO,MAAA,CAAO,MAAM,CAAA,CAAE,CAAA;AAE/E,IAAA,OAAO,4BAA4B,MAAM,CAAA;AAAA,EAC3C,SAAS,KAAA,EAAO;AACd,IAAAA,IAAAA,CAAI,KAAA,CAAM,8BAAA,EAAgC,KAAK,CAAA;AAC/C,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;ACjEA,IAAMA,IAAAA,GAAM,aAAa,oBAAoB,CAAA;AAEtC,IAAM,eAAA,GAAwB;AAAA,EACnC,MAAM,UAAA,CAAW,aAAA;AAAA,EACjB,WAAA,EACE,sLAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,aAAA,EAAe;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE;AAAA,OACJ;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,8CAAA;AAAA,QACb,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS,GAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa,8CAAA;AAAA,QACb,SAAS;AAAC;AACZ,KACF;AAAA,IACA,UAAU;AAAC;AAEf,CAAA;AAEA,eAAsB,kBAAkB,KAAA,EAA0C;AAChF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,sBAAA,EAAwB,KAAK,CAAA;AAE7D,IAAAA,IAAAA,CAAI,KAAK,4CAA4C,CAAA;AAErD,IAAA,MAAM,YAAiB,EAAC;AAExB,IAAA,IAAI,SAAA,CAAU,aAAA,KAAkB,KAAA,CAAA,EAAW,SAAA,CAAU,gBAAgB,SAAA,CAAU,aAAA;AAC/E,IAAA,IAAI,SAAA,CAAU,UAAA,KAAe,KAAA,CAAA,EAAW,SAAA,CAAU,aAAa,SAAA,CAAU,UAAA;AACzE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,SAAA,CAAU,SAAS,SAAA,CAAU,MAAA;AACjE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,SAAA,CAAU,SAAS,SAAA,CAAU,MAAA;AAEjE,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,SAAS,CAAA;AAE1C,IAAAA,IAAAA,CAAI,IAAA;AAAA,MACF,SAAS,MAAA,CAAO,KAAA,IAAS,CAAC,CAAA,mCAAA,EAAsC,MAAA,CAAO,OAAO,MAAM,CAAA;AAAA,KACtF;AAEA,IAAA,OAAO,4BAA4B,MAAM,CAAA;AAAA,EAC3C,SAAS,KAAA,EAAO;AACd,IAAAA,IAAAA,CAAI,KAAA,CAAM,6BAAA,EAA+B,KAAK,CAAA;AAC9C,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;AC7DA,IAAMA,IAAAA,GAAM,aAAa,sBAAsB,CAAA;AAExC,IAAM,iBAAA,GAA0B;AAAA,EACrC,MAAM,UAAA,CAAW,eAAA;AAAA,EACjB,WAAA,EACE,mKAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,UAAU;AAAC;AAEf,CAAA;AAEA,eAAsB,oBAAoB,KAAA,EAA0C;AAClF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,wBAAA,EAA0B,KAAK,CAAA;AAE/D,IAAA,IAAI,UAAU,UAAA,EAAY;AACxB,MAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,gCAAA,EAAmC,SAAA,CAAU,UAAU,CAAA,GAAA,CAAK,CAAA;AAAA,IACvE,CAAA,MAAO;AACL,MAAAA,IAAAA,CAAI,KAAK,+BAA+B,CAAA;AAAA,IAC1C;AAEA,IAAA,MAAM,UAAA,GAAa,MAAM,aAAA,CAAc,SAAA,CAAU,UAAU,CAAA;AAE3D,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,MAAA,EAAS,UAAA,CAAW,MAAM,CAAA,cAAA,CAAgB,CAAA;AAEnD,IAAA,OAAO,yBAAyB,UAAU,CAAA;AAAA,EAC5C,SAAS,KAAA,EAAO;AACd,IAAAA,IAAAA,CAAI,KAAA,CAAM,+BAAA,EAAiC,KAAK,CAAA;AAChD,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;ACtCA,IAAMA,IAAAA,GAAM,aAAa,gBAAgB,CAAA;AAElC,IAAM,YAAA,GAAqB;AAAA,EAChC,MAAM,UAAA,CAAW,SAAA;AAAA,EACjB,WAAA,EACE,+IAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,KAAA,EAAO;AAAA,QACL,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,kDAAA;AAAA,QACb,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS;AAAA,OACX;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,qCAAA;AAAA,QACb,OAAA,EAAS,CAAA;AAAA,QACT,OAAA,EAAS,EAAA;AAAA,QACT,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,UAAU;AAAC;AAEf,CAAA;AAEA,eAAsB,eAAe,KAAA,EAA0C;AAC7E,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,mBAAA,EAAqB,KAAK,CAAA;AAE1D,IAAA,IAAI,UAAU,KAAA,EAAO;AACnB,MAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,6BAAA,EAAgC,SAAA,CAAU,KAAK,CAAA,IAAA,CAAM,CAAA;AAAA,IAChE,CAAA,MAAA,IAAW,UAAU,QAAA,EAAU;AAC7B,MAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,yBAAA,EAA4B,SAAA,CAAU,QAAQ,CAAA,IAAA,CAAM,CAAA;AAAA,IAC/D,CAAA,MAAA,IAAW,UAAU,SAAA,EAAW;AAC9B,MAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,2BAAA,EAA8B,SAAA,CAAU,SAAS,CAAA,IAAA,CAAM,CAAA;AAAA,IAClE,CAAA,MAAO;AACL,MAAAA,IAAAA,CAAI,KAAK,sBAAsB,CAAA;AAAA,IACjC;AAEA,IAAA,MAAM,YAAiB,EAAC;AAExB,IAAA,IAAI,SAAA,CAAU,KAAA,KAAU,KAAA,CAAA,EAAW,SAAA,CAAU,QAAQ,SAAA,CAAU,KAAA;AAC/D,IAAA,IAAI,SAAA,CAAU,QAAA,KAAa,KAAA,CAAA,EAAW,SAAA,CAAU,WAAW,SAAA,CAAU,QAAA;AACrE,IAAA,IAAI,SAAA,CAAU,SAAA,KAAc,KAAA,CAAA,EAAW,SAAA,CAAU,YAAY,SAAA,CAAU,SAAA;AACvE,IAAA,IAAI,SAAA,CAAU,OAAA,KAAY,KAAA,CAAA,EAAW,SAAA,CAAU,UAAU,SAAA,CAAU,OAAA;AACnE,IAAA,IAAI,SAAA,CAAU,UAAA,KAAe,KAAA,CAAA,EAAW,SAAA,CAAU,aAAa,SAAA,CAAU,UAAA;AAEzE,IAAA,MAAM,KAAA,GAAQ,MAAM,QAAA,CAAS,SAAS,CAAA;AAEtC,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,MAAA,EAAS,KAAA,CAAM,MAAM,CAAA,QAAA,CAAU,CAAA;AAExC,IAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,EAClC,SAAS,KAAA,EAAO;AACd,IAAAA,IAAAA,CAAI,KAAA,CAAM,0BAAA,EAA4B,KAAK,CAAA;AAC3C,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;ACtEA,IAAMA,IAAAA,GAAM,aAAa,qBAAqB,CAAA;AAEvC,IAAM,iBAAA,GAA0B;AAAA,EACrC,MAAM,UAAA,CAAW,cAAA;AAAA,EACjB,WAAA,EACE,kHAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,YAAY,EAAC;AAAA,IACb,UAAU;AAAC;AAEf,CAAA;AAEA,eAAsB,oBAAoB,KAAA,EAA0C;AAClF,EAAA,IAAI;AACF,IAAA,aAAA,CAAc,0BAA0B,KAAK,CAAA;AAE7C,IAAAA,IAAAA,CAAI,KAAK,gCAAgC,CAAA;AAEzC,IAAA,MAAM,UAAA,GAAa,MAAM,aAAA,EAAc;AAEvC,IAAAA,IAAAA,CAAI,IAAA,CAAK,CAAA,MAAA,EAAS,UAAA,CAAW,MAAM,CAAA,kBAAA,CAAoB,CAAA;AAEvD,IAAA,OAAO,yBAAyB,UAAU,CAAA;AAAA,EAC5C,SAAS,KAAA,EAAO;AACd,IAAAA,IAAAA,CAAI,KAAA,CAAM,+BAAA,EAAiC,KAAK,CAAA;AAChD,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;AC5BA,IAAMA,KAAAA,GAAM,aAAa,mBAAmB,CAAA;AAErC,IAAM,eAAA,GAAwB;AAAA,EACnC,MAAM,UAAA,CAAW,YAAA;AAAA,EACjB,WAAA,EACE,gJAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,UAAU;AAAC;AAEf,CAAA;AAEA,eAAsB,kBAAkB,KAAA,EAA0C;AAChF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,sBAAA,EAAwB,KAAK,CAAA;AAE7D,IAAA,IAAI,SAAA,CAAU,UAAA,IAAc,SAAA,CAAU,WAAA,EAAa;AACjD,MAAAA,KAAAA,CAAI,IAAA;AAAA,QACF,CAAA,6BAAA,EAAgC,SAAA,CAAU,UAAU,CAAA,gBAAA,EAAmB,UAAU,WAAW,CAAA,GAAA;AAAA,OAC9F;AAAA,IACF,CAAA,MAAA,IAAW,UAAU,UAAA,EAAY;AAC/B,MAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,6BAAA,EAAgC,SAAA,CAAU,UAAU,CAAA,GAAA,CAAK,CAAA;AAAA,IACpE,CAAA,MAAO;AACL,MAAAA,KAAAA,CAAI,KAAK,4BAA4B,CAAA;AAAA,IACvC;AAEA,IAAA,MAAM,YAAiB,EAAC;AAExB,IAAA,IAAI,SAAA,CAAU,UAAA,KAAe,KAAA,CAAA,EAAW,SAAA,CAAU,aAAa,SAAA,CAAU,UAAA;AACzE,IAAA,IAAI,SAAA,CAAU,WAAA,KAAgB,KAAA,CAAA,EAAW,SAAA,CAAU,cAAc,SAAA,CAAU,WAAA;AAE3E,IAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,SAAS,CAAA;AAE5C,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,MAAA,EAAS,QAAA,CAAS,MAAM,CAAA,WAAA,CAAa,CAAA;AAE9C,IAAA,OAAO,uBAAuB,QAAQ,CAAA;AAAA,EACxC,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,6BAAA,EAA+B,KAAK,CAAA;AAC9C,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;ACjDA,IAAMA,KAAAA,GAAM,aAAa,mBAAmB,CAAA;AAErC,IAAM,eAAA,GAAwB;AAAA,EACnC,MAAM,UAAA,CAAW,YAAA;AAAA,EACjB,WAAA,EACE,iXAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,qBAAA;AAAA,QACb,SAAA,EAAW;AAAA,OACb;AAAA,MACA,WAAA,EAAa;AAAA,QACX,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,UAAS,EAAG,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA;AAAA,QAC9C,WAAA,EACE;AAAA,OACJ;AAAA,MACA,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa,yBAAA;AAAA,QACb,SAAS;AAAC,OACZ;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa,4BAAA;AAAA,QACb,SAAS;AAAC,OACZ;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,IAAA,EAAM,QAAA;AAAA,QACN,oBAAA,EAAsB,IAAA;AAAA,QACtB,WAAA,EACE;AAAA,OACJ;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,oEAAA;AAAA,QACb,OAAA,EAAS;AAAA,OACX;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAA;AAAA,QACjC,WAAA,EACE,8JAAA;AAAA,QACF,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,QAAA,EAAU,CAAC,YAAA,EAAc,SAAA,EAAW,WAAW;AAAA;AAEnD,CAAA;AAEA,eAAsB,kBAAkB,KAAA,EAA0C;AAChF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,sBAAA,EAAwB,KAAK,CAAA;AAE7D,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,0BAAA,EAA6B,SAAA,CAAU,UAAU,CAAA,GAAA,CAAK,CAAA;AAE/D,IAAA,MAAM,YAAA,GAAoB;AAAA,MACxB,YAAY,SAAA,CAAU,UAAA;AAAA,MACtB,SAAS,SAAA,CAAU,OAAA;AAAA,MACnB,WAAW,SAAA,CAAU;AAAA,KACvB;AAEA,IAAA,IAAI,SAAA,CAAU,WAAA,KAAgB,KAAA,CAAA,EAAW,YAAA,CAAa,cAAc,SAAA,CAAU,WAAA;AAC9E,IAAA,IAAI,SAAA,CAAU,QAAA,KAAa,KAAA,CAAA,EAAW,YAAA,CAAa,WAAW,SAAA,CAAU,QAAA;AACxE,IAAA,IAAI,SAAA,CAAU,QAAA,KAAa,KAAA,CAAA,EAAW,YAAA,CAAa,WAAW,SAAA,CAAU,QAAA;AACxE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,YAAA,CAAa,SAAS,SAAA,CAAU,MAAA;AACpE,IAAA,IAAI,SAAA,CAAU,UAAA,KAAe,KAAA,CAAA,EAAW,YAAA,CAAa,aAAa,SAAA,CAAU,UAAA;AAC5E,IAAA,IAAI,SAAA,CAAU,YAAA,KAAiB,KAAA,CAAA,EAAW,YAAA,CAAa,eAAe,SAAA,CAAU,YAAA;AAChF,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,YAAA,CAAa,SAAS,SAAA,CAAU,MAAA;AAEpE,IAAA,IAAI,UAAA;AACJ,IAAA,IAAI,SAAA,CAAU,gBAAgB,KAAA,EAAO;AACnC,MAAA,UAAA,GAAa,MAAM,WAAA,CAAY,YAAA,EAAc,EAAE,WAAA,EAAa,OAAO,CAAA;AAAA,IACrE,CAAA,MAAO;AAEL,MAAA,UAAA,GAAa,MAAM,YAAY,YAAY,CAAA;AAAA,IAC7C;AAEA,IAAA,IAAI,SAAA,CAAU,gBAAgB,KAAA,EAAO;AACnC,MAAA,MAAM,GAAA,GAAM,OAAO,UAAA,KAAe,QAAA,GAAW,aAAc,UAAA,CAAmB,GAAA;AAC9E,MAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,cAAA,EAAiB,GAAG,CAAA,CAAE,CAAA;AAC/B,MAAA,OAAO,qBAAA,CAAsB,CAAA,eAAA,EAAkB,GAAG,CAAA,CAAE,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,KAAA,GAAQ,UAAA;AACd,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,cAAA,EAAiB,KAAA,CAAM,GAAG,CAAA,CAAE,CAAA;AACrC,IAAA,OAAO,oBAAoB,KAAK,CAAA;AAAA,EAClC,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,6BAAA,EAA+B,KAAK,CAAA;AAC9C,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;AC/GA,IAAMA,KAAAA,GAAM,aAAa,mBAAmB,CAAA;AAErC,IAAM,eAAA,GAAwB;AAAA,EACnC,MAAM,UAAA,CAAW,YAAA;AAAA,EACjB,WAAA,EACE,uPAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,WAAA,EAAa;AAAA,QACX,KAAA,EAAO,CAAC,EAAE,IAAA,EAAM,UAAS,EAAG,EAAE,IAAA,EAAM,QAAA,EAAU,CAAA;AAAA,QAC9C,WAAA,EAAa;AAAA,OACf;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa;AAAA,OACf;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,SAAA;AAAA,QACN,WAAA,EAAa,wEAAA;AAAA,QACb,OAAA,EAAS;AAAA,OACX;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAA;AAAA,QACjC,WAAA,EACE,8JAAA;AAAA,QACF,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,QAAA,EAAU,CAAC,UAAU;AAAA;AAEzB,CAAA;AAEA,eAAsB,kBAAkB,KAAA,EAA0C;AAChF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,sBAAA,EAAwB,KAAK,CAAA;AAE7D,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,eAAA,EAAkB,SAAA,CAAU,QAAQ,CAAA,GAAA,CAAK,CAAA;AAElD,IAAA,MAAM,eAAoB,EAAC;AAE3B,IAAA,IAAI,SAAA,CAAU,OAAA,KAAY,KAAA,CAAA,EAAW,YAAA,CAAa,UAAU,SAAA,CAAU,OAAA;AACtE,IAAA,IAAI,SAAA,CAAU,WAAA,KAAgB,KAAA,CAAA,EAAW,YAAA,CAAa,cAAc,SAAA,CAAU,WAAA;AAC9E,IAAA,IAAI,SAAA,CAAU,QAAA,KAAa,KAAA,CAAA,EAAW,YAAA,CAAa,WAAW,SAAA,CAAU,QAAA;AACxE,IAAA,IAAI,SAAA,CAAU,QAAA,KAAa,KAAA,CAAA,EAAW,YAAA,CAAa,WAAW,SAAA,CAAU,QAAA;AACxE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,YAAA,CAAa,SAAS,SAAA,CAAU,MAAA;AACpE,IAAA,IAAI,SAAA,CAAU,UAAA,KAAe,KAAA,CAAA,EAAW,YAAA,CAAa,aAAa,SAAA,CAAU,UAAA;AAC5E,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,YAAA,CAAa,SAAS,SAAA,CAAU,MAAA;AAEpE,IAAA,MAAM,WAAA,CAAY,SAAA,CAAU,QAAA,EAAU,YAAY,CAAA;AAElD,IAAA,IAAI,SAAA,CAAU,gBAAgB,KAAA,EAAO;AACnC,MAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,cAAA,EAAiB,SAAA,CAAU,QAAQ,CAAA,CAAE,CAAA;AAC9C,MAAA,OAAO,qBAAA,CAAsB,CAAA,MAAA,EAAS,SAAA,CAAU,QAAQ,CAAA,qBAAA,CAAuB,CAAA;AAAA,IACjF;AAGA,IAAA,MAAM,YAAA,GAAe,MAAM,QAAA,CAAS,SAAA,CAAU,QAAQ,CAAA;AAEtD,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,cAAA,EAAiB,YAAA,CAAa,GAAG,CAAA,CAAE,CAAA;AAE5C,IAAA,OAAO,oBAAoB,YAAY,CAAA;AAAA,EACzC,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,6BAAA,EAA+B,KAAK,CAAA;AAC9C,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;AC1FA,IAAMA,KAAAA,GAAM,aAAa,kBAAkB,CAAA;AAEpC,IAAM,cAAA,GAAuB;AAAA,EAClC,MAAM,UAAA,CAAW,WAAA;AAAA,EACjB,WAAA,EACE,8NAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,8DAAA;AAAA,QACb,SAAA,EAAW;AAAA,OACb;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,4CAAA;AAAA,QACb,UAAA,EAAY;AAAA,UACV,IAAA,EAAM;AAAA,YACJ,IAAA,EAAM,QAAA;AAAA,YACN,IAAA,EAAM,CAAC,OAAA,EAAS,MAAM,CAAA;AAAA,YACtB,WAAA,EAAa;AAAA,WACf;AAAA,UACA,KAAA,EAAO;AAAA,YACL,IAAA,EAAM,QAAA;AAAA,YACN,WAAA,EAAa;AAAA;AACf,SACF;AAAA,QACA,QAAA,EAAU,CAAC,MAAA,EAAQ,OAAO;AAAA,OAC5B;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAA;AAAA,QACjC,WAAA,EACE,0JAAA;AAAA,QACF,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,QAAA,EAAU,CAAC,UAAA,EAAY,MAAM;AAAA;AAEjC,CAAA;AAEA,eAAsB,iBAAiB,KAAA,EAA0C;AAC/E,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,qBAAA,EAAuB,KAAK,CAAA;AAE5D,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,wBAAA,EAA2B,SAAA,CAAU,QAAQ,CAAA,GAAA,CAAK,CAAA;AAE3D,IAAA,MAAM,UAAU,MAAM,UAAA;AAAA,MACpB,SAAA,CAAU,QAAA;AAAA,MACV,SAAA,CAAU,IAAA;AAAA,MACV,SAAA,CAAU,UAAA;AAAA,MACV,SAAA,CAAU;AAAA,KACZ;AAEA,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,iBAAA,EAAoB,SAAA,CAAU,QAAQ,CAAA,CAAE,CAAA;AAEjD,IAAA,OAAO,sBAAsB,OAAO,CAAA;AAAA,EACtC,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,4BAAA,EAA8B,KAAK,CAAA;AAC7C,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;AClEA,IAAMA,KAAAA,GAAM,aAAa,uBAAuB,CAAA;AAEzC,IAAM,kBAAA,GAA2B;AAAA,EACtC,MAAM,UAAA,CAAW,gBAAA;AAAA,EACjB,WAAA,EACE,sJAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EACE,iGAAA;AAAA,QACF,SAAS;AAAC;AACZ,KACF;AAAA,IACA,QAAA,EAAU,CAAC,YAAY;AAAA;AAE3B,CAAA;AAEA,eAAsB,qBAAqB,KAAA,EAA0C;AACnF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,yBAAA,EAA2B,KAAK,CAAA;AAEhE,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,yCAAA,EAA4C,SAAA,CAAU,UAAU,CAAA,GAAA,CAAK,CAAA;AAE9E,IAAA,MAAM,UAAU,MAAM,iBAAA,CAAkB,SAAA,CAAU,UAAA,EAAY,UAAU,MAAM,CAAA;AAE9E,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,8BAAA,EAAiC,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAEvD,IAAA,OAAO,6BAA6B,OAAO,CAAA;AAAA,EAC7C,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,gCAAA,EAAkC,KAAK,CAAA;AACjD,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;ACxCA,IAAMA,KAAAA,GAAM,aAAa,qBAAqB,CAAA;AAEvC,IAAM,iBAAA,GAA0B;AAAA,EACrC,MAAM,UAAA,CAAW,cAAA;AAAA,EACjB,WAAA,EACE,qQAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,cAAA,EAAgB;AAAA,QACd,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa,uBAAA;AAAA,QACb,SAAA,EAAW;AAAA,OACb;AAAA,MACA,WAAA,EAAa;AAAA,QACX,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE;AAAA,OACJ;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa,2BAAA;AAAA,QACb,SAAS;AAAC,OACZ;AAAA,MACA,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,OAAA;AAAA,QACN,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,QACxB,WAAA,EAAa,4BAAA;AAAA,QACb,SAAS;AAAC,OACZ;AAAA,MACA,MAAA,EAAQ;AAAA,QACN,IAAA,EAAM,QAAA;AAAA,QACN,IAAA,EAAM,CAAC,UAAA,EAAY,KAAA,EAAO,OAAO,CAAA;AAAA,QACjC,WAAA,EACE,8JAAA;AAAA,QACF,OAAA,EAAS;AAAA;AACX,KACF;AAAA,IACA,QAAA,EAAU,CAAC,gBAAA,EAAkB,SAAS;AAAA;AAE1C,CAAA;AAEA,eAAsB,oBAAoB,KAAA,EAA0C;AAClF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,wBAAA,EAA0B,KAAK,CAAA;AAE/D,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,oCAAA,EAAuC,SAAA,CAAU,cAAc,CAAA,GAAA,CAAK,CAAA;AAE7E,IAAA,MAAM,aAAA,GAAqB;AAAA,MACzB,SAAS,SAAA,CAAU;AAAA,KACrB;AAEA,IAAA,IAAI,SAAA,CAAU,WAAA,KAAgB,KAAA,CAAA,EAAW,aAAA,CAAc,cAAc,SAAA,CAAU,WAAA;AAC/E,IAAA,IAAI,SAAA,CAAU,QAAA,KAAa,KAAA,CAAA,EAAW,aAAA,CAAc,WAAW,SAAA,CAAU,QAAA;AACzE,IAAA,IAAI,SAAA,CAAU,QAAA,KAAa,KAAA,CAAA,EAAW,aAAA,CAAc,WAAW,SAAA,CAAU,QAAA;AACzE,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,aAAA,CAAc,SAAS,SAAA,CAAU,MAAA;AACrE,IAAA,IAAI,SAAA,CAAU,UAAA,KAAe,KAAA,CAAA,EAAW,aAAA,CAAc,aAAa,SAAA,CAAU,UAAA;AAC7E,IAAA,IAAI,SAAA,CAAU,MAAA,KAAW,KAAA,CAAA,EAAW,aAAA,CAAc,SAAS,SAAA,CAAU,MAAA;AAErE,IAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,SAAA,CAAU,gBAAgB,aAAa,CAAA;AAE3E,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,gBAAA,EAAmB,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AAEzC,IAAA,OAAO,oBAAoB,OAAO,CAAA;AAAA,EACpC,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,+BAAA,EAAiC,KAAK,CAAA;AAChD,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;ACjFA,IAAMA,KAAAA,GAAM,aAAa,sBAAsB,CAAA;AAExC,IAAM,iBAAA,GAA0B;AAAA,EACrC,MAAM,UAAA,CAAW,eAAA;AAAA,EACjB,WAAA,EACE,8PAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,aAAA,EAAe;AAAA,QACb,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,QAAA,EAAU,CAAC,YAAY;AAAA;AAE3B,CAAA;AAEA,eAAsB,oBAAoB,KAAA,EAA0C;AAClF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,wBAAA,EAA0B,KAAK,CAAA;AAE/D,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,oCAAA,EAAuC,SAAA,CAAU,UAAU,CAAA,GAAA,CAAK,CAAA;AAEzE,IAAA,MAAM,OAAA,GAAe;AAAA,MACnB,WAAA,EAAa,CAAC,SAAA,CAAU,UAAU,CAAA;AAAA,MAClC,MAAA,EAAQ;AAAA,KACV;AAEA,IAAA,IAAI,UAAU,aAAA,EAAe;AAC3B,MAAA,OAAA,CAAQ,cAAA,GAAiB,CAAC,SAAA,CAAU,aAAa,CAAA;AAAA,IACnD;AAEA,IAAA,MAAM,IAAA,GAAO,MAAM,aAAA,CAAc,OAAO,CAAA;AAExC,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,8BAAA,EAAiC,SAAA,CAAU,UAAU,CAAA,CAAE,CAAA;AAEhE,IAAA,OAAO,yBAAyB,IAAI,CAAA;AAAA,EACtC,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,+BAAA,EAAiC,KAAK,CAAA;AAChD,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;AC9CA,IAAMA,KAAAA,GAAM,aAAa,wBAAwB,CAAA;AAE1C,IAAM,mBAAA,GAA4B;AAAA,EACvC,MAAM,UAAA,CAAW,iBAAA;AAAA,EACjB,WAAA,EACE,2LAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA;AACf,KACF;AAAA,IACA,UAAU;AAAC;AAEf,CAAA;AAEA,eAAsB,sBAAsB,KAAA,EAA0C;AACpF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,0BAAA,EAA4B,KAAK,CAAA;AAEjE,IAAA,MAAM,aAAa,SAAA,CAAU,UAAA,GAAa,CAAA,aAAA,EAAgB,SAAA,CAAU,UAAU,CAAA,CAAA,GAAK,EAAA;AACnF,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,qBAAA,EAAwB,UAAU,CAAA,GAAA,CAAK,CAAA;AAEhD,IAAA,MAAM,MAAA,GAAS,MAAM,SAAA,EAAU;AAE/B,IAAAA,KAAAA,CAAI,IAAA,CAAK,CAAA,UAAA,EAAa,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA,CAAE,MAAM,CAAA,cAAA,CAAgB,CAAA;AAE3E,IAAA,OAAO,0BAAA,CAA2B,MAAA,EAAQ,SAAA,CAAU,UAAU,CAAA;AAAA,EAChE,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,iCAAA,EAAmC,KAAK,CAAA;AAClD,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;AClCA,IAAMA,KAAAA,GAAM,aAAa,wBAAwB,CAAA;AAE1C,IAAM,mBAAA,GAA4B;AAAA,EACvC,MAAM,UAAA,CAAW,iBAAA;AAAA,EACjB,WAAA,EACE,8KAAA;AAAA,EACF,WAAA,EAAa;AAAA,IACX,IAAA,EAAM,QAAA;AAAA,IACN,UAAA,EAAY;AAAA,MACV,SAAA,EAAW;AAAA,QACT,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,OAAA,EAAS;AAAA,QACP,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EAAa;AAAA,OACf;AAAA,MACA,QAAA,EAAU;AAAA,QACR,IAAA,EAAM,QAAA;AAAA,QACN,WAAA,EACE;AAAA;AACJ,KACF;AAAA,IACA,QAAA,EAAU,CAAC,WAAA,EAAa,SAAA,EAAW,UAAU;AAAA;AAEjD,CAAA;AAEA,eAAsB,sBAAsB,KAAA,EAA0C;AACpF,EAAA,IAAI;AACF,IAAA,MAAM,SAAA,GAAY,aAAA,CAAc,0BAAA,EAA4B,KAAK,CAAA;AAEjE,IAAAA,KAAAA,CAAI,IAAA;AAAA,MACF,CAAA,SAAA,EAAY,UAAU,QAAQ,CAAA,WAAA,EAAc,UAAU,SAAS,CAAA,IAAA,EAAO,UAAU,OAAO,CAAA,GAAA;AAAA,KACzF;AAEA,IAAA,MAAM,gBAAgB,SAAA,CAAU,SAAA,EAAW,SAAA,CAAU,OAAA,EAAS,UAAU,QAAQ,CAAA;AAEhF,IAAAA,KAAAA,CAAI,KAAK,iCAAiC,CAAA;AAE1C,IAAA,OAAO,qBAAA;AAAA,MACL,CAAA,cAAA,EAAiB,UAAU,SAAS,CAAA,CAAA,EAAI,UAAU,QAAQ,CAAA,CAAA,EAAI,UAAU,OAAO,CAAA;AAAA,KACjF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAAA,KAAAA,CAAI,KAAA,CAAM,iCAAA,EAAmC,KAAK,CAAA;AAClD,IAAA,OAAO,YAAY,KAAK,CAAA;AAAA,EAC1B;AACF;;;ACvDA,IAAI,OAAA,CAAQ,GAAA,CAAI,QAAA,KAAa,YAAA,EAAc;AACzC,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,MAAA,EAAO,GAAI,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,MAAA,OAAA,CAAA,YAAA,EAAA,EAAA,CAAA,CAAA,CAAA;AACzB,IAAA,MAAA,EAAO;AAAA,EAET,CAAA,CAAA,MAAQ;AAAA,EAER;AACF;AAgBA,IAAMA,KAAAA,GAAM,aAAa,QAAQ,CAAA;AAMjC,IAAM,YAAA,uBAAmB,GAAA,CAA8C;AAAA,EACrE,CAAC,UAAA,CAAW,oBAAA,EAA4B,wBAAwB,CAAA;AAAA,EAChE,CAAC,UAAA,CAAW,SAAA,EAAiB,cAAc,CAAA;AAAA,EAC3C,CAAC,UAAA,CAAW,aAAA,EAAqB,kBAAkB,CAAA;AAAA,EACnD,CAAC,UAAA,CAAW,aAAA,EAAqB,iBAAiB,CAAA;AAAA,EAClD,CAAC,UAAA,CAAW,eAAA,EAAuB,mBAAmB,CAAA;AAAA,EACtD,CAAC,UAAA,CAAW,SAAA,EAAiB,cAAc,CAAA;AAAA,EAC3C,CAAC,UAAA,CAAW,cAAA,EAAsB,mBAAmB,CAAA;AAAA,EACrD,CAAC,UAAA,CAAW,YAAA,EAAoB,iBAAiB,CAAA;AAAA,EACjD,CAAC,UAAA,CAAW,YAAA,EAAoB,iBAAiB,CAAA;AAAA,EACjD,CAAC,UAAA,CAAW,YAAA,EAAoB,iBAAiB,CAAA;AAAA,EACjD,CAAC,UAAA,CAAW,WAAA,EAAmB,gBAAgB,CAAA;AAAA,EAC/C,CAAC,UAAA,CAAW,gBAAA,EAAwB,oBAAoB,CAAA;AAAA,EACxD,CAAC,UAAA,CAAW,cAAA,EAAsB,mBAAmB,CAAA;AAAA,EACrD,CAAC,UAAA,CAAW,eAAA,EAAuB,mBAAmB,CAAA;AAAA,EACtD,CAAC,UAAA,CAAW,iBAAA,EAAyB,qBAAqB,CAAA;AAAA,EAC1D,CAAC,UAAA,CAAW,iBAAA,EAAyB,qBAAqB;AAC5D,CAAC,CAAA;AAGD,IAAM,QAAA,GAAW;AAAA,EACT,sBAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,kBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACR,CAAA;AAEA,eAAe,IAAA,GAAO;AACpB,EAAA,MAAM,QAAA,GAAA,CACH,OAAA,CAAQ,GAAA,CAAI,OAAA,IAAW,EAAA,EAAI,WAAA,EAAY,KAAM,GAAA,IAAA,CAC7C,OAAA,CAAQ,GAAA,CAAI,OAAA,IAAW,EAAA,EAAI,aAAY,KAAM,MAAA;AAGhD,EAAA,IAAI,CAAC,QAAA,EAAU;AACb,IAAA,MAAM,WAAA,GAAc,OAAA;AAAA,MAClB,QAAQ,GAAA,CAAI,aAAA,IAAiB,QAAQ,GAAA,CAAI,UAAA,IAAc,QAAQ,GAAA,CAAI;AAAA,KACrE;AAEA,IAAA,IAAI,WAAA,EAAa;AACf,MAAA,IAAI;AACF,QAAA,MAAM,OAAO,YAAA,EAAa;AAC1B,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,4BAAA,EAAwB,IAAA,CAAK,KAAK,CAAA,CAAE,CAAA;AAClD,QAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,yBAAA,EAAqB,IAAA,CAAK,OAAO,CAAA,CAAE,CAAA;AAAA,MACnD,SAAS,KAAA,EAAY;AACnB,QAAA,OAAA,CAAQ,KAAA,CAAM,yCAAA,EAAiC,KAAA,CAAM,OAAO,CAAA;AAAA,MAC9D;AAAA,IACF,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAM,iFAAuE,CAAA;AAAA,IACvF;AAAA,EACF,CAAA,MAAO;AACL,IAAA,OAAA,CAAQ,MAAM,yDAA6C,CAAA;AAAA,EAC7D;AAGA,EAAA,IAAI,OAAA,GAAU,OAAA;AACd,EAAA,IAAI;AACF,IAAA,MAAM,MAAM,MAAM,OAAA,CAAA,OAAA,EAAA,CAAA,IAAA,CAAA,MAAA,OAAA,CAAA,gBAAA,EAAA,EAAA,CAAA,CAAA,CAAA;AAClB,IAAA,OAAA,GAAW,GAAA,CAAY,OAAA,EAAS,OAAA,IAAY,GAAA,CAAY,OAAA,IAAW,OAAA;AAAA,EACrE,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,MAAM,SAAS,IAAI,MAAA;AAAA,IACjB;AAAA,MACE,IAAA,EAAM,iBAAA;AAAA,MACN;AAAA,KACF;AAAA,IACA;AAAA,MACE,YAAA,EAAc;AAAA,QACZ,WAAW,EAAC;AAAA,QACZ,OAAO;AAAC;AACV;AACF,GACF;AAGA,EAAA,MAAA,CAAO,iBAAA,CAAkB,wBAAwB,YAAY;AAC3D,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,kBAAA,EAAc,QAAA,CAAS,MAAM,CAAA,kBAAA,CAAoB,CAAA;AAC/D,IAAA,OAAO,EAAE,OAAO,QAAA,EAAS;AAAA,EAC3B,CAAC,CAAA;AAGD,EAAA,MAAA,CAAO,iBAAA,CAAkB,qBAAA,EAAuB,OAAO,OAAA,KAA6B;AAClF,IAAA,MAAM,EAAE,IAAA,EAAM,SAAA,EAAW,IAAA,KAAS,OAAA,CAAQ,MAAA;AAE1C,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,gCAAA,EAAuB,IAAI,CAAA,CAAE,CAAA;AAE3C,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,CAAI,IAAI,CAAA;AACrC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,cAAA,EAAiB,IAAI,CAAA,CAAE,CAAA;AAAA,IACzC;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,IAAI,CAAA;AACjC,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,YAAA,EAAU,IAAI,CAAA,sBAAA,CAAwB,CAAA;AACpD,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAY;AACnB,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,4BAAA,EAA0B,IAAI,CAAA,CAAA,CAAA,EAAK,MAAM,OAAO,CAAA;AAC9D,MAAA,MAAM,KAAA;AAAA,IACR;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAA,CAAO,iBAAA,CAAkB,4BAA4B,YAAY;AAC/D,IAAA,OAAO,EAAE,SAAA,EAAW,EAAC,EAAE;AAAA,EACzB,CAAC,CAAA;AAGD,EAAA,MAAA,CAAO,iBAAA,CAAkB,2BAA2B,YAAY;AAC9D,IAAA,MAAM,IAAI,MAAM,kCAAkC,CAAA;AAAA,EACpD,CAAC,CAAA;AAED,EAAA,MAAM,SAAA,GAAY,IAAI,oBAAA,EAAqB;AAC3C,EAAA,MAAM,MAAA,CAAO,QAAQ,SAAS,CAAA;AAC9B,EAAA,OAAA,CAAQ,MAAM,4CAAqC,CAAA;AACrD;AAEA,IAAA,EAAK,CAAE,KAAA,CAAM,CAAC,KAAA,KAAU;AACtB,EAAAA,KAAAA,CAAI,KAAA,CAAM,cAAA,EAAgB,KAAK,CAAA;AAC/B,EAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAChB,CAAC,CAAA","file":"index.js","sourcesContent":["{\n \"name\": \"dotenv\",\n \"version\": \"17.2.3\",\n \"description\": \"Loads environment variables from .env file\",\n \"main\": \"lib/main.js\",\n \"types\": \"lib/main.d.ts\",\n \"exports\": {\n \".\": {\n \"types\": \"./lib/main.d.ts\",\n \"require\": \"./lib/main.js\",\n \"default\": \"./lib/main.js\"\n },\n \"./config\": \"./config.js\",\n \"./config.js\": \"./config.js\",\n \"./lib/env-options\": \"./lib/env-options.js\",\n \"./lib/env-options.js\": \"./lib/env-options.js\",\n \"./lib/cli-options\": \"./lib/cli-options.js\",\n \"./lib/cli-options.js\": \"./lib/cli-options.js\",\n \"./package.json\": \"./package.json\"\n },\n \"scripts\": {\n \"dts-check\": \"tsc --project tests/types/tsconfig.json\",\n \"lint\": \"standard\",\n \"pretest\": \"npm run lint && npm run dts-check\",\n \"test\": \"tap run tests/**/*.js --allow-empty-coverage --disable-coverage --timeout=60000\",\n \"test:coverage\": \"tap run tests/**/*.js --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov\",\n \"prerelease\": \"npm test\",\n \"release\": \"standard-version\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git://github.com/motdotla/dotenv.git\"\n },\n \"homepage\": \"https://github.com/motdotla/dotenv#readme\",\n \"funding\": \"https://dotenvx.com\",\n \"keywords\": [\n \"dotenv\",\n \"env\",\n \".env\",\n \"environment\",\n \"variables\",\n \"config\",\n \"settings\"\n ],\n \"readmeFilename\": \"README.md\",\n \"license\": \"BSD-2-Clause\",\n \"devDependencies\": {\n \"@types/node\": \"^18.11.3\",\n \"decache\": \"^4.6.2\",\n \"sinon\": \"^14.0.1\",\n \"standard\": \"^17.0.0\",\n \"standard-version\": \"^9.5.0\",\n \"tap\": \"^19.2.0\",\n \"typescript\": \"^4.8.4\"\n },\n \"engines\": {\n \"node\": \">=12\"\n },\n \"browser\": {\n \"fs\": false\n }\n}\n","const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\nconst packageJson = require('../package.json')\n\nconst version = packageJson.version\n\n// Array of tips to display randomly\nconst TIPS = [\n '๐Ÿ” encrypt with Dotenvx: https://dotenvx.com',\n '๐Ÿ” prevent committing .env to code: https://dotenvx.com/precommit',\n '๐Ÿ” prevent building .env in docker: https://dotenvx.com/prebuild',\n '๐Ÿ“ก add observability to secrets: https://dotenvx.com/ops',\n '๐Ÿ‘ฅ sync secrets across teammates & machines: https://dotenvx.com/ops',\n '๐Ÿ—‚๏ธ backup and recover secrets: https://dotenvx.com/ops',\n 'โœ… audit secrets and track compliance: https://dotenvx.com/ops',\n '๐Ÿ”„ add secrets lifecycle management: https://dotenvx.com/ops',\n '๐Ÿ”‘ add access controls to secrets: https://dotenvx.com/ops',\n '๐Ÿ› ๏ธ run anywhere with `dotenvx run -- yourcommand`',\n 'โš™๏ธ specify custom .env file path with { path: \\'/custom/path/.env\\' }',\n 'โš™๏ธ enable debug logging with { debug: true }',\n 'โš™๏ธ override existing env vars with { override: true }',\n 'โš™๏ธ suppress all logs with { quiet: true }',\n 'โš™๏ธ write to custom object with { processEnv: myObject }',\n 'โš™๏ธ load multiple .env files with { path: [\\'.env.local\\', \\'.env\\'] }'\n]\n\n// Get a random tip from the tips array\nfunction _getRandomTip () {\n return TIPS[Math.floor(Math.random() * TIPS.length)]\n}\n\nfunction parseBoolean (value) {\n if (typeof value === 'string') {\n return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())\n }\n return Boolean(value)\n}\n\nfunction supportsAnsi () {\n return process.stdout.isTTY // && process.env.TERM !== 'dumb'\n}\n\nfunction dim (text) {\n return supportsAnsi() ? `\\x1b[2m${text}\\x1b[0m` : text\n}\n\nconst LINE = /(?:^|^)\\s*(?:export\\s+)?([\\w.-]+)(?:\\s*=\\s*?|:\\s+?)(\\s*'(?:\\\\'|[^'])*'|\\s*\"(?:\\\\\"|[^\"])*\"|\\s*`(?:\\\\`|[^`])*`|[^#\\r\\n]+)?\\s*(?:#.*)?(?:$|$)/mg\n\n// Parse src into an Object\nfunction parse (src) {\n const obj = {}\n\n // Convert buffer to string\n let lines = src.toString()\n\n // Convert line breaks to same format\n lines = lines.replace(/\\r\\n?/mg, '\\n')\n\n let match\n while ((match = LINE.exec(lines)) != null) {\n const key = match[1]\n\n // Default undefined or null to empty string\n let value = (match[2] || '')\n\n // Remove whitespace\n value = value.trim()\n\n // Check if double quoted\n const maybeQuote = value[0]\n\n // Remove surrounding quotes\n value = value.replace(/^(['\"`])([\\s\\S]*)\\1$/mg, '$2')\n\n // Expand newlines if double quoted\n if (maybeQuote === '\"') {\n value = value.replace(/\\\\n/g, '\\n')\n value = value.replace(/\\\\r/g, '\\r')\n }\n\n // Add to object\n obj[key] = value\n }\n\n return obj\n}\n\nfunction _parseVault (options) {\n options = options || {}\n\n const vaultPath = _vaultPath(options)\n options.path = vaultPath // parse .env.vault\n const result = DotenvModule.configDotenv(options)\n if (!result.parsed) {\n const err = new Error(`MISSING_DATA: Cannot parse ${vaultPath} for an unknown reason`)\n err.code = 'MISSING_DATA'\n throw err\n }\n\n // handle scenario for comma separated keys - for use with key rotation\n // example: DOTENV_KEY=\"dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=prod,dotenv://:key_7890@dotenvx.com/vault/.env.vault?environment=prod\"\n const keys = _dotenvKey(options).split(',')\n const length = keys.length\n\n let decrypted\n for (let i = 0; i < length; i++) {\n try {\n // Get full key\n const key = keys[i].trim()\n\n // Get instructions for decrypt\n const attrs = _instructions(result, key)\n\n // Decrypt\n decrypted = DotenvModule.decrypt(attrs.ciphertext, attrs.key)\n\n break\n } catch (error) {\n // last key\n if (i + 1 >= length) {\n throw error\n }\n // try next key\n }\n }\n\n // Parse decrypted .env string\n return DotenvModule.parse(decrypted)\n}\n\nfunction _warn (message) {\n console.error(`[dotenv@${version}][WARN] ${message}`)\n}\n\nfunction _debug (message) {\n console.log(`[dotenv@${version}][DEBUG] ${message}`)\n}\n\nfunction _log (message) {\n console.log(`[dotenv@${version}] ${message}`)\n}\n\nfunction _dotenvKey (options) {\n // prioritize developer directly setting options.DOTENV_KEY\n if (options && options.DOTENV_KEY && options.DOTENV_KEY.length > 0) {\n return options.DOTENV_KEY\n }\n\n // secondary infra already contains a DOTENV_KEY environment variable\n if (process.env.DOTENV_KEY && process.env.DOTENV_KEY.length > 0) {\n return process.env.DOTENV_KEY\n }\n\n // fallback to empty string\n return ''\n}\n\nfunction _instructions (result, dotenvKey) {\n // Parse DOTENV_KEY. Format is a URI\n let uri\n try {\n uri = new URL(dotenvKey)\n } catch (error) {\n if (error.code === 'ERR_INVALID_URL') {\n const err = new Error('INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n throw error\n }\n\n // Get decrypt key\n const key = uri.password\n if (!key) {\n const err = new Error('INVALID_DOTENV_KEY: Missing key part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get environment\n const environment = uri.searchParams.get('environment')\n if (!environment) {\n const err = new Error('INVALID_DOTENV_KEY: Missing environment part')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n }\n\n // Get ciphertext payload\n const environmentKey = `DOTENV_VAULT_${environment.toUpperCase()}`\n const ciphertext = result.parsed[environmentKey] // DOTENV_VAULT_PRODUCTION\n if (!ciphertext) {\n const err = new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${environmentKey} in your .env.vault file.`)\n err.code = 'NOT_FOUND_DOTENV_ENVIRONMENT'\n throw err\n }\n\n return { ciphertext, key }\n}\n\nfunction _vaultPath (options) {\n let possibleVaultPath = null\n\n if (options && options.path && options.path.length > 0) {\n if (Array.isArray(options.path)) {\n for (const filepath of options.path) {\n if (fs.existsSync(filepath)) {\n possibleVaultPath = filepath.endsWith('.vault') ? filepath : `${filepath}.vault`\n }\n }\n } else {\n possibleVaultPath = options.path.endsWith('.vault') ? options.path : `${options.path}.vault`\n }\n } else {\n possibleVaultPath = path.resolve(process.cwd(), '.env.vault')\n }\n\n if (fs.existsSync(possibleVaultPath)) {\n return possibleVaultPath\n }\n\n return null\n}\n\nfunction _resolveHome (envPath) {\n return envPath[0] === '~' ? path.join(os.homedir(), envPath.slice(1)) : envPath\n}\n\nfunction _configVault (options) {\n const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))\n const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (debug || !quiet) {\n _log('Loading env from encrypted .env.vault')\n }\n\n const parsed = DotenvModule._parseVault(options)\n\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n\n DotenvModule.populate(processEnv, parsed, options)\n\n return { parsed }\n}\n\nfunction configDotenv (options) {\n const dotenvPath = path.resolve(process.cwd(), '.env')\n let encoding = 'utf8'\n let processEnv = process.env\n if (options && options.processEnv != null) {\n processEnv = options.processEnv\n }\n let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))\n let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))\n\n if (options && options.encoding) {\n encoding = options.encoding\n } else {\n if (debug) {\n _debug('No encoding is specified. UTF-8 is used by default')\n }\n }\n\n let optionPaths = [dotenvPath] // default, look for .env\n if (options && options.path) {\n if (!Array.isArray(options.path)) {\n optionPaths = [_resolveHome(options.path)]\n } else {\n optionPaths = [] // reset default\n for (const filepath of options.path) {\n optionPaths.push(_resolveHome(filepath))\n }\n }\n }\n\n // Build the parsed data in a temporary object (because we need to return it). Once we have the final\n // parsed data, we will combine it with process.env (or options.processEnv if provided).\n let lastError\n const parsedAll = {}\n for (const path of optionPaths) {\n try {\n // Specifying an encoding returns a string instead of a buffer\n const parsed = DotenvModule.parse(fs.readFileSync(path, { encoding }))\n\n DotenvModule.populate(parsedAll, parsed, options)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${path} ${e.message}`)\n }\n lastError = e\n }\n }\n\n const populated = DotenvModule.populate(processEnv, parsedAll, options)\n\n // handle user settings DOTENV_CONFIG_ options inside .env file(s)\n debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)\n quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)\n\n if (debug || !quiet) {\n const keysCount = Object.keys(populated).length\n const shortPaths = []\n for (const filePath of optionPaths) {\n try {\n const relative = path.relative(process.cwd(), filePath)\n shortPaths.push(relative)\n } catch (e) {\n if (debug) {\n _debug(`Failed to load ${filePath} ${e.message}`)\n }\n lastError = e\n }\n }\n\n _log(`injecting env (${keysCount}) from ${shortPaths.join(',')} ${dim(`-- tip: ${_getRandomTip()}`)}`)\n }\n\n if (lastError) {\n return { parsed: parsedAll, error: lastError }\n } else {\n return { parsed: parsedAll }\n }\n}\n\n// Populates process.env from .env file\nfunction config (options) {\n // fallback to original dotenv if DOTENV_KEY is not set\n if (_dotenvKey(options).length === 0) {\n return DotenvModule.configDotenv(options)\n }\n\n const vaultPath = _vaultPath(options)\n\n // dotenvKey exists but .env.vault file does not exist\n if (!vaultPath) {\n _warn(`You set DOTENV_KEY but you are missing a .env.vault file at ${vaultPath}. Did you forget to build it?`)\n\n return DotenvModule.configDotenv(options)\n }\n\n return DotenvModule._configVault(options)\n}\n\nfunction decrypt (encrypted, keyStr) {\n const key = Buffer.from(keyStr.slice(-64), 'hex')\n let ciphertext = Buffer.from(encrypted, 'base64')\n\n const nonce = ciphertext.subarray(0, 12)\n const authTag = ciphertext.subarray(-16)\n ciphertext = ciphertext.subarray(12, -16)\n\n try {\n const aesgcm = crypto.createDecipheriv('aes-256-gcm', key, nonce)\n aesgcm.setAuthTag(authTag)\n return `${aesgcm.update(ciphertext)}${aesgcm.final()}`\n } catch (error) {\n const isRange = error instanceof RangeError\n const invalidKeyLength = error.message === 'Invalid key length'\n const decryptionFailed = error.message === 'Unsupported state or unable to authenticate data'\n\n if (isRange || invalidKeyLength) {\n const err = new Error('INVALID_DOTENV_KEY: It must be 64 characters long (or more)')\n err.code = 'INVALID_DOTENV_KEY'\n throw err\n } else if (decryptionFailed) {\n const err = new Error('DECRYPTION_FAILED: Please check your DOTENV_KEY')\n err.code = 'DECRYPTION_FAILED'\n throw err\n } else {\n throw error\n }\n }\n}\n\n// Populate process.env with parsed values\nfunction populate (processEnv, parsed, options = {}) {\n const debug = Boolean(options && options.debug)\n const override = Boolean(options && options.override)\n const populated = {}\n\n if (typeof parsed !== 'object') {\n const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')\n err.code = 'OBJECT_REQUIRED'\n throw err\n }\n\n // Set process.env\n for (const key of Object.keys(parsed)) {\n if (Object.prototype.hasOwnProperty.call(processEnv, key)) {\n if (override === true) {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n\n if (debug) {\n if (override === true) {\n _debug(`\"${key}\" is already defined and WAS overwritten`)\n } else {\n _debug(`\"${key}\" is already defined and was NOT overwritten`)\n }\n }\n } else {\n processEnv[key] = parsed[key]\n populated[key] = parsed[key]\n }\n }\n\n return populated\n}\n\nconst DotenvModule = {\n configDotenv,\n _configVault,\n _parseVault,\n config,\n decrypt,\n parse,\n populate\n}\n\nmodule.exports.configDotenv = DotenvModule.configDotenv\nmodule.exports._configVault = DotenvModule._configVault\nmodule.exports._parseVault = DotenvModule._parseVault\nmodule.exports.config = DotenvModule.config\nmodule.exports.decrypt = DotenvModule.decrypt\nmodule.exports.parse = DotenvModule.parse\nmodule.exports.populate = DotenvModule.populate\n\nmodule.exports = DotenvModule\n","{\n \"name\": \"mcp-jira-stdio\",\n \"version\": \"1.7.0\",\n \"description\": \"Model Context Protocol (MCP) server for Jira API integration\",\n \"author\": \"graslt\",\n \"license\": \"MIT\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"mcp-jira-stdio\": \"./dist/index.js\"\n },\n \"scripts\": {\n \"dev\": \"tsx watch src/index.ts\",\n \"build\": \"tsup\",\n \"start\": \"node dist/index.js\",\n \"clean\": \"rm -rf dist\",\n \"typecheck\": \"tsc --noEmit\",\n \"lint\": \"eslint src --ext .ts\",\n \"lint:fix\": \"eslint src --ext .ts --fix\",\n \"format\": \"prettier --write .\",\n \"format:check\": \"prettier --check .\",\n \"check\": \"npm run typecheck && npm run lint && npm run format:check\",\n \"check:all\": \"npm run check && npm run test:run && npm run build\",\n \"prepublishOnly\": \"npm run clean && npm run build\",\n \"inspector\": \"npx @modelcontextprotocol/inspector node dist/index.js\",\n \"inspector:dev\": \"NODE_ENV=development npx @modelcontextprotocol/inspector npx tsx src/index.ts\",\n \"setup:mcp\": \"node scripts/setup-mcp-config.js\",\n \"test\": \"vitest\",\n \"test:run\": \"vitest run\",\n \"test:coverage\": \"vitest run --coverage\",\n \"test:watch\": \"vitest watch\",\n \"test:ui\": \"vitest --ui\",\n \"test:connection\": \"node scripts/test-connection.cjs\",\n \"docker:build\": \"docker build -t mcp-jira-stdio .\",\n \"docker:run\": \"docker run -it --rm mcp-jira-stdio\",\n \"docker:push\": \"docker push freema/mcp-jira-stdio:latest && docker push ghcr.io/freema/mcp-jira-stdio:latest\"\n },\n \"keywords\": [\n \"mcp\",\n \"model-context-protocol\",\n \"jira\",\n \"atlassian\",\n \"api\",\n \"claude\",\n \"ai\"\n ],\n \"engines\": {\n \"node\": \">=20.0.0\"\n },\n \"dependencies\": {\n \"@modelcontextprotocol/sdk\": \"^1.17.1\",\n \"axios\": \"^1.7.0\",\n \"md-to-adf\": \"^0.5.0\",\n \"zod\": \"^3.22.4\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^22.5.0\",\n \"@typescript-eslint/eslint-plugin\": \"^8.0.0\",\n \"@typescript-eslint/parser\": \"^8.0.0\",\n \"@vitest/coverage-v8\": \"^4.0.10\",\n \"@vitest/ui\": \"^4.0.10\",\n \"dotenv\": \"^17.2.1\",\n \"eslint\": \"^9.9.0\",\n \"eslint-config-prettier\": \"^9.1.0\",\n \"eslint-plugin-prettier\": \"^5.2.0\",\n \"prettier\": \"^3.5.0\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.16.0\",\n \"typescript\": \"^5.5.0\",\n \"vitest\": \"^4.0.10\"\n },\n \"files\": [\n \"dist\",\n \"README.md\",\n \"LICENSE\",\n \"scripts\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/freema/mcp-jira-stdio.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/freema/mcp-jira-stdio/issues\"\n },\n \"homepage\": \"https://github.com/freema/mcp-jira-stdio#readme\",\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"overrides\": {\n \"glob\": \">=11.0.4\",\n \"marked\": \">=4.0.10\"\n }\n}\n","export const JIRA_CONFIG = {\n API_VERSION: '3',\n BASE_PATH: '/rest/api/3',\n DEFAULT_TIMEOUT: 30000,\n MAX_RETRIES: 3,\n RETRY_DELAY: 1000,\n RATE_LIMIT: {\n MAX_REQUESTS: 100,\n WINDOW_MS: 60000, // 1 minute\n },\n} as const;\n\nexport const ERROR_MESSAGES = {\n AUTH_REQUIRED:\n 'Jira authentication required. Set JIRA_BASE_URL, JIRA_EMAIL, and JIRA_API_TOKEN environment variables.',\n INVALID_CREDENTIALS: 'Invalid Jira credentials. Please check your email and API token.',\n PROJECT_NOT_FOUND: \"Project not found or you don't have permission to access it.\",\n ISSUE_NOT_FOUND: \"Issue not found or you don't have permission to access it.\",\n RATE_LIMIT_EXCEEDED: 'Jira API rate limit exceeded. Please wait and try again.',\n NETWORK_ERROR: 'Network error occurred while connecting to Jira.',\n VALIDATION_ERROR: 'Input validation failed.',\n} as const;\n\nexport const TOOL_NAMES = {\n GET_VISIBLE_PROJECTS: 'jira_get_visible_projects',\n GET_ISSUE: 'jira_get_issue',\n SEARCH_ISSUES: 'jira_search_issues',\n GET_MY_ISSUES: 'jira_get_my_issues',\n GET_ISSUE_TYPES: 'jira_get_issue_types',\n GET_USERS: 'jira_get_users',\n GET_PRIORITIES: 'jira_get_priorities',\n GET_STATUSES: 'jira_get_statuses',\n CREATE_ISSUE: 'jira_create_issue',\n UPDATE_ISSUE: 'jira_update_issue',\n ADD_COMMENT: 'jira_add_comment',\n GET_PROJECT_INFO: 'jira_get_project_info',\n CREATE_SUBTASK: 'jira_create_subtask',\n GET_CREATE_META: 'jira_get_create_meta',\n GET_CUSTOM_FIELDS: 'jira_get_custom_fields',\n CREATE_ISSUE_LINK: 'jira_create_issue_link',\n} as const;\n","type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';\n\nconst levels: Record<LogLevel, number> = {\n debug: 10,\n info: 20,\n warn: 30,\n error: 40,\n silent: 99,\n};\n\nfunction getLevel(): LogLevel {\n const env = (\n process.env.LOG_LEVEL || (process.env.NODE_ENV === 'development' ? 'debug' : 'info')\n ).toLowerCase();\n if (env === 'debug' || env === 'info' || env === 'warn' || env === 'error' || env === 'silent')\n return env;\n return 'info';\n}\n\nexport function createLogger(scope: string) {\n const level = getLevel();\n const min = levels[level];\n\n const fmt = (msg: any) => (typeof msg === 'string' ? msg : JSON.stringify(msg));\n const prefix = (lvl: string) => `[${lvl.toUpperCase()}] ${scope}:`;\n\n return {\n debug: (...args: any[]) => {\n if (min <= levels.debug) console.error(prefix('debug'), ...args.map(fmt));\n },\n info: (...args: any[]) => {\n if (min <= levels.info) console.error(prefix('info'), ...args.map(fmt));\n },\n warn: (...args: any[]) => {\n if (min <= levels.warn) console.error(prefix('warn'), ...args.map(fmt));\n },\n error: (...args: any[]) => {\n if (min <= levels.error) console.error(prefix('error'), ...args.map(fmt));\n },\n };\n}\n","import axios, { AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { JiraAuthConfig, RetryConfig } from '../types/common.js';\nimport { JIRA_CONFIG, ERROR_MESSAGES } from '../config/constants.js';\nimport { createLogger } from './logger.js';\n// keep client simple to match test expectations\n\nlet jiraClient: AxiosInstance | null = null;\nconst log = createLogger('jira-auth');\n\nexport function validateAuth(): JiraAuthConfig {\n const baseUrl = process.env.JIRA_BASE_URL;\n const email = process.env.JIRA_EMAIL;\n const apiToken = process.env.JIRA_API_TOKEN;\n\n if (!baseUrl || !email || !apiToken) {\n throw new Error(ERROR_MESSAGES.AUTH_REQUIRED);\n }\n\n // Normalize base URL\n const normalizedBaseUrl = baseUrl.endsWith('/') ? baseUrl.slice(0, -1) : baseUrl;\n\n return {\n baseUrl: normalizedBaseUrl,\n email,\n apiToken,\n };\n}\n\nexport function getAuthenticatedClient(): AxiosInstance {\n if (jiraClient) {\n return jiraClient;\n }\n\n const auth = validateAuth();\n\n jiraClient = axios.create({\n baseURL: `${auth.baseUrl}${JIRA_CONFIG.BASE_PATH}`,\n timeout: JIRA_CONFIG.DEFAULT_TIMEOUT,\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n auth: {\n username: auth.email,\n password: auth.apiToken,\n },\n });\n\n // Add request interceptor for logging\n jiraClient.interceptors.request.use(\n (config) => {\n log.debug(`Request: ${config.method?.toUpperCase()} ${config.baseURL}${config.url}`);\n return config;\n },\n (error) => {\n log.error('Request error:', error);\n return Promise.reject(error);\n }\n );\n\n // Add response interceptor for error handling\n jiraClient.interceptors.response.use(\n (response) => {\n log.debug(`Response: ${response.status} ${response.config.url}`);\n return response;\n },\n (error) => {\n log.error(`Jira API error: ${error.response?.status} ${error.config?.url}`);\n\n if (error.response?.status === 401) {\n throw new Error(ERROR_MESSAGES.INVALID_CREDENTIALS);\n } else if (error.response?.status === 404) {\n throw new Error('Resource not found or insufficient permissions');\n } else if (error.response?.status === 429) {\n throw new Error(ERROR_MESSAGES.RATE_LIMIT_EXCEEDED);\n } else if (!error.response) {\n throw new Error(ERROR_MESSAGES.NETWORK_ERROR);\n }\n\n return Promise.reject(error);\n }\n );\n\n return jiraClient;\n}\n\nexport async function makeJiraRequest<T = any>(\n config: AxiosRequestConfig,\n retryConfig: RetryConfig = {\n maxRetries: JIRA_CONFIG.MAX_RETRIES,\n retryDelay: JIRA_CONFIG.RETRY_DELAY,\n }\n): Promise<T> {\n const client = getAuthenticatedClient();\n let lastError: any;\n\n for (let attempt = 0; attempt <= retryConfig.maxRetries; attempt++) {\n try {\n const response = await client.request<T>(config);\n return response.data;\n } catch (error: any) {\n lastError = error;\n\n // Don't retry on authentication or client errors\n if (\n error.response?.status === 401 ||\n error.response?.status === 403 ||\n error.response?.status === 404 ||\n (error.response?.status >= 400 &&\n error.response?.status < 500 &&\n error.response?.status !== 429)\n ) {\n break;\n }\n\n // Don't retry if custom condition fails\n if (retryConfig.retryCondition && !retryConfig.retryCondition(error)) {\n break;\n }\n\n // Don't retry on last attempt\n if (attempt === retryConfig.maxRetries) {\n break;\n }\n\n // Compute backoff respecting Retry-After if present\n const retryAfterHeader = error.response?.headers?.['retry-after'];\n let delayMs = 0;\n if (retryAfterHeader) {\n const seconds = Number(retryAfterHeader);\n delayMs = !Number.isNaN(seconds) ? seconds * 1000 : retryConfig.retryDelay;\n } else {\n const base = retryConfig.retryDelay * Math.pow(2, attempt);\n const jitter = Math.floor(Math.random() * (retryConfig.retryDelay / 2));\n delayMs = base + jitter;\n }\n log.warn(\n `Retrying request in ${delayMs}ms (attempt ${attempt + 1}/${retryConfig.maxRetries})`\n );\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n\n throw lastError;\n}\n\nexport async function testConnection(): Promise<boolean> {\n try {\n await makeJiraRequest({\n method: 'GET',\n url: '/myself',\n });\n return true;\n } catch (error) {\n log.error('Connection test failed:', error);\n return false;\n }\n}\n","import { z, ZodSchema } from 'zod';\nimport { ERROR_MESSAGES } from '../config/constants.js';\n\nexport function validateInput<T>(schema: ZodSchema<T>, input: unknown): T {\n try {\n return schema.parse(input);\n } catch (error) {\n if (error instanceof z.ZodError) {\n const errorMessages = error.errors.map((err) => `${err.path.join('.')}: ${err.message}`);\n throw new Error(`${ERROR_MESSAGES.VALIDATION_ERROR}\\n${errorMessages.join('\\n')}`);\n }\n throw error;\n }\n}\n\nexport function isValidIssueKey(key: string): boolean {\n // Jira issue key format: PROJECT-123\n return /^[A-Z][A-Z0-9]*-\\d+$/.test(key);\n}\n\nexport function isValidProjectKey(key: string): boolean {\n // Jira project key format: uppercase letters and numbers, max 10 chars\n return /^[A-Z][A-Z0-9]{0,9}$/.test(key);\n}\n\nexport function isValidJQL(jql: string): boolean {\n // Basic JQL validation - non-empty string\n return typeof jql === 'string' && jql.trim().length > 0;\n}\n\nexport function sanitizeJQL(jql: string): string {\n // Remove potentially dangerous characters and normalize whitespace\n return jql\n .replace(/[<>\"'`]/g, '') // Remove potentially dangerous chars\n .replace(/\\s+/g, ' ') // Normalize whitespace\n .trim();\n}\n\nexport function validatePagination(startAt: number, maxResults: number): void {\n if (startAt < 0) {\n throw new Error('startAt must be non-negative');\n }\n if (maxResults < 1 || maxResults > 100) {\n throw new Error('maxResults must be between 1 and 100');\n }\n}\n\n// Extract a Jira issue key from a free-form string or URL\nexport function extractIssueKey(input: string): string | null {\n if (typeof input !== 'string') return null;\n const match = input.match(/[A-Z][A-Z0-9]*-\\d+/);\n return match ? match[0] : null;\n}\n","import { z } from 'zod';\nimport { isValidIssueKey, isValidProjectKey } from '../utils/validators.js';\n\n// Get visible projects\nexport const GetVisibleProjectsInputSchema = z.object({\n expand: z.array(z.string()).optional().describe('Additional project details to include'),\n recent: z.number().optional().describe('Limit to recently accessed projects'),\n});\n\nexport type GetVisibleProjectsInput = z.infer<typeof GetVisibleProjectsInputSchema>;\n\n// Get issue\nexport const GetIssueInputSchema = z.object({\n issueKey: z\n .string()\n .min(1)\n .describe(\n 'Issue key or full Jira URL (e.g., PROJECT-123 or https://your.atlassian.net/browse/PROJECT-123)'\n ),\n expand: z.array(z.string()).optional().describe('Additional issue details to include'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n});\n\nexport type GetIssueInput = z.infer<typeof GetIssueInputSchema>;\n\n// Search issues\nexport const SearchIssuesInputSchema = z.object({\n jql: z.string().min(1).describe('JQL query string'),\n nextPageToken: z\n .string()\n .optional()\n .describe(\n 'Token for pagination. Omit for first page, use value from previous response for next page.'\n ),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe('Maximum number of results to return per page'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n expand: z.array(z.string()).optional().describe('Additional details to include'),\n});\n\nexport type SearchIssuesInput = z.infer<typeof SearchIssuesInputSchema>;\n\n// Create issue\nexport const CreateIssueInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key where the issue will be created')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n summary: z.string().min(1).describe('Issue summary/title'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('Issue description. Accepts plain text or ADF object.'),\n issueType: z.string().describe('Issue type (e.g., Bug, Story, Task)'),\n priority: z.string().optional().describe('Issue priority'),\n assignee: z.string().optional().describe('Assignee account ID'),\n labels: z.array(z.string()).optional().describe('Issue labels'),\n components: z.array(z.string()).optional().describe('Component names'),\n customFields: z\n .record(z.any())\n .optional()\n .describe(\n 'Additional Jira field mappings, e.g. { \"customfield_12345\": value }. Use for required custom fields.'\n ),\n returnIssue: z\n .boolean()\n .optional()\n .describe('When false, skip fetching full issue after creation'),\n format: z\n .enum(['markdown', 'adf', 'plain'])\n .optional()\n .default('markdown')\n .describe(\n 'Description format: \"markdown\" (converts Markdown to ADF), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting). Default: \"markdown\"'\n ),\n});\n\nexport type CreateIssueInput = z.infer<typeof CreateIssueInputSchema>;\n\n// Update issue\nexport const UpdateIssueInputSchema = z.object({\n issueKey: z\n .string()\n .describe('Issue key to update')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n summary: z.string().optional().describe('New summary'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('New description. Accepts plain text or ADF object.'),\n priority: z.string().optional().describe('New priority'),\n assignee: z.string().optional().describe('New assignee account ID'),\n labels: z.array(z.string()).optional().describe('New labels (replaces existing)'),\n components: z.array(z.string()).optional().describe('New components (replaces existing)'),\n returnIssue: z.boolean().optional().describe('When false, skip fetching full issue after update'),\n format: z\n .enum(['markdown', 'adf', 'plain'])\n .optional()\n .default('markdown')\n .describe(\n 'Description format: \"markdown\" (converts Markdown to ADF), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting). Default: \"markdown\"'\n ),\n});\n\nexport type UpdateIssueInput = z.infer<typeof UpdateIssueInputSchema>;\n\n// Get my issues\nexport const GetMyIssuesInputSchema = z.object({\n nextPageToken: z\n .string()\n .optional()\n .describe(\n 'Token for pagination. Omit for first page, use value from previous response for next page.'\n ),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .default(50)\n .describe('Maximum number of results to return per page'),\n fields: z.array(z.string()).optional().describe('Specific fields to retrieve'),\n expand: z.array(z.string()).optional().describe('Additional details to include'),\n});\n\nexport type GetMyIssuesInput = z.infer<typeof GetMyIssuesInputSchema>;\n\n// Get issue types\nexport const GetIssueTypesInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to get issue types for specific project')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n});\n\nexport type GetIssueTypesInput = z.infer<typeof GetIssueTypesInputSchema>;\n\n// Get users\nexport const GetUsersInputSchema = z.object({\n query: z.string().optional().describe('Search query for user name or email'),\n username: z.string().optional().describe('Specific username to search for'),\n accountId: z.string().optional().describe('Specific account ID to search for'),\n startAt: z.number().min(0).default(0).describe('Index of first result to return'),\n maxResults: z.number().min(1).max(50).default(50).describe('Maximum number of results to return'),\n});\n\nexport type GetUsersInput = z.infer<typeof GetUsersInputSchema>;\n\n// Get priorities\nexport const GetPrioritiesInputSchema = z.object({});\n\nexport type GetPrioritiesInput = z.infer<typeof GetPrioritiesInputSchema>;\n\n// Get statuses\nexport const GetStatusesInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to get statuses for specific project')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n issueTypeId: z\n .string()\n .optional()\n .describe('Issue type ID to get statuses for specific issue type'),\n});\n\nexport type GetStatusesInput = z.infer<typeof GetStatusesInputSchema>;\n\n// Add comment\nexport const AddCommentInputSchema = z.object({\n issueKey: z\n .string()\n .describe('Issue key to add comment to')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n body: z.string().min(1).describe('Comment body text'),\n visibility: z\n .object({\n type: z.enum(['group', 'role']).describe('Visibility type'),\n value: z.string().describe('Group name or role name'),\n })\n .optional()\n .describe('Comment visibility restrictions'),\n format: z\n .enum(['markdown', 'adf', 'plain'])\n .optional()\n .default('markdown')\n .describe(\n 'Comment format: \"markdown\" (converts Markdown to ADF), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting). Default: \"markdown\"'\n ),\n});\n\nexport type AddCommentInput = z.infer<typeof AddCommentInputSchema>;\n\n// Get project info\nexport const GetProjectInfoInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key to get detailed information for')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n expand: z.array(z.string()).optional().describe('Additional project details to include'),\n});\n\nexport type GetProjectInfoInput = z.infer<typeof GetProjectInfoInputSchema>;\n\n// Create subtask\nexport const CreateSubtaskInputSchema = z.object({\n parentIssueKey: z.string().describe('Parent issue key'),\n summary: z.string().min(1).describe('Subtask summary/title'),\n description: z\n .union([z.string(), z.any()])\n .optional()\n .describe('Subtask description. Accepts plain text or ADF object.'),\n priority: z.string().optional().describe('Subtask priority'),\n assignee: z.string().optional().describe('Assignee account ID'),\n labels: z.array(z.string()).optional().describe('Subtask labels'),\n components: z.array(z.string()).optional().describe('Component names'),\n format: z\n .enum(['markdown', 'adf', 'plain'])\n .optional()\n .default('markdown')\n .describe(\n 'Description format: \"markdown\" (converts Markdown to ADF), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting). Default: \"markdown\"'\n ),\n});\n\nexport type CreateSubtaskInput = z.infer<typeof CreateSubtaskInputSchema>;\n\n// Get create meta\nexport const GetCreateMetaInputSchema = z.object({\n projectKey: z\n .string()\n .describe('Project key to get create metadata for')\n .refine((v) => isValidProjectKey(v), 'Invalid project key format'),\n issueTypeName: z\n .string()\n .optional()\n .describe('Specific issue type name to get metadata for (optional)'),\n});\n\nexport type GetCreateMetaInput = z.infer<typeof GetCreateMetaInputSchema>;\n\n// Get custom fields\nexport const GetCustomFieldsInputSchema = z.object({\n projectKey: z\n .string()\n .optional()\n .describe('Project key to filter custom fields (optional)')\n .refine((v) => (v ? isValidProjectKey(v) : true), 'Invalid project key format'),\n});\n\nexport type GetCustomFieldsInput = z.infer<typeof GetCustomFieldsInputSchema>;\n\n// Create issue link\nexport const CreateIssueLinkInputSchema = z.object({\n fromIssue: z\n .string()\n .describe('Source issue key')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n toIssue: z\n .string()\n .describe('Target issue key')\n .refine((v) => isValidIssueKey(v), 'Invalid issue key format'),\n linkType: z\n .string()\n .describe(\n 'Link type: \"blocks\", \"is blocked by\", \"relates\", \"duplicates\", \"clones\", or custom link type name'\n ),\n});\n\nexport type CreateIssueLinkInput = z.infer<typeof CreateIssueLinkInputSchema>;\n","import { AxiosRequestConfig } from 'axios';\nimport { makeJiraRequest } from './jira-auth.js';\nimport {\n JiraProject,\n JiraIssue,\n JiraSearchResult,\n JiraUser,\n JiraIssueType,\n JiraPriority,\n JiraStatus,\n JiraComment,\n JiraProjectDetails,\n JiraCreateIssueResponse,\n JiraCreateMetaResponse,\n JiraField,\n} from '../types/jira.js';\nimport { PaginatedResponse } from '../types/common.js';\nimport { sanitizeJQL } from './validators.js';\nimport mdToAdf from 'md-to-adf';\n\n// Convert a description into Atlassian Document Format (ADF) based on the specified format.\n// Supports three formats:\n// - 'markdown': Converts Markdown syntax to ADF using md-to-adf\n// - 'adf': Returns the description as-is (assumes it's already an ADF object)\n// - 'plain': Converts plain text to ADF with basic formatting heuristics\nfunction ensureAdfDescription(desc: any, format: 'markdown' | 'adf' | 'plain' = 'markdown'): any {\n if (!desc) return desc;\n if (typeof desc === 'object') return desc; // assume already ADF\n if (typeof desc !== 'string') return desc;\n\n // Handle markdown format\n if (format === 'markdown') {\n try {\n return mdToAdf(desc);\n } catch (error) {\n // If markdown conversion fails, fall back to plain text conversion\n console.warn('Markdown to ADF conversion failed, falling back to plain text:', error);\n format = 'plain';\n }\n }\n\n // Handle ADF format (already handled above with typeof === 'object')\n if (format === 'adf') {\n return desc;\n }\n\n // Handle plain text format with basic heuristics\n // (original ensureAdfDescription logic below)\n\n const urlRegex = /https?:\\/\\/[^\\s)]+/g;\n\n const makeTextNodes = (text: string): any[] => {\n const nodes: any[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n while ((match = urlRegex.exec(text)) !== null) {\n const [url] = match;\n const start = match.index;\n if (start > lastIndex) {\n nodes.push({ type: 'text', text: text.slice(lastIndex, start) });\n }\n nodes.push({ type: 'text', text: url, marks: [{ type: 'link', attrs: { href: url } }] });\n lastIndex = start + url.length;\n }\n if (lastIndex < text.length) {\n nodes.push({ type: 'text', text: text.slice(lastIndex) });\n }\n return nodes.length ? nodes : [{ type: 'text', text }];\n };\n\n const lines = desc.split(/\\r?\\n/);\n const content: any[] = [];\n\n let i = 0;\n while (i < lines.length) {\n const raw = lines[i] ?? '';\n const line = raw.trimEnd();\n if (line.trim().length === 0) {\n // Blank line โ€“ add empty paragraph for spacing\n content.push({ type: 'paragraph', content: [] });\n i++;\n continue;\n }\n\n // Section label on its own line: \"Something:\" โ†’ bold label paragraph\n const soloLabelMatch = /^(?<title>[^:]{2,}):\\s*$/.exec(line);\n if (soloLabelMatch?.groups?.title) {\n const title = `${soloLabelMatch.groups.title}:`;\n content.push({\n type: 'paragraph',\n content: [{ type: 'text', text: title, marks: [{ type: 'strong' }] }],\n });\n i++;\n\n // Special-case: Stack trace section โ†’ capture following non-empty lines as codeBlock\n if (/^stack\\s*trace$/i.test(soloLabelMatch.groups.title.trim())) {\n const codeLines: string[] = [];\n while (i < lines.length && (lines[i] ?? '').trim().length > 0) {\n codeLines.push(lines[i] as string);\n i++;\n }\n if (codeLines.length) {\n content.push({\n type: 'codeBlock',\n attrs: { language: '' },\n content: [{ type: 'text', text: codeLines.join('\\n') }],\n });\n }\n }\n continue;\n }\n\n // Ordered list group\n if (/^\\d+\\.\\s+/.test(line)) {\n const items: any[] = [];\n while (i < lines.length) {\n const cur = lines[i] ?? '';\n if (!/^\\d+\\.\\s+/.test(cur)) break;\n const itemText = cur.replace(/^\\d+\\.\\s+/, '');\n items.push({\n type: 'listItem',\n content: [{ type: 'paragraph', content: makeTextNodes(itemText) }],\n });\n i++;\n }\n content.push({ type: 'orderedList', content: items });\n continue;\n }\n\n // Bullet list group\n if (/^(?:[-โ€ข])\\s+/.test(line)) {\n const items: any[] = [];\n while (i < lines.length) {\n const cur = lines[i] ?? '';\n if (!/^(?:[-โ€ข])\\s+/.test(cur)) break;\n const itemText = cur.replace(/^(?:[-โ€ข])\\s+/, '');\n items.push({\n type: 'listItem',\n content: [{ type: 'paragraph', content: makeTextNodes(itemText) }],\n });\n i++;\n }\n content.push({ type: 'bulletList', content: items });\n continue;\n }\n\n // Label: value โ†’ bold label then text\n const labelMatch =\n /^(?<label>[A-ZรฤŒฤŽร‰ฤšรฤฝฤนล‡ร“ล˜ล ลครšลฎรลฝa-zรกฤฤรฉฤ›รญฤพฤบลˆรณล™ลกลฅรบลฏรฝลพ\\s]+):\\s+(?<value>.+)$/.exec(line);\n if (labelMatch?.groups?.label && labelMatch.groups.value) {\n content.push({\n type: 'paragraph',\n content: [\n { type: 'text', text: `${labelMatch.groups.label}:`, marks: [{ type: 'strong' }] },\n { type: 'text', text: ' ' },\n ...makeTextNodes(labelMatch.groups.value),\n ],\n });\n i++;\n continue;\n }\n\n // Fallback paragraph; make lines that look like paths/methods monospace\n if (/^\\//.test(line) || /[A-Za-z]:\\\\/.test(line)) {\n content.push({\n type: 'paragraph',\n content: [{ type: 'text', text: line, marks: [{ type: 'code' }] }],\n });\n } else {\n content.push({ type: 'paragraph', content: makeTextNodes(line) });\n }\n i++;\n }\n\n return { type: 'doc', version: 1, content };\n}\n\nexport async function getVisibleProjects(\n options: {\n expand?: string[];\n recent?: number;\n } = {}\n): Promise<JiraProject[]> {\n const allProjects: JiraProject[] = [];\n let startAt = 0;\n let isLast = false;\n\n // Fetch all pages of projects\n while (!isLast) {\n const params: Record<string, any> = {\n startAt,\n maxResults: 50, // Jira default, fetch 50 projects per page\n };\n\n if (options.expand) {\n params.expand = options.expand.join(',');\n }\n\n if (options.recent) {\n params.recent = options.recent;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/project/search',\n params,\n };\n\n const response = await makeJiraRequest<PaginatedResponse<JiraProject>>(config);\n\n allProjects.push(...response.values);\n isLast = response.isLast;\n startAt += response.maxResults;\n }\n\n return allProjects;\n}\n\nexport async function getIssue(\n issueKey: string,\n options: {\n expand?: string[];\n fields?: string[];\n } = {}\n): Promise<JiraIssue> {\n const params: Record<string, any> = {};\n\n if (options.expand) {\n params.expand = options.expand.join(',');\n }\n\n if (options.fields) {\n params.fields = options.fields.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: `/issue/${issueKey}`,\n params,\n };\n\n return await makeJiraRequest<JiraIssue>(config);\n}\n\nexport async function searchIssues(options: {\n jql: string;\n nextPageToken?: string;\n maxResults?: number;\n fields?: string[];\n expand?: string[];\n}): Promise<JiraSearchResult> {\n const { jql, nextPageToken, maxResults = 50 } = options;\n\n // Sanitize JQL\n const sanitizedJql = sanitizeJQL(jql);\n\n const data: Record<string, any> = {\n jql: sanitizedJql,\n maxResults,\n };\n\n if (nextPageToken) {\n data.nextPageToken = nextPageToken;\n }\n\n if (options.fields) {\n data.fields = options.fields;\n }\n\n if (options.expand && options.expand.length > 0) {\n // Jira API expects expand as comma-separated string for POST /search/jql\n data.expand = options.expand.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/search/jql',\n data,\n };\n\n return await makeJiraRequest<JiraSearchResult>(config);\n}\n\nexport async function createIssue(\n issueData: {\n projectKey: string;\n summary: string;\n description?: string;\n issueType: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n customFields?: Record<string, any>;\n format?: 'markdown' | 'adf' | 'plain';\n },\n options: { returnIssue?: boolean } = { returnIssue: true }\n): Promise<JiraIssue | string> {\n const fields: Record<string, any> = {\n project: { key: issueData.projectKey },\n summary: issueData.summary,\n issuetype: { name: issueData.issueType },\n };\n\n if (issueData.description !== undefined) {\n fields.description = ensureAdfDescription(\n issueData.description,\n issueData.format || 'markdown'\n );\n }\n\n if (issueData.priority) {\n fields.priority = { name: issueData.priority };\n }\n\n if (issueData.assignee) {\n fields.assignee = { accountId: issueData.assignee };\n }\n\n if (issueData.labels && issueData.labels.length > 0) {\n fields.labels = issueData.labels;\n }\n\n if (issueData.components && issueData.components.length > 0) {\n fields.components = issueData.components.map((name) => ({ name }));\n }\n\n // Merge any custom fields provided by the caller\n if (issueData.customFields && typeof issueData.customFields === 'object') {\n for (const [key, value] of Object.entries(issueData.customFields)) {\n // Do not overwrite standard fields if accidentally duplicated\n if (!(key in fields)) {\n fields[key] = value;\n }\n }\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issue',\n data: { fields },\n };\n\n const response = await makeJiraRequest<{ key: string; id: string; self: string }>(config);\n\n if (options.returnIssue === false) {\n return response.key;\n }\n\n // Return the created issue\n return await getIssue(response.key);\n}\n\nexport async function updateIssue(\n issueKey: string,\n updates: {\n summary?: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n format?: 'markdown' | 'adf' | 'plain';\n }\n): Promise<void> {\n const fields: Record<string, any> = {};\n\n if (updates.summary !== undefined) {\n fields.summary = updates.summary;\n }\n\n if (updates.description !== undefined) {\n fields.description = ensureAdfDescription(updates.description, updates.format || 'markdown');\n }\n\n if (updates.priority !== undefined) {\n fields.priority = { name: updates.priority };\n }\n\n if (updates.assignee !== undefined) {\n fields.assignee = updates.assignee ? { accountId: updates.assignee } : null;\n }\n\n if (updates.labels !== undefined) {\n fields.labels = updates.labels;\n }\n\n if (updates.components !== undefined) {\n fields.components = updates.components.map((name) => ({ name }));\n }\n\n const config: AxiosRequestConfig = {\n method: 'PUT',\n url: `/issue/${issueKey}`,\n data: { fields },\n };\n\n await makeJiraRequest(config);\n}\n\nexport async function getCurrentUser(): Promise<JiraUser> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/myself',\n };\n\n return await makeJiraRequest<JiraUser>(config);\n}\n\nexport async function getMyIssues(\n options: {\n nextPageToken?: string;\n maxResults?: number;\n fields?: string[];\n expand?: string[];\n } = {}\n): Promise<JiraSearchResult> {\n const jql = `assignee = currentUser() ORDER BY updated DESC`;\n\n const searchParams: any = {\n jql,\n maxResults: options.maxResults || 50,\n };\n\n if (options.nextPageToken !== undefined) searchParams.nextPageToken = options.nextPageToken;\n if (options.fields !== undefined) searchParams.fields = options.fields;\n if (options.expand !== undefined) searchParams.expand = options.expand;\n\n return await searchIssues(searchParams);\n}\n\nexport async function getIssueTypes(projectKey?: string): Promise<JiraIssueType[]> {\n let url = '/issuetype';\n\n if (projectKey) {\n url = `/project/${projectKey}/issuetype`;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url,\n };\n\n return await makeJiraRequest<JiraIssueType[]>(config);\n}\n\nexport async function getUsers(\n options: {\n query?: string;\n username?: string;\n accountId?: string;\n startAt?: number;\n maxResults?: number;\n } = {}\n): Promise<JiraUser[]> {\n const params: Record<string, any> = {};\n\n if (options.query) {\n params.query = options.query;\n }\n\n if (options.username) {\n params.username = options.username;\n }\n\n if (options.accountId) {\n params.accountId = options.accountId;\n }\n\n if (options.startAt !== undefined) {\n params.startAt = options.startAt;\n }\n\n if (options.maxResults !== undefined) {\n params.maxResults = options.maxResults;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/user/search',\n params,\n };\n\n return await makeJiraRequest<JiraUser[]>(config);\n}\n\nexport async function getPriorities(): Promise<JiraPriority[]> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/priority',\n };\n\n return await makeJiraRequest<JiraPriority[]>(config);\n}\n\nexport async function getStatuses(\n options: {\n projectKey?: string;\n issueTypeId?: string;\n } = {}\n): Promise<JiraStatus[]> {\n let url = '/status';\n\n if (options.projectKey && options.issueTypeId) {\n url = `/project/${options.projectKey}/statuses`;\n } else if (options.projectKey) {\n url = `/project/${options.projectKey}/statuses`;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url,\n };\n\n if (options.projectKey) {\n const response =\n await makeJiraRequest<Array<{ id?: string; name: string; statuses: JiraStatus[] }>>(config);\n if (options.issueTypeId) {\n const match = response.find(\n (issueType) =>\n issueType.id === options.issueTypeId || issueType.name === options.issueTypeId\n );\n if (match) return match.statuses;\n }\n // Flatten the statuses from all issue types\n return response.flatMap((issueType) => issueType.statuses);\n }\n return await makeJiraRequest<JiraStatus[]>(config);\n}\n\nexport async function addComment(\n issueKey: string,\n body: string,\n visibility?: { type: string; value: string },\n format?: 'markdown' | 'adf' | 'plain'\n): Promise<JiraComment> {\n // Convert body to ADF format (Jira expects ADF for comments)\n const adfBody = ensureAdfDescription(body, format || 'markdown');\n\n const data: any = {\n body: adfBody,\n };\n\n if (visibility) {\n data.visibility = visibility;\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: `/issue/${issueKey}/comment`,\n data,\n };\n\n return await makeJiraRequest<JiraComment>(config);\n}\n\nexport async function getProjectDetails(\n projectKey: string,\n expand?: string[]\n): Promise<JiraProjectDetails> {\n const params: Record<string, any> = {};\n\n if (expand) {\n params.expand = expand.join(',');\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: `/project/${projectKey}`,\n params,\n };\n\n return await makeJiraRequest<JiraProjectDetails>(config);\n}\n\nexport async function createSubtask(\n parentIssueKey: string,\n subtaskData: {\n summary: string;\n description?: string;\n priority?: string;\n assignee?: string;\n labels?: string[];\n components?: string[];\n format?: 'markdown' | 'adf' | 'plain';\n }\n): Promise<JiraIssue> {\n // First get parent issue to determine project and subtask issue type\n const parentIssue = await getIssue(parentIssueKey);\n const projectKey = parentIssue.fields.project.key;\n\n // Get available issue types for the project\n const issueTypes = await getIssueTypes(projectKey);\n const subtaskType = issueTypes.find((type) => type.subtask);\n\n if (!subtaskType) {\n throw new Error(`No subtask issue type found for project ${projectKey}`);\n }\n\n const fields: Record<string, any> = {\n project: { key: projectKey },\n parent: { key: parentIssueKey },\n summary: subtaskData.summary,\n issuetype: { id: subtaskType.id },\n };\n\n if (subtaskData.description !== undefined) {\n fields.description = ensureAdfDescription(\n subtaskData.description,\n subtaskData.format || 'markdown'\n );\n }\n\n if (subtaskData.priority) {\n fields.priority = { name: subtaskData.priority };\n }\n\n if (subtaskData.assignee) {\n fields.assignee = { accountId: subtaskData.assignee };\n }\n\n if (subtaskData.labels && subtaskData.labels.length > 0) {\n fields.labels = subtaskData.labels;\n }\n\n if (subtaskData.components && subtaskData.components.length > 0) {\n fields.components = subtaskData.components.map((name) => ({ name }));\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issue',\n data: { fields },\n };\n\n const response = await makeJiraRequest<JiraCreateIssueResponse>(config);\n\n // Return the created subtask\n return await getIssue(response.key);\n}\n\nexport async function getCreateMeta(\n options: {\n projectKeys?: string[];\n issueTypeNames?: string[];\n expand?: string;\n } = {}\n): Promise<JiraCreateMetaResponse> {\n // Use the classic createmeta endpoint with expand parameter for reliability\n // This endpoint is widely supported and returns complete field metadata including allowedValues\n const params: Record<string, any> = {};\n\n if (options.projectKeys && options.projectKeys.length > 0) {\n params.projectKeys = options.projectKeys.join(',');\n }\n\n if (options.issueTypeNames && options.issueTypeNames.length > 0) {\n params.issuetypeNames = options.issueTypeNames.join(',');\n }\n\n // Always use expand parameter to get full field metadata including allowedValues\n if (options.expand) {\n params.expand = options.expand;\n }\n\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/issue/createmeta',\n params,\n };\n\n return await makeJiraRequest<JiraCreateMetaResponse>(config);\n}\n\nexport async function getFields(): Promise<JiraField[]> {\n const config: AxiosRequestConfig = {\n method: 'GET',\n url: '/field',\n };\n\n return await makeJiraRequest<JiraField[]>(config);\n}\n\nexport async function createIssueLink(\n fromIssue: string,\n toIssue: string,\n linkType: string\n): Promise<void> {\n // Map common link type names to Jira link type format\n // Jira link types are case-sensitive\n const linkTypeMap: Record<string, string> = {\n blocks: 'Blocks',\n 'is blocked by': 'Blocks',\n relates: 'Relates',\n 'relates to': 'Relates',\n duplicates: 'Duplicate',\n duplicate: 'Duplicate',\n 'is duplicated by': 'Duplicate',\n clones: 'Cloners',\n 'is cloned by': 'Cloners',\n };\n\n const normalizedLinkType = linkType.toLowerCase();\n const jiraLinkType = linkTypeMap[normalizedLinkType] || linkType;\n\n // Determine issue direction based on link type\n // For \"blocks\": fromIssue blocks toIssue (fromIssue = outward, toIssue = inward)\n // For \"is blocked by\": fromIssue is blocked by toIssue (fromIssue = inward, toIssue = outward)\n const isInward =\n normalizedLinkType === 'is blocked by' ||\n normalizedLinkType === 'is duplicated by' ||\n normalizedLinkType === 'is cloned by';\n\n const data: any = {\n type: {\n name: jiraLinkType,\n },\n };\n\n if (isInward) {\n data.inwardIssue = { key: fromIssue };\n data.outwardIssue = { key: toIssue };\n } else {\n data.outwardIssue = { key: fromIssue };\n data.inwardIssue = { key: toIssue };\n }\n\n const config: AxiosRequestConfig = {\n method: 'POST',\n url: '/issueLink',\n data,\n };\n\n await makeJiraRequest(config);\n}\n","export function isRedactionEnabled(): boolean {\n const val = process.env.MCP_REDACT_SENSITIVE || process.env.REDACT_SENSITIVE;\n return val === '1' || val?.toLowerCase() === 'true';\n}\n\nexport function maybeRedactAccountId(accountId?: string | null): string {\n if (!accountId) return 'N/A';\n if (!isRedactionEnabled()) return accountId;\n // Show first 4 chars and mask the rest to keep stable identifiers without full disclosure\n const head = accountId.slice(0, 4);\n return `${head}โ€ฆ`; // masked\n}\n\nexport function maybeRedactEmail(email?: string | null): string {\n if (!email) return 'N/A';\n if (!isRedactionEnabled()) return email;\n return 'hidden';\n}\n","import { McpToolResponse } from '../types/common.js';\nimport { maybeRedactAccountId, maybeRedactEmail } from './redaction.js';\nimport {\n JiraProject,\n JiraIssue,\n JiraSearchResult,\n JiraUser,\n JiraIssueType,\n JiraPriority,\n JiraStatus,\n JiraComment,\n JiraProjectDetails,\n JiraCreateMetaResponse,\n JiraField,\n} from '../types/jira.js';\n\nexport function formatProjectsResponse(projects: JiraProject[]): McpToolResponse {\n const projectsList = projects\n .map(\n (project) =>\n `โ€ข **${project.key}** - ${project.name}\\n ${project.description || 'No description'}\\n Type: ${project.projectTypeKey} | Private: ${project.isPrivate ? 'Yes' : 'No'}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${projects.length} visible project(s):\\n\\n${projectsList}`,\n },\n ],\n };\n}\n\nfunction adfToPlainText(adf: any): string {\n // Very lightweight ADF to text conversion (best-effort)\n try {\n const walk = (node: any): string => {\n if (!node) return '';\n switch (node.type) {\n case 'text':\n return node.text || '';\n case 'paragraph':\n case 'heading':\n case 'blockquote':\n return (node.content || []).map(walk).join('');\n case 'codeBlock':\n return '\\n' + (node.content || []).map(walk).join('') + '\\n';\n case 'bulletList':\n case 'orderedList':\n return (node.content || []).map(walk).join('\\n');\n case 'listItem':\n return 'โ€ข ' + (node.content || []).map(walk).join('');\n case 'hardBreak':\n return '\\n';\n default:\n if (Array.isArray(node.content)) return node.content.map(walk).join('');\n return '';\n }\n };\n if (adf && Array.isArray(adf.content)) {\n return adf.content.map(walk).join('\\n').trim();\n }\n } catch {\n // ignore and fallback\n }\n return '';\n}\n\nexport function formatIssueResponse(issue: JiraIssue): McpToolResponse {\n const { key, fields } = issue;\n\n const summary = fields?.summary || 'No summary';\n\n const assigneeText = fields?.assignee\n ? `${fields.assignee.displayName} (${maybeRedactAccountId(fields.assignee.accountId)})`\n : 'Unassigned';\n\n const reporterText = fields?.reporter\n ? `${fields.reporter.displayName} (${maybeRedactAccountId(fields.reporter.accountId)})`\n : 'Unknown';\n\n const labelsArray = Array.isArray(fields?.labels) ? fields.labels : [];\n const labelsText = labelsArray.length > 0 ? labelsArray.join(', ') : 'None';\n\n const componentsArray = Array.isArray(fields?.components) ? fields.components : [];\n const componentsText =\n componentsArray.length > 0 ? componentsArray.map((c) => c.name).join(', ') : 'None';\n\n let description = fields?.description as any;\n if (description && typeof description === 'object') {\n const parsed = adfToPlainText(description);\n description = parsed || '[rich text description omitted]';\n }\n if (!description || typeof description !== 'string') {\n description = 'No description provided';\n }\n\n const createdText = fields?.created ? new Date(fields.created).toISOString() : 'N/A';\n const updatedText = fields?.updated ? new Date(fields.updated).toISOString() : 'N/A';\n\n return {\n content: [\n {\n type: 'text',\n text: `**${key}: ${summary}**\\n\\n**Status:** ${fields?.status?.name || 'Unknown'}\\n**Priority:** ${fields?.priority?.name || 'None'}\\n**Assignee:** ${assigneeText}\\n**Reporter:** ${reporterText}\\n**Project:** ${fields?.project?.name || 'Unknown'} (${fields?.project?.key || 'N/A'})\\n**Issue Type:** ${fields?.issuetype?.name || 'Unknown'}\\n**Labels:** ${labelsText}\\n**Components:** ${componentsText}\\n**Created:** ${createdText}\\n**Updated:** ${updatedText}\\n\\n**Description:**\\n${description}`,\n },\n ],\n };\n}\n\nexport function formatSearchResultsResponse(result: JiraSearchResult): McpToolResponse {\n if (result.issues.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No issues found matching your search criteria.',\n },\n ],\n };\n }\n\n const issuesList = result.issues\n .map((issue) => {\n const assignee = issue.fields?.assignee?.displayName || 'Unassigned';\n const summary = issue.fields?.summary || 'No summary';\n const status = issue.fields?.status?.name || 'Unknown';\n const priority = issue.fields?.priority?.name || 'None';\n return `โ€ข **${issue.key}** - ${summary}\\n Status: ${status} | Assignee: ${assignee} | Priority: ${priority}`;\n })\n .join('\\n\\n');\n\n const total = result.total ?? result.issues.length;\n const rangeStart = result.startAt + 1;\n const rangeEnd = Math.min(result.startAt + result.maxResults, total);\n const showRangeInline = total > result.maxResults || result.startAt > 0;\n\n // Build pagination info\n let paginationInfo = '';\n if (showRangeInline) {\n paginationInfo = `\\n\\n*Showing ${rangeStart}-${rangeEnd} of ${total} results*`;\n }\n\n // Add nextPageToken info if present and not last page\n if (result.nextPageToken && !result.isLast) {\n paginationInfo += `\\n*Next page token: \\`${result.nextPageToken}\\`*`;\n } else if (result.isLast) {\n paginationInfo += '\\n*This is the last page of results*';\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${total} issue(s)${showRangeInline ? ` (showing ${rangeStart}-${rangeEnd})` : ''}:\\n\\n${issuesList}${paginationInfo}`,\n },\n ],\n };\n}\n\nexport function formatErrorResponse(error: any): McpToolResponse {\n let errorMessage = 'An unexpected error occurred.';\n let hasCustomFieldError = false;\n\n if (typeof error === 'string') {\n errorMessage = error;\n hasCustomFieldError = error.includes('customfield_');\n } else if (error instanceof Error) {\n errorMessage = error.message;\n hasCustomFieldError = error.message.includes('customfield_');\n } else if (error?.response?.data) {\n const jiraError = error.response.data;\n if (jiraError.errorMessages && jiraError.errorMessages.length > 0) {\n errorMessage = jiraError.errorMessages.join(', ');\n } else if (jiraError.errors) {\n const errors = Object.entries(jiraError.errors);\n errorMessage = errors.map(([field, message]) => `${field}: ${message}`).join(', ');\n\n // Check if any error is related to custom fields\n hasCustomFieldError = errors.some(([field]) => field.startsWith('customfield_'));\n }\n }\n\n // Add helpful hint for custom field errors\n let hint = '';\n if (hasCustomFieldError) {\n hint = `\\n\\n๐Ÿ’ก **Hint:** This error involves custom fields. Use 'jira_get_create_meta' tool to discover required fields and their allowed values before creating an issue.`;\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `โŒ Error: ${errorMessage}${hint}`,\n },\n ],\n };\n}\n\nexport function formatSuccessResponse(message: string): McpToolResponse {\n return {\n content: [\n {\n type: 'text',\n text: `โœ… ${message}`,\n },\n ],\n };\n}\n\nexport function formatUsersResponse(users: JiraUser[]): McpToolResponse {\n if (users.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No users found matching your search criteria.',\n },\n ],\n };\n }\n\n const usersList = users\n .map(\n (user) =>\n `โ€ข **${user.displayName}** (${maybeRedactAccountId(user.accountId)})\\n Email: ${maybeRedactEmail(user.emailAddress)} | Active: ${user.active ? 'Yes' : 'No'} | Type: ${user.accountType}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${users.length} user(s):\\n\\n${usersList}`,\n },\n ],\n };\n}\n\nexport function formatIssueTypesResponse(issueTypes: JiraIssueType[]): McpToolResponse {\n if (issueTypes.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No issue types found.',\n },\n ],\n };\n }\n\n const typesList = issueTypes\n .map(\n (type) =>\n `โ€ข **${type.name}** (ID: ${type.id})\\n ${type.description}\\n Subtask: ${type.subtask ? 'Yes' : 'No'}`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${issueTypes.length} issue type(s):\\n\\n${typesList}`,\n },\n ],\n };\n}\n\nexport function formatPrioritiesResponse(priorities: JiraPriority[]): McpToolResponse {\n if (priorities.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No priorities found.',\n },\n ],\n };\n }\n\n const prioritiesList = priorities\n .map((priority) => `โ€ข **${priority.name}** (ID: ${priority.id})\\n ${priority.description}`)\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${priorities.length} priority level(s):\\n\\n${prioritiesList}`,\n },\n ],\n };\n}\n\nexport function formatStatusesResponse(statuses: JiraStatus[]): McpToolResponse {\n if (statuses.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No statuses found.',\n },\n ],\n };\n }\n\n const statusesList = statuses\n .map(\n (status) =>\n `โ€ข **${status.name}** (ID: ${status.id})\\n ${status.description}\\n Category: ${status.statusCategory.name} (${status.statusCategory.key})`\n )\n .join('\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `Found ${statuses.length} status(es):\\n\\n${statusesList}`,\n },\n ],\n };\n}\n\nexport function formatCommentResponse(comment: JiraComment): McpToolResponse {\n const visibilityText = comment.visibility\n ? `\\n**Visibility:** ${comment.visibility.type} - ${comment.visibility.value}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `**Comment added successfully**\n\n**Author:** ${comment.author.displayName}\n**Created:** ${new Date(comment.created).toISOString()}${visibilityText}\n\n**Content:**\n${comment.body}`,\n },\n ],\n };\n}\n\nexport function formatProjectDetailsResponse(project: JiraProjectDetails): McpToolResponse {\n const leadText = project.lead\n ? `${project.lead.displayName} (${project.lead.accountId})`\n : 'No lead assigned';\n\n const componentsText =\n project.components.length > 0 ? project.components.map((c) => c.name).join(', ') : 'None';\n\n const versionsText =\n project.versions.length > 0 ? project.versions.map((v) => v.name).join(', ') : 'None';\n\n const issueTypesText =\n project.issueTypes.length > 0\n ? project.issueTypes.map((t) => `${t.name}${t.subtask ? ' (Subtask)' : ''}`).join(', ')\n : 'None';\n\n const rolesText =\n Object.keys(project.roles).length > 0 ? Object.keys(project.roles).join(', ') : 'None';\n\n const insightText = project.insight\n ? `\\n\\n**Project Insights:**\nTotal Issues: ${project.insight.totalIssueCount}\nLast Updated: ${new Date(project.insight.lastIssueUpdateTime).toISOString()}`\n : '';\n\n return {\n content: [\n {\n type: 'text',\n text: `**${project.key}: ${project.name}**\n\n**Description:** ${project.description || 'No description'}\n**Type:** ${project.projectTypeKey}\n**Private:** ${project.isPrivate ? 'Yes' : 'No'}\n**Lead:** ${leadText}\n\n**Components:** ${componentsText}\n**Versions:** ${versionsText}\n**Issue Types:** ${issueTypesText}\n**Roles:** ${rolesText}${insightText}`,\n },\n ],\n };\n}\n\nexport function formatCreateMetaResponse(meta: JiraCreateMetaResponse): McpToolResponse {\n if (!meta.projects || meta.projects.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: 'No create metadata found for the specified project.',\n },\n ],\n };\n }\n\n const project = meta.projects[0];\n if (!project) {\n return {\n content: [\n {\n type: 'text',\n text: 'No create metadata found for the specified project.',\n },\n ],\n };\n }\n\n const issueTypesList = project.issuetypes\n .map((issueType) => {\n const requiredFields: string[] = [];\n const optionalFields: string[] = [];\n\n Object.entries(issueType.fields).forEach(([fieldKey, field]) => {\n const allowedValuesText = field.allowedValues\n ? `\\n Allowed values: ${field.allowedValues.map((v) => v.name || v.value || v.id).join(', ')}`\n : '';\n const defaultValueText = field.hasDefaultValue\n ? `\\n Default: ${JSON.stringify(field.defaultValue)}`\n : '';\n\n const fieldInfo = ` โ€ข **${field.name}** (${fieldKey})\\n Type: ${field.schema.type}${allowedValuesText}${defaultValueText}`;\n\n if (field.required) {\n requiredFields.push(fieldInfo);\n } else {\n optionalFields.push(fieldInfo);\n }\n });\n\n const requiredSection =\n requiredFields.length > 0\n ? `**Required Fields:**\\n${requiredFields.join('\\n\\n')}`\n : 'No required fields';\n const optionalSection =\n optionalFields.length > 0 ? `\\n\\n**Optional Fields:**\\n${optionalFields.join('\\n\\n')}` : '';\n\n return `### ${issueType.name} (${issueType.subtask ? 'Subtask' : 'Issue'})\\n${issueType.description}\\n\\n${requiredSection}${optionalSection}`;\n })\n .join('\\n\\n---\\n\\n');\n\n return {\n content: [\n {\n type: 'text',\n text: `**Create Metadata for Project: ${project.name} (${project.key})**\\n\\n${issueTypesList}`,\n },\n ],\n };\n}\n\nexport function formatCustomFieldsResponse(\n fields: JiraField[],\n projectKey?: string\n): McpToolResponse {\n const customFields = fields.filter((field) => field.custom);\n\n if (customFields.length === 0) {\n return {\n content: [\n {\n type: 'text',\n text: projectKey\n ? `No custom fields found for project ${projectKey}.`\n : 'No custom fields found.',\n },\n ],\n };\n }\n\n const fieldsList = customFields\n .map((field) => {\n const schemaInfo = field.schema.custom\n ? `Custom Type: ${field.schema.custom}`\n : `Type: ${field.schema.type}`;\n return `โ€ข **${field.name}** (${field.key})\\n ${schemaInfo}\\n ID: ${field.id}`;\n })\n .join('\\n\\n');\n\n const header = projectKey\n ? `Found ${customFields.length} custom field(s) for project ${projectKey}:`\n : `Found ${customFields.length} custom field(s):`;\n\n return {\n content: [\n {\n type: 'text',\n text: `${header}\\n\\n${fieldsList}`,\n },\n ],\n };\n}\n","import { McpToolResponse } from '../types/common.js';\nimport { formatErrorResponse } from './formatters.js';\nimport { ERROR_MESSAGES } from '../config/constants.js';\nimport { createLogger } from './logger.js';\n\nconst log = createLogger('error-handler');\n\nexport class JiraApiError extends Error {\n constructor(\n message: string,\n public statusCode?: number,\n public jiraErrors?: string[],\n public originalError?: any\n ) {\n super(message);\n this.name = 'JiraApiError';\n }\n}\n\nexport function handleError(error: any): McpToolResponse {\n log.error('Tool error:', error);\n\n // Direct string errors\n if (typeof error === 'string') {\n return formatErrorResponse(error);\n }\n\n // Handle known error types\n if (error instanceof JiraApiError) {\n return formatErrorResponse(error.message);\n }\n\n if (error?.response?.status === 401) {\n return formatErrorResponse(ERROR_MESSAGES.INVALID_CREDENTIALS);\n }\n\n if (error?.response?.status === 404) {\n return formatErrorResponse('Resource not found or insufficient permissions');\n }\n\n if (error?.response?.status === 429) {\n return formatErrorResponse(ERROR_MESSAGES.RATE_LIMIT_EXCEEDED);\n }\n\n if (!error?.response && error?.code === 'ECONNREFUSED') {\n return formatErrorResponse(ERROR_MESSAGES.NETWORK_ERROR);\n }\n\n // Handle validation errors\n if (error?.message?.includes('validation')) {\n return formatErrorResponse(error.message);\n }\n\n // Handle Jira API errors\n if (error?.response?.data) {\n const jiraError = error.response.data;\n\n if (jiraError.errorMessages && jiraError.errorMessages.length > 0) {\n return formatErrorResponse(jiraError.errorMessages.join(', '));\n }\n\n if (jiraError.errors) {\n const errorDetails = Object.entries(jiraError.errors)\n .map(([field, message]) => `${field}: ${message}`)\n .join(', ');\n return formatErrorResponse(errorDetails);\n }\n }\n\n // Default error handling\n const message = error?.message || 'An unexpected error occurred';\n return formatErrorResponse(message);\n}\n\nexport function createJiraApiError(error: any): JiraApiError {\n if (error.response) {\n const status = error.response.status;\n const data = error.response.data;\n\n let message = `Jira API error (${status})`;\n let jiraErrors: string[] = [];\n\n if (data?.errorMessages) {\n jiraErrors = data.errorMessages;\n message = data.errorMessages.join(', ');\n } else if (data?.errors) {\n jiraErrors = Object.values(data.errors);\n message = Object.entries(data.errors)\n .map(([field, msg]) => `${field}: ${msg}`)\n .join(', ');\n }\n\n return new JiraApiError(message, status, jiraErrors, error);\n }\n\n if (error.code === 'ECONNREFUSED') {\n return new JiraApiError(ERROR_MESSAGES.NETWORK_ERROR, undefined, [], error);\n }\n\n return new JiraApiError(error.message || 'Unknown Jira API error', undefined, [], error);\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetVisibleProjectsInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getVisibleProjects } from '../utils/api-helpers.js';\nimport { formatProjectsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-visible-projects');\n\nexport const getVisibleProjectsTool: Tool = {\n name: TOOL_NAMES.GET_VISIBLE_PROJECTS,\n description:\n 'Retrieves all projects accessible to the authenticated user. Returns project keys, names, descriptions, and basic metadata.',\n inputSchema: {\n type: 'object',\n properties: {\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional project details to include (e.g., [\"description\", \"lead\", \"issueTypes\"])',\n default: [],\n },\n recent: {\n type: 'number',\n description: 'Limit results to recently accessed projects (max number)',\n minimum: 1,\n maximum: 100,\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetVisibleProjects(input: any): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetVisibleProjectsInputSchema, input);\n\n log.info('Getting visible projects...');\n\n const getParams: any = {};\n\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n if (validated.recent !== undefined) getParams.recent = validated.recent;\n\n const projects = await getVisibleProjects(getParams);\n\n log.info(`Found ${projects.length} project(s)`);\n\n return formatProjectsResponse(projects);\n } catch (error) {\n log.error('Error in handleGetVisibleProjects:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetIssueInputSchema } from '../types/tools.js';\nimport { validateInput, extractIssueKey } from '../utils/validators.js';\nimport { getIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-issue');\n\nexport const getIssueTool: Tool = {\n name: TOOL_NAMES.GET_ISSUE,\n description:\n 'Retrieve details for a specific Jira issue by key or URL. Use this when the user mentions an issue like \"PAYWALL-943\" or pastes a Jira link (e.g., https://your.atlassian.net/browse/PAYWALL-943). Returns status, assignee, priority, project, type, labels, components, timestamps, and description.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description:\n 'Issue key or full Jira URL (e.g., PROJECT-123 or https://your.atlassian.net/browse/PROJECT-123)',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional issue details to include (e.g., [\"comments\", \"attachments\", \"changelog\"])',\n default: [],\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve (e.g., [\"summary\", \"status\", \"assignee\"])',\n },\n },\n required: ['issueKey'],\n },\n};\n\nexport async function handleGetIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetIssueInputSchema, input);\n\n // Accept either an issue key or a full Jira URL and extract the key\n const trimmedInput = (validated.issueKey || '').trim();\n const key = extractIssueKey(trimmedInput) || trimmedInput;\n\n log.info(`Getting issue ${key}...`);\n\n const getParams: any = {};\n\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n if (validated.fields !== undefined) getParams.fields = validated.fields;\n\n const issue = await getIssue(key, getParams);\n\n log.info(`Retrieved issue ${issue.key}`);\n\n return formatIssueResponse(issue);\n } catch (error) {\n log.error('Error in handleGetIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { SearchIssuesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { searchIssues } from '../utils/api-helpers.js';\nimport { formatSearchResultsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:search-issues');\n\nexport const searchIssuesTool: Tool = {\n name: TOOL_NAMES.SEARCH_ISSUES,\n description:\n 'Search for Jira issues using JQL. Supports complex queries with pagination and field selection. Examples: \"project = PROJECT AND status = Open\", \"assignee = currentUser()\". For pagination, use nextPageToken from previous response.',\n inputSchema: {\n type: 'object',\n properties: {\n jql: {\n type: 'string',\n description: 'JQL query string (e.g., \"project = PROJECT AND status = Open\")',\n },\n nextPageToken: {\n type: 'string',\n description:\n 'Token for pagination. Omit for first page, use value from previous response for next page.',\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return per page',\n minimum: 1,\n maximum: 100,\n default: 50,\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve for each issue',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description: 'Additional details to include for each issue',\n default: [],\n },\n },\n required: ['jql'],\n },\n};\n\nexport async function handleSearchIssues(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(SearchIssuesInputSchema, input);\n\n log.info(`Searching issues with JQL: \"${validated.jql}\"...`);\n\n const searchParams: any = {\n jql: validated.jql,\n };\n\n if (validated.nextPageToken !== undefined) searchParams.nextPageToken = validated.nextPageToken;\n if (validated.maxResults !== undefined) searchParams.maxResults = validated.maxResults;\n if (validated.fields !== undefined) searchParams.fields = validated.fields;\n if (validated.expand !== undefined) searchParams.expand = validated.expand;\n\n const result = await searchIssues(searchParams);\n\n log.info(`Found ${result.total ?? 0} issue(s), showing ${result.issues.length}`);\n\n return formatSearchResultsResponse(result);\n } catch (error) {\n log.error('Error in handleSearchIssues:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetMyIssuesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getMyIssues } from '../utils/api-helpers.js';\nimport { formatSearchResultsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-my-issues');\n\nexport const getMyIssuesTool: Tool = {\n name: TOOL_NAMES.GET_MY_ISSUES,\n description:\n 'Retrieves issues assigned to current user, sorted by most recently updated first. Supports pagination and field selection. For pagination, use nextPageToken from previous response.',\n inputSchema: {\n type: 'object',\n properties: {\n nextPageToken: {\n type: 'string',\n description:\n 'Token for pagination. Omit for first page, use value from previous response for next page.',\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return per page',\n minimum: 1,\n maximum: 100,\n default: 50,\n },\n fields: {\n type: 'array',\n items: { type: 'string' },\n description: 'Specific fields to retrieve for each issue',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description: 'Additional details to include for each issue',\n default: [],\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetMyIssues(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetMyIssuesInputSchema, input);\n\n log.info('Getting issues assigned to current user...');\n\n const getParams: any = {};\n\n if (validated.nextPageToken !== undefined) getParams.nextPageToken = validated.nextPageToken;\n if (validated.maxResults !== undefined) getParams.maxResults = validated.maxResults;\n if (validated.fields !== undefined) getParams.fields = validated.fields;\n if (validated.expand !== undefined) getParams.expand = validated.expand;\n\n const result = await getMyIssues(getParams);\n\n log.info(\n `Found ${result.total ?? 0} issue(s) assigned to you, showing ${result.issues.length}`\n );\n\n return formatSearchResultsResponse(result);\n } catch (error) {\n log.error('Error in handleGetMyIssues:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetIssueTypesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getIssueTypes } from '../utils/api-helpers.js';\nimport { formatIssueTypesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-issue-types');\n\nexport const getIssueTypesTool: Tool = {\n name: TOOL_NAMES.GET_ISSUE_TYPES,\n description:\n 'Retrieves available issue types. Can get global issue types or project-specific issue types including regular issues and subtasks (Bug, Story, Task, Epic, etc.).',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description:\n 'Project key to get issue types for specific project (optional - if not provided, returns global issue types)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetIssueTypes(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetIssueTypesInputSchema, input);\n\n if (validated.projectKey) {\n log.info(`Getting issue types for project ${validated.projectKey}...`);\n } else {\n log.info('Getting global issue types...');\n }\n\n const issueTypes = await getIssueTypes(validated.projectKey);\n\n log.info(`Found ${issueTypes.length} issue type(s)`);\n\n return formatIssueTypesResponse(issueTypes);\n } catch (error) {\n log.error('Error in handleGetIssueTypes:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetUsersInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getUsers } from '../utils/api-helpers.js';\nimport { formatUsersResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-users');\n\nexport const getUsersTool: Tool = {\n name: TOOL_NAMES.GET_USERS,\n description:\n 'Search for users by name, email, username, or account ID. Returns display name, email, account status, and account type. Supports pagination.',\n inputSchema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query for user name or email (partial matches supported)',\n },\n username: {\n type: 'string',\n description: 'Specific username to search for',\n },\n accountId: {\n type: 'string',\n description: 'Specific account ID to search for',\n },\n startAt: {\n type: 'number',\n description: 'Index of first result to return (for pagination)',\n minimum: 0,\n default: 0,\n },\n maxResults: {\n type: 'number',\n description: 'Maximum number of results to return',\n minimum: 1,\n maximum: 50,\n default: 50,\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetUsers(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetUsersInputSchema, input);\n\n if (validated.query) {\n log.info(`Searching users with query: \"${validated.query}\"...`);\n } else if (validated.username) {\n log.info(`Searching for username: \"${validated.username}\"...`);\n } else if (validated.accountId) {\n log.info(`Searching for account ID: \"${validated.accountId}\"...`);\n } else {\n log.info('Getting all users...');\n }\n\n const getParams: any = {};\n\n if (validated.query !== undefined) getParams.query = validated.query;\n if (validated.username !== undefined) getParams.username = validated.username;\n if (validated.accountId !== undefined) getParams.accountId = validated.accountId;\n if (validated.startAt !== undefined) getParams.startAt = validated.startAt;\n if (validated.maxResults !== undefined) getParams.maxResults = validated.maxResults;\n\n const users = await getUsers(getParams);\n\n log.info(`Found ${users.length} user(s)`);\n\n return formatUsersResponse(users);\n } catch (error) {\n log.error('Error in handleGetUsers:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetPrioritiesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getPriorities } from '../utils/api-helpers.js';\nimport { formatPrioritiesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-priorities');\n\nexport const getPrioritiesTool: Tool = {\n name: TOOL_NAMES.GET_PRIORITIES,\n description:\n 'Retrieves available priorities (e.g., Highest, High, Medium, Low, Lowest). Returns IDs, names, and descriptions.',\n inputSchema: {\n type: 'object',\n properties: {},\n required: [],\n },\n};\n\nexport async function handleGetPriorities(input: unknown): Promise<McpToolResponse> {\n try {\n validateInput(GetPrioritiesInputSchema, input);\n\n log.info('Getting all priority levels...');\n\n const priorities = await getPriorities();\n\n log.info(`Found ${priorities.length} priority level(s)`);\n\n return formatPrioritiesResponse(priorities);\n } catch (error) {\n log.error('Error in handleGetPriorities:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetStatusesInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getStatuses } from '../utils/api-helpers.js';\nimport { formatStatusesResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-statuses');\n\nexport const getStatusesTool: Tool = {\n name: TOOL_NAMES.GET_STATUSES,\n description:\n 'Retrieves available statuses (global or project-specific, e.g., To Do, In Progress, Done). Returns status categories and workflow information.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get statuses for specific project (optional)',\n },\n issueTypeId: {\n type: 'string',\n description: 'Issue type ID to get statuses for specific issue type (requires projectKey)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetStatuses(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetStatusesInputSchema, input);\n\n if (validated.projectKey && validated.issueTypeId) {\n log.info(\n `Getting statuses for project ${validated.projectKey} and issue type ${validated.issueTypeId}...`\n );\n } else if (validated.projectKey) {\n log.info(`Getting statuses for project ${validated.projectKey}...`);\n } else {\n log.info('Getting global statuses...');\n }\n\n const getParams: any = {};\n\n if (validated.projectKey !== undefined) getParams.projectKey = validated.projectKey;\n if (validated.issueTypeId !== undefined) getParams.issueTypeId = validated.issueTypeId;\n\n const statuses = await getStatuses(getParams);\n\n log.info(`Found ${statuses.length} status(es)`);\n\n return formatStatusesResponse(statuses);\n } catch (error) {\n log.error('Error in handleGetStatuses:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\n\nconst log = createLogger('tool:create-issue');\n\nexport const createIssueTool: Tool = {\n name: TOOL_NAMES.CREATE_ISSUE,\n description:\n 'Creates a new Jira issue in the specified project. Supports setting issue type, priority, assignee, labels, components, and custom fields. Description format is controlled by the \"format\" parameter (default: markdown). For required custom fields, supply them via customFields (e.g., { \"customfield_12345\": { id: \"...\" } }). Returns the created issue with all details.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key where the issue will be created',\n },\n summary: {\n type: 'string',\n description: 'Issue summary/title',\n minLength: 1,\n },\n description: {\n anyOf: [{ type: 'string' }, { type: 'object' }],\n description:\n 'Detailed issue description (optional). Format depends on the \"format\" parameter.',\n },\n issueType: {\n type: 'string',\n description: 'Issue type name (e.g., Bug, Story, Task, Epic)',\n },\n priority: {\n type: 'string',\n description: 'Issue priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'Assignee account ID (optional)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Issue labels (optional)',\n default: [],\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'Component names (optional)',\n default: [],\n },\n customFields: {\n type: 'object',\n additionalProperties: true,\n description:\n 'Additional Jira fields, e.g. { \"customfield_10071\": value }. Use this to set required custom fields.',\n },\n returnIssue: {\n type: 'boolean',\n description: 'If false, returns only the issue key without fetching full details',\n default: true,\n },\n format: {\n type: 'string',\n enum: ['markdown', 'adf', 'plain'],\n description:\n 'Description format: \"markdown\" (converts Markdown to ADF, default), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting)',\n default: 'markdown',\n },\n },\n required: ['projectKey', 'summary', 'issueType'],\n },\n};\n\nexport async function handleCreateIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateIssueInputSchema, input);\n\n log.info(`Creating issue in project ${validated.projectKey}...`);\n\n const createParams: any = {\n projectKey: validated.projectKey,\n summary: validated.summary,\n issueType: validated.issueType,\n };\n\n if (validated.description !== undefined) createParams.description = validated.description;\n if (validated.priority !== undefined) createParams.priority = validated.priority;\n if (validated.assignee !== undefined) createParams.assignee = validated.assignee;\n if (validated.labels !== undefined) createParams.labels = validated.labels;\n if (validated.components !== undefined) createParams.components = validated.components;\n if (validated.customFields !== undefined) createParams.customFields = validated.customFields;\n if (validated.format !== undefined) createParams.format = validated.format;\n\n let issueOrKey;\n if (validated.returnIssue === false) {\n issueOrKey = await createIssue(createParams, { returnIssue: false });\n } else {\n // Default behavior: request full issue; keep API surface compatible with tests\n issueOrKey = await createIssue(createParams);\n }\n\n if (validated.returnIssue === false) {\n const key = typeof issueOrKey === 'string' ? issueOrKey : (issueOrKey as any).key;\n log.info(`Created issue ${key}`);\n return formatSuccessResponse(`Issue created: ${key}`);\n }\n\n const issue = issueOrKey as any;\n log.info(`Created issue ${issue.key}`);\n return formatIssueResponse(issue);\n } catch (error) {\n log.error('Error in handleCreateIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { UpdateIssueInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { updateIssue, getIssue } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\n\nconst log = createLogger('tool:update-issue');\n\nexport const updateIssueTool: Tool = {\n name: TOOL_NAMES.UPDATE_ISSUE,\n description:\n 'Updates an existing Jira issue by its key. Supports updating summary, description, priority, assignee, labels, and components. Description format is controlled by the \"format\" parameter (default: markdown). Only specified fields will be updated.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description: 'Issue key to update (e.g., PROJECT-123)',\n },\n summary: {\n type: 'string',\n description: 'New issue summary/title (optional)',\n },\n description: {\n anyOf: [{ type: 'string' }, { type: 'object' }],\n description: 'New issue description (optional). Format depends on the \"format\" parameter.',\n },\n priority: {\n type: 'string',\n description: 'New priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'New assignee account ID (optional, use null string to unassign)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'New labels array (replaces existing labels) - optional',\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'New components array (replaces existing components) - optional',\n },\n returnIssue: {\n type: 'boolean',\n description: 'If false, returns a success message without fetching the updated issue',\n default: true,\n },\n format: {\n type: 'string',\n enum: ['markdown', 'adf', 'plain'],\n description:\n 'Description format: \"markdown\" (converts Markdown to ADF, default), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting)',\n default: 'markdown',\n },\n },\n required: ['issueKey'],\n },\n};\n\nexport async function handleUpdateIssue(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(UpdateIssueInputSchema, input);\n\n log.info(`Updating issue ${validated.issueKey}...`);\n\n const updateParams: any = {};\n\n if (validated.summary !== undefined) updateParams.summary = validated.summary;\n if (validated.description !== undefined) updateParams.description = validated.description;\n if (validated.priority !== undefined) updateParams.priority = validated.priority;\n if (validated.assignee !== undefined) updateParams.assignee = validated.assignee;\n if (validated.labels !== undefined) updateParams.labels = validated.labels;\n if (validated.components !== undefined) updateParams.components = validated.components;\n if (validated.format !== undefined) updateParams.format = validated.format;\n\n await updateIssue(validated.issueKey, updateParams);\n\n if (validated.returnIssue === false) {\n log.info(`Updated issue ${validated.issueKey}`);\n return formatSuccessResponse(`Issue ${validated.issueKey} updated successfully`);\n }\n\n // Get the updated issue to return current state\n const updatedIssue = await getIssue(validated.issueKey);\n\n log.info(`Updated issue ${updatedIssue.key}`);\n\n return formatIssueResponse(updatedIssue);\n } catch (error) {\n log.error('Error in handleUpdateIssue:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { AddCommentInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { addComment } from '../utils/api-helpers.js';\nimport { formatCommentResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:add-comment');\n\nexport const addCommentTool: Tool = {\n name: TOOL_NAMES.ADD_COMMENT,\n description:\n 'Adds a comment to an issue. Supports visibility restrictions for groups or roles. Comment format is controlled by the \"format\" parameter (default: markdown). Returns the created comment with author details and timestamp.',\n inputSchema: {\n type: 'object',\n properties: {\n issueKey: {\n type: 'string',\n description: 'Issue key to add comment to (e.g., PROJECT-123)',\n },\n body: {\n type: 'string',\n description: 'Comment body text. Format depends on the \"format\" parameter.',\n minLength: 1,\n },\n visibility: {\n type: 'object',\n description: 'Comment visibility restrictions (optional)',\n properties: {\n type: {\n type: 'string',\n enum: ['group', 'role'],\n description: 'Visibility type - either \"group\" or \"role\"',\n },\n value: {\n type: 'string',\n description: 'Group name or role name for visibility restriction',\n },\n },\n required: ['type', 'value'],\n },\n format: {\n type: 'string',\n enum: ['markdown', 'adf', 'plain'],\n description:\n 'Comment format: \"markdown\" (converts Markdown to ADF, default), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting)',\n default: 'markdown',\n },\n },\n required: ['issueKey', 'body'],\n },\n};\n\nexport async function handleAddComment(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(AddCommentInputSchema, input);\n\n log.info(`Adding comment to issue ${validated.issueKey}...`);\n\n const comment = await addComment(\n validated.issueKey,\n validated.body,\n validated.visibility,\n validated.format\n );\n\n log.info(`Added comment to ${validated.issueKey}`);\n\n return formatCommentResponse(comment);\n } catch (error) {\n log.error('Error in handleAddComment:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetProjectInfoInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getProjectDetails } from '../utils/api-helpers.js';\nimport { formatProjectDetailsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-project-info');\n\nexport const getProjectInfoTool: Tool = {\n name: TOOL_NAMES.GET_PROJECT_INFO,\n description:\n 'Retrieves detailed information about a project (components, versions, issue types, roles, insights). More comprehensive than the basic project list.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get detailed information for',\n },\n expand: {\n type: 'array',\n items: { type: 'string' },\n description:\n 'Additional project details to include (e.g., [\"description\", \"lead\", \"issueTypes\", \"versions\"])',\n default: [],\n },\n },\n required: ['projectKey'],\n },\n};\n\nexport async function handleGetProjectInfo(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetProjectInfoInputSchema, input);\n\n log.info(`Getting detailed project information for ${validated.projectKey}...`);\n\n const project = await getProjectDetails(validated.projectKey, validated.expand);\n\n log.info(`Retrieved project details for ${project.key}`);\n\n return formatProjectDetailsResponse(project);\n } catch (error) {\n log.error('Error in handleGetProjectInfo:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateSubtaskInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createSubtask } from '../utils/api-helpers.js';\nimport { formatIssueResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:create-subtask');\n\nexport const createSubtaskTool: Tool = {\n name: TOOL_NAMES.CREATE_SUBTASK,\n description:\n 'Creates a subtask under an existing parent issue. Automatically determines the correct project and subtask issue type. Supports setting priority, assignee, labels, and components. Description format is controlled by the \"format\" parameter (default: markdown).',\n inputSchema: {\n type: 'object',\n properties: {\n parentIssueKey: {\n type: 'string',\n description: 'Parent issue key (e.g., PROJECT-123)',\n },\n summary: {\n type: 'string',\n description: 'Subtask summary/title',\n minLength: 1,\n },\n description: {\n type: 'string',\n description:\n 'Detailed subtask description (optional). Format depends on the \"format\" parameter.',\n },\n priority: {\n type: 'string',\n description: 'Subtask priority name (e.g., High, Medium, Low) - optional',\n },\n assignee: {\n type: 'string',\n description: 'Assignee account ID (optional)',\n },\n labels: {\n type: 'array',\n items: { type: 'string' },\n description: 'Subtask labels (optional)',\n default: [],\n },\n components: {\n type: 'array',\n items: { type: 'string' },\n description: 'Component names (optional)',\n default: [],\n },\n format: {\n type: 'string',\n enum: ['markdown', 'adf', 'plain'],\n description:\n 'Description format: \"markdown\" (converts Markdown to ADF, default), \"adf\" (use as-is ADF object), \"plain\" (converts plain text to ADF with basic formatting)',\n default: 'markdown',\n },\n },\n required: ['parentIssueKey', 'summary'],\n },\n};\n\nexport async function handleCreateSubtask(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateSubtaskInputSchema, input);\n\n log.info(`Creating subtask under parent issue ${validated.parentIssueKey}...`);\n\n const subtaskParams: any = {\n summary: validated.summary,\n };\n\n if (validated.description !== undefined) subtaskParams.description = validated.description;\n if (validated.priority !== undefined) subtaskParams.priority = validated.priority;\n if (validated.assignee !== undefined) subtaskParams.assignee = validated.assignee;\n if (validated.labels !== undefined) subtaskParams.labels = validated.labels;\n if (validated.components !== undefined) subtaskParams.components = validated.components;\n if (validated.format !== undefined) subtaskParams.format = validated.format;\n\n const subtask = await createSubtask(validated.parentIssueKey, subtaskParams);\n\n log.info(`Created subtask ${subtask.key}`);\n\n return formatIssueResponse(subtask);\n } catch (error) {\n log.error('Error in handleCreateSubtask:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetCreateMetaInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getCreateMeta } from '../utils/api-helpers.js';\nimport { formatCreateMetaResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-create-meta');\n\nexport const getCreateMetaTool: Tool = {\n name: TOOL_NAMES.GET_CREATE_META,\n description:\n 'Retrieves create metadata for a project, showing all available fields (including custom fields) for creating issues. Shows required vs optional fields, field types, and allowed values. Use this before creating issues to discover what fields are needed.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to get create metadata for (e.g., PROJECT)',\n },\n issueTypeName: {\n type: 'string',\n description: 'Specific issue type name to get metadata for (optional)',\n },\n },\n required: ['projectKey'],\n },\n};\n\nexport async function handleGetCreateMeta(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetCreateMetaInputSchema, input);\n\n log.info(`Getting create metadata for project ${validated.projectKey}...`);\n\n const options: any = {\n projectKeys: [validated.projectKey],\n expand: 'projects.issuetypes.fields',\n };\n\n if (validated.issueTypeName) {\n options.issueTypeNames = [validated.issueTypeName];\n }\n\n const meta = await getCreateMeta(options);\n\n log.info(`Retrieved create metadata for ${validated.projectKey}`);\n\n return formatCreateMetaResponse(meta);\n } catch (error) {\n log.error('Error in handleGetCreateMeta:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { GetCustomFieldsInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { getFields } from '../utils/api-helpers.js';\nimport { formatCustomFieldsResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:get-custom-fields');\n\nexport const getCustomFieldsTool: Tool = {\n name: TOOL_NAMES.GET_CUSTOM_FIELDS,\n description:\n 'Retrieves all custom fields available in Jira. Shows custom field names, IDs (e.g., customfield_10071), and types. Useful for discovering what custom fields exist and their identifiers.',\n inputSchema: {\n type: 'object',\n properties: {\n projectKey: {\n type: 'string',\n description: 'Project key to filter custom fields (optional)',\n },\n },\n required: [],\n },\n};\n\nexport async function handleGetCustomFields(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(GetCustomFieldsInputSchema, input);\n\n const projectMsg = validated.projectKey ? ` for project ${validated.projectKey}` : '';\n log.info(`Getting custom fields${projectMsg}...`);\n\n const fields = await getFields();\n\n log.info(`Retrieved ${fields.filter((f) => f.custom).length} custom fields`);\n\n return formatCustomFieldsResponse(fields, validated.projectKey);\n } catch (error) {\n log.error('Error in handleGetCustomFields:', error);\n return handleError(error);\n }\n}\n","import { Tool } from '@modelcontextprotocol/sdk/types.js';\nimport { McpToolResponse } from '../types/common.js';\nimport { CreateIssueLinkInputSchema } from '../types/tools.js';\nimport { validateInput } from '../utils/validators.js';\nimport { createIssueLink } from '../utils/api-helpers.js';\nimport { formatSuccessResponse } from '../utils/formatters.js';\nimport { handleError } from '../utils/error-handler.js';\nimport { TOOL_NAMES } from '../config/constants.js';\nimport { createLogger } from '../utils/logger.js';\n\nconst log = createLogger('tool:create-issue-link');\n\nexport const createIssueLinkTool: Tool = {\n name: TOOL_NAMES.CREATE_ISSUE_LINK,\n description:\n 'Creates a link between two Jira issues. Supports common link types like \"blocks\", \"relates\", \"duplicates\", and \"clones\". Use this to establish relationships between issues.',\n inputSchema: {\n type: 'object',\n properties: {\n fromIssue: {\n type: 'string',\n description: 'Source issue key (e.g., PROJECT-123)',\n },\n toIssue: {\n type: 'string',\n description: 'Target issue key (e.g., PROJECT-456)',\n },\n linkType: {\n type: 'string',\n description:\n 'Link type: \"blocks\" (fromIssue blocks toIssue), \"is blocked by\", \"relates\", \"duplicates\", \"clones\", or custom link type name',\n },\n },\n required: ['fromIssue', 'toIssue', 'linkType'],\n },\n};\n\nexport async function handleCreateIssueLink(input: unknown): Promise<McpToolResponse> {\n try {\n const validated = validateInput(CreateIssueLinkInputSchema, input);\n\n log.info(\n `Creating ${validated.linkType} link from ${validated.fromIssue} to ${validated.toIssue}...`\n );\n\n await createIssueLink(validated.fromIssue, validated.toIssue, validated.linkType);\n\n log.info('Issue link created successfully');\n\n return formatSuccessResponse(\n `Link created: ${validated.fromIssue} ${validated.linkType} ${validated.toIssue}`\n );\n } catch (error) {\n log.error('Error in handleCreateIssueLink:', error);\n return handleError(error);\n }\n}\n","// Load .env file in non-production modes\nif (process.env.NODE_ENV !== 'production') {\n try {\n const { config } = await import('dotenv');\n config();\n // Loaded .env silently; logging handled by logger\n } catch {\n // no-op; continue without .env\n }\n}\n\nimport { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n CallToolRequest,\n} from '@modelcontextprotocol/sdk/types.js';\n\nimport { validateAuth } from './utils/jira-auth.js';\nimport { createLogger } from './utils/logger.js';\nimport { TOOL_NAMES } from './config/constants.js';\n\nconst log = createLogger('server');\n\n// Import all tools\nimport * as tools from './tools/index.js';\n\n// Tool handler mapping\nconst toolHandlers = new Map<string, (input: unknown) => Promise<any>>([\n [TOOL_NAMES.GET_VISIBLE_PROJECTS, tools.handleGetVisibleProjects],\n [TOOL_NAMES.GET_ISSUE, tools.handleGetIssue],\n [TOOL_NAMES.SEARCH_ISSUES, tools.handleSearchIssues],\n [TOOL_NAMES.GET_MY_ISSUES, tools.handleGetMyIssues],\n [TOOL_NAMES.GET_ISSUE_TYPES, tools.handleGetIssueTypes],\n [TOOL_NAMES.GET_USERS, tools.handleGetUsers],\n [TOOL_NAMES.GET_PRIORITIES, tools.handleGetPriorities],\n [TOOL_NAMES.GET_STATUSES, tools.handleGetStatuses],\n [TOOL_NAMES.CREATE_ISSUE, tools.handleCreateIssue],\n [TOOL_NAMES.UPDATE_ISSUE, tools.handleUpdateIssue],\n [TOOL_NAMES.ADD_COMMENT, tools.handleAddComment],\n [TOOL_NAMES.GET_PROJECT_INFO, tools.handleGetProjectInfo],\n [TOOL_NAMES.CREATE_SUBTASK, tools.handleCreateSubtask],\n [TOOL_NAMES.GET_CREATE_META, tools.handleGetCreateMeta],\n [TOOL_NAMES.GET_CUSTOM_FIELDS, tools.handleGetCustomFields],\n [TOOL_NAMES.CREATE_ISSUE_LINK, tools.handleCreateIssueLink],\n]);\n\n// All available tools\nconst allTools = [\n tools.getVisibleProjectsTool,\n tools.getIssueTool,\n tools.searchIssuesTool,\n tools.getMyIssuesTool,\n tools.getIssueTypesTool,\n tools.getUsersTool,\n tools.getPrioritiesTool,\n tools.getStatusesTool,\n tools.createIssueTool,\n tools.updateIssueTool,\n tools.addCommentTool,\n tools.getProjectInfoTool,\n tools.createSubtaskTool,\n tools.getCreateMetaTool,\n tools.getCustomFieldsTool,\n tools.createIssueLinkTool,\n];\n\nasync function main() {\n const isDryRun =\n (process.env.DRY_RUN || '').toLowerCase() === '1' ||\n (process.env.DRY_RUN || '').toLowerCase() === 'true';\n\n // Show auth info on startup when configured (skip in DRY_RUN)\n if (!isDryRun) {\n const hasAuthVars = Boolean(\n process.env.JIRA_BASE_URL && process.env.JIRA_EMAIL && process.env.JIRA_API_TOKEN\n );\n\n if (hasAuthVars) {\n try {\n const auth = validateAuth();\n console.error(`๐Ÿ” Authenticated as: ${auth.email}`);\n console.error(`๐ŸŒ Jira instance: ${auth.baseUrl}`);\n } catch (error: any) {\n console.error('โš ๏ธ Invalid Jira credentials:', error.message);\n }\n } else {\n console.error('โš ๏ธ Jira env vars missing (JIRA_BASE_URL, JIRA_EMAIL, JIRA_API_TOKEN)');\n }\n } else {\n console.error('๐Ÿงช DRY_RUN=1 set โ€” skipping Jira auth check');\n }\n\n // Read version from package.json\n let version = '0.0.0';\n try {\n const pkg = await import('../package.json', { assert: { type: 'json' } } as any);\n version = (pkg as any).default?.version || (pkg as any).version || version;\n } catch {\n // ignore\n }\n\n const server = new Server(\n {\n name: 'jira-mcp-server',\n version,\n },\n {\n capabilities: {\n resources: {},\n tools: {},\n },\n }\n );\n\n // List available tools\n server.setRequestHandler(ListToolsRequestSchema, async () => {\n console.error(`๐Ÿ“‹ Listing ${allTools.length} available tool(s)`);\n return { tools: allTools };\n });\n\n // Handle tool execution\n server.setRequestHandler(CallToolRequestSchema, async (request: CallToolRequest) => {\n const { name, arguments: args } = request.params;\n\n console.error(`๐Ÿ› ๏ธ Executing tool: ${name}`);\n\n const handler = toolHandlers.get(name);\n if (!handler) {\n throw new Error(`Unknown tool: ${name}`);\n }\n\n try {\n const result = await handler(args);\n console.error(`โœ… Tool ${name} executed successfully`);\n return result;\n } catch (error: any) {\n console.error(`โŒ Error executing tool ${name}:`, error.message);\n throw error;\n }\n });\n\n // List resources (not implemented for this server)\n server.setRequestHandler(ListResourcesRequestSchema, async () => {\n return { resources: [] };\n });\n\n // Read resource (not implemented for this server)\n server.setRequestHandler(ReadResourceRequestSchema, async () => {\n throw new Error('Resource reading not implemented');\n });\n\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error('๐Ÿš€ Jira MCP server running on stdio');\n}\n\nmain().catch((error) => {\n log.error('Fatal error:', error);\n process.exit(1);\n});\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-jira-stdio",
3
- "version": "1.6.1",
3
+ "version": "1.7.0",
4
4
  "description": "Model Context Protocol (MCP) server for Jira API integration",
5
5
  "author": "graslt",
6
6
  "license": "MIT",
@@ -46,29 +46,29 @@
46
46
  "ai"
47
47
  ],
48
48
  "engines": {
49
- "node": ">=18.0.0"
49
+ "node": ">=20.0.0"
50
50
  },
51
51
  "dependencies": {
52
52
  "@modelcontextprotocol/sdk": "^1.17.1",
53
53
  "axios": "^1.7.0",
54
- "md-to-adf": "^0.6.4",
54
+ "md-to-adf": "^0.5.0",
55
55
  "zod": "^3.22.4"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@types/node": "^22.5.0",
59
59
  "@typescript-eslint/eslint-plugin": "^8.0.0",
60
60
  "@typescript-eslint/parser": "^8.0.0",
61
- "@vitest/coverage-v8": "^3.2.4",
62
- "@vitest/ui": "^3.2.4",
61
+ "@vitest/coverage-v8": "^4.0.10",
62
+ "@vitest/ui": "^4.0.10",
63
63
  "dotenv": "^17.2.1",
64
64
  "eslint": "^9.9.0",
65
65
  "eslint-config-prettier": "^9.1.0",
66
66
  "eslint-plugin-prettier": "^5.2.0",
67
67
  "prettier": "^3.5.0",
68
- "tsup": "^8.0.0",
68
+ "tsup": "^8.5.1",
69
69
  "tsx": "^4.16.0",
70
70
  "typescript": "^5.5.0",
71
- "vitest": "^3.2.4"
71
+ "vitest": "^4.0.10"
72
72
  },
73
73
  "files": [
74
74
  "dist",
@@ -86,5 +86,9 @@
86
86
  "homepage": "https://github.com/freema/mcp-jira-stdio#readme",
87
87
  "publishConfig": {
88
88
  "access": "public"
89
+ },
90
+ "overrides": {
91
+ "glob": ">=11.0.4",
92
+ "marked": ">=4.0.10"
89
93
  }
90
94
  }