Skip to content
Snippets Groups Projects
onDeleteAccount.js 7.54 MiB
Newer Older
Hugo SUBTIL's avatar
Hugo SUBTIL committed
    hasKnownLength = false;
  }

  return hasKnownLength;
};

FormData.prototype.getLength = function(cb) {
  var knownLength = this._overheadLength + this._valueLength;

  if (this._streams.length) {
    knownLength += this._lastBoundary().length;
  }

  if (!this._valuesToMeasure.length) {
    process.nextTick(cb.bind(this, null, knownLength));
    return;
  }

  asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
    if (err) {
      cb(err);
      return;
    }

    values.forEach(function(length) {
      knownLength += length;
    });

    cb(null, knownLength);
  });
};

FormData.prototype.submit = function(params, cb) {
  var request
    , options
    , defaults = {method: 'post'}
    ;

  // parse provided url if it's string
  // or treat it as options object
  if (typeof params == 'string') {

    params = parseUrl(params);
    options = populate({
      port: params.port,
      path: params.pathname,
      host: params.hostname,
      protocol: params.protocol
    }, defaults);

  // use custom params
  } else {

    options = populate(params, defaults);
    // if no port provided use default one
    if (!options.port) {
      options.port = options.protocol == 'https:' ? 443 : 80;
    }
  }

  // put that good code in getHeaders to some use
  options.headers = this.getHeaders(params.headers);

  // https if specified, fallback to http in any other case
  if (options.protocol == 'https:') {
    request = https.request(options);
  } else {
    request = http.request(options);
  }

  // get content length and fire away
  this.getLength(function(err, length) {
    if (err && err !== 'Unknown stream') {
      this._error(err);
      return;
    }

    // add content length
    if (length) {
      request.setHeader('Content-Length', length);
    }

    this.pipe(request);
    if (cb) {
      var onResponse;

      var callback = function (error, responce) {
        request.removeListener('error', callback);
        request.removeListener('response', onResponse);

        return cb.call(this, error, responce);
      };

      onResponse = callback.bind(this, null);

      request.on('error', callback);
      request.on('response', onResponse);
    }
  }.bind(this));

  return request;
};

FormData.prototype._error = function(err) {
  if (!this.error) {
    this.error = err;
    this.pause();
    this.emit('error', err);
  }
};

FormData.prototype.toString = function () {
  return '[object FormData]';
};


/***/ }),
build-token's avatar
build-token committed
/* 1594 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module) => {

// populates missing values
module.exports = function(dst, src) {

  Object.keys(src).forEach(function(prop)
  {
    dst[prop] = dst[prop] || src[prop];
  });

  return dst;
};


/***/ }),
build-token's avatar
build-token committed
/* 1595 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module) => {

"use strict";


module.exports = function isCancel(value) {
  return !!(value && value.__CANCEL__);
};


/***/ }),
build-token's avatar
build-token committed
/* 1596 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


build-token's avatar
build-token committed
var utils = __webpack_require__(1566);
Hugo SUBTIL's avatar
Hugo SUBTIL committed

/**
 * Config-specific merge-function which creates a new config-object
 * by merging two configuration objects together.
 *
 * @param {Object} config1
 * @param {Object} config2
 * @returns {Object} New object resulting from merging config2 to config1
 */
module.exports = function mergeConfig(config1, config2) {
  // eslint-disable-next-line no-param-reassign
  config2 = config2 || {};
  var config = {};

  function getMergedValue(target, source) {
    if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
      return utils.merge(target, source);
    } else if (utils.isPlainObject(source)) {
      return utils.merge({}, source);
    } else if (utils.isArray(source)) {
      return source.slice();
    }
    return source;
  }

  // eslint-disable-next-line consistent-return
  function mergeDeepProperties(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(config1[prop], config2[prop]);
    } else if (!utils.isUndefined(config1[prop])) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function valueFromConfig2(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(undefined, config2[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function defaultToConfig2(prop) {
    if (!utils.isUndefined(config2[prop])) {
      return getMergedValue(undefined, config2[prop]);
    } else if (!utils.isUndefined(config1[prop])) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  // eslint-disable-next-line consistent-return
  function mergeDirectKeys(prop) {
    if (prop in config2) {
      return getMergedValue(config1[prop], config2[prop]);
    } else if (prop in config1) {
      return getMergedValue(undefined, config1[prop]);
    }
  }

  var mergeMap = {
    'url': valueFromConfig2,
    'method': valueFromConfig2,
    'data': valueFromConfig2,
    'baseURL': defaultToConfig2,
    'transformRequest': defaultToConfig2,
    'transformResponse': defaultToConfig2,
    'paramsSerializer': defaultToConfig2,
    'timeout': defaultToConfig2,
    'timeoutMessage': defaultToConfig2,
    'withCredentials': defaultToConfig2,
    'adapter': defaultToConfig2,
    'responseType': defaultToConfig2,
    'xsrfCookieName': defaultToConfig2,
    'xsrfHeaderName': defaultToConfig2,
    'onUploadProgress': defaultToConfig2,
    'onDownloadProgress': defaultToConfig2,
    'decompress': defaultToConfig2,
    'maxContentLength': defaultToConfig2,
    'maxBodyLength': defaultToConfig2,
    'beforeRedirect': defaultToConfig2,
    'transport': defaultToConfig2,
    'httpAgent': defaultToConfig2,
    'httpsAgent': defaultToConfig2,
    'cancelToken': defaultToConfig2,
    'socketPath': defaultToConfig2,
    'responseEncoding': defaultToConfig2,
    'validateStatus': mergeDirectKeys
  };

  utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) {
    var merge = mergeMap[prop] || mergeDeepProperties;
    var configValue = merge(prop);
    (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
  });

  return config;
};


/***/ }),
build-token's avatar
build-token committed
/* 1597 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


build-token's avatar
build-token committed
var VERSION = (__webpack_require__(1591).version);
var AxiosError = __webpack_require__(1575);
Hugo SUBTIL's avatar
Hugo SUBTIL committed

var validators = {};

// eslint-disable-next-line func-names
['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function(type, i) {
  validators[type] = function validator(thing) {
    return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
  };
});

var deprecatedWarnings = {};

/**
 * Transitional option validator
 * @param {function|boolean?} validator - set to false if the transitional option has been removed
 * @param {string?} version - deprecated version / removed since version
 * @param {string?} message - some message with additional info
 * @returns {function}
 */
validators.transitional = function transitional(validator, version, message) {
  function formatMessage(opt, desc) {
    return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
  }

  // eslint-disable-next-line func-names
  return function(value, opt, opts) {
    if (validator === false) {
      throw new AxiosError(
        formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
        AxiosError.ERR_DEPRECATED
      );
    }

    if (version && !deprecatedWarnings[opt]) {
      deprecatedWarnings[opt] = true;
      // eslint-disable-next-line no-console
      console.warn(
        formatMessage(
          opt,
          ' has been deprecated since v' + version + ' and will be removed in the near future'
        )
      );
    }

    return validator ? validator(value, opt, opts) : true;
  };
};

/**
 * Assert object's properties type
 * @param {object} options
 * @param {object} schema
 * @param {boolean?} allowUnknown
 */

function assertOptions(options, schema, allowUnknown) {
  if (typeof options !== 'object') {
    throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
  }
  var keys = Object.keys(options);
  var i = keys.length;
  while (i-- > 0) {
    var opt = keys[i];
    var validator = schema[opt];
    if (validator) {
      var value = options[opt];
      var result = value === undefined || validator(value, opt, options);
      if (result !== true) {
        throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
      }
      continue;
    }
    if (allowUnknown !== true) {
      throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
    }
  }
}

module.exports = {
  assertOptions: assertOptions,
  validators: validators
};


/***/ }),
build-token's avatar
build-token committed
/* 1598 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


build-token's avatar
build-token committed
var CanceledError = __webpack_require__(1586);
Hugo SUBTIL's avatar
Hugo SUBTIL committed

/**
 * A `CancelToken` is an object that can be used to request cancellation of an operation.
 *
 * @class
 * @param {Function} executor The executor function.
 */
function CancelToken(executor) {
  if (typeof executor !== 'function') {
    throw new TypeError('executor must be a function.');
  }

  var resolvePromise;

  this.promise = new Promise(function promiseExecutor(resolve) {
    resolvePromise = resolve;
  });

  var token = this;

  // eslint-disable-next-line func-names
  this.promise.then(function(cancel) {
    if (!token._listeners) return;

    var i;
    var l = token._listeners.length;

    for (i = 0; i < l; i++) {
      token._listeners[i](cancel);
    }
    token._listeners = null;
  });

  // eslint-disable-next-line func-names
  this.promise.then = function(onfulfilled) {
    var _resolve;
    // eslint-disable-next-line func-names
    var promise = new Promise(function(resolve) {
      token.subscribe(resolve);
      _resolve = resolve;
    }).then(onfulfilled);

    promise.cancel = function reject() {
      token.unsubscribe(_resolve);
    };

    return promise;
  };

  executor(function cancel(message) {
    if (token.reason) {
      // Cancellation has already been requested
      return;
    }

    token.reason = new CanceledError(message);
    resolvePromise(token.reason);
  });
}

/**
 * Throws a `CanceledError` if cancellation has been requested.
 */
CancelToken.prototype.throwIfRequested = function throwIfRequested() {
  if (this.reason) {
    throw this.reason;
  }
};

/**
 * Subscribe to the cancel signal
 */

CancelToken.prototype.subscribe = function subscribe(listener) {
  if (this.reason) {
    listener(this.reason);
    return;
  }

  if (this._listeners) {
    this._listeners.push(listener);
  } else {
    this._listeners = [listener];
  }
};

/**
 * Unsubscribe from the cancel signal
 */

CancelToken.prototype.unsubscribe = function unsubscribe(listener) {
  if (!this._listeners) {
    return;
  }
  var index = this._listeners.indexOf(listener);
  if (index !== -1) {
    this._listeners.splice(index, 1);
  }
};

/**
 * Returns an object that contains a new `CancelToken` and a function that, when called,
 * cancels the `CancelToken`.
 */
CancelToken.source = function source() {
  var cancel;
  var token = new CancelToken(function executor(c) {
    cancel = c;
  });
  return {
    token: token,
    cancel: cancel
  };
};

module.exports = CancelToken;


/***/ }),
build-token's avatar
build-token committed
/* 1599 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module) => {

"use strict";


/**
 * Syntactic sugar for invoking a function and expanding an array for arguments.
 *
 * Common use case would be to use `Function.prototype.apply`.
 *
 *  ```js
 *  function f(x, y, z) {}
 *  var args = [1, 2, 3];
 *  f.apply(null, args);
 *  ```
 *
 * With `spread` this example can be re-written.
 *
 *  ```js
 *  spread(function(x, y, z) {})([1, 2, 3]);
 *  ```
 *
 * @param {Function} callback
 * @returns {Function}
 */
module.exports = function spread(callback) {
  return function wrap(arr) {
    return callback.apply(null, arr);
  };
};


/***/ }),
build-token's avatar
build-token committed
/* 1600 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

"use strict";


build-token's avatar
build-token committed
var utils = __webpack_require__(1566);
Hugo SUBTIL's avatar
Hugo SUBTIL committed

/**
 * Determines whether the payload is an error thrown by Axios
 *
 * @param {*} payload The value to test
 * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
 */
module.exports = function isAxiosError(payload) {
  return utils.isObject(payload) && (payload.isAxiosError === true);
};


/***/ }),
build-token's avatar
build-token committed
/* 1601 */,
/* 1602 */,
/* 1603 */,
/* 1604 */
build-token's avatar
build-token committed
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

// @ts-check
const { log, errors } = __webpack_require__(1)
build-token's avatar
build-token committed
const soapRequest = __webpack_require__(1337)
const { parseTags, parseValue } = __webpack_require__(1561)
const { commanderArretServiceSouscritMesures } = __webpack_require__(1562)
const xml2js = __webpack_require__(1519)
build-token's avatar
build-token committed

/**
 * @param {string} url
 * @param {string} apiAuthKey
 * @param {string} appLogin
 * @param {number} pointId
 * @param {number} serviceId
 * @return {Promise<string>} User contractId
 */
async function terminateContract(
  url,
  apiAuthKey,
  appLogin,
  contractId,
  pointId,
  serviceId
) {
  log('info', 'terminateContract')
  const sgeHeaders = {
    'Content-Type': 'text/xml;charset=UTF-8',
    apikey: apiAuthKey,
  }

  const { response } = await soapRequest({
    url: `${url}/enedis_SGE_CommandeArretServiceSouscritMesures/1.0`,
    headers: sgeHeaders,
    xml: commanderArretServiceSouscritMesures(
      appLogin,
      contractId,
      pointId,
      serviceId
    ),
  }).catch(err => {
    log('error', 'commanderArretServiceSouscritMesures')
    log('error', err)
    throw errors.VENDOR_DOWN
  })

  const parsedReply = await xml2js.parseStringPromise(response.body, {
    tagNameProcessors: [parseTags],
    valueProcessors: [parseValue],
    explicitArray: false,
  })

  try {
    // We don't need any action on reply for now
    if (parsedReply.Envelope.Body.Fault) {
      log(
        'error',
        `Enedis issue ${parsedReply.Envelope.Body.Fault.detail.erreur.resultat.$.code}: ${parsedReply.Envelope.Body.Fault.faultstring}`
      )
    }
    return parsedReply
  } catch (error) {
    log('error', 'Error while parsing user contract termination: ' + error)
    log('error', `Enedis issue ${JSON.stringify(parsedReply.Envelope.Body)}`)
    throw errors.VENDOR_DOWN
  }
}

module.exports = { terminateContract }


/***/ }),
build-token's avatar
build-token committed
/* 1605 */,
/* 1606 */,
/* 1607 */,
/* 1608 */,
/* 1609 */,
/* 1610 */,
/* 1611 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

const { log, updateOrCreate } = __webpack_require__(1)
build-token's avatar
build-token committed
const { isLocal } = __webpack_require__(1612)
const cozyClient = __webpack_require__(485)
Hugo SUBTIL's avatar
Hugo SUBTIL committed

async function saveAccountData(accountId, accountData) {
  log('info', `saveAccountData: ${accountId}`)

  let account = await getAccount(accountId)

  account = await updateOrCreate(
    [{ ...account, data: accountData }],
    'io.cozy.accounts'
  )
  return account
}

/**
 * Return account
 * @param {string} accountId
 * @returns {Account}
 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
async function getAccount(accountId) {
  log('info', `getAccount: ${accountId}`)
  const accounts = await cozyClient.data.findAll('io.cozy.accounts')
  return accounts.filter(account =>
    isLocal() ? account._id === accountId : account.account_type === accountId
  )[0]
}

async function getAccountForDelete(accountId, accountRev) {
  log('info', `getAccountForDelete: ${accountId} ${accountRev}`)
  const body = await cozyClient.fetchJSON(
    'GET',
    `/data/io.cozy.accounts/${accountId}?rev=${accountRev}`
  )

  log('debug', `getAccountForDelete: ${body}`)
  return body
}

module.exports = { getAccount, saveAccountData, getAccountForDelete }
build-token's avatar
build-token committed
/* 1612 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module) => {

function isLocal() {
Hugo SUBTIL's avatar
Hugo SUBTIL committed
  return (
    process.env.NODE_ENV === 'development' ||
    process.env.NODE_ENV === 'local' ||
    process.env.NODE_ENV === 'standalone'
  )
}

/**
 * Verify if it's an alpha URL
 * @returns {boolean}
 */
build-token's avatar
build-token committed
function isDev() {
  return (
    process.env.COZY_URL.includes('alpha') ||
    process.env.COZY_URL.includes('cozy.tools')
  )
build-token's avatar
build-token committed
module.exports = { isLocal, isDev }
build-token's avatar
build-token committed
/* 1613 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

Hugo SUBTIL's avatar
Hugo SUBTIL committed
// @ts-check
Hugo SUBTIL's avatar
Hugo SUBTIL committed
const { log, errors } = __webpack_require__(1)
const {
  getAccountRev,
  getAccountSecret,
  getAccountId,
build-token's avatar
build-token committed
} = __webpack_require__(1614)
const { getBoConsent, deleteBoConsent } = __webpack_require__(1563)
const { terminateContract } = __webpack_require__(1604)
const { getAccountForDelete } = __webpack_require__(1611)
const moment = __webpack_require__(1379)
__webpack_require__(1516)
Hugo SUBTIL's avatar
Hugo SUBTIL committed
moment.locale('fr') // set the language
moment.tz.setDefault('Europe/Paris') // set the timezone
build-token's avatar
build-token committed
const { isLocal, isDev } = __webpack_require__(1612)
Hugo SUBTIL's avatar
Hugo SUBTIL committed

async function onDeleteAccount() {
build-token's avatar
build-token committed
  log('info', 'Deleting account ...')
  log('info', 'Getting secrets ...')
  const ACCOUNT_ID = getAccountId()
build-token's avatar
build-token committed
  const accountRev = getAccountRev()

  if (accountRev) {
    log('info', 'Account rev exist')
    const accountData = await getAccountForDelete(ACCOUNT_ID, accountRev)
build-token's avatar
build-token committed
    // Parse local info for deletion test
    if (isLocal()) {
      log('warn', 'Local run')
build-token's avatar
build-token committed
      const fields = JSON.parse(
        process.env.COZY_FIELDS ? process.env.COZY_FIELDS : '{}'
build-token's avatar
build-token committed
      process.env.COZY_FIELDS = JSON.stringify({
        ...fields,
        ...accountData.auth,
      })
    }
    const secrets = getAccountSecret()
build-token's avatar
build-token committed
    const userConsent = await getBoConsent(
      secrets.boBaseUrl,
      secrets.boToken,
      accountData.data.consentId
    )
build-token's avatar
build-token committed
    log('info', `isAlpha: ${isDev()}`)
    log('info', `userConsent: ${JSON.stringify(userConsent)}`)
build-token's avatar
build-token committed
    if (userConsent.ID && userConsent.pointID) {
      log('log', `Consent ${userConsent.ID} found for user`)
      if (userConsent.serviceID) {
        await deleteBoConsent(
          secrets.boBaseUrl,
          secrets.boToken,
          userConsent.ID
        )
        // Verify if it's dev env to prevent delete of real data
build-token's avatar
build-token committed
        if (!isDev()) {
          await terminateContract(
            secrets.wso2BaseUrl,
            secrets.apiToken,
            secrets.sgeLogin,
            secrets.contractId,
            userConsent.pointID,
            userConsent.serviceID
          )
        }
build-token's avatar
build-token committed
      } else {
        log('error', `No service id retrieved from BO`)
        throw errors.VENDOR_DOWN
Hugo SUBTIL's avatar
Hugo SUBTIL committed
      }
Hugo SUBTIL's avatar
Hugo SUBTIL committed
    }
build-token's avatar
build-token committed

    log('info', 'Deleting account succeed')
  } else {
    log(
      'error',
      'No account revision was found, something went wrong during the deletion of said account'
    )
    throw errors.VENDOR_DOWN
Hugo SUBTIL's avatar
Hugo SUBTIL committed
  }
}

onDeleteAccount().then(
  () => {
    log('info', `onDeleteAccount: Successfully delete consent and account.`)
  },
  err => {
    log(
      'error',
      `onDeleteAccount: An error occured during script: ${err.message}`
    )
    throw errors.VENDOR_DOWN
  }
)

module.exports = { onDeleteAccount }


/***/ }),
build-token's avatar
build-token committed
/* 1614 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/***/ ((module, __unused_webpack_exports, __webpack_require__) => {

const { log } = __webpack_require__(1)
build-token's avatar
build-token committed
const { isLocal } = __webpack_require__(1612)
Hugo SUBTIL's avatar
Hugo SUBTIL committed

function getAccountId() {
  log('info', `getAccountId`)
  try {
    return JSON.parse(process.env.COZY_FIELDS).account
  } catch (err) {
    throw new Error(`You must provide 'account' in COZY_FIELDS: ${err.message}`)
  }
}

function getAccountRev() {
  log('info', `getAccountRev`)
  log('info', `getAccountRev: ${JSON.stringify(process.env.COZY_FIELDS)}`)
Hugo SUBTIL's avatar
Hugo SUBTIL committed
  try {
    return isLocal()
Hugo SUBTIL's avatar
Hugo SUBTIL committed
      ? 'fakeAccountRev'
      : JSON.parse(process.env.COZY_FIELDS).account_rev
  } catch (err) {
    throw new Error(`You must provide 'account' in COZY_FIELDS: ${err.message}`)
  }
}

Hugo SUBTIL's avatar
Hugo SUBTIL committed
/**
 * Return account secrets.
 * For local testing, change value with values from your konnector-dev-config.json
Hugo SUBTIL's avatar
Hugo SUBTIL committed
 */
Hugo SUBTIL's avatar
Hugo SUBTIL committed
function getAccountSecret() {
  log('info', `getAccountSecret`)
Hugo SUBTIL's avatar
Hugo SUBTIL committed
  try {
    return isLocal()
      ? JSON.parse(process.env.COZY_FIELDS)
Hugo SUBTIL's avatar
Hugo SUBTIL committed
      : JSON.parse(process.env.COZY_PARAMETERS).secret
  } catch (err) {
    throw new Error(
      `You must provide 'account-types' in COZY_PARAMETERS: ${err.message}`
    )
  }
}
module.exports = { getAccountId, getAccountRev, getAccountSecret }


/***/ })
/******/ 	]);
/************************************************************************/
/******/ 	// The module cache
/******/ 	var __webpack_module_cache__ = {};
/******/ 	
/******/ 	// The require function
/******/ 	function __webpack_require__(moduleId) {
/******/ 		// Check if module is in cache
/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
/******/ 		if (cachedModule !== undefined) {
/******/ 			return cachedModule.exports;
/******/ 		}
/******/ 		// Create a new module (and put it into the cache)
/******/ 		var module = __webpack_module_cache__[moduleId] = {
/******/ 			id: moduleId,
/******/ 			loaded: false,
/******/ 			exports: {}
/******/ 		};
/******/ 	
/******/ 		// Execute the module function
/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ 	
/******/ 		// Flag the module as loaded
/******/ 		module.loaded = true;
/******/ 	
/******/ 		// Return the exports of the module
/******/ 		return module.exports;
/******/ 	}
/******/ 	
/******/ 	// expose the module cache
/******/ 	__webpack_require__.c = __webpack_module_cache__;
/******/ 	
/************************************************************************/
/******/ 	/* webpack/runtime/compat get default export */
/******/ 	(() => {
/******/ 		// getDefaultExport function for compatibility with non-harmony modules
/******/ 		__webpack_require__.n = (module) => {
/******/ 			var getter = module && module.__esModule ?
/******/ 				() => (module['default']) :
/******/ 				() => (module);
/******/ 			__webpack_require__.d(getter, { a: getter });
/******/ 			return getter;
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/define property getters */
/******/ 	(() => {
/******/ 		// define getter functions for harmony exports
/******/ 		__webpack_require__.d = (exports, definition) => {
/******/ 			for(var key in definition) {
/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ 				}
/******/ 			}
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
/******/ 	(() => {
/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/make namespace object */
/******/ 	(() => {
/******/ 		// define __esModule on exports
/******/ 		__webpack_require__.r = (exports) => {
/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ 			}
/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
/******/ 		};
/******/ 	})();
/******/ 	
/******/ 	/* webpack/runtime/node module decorator */
/******/ 	(() => {
/******/ 		__webpack_require__.nmd = (module) => {
/******/ 			module.paths = [];
/******/ 			if (!module.children) module.children = [];
/******/ 			return module;
/******/ 		};
/******/ 	})();
/******/ 	
/************************************************************************/
/******/ 	
/******/ 	// module cache are used so entry inlining is disabled
/******/ 	// startup
/******/ 	// Load entry module and return exports
build-token's avatar
build-token committed
/******/ 	var __webpack_exports__ = __webpack_require__(__webpack_require__.s = 1613);
Hugo SUBTIL's avatar
Hugo SUBTIL committed
/******/ 	
/******/ })()
;