diff --git a/.vscode/settings.json b/.vscode/settings.json index 0736f1980a6ef2e872be0ebfc726f98202cb0bd6..742ce80e76842e6513d3b1e44af055e8d3a5860e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,8 +19,8 @@ "titleBar.inactiveForeground": "#15202b99" }, "editor.codeActionsOnSave": { - "source.fixAll": true, - "source.organizeImports": true + "source.fixAll": "explicit", + "source.organizeImports": "explicit" }, "gitlens.remotes": [ { "type": "GitLab", "domain": "forge.grandlyon.com", "name": "Forge" } @@ -29,6 +29,7 @@ "acces", "adict", "backoff", + "backoffice", "camelcase", "cicid", "coeff", @@ -36,12 +37,17 @@ "ecolyodemo", "energie", "etat", + "firstname", "grandlyon", "grdf", "grdfgrandlyon", "konnector", "konnectors", + "lastname", "ndjson", - "periode" + "numero", + "perim", + "periode", + "publiees" ] } diff --git a/konnector-dev-config.example.json b/konnector-dev-config.example.json index abf284bbfa25e85cfe60e87b3c6a9eb376132ea7..9286f6abb4f340158793f0d2f958d7c4a4646284 100644 --- a/konnector-dev-config.example.json +++ b/konnector-dev-config.example.json @@ -1,18 +1,18 @@ { - "COZY_URL": "http://cozy.tools:8080", - "fields": { - "secrets": { - "client_id": "", - "client_secret": "" - }, - "oauth": { - "access_token": "", - "refresh_token": "-", - "token_type": "Bearer" - }, - "oauth_callback_results": { - "id_token": "", - "pce": "" - } + "COZY_URL": "http://cozy.tools:8080", + "fields": { + "pce": "", + "email": "", + "lastname": "", + "firstname": "", + "postalCode": "" + }, + "COZY_PARAMETERS": { + "secret": { + "boBaseUrl": "", + "boToken": "", + "client_id": "", + "client_secret": "" } -} \ No newline at end of file + } +} diff --git a/manifest.konnector b/manifest.konnector index e96b49a02f699995de892aa53d663f3fd604cfdb..25a56ae3829831cb17021d2fb0d8a19ebee35fb3 100755 --- a/manifest.konnector +++ b/manifest.konnector @@ -11,14 +11,22 @@ "categories": ["energy"], "frequency": "daily", "fields": { - "access_token": { - "type": "hidden" + "firstname": { + "type": "string" }, - "refresh_token": { - "type": "hidden" + "lastname": { + "type": "string" + }, + "postalCode": { + "type": "string" + }, + "email": { + "type": "string" + }, + "pce": { + "type": "string" } }, - "oauth": {}, "data_types": [], "screenshots": [], "permissions": { diff --git a/package.json b/package.json index d673519e5241187ac18a3c02d623ecd69ddc3a8c..a271c32b854ecdd559031ff0d40de0386c45b0d1 100755 --- a/package.json +++ b/package.json @@ -24,7 +24,6 @@ ], "husky": { "hooks": { - "pre-commit": "yarn lint" } }, "jest": { @@ -35,7 +34,8 @@ "scripts": { "start": "node ./src/index.js", "dev": "cozy-konnector-dev", - "standalone": "cozy-konnector-standalone", + "standalone": "COZY_JOB_MANUAL_EXECUTION=true cozy-konnector-standalone", + "standalone-no-data": "NO_DATA=true cozy-konnector-standalone src/index.js", "onDeleteAccount:standalone": "cozy-konnector-standalone src/onDeleteAccount.js", "onDeleteAccount": "cozy-konnector-dev src/onDeleteAccount.js", "pretest": "npm run clean", @@ -56,12 +56,13 @@ "@sentry/tracing": "^7.28.1", "axios": "^0.20.0", "cozy-client": "23.22.0", - "cozy-konnector-libs": "4.34.5", + "cozy-konnector-libs": "5.0.0", "husky": "4.3.0", "jest": "^28.1.3", "jsonwebtoken": "^8.5.1", "moment": "^2.29.0", - "moment-timezone": "^0.5.31" + "moment-timezone": "^0.5.31", + "qs": "^6.11.2" }, "devDependencies": { "copy-webpack-plugin": "6.1.1", diff --git a/src/constants.js b/src/constants.js index 957d04b782f0bccc8bd376475f9a30cd7fae7bc1..d6c6af89378231604f76b65cb4eedccce9a8e808 100644 --- a/src/constants.js +++ b/src/constants.js @@ -2,19 +2,9 @@ const APP_NAME = `konnector-grdfgrandlyon` const DOCTYPE_ACCOUNTS = 'io.cozy.accounts' const DOCTYPE_ACCOUNTS_VERSION = 1 -const DOCTYPE_CONTACTS = 'io.cozy.contacts' -const DOCTYPE_CONTACTS_ACCOUNT = 'io.cozy.contacts.accounts' -const DOCTYPE_CONTACTS_VERSION = 2 -const DOCTYPE_CONTACTS_ACCOUNT_VERSION = 1 -const SHOULD_SYNC_ORPHAN_DEFAULT_VALUE = true module.exports = { APP_NAME, DOCTYPE_ACCOUNTS, - DOCTYPE_ACCOUNTS_VERSION, - DOCTYPE_CONTACTS, - DOCTYPE_CONTACTS_ACCOUNT, - DOCTYPE_CONTACTS_VERSION, - DOCTYPE_CONTACTS_ACCOUNT_VERSION, - SHOULD_SYNC_ORPHAN_DEFAULT_VALUE + DOCTYPE_ACCOUNTS_VERSION } diff --git a/src/helpers/getAccountId.js b/src/helpers/getAccountId.js deleted file mode 100644 index 65ed6d5a9ea31dfffa64b460e9588980547d0f25..0000000000000000000000000000000000000000 --- a/src/helpers/getAccountId.js +++ /dev/null @@ -1,12 +0,0 @@ -function getAccountId() { - try { - return process.env.NODE_ENV === 'development' || - process.env.NODE_ENV === 'test' - ? 'fakeAccountId' - : JSON.parse(process.env.COZY_FIELDS).account - } catch (err) { - throw new Error(`You must provide 'account' in COZY_FIELDS: ${err.message}`) - } -} - -module.exports = getAccountId diff --git a/src/helpers/getAccountRev.js b/src/helpers/getAccountRev.js deleted file mode 100644 index aae6ff2e209ba63827500443994830da3d16b2b5..0000000000000000000000000000000000000000 --- a/src/helpers/getAccountRev.js +++ /dev/null @@ -1,18 +0,0 @@ -const { log } = require('cozy-konnector-libs') -const { isLocal } = require('./env') -const Sentry = require('@sentry/node') - -function getAccountRev() { - log('info', `getAccountRev: ${JSON.stringify(process.env.COZY_FIELDS)}`) - try { - return isLocal() - ? 'fakeAccountRev' - : JSON.parse(process.env.COZY_FIELDS).account_rev - } catch (err) { - const errorMessage = `You must provide 'account' in COZY_FIELDS: ${err.message}` - Sentry.captureException(errorMessage) - throw new Error(errorMessage) - } -} - -module.exports = getAccountRev diff --git a/src/helpers/getAccountSecret.js b/src/helpers/getAccountSecret.js deleted file mode 100644 index de6eb99d1625be14344ad00d2665ddb874a968bd..0000000000000000000000000000000000000000 --- a/src/helpers/getAccountSecret.js +++ /dev/null @@ -1,18 +0,0 @@ -const { log } = require('cozy-konnector-libs') -const { isLocal } = require('./env') -const Sentry = require('@sentry/node') - -function getAccountSecret() { - log('info', `getAccountSecret`) - try { - return isLocal() - ? JSON.parse(process.env.COZY_FIELDS) - : JSON.parse(process.env.COZY_PARAMETERS).secret - } catch (err) { - const errorMessage = `You must provide 'account-types' in COZY_PARAMETERS: ${err.message}` - Sentry.captureException(errorMessage) - throw new Error(errorMessage) - } -} - -module.exports = getAccountSecret diff --git a/src/helpers/getDataGenericErrors.js b/src/helpers/getDataGenericErrors.js index 574ff4b51dd4ca612fdf7f4915ec6637da3245dc..952e9f693c2a9247c433a61fe04fd6afd4d6dda5 100644 --- a/src/helpers/getDataGenericErrors.js +++ b/src/helpers/getDataGenericErrors.js @@ -10,8 +10,8 @@ function getDataGenericErrors(code) { const errorMappings = { '1000009': errors.CHALLENGE_ASKED, '1000010': errors.CHALLENGE_ASKED, - '1000014': errors.USER_ACTION_NEEDED_OAUTH_OUTDATED, - '1000005': errors.USER_ACTION_NEEDED_OAUTH_OUTDATED + '1000014': errors.USER_ACTION_NEEDED_OAUTH_OUTDATED, // TO DELETE + '1000005': errors.USER_ACTION_NEEDED_OAUTH_OUTDATED // TO DELETE } return errorMappings[code] || errors.VENDOR_DOWN diff --git a/src/index.js b/src/index.js index f53cf16b63e2ce8ca1f9d0e2d90710017d938608..ef69548b663e843d168e0950aab7f487f8edde7d 100755 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,4 @@ +// @ts-check const { cozyClient, BaseKonnector, @@ -6,18 +7,23 @@ const { errors, log } = require('cozy-konnector-libs') -const getAccountId = require('./helpers/getAccountId') const getDataGenericErrors = require('./helpers/getDataGenericErrors') const { isDev } = require('./helpers/env') const moment = require('moment') require('moment-timezone') moment.locale('fr') // set the language moment.tz.setDefault('Europe/Paris') // set the timezone - const Sentry = require('@sentry/node') // eslint-disable-next-line const Tracing = require('@sentry/tracing') // Needed for tracking performance in Sentry const { version } = require('../package.json') +const { createBoConsent, deleteBoConsent } = require('./requests/bo') +const { + createGRDFConsent, + getAuthToken, + getConsents +} = require('./requests/grdf') +const { getAccount, saveAccountData } = require('./requests/cozy') Sentry.init({ dsn: @@ -36,43 +42,132 @@ Sentry.init({ ] }) -async function standaloneStart(token, pce) { - try { - const grdfData = await getData(token, pce) - log('debug', grdfData) - if (!grdfData) { - log('debug', 'No consent or data for load curve') - return +Sentry.setTag('method', 'TIERS-DIRECT') + +const NO_DATA = process.env.NO_DATA === 'true' +const manualExecution = process.env.COZY_JOB_MANUAL_EXECUTION === 'true' +const startDate = moment().subtract(manualExecution ? 1 : 3, 'year') +const endDate = moment().startOf('day') + +const ACCOUNT_ID = 'grdfgrandlyon' + +module.exports = new BaseKonnector(start) + +/** + * @param {GRDFConsent[]} consents + * @param {string} boBaseUrl + * @param {string} boToken + * @returns {Promise<boolean>} Returns true if consent needs to be created. Returns false if consent is valid + */ +async function handleConsents(consents, boBaseUrl, boToken) { + if (consents.some(consent => consent.etat_droit_acces === 'Active')) { + log('info', 'Found consent "Active"') + return false + } + if (consents.some(consent => consent.etat_droit_acces === 'A valider')) { + log('info', 'Found consent "A valider"') + throw errors.CHALLENGE_ASKED + } + if (consents.some(consent => consent.etat_droit_acces === 'Révoquée')) { + log('info', 'Found consent "Révoquée"') + throw errors.USER_ACTION_NEEDED_ACCOUNT_REMOVED + } + + // Check if daily check & if obsolete consent is found, continue otherwise + if ( + !manualExecution && + consents.some(consent => consent.etat_droit_acces === 'Obsolète') + ) { + log('info', 'Found consent "Obsolète"') + } + + if (consents.some(consent => consent.etat_droit_acces === 'A revérifier')) { + log('info', 'Found consent "A revérifier"') + throw errors.VENDOR_DOWN + } + + if (consents.some(consent => consent.etat_droit_acces === 'Refusée')) { + log('info', 'Found consent "Refusée"') + const accountData = await getAccount(ACCOUNT_ID) + if (accountData.data.consentId) { + await deleteBoConsent({ + boBaseUrl, + boToken, + consentId: accountData.data.consentId + }) + delete accountData.data.consentId + await saveAccountData(accountData) + } + if (!manualExecution) { + throw errors.USER_ACTION_NEEDED_SCA_REQUIRED } - log('debug', 'Process grdf daily data') - const processedLoadData = await processData( - grdfData, - 'com.grandlyon.grdf.day', - ['year', 'month', 'day'] - ) - log('debug', 'Aggregate grdf load data for month and year') - await aggregateMonthAndYearData(processedLoadData) - } catch (error) { - log('error', error) - log('error', 'Standalone failed') } + + // "message_retour_traitement": "Aucun droit d’accès trouvé." OU Obsolète -> create consent + return true } -const manualExecution = process.env.COZY_JOB_MANUAL_EXECUTION === 'true' -const startDate = manualExecution - ? moment() - .subtract(1, 'year') - .format('YYYY-MM-DD') - : moment() - .subtract(3, 'year') - .format('YYYY-MM-DD') - -const endDate = moment() - .startOf('day') - .subtract(1, 'day') - .format('YYYY-MM-DD') +/** + * Creates consents + * - first in our back-office + * - then at GRDF + * @returns {Promise<boolean>} isWaitingForConsentValidation Boolean that indicates that the consent was created and needs a user validation. + */ +async function createConsent({ + bearerToken, + pce, + email, + firstname, + lastname, + postalCode, + startDate, + endDate, + boToken, + boBaseUrl +}) { + const startDateString = moment(startDate).format('YYYY-MM-DD') + const endDateConsent = moment(endDate).add(1, 'year') + const endDateString = endDateConsent.format('YYYY-MM-DD') -module.exports = new BaseKonnector(start) + const { ID: consentId } = await createBoConsent({ + boBaseUrl, + boToken, + pce, + firstname, + lastname, + postalCode, + endDate: endDateConsent + }).catch(err => { + log('error', `Failed to create BO consent, ${err}`) + throw errors.MAINTENANCE + }) + + // Save BO consentId into account + const accountData = await getAccount(ACCOUNT_ID) + await saveAccountData(ACCOUNT_ID, { + ...accountData.data, + consentId: consentId + }) + + await createGRDFConsent({ + bearerToken, + email, + lastname, + pce, + postalCode, + startDate: startDateString, + endDate: endDateString + }).catch(async err => { + await deleteBoConsent({ + boBaseUrl, + boToken, + consentId: consentId + }) + throw err + }) + + return true +} /** * The start function is run by the BaseKonnector instance only when it got all the account @@ -80,76 +175,108 @@ module.exports = new BaseKonnector(start) * the account information come from ./konnector-dev-config.json file * cozyParameters are static parameters, independents from the account. Most often, it can be a * secret api key. + * @param {fields} fields + * @param {{secret: parameters}} cozyParameters */ -async function start(fields) { - log('debug', 'Starting grdf adict konnector') - if (process.env.NODE_ENV === 'standalone') { - standaloneStart( - fields.oauth.access_token, - fields.oauth_callback_results.pce +async function start(fields, cozyParameters) { + log('info', `isManual execution: ${manualExecution}`) + log('debug', `FIELDS ${JSON.stringify(fields)}`) + log('debug', `COZY_PARAMETERS ${JSON.stringify(cozyParameters)}`) + + if (NO_DATA) { + log( + 'debug', + 'NO_DATA is enabled, konnector will stop before creating GRDF consent' ) - return } - const transaction = Sentry.startTransaction({ - op: 'konnector', - name: 'GRDF Konnector' - }) + + const { pce, email, firstname, lastname, postalCode } = fields + + let boToken = '' + let boBaseUrl = '' + let grdfId = '' + let grdfSecret = '' + + if (cozyParameters && Object.keys(cozyParameters).length !== 0) { + log('debug', 'Found COZY_PARAMETERS') + boToken = cozyParameters.secret.boToken + boBaseUrl = cozyParameters.secret.boBaseUrl + grdfId = cozyParameters.secret.client_id + grdfSecret = cozyParameters.secret.client_secret + } + const boUrlGRDF = new URL('/api/grdf', boBaseUrl).href try { - const accountId = getAccountId() - let body = '' - let id_pce = '' + const { access_token } = await getAuthToken(grdfId, grdfSecret) + const consents = await getConsents(access_token, pce) + const noValidConsent = await handleConsents(consents, boBaseUrl, boToken) - body = await cozyClient.fetchJSON( - 'POST', - `/accounts/grdfgrandlyon/${accountId}/refresh` - ) + if (NO_DATA) { + log('debug', `Stopping konnector before creating consents`) + process.exit() + } - fields.access_token = body.attributes.oauth.access_token - if (this._account?.oauth_callback_results?.pce && fields.access_token) { - id_pce = this._account.oauth_callback_results.pce - - const grdfData = await getData(fields.access_token, id_pce) - if (grdfData) { - log('debug', 'Process grdf daily data') - const processedLoadData = await processData( - grdfData, - 'com.grandlyon.grdf.day', - ['year', 'month', 'day'] - ) - log('debug', 'Aggregate grdf load data for month and year') - await aggregateMonthAndYearData(processedLoadData) - } else { - log('debug', 'No consent or data for load curve') - } - } else { - log('debug', 'no id_token found in oauth_callback_results') + let isWaitingForConsentValidation = false + if (noValidConsent) { + isWaitingForConsentValidation = await createConsent({ + bearerToken: access_token, + pce, + firstname, + lastname, + email, + postalCode, + startDate, + endDate, + boBaseUrl: boUrlGRDF, + boToken + }) + } + + if (isWaitingForConsentValidation) { log( - 'debug', - 'callback_result contains: ', - this._account.oauth_callback_results + 'info', + 'Need to validate consent before getting data, stopping konnector here' ) - throw errors.USER_ACTION_NEEDED_OAUTH_OUTDATED + return } - } catch (err) { - log('error', 'caught an unexpected error') - log('debug', 'CATCH ERROR : ' + err) - log('error', err.message) - Sentry.captureException(err) - await Sentry.flush() - throw err - } finally { - transaction.finish() + + const grdfData = await getData( + access_token, + pce, + startDate.format('YYYY-MM-DD'), + endDate.format('YYYY-MM-DD') + ) + if (grdfData) { + const processedLoadData = await processData( + grdfData, + 'com.grandlyon.grdf.day', + ['year', 'month', 'day'] + ) + + await aggregateMonthAndYearData(processedLoadData) + } else { + log('debug', 'No consent or data for load curve') + } + } catch (error) { + log('error', 'Start failed', error) + Sentry.captureException(error) } } +/** + * @param {string} idPCE + * @param {string} startDate 'YYYY-MM-DD' + * @param {string} endDate 'YYYY-MM-DD' + * @returns {string} + */ function buildGetDataUrl(idPCE, startDate, endDate) { const baseUrl = 'https://api.grdf.fr/adict/v2/pce' const queryParams = `date_debut=${startDate}&date_fin=${endDate}` return `${baseUrl}/${idPCE}/donnees_consos_informatives?${queryParams}` } -async function getData(token, idPCE) { +async function getData(token, idPCE, startDate, endDate) { + log('debug', `getData from ${startDate} to ${endDate}`) const url = buildGetDataUrl(idPCE, startDate, endDate) log('debug', url) const response = await fetch(url, { @@ -220,7 +347,8 @@ async function getData(token, idPCE) { * Return the list of filtered data */ async function processData(data, doctype, filterKeys) { - const formattedData = await formateData(data) + log('debug', 'Process grdf daily data') + const formattedData = await formatData(data) log('debug', 'processData - data formatted') // Remove data for existing days into the DB const filteredData = await hydrateAndFilter(formattedData, doctype, { @@ -247,7 +375,7 @@ async function storeData(data, doctype, filterKeys) { * Format data for DB storage * Remove bad data */ -async function formateData(data) { +async function formatData(data) { log('debug', 'Formatting data') return data.map(record => { let date = moment(record.date_debut_consommation, 'YYYY/MM/DD h:mm:ss') @@ -270,6 +398,7 @@ async function formateData(data) { * Aggregate data from daily data to monthly and yearly data */ async function aggregateMonthAndYearData(data) { + log('debug', 'Aggregate grdf load data for month and year') // Sum year and month values into object with year or year-month as keys if (data && data.length !== 0) { let monthData = {} diff --git a/src/onDeleteAccount.js b/src/onDeleteAccount.js index 6743d769c9cf366e06613cfc94b209fafcd2aa55..081a184f3869d36ddfda3821ee2aa026cd0089a9 100644 --- a/src/onDeleteAccount.js +++ b/src/onDeleteAccount.js @@ -1,7 +1,4 @@ -const { cozyClient, log } = require('cozy-konnector-libs') -const getAccountId = require('./helpers/getAccountId') -const getAccountRev = require('./helpers/getAccountRev') -const getAccountSecret = require('./helpers/getAccountSecret') +const { log } = require('cozy-konnector-libs') const moment = require('moment') require('moment-timezone') moment.locale('fr') // set the language @@ -9,206 +6,16 @@ moment.tz.setDefault('Europe/Paris') // set the timezone const Sentry = require('@sentry/node') // eslint-disable-next-line const Tracing = require('@sentry/tracing') -const MAX_RETRIES = 5 // Maximum number of retries -const INITIAL_BACKOFF = 1000 // Initial backoff interval in ms -async function getAccessToken(accountId, accountRev) { - log('info', `getAccessToken: ${accountId} - ${accountRev}`) - let body = await cozyClient.fetchJSON( - 'GET', - `/data/io.cozy.accounts/${accountId}?rev=${accountRev}` - ) - if (body.oauth.access_token) { - return body - } else { - throw new Error('cozyClient.fetchJson account_rev has encountered an error') - } -} - -async function fetchNewAccessToken(accountSecret) { - log( - 'info', - `fetchNewAccessToken: ${accountSecret} - ${accountSecret.client_id}` - ) - - let url = - 'https://sofit-sso-oidc.grdf.fr/openam/oauth2/realms/externeGrdf/access_token' - return fetch(url, { - method: 'POST', - headers: { - 'Content-Type': 'application/x-www-form-urlencoded' - }, - body: new URLSearchParams({ - grant_type: 'client_credentials', - client_id: `${accountSecret.client_id}`, - client_secret: `${accountSecret.client_secret}`, - scope: '/adict/v2' - }), - redirect: 'follow' - }) - .then(async response => { - if (response.status !== 200) { - throw new Error(response.status + ' - ' + response.statusText) - } - return response.text() - }) - .then(result => { - // split the result into an array of strings containing a single json object - // then check if the resulting json has an access_token field - // return it if it does or return undefined - return result.match(/.+/g).map(jsonString => { - const jsonObject = JSON.parse(jsonString) - if (jsonObject.access_token) { - return jsonObject.access_token - } - }) - }) - .catch(error => { - log('debug', 'Error from get access_token [onDeleteAccount]') - throw error - }) -} - -async function fetchDroitAccessGrdf(token, pce) { - return fetch('https://api.grdf.fr/adict/v2/droits_acces', { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - Accept: 'application/x-ndjson', - Authorization: 'Bearer ' + token - }, - body: JSON.stringify({ - role_tiers: ['AUTORISE_CONTRAT_FOURNITURE'], - etat_droit_acces: ['Active'], - id_pce: [pce] - }), - redirect: 'follow' - }) - .then(async response => { - if (response.status !== 200) { - throw new Error(response.status + ' - ' + response.statusText) - } - return response.text() - }) - .then(response => { - // Split the response into an array of strings, each containing a single JSON object. - // Check if each JSON object has an "id_droit_acces" field. - // Return an array of "id_droit_acces" values, or undefined if the field is missing. - return response.match(/.+/g).map(jsonString => { - const jsonObject = JSON.parse(jsonString) - if (jsonObject.id_droit_acces !== null) { - return jsonObject.id_droit_acces - } - }) - }) - .catch(error => { - log('debug', 'Error from get droits_access') - throw error - }) -} - -async function deleteUserConsent(token, access) { - let url = 'https://api.grdf.fr/adict/v2/droit_acces/' + access - try { - const response = await fetch(url, { - method: 'PATCH', - headers: { - 'Cache-Control': 'no-cache', - 'Content-Type': 'application/json', - Authorization: 'Bearer ' + token - }, - body: JSON.stringify({}), - redirect: 'follow' - }) - if (response.status !== 200) { - throw new Error(response.status + ' - ' + response.statusText) - } - log('debug', 'Active consent was successfully removed') - return true - } catch (error) { - log('debug', 'Error from delete droits_access') - throw error - } -} - -async function onDeleteAccount(accountId) { - let retries = 0 - let backoff = INITIAL_BACKOFF - let accountDeleted = false +async function onDeleteAccount() { log('info', 'Deleting account ...') - while (retries < MAX_RETRIES && !accountDeleted) { - try { - const accountRev = getAccountRev() - if (!accountRev) { - throw new Error( - 'No account revision was found, something went wrong during the deletion of said account' - ) - } - - const oauthAccount = await getAccessToken(accountId, accountRev) - let fetchedNewAccessToken = oauthAccount.oauth.access_token - - if (moment().diff(oauthAccount.oauth.expires_at) <= 0) { - log('info', 'Token still valid, no need to fetch a new one') - } else { - log('info', 'expired token, need a new one') - // token is expired, need a new one. - // we request a new one from a client_credentials query - // with credentials secrets from account-type - const accountSecret = getAccountSecret() - if (!accountSecret) { - throw new Error( - 'Access Token is expired and konnector failed to get a new one' - ) - } - fetchedNewAccessToken = await fetchNewAccessToken(accountSecret) - } - - let accessRights = await fetchDroitAccessGrdf( - fetchedNewAccessToken, - oauthAccount.oauth_callback_results.pce - ) - - // remove unwanted commas - accessRights = accessRights.toString().replace(/,\s*$/, '') - - if (!accessRights) { - log('debug', 'No active consent') - throw new Error('No active access right was found for given user') - } - - accountDeleted = await deleteUserConsent( - fetchedNewAccessToken, - accessRights - ) - } catch (error) { - // If the API call fails, log the error and retry with an increased backoff interval - log( - 'debug', - `Error deleting account: ${error.message}. Retrying in ${backoff}ms` - ) - await new Promise(resolve => setTimeout(resolve, backoff)) - retries++ - backoff *= 2 - } - } - // if the account was not deleted after maximum retries, throw an error - if (!accountDeleted) { - Sentry.captureMessage( - `GRDF - Failed to delete account after ${MAX_RETRIES} attempts` - ) - await Sentry.flush() - throw new Error(`Failed to delete account after ${MAX_RETRIES} attempts`) - } + log('info', 'No action needed to delete GRDF consent') + log('info', 'No action needed for backoffice') } -const accountId = getAccountId() -onDeleteAccount(accountId).then( +onDeleteAccount().then( () => { - log( - 'info', - `onDeleteAccount GRDF: Successfully delete consent and account.` - ) + log('info', `onDeleteAccount GRDF: Successful`) }, err => { const errorMessage = `onDeleteAccount GRDF: An error occurred during script: ${err.message}` diff --git a/src/requests/bo.js b/src/requests/bo.js new file mode 100644 index 0000000000000000000000000000000000000000..1b166b23172a7b4bef5399a520e2a44a21db77ae --- /dev/null +++ b/src/requests/bo.js @@ -0,0 +1,97 @@ +// @ts-check +const { log, errors } = require('cozy-konnector-libs') +const { default: axios } = require('axios') +const Sentry = require('@sentry/node') + +/** + * @param {{ + * boBaseUrl: string, + * boToken: string, + * pce: string, + * firstname: string, + * lastname: string, + * postalCode: string, + * endDate: moment.Moment}} args + */ +async function createBoConsent({ + boBaseUrl, + boToken, + pce, + lastname, + firstname, + postalCode, + endDate +}) { + log('info', `Query createBoConsent`) + const headers = { + headers: { + Authorization: `Bearer ${boToken}` + } + } + + try { + const { data } = await axios.post( + `${boBaseUrl}/consent`, + { + lastname, + firstname, + pce, + postalCode, + endDate: endDate.toISOString() + }, + headers + ) + return data + } catch (err) { + const errorMessage = 'Error while creating BO consent : ' + err.message + log('error', errorMessage) + Sentry.captureException(errorMessage, { + tags: { + section: 'createBoConsent' + }, + extra: { + pce + } + }) + throw new Error(errors.MAINTENANCE) + } +} + +/** + * @param {Object} args description + * @param {string} args.boBaseUrl url + * @param {string} args.boToken bo token + * @param {string} args.consentId ID from back office + */ +async function deleteBoConsent({ boBaseUrl, boToken, consentId }) { + log('info', `Query deleteBoConsent ${consentId}`) + const headers = { + headers: { + Authorization: `Bearer ${boToken}` + } + } + try { + const { data } = await axios.delete( + `${boBaseUrl}/consent/${consentId}`, + headers + ) + return data + } catch (err) { + const errorMessage = 'Error while deleting BO consent : ' + err.message + log('error', errorMessage) + Sentry.captureException(errorMessage, { + tags: { + section: 'deleteBoConsent' + }, + extra: { + consentId: consentId + } + }) + throw new Error(errors.MAINTENANCE) + } +} + +module.exports = { + createBoConsent, + deleteBoConsent +} diff --git a/src/requests/cozy.js b/src/requests/cozy.js new file mode 100644 index 0000000000000000000000000000000000000000..96b9091e3ffc7967d610bb818fcb26e6c1fe6e5a --- /dev/null +++ b/src/requests/cozy.js @@ -0,0 +1,48 @@ +const { log, updateOrCreate } = require('cozy-konnector-libs') +const { isLocal } = require('../helpers/env') +const cozyClient = require('cozy-konnector-libs/dist/libs/cozyclient') + +/** + * Return account + * @param {string} accountId + * @returns {Promise<Account>} + */ +async function getAccount(accountId) { + log('info', `getAccount: ${accountId}`) + const accounts = await cozyClient.data.findAll('io.cozy.accounts') + log('info', `getAccount data: ${JSON.stringify(accounts)}`) + return accounts.filter(account => + isLocal() ? account._id === accountId : account.account_type === accountId + )[0] +} + +async function saveAccountData(accountId, accountData) { + log('info', `saveAccountData: ${accountId}`) + + let account = await getAccount(accountId) + log('info', `saveAccountData account: ${JSON.stringify(account)}`) + log( + 'info', + `saveAccountData account: ${JSON.stringify({ + ...account, + data: accountData + })}` + ) + + log( + 'info', + `saveAccountData account after id: ${JSON.stringify({ + ...account, + data: accountData + })}` + ) + account = await updateOrCreate( + [{ ...account, data: accountData }], + 'io.cozy.accounts', + ['account_type'] + ) + log('info', `saveAccountData account reply: ${JSON.stringify(account)}`) + return account +} + +module.exports = { getAccount, saveAccountData } diff --git a/src/requests/grdf.js b/src/requests/grdf.js new file mode 100644 index 0000000000000000000000000000000000000000..a1e822780a7f8a341e9da8ce15bad1ec4effd967 --- /dev/null +++ b/src/requests/grdf.js @@ -0,0 +1,124 @@ +// @ts-check +const { default: Axios } = require('axios') +const { errors, log } = require('cozy-konnector-libs') +const qs = require('qs') + +/** + * + * @param {string} client_id + * @param {string} client_secret + * @returns {Promise<{ access_token: string, scope: string, token_type: string, expires_in: number }>} + */ +async function getAuthToken(client_id, client_secret) { + log('info', 'getAuthToken') + const body = { + scope: '/adict/v2', + grant_type: 'client_credentials', + client_id: client_id, + client_secret: client_secret + } + try { + const response = await Axios({ + method: 'POST', + url: + 'https://sofit-sso-oidc.grdf.fr/openam/oauth2/realms/externeGrdf/access_token', + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + data: qs.stringify(body) + }) + + return response.data + } catch (error) { + log('error', 'Error inside getAuthToken', error) + throw errors.VENDOR_DOWN + } +} + +/** + * Parse raw objects from GRDF response to JSON format + * @note last entry appears to always be the status operation : + * - "code_statut_traitement": "0000000000", + * - "message_retour_traitement": "L'opération s'est déroulée avec succès." + */ +function parseResponse(rawData) { + const jsonArray = rawData.trim().replace(/\n/g, ',') + return JSON.parse(`[${jsonArray}]`) +} + +/** + * + * @param {string} bearerToken + * @param {string} pce + * @returns {Promise<GRDFConsent[]>} + */ +async function getConsents(bearerToken, pce) { + try { + const response = await Axios({ + url: 'https://api.grdf.fr/adict/v2/droits_acces', + method: 'POST', + headers: { Authorization: `Bearer ${bearerToken}` }, + data: { + // etat_droit_acces: [ + // 'Active', + // 'A valider', + // 'Révoquée', + // 'A revérifier', + // 'Obsolète', + // 'Refusée' = "Pas de validation dans les 3 jours" + // ], + id_pce: [pce] + } + }) + const consents = parseResponse(response.data) + log('info', `Found ${consents.length - 1} consents for pce`) + const etatDroitsAcces = consents.map(consent => consent.etat_droit_acces) + log('info', `Droits d'accès des consentements trouvés: ${etatDroitsAcces}`) + return consents + } catch (error) { + log('error', 'Error while getting consent') + log('error', error) + throw errors.VENDOR_DOWN + } +} + +async function createGRDFConsent({ + bearerToken, + pce, + email, + lastname, + postalCode, + startDate, + endDate +}) { + try { + log('info', `Creating GRDF consent from ${startDate} to ${endDate}`) + const response = await Axios({ + method: 'PUT', + url: `https://api.grdf.fr/adict/v2/pce/${pce}/droit_acces`, + headers: { Authorization: `Bearer ${bearerToken}` }, + data: { + role_tiers: 'AUTORISE_CONTRAT_FOURNITURE', + raison_sociale: '', + nom_titulaire: lastname, + code_postal: postalCode, + courriel_titulaire: email, + // numero_telephone_mobile_titulaire: '', + date_debut_droit_acces: startDate, + perim_donnees_conso_debut: startDate, + date_fin_droit_acces: endDate, + perim_donnees_conso_fin: endDate, + perim_donnees_contractuelles: 'Vrai', + perim_donnees_techniques: 'Vrai', + perim_donnees_informatives: 'Vrai', + perim_donnees_publiees: 'Vrai' + } + }) + log('info', response.data.message_retour_traitement) + return true + } catch (error) { + log('error', `Failed to create GRDF consent`) + log('error', error.response.data) + throw errors.USER_ACTION_NEEDED_CGU_FORM + } +} + +module.exports = { createGRDFConsent, getAuthToken, getConsents } diff --git a/src/types.js b/src/types.js new file mode 100644 index 0000000000000000000000000000000000000000..3946dd96df9e1e41d8b31ce4399a711081f730af --- /dev/null +++ b/src/types.js @@ -0,0 +1,64 @@ +/** + * Cozy Fields definition + * @typedef {object} fields + * @property {string} pce + * @property {string} email + * @property {string} lastname + * @property {string} firstname + * @property {string} postalCode + */ + +/** + * Cozy parameters definition + * @typedef {object} parameters + * @property {string} boBaseUrl + * @property {string} boToken + * @property {string} client_id + * @property {string} client_secret + */ + +/** + * Account definition + * @typedef {object} Account + * @property {AccountData} data + * @property {object} auth + * @property {object} cozyMetadata + */ + +/** + * AccountData definition + * @typedef {object} AccountData + * @property {string | undefined} consentId + */ + +/** + * GRDF Consents + * @typedef {Object} GRDFConsent + * @property {string} id_droit_acces + * @property {string} id_pce + * @property {string} role_tiers + * @property {string} raison_sociale_du_tiers + * @property {string} nom_titulaire + * @property {string} courriel_titulaire + * @property {string} code_postal + * @property {boolean} perim_donnees_contractuelles + * @property {boolean} perim_donnees_techniques + * @property {boolean} perim_donnees_informatives + * @property {boolean} perim_donnees_publiees + * @property {string} date_creation + * @property {string} etat_droit_acces + * @property {string|null} date_revocation + * @property {string|null} source_revocation + * @property {string|null} date_passage_a_obsolete + * @property {string|null} source_passage_a_obsolete + * @property {string|null} date_passage_a_refuse + * @property {string} date_debut_droit_acces + * @property {string} date_fin_droit_acces + * @property {string} perim_donnees_conso_debut + * @property {string} perim_donnees_conso_fin + * @property {string|null} source_passage_a_refuse + * @property {string} parcours + * @property {string|null} statut_controle_preuve + * @property {string|null} date_limite_transmission_preuve + * @property {string|null} numero_telephone_mobile_titulaire + */ diff --git a/yarn.lock b/yarn.lock index 7c1877ea5caf5235a4e1d11d9b3ebd2008787592..ce0077bfe4a94c97ace2cc8bc318987b9c5a9bee 100755 --- a/yarn.lock +++ b/yarn.lock @@ -318,6 +318,13 @@ dependencies: regenerator-runtime "^0.13.2" +"@babel/runtime@^7.21.0": + version "7.24.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" + integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/runtime@^7.5.5": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" @@ -873,6 +880,11 @@ resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.1.1.tgz#f0d92c12f87079ddfd1b29f614758b9696bc29e3" integrity sha512-XO6INPbZCxdprl+9qa/AAbFFOMzzwqYxpjPgLICrMD6C2FCw6qfJOPcBk6JqqPLSaZ/Qx87qn4rpPmPMwaAK6w== +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + "@types/babel__core@^7.1.14": version "7.20.0" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" @@ -1354,6 +1366,14 @@ argsarray@0.0.1: resolved "https://registry.yarnpkg.com/argsarray/-/argsarray-0.0.1.tgz#6e7207b4ecdb39b0af88303fa5ae22bda8df61cb" integrity sha1-bnIHtOzbObCviDA/pa4ivajfYcs= +array-buffer-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" + integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== + dependencies: + call-bind "^1.0.5" + is-array-buffer "^3.0.4" + array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -1378,6 +1398,32 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== +array.prototype.foreach@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/array.prototype.foreach/-/array.prototype.foreach-1.0.6.tgz#e0d1d686b286d3b51de53eab673472b1cdb61847" + integrity sha512-2PdrSneJlGvDEoDuHEyPCSwmMpcaBWGby4XTEcX5SmbATLrI9qFrnzcowfR05YLcl80j9qFG5d7g1dFCIuNxOA== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.1.0" + is-string "^1.0.7" + +arraybuffer.prototype.slice@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" + integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.5" + define-properties "^1.2.1" + es-abstract "^1.22.3" + es-errors "^1.2.1" + get-intrinsic "^1.2.3" + is-array-buffer "^3.0.4" + is-shared-array-buffer "^1.0.2" + arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -1415,6 +1461,13 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= +available-typed-arrays@^1.0.6, available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" @@ -1672,6 +1725,26 @@ cacache@^15.0.5: tar "^6.0.2" unique-filename "^1.1.1" +call-bind@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -1751,6 +1824,18 @@ charenc@0.0.2: resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" integrity sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc= +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + cheerio@1.0.0-rc.3, cheerio@^1.0.0-rc.3: version "1.0.0-rc.3" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6" @@ -1763,6 +1848,19 @@ cheerio@1.0.0-rc.3, cheerio@^1.0.0-rc.3: lodash "^4.15.0" parse5 "^3.0.1" +cheerio@^1.0.0-rc.9: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -2278,6 +2376,16 @@ cozy-client-js@^0.17.3: pouchdb-browser "7.0.0" pouchdb-find "7.0.0" +cozy-client-js@^0.20.0: + version "0.20.0" + resolved "https://registry.yarnpkg.com/cozy-client-js/-/cozy-client-js-0.20.0.tgz#a507ef9ccbeb340aacd58ca1f1d0cdc9d000e853" + integrity sha512-ppguq9hkmtGpS2y+3pE4Pw0CcNOB25Lb82/q0I5r2k+pxCgrbI+6HB85TWQH8OEt/qJVoCCCa9dWE5WSZBUDYw== + dependencies: + core-js "^3.6.5" + cross-fetch "^3.0.6" + pouchdb-browser "7.0.0" + pouchdb-find "7.0.0" + cozy-client@13.15.0: version "13.15.0" resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-13.15.0.tgz#866936300e0daf77863e036b9b75300c16a2b679" @@ -2348,6 +2456,30 @@ cozy-client@^13.13.0: sift "^6.0.0" url-search-params-polyfill "^7.0.0" +cozy-client@^33.2.0: + version "33.4.0" + resolved "https://registry.yarnpkg.com/cozy-client/-/cozy-client-33.4.0.tgz#39e713656b3ce847dd453714564b665523001d09" + integrity sha512-2e8hg9pOHnmScpIyeHM4TjZ45hW/uTV+CCO7lS9LN1AsGsEdNdKjD+d4fvLYIX1zUcaqRDhFNUYzCCdz1t5Mag== + dependencies: + "@cozy/minilog" "1.0.0" + "@types/jest" "^26.0.20" + "@types/lodash" "^4.14.170" + btoa "^1.2.1" + cozy-stack-client "^33.4.0" + json-stable-stringify "^1.0.1" + lodash "^4.17.13" + microee "^0.0.6" + node-fetch "^2.6.1" + node-polyglot "2.4.2" + open "7.4.2" + prop-types "^15.6.2" + react-redux "^7.2.0" + redux "3 || 4" + redux-thunk "^2.3.0" + server-destroy "^1.0.1" + sift "^6.0.0" + url-search-params-polyfill "^8.0.0" + cozy-device-helper@^1.12.0: version "1.17.0" resolved "https://registry.yarnpkg.com/cozy-device-helper/-/cozy-device-helper-1.17.0.tgz#fbce9737ea83c67969b2b173163b37299a36283c" @@ -2362,6 +2494,13 @@ cozy-device-helper@^1.7.3: dependencies: lodash "4.17.19" +cozy-device-helper@^2.1.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/cozy-device-helper/-/cozy-device-helper-2.7.0.tgz#573749997f18e5a1f11f720faec8c9bf2406beeb" + integrity sha512-jMzW7s4IDuMivbsP8fo1IWW1z5l0wJ0u440E0fQmdsi+Zm/L9GXFKthLuuceYqXlH6c/APUCfpozJqjFMMHU1A== + dependencies: + lodash "^4.17.19" + cozy-doctypes@^1.73.0: version "1.74.6" resolved "https://registry.yarnpkg.com/cozy-doctypes/-/cozy-doctypes-1.74.6.tgz#e4bcfd5d570dddd74af84b15e3b39aeceb3e9671" @@ -2374,6 +2513,17 @@ cozy-doctypes@^1.73.0: lodash "4.17.19" prop-types "^15.7.2" +cozy-doctypes@^1.83.8: + version "1.89.4" + resolved "https://registry.yarnpkg.com/cozy-doctypes/-/cozy-doctypes-1.89.4.tgz#3d9d2c796bf666293cb7702593cb9961a5fe7018" + integrity sha512-TEbM0FRY3uFoL+vez5eFB/RDXlJ6zEf4o6Wi/P85kCJnBOUtSTl767bjjmFZ/x764vBfkn3VaLE1ct5qkyLkcQ== + dependencies: + cozy-logger "^1.10.4" + date-fns "^1.30.1" + es6-promise-pool "^2.5.0" + lodash "^4.17.19" + prop-types "^15.7.2" + cozy-flags@2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/cozy-flags/-/cozy-flags-2.7.1.tgz#f37251fee248ef9bef079a22bc52954f1a892dfc" @@ -2381,6 +2531,13 @@ cozy-flags@2.7.1: dependencies: microee "^0.0.6" +cozy-flags@^2.8.7: + version "2.12.0" + resolved "https://registry.yarnpkg.com/cozy-flags/-/cozy-flags-2.12.0.tgz#bc3d689db9c91389c28f053223142d4684573ef1" + integrity sha512-s0et8aWChaqY4rMKkNKDACflU2h5s6s9UVU1guU3Il9GqktSPrhvMo+ntHLnQb2l+yLL6xV1S6/rK0qniR1q0A== + dependencies: + microee "^0.0.6" + cozy-jobs-cli@1.13.6: version "1.13.6" resolved "https://registry.yarnpkg.com/cozy-jobs-cli/-/cozy-jobs-cli-1.13.6.tgz#04f0e28d260da51ee02fccce1da6f9353a446f46" @@ -2400,7 +2557,38 @@ cozy-jobs-cli@1.13.6: pretty "2.0.0" strip-json-comments "3.1.1" -cozy-konnector-libs@4.34.5, cozy-konnector-libs@^4.34.5: +cozy-konnector-libs@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cozy-konnector-libs/-/cozy-konnector-libs-5.0.0.tgz#7cab68bda9431e5f5abb5186a7384e9cb6740905" + integrity sha512-wxVR9MH+UUx81osQGet1m/o6rOP98S4u0xMomWDASw8xlvvj8D1zp18M7F+zxKhZAb9L8Y+4D54vD5HQhgyoOw== + dependencies: + babel-runtime "^6.26.0" + bluebird "^3.7.2" + bluebird-retry "^0.11.0" + btoa "1.2.1" + cheerio "^1.0.0-rc.9" + classificator "^0.3.3" + cozy-client "^33.2.0" + cozy-client-js "^0.20.0" + cozy-device-helper "^2.1.0" + cozy-doctypes "^1.83.8" + cozy-flags "^2.8.7" + cozy-logger "^1.8.0" + date-fns "^2.22.1" + file-type "^16.5.0" + geco "git+https://github.com/konnectors/geco.git#0.11.2" + lodash-id "^0.14.0" + lowdb "^1.0.0" + mime-types "^2.1.31" + node-fetch "^2.6.1" + raven "^2.6.4" + raw-body "^2.4.1" + request "^2.88.2" + request-debug "^0.2.0" + request-promise "^4.2.6" + strip-json-comments "^3.1.1" + +cozy-konnector-libs@^4.34.5: version "4.34.5" resolved "https://registry.yarnpkg.com/cozy-konnector-libs/-/cozy-konnector-libs-4.34.5.tgz#6d2b2a02623a54bd916cc6aade25402c60d895c5" integrity sha512-IggQ7203RtLvu2fTvp21+du9Soo1LytGLXSP5K1xLqVagaeJ2NTYaMJx2mtJmu+vOaZOelCovYMprz0ZHwNEhw== @@ -2436,6 +2624,14 @@ cozy-logger@1.6.0, cozy-logger@^1.6.0: chalk "^2.4.2" json-stringify-safe "5.0.1" +cozy-logger@^1.10.4, cozy-logger@^1.8.0: + version "1.10.4" + resolved "https://registry.yarnpkg.com/cozy-logger/-/cozy-logger-1.10.4.tgz#8a55a0b1fc23db9cf90524043d959c274d376c24" + integrity sha512-zDpG+edSqghx6HAIh6wIWmqQ49IX85anv+Y4P5pjHs4w697n5yI13UzhW7NczhFlflVF9ibxeKXqBNYvb4DW+Q== + dependencies: + chalk "^2.4.2" + json-stringify-safe "5.0.1" + cozy-stack-client@^13.12.1, cozy-stack-client@^13.20.2: version "13.20.2" resolved "https://registry.yarnpkg.com/cozy-stack-client/-/cozy-stack-client-13.20.2.tgz#2ff55f93dca809b7ec82ec0afc88a3bc041383c1" @@ -2455,6 +2651,22 @@ cozy-stack-client@^23.19.0: mime "^2.4.0" qs "^6.7.0" +cozy-stack-client@^33.4.0: + version "33.4.0" + resolved "https://registry.yarnpkg.com/cozy-stack-client/-/cozy-stack-client-33.4.0.tgz#c0c7ce7f2d65987b10bc8b4a615a3de0eedcf8d4" + integrity sha512-DaCwOdNT+aZJL+BZH04iUe0709O5Pi6qTagRlM+hp7oKwXiJvU3lwYIFE1McGss4rdhlWhIXB107ZFSC1+eagw== + dependencies: + detect-node "^2.0.4" + mime "^2.4.0" + qs "^6.7.0" + +cross-fetch@^3.0.6: + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== + dependencies: + node-fetch "^2.6.12" + cross-spawn@6.0.5, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2495,6 +2707,17 @@ css-select@^2.0.0: domutils "^1.7.0" nth-check "^1.0.2" +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -2531,6 +2754,11 @@ css-what@^3.2.1: resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.3.0.tgz#10fec696a9ece2e591ac772d759aacabac38cd39" integrity sha512-pv9JPyatiPaQ6pf4OvD/dbfm0o5LviWmwxNWzblYf/1u9QZd0ihV+PMwy5jdQWQ3349kZmKEx9WXuSka2dM4cg== +css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + csso@^4.0.2: version "4.0.3" resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" @@ -2555,7 +2783,7 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -date-fns@1.30.1: +date-fns@1.30.1, date-fns@^1.30.1: version "1.30.1" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== @@ -2565,6 +2793,13 @@ date-fns@^2.14.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== +date-fns@^2.22.1: + version "2.30.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.30.0.tgz#f367e644839ff57894ec6ac480de40cae4b0f4d0" + integrity sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw== + dependencies: + "@babel/runtime" "^7.21.0" + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -2629,6 +2864,24 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.0.tgz#65491893ec47756d44719ae520e0e2609233b59b" integrity sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og== +define-data-property@^1.0.1, define-data-property@^1.1.2, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + define-properties@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" @@ -2636,6 +2889,15 @@ define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-properties@^1.2.0, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2710,6 +2972,15 @@ dom-serializer@0: domelementtype "^2.0.1" entities "^2.0.0" +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + dom-serializer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" @@ -2728,6 +2999,11 @@ domelementtype@^2.0.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.2.tgz#f3b6e549201e46f588b59463dd77187131fe6971" integrity sha512-wFwTwCVebUrMgGeAwRL/NhZtHAUyT9n9yg4IMDwf10+6iCMxSkVq9MGCVEH+QZWo1nNidy8kNvwmv4zWHDTqvA== +domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + domhandler@^2.3.0: version "2.4.2" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" @@ -2735,6 +3011,13 @@ domhandler@^2.3.0: dependencies: domelementtype "1" +domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" @@ -2751,6 +3034,15 @@ domutils@^1.5.1, domutils@^1.7.0: dom-serializer "0" domelementtype "1" +domutils@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + dot-prop@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" @@ -2856,6 +3148,11 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.3.tgz#5c487e5742ab93c15abb5da22759b8590ec03b7f" integrity sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ== +entities@^4.2.0, entities@^4.4.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== + envinfo@^7.7.3: version "7.10.0" resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.10.0.tgz#55146e3909cc5fe63c22da63fb15b05aeac35b13" @@ -2903,11 +3200,84 @@ es-abstract@^1.18.0-next.0: string.prototype.trimend "^1.0.1" string.prototype.trimstart "^1.0.1" +es-abstract@^1.22.1, es-abstract@^1.22.3: + version "1.22.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.5.tgz#1417df4e97cc55f09bf7e58d1e614bc61cb8df46" + integrity sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w== + dependencies: + array-buffer-byte-length "^1.0.1" + arraybuffer.prototype.slice "^1.0.3" + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + es-define-property "^1.0.0" + es-errors "^1.3.0" + es-set-tostringtag "^2.0.3" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.6" + get-intrinsic "^1.2.4" + get-symbol-description "^1.0.2" + globalthis "^1.0.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + has-proto "^1.0.3" + has-symbols "^1.0.3" + hasown "^2.0.1" + internal-slot "^1.0.7" + is-array-buffer "^3.0.4" + is-callable "^1.2.7" + is-negative-zero "^2.0.3" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.3" + is-string "^1.0.7" + is-typed-array "^1.1.13" + is-weakref "^1.0.2" + object-inspect "^1.13.1" + object-keys "^1.1.1" + object.assign "^4.1.5" + regexp.prototype.flags "^1.5.2" + safe-array-concat "^1.1.0" + safe-regex-test "^1.0.3" + string.prototype.trim "^1.2.8" + string.prototype.trimend "^1.0.7" + string.prototype.trimstart "^1.0.7" + typed-array-buffer "^1.0.2" + typed-array-byte-length "^1.0.1" + typed-array-byte-offset "^1.0.2" + typed-array-length "^1.0.5" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.14" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-set-tostringtag@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" + integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== + dependencies: + get-intrinsic "^1.2.4" + has-tostringtag "^1.0.2" + hasown "^2.0.1" + es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" @@ -2922,10 +3292,10 @@ es6-denodeify@^0.1.1: resolved "https://registry.yarnpkg.com/es6-denodeify/-/es6-denodeify-0.1.5.tgz#31d4d5fe9c5503e125460439310e16a2a3f39c1f" integrity sha1-MdTV/pxVA+ElRgQ5MQ4WoqPznB8= -es6-promise-pool@2.5.0: +es6-promise-pool@2.5.0, es6-promise-pool@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/es6-promise-pool/-/es6-promise-pool-2.5.0.tgz#147c612b36b47f105027f9d2bf54a598a99d9ccb" - integrity sha1-FHxhKza0fxBQJ/nSv1SlmKmdnMs= + integrity sha512-VHErXfzR/6r/+yyzPKeBvO0lgjfC5cbDCQWjWwMZWSb6YU39TGIl51OUmCfWCq4ylMdJSB8zkz2vIuIeIxXApA== escalade@^3.1.1: version "3.1.1" @@ -3335,6 +3705,15 @@ file-type@^14.6.2: token-types "^2.0.0" typedarray-to-buffer "^3.1.5" +file-type@^16.5.0: + version "16.5.4" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-16.5.4.tgz#474fb4f704bee427681f98dd390058a172a6c2fd" + integrity sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw== + dependencies: + readable-web-to-node-stream "^3.0.0" + strtok3 "^6.2.4" + token-types "^4.1.1" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3425,6 +3804,13 @@ follow-redirects@^1.10.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -3496,11 +3882,31 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" + integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + functions-have-names "^1.2.3" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + geco@^0.11.1: version "0.11.1" resolved "https://registry.yarnpkg.com/geco/-/geco-0.11.1.tgz#2dec107202a37bbfbb480892446a94a6ffc41411" @@ -3508,6 +3914,12 @@ geco@^0.11.1: dependencies: toni ">=0.6.2" +"geco@git+https://github.com/konnectors/geco.git#0.11.2": + version "0.11.2" + resolved "git+https://github.com/konnectors/geco.git#fe0da3cdaabd5714a226014efd61c89bc85e7c56" + dependencies: + toni "git+https://github.com/konnectors/toni.git#0.6.3" + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -3518,6 +3930,27 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + get-package-type@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" @@ -3543,6 +3976,15 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-symbol-description@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" + integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== + dependencies: + call-bind "^1.0.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -3621,6 +4063,13 @@ globals@^11.1.0, globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + globby@^11.0.1: version "11.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-11.0.1.tgz#9a2bf107a068f3ffeabc49ad702c79ede8cfd357" @@ -3633,6 +4082,13 @@ globby@^11.0.1: merge2 "^1.3.0" slash "^3.0.0" +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + graceful-fs@^4.1.2, graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0: version "4.2.4" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" @@ -3678,6 +4134,11 @@ hard-rejection@^2.1.0: resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -3688,11 +4149,47 @@ has-flag@^4.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-property-descriptors@^1.0.1, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-proto@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + has-symbols@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0, has-tostringtag@^1.0.1, has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -3700,6 +4197,20 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +hasown@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.1.tgz#26f48f039de2c0f8d3356c223fb8d50253519faa" + integrity sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA== + dependencies: + function-bind "^1.1.2" + highlight.js@^9.6.0: version "9.18.3" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.3.tgz#a1a0a2028d5e3149e2380f8a865ee8516703d634" @@ -3741,6 +4252,16 @@ htmlparser2@^3.9.1: inherits "^2.0.1" readable-stream "^3.1.1" +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + http-errors@1.7.2: version "1.7.2" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" @@ -3832,6 +4353,11 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" @@ -3925,6 +4451,15 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" +internal-slot@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" + integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.0" + side-channel "^1.0.4" + interpret@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/interpret/-/interpret-3.1.1.tgz#5be0ceed67ca79c6c4bc5cf0d7ee843dcea110c4" @@ -3940,16 +4475,44 @@ is-absolute-url@^3.0.0: resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz#96c6a22b6a23929b11ea0afb1836c36ad4a5d698" integrity sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q== +is-array-buffer@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" + integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.1" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-buffer@^1.1.5, is-buffer@~1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== +is-callable@^1.1.3, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-callable@^1.1.4, is-callable@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" @@ -4009,6 +4572,18 @@ is-negative-zero@^2.0.0: resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.0.tgz#9553b121b0fac28869da9ed459e20c7543788461" integrity sha1-lVOxIbD6wohp2p7UWeIMdUN4hGE= +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -4043,6 +4618,21 @@ is-regex@^1.1.0, is-regex@^1.1.1: dependencies: has-symbols "^1.0.1" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" + integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== + dependencies: + call-bind "^1.0.7" + is-stream@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -4058,6 +4648,13 @@ is-string@^1.0.5: resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + is-symbol@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" @@ -4065,6 +4662,13 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.1" +is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + is-text-path@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" @@ -4072,11 +4676,25 @@ is-text-path@^1.0.1: dependencies: text-extensions "^1.0.0" +is-typed-array@^1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" + integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== + dependencies: + which-typed-array "^1.1.14" + is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + is-whitespace@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/is-whitespace/-/is-whitespace-0.3.0.tgz#1639ecb1be036aec69a54cbb401cfbed7114ab7f" @@ -4089,6 +4707,11 @@ is-wsl@^2.1.1: dependencies: is-docker "^2.0.0" +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4856,7 +5479,7 @@ lodash@^4.17.15: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -5012,6 +5635,11 @@ mime-db@1.44.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" @@ -5019,6 +5647,13 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@~2.1.19, mime-types@~2.1.24: dependencies: mime-db "1.44.0" +mime-types@^2.1.31: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -5261,11 +5896,29 @@ node-fetch@^2.6.1: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.6.12: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== +node-polyglot@2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/node-polyglot/-/node-polyglot-2.4.2.tgz#e4876e6710b70dc00b1351a9a68de4af47a5d61d" + integrity sha512-AgTVpQ32BQ5XPI+tFHJ9bCYxWwSLvtmEodX8ooftFhEuyCgBG6ijWulIVb7pH3THigtgvc9uLiPn0IO51KHpkg== + dependencies: + array.prototype.foreach "^1.0.0" + has "^1.0.3" + object.entries "^1.1.4" + string.prototype.trim "^1.2.4" + warning "^4.0.3" + node-releases@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" @@ -5322,6 +5975,13 @@ nth-check@^1.0.2, nth-check@~1.0.1: dependencies: boolbase "~1.0.0" +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + oauth-sign@~0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" @@ -5332,6 +5992,11 @@ object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= +object-inspect@^1.13.1, object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + object-inspect@^1.7.0, object-inspect@^1.8.0: version "1.8.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.8.0.tgz#df807e5ecf53a609cc6bfe93eac3cc7be5b3a9d0" @@ -5352,6 +6017,16 @@ object.assign@^4.1.0: has-symbols "^1.0.1" object-keys "^1.1.1" +object.assign@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" + integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== + dependencies: + call-bind "^1.0.5" + define-properties "^1.2.1" + has-symbols "^1.0.3" + object-keys "^1.1.1" + object.entries@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" @@ -5361,6 +6036,15 @@ object.entries@^1.1.0: es-abstract "^1.17.5" has "^1.0.3" +object.entries@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.7.tgz#2b47760e2a2e3a752f39dd874655c61a7f03c131" + integrity sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + object.fromentries@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" @@ -5430,6 +6114,14 @@ open@7.0.4: is-docker "^2.0.0" is-wsl "^2.1.1" +open@7.4.2: + version "7.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" + integrity sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + open@^7.0.2: version "7.2.1" resolved "https://registry.yarnpkg.com/open/-/open-7.2.1.tgz#07b0ade11a43f2a8ce718480bdf3d7563a095195" @@ -5575,6 +6267,14 @@ parse5-htmlparser2-tree-adapter@^5.1.1: dependencies: parse5 "^5.1.1" +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + parse5@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" @@ -5587,6 +6287,13 @@ parse5@^5.1.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" integrity sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug== +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" @@ -5654,6 +6361,11 @@ peek-readable@^3.1.0: resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-3.1.0.tgz#250b08b7de09db8573d7fd8ea475215bbff14348" integrity sha512-KGuODSTV6hcgdZvDrIDBUkN0utcAVj1LL7FfGbM0viKTtCHmtZcuEJ+lGqsp0fTFkGqesdtemV2yUSMeyy3ddA== +peek-readable@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-4.1.0.tgz#4ece1111bf5c2ad8867c314c81356847e8a62e72" + integrity sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg== + performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -5713,6 +6425,11 @@ please-upgrade-node@^3.2.0: dependencies: semver-compare "^1.0.0" +possible-typed-array-names@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" + integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + pouchdb-abstract-mapreduce@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/pouchdb-abstract-mapreduce/-/pouchdb-abstract-mapreduce-7.0.0.tgz#946d79073c9795ca03c9b5c318a64372422e8740" @@ -5962,6 +6679,13 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@^6.11.2: + version "6.11.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" + integrity sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA== + dependencies: + side-channel "^1.0.4" + qs@^6.7.0: version "6.9.4" resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.4.tgz#9090b290d1f91728d3c22e54843ca44aea5ab687" @@ -6103,6 +6827,15 @@ readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.0.2, readable-stre string_decoder "^1.1.1" util-deprecate "^1.0.1" +readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" @@ -6121,6 +6854,13 @@ readable-web-to-node-stream@^2.0.0: resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-2.0.0.tgz#751e632f466552ac0d5c440cc01470352f93c4b7" integrity sha512-+oZJurc4hXpaaqsN68GoZGQAQIA3qr09Or4fqEsargABnbe5Aau8hFn6ISVleT3cpY/0n/8drn7huyyEvTbghA== +readable-web-to-node-stream@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz#5d52bb5df7b54861fd48d015e93a2cb87b3ee0bb" + integrity sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw== + dependencies: + readable-stream "^3.6.0" + rechoir@^0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.8.0.tgz#49f866e0d32146142da3ad8f0eff352b3215ff22" @@ -6168,6 +6908,21 @@ regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regenerator-runtime@^0.14.0: + version "0.14.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" + integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== + +regexp.prototype.flags@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" + integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== + dependencies: + call-bind "^1.0.6" + define-properties "^1.2.1" + es-errors "^1.3.0" + set-function-name "^2.0.1" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -6187,7 +6942,7 @@ request-promise-core@1.1.4: dependencies: lodash "^4.17.19" -request-promise@^4.2.5: +request-promise@^4.2.5, request-promise@^4.2.6: version "4.2.6" resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.6.tgz#7e7e5b9578630e6f598e3813c0f8eb342a27f0a2" integrity sha512-HCHI3DJJUakkOr8fNoCc73E5nU5bqITjOYFMDrKHYOXWXrgD/SBaC7LjwuPymUprRyuF06UK7hd/lMHkmUXglQ== @@ -6363,6 +7118,16 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" +safe-array-concat@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.0.tgz#8d0cae9cb806d6d1c06e08ab13d847293ebe0692" + integrity sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg== + dependencies: + call-bind "^1.0.5" + get-intrinsic "^1.2.2" + has-symbols "^1.0.3" + isarray "^2.0.5" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -6373,6 +7138,15 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.2, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex-test@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" + integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== + dependencies: + call-bind "^1.0.6" + es-errors "^1.3.0" + is-regex "^1.1.4" + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6486,6 +7260,38 @@ set-cookie-parser@^2.3.5: resolved "https://registry.yarnpkg.com/set-cookie-parser/-/set-cookie-parser-2.4.6.tgz#43bdea028b9e6f176474ee5298e758b4a44799c3" integrity sha512-mNCnTUF0OYPwYzSHbdRdCfNNHqrne+HS5tS5xNb6yJbdP9wInV0q5xPLE0EyfV/Q3tImo3y/OXpD8Jn0Jtnjrg== +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +set-function-length@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.1.tgz#47cc5945f2c771e2cf261c6737cf9684a2a5e425" + integrity sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g== + dependencies: + define-data-property "^1.1.2" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.3" + gopd "^1.0.1" + has-property-descriptors "^1.0.1" + +set-function-name@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + setprototypeof@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" @@ -6522,6 +7328,15 @@ shebang-regex@^3.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + sift@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/sift/-/sift-6.0.0.tgz#f93a778e5cbf05a5024ebc391e6b32511a6d1f82" @@ -6766,6 +7581,15 @@ string-width@^4.2.3: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.1" +string.prototype.trim@^1.2.4, string.prototype.trim@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" + integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimend@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" @@ -6774,6 +7598,15 @@ string.prototype.trimend@^1.0.1: define-properties "^1.1.3" es-abstract "^1.17.5" +string.prototype.trimend@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" + integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string.prototype.trimstart@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" @@ -6782,6 +7615,15 @@ string.prototype.trimstart@^1.0.1: define-properties "^1.1.3" es-abstract "^1.17.5" +string.prototype.trimstart@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" + integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.2.0" + es-abstract "^1.22.1" + string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -6875,6 +7717,14 @@ strtok3@^6.0.3: "@types/debug" "^4.1.5" peek-readable "^3.1.0" +strtok3@^6.2.4: + version "6.3.0" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-6.3.0.tgz#358b80ffe6d5d5620e19a073aa78ce947a90f9a0" + integrity sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^4.1.0" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -7097,6 +7947,14 @@ token-types@^2.0.0: "@tokenizer/token" "^0.1.0" ieee754 "^1.1.13" +token-types@^4.1.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-4.2.1.tgz#0f897f03665846982806e138977dbe72d44df753" + integrity sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + toni@>=0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/toni/-/toni-0.6.2.tgz#a6af3bd70ae64de5ab1856e7036fb3b3e5e73cf8" @@ -7104,6 +7962,12 @@ toni@>=0.6.2: dependencies: bolgia ">=2.7.4" +"toni@git+https://github.com/konnectors/toni.git#0.6.3": + version "0.6.3" + resolved "git+https://github.com/konnectors/toni.git#eb813c9d070b494efd78f788cf627bfc9a1019ec" + dependencies: + bolgia ">=2.7.4" + tough-cookie@^2.3.1, tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -7192,6 +8056,50 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +typed-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" + integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + is-typed-array "^1.1.13" + +typed-array-byte-length@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" + integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-byte-offset@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" + integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + +typed-array-length@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.5.tgz#57d44da160296d8663fd63180a1802ebf25905d5" + integrity sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + has-proto "^1.0.3" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -7209,6 +8117,16 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + unique-filename@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" @@ -7274,6 +8192,11 @@ url-search-params-polyfill@^7.0.0: resolved "https://registry.yarnpkg.com/url-search-params-polyfill/-/url-search-params-polyfill-7.0.1.tgz#b900cd9a0d9d2ff757d500135256f2344879cbff" integrity sha512-bAw7L2E+jn9XHG5P9zrPnHdO0yJub4U+yXJOdpcpkr7OBd9T8oll4lUos0iSGRcDvfZoLUKfx9a6aNmIhJ4+mQ== +url-search-params-polyfill@^8.0.0: + version "8.2.5" + resolved "https://registry.yarnpkg.com/url-search-params-polyfill/-/url-search-params-polyfill-8.2.5.tgz#2d31de6a2140c9b9cf6ee036fe0be07dd2644674" + integrity sha512-FOEojW4XReTmtZOB7xqSHmJZhrNTmClhBriwLTmle4iA7bwuCo6ldSfbtsFSb8bTf3E0a3XpfonAdaur9vqq8A== + utf8-byte-length@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" @@ -7386,6 +8309,13 @@ walker@^1.0.8: dependencies: makeerror "1.0.12" +warning@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3" + integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w== + dependencies: + loose-envify "^1.0.0" + watchpack@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" @@ -7483,6 +8413,17 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -7493,6 +8434,17 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= +which-typed-array@^1.1.14: + version "1.1.14" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.14.tgz#1f78a111aee1e131ca66164d8bdc3ab062c95a06" + integrity sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg== + dependencies: + available-typed-arrays "^1.0.6" + call-bind "^1.0.5" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.1" + which@^1.2.9: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"