{"version":3,"sources":["jsdelivr-header.js","/npm/@sap/approuter@21.3.0/approuter.js"],"names":[],"mappings":"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","file":"/npm/@sap/approuter@21.3.0/approuter.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@sap/approuter@21.3.0/approuter.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nconst assert = require('assert');\nconst commander = require('commander');\nconst _ = require('lodash');\nconst EventEmitter = require('events');\nconst util = require('util');\n\nconst bootstrap = require('./lib/bootstrap');\nconst loggerUtil = require('./lib/utils/logger');\nconst validators = require('./lib/configuration/validators');\nconst appConfig = require('./lib/configuration/app-config');\nconst envConfig = require('./lib/configuration/env-config');\nconst MiddlewareList = require('./lib/extensions/MiddlewareList');\nconst serverLib = require('./lib/server');\nconst optionalCallback = require('./lib/utils/callback');\nconst uaaUtils = require('./lib/utils/uaa-utils');\nconst dynamicRoutingUtils = require('./lib/utils/dynamic-routing-utils');\nconst iasUtils = require('./lib/utils/ias-utils');\n\nmodule.exports = Approuter;\n\nfunction Approuter() {\n  assert(arguments.length === 0, 'Constructor takes no arguments');\n  if (!(this instanceof Approuter)) {\n    return new Approuter();\n  }\n  EventEmitter.call(this);\n\n  this.cmdParser = new commander.Command()\n    .option('-w, --workingDir <s>', 'The working directory containting the resources folder and xs-app.json file')\n    .option('-p, --port <n>', 'The port of the approuter');\n\n  this.first = new MiddlewareList();\n  this.beforeRequestHandler = new MiddlewareList();\n  this.beforeErrorHandler = new MiddlewareList();\n  this.firstWS = new MiddlewareList();\n  this.beforeRequestHandlerWS = new MiddlewareList();\n}\n\nutil.inherits(Approuter, EventEmitter);\n\nApprouter.prototype.start = async function (options, callback) {\n  let self = this;\n  if (dynamicRoutingUtils.isDynamicRouting()) {\n    self.first.use(dynamicRoutingUtils.initialize(self));\n    if (options) {\n      delete options.port;\n      options.getRouterConfig = dynamicRoutingUtils.getRouterConfig;\n    } else {\n      options = {'getRouterConfig': dynamicRoutingUtils.getRouterConfig};\n    }\n  }\n  if (options) {\n    validators.validateApprouterStartOptions(options);\n    options = _.cloneDeep(options);\n  } else {\n    options = {};\n  }\n  callback = optionalCallback(callback);\n\n  if (this.cmdParser) {\n    this.cmdParser.parse(process.argv);\n    options = _.defaults(options, this.cmdParser);\n  }\n  addImplicitExtension(this, options);\n\n  let logger = loggerUtil.getLogger('/approuter');\n  logger.info('Application router version %s', require('./package.json').version);\n\n  let app = bootstrap(options);\n  app.logger = logger;\n  await enrichStartupData(app, logger);\n  app.approuter = this;\n  app.extensions = options.extensions;\n  this._app = app;\n  loggerUtil.getAuditLogger(function (err, auditLogger) {\n    if (err) {\n      throw err;\n    }\n    app.auditLogger = auditLogger;\n    serverLib.start(app, function (err, server) {\n      self._server = server;\n      callback(err);\n    });\n  });\n};\n\nApprouter.prototype.close = function (callback) {\n  if (this._server) {\n    clearInterval(this._app._store.memoryStore.sessionChecker);\n    this._server.close(callback);\n  } else {\n    process.nextTick(callback);\n  }\n};\n\nApprouter.prototype.resolveUaaConfig = uaaUtils.resolveUaaConfig;\nApprouter.prototype.getRemoteConfigurationOptions = dynamicRoutingUtils.getRemoteConfigurationOptions;\n\nApprouter.prototype.createRouterConfig = function (options, callback) {\n  options = _.cloneDeep(options); // avoid side effects in case of modifications\n  let error;\n  let routerConfig;\n  try {\n    assert(this._app, 'Call Approuter.start before Approuter.createRouterConfig');\n    routerConfig = this._app.get('mainRouterConfig');\n    let xsappname = options.xsappname || routerConfig.uaaConfig.options.xsappname;\n    let customDestinations = (options.destinations) ? envConfig.loadDestinations(options.destinations) : routerConfig.destinations;\n    let customAppConfig = appConfig.loadConfiguration(routerConfig.workingDir,\n      options.xsappConfig, customDestinations, xsappname);\n    customAppConfig.logout = _.extend({}, routerConfig.appConfig.logout, _.pick(customAppConfig.logout, 'logoutPage', 'logoutEndpoint', 'logoutMethod', 'csrfProtection'));\n    routerConfig = _.defaults({\n      appConfig: customAppConfig,\n      destinations: customDestinations\n    }, routerConfig);\n  } catch (err) {\n    error = err;\n  }\n  callback(error, routerConfig);\n};\n\nApprouter.prototype.getSessionStore = function getSessionStore() {\n  let memoryStore = this._app.get('memoryStore');\n  return Object.create(memoryStore, {\n    set: {\n      value: function(sessionId, sessionString, timeout, callback) {\n        let diff = timeout - Date.now();\n        memoryStore.set(sessionId, JSON.parse(sessionString), callback);\n        memoryStore.sessionTimers[sessionId] = Math.floor(diff / 10000); // tens of seconds\n      }\n    }\n  });\n};\n\nasync function enrichStartupData(app, logger) {\n  const iasConfig = app.get('mainRouterConfig').iasConfig || {};\n  const iasCredentials = iasConfig.options || {};\n  if (!Object.keys(iasCredentials).length) {\n    return;\n  }\n  let missing;\n  if (!iasCredentials.app_tid) {\n    missing = 'app_tid missing';\n  } else if (!iasCredentials['btp-tenant-api']) {\n    missing = 'btp-tenant-api missing';\n  }\n  if (missing) {\n    logger.error(`Skipping IAS identityzone population at startup: ${missing}`);\n    return;\n  }\n\n  try {\n    iasCredentials.identityzone = await iasUtils.getSubdomainByApptid(iasCredentials.app_tid, iasCredentials['btp-tenant-api']);\n    logger.info('IAS identityzone populated at startup: %s', iasCredentials.identityzone);\n  } catch (err) {\n    logger.error('Failed to populate IAS identityzone at startup: %s', err.message);\n  }\n}\n\nfunction addImplicitExtension(ar, options) {\n  let ext = {\n    insertMiddleware: {\n      first: ar.first._middleware,\n      beforeRequestHandler: ar.beforeRequestHandler._middleware,\n      beforeErrorHandler: ar.beforeErrorHandler._middleware,\n      firstWS: ar.firstWS._middleware,\n      beforeRequestHandlerWS: ar.beforeRequestHandlerWS._middleware\n    }\n  };\n  options.extensions = options.extensions || [];\n  options.extensions.unshift(ext);\n}\n\n\nif (require.main === module) {\n  let ar = new Approuter();\n  ar.start();\n}\n"]}