{"version":3,"file":"main-BiLGgnjU.mjs","names":[],"sources":["../../../node_modules/.pnpm/dotenv@17.4.2/node_modules/dotenv/lib/main.js"],"sourcesContent":["const fs = require('fs')\nconst path = require('path')\nconst os = require('os')\nconst crypto = require('crypto')\n\n// Array of tips to display randomly\nconst TIPS = [\n  '◈ encrypted .env [www.dotenvx.com]',\n  '◈ secrets for agents [www.dotenvx.com]',\n  '⌁ auth for agents [www.vestauth.com]',\n  '⌘ custom filepath { path: \\'/custom/path/.env\\' }',\n  '⌘ enable debugging { debug: true }',\n  '⌘ override existing { override: true }',\n  '⌘ suppress logs { quiet: true }',\n  '⌘ multiple files { 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(`⚠ ${message}`)\n}\n\nfunction _debug (message) {\n  console.log(`┆ ${message}`)\n}\n\nfunction _log (message) {\n  console.log(`◇ ${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(`injected 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}`)\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"],"x_google_ignoreList":[0],"mappings":"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"}