diff --git a/README.md b/README.md index f70e98872cc60929900ad995b01b2dc73dae935c..b01b30f63ee10dc67f45c60e3cfdca1c8d63d74c 100644 --- a/README.md +++ b/README.md @@ -4,4 +4,4 @@ Retrieving consumption data from Enedis SGE SOAP api ## Documentation -[Enedis SGE Konnector - Self-Data](https://doc.self-data.alpha.grandlyon.com/konnectors/enedis-sge/) +[Enedis SGE Konnector - Self-Data](https://doc-self-data.apps.grandlyon.com/konnectors/enedis-sge/) diff --git a/index.js b/index.js index b2ef68eb8837ddf891047f9080cc382be941c0bb..c514e5efa1b487c7e716c99a576f7d9f9d270081 100644 --- a/index.js +++ b/index.js @@ -23,10 +23,12 @@ const { parseValue, parseValueHalfHour, parsePointId, + parseUserOffPeakHours, } = __webpack_require__(1599) const { consultationMesuresDetailleesMaxPower, consultationMesuresDetaillees, + consulterDonneesTechniquesContractuelles, } = __webpack_require__(1680) const { updateBoConsent, @@ -40,12 +42,13 @@ const { verifyContract, terminateContract, } = __webpack_require__(1719) -const { getAccount, saveAccountData } = __webpack_require__(1729) -const { isLocal, isDev } = __webpack_require__(1730) +const { getAccount, saveAccountData } = __webpack_require__(1730) +const { isLocal, isDev } = __webpack_require__(1731) const Sentry = __webpack_require__(1600) // eslint-disable-next-line -const Tracing = __webpack_require__(1731) // Needed for tracking performance in Sentry -const { version } = __webpack_require__(1768) +const Tracing = __webpack_require__(1732) // Needed for tracking performance in Sentry +const { version } = __webpack_require__(1769) +const { catchRequestReject } = __webpack_require__(1721) moment.locale('fr') // set the language moment.tz.setDefault('Europe/Paris') // set the timezone @@ -153,6 +156,7 @@ async function start(fields, cozyParameters) { */ log('info', 'User Logging...') + const boUrlSGE = new URL('/api/sge', boBaseUrl).href if (isFirstStart(await getAccount(ACCOUNT_ID))) { log('info', 'First start...') transaction.startChild({ op: 'First start' }) @@ -166,7 +170,7 @@ async function start(fields, cozyParameters) { exitIfDebug(user) let consent = await createBoConsent( - boBaseUrl, + boUrlSGE, boToken, pointId, user.lastname, @@ -200,10 +204,13 @@ async function start(fields, cozyParameters) { user.pointId, contractStartDate, contractEndDate - ) + ).catch(async err => { + await deleteBoConsent(boUrlSGE, boToken, consent.ID) + throw err + }) } consent = await updateBoConsent( - boBaseUrl, + boUrlSGE, boToken, consent, serviceId.toString() @@ -222,7 +229,7 @@ async function start(fields, cozyParameters) { transaction.startChild({ op: 'Alternate start' }) const accountData = await getAccount(ACCOUNT_ID) const userConsent = await getBoConsent( - boBaseUrl, + boUrlSGE, boToken, accountData.data.consentId ) @@ -261,7 +268,7 @@ async function start(fields, cozyParameters) { sgeLogin, contractId, pointId, - boBaseUrl, + boUrlSGE, boToken, consentEndDate < today ) @@ -349,24 +356,18 @@ async function deleteConsent( */ async function gatherData(baseUrl, apiAuthKey, sgeLogin, pointId) { log('info', 'Querying data...') - await getData( - `${baseUrl}/enedis_SGE_ConsultationMesuresDetaillees_v3/1.0`, - apiAuthKey, - sgeLogin, - pointId - ) - await getMaxPowerData( - `${baseUrl}/enedis_SGE_ConsultationMesuresDetaillees_v3/1.0`, - apiAuthKey, - sgeLogin, - pointId - ) - await getDataHalfHour( - `${baseUrl}/enedis_SGE_ConsultationMesuresDetaillees_v3/1.0`, - apiAuthKey, - sgeLogin, - pointId - ) + const measuresUrl = new URL( + '/enedis_SGE_ConsultationMesuresDetaillees_v3/1.0', + baseUrl + ).href + const contractUrl = new URL( + '/enedis_SGE_ConsultationDonneesTechniquesContractuelles/1.0', + baseUrl + ).href + await getData(measuresUrl, apiAuthKey, sgeLogin, pointId) + await getMaxPowerData(measuresUrl, apiAuthKey, sgeLogin, pointId) + await getDataHalfHour(measuresUrl, apiAuthKey, sgeLogin, pointId) + await getOffPeakHours(contractUrl, apiAuthKey, sgeLogin, pointId) log('info', 'Querying data: done') } @@ -377,8 +378,70 @@ async function gatherData(baseUrl, apiAuthKey, sgeLogin, pointId) { * @param {string} userLogin * @param {string} pointId */ +async function getOffPeakHours(url, apiAuthKey, userLogin, pointId) { + log('info', 'Fetching off-peak hours') + const sgeHeaders = { + 'Content-Type': 'text/xml;charset=UTF-8', + apikey: apiAuthKey, + } + + const { response } = await soapRequest({ + url: url, + headers: sgeHeaders, + xml: consulterDonneesTechniquesContractuelles(pointId, userLogin, false), + }).catch(err => { + log('error', 'consulterDonneesTechniquesContractuelles') + log('error', err) + Sentry.captureException( + `consulterDonneesTechniquesContractuelles: ${err}`, + { + tags: { section: 'getOffPeakHour' }, + extra: { + pointId: pointId, + }, + } + ) + return err + }) + + catchRequestReject(response.body) + + const result = await xml2js.parseStringPromise(response.body, { + tagNameProcessors: [parseTags], + valueProcessors: [parseValue], + explicitArray: false, + }) + + try { + const offPeakHours = parseUserOffPeakHours(result) + log( + 'debug', + `Found off-peak hours : ${offPeakHours}, store them in account data` + ) + const accountData = await getAccount(ACCOUNT_ID) + await saveAccountData(ACCOUNT_ID, { + ...accountData.data, + offPeakHours, + }) + } catch (error) { + log('debug', 'Off-peak hours not found, remove them from account data') + let accountData = await getAccount(ACCOUNT_ID) + delete accountData.data.offPeakHours + await saveAccountData(ACCOUNT_ID, { + ...accountData.data, + }) + } +} + +/** + * Get daily data + * @param {string} url + * @param {string} apiAuthKey + * @param {string} userLogin + * @param {string} pointId + */ async function getData(url, apiAuthKey, userLogin, pointId) { - log('info', 'Fetching data') + log('info', 'Fetching daily data') const sgeHeaders = { 'Content-Type': 'text/xml;charset=UTF-8', apikey: apiAuthKey, @@ -404,6 +467,8 @@ async function getData(url, apiAuthKey, userLogin, pointId) { return err }) + catchRequestReject(response.body) + xml2js.parseString( response.body, { @@ -411,7 +476,7 @@ async function getData(url, apiAuthKey, userLogin, pointId) { valueProcessors: [parseValue], explicitArray: false, }, - processData() + processData('com.grandlyon.enedis.day') ) } @@ -447,6 +512,8 @@ async function getMaxPowerData(url, apiAuthKey, userLogin, pointId) { return err }) + catchRequestReject(response.body) + xml2js.parseString( response.body, { @@ -466,7 +533,7 @@ async function getMaxPowerData(url, apiAuthKey, userLogin, pointId) { * @param {string} pointId */ async function getDataHalfHour(url, apiAuthKey, userLogin, pointId) { - log('info', 'Fetching data') + log('info', 'Fetching half-hour data') const sgeHeaders = { 'Content-Type': 'text/xml;charset=UTF-8', apikey: apiAuthKey, @@ -507,6 +574,8 @@ async function getDataHalfHour(url, apiAuthKey, userLogin, pointId) { return err }) + catchRequestReject(response.body) + xml2js.parseString( response.body, { @@ -524,7 +593,7 @@ async function getDataHalfHour(url, apiAuthKey, userLogin, pointId) { * @param {string} doctype * @returns */ -function processData(doctype = 'com.grandlyon.enedis.day') { +function processData(doctype) { return async (err, result) => { if (err) { log('error', err) @@ -532,7 +601,7 @@ function processData(doctype = 'com.grandlyon.enedis.day') { throw err } // Return only needed part of info - log('info', doctype) + log('info', `Processing ${doctype} data`) try { const data = parseSgeXmlData(result) const processedDailyData = await storeData( @@ -540,8 +609,6 @@ function processData(doctype = 'com.grandlyon.enedis.day') { doctype, ['year', 'month', 'day', 'hour', 'minute'] ) - - log('info', 'Aggregate enedis daily data for month and year') if (doctype === 'com.grandlyon.enedis.day') { log('info', 'Aggregating...') await aggregateMonthAndYearData(processedDailyData) @@ -153741,7 +153808,7 @@ const fs = __webpack_require__(149); const path = __webpack_require__(142); -let manifest = typeof {"version":"1.3.5","name":"Enedis SGE","type":"konnector","language":"node","icon":"icon.png","slug":"enedissgegrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"firstname":{"type":"string"},"lastname":{"type":"string"},"address":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"pointId":{"type":"number"}},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"files":{"type":"io.cozy.files"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos données de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"Requises pour accéder et stocker les données collectées par le compteur Linky et exposées par les API Enedis (consommations d’électricité à la demi-heure, au jour, mois et année). "},"files":{"description":"Cozy files"},"accounts":{"description":"Utilisé pour accéder à vos données de consommation."}}},"en":{"short_description":"Fetches your electricity consumption data from Enedis API","long_description":"This konnector fetches the energy curve of your electricity consumption gathered by your Linky device.","permissions":{"enedis data":{"description":"Required to access and store the data collected by the Linky meter and exposed by Enedis APIs (half-an-hour, daily, monthly and yearly consumption)."},"files":{"description":"Cozy files"},"accounts":{"description":"Used to access your consumption data."}}}},"manifest_version":"2","on_delete_account":"onDeleteAccount.js"} === 'undefined' ? {} : {"version":"1.3.5","name":"Enedis SGE","type":"konnector","language":"node","icon":"icon.png","slug":"enedissgegrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"firstname":{"type":"string"},"lastname":{"type":"string"},"address":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"pointId":{"type":"number"}},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"files":{"type":"io.cozy.files"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos données de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"Requises pour accéder et stocker les données collectées par le compteur Linky et exposées par les API Enedis (consommations d’électricité à la demi-heure, au jour, mois et année). "},"files":{"description":"Cozy files"},"accounts":{"description":"Utilisé pour accéder à vos données de consommation."}}},"en":{"short_description":"Fetches your electricity consumption data from Enedis API","long_description":"This konnector fetches the energy curve of your electricity consumption gathered by your Linky device.","permissions":{"enedis data":{"description":"Required to access and store the data collected by the Linky meter and exposed by Enedis APIs (half-an-hour, daily, monthly and yearly consumption)."},"files":{"description":"Cozy files"},"accounts":{"description":"Used to access your consumption data."}}}},"manifest_version":"2","on_delete_account":"onDeleteAccount.js"}; +let manifest = typeof {"version":"1.4.0","name":"Enedis SGE","type":"konnector","language":"node","icon":"icon.png","slug":"enedissgegrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"firstname":{"type":"string"},"lastname":{"type":"string"},"address":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"pointId":{"type":"number"}},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"files":{"type":"io.cozy.files"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos données de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"Requises pour accéder et stocker les données collectées par le compteur Linky et exposées par les API Enedis (consommations d’électricité à la demi-heure, au jour, mois et année). "},"files":{"description":"Cozy files"},"accounts":{"description":"Utilisé pour accéder à vos données de consommation."}}},"en":{"short_description":"Fetches your electricity consumption data from Enedis API","long_description":"This konnector fetches the energy curve of your electricity consumption gathered by your Linky device.","permissions":{"enedis data":{"description":"Required to access and store the data collected by the Linky meter and exposed by Enedis APIs (half-an-hour, daily, monthly and yearly consumption)."},"files":{"description":"Cozy files"},"accounts":{"description":"Used to access your consumption data."}}}},"manifest_version":"2","on_delete_account":"onDeleteAccount.js"} === 'undefined' ? {} : {"version":"1.4.0","name":"Enedis SGE","type":"konnector","language":"node","icon":"icon.png","slug":"enedissgegrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"firstname":{"type":"string"},"lastname":{"type":"string"},"address":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"pointId":{"type":"number"}},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"files":{"type":"io.cozy.files"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos données de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"Requises pour accéder et stocker les données collectées par le compteur Linky et exposées par les API Enedis (consommations d’électricité à la demi-heure, au jour, mois et année). "},"files":{"description":"Cozy files"},"accounts":{"description":"Utilisé pour accéder à vos données de consommation."}}},"en":{"short_description":"Fetches your electricity consumption data from Enedis API","long_description":"This konnector fetches the energy curve of your electricity consumption gathered by your Linky device.","permissions":{"enedis data":{"description":"Required to access and store the data collected by the Linky meter and exposed by Enedis APIs (half-an-hour, daily, monthly and yearly consumption)."},"files":{"description":"Cozy files"},"accounts":{"description":"Used to access your consumption data."}}}},"manifest_version":"2","on_delete_account":"onDeleteAccount.js"}; if (process.env.NODE_ENV !== undefined && process.env.NODE_ENV !== 'none' && process.env.NODE_ENV !== 'production') { try { @@ -229093,6 +229160,31 @@ function parseUserAddress(result) { ]['point']['donneesGenerales']['adresseInstallation'] } +/** + * Return User off-peak hours + * @param {string} result + * @returns {string} + * @example "3H00-8H00;13H30-16H30" + */ +function parseUserOffPeakHours(result) { + log('info', 'Parsing user off-peak hours') + const json = JSON.stringify(result) + const rawOffPeakHours = + JSON.parse(json)['Envelope']['Body'][ + 'consulterDonneesTechniquesContractuellesResponse' + ]['point']['situationComptage']['dispositifComptage']['relais'][ + 'plageHeuresCreuses' + ] + // extract off-peak hours from parentheses + let match = rawOffPeakHours.match(/\((.*?)\)/) + // Check if there is a match and return the content + if (match) { + return match[1] + } else { + throw new Error('invalid off-peak hours format') + } +} + /** * Return User contract start date * @param {string} result @@ -229142,12 +229234,12 @@ async function formateDataForDoctype(data) { return data.map(record => { const date = moment(record.d, 'YYYY/MM/DD h:mm:ss') return { - load: record.v, year: parseInt(date.format('YYYY')), month: parseInt(date.format('M')), day: parseInt(date.format('D')), hour: parseInt(date.format('H')), minute: parseInt(date.format('m')), + load: record.v, } }) } @@ -229283,6 +229375,7 @@ module.exports = { parseSgeXmlData, parseTags, parseUserAddress, + parseUserOffPeakHours, parseUserPdl, parseValue, parseValueHalfHour, @@ -246952,11 +247045,11 @@ module.exports = function isAxiosError(payload) { /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const { activateContract } = __webpack_require__(1720) -const { terminateContract } = __webpack_require__(1721) -const { verifyContract } = __webpack_require__(1722) -const { findUserPdl } = __webpack_require__(1724) -const { verifyUserIdentity } = __webpack_require__(1725) -const { findUserAddress } = __webpack_require__(1727) +const { terminateContract } = __webpack_require__(1722) +const { verifyContract } = __webpack_require__(1723) +const { findUserPdl } = __webpack_require__(1725) +const { verifyUserIdentity } = __webpack_require__(1726) +const { findUserAddress } = __webpack_require__(1728) module.exports = { activateContract, @@ -246979,6 +247072,7 @@ const { parseTags, parseValue, parseServiceId } = __webpack_require__(1599) const { commanderCollectePublicationMesures } = __webpack_require__(1680) const xml2js = __webpack_require__(1557) const Sentry = __webpack_require__(1600) +const { catchRequestReject } = __webpack_require__(1721) /** * @param {string} url @@ -247033,6 +247127,8 @@ async function activateContract( throw new Error(errors.CAPTCHA_RESOLUTION_FAILED) }) + catchRequestReject(response.body) + const parsedReply = await xml2js.parseStringPromise(response.body, { tagNameProcessors: [parseTags], valueProcessors: [parseValue], @@ -247065,6 +247161,32 @@ module.exports = { activateContract } /* 1721 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { +const { log } = __webpack_require__(1) + +/** + * Throw an error if the response contains a "Request Rejected" + * Enedis might send a 429 status but the F5 always transform it to a 200 + * @param {string} response + * @example <html><head><title>Request Rejected</title></head> + * <body>The requested URL was rejected. Please consult with your administrator</body></html> + */ +function catchRequestReject(response) { + if (response.includes('Request Rejected')) { + const supportID = response.replace(/\D/g, '') + log('debug', response.slice(0, 100)) + log('error', `Support ID : ${supportID}`) + log('error', 'Request Rejected') + throw new Error('Request Rejected') + } +} + +module.exports = { catchRequestReject } + + +/***/ }), +/* 1722 */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // @ts-check const { log, errors } = __webpack_require__(1) const soapRequest = __webpack_require__(1375) @@ -247072,6 +247194,7 @@ const { parseTags, parseValue } = __webpack_require__(1599) const { commanderArretServiceSouscritMesures } = __webpack_require__(1680) const xml2js = __webpack_require__(1557) const Sentry = __webpack_require__(1600) +const { catchRequestReject } = __webpack_require__(1721) /** * @param {string} url @@ -247120,6 +247243,8 @@ async function terminateContract( throw new Error(errors.VENDOR_DOWN) }) + catchRequestReject(response.body) + const parsedReply = await xml2js.parseStringPromise(response.body, { tagNameProcessors: [parseTags], valueProcessors: [parseValue], @@ -247156,7 +247281,7 @@ module.exports = { terminateContract } /***/ }), -/* 1722 */ +/* 1723 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // @ts-check @@ -247170,8 +247295,9 @@ const { } = __webpack_require__(1599) const { rechercherServicesSouscritsMesures } = __webpack_require__(1680) const xml2js = __webpack_require__(1557) -const { contractState } = __webpack_require__(1723) +const { contractState } = __webpack_require__(1724) const Sentry = __webpack_require__(1600) +const { catchRequestReject } = __webpack_require__(1721) /** * @param {string} url @@ -247206,6 +247332,12 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) { throw new Error(errors.CAPTCHA_RESOLUTION_FAILED) }) + try { + catchRequestReject(response.body) + } catch (error) { + throw new Error(errors.CAPTCHA_RESOLUTION_FAILED) + } + const parsedReply = await xml2js.parseStringPromise(response.body, { tagNameProcessors: [parseTags], valueProcessors: [parseValue], @@ -247240,7 +247372,7 @@ async function verifyContract(url, apiAuthKey, appLogin, contractId, pointId) { section: 'verifyContract', }, }) - if (parsedReply.Envelope.Body.Fault) { + if (parsedReply?.Envelope?.Body?.Fault) { log( 'error', `Enedis issue ${parsedReply.Envelope.Body.Fault.detail.erreur.resultat.$.code}: ${parsedReply.Envelope.Body.Fault.faultstring}` @@ -247258,7 +247390,7 @@ module.exports = { verifyContract } /***/ }), -/* 1723 */ +/* 1724 */ /***/ ((module) => { /** @@ -247276,7 +247408,7 @@ module.exports = { contractState } /***/ }), -/* 1724 */ +/* 1725 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // @ts-check @@ -247286,6 +247418,7 @@ const { parseUserPdl, parseTags, parseValue } = __webpack_require__(1599) const { rechercherPoint } = __webpack_require__(1680) const xml2js = __webpack_require__(1557) const Sentry = __webpack_require__(1600) +const { catchRequestReject } = __webpack_require__(1721) /** * @param {string} url @@ -247341,12 +247474,17 @@ async function findUserPdl( throw new Error(errors.VENDOR_DOWN) }) - const parsedReply = await xml2js.parseStringPromise(response.body, { - tagNameProcessors: [parseTags], - valueProcessors: [parseValue], - explicitArray: false, - }) + catchRequestReject(response.body) + const parsedReply = await xml2js + .parseStringPromise(response.body, { + tagNameProcessors: [parseTags], + valueProcessors: [parseValue], + explicitArray: false, + }) + .catch(error => { + log('error', 'Error while parsing XML: ' + error) + }) try { return parseUserPdl(parsedReply) } catch (error) { @@ -247374,21 +247512,21 @@ module.exports = { findUserPdl } /***/ }), -/* 1725 */ +/* 1726 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // @ts-check const { log, errors } = __webpack_require__(1) -const { findUserPdl } = __webpack_require__(1724) -const { getInseeCode } = __webpack_require__(1726) -const { findUserAddress } = __webpack_require__(1727) +const { findUserPdl } = __webpack_require__(1725) +const { getInseeCode } = __webpack_require__(1727) +const { findUserAddress } = __webpack_require__(1728) const { removeMultipleSpaces, removeDots, removeAddressNumber, } = __webpack_require__(1599) const Sentry = __webpack_require__(1600) -const { sanitizeLastname } = __webpack_require__(1728) +const { sanitizeLastname } = __webpack_require__(1729) /** * Verify user identity @@ -247417,7 +247555,7 @@ async function verifyUserIdentity( // Store if user is going through safety sge onboarding let userSafetyOnBoarding = false - // First try with user adresse + // First try with user address let pdl = await findUserPdl( `${baseUrl}/enedis_SDE_recherche-point/1.0`, apiAuthKey, @@ -247446,7 +247584,7 @@ async function verifyUserIdentity( userAddress.escalierEtEtageEtAppartement ? removeMultipleSpaces(userAddress.escalierEtEtageEtAppartement) : '' - + // Second try, trim whitespace pdl = await findUserPdl( `${baseUrl}/enedis_SDE_recherche-point/1.0`, apiAuthKey, @@ -247513,13 +247651,15 @@ async function verifyUserIdentity( log('error', 'PointId does not match') if (isAlternateStart) { - Sentry.captureException('PointId does not match: Alternate start', { + Sentry.captureException('PointId no longer match', { tags: { section: 'verifyUserIdentity' }, + extra: { foundPdl: pdl }, }) - throw new Error(errors.TERMS_VERSION_MISMATCH) + throw new Error(errors.USER_ACTION_NEEDED_PERMISSIONS_CHANGED) } else { Sentry.captureException('PointId does not match', { tags: { section: 'verifyUserIdentity' }, + extra: { foundPdl: pdl }, }) throw new Error(errors.LOGIN_FAILED) } @@ -247541,7 +247681,7 @@ module.exports = { verifyUserIdentity } /***/ }), -/* 1726 */ +/* 1727 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // @ts-check @@ -247637,7 +247777,7 @@ module.exports = { /***/ }), -/* 1727 */ +/* 1728 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // @ts-check @@ -247651,6 +247791,7 @@ const { const xml2js = __webpack_require__(1557) const { consulterDonneesTechniquesContractuelles } = __webpack_require__(1680) const Sentry = __webpack_require__(1600) +const { catchRequestReject } = __webpack_require__(1721) /** * Get user contract start date @@ -247685,6 +247826,8 @@ async function findUserAddress(url, apiAuthKey, userLogin, pointId) { throw new Error(errors.VENDOR_DOWN) }) + catchRequestReject(response.body) + const result = await xml2js.parseStringPromise(response.body, { tagNameProcessors: [parseTags], valueProcessors: [parseValue], @@ -247713,7 +247856,7 @@ module.exports = { findUserAddress } /***/ }), -/* 1728 */ +/* 1729 */ /***/ ((module) => { const REPLACE_CHARS = { @@ -247749,11 +247892,11 @@ module.exports = { sanitizeLastname } /***/ }), -/* 1729 */ +/* 1730 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const { log, updateOrCreate } = __webpack_require__(1) -const { isLocal } = __webpack_require__(1730) +const { isLocal } = __webpack_require__(1731) const cozyClient = __webpack_require__(485) async function saveAccountData(accountId, accountData) { @@ -247814,7 +247957,7 @@ module.exports = { getAccount, saveAccountData, getAccountForDelete } /***/ }), -/* 1730 */ +/* 1731 */ /***/ ((module) => { function isLocal() { @@ -247840,7 +247983,7 @@ module.exports = { isLocal, isDev } /***/ }), -/* 1731 */ +/* 1732 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -247864,15 +248007,15 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "extractTraceparentData": () => (/* reexport safe */ _sentry_utils__WEBPACK_IMPORTED_MODULE_9__.extractTraceparentData), /* harmony export */ "stripUrlQueryAndFragment": () => (/* reexport safe */ _sentry_utils__WEBPACK_IMPORTED_MODULE_10__.stripUrlQueryAndFragment) /* harmony export */ }); -/* harmony import */ var _hubextensions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1732); -/* harmony import */ var _integrations_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1740); -/* harmony import */ var _span_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1735); -/* harmony import */ var _spanstatus_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1767); -/* harmony import */ var _transaction_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1734); -/* harmony import */ var _idletransaction_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1736); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1733); -/* harmony import */ var _browser_browsertracing_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1749); -/* harmony import */ var _browser_request_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(1752); +/* harmony import */ var _hubextensions_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1733); +/* harmony import */ var _integrations_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1741); +/* harmony import */ var _span_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1736); +/* harmony import */ var _spanstatus_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1768); +/* harmony import */ var _transaction_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1735); +/* harmony import */ var _idletransaction_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1737); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1734); +/* harmony import */ var _browser_browsertracing_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1750); +/* harmony import */ var _browser_request_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(1753); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(1678); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(1668); @@ -247903,7 +248046,7 @@ if (typeof __SENTRY_TRACING__ === 'undefined' || __SENTRY_TRACING__) { /***/ }), -/* 1732 */ +/* 1733 */ /***/ ((module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -247917,10 +248060,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1614); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1610); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1606); -/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1737); -/* harmony import */ var _idletransaction_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1736); -/* harmony import */ var _transaction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1734); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1733); +/* harmony import */ var _errors_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1738); +/* harmony import */ var _idletransaction_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1737); +/* harmony import */ var _transaction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1735); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1734); /* module decorator */ module = __webpack_require__.hmd(module); @@ -248221,7 +248364,7 @@ function addExtensionMethods() { /***/ }), -/* 1733 */ +/* 1734 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -248282,7 +248425,7 @@ function secToMs(time) { /***/ }), -/* 1734 */ +/* 1735 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -248295,7 +248438,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1604); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1614); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1611); -/* harmony import */ var _span_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1735); +/* harmony import */ var _span_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1736); @@ -248576,7 +248719,7 @@ class Transaction extends _span_js__WEBPACK_IMPORTED_MODULE_0__.Span { /***/ }), -/* 1735 */ +/* 1736 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -248974,7 +249117,7 @@ function spanStatusfromHttpCode(httpStatus) { /***/ }), -/* 1736 */ +/* 1737 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -248988,8 +249131,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ }); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1604); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1614); -/* harmony import */ var _span_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1735); -/* harmony import */ var _transaction_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1734); +/* harmony import */ var _span_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1736); +/* harmony import */ var _transaction_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1735); @@ -249294,7 +249437,7 @@ function clearActiveTransaction(hub) { /***/ }), -/* 1737 */ +/* 1738 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -249302,9 +249445,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "registerErrorInstrumentation": () => (/* binding */ registerErrorInstrumentation) /* harmony export */ }); -/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1738); +/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1739); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1614); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1733); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1734); @@ -249333,7 +249476,7 @@ function errorCallback() { /***/ }), -/* 1738 */ +/* 1739 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -249345,7 +249488,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _logger_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1614); /* harmony import */ var _object_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1611); /* harmony import */ var _stacktrace_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1623); -/* harmony import */ var _supports_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1739); +/* harmony import */ var _supports_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1740); /* harmony import */ var _worldwide_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1605); @@ -249924,7 +250067,7 @@ function instrumentUnhandledRejection() { /***/ }), -/* 1739 */ +/* 1740 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -250126,7 +250269,7 @@ function supportsHistory() { /***/ }), -/* 1740 */ +/* 1741 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -250141,14 +250284,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "Apollo": () => (/* reexport safe */ _node_apollo_js__WEBPACK_IMPORTED_MODULE_6__.Apollo), /* harmony export */ "BrowserTracing": () => (/* reexport safe */ _browser_browsertracing_js__WEBPACK_IMPORTED_MODULE_7__.BrowserTracing) /* harmony export */ }); -/* harmony import */ var _node_express_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1741); -/* harmony import */ var _node_postgres_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1743); -/* harmony import */ var _node_mysql_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1744); -/* harmony import */ var _node_mongo_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1745); -/* harmony import */ var _node_prisma_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1746); -/* harmony import */ var _node_graphql_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1747); -/* harmony import */ var _node_apollo_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1748); -/* harmony import */ var _browser_browsertracing_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1749); +/* harmony import */ var _node_express_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1742); +/* harmony import */ var _node_postgres_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1744); +/* harmony import */ var _node_mysql_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1745); +/* harmony import */ var _node_mongo_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1746); +/* harmony import */ var _node_prisma_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1747); +/* harmony import */ var _node_graphql_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1748); +/* harmony import */ var _node_apollo_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1749); +/* harmony import */ var _browser_browsertracing_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1750); @@ -250162,7 +250305,7 @@ __webpack_require__.r(__webpack_exports__); /***/ }), -/* 1741 */ +/* 1742 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -250175,7 +250318,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1668); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1669); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1610); -/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1742); +/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1743); @@ -250517,7 +250660,7 @@ function getLayerRoutePathString(isArray, lrp) { /***/ }), -/* 1742 */ +/* 1743 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -250546,7 +250689,7 @@ function shouldDisableAutoInstrumentation(getCurrentHub) { /***/ }), -/* 1743 */ +/* 1744 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -250559,7 +250702,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1614); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1611); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1610); -/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1742); +/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1743); @@ -250654,7 +250797,7 @@ class Postgres { /***/ }), -/* 1744 */ +/* 1745 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -250666,7 +250809,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1606); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1614); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1611); -/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1742); +/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1743); @@ -250737,7 +250880,7 @@ class Mysql {constructor() { Mysql.prototype.__init.call(this); } /***/ }), -/* 1745 */ +/* 1746 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -250750,7 +250893,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1614); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1611); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1610); -/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1742); +/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1743); @@ -250968,7 +251111,7 @@ class Mongo { /***/ }), -/* 1746 */ +/* 1747 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -250979,7 +251122,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils_esm_buildPolyfills__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1624); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1614); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1610); -/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1742); +/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1743); @@ -251064,7 +251207,7 @@ class Prisma { /***/ }), -/* 1747 */ +/* 1748 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -251077,7 +251220,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1614); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1611); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1610); -/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1742); +/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1743); @@ -251148,7 +251291,7 @@ class GraphQL {constructor() { GraphQL.prototype.__init.call(this); } /***/ }), -/* 1748 */ +/* 1749 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -251162,7 +251305,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1611); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1608); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1610); -/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1742); +/* harmony import */ var _utils_node_utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1743); @@ -251281,7 +251424,7 @@ function wrapResolver( /***/ }), -/* 1749 */ +/* 1750 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -251296,13 +251439,13 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1678); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(1656); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(1612); -/* harmony import */ var _hubextensions_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(1732); -/* harmony import */ var _idletransaction_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1736); -/* harmony import */ var _backgroundtab_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1766); -/* harmony import */ var _metrics_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1753); -/* harmony import */ var _request_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1752); -/* harmony import */ var _router_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1750); -/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(1751); +/* harmony import */ var _hubextensions_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(1733); +/* harmony import */ var _idletransaction_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1737); +/* harmony import */ var _backgroundtab_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1767); +/* harmony import */ var _metrics_index_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1754); +/* harmony import */ var _request_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1753); +/* harmony import */ var _router_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1751); +/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(1752); @@ -251493,7 +251636,7 @@ function getMetaContent(metaName) { /***/ }), -/* 1750 */ +/* 1751 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -251502,8 +251645,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "instrumentRoutingWithDefaults": () => (/* binding */ instrumentRoutingWithDefaults) /* harmony export */ }); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1614); -/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1738); -/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1751); +/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1739); +/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1752); @@ -251569,7 +251712,7 @@ function instrumentRoutingWithDefaults( /***/ }), -/* 1751 */ +/* 1752 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -251587,7 +251730,7 @@ const WINDOW = _sentry_utils__WEBPACK_IMPORTED_MODULE_0__.GLOBAL_OBJ ; /***/ }), -/* 1752 */ +/* 1753 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -251600,11 +251743,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "shouldAttachHeaders": () => (/* binding */ shouldAttachHeaders), /* harmony export */ "xhrCallback": () => (/* binding */ xhrCallback) /* harmony export */ }); -/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1738); +/* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1739); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1609); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1656); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1610); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1733); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1734); @@ -251870,7 +252013,7 @@ function xhrCallback( /***/ }), -/* 1753 */ +/* 1754 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -251886,14 +252029,14 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1604); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1614); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(1612); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1733); -/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1751); -/* harmony import */ var _web_vitals_getCLS_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1755); -/* harmony import */ var _web_vitals_getFID_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1764); -/* harmony import */ var _web_vitals_getLCP_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1762); -/* harmony import */ var _web_vitals_lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(1763); -/* harmony import */ var _web_vitals_lib_observe_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1754); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(1765); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1734); +/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1752); +/* harmony import */ var _web_vitals_getCLS_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1756); +/* harmony import */ var _web_vitals_getFID_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(1765); +/* harmony import */ var _web_vitals_getLCP_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(1763); +/* harmony import */ var _web_vitals_lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(1764); +/* harmony import */ var _web_vitals_lib_observe_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1755); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(1766); @@ -252332,7 +252475,7 @@ function _tagMetricInfo(transaction) { /***/ }), -/* 1754 */ +/* 1755 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252380,7 +252523,7 @@ const observe = ( /***/ }), -/* 1755 */ +/* 1756 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252388,10 +252531,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "onCLS": () => (/* binding */ onCLS) /* harmony export */ }); -/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1760); -/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1756); -/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1754); -/* harmony import */ var _lib_onHidden_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1761); +/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1761); +/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1757); +/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1755); +/* harmony import */ var _lib_onHidden_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1762); @@ -252494,7 +252637,7 @@ const onCLS = (onReport, opts = {}) => { /***/ }), -/* 1756 */ +/* 1757 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252502,10 +252645,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "initMetric": () => (/* binding */ initMetric) /* harmony export */ }); -/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1751); -/* harmony import */ var _generateUniqueID_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1759); -/* harmony import */ var _getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1758); -/* harmony import */ var _getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1757); +/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1752); +/* harmony import */ var _generateUniqueID_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1760); +/* harmony import */ var _getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1759); +/* harmony import */ var _getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1758); @@ -252555,7 +252698,7 @@ const initMetric = (name, value) => { /***/ }), -/* 1757 */ +/* 1758 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252563,7 +252706,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "getNavigationEntry": () => (/* binding */ getNavigationEntry) /* harmony export */ }); -/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1751); +/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1752); /* @@ -252619,7 +252762,7 @@ const getNavigationEntry = () => { /***/ }), -/* 1758 */ +/* 1759 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252627,7 +252770,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "getActivationStart": () => (/* binding */ getActivationStart) /* harmony export */ }); -/* harmony import */ var _getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1757); +/* harmony import */ var _getNavigationEntry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1758); /* @@ -252656,7 +252799,7 @@ const getActivationStart = () => { /***/ }), -/* 1759 */ +/* 1760 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252694,7 +252837,7 @@ const generateUniqueID = () => { /***/ }), -/* 1760 */ +/* 1761 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252733,7 +252876,7 @@ const bindReporter = ( /***/ }), -/* 1761 */ +/* 1762 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252741,7 +252884,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "onHidden": () => (/* binding */ onHidden) /* harmony export */ }); -/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1751); +/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1752); /* @@ -252781,7 +252924,7 @@ const onHidden = (cb, once) => { /***/ }), -/* 1762 */ +/* 1763 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252789,12 +252932,12 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "onLCP": () => (/* binding */ onLCP) /* harmony export */ }); -/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1760); -/* harmony import */ var _lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1758); -/* harmony import */ var _lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1763); -/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1756); -/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1754); -/* harmony import */ var _lib_onHidden_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1761); +/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1761); +/* harmony import */ var _lib_getActivationStart_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1759); +/* harmony import */ var _lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1764); +/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1757); +/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1755); +/* harmony import */ var _lib_onHidden_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(1762); @@ -252884,7 +253027,7 @@ const onLCP = (onReport, opts = {}) => { /***/ }), -/* 1763 */ +/* 1764 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252892,8 +253035,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "getVisibilityWatcher": () => (/* binding */ getVisibilityWatcher) /* harmony export */ }); -/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1751); -/* harmony import */ var _onHidden_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1761); +/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1752); +/* harmony import */ var _onHidden_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1762); @@ -252951,7 +253094,7 @@ const getVisibilityWatcher = ( /***/ }), -/* 1764 */ +/* 1765 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -252959,11 +253102,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ __webpack_require__.d(__webpack_exports__, { /* harmony export */ "onFID": () => (/* binding */ onFID) /* harmony export */ }); -/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1760); -/* harmony import */ var _lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1763); -/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1756); -/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1754); -/* harmony import */ var _lib_onHidden_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1761); +/* harmony import */ var _lib_bindReporter_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(1761); +/* harmony import */ var _lib_getVisibilityWatcher_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1764); +/* harmony import */ var _lib_initMetric_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1757); +/* harmony import */ var _lib_observe_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1755); +/* harmony import */ var _lib_onHidden_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(1762); @@ -253030,7 +253173,7 @@ const onFID = (onReport, opts = {}) => { /***/ }), -/* 1765 */ +/* 1766 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -253067,7 +253210,7 @@ function _startChild(transaction, { startTimestamp, ...ctx }) { /***/ }), -/* 1766 */ +/* 1767 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -253076,8 +253219,8 @@ __webpack_require__.r(__webpack_exports__); /* harmony export */ "registerBackgroundTabDetection": () => (/* binding */ registerBackgroundTabDetection) /* harmony export */ }); /* harmony import */ var _sentry_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1614); -/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1733); -/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1751); +/* harmony import */ var _utils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1734); +/* harmony import */ var _types_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1752); @@ -253117,7 +253260,7 @@ function registerBackgroundTabDetection() { /***/ }), -/* 1767 */ +/* 1768 */ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { "use strict"; @@ -253172,11 +253315,11 @@ var SpanStatus; (function (SpanStatus) { /***/ }), -/* 1768 */ +/* 1769 */ /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"name":"enedissgegrandlyon","version":"1.3.5","description":"","repository":{"type":"https","url":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector"},"keywords":[],"main":"./src/index.js","author":"Cozy Cloud","license":"AGPL-3.0","eslintConfig":{"extends":["cozy-app"]},"eslintIgnore":["build","data"],"husky":{"hooks":{"pre-commit":"yarn lint"}},"jest":{"setupFiles":["./setupTests.js"]},"scripts":{"build":"webpack","clean":"rm -rf ./data","cozyPublish":"cozy-app-publish --token $REGISTRY_TOKEN --build-commit $(git rev-parse ${DEPLOY_BRANCH:-build})","deploy":"git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build}","deploy-dev":"git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build-dev}","dev":"cozy-konnector-dev","lint":"eslint --fix .","onDeleteAccount:standalone":"cozy-konnector-standalone src/onDeleteAccount.js","onDeleteAccount":"cozy-konnector-dev src/onDeleteAccount.js","pretest":"npm run clean","release":"standard-version --no-verify","standalone":"cozy-konnector-standalone","standalone-no-data":"NO_DATA=true cozy-konnector-standalone src/index.js","start":"node ./src/index.js","test:cov":"jest --coverage","test":"jest","travisDeployKey":"./bin/generate_travis_deploy_key"},"dependencies":{"@sentry/node":"^7.23.0","@sentry/tracing":"^7.23.0","axios":"^0.27.2","cozy-konnector-libs":"5.0.0","easy-soap-request":"^4.7.0","jest":"^28.1.3","moment":"^2.29.3","moment-timezone":"^0.5.34","xml2js":"^0.4.23"},"devDependencies":{"cozy-jobs-cli":"2.0.0","cozy-konnector-build":"1.4.5","eslint-config-cozy-app":"5.5.0","eslint-plugin-prettier":"^4.2.1","git-directory-deploy":"1.5.1","jest-junit":"^14.0.0","standard-version":"^9.5.0"}}'); +module.exports = JSON.parse('{"name":"enedissgegrandlyon","version":"1.4.0","description":"","repository":{"type":"https","url":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector"},"keywords":[],"main":"./src/index.js","author":"Cozy Cloud","license":"AGPL-3.0","eslintConfig":{"extends":["cozy-app"]},"eslintIgnore":["build","data"],"husky":{"hooks":{"pre-commit":"yarn lint"}},"jest":{"setupFiles":["./setupTests.js"]},"scripts":{"build":"webpack","clean":"rm -rf ./data","cozyPublish":"cozy-app-publish --token $REGISTRY_TOKEN --build-commit $(git rev-parse ${DEPLOY_BRANCH:-build})","deploy":"git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build}","deploy-dev":"git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build-dev}","dev":"cozy-konnector-dev","lint":"eslint --fix .","onDeleteAccount:standalone":"cozy-konnector-standalone src/onDeleteAccount.js","onDeleteAccount":"cozy-konnector-dev src/onDeleteAccount.js","pretest":"npm run clean","release":"standard-version --no-verify","standalone":"cozy-konnector-standalone","standalone-no-data":"NO_DATA=true cozy-konnector-standalone src/index.js","start":"node ./src/index.js","test:cov":"jest --coverage","test":"jest","travisDeployKey":"./bin/generate_travis_deploy_key"},"dependencies":{"@sentry/node":"^7.23.0","@sentry/tracing":"^7.23.0","axios":"^0.27.2","cozy-konnector-libs":"5.0.0","easy-soap-request":"^4.7.0","jest":"^28.1.3","moment":"^2.29.3","moment-timezone":"^0.5.34","xml2js":"^0.4.23"},"devDependencies":{"cozy-jobs-cli":"2.0.0","cozy-konnector-build":"1.4.5","eslint-config-cozy-app":"5.5.0","eslint-plugin-prettier":"^4.2.1","git-directory-deploy":"1.5.1","jest-junit":"^14.0.0","standard-version":"^9.5.0"}}'); /***/ }) /******/ ]); diff --git a/manifest.konnector b/manifest.konnector index e9252c654f180b72a315a78e934a16cf8b38fa00..f888469287b07b6f75b1ecdc5810c2f660165303 100644 --- a/manifest.konnector +++ b/manifest.konnector @@ -1,5 +1,5 @@ { - "version": "1.3.5", + "version": "1.4.0", "name": "Enedis SGE", "type": "konnector", "language": "node", diff --git a/onDeleteAccount.js b/onDeleteAccount.js index db81f441cd37970318c01fbff748412aec7fdbc2..bc1c05678636b756f8f005eff2462cd49d610fb8 100644 --- a/onDeleteAccount.js +++ b/onDeleteAccount.js @@ -153102,7 +153102,7 @@ const fs = __webpack_require__(149); const path = __webpack_require__(142); -let manifest = typeof {"version":"1.3.5","name":"Enedis SGE","type":"konnector","language":"node","icon":"icon.png","slug":"enedissgegrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"firstname":{"type":"string"},"lastname":{"type":"string"},"address":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"pointId":{"type":"number"}},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"files":{"type":"io.cozy.files"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos données de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"Requises pour accéder et stocker les données collectées par le compteur Linky et exposées par les API Enedis (consommations d’électricité à la demi-heure, au jour, mois et année). "},"files":{"description":"Cozy files"},"accounts":{"description":"Utilisé pour accéder à vos données de consommation."}}},"en":{"short_description":"Fetches your electricity consumption data from Enedis API","long_description":"This konnector fetches the energy curve of your electricity consumption gathered by your Linky device.","permissions":{"enedis data":{"description":"Required to access and store the data collected by the Linky meter and exposed by Enedis APIs (half-an-hour, daily, monthly and yearly consumption)."},"files":{"description":"Cozy files"},"accounts":{"description":"Used to access your consumption data."}}}},"manifest_version":"2","on_delete_account":"onDeleteAccount.js"} === 'undefined' ? {} : {"version":"1.3.5","name":"Enedis SGE","type":"konnector","language":"node","icon":"icon.png","slug":"enedissgegrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"firstname":{"type":"string"},"lastname":{"type":"string"},"address":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"pointId":{"type":"number"}},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"files":{"type":"io.cozy.files"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos données de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"Requises pour accéder et stocker les données collectées par le compteur Linky et exposées par les API Enedis (consommations d’électricité à la demi-heure, au jour, mois et année). "},"files":{"description":"Cozy files"},"accounts":{"description":"Utilisé pour accéder à vos données de consommation."}}},"en":{"short_description":"Fetches your electricity consumption data from Enedis API","long_description":"This konnector fetches the energy curve of your electricity consumption gathered by your Linky device.","permissions":{"enedis data":{"description":"Required to access and store the data collected by the Linky meter and exposed by Enedis APIs (half-an-hour, daily, monthly and yearly consumption)."},"files":{"description":"Cozy files"},"accounts":{"description":"Used to access your consumption data."}}}},"manifest_version":"2","on_delete_account":"onDeleteAccount.js"}; +let manifest = typeof {"version":"1.4.0","name":"Enedis SGE","type":"konnector","language":"node","icon":"icon.png","slug":"enedissgegrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"firstname":{"type":"string"},"lastname":{"type":"string"},"address":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"pointId":{"type":"number"}},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"files":{"type":"io.cozy.files"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos données de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"Requises pour accéder et stocker les données collectées par le compteur Linky et exposées par les API Enedis (consommations d’électricité à la demi-heure, au jour, mois et année). "},"files":{"description":"Cozy files"},"accounts":{"description":"Utilisé pour accéder à vos données de consommation."}}},"en":{"short_description":"Fetches your electricity consumption data from Enedis API","long_description":"This konnector fetches the energy curve of your electricity consumption gathered by your Linky device.","permissions":{"enedis data":{"description":"Required to access and store the data collected by the Linky meter and exposed by Enedis APIs (half-an-hour, daily, monthly and yearly consumption)."},"files":{"description":"Cozy files"},"accounts":{"description":"Used to access your consumption data."}}}},"manifest_version":"2","on_delete_account":"onDeleteAccount.js"} === 'undefined' ? {} : {"version":"1.4.0","name":"Enedis SGE","type":"konnector","language":"node","icon":"icon.png","slug":"enedissgegrandlyon","source":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector.git","editor":"Métropole de Lyon","vendor_link":"https://www.enedis.fr/","categories":["energy"],"frequency":"daily","fields":{"firstname":{"type":"string"},"lastname":{"type":"string"},"address":{"type":"string"},"postalCode":{"type":"string"},"city":{"type":"string"},"pointId":{"type":"number"}},"data_types":[],"screenshots":[],"permissions":{"accounts":{"type":"io.cozy.accounts"},"files":{"type":"io.cozy.files"},"enedis data":{"type":"com.grandlyon.enedis.*"}},"developer":{"name":"Métropole de Lyon","url":"https://www.grandlyon.com/"},"langs":["fr"],"locales":{"fr":{"short_description":"Récupère vos données de courbe de charge depuis l'API Enedis","long_description":"Ce connecteur récupère la courbe de charge électrique enregistrée par le compteur Linky","permissions":{"enedis data":{"description":"Requises pour accéder et stocker les données collectées par le compteur Linky et exposées par les API Enedis (consommations d’électricité à la demi-heure, au jour, mois et année). "},"files":{"description":"Cozy files"},"accounts":{"description":"Utilisé pour accéder à vos données de consommation."}}},"en":{"short_description":"Fetches your electricity consumption data from Enedis API","long_description":"This konnector fetches the energy curve of your electricity consumption gathered by your Linky device.","permissions":{"enedis data":{"description":"Required to access and store the data collected by the Linky meter and exposed by Enedis APIs (half-an-hour, daily, monthly and yearly consumption)."},"files":{"description":"Cozy files"},"accounts":{"description":"Used to access your consumption data."}}}},"manifest_version":"2","on_delete_account":"onDeleteAccount.js"}; if (process.env.NODE_ENV !== undefined && process.env.NODE_ENV !== 'none' && process.env.NODE_ENV !== 'production') { try { @@ -228345,6 +228345,31 @@ function parseUserAddress(result) { ]['point']['donneesGenerales']['adresseInstallation'] } +/** + * Return User off-peak hours + * @param {string} result + * @returns {string} + * @example "3H00-8H00;13H30-16H30" + */ +function parseUserOffPeakHours(result) { + log('info', 'Parsing user off-peak hours') + const json = JSON.stringify(result) + const rawOffPeakHours = + JSON.parse(json)['Envelope']['Body'][ + 'consulterDonneesTechniquesContractuellesResponse' + ]['point']['situationComptage']['dispositifComptage']['relais'][ + 'plageHeuresCreuses' + ] + // extract off-peak hours from parentheses + let match = rawOffPeakHours.match(/\((.*?)\)/) + // Check if there is a match and return the content + if (match) { + return match[1] + } else { + throw new Error('invalid off-peak hours format') + } +} + /** * Return User contract start date * @param {string} result @@ -228394,12 +228419,12 @@ async function formateDataForDoctype(data) { return data.map(record => { const date = moment(record.d, 'YYYY/MM/DD h:mm:ss') return { - load: record.v, year: parseInt(date.format('YYYY')), month: parseInt(date.format('M')), day: parseInt(date.format('D')), hour: parseInt(date.format('H')), minute: parseInt(date.format('m')), + load: record.v, } }) } @@ -228535,6 +228560,7 @@ module.exports = { parseSgeXmlData, parseTags, parseUserAddress, + parseUserOffPeakHours, parseUserPdl, parseValue, parseValueHalfHour, @@ -246205,6 +246231,32 @@ module.exports = function isAxiosError(payload) { /* 1721 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { +const { log } = __webpack_require__(1) + +/** + * Throw an error if the response contains a "Request Rejected" + * Enedis might send a 429 status but the F5 always transform it to a 200 + * @param {string} response + * @example <html><head><title>Request Rejected</title></head> + * <body>The requested URL was rejected. Please consult with your administrator</body></html> + */ +function catchRequestReject(response) { + if (response.includes('Request Rejected')) { + const supportID = response.replace(/\D/g, '') + log('debug', response.slice(0, 100)) + log('error', `Support ID : ${supportID}`) + log('error', 'Request Rejected') + throw new Error('Request Rejected') + } +} + +module.exports = { catchRequestReject } + + +/***/ }), +/* 1722 */ +/***/ ((module, __unused_webpack_exports, __webpack_require__) => { + // @ts-check const { log, errors } = __webpack_require__(1) const soapRequest = __webpack_require__(1375) @@ -246212,6 +246264,7 @@ const { parseTags, parseValue } = __webpack_require__(1599) const { commanderArretServiceSouscritMesures } = __webpack_require__(1680) const xml2js = __webpack_require__(1557) const Sentry = __webpack_require__(1600) +const { catchRequestReject } = __webpack_require__(1721) /** * @param {string} url @@ -246260,6 +246313,8 @@ async function terminateContract( throw new Error(errors.VENDOR_DOWN) }) + catchRequestReject(response.body) + const parsedReply = await xml2js.parseStringPromise(response.body, { tagNameProcessors: [parseTags], valueProcessors: [parseValue], @@ -246296,18 +246351,18 @@ module.exports = { terminateContract } /***/ }), -/* 1722 */, /* 1723 */, /* 1724 */, /* 1725 */, /* 1726 */, /* 1727 */, /* 1728 */, -/* 1729 */ +/* 1729 */, +/* 1730 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const { log, updateOrCreate } = __webpack_require__(1) -const { isLocal } = __webpack_require__(1730) +const { isLocal } = __webpack_require__(1731) const cozyClient = __webpack_require__(485) async function saveAccountData(accountId, accountData) { @@ -246368,7 +246423,7 @@ module.exports = { getAccount, saveAccountData, getAccountForDelete } /***/ }), -/* 1730 */ +/* 1731 */ /***/ ((module) => { function isLocal() { @@ -246394,7 +246449,6 @@ module.exports = { isLocal, isDev } /***/ }), -/* 1731 */, /* 1732 */, /* 1733 */, /* 1734 */, @@ -246431,14 +246485,15 @@ module.exports = { isLocal, isDev } /* 1765 */, /* 1766 */, /* 1767 */, -/* 1768 */ +/* 1768 */, +/* 1769 */ /***/ ((module) => { "use strict"; -module.exports = JSON.parse('{"name":"enedissgegrandlyon","version":"1.3.5","description":"","repository":{"type":"https","url":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector"},"keywords":[],"main":"./src/index.js","author":"Cozy Cloud","license":"AGPL-3.0","eslintConfig":{"extends":["cozy-app"]},"eslintIgnore":["build","data"],"husky":{"hooks":{"pre-commit":"yarn lint"}},"jest":{"setupFiles":["./setupTests.js"]},"scripts":{"build":"webpack","clean":"rm -rf ./data","cozyPublish":"cozy-app-publish --token $REGISTRY_TOKEN --build-commit $(git rev-parse ${DEPLOY_BRANCH:-build})","deploy":"git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build}","deploy-dev":"git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build-dev}","dev":"cozy-konnector-dev","lint":"eslint --fix .","onDeleteAccount:standalone":"cozy-konnector-standalone src/onDeleteAccount.js","onDeleteAccount":"cozy-konnector-dev src/onDeleteAccount.js","pretest":"npm run clean","release":"standard-version --no-verify","standalone":"cozy-konnector-standalone","standalone-no-data":"NO_DATA=true cozy-konnector-standalone src/index.js","start":"node ./src/index.js","test:cov":"jest --coverage","test":"jest","travisDeployKey":"./bin/generate_travis_deploy_key"},"dependencies":{"@sentry/node":"^7.23.0","@sentry/tracing":"^7.23.0","axios":"^0.27.2","cozy-konnector-libs":"5.0.0","easy-soap-request":"^4.7.0","jest":"^28.1.3","moment":"^2.29.3","moment-timezone":"^0.5.34","xml2js":"^0.4.23"},"devDependencies":{"cozy-jobs-cli":"2.0.0","cozy-konnector-build":"1.4.5","eslint-config-cozy-app":"5.5.0","eslint-plugin-prettier":"^4.2.1","git-directory-deploy":"1.5.1","jest-junit":"^14.0.0","standard-version":"^9.5.0"}}'); +module.exports = JSON.parse('{"name":"enedissgegrandlyon","version":"1.4.0","description":"","repository":{"type":"https","url":"https://forge.grandlyon.com/web-et-numerique/llle_project/enedis-sge-konnector"},"keywords":[],"main":"./src/index.js","author":"Cozy Cloud","license":"AGPL-3.0","eslintConfig":{"extends":["cozy-app"]},"eslintIgnore":["build","data"],"husky":{"hooks":{"pre-commit":"yarn lint"}},"jest":{"setupFiles":["./setupTests.js"]},"scripts":{"build":"webpack","clean":"rm -rf ./data","cozyPublish":"cozy-app-publish --token $REGISTRY_TOKEN --build-commit $(git rev-parse ${DEPLOY_BRANCH:-build})","deploy":"git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build}","deploy-dev":"git-directory-deploy --directory build/ --branch ${DEPLOY_BRANCH:-build-dev}","dev":"cozy-konnector-dev","lint":"eslint --fix .","onDeleteAccount:standalone":"cozy-konnector-standalone src/onDeleteAccount.js","onDeleteAccount":"cozy-konnector-dev src/onDeleteAccount.js","pretest":"npm run clean","release":"standard-version --no-verify","standalone":"cozy-konnector-standalone","standalone-no-data":"NO_DATA=true cozy-konnector-standalone src/index.js","start":"node ./src/index.js","test:cov":"jest --coverage","test":"jest","travisDeployKey":"./bin/generate_travis_deploy_key"},"dependencies":{"@sentry/node":"^7.23.0","@sentry/tracing":"^7.23.0","axios":"^0.27.2","cozy-konnector-libs":"5.0.0","easy-soap-request":"^4.7.0","jest":"^28.1.3","moment":"^2.29.3","moment-timezone":"^0.5.34","xml2js":"^0.4.23"},"devDependencies":{"cozy-jobs-cli":"2.0.0","cozy-konnector-build":"1.4.5","eslint-config-cozy-app":"5.5.0","eslint-plugin-prettier":"^4.2.1","git-directory-deploy":"1.5.1","jest-junit":"^14.0.0","standard-version":"^9.5.0"}}'); /***/ }), -/* 1769 */ +/* 1770 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { // @ts-check @@ -246447,15 +246502,15 @@ const { getAccountRev, getAccountSecret, getAccountId, -} = __webpack_require__(1770) +} = __webpack_require__(1771) const { getBoConsent, deleteBoConsent } = __webpack_require__(1681) -const { terminateContract } = __webpack_require__(1721) -const { getAccountForDelete } = __webpack_require__(1729) +const { terminateContract } = __webpack_require__(1722) +const { getAccountForDelete } = __webpack_require__(1730) const moment = __webpack_require__(1417) __webpack_require__(1554) -const { isLocal, isDev } = __webpack_require__(1730) +const { isLocal, isDev } = __webpack_require__(1731) const Sentry = __webpack_require__(1600) -const { version } = __webpack_require__(1768) +const { version } = __webpack_require__(1769) moment.locale('fr') // set the language moment.tz.setDefault('Europe/Paris') // set the timezone @@ -246575,11 +246630,11 @@ module.exports = { onDeleteAccount } /***/ }), -/* 1770 */ +/* 1771 */ /***/ ((module, __unused_webpack_exports, __webpack_require__) => { const { log } = __webpack_require__(1) -const { isLocal } = __webpack_require__(1730) +const { isLocal } = __webpack_require__(1731) const Sentry = __webpack_require__(1600) function getAccountId() { @@ -246730,7 +246785,7 @@ module.exports = { getAccountId, getAccountRev, getAccountSecret } /******/ // module cache are used so entry inlining is disabled /******/ // startup /******/ // Load entry module and return exports -/******/ var __webpack_exports__ = __webpack_require__(__webpack_require__.s = 1769); +/******/ var __webpack_exports__ = __webpack_require__(__webpack_require__.s = 1770); /******/ /******/ })() ; \ No newline at end of file diff --git a/package.json b/package.json index 5fa1c0561bccfb1b29a42707afdde3c154697faf..6905fd2f30a79b01a0154f9bb3ee29796917d3fa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "enedissgegrandlyon", - "version": "1.3.5", + "version": "1.4.0", "description": "", "repository": { "type": "https",