{"version":3,"file":"urls.mjs","sources":["../../src/configuration/urls.ts"],"sourcesContent":["import _ from 'lodash';\nimport { strings } from '@strapi/utils';\n\ninterface ServerConfig {\n  url: string;\n  host: string;\n  port: number | string;\n}\n\nexport const getConfigUrls = (config: Record<string, unknown>, forAdminBuild = false) => {\n  const serverConfig = config.server as ServerConfig;\n  const adminConfig = config.admin;\n\n  // Defines serverUrl value\n  let serverUrl = _.get(serverConfig, 'url', '');\n  serverUrl = _.trim(serverUrl, '/ ');\n  if (typeof serverUrl !== 'string') {\n    throw new Error('Invalid server url config. Make sure the url is a string.');\n  }\n\n  if (serverUrl.startsWith('http')) {\n    try {\n      serverUrl = _.trim(new URL(serverConfig.url).toString(), '/');\n    } catch (e) {\n      throw new Error(\n        'Invalid server url config. Make sure the url defined in server.js is valid.'\n      );\n    }\n  } else if (serverUrl !== '') {\n    serverUrl = `/${serverUrl}`;\n  }\n\n  // Defines adminUrl value\n  let adminUrl = _.get(adminConfig, 'url', '/admin');\n  adminUrl = _.trim(adminUrl, '/ ');\n  if (typeof adminUrl !== 'string') {\n    throw new Error('Invalid admin url config. Make sure the url is a non-empty string.');\n  }\n  if (adminUrl.startsWith('http')) {\n    try {\n      adminUrl = _.trim(new URL(adminUrl).toString(), '/');\n    } catch (e) {\n      throw new Error('Invalid admin url config. Make sure the url defined in server.js is valid.');\n    }\n  } else {\n    adminUrl = `${serverUrl}/${adminUrl}`;\n  }\n\n  // Defines adminPath value\n  let adminPath = adminUrl;\n  if (\n    serverUrl.startsWith('http') &&\n    adminUrl.startsWith('http') &&\n    new URL(adminUrl).origin === new URL(serverUrl).origin &&\n    !forAdminBuild\n  ) {\n    adminPath = adminUrl.replace(strings.getCommonPath(serverUrl, adminUrl), '');\n    adminPath = `/${_.trim(adminPath, '/')}`;\n  } else if (adminUrl.startsWith('http')) {\n    adminPath = new URL(adminUrl).pathname;\n  }\n\n  return {\n    serverUrl,\n    adminUrl,\n    adminPath,\n  };\n};\n\nconst getAbsoluteUrl =\n  (adminOrServer: 'admin' | 'server') =>\n  (config: Record<string, unknown>, forAdminBuild = false) => {\n    const { serverUrl, adminUrl } = getConfigUrls(config, forAdminBuild);\n    const url = adminOrServer === 'server' ? serverUrl : adminUrl;\n\n    if (url.startsWith('http')) {\n      return url;\n    }\n\n    const serverConfig = config.server as ServerConfig;\n    const hostname =\n      config.environment === 'development' && ['127.0.0.1', '0.0.0.0'].includes(serverConfig.host)\n        ? 'localhost'\n        : serverConfig.host;\n\n    return `http://${hostname}:${serverConfig.port}${url}`;\n  };\n\nexport const getAbsoluteAdminUrl = getAbsoluteUrl('admin');\nexport const getAbsoluteServerUrl = getAbsoluteUrl('server');\n"],"names":[],"mappings":";;AASO,MAAM,gBAAgB,CAAC,QAAiC,gBAAgB,UAAU;AACvF,QAAM,eAAe,OAAO;AAC5B,QAAM,cAAc,OAAO;AAG3B,MAAI,YAAY,EAAE,IAAI,cAAc,OAAO,EAAE;AACjC,cAAA,EAAE,KAAK,WAAW,IAAI;AAC9B,MAAA,OAAO,cAAc,UAAU;AAC3B,UAAA,IAAI,MAAM,2DAA2D;AAAA,EAC7E;AAEI,MAAA,UAAU,WAAW,MAAM,GAAG;AAC5B,QAAA;AACU,kBAAA,EAAE,KAAK,IAAI,IAAI,aAAa,GAAG,EAAE,YAAY,GAAG;AAAA,aACrD,GAAG;AACV,YAAM,IAAI;AAAA,QACR;AAAA,MAAA;AAAA,IAEJ;AAAA,EAAA,WACS,cAAc,IAAI;AAC3B,gBAAY,IAAI,SAAS;AAAA,EAC3B;AAGA,MAAI,WAAW,EAAE,IAAI,aAAa,OAAO,QAAQ;AACtC,aAAA,EAAE,KAAK,UAAU,IAAI;AAC5B,MAAA,OAAO,aAAa,UAAU;AAC1B,UAAA,IAAI,MAAM,oEAAoE;AAAA,EACtF;AACI,MAAA,SAAS,WAAW,MAAM,GAAG;AAC3B,QAAA;AACS,iBAAA,EAAE,KAAK,IAAI,IAAI,QAAQ,EAAE,YAAY,GAAG;AAAA,aAC5C,GAAG;AACJ,YAAA,IAAI,MAAM,4EAA4E;AAAA,IAC9F;AAAA,EAAA,OACK;AACM,eAAA,GAAG,SAAS,IAAI,QAAQ;AAAA,EACrC;AAGA,MAAI,YAAY;AAChB,MACE,UAAU,WAAW,MAAM,KAC3B,SAAS,WAAW,MAAM,KAC1B,IAAI,IAAI,QAAQ,EAAE,WAAW,IAAI,IAAI,SAAS,EAAE,UAChD,CAAC,eACD;AACA,gBAAY,SAAS,QAAQ,QAAQ,cAAc,WAAW,QAAQ,GAAG,EAAE;AAC3E,gBAAY,IAAI,EAAE,KAAK,WAAW,GAAG,CAAC;AAAA,EAC7B,WAAA,SAAS,WAAW,MAAM,GAAG;AAC1B,gBAAA,IAAI,IAAI,QAAQ,EAAE;AAAA,EAChC;AAEO,SAAA;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,MAAM,iBACJ,CAAC,kBACD,CAAC,QAAiC,gBAAgB,UAAU;AAC1D,QAAM,EAAE,WAAW,SAAA,IAAa,cAAc,QAAQ,aAAa;AAC7D,QAAA,MAAM,kBAAkB,WAAW,YAAY;AAEjD,MAAA,IAAI,WAAW,MAAM,GAAG;AACnB,WAAA;AAAA,EACT;AAEA,QAAM,eAAe,OAAO;AAC5B,QAAM,WACJ,OAAO,gBAAgB,iBAAiB,CAAC,aAAa,SAAS,EAAE,SAAS,aAAa,IAAI,IACvF,cACA,aAAa;AAEnB,SAAO,UAAU,QAAQ,IAAI,aAAa,IAAI,GAAG,GAAG;AACtD;AAEW,MAAA,sBAAsB,eAAe,OAAO;AAC5C,MAAA,uBAAuB,eAAe,QAAQ;"}