diff --git a/Alpine.Dockerfile b/Alpine.Dockerfile
index d037d2a7cc..8ed00552ab 100644
--- a/Alpine.Dockerfile
+++ b/Alpine.Dockerfile
@@ -9,8 +9,9 @@ RUN tar xzf ./remote_syslog_linux_amd64.tar.gz && cd remote_syslog && cp ./remot
COPY config/papertrail.yml /etc/log_files.yml
-#Install nodemon & forever
+#Install nodemon, git & forever
RUN npm install forever -g
+RUN apk add git
WORKDIR /ot-node
diff --git a/external/blazegraph-service.js b/external/blazegraph-service.js
index ca56855440..f2f3304e40 100644
--- a/external/blazegraph-service.js
+++ b/external/blazegraph-service.js
@@ -109,48 +109,7 @@ class BlazegraphService {
?s ?p ?o
}
}`;
- let nquads = await this.construct(query);
-
- if (nquads.length) {
- nquads = nquads.toString();
- nquads = nquads.split('\n');
- nquads = nquads.filter((x) => x !== '');
- nquads = await this.transformBlankNodes(nquads);
- } else {
- nquads = null;
- }
- return nquads;
- }
-
- async transformBlankNodes(nquads) {
- // Find minimum blank node value to assign it to _:c14n0
- let minimumBlankNodeValue = -1;
- for (const nquad of nquads) {
- if (nquad.includes('_:t')) {
- const blankNodes = nquad.split(' ').filter((s) => s.includes('_:t'));
- for (const bn of blankNodes) {
- const bnValue = Number(bn.substring(3));
- if (minimumBlankNodeValue === -1 || minimumBlankNodeValue > bnValue) {
- minimumBlankNodeValue = bnValue;
- }
- }
- }
- }
-
- // Transform blank nodes, example: _:t145 -> _:c14n3
- let bnName;
- for (const nquadIndex in nquads) {
- const nquad = nquads[nquadIndex];
- if (nquad.includes('_:t')) {
- const blankNodes = nquad.split(' ').filter((s) => s.includes('_:t'));
- for (const bn of blankNodes) {
- const bnValue = Number(bn.substring(3));
- bnName = `_:c14n${bnValue - minimumBlankNodeValue}`;
- nquads[nquadIndex] = nquads[nquadIndex].replace(bn, bnName);
- }
- }
- }
-
+ const nquads = await this.construct(query);
return nquads;
}
diff --git a/external/fuseki-service.js b/external/fuseki-service.js
new file mode 100644
index 0000000000..938cd0d8be
--- /dev/null
+++ b/external/fuseki-service.js
@@ -0,0 +1,202 @@
+const axios = require('axios');
+const qs = require('qs');
+const constants = require('../modules/constants');
+
+class FusekiService {
+ constructor(config) {
+ this.config = config;
+ }
+
+ async initialize(logger) {
+ this.logger = logger;
+ this.config.axios = {
+ method: 'post',
+ url: `${this.config.url}/${this.config.repositoryName}`,
+ };
+ this.logger.info('Fuseki module initialized successfully');
+ }
+
+ async insert(triples, rootHash) {
+ const askQuery = `ASK WHERE { GRAPH <${rootHash}> { ?s ?p ?o } }`;
+ const exists = await this.ask(askQuery);
+ if (!exists) {
+ this.config.axios = {
+ method: 'put',
+ url: `${this.config.url}/${this.config.repositoryName}/data?graph=${rootHash}`,
+ headers: {
+ 'Content-Type': 'application/n-quads',
+ },
+ data: triples,
+ };
+
+ await axios(this.config.axios).then(() => true)
+ .catch((error) => {
+ this.logger.error({
+ msg: `Failed to write into Fuseki: ${error} - ${error.stack}`,
+ Event_name: constants.ERROR_TYPE.TRIPLE_STORE_INSERT_ERROR,
+ });
+ return false;
+ });
+ }
+ // TODO: else -> Should log if we already have data
+ }
+
+ async execute(query) {
+ return new Promise(async (accept, reject) => {
+ const data = qs.stringify({
+ query,
+ });
+ this.config.axios = {
+ method: 'post',
+ url: `${this.config.url}/${this.config.repositoryName}/sparql`,
+ headers: {
+ Accept: 'application/sparql-results+json',
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data,
+ };
+ axios(this.config.axios).then((response) => {
+ accept(response.data);
+ }).catch((e) => reject(e));
+ });
+ }
+
+ async construct(query) {
+ return new Promise(async (accept, reject) => {
+ const data = qs.stringify({
+ query,
+ });
+ this.config.axios = {
+ method: 'post',
+ url: `${this.config.url}/${this.config.repositoryName}/sparql`,
+ headers: {
+ Accept: 'application/n-quads',
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data,
+ };
+ axios(this.config.axios).then((response) => {
+ accept(response.data);
+ }).catch((e) => reject(e));
+ });
+ }
+
+ async ask(query) {
+ return new Promise(async (accept, reject) => {
+ const data = qs.stringify({
+ query,
+ });
+ this.config.axios = {
+ method: 'post',
+ url: `${this.config.url}/${this.config.repositoryName}/sparql`,
+ headers: {
+ Accept: 'application/json',
+ 'Content-Type': 'application/x-www-form-urlencoded',
+ },
+ data,
+ };
+ axios(this.config.axios).then((response) => {
+ accept(response.data.boolean);
+ }).catch((e) => reject(e));
+ });
+ }
+
+ async resolve(uri) {
+ const query = `PREFIX schema:
+ CONSTRUCT { ?s ?p ?o }
+ WHERE {
+ GRAPH <${constants.DID_PREFIX}:${uri}> {
+ ?s ?p ?o
+ }
+ }`;
+ const nquads = await this.construct(query);
+ return nquads;
+ }
+
+ async assertionsByAsset(uri) {
+ const query = `PREFIX schema:
+ SELECT ?assertionId ?issuer ?timestamp
+ WHERE {
+ ?assertionId schema:hasUALs "${uri}" ;
+ schema:hasTimestamp ?timestamp ;
+ schema:hasIssuer ?issuer .
+ }
+ ORDER BY DESC(?timestamp)`;
+ const result = await this.execute(query);
+
+ return result.results.bindings;
+ }
+
+ async findAssertions(nquads) {
+ const query = `SELECT ?g
+ WHERE {
+ GRAPH ?g {
+ ${nquads}
+ }
+ }`;
+ let graph = await this.execute(query);
+ graph = graph.results.bindings.map((x) => x.g.value.replace(`${constants.DID_PREFIX}:`, ''));
+ if (graph.length && graph[0] === 'http://www.bigdata.com/rdf#nullGraph') {
+ return [];
+ }
+ return graph;
+ }
+
+ async findAssertionsByKeyword(query, options, localQuery) {
+ const sparqlQuery = `PREFIX schema:
+ SELECT distinct ?assertionId
+ WHERE {
+ ?assertionId schema:hasKeywords ?keyword .
+ ${!localQuery ? ' ?assertionId schema:hasVisibility "public" .' : ''}
+ ${options.prefix ? `FILTER contains(lcase(?keyword),'${query}')` : `FILTER (lcase(?keyword) = '${query}')`}
+ }
+ ${options.limit ? `LIMIT ${options.limit}` : ''}`;
+ const result = await this.execute(sparqlQuery);
+ return result.results.bindings;
+ }
+
+ async findAssetsByKeyword(query, options, localQuery) {
+ const sparqlQuery = `PREFIX schema:
+ SELECT ?assertionId ?assetId
+ WHERE {
+ ?assertionId schema:hasTimestamp ?latestTimestamp ;
+ ${!localQuery ? 'schema:hasVisibility "public" ;' : ''}
+ schema:hasUALs ?assetId .
+ {
+ SELECT ?assetId (MAX(?timestamp) AS ?latestTimestamp)
+ WHERE {
+ ?assertionId schema:hasKeywords ?keyword ;
+ schema:hasIssuer ?issuer ;
+ schema:hasType ?type ;
+ schema:hasTimestamp ?timestamp ;
+ schema:hasUALs ?assetId .
+ ${options.prefix ? `FILTER contains(lcase(?keyword),'${query}')` : `FILTER (lcase(?keyword) = '${query}')`}
+ ${options.issuers ? `FILTER (?issuer IN (${JSON.stringify(options.issuers).slice(1, -1)}))` : ''}
+ ${options.types ? `FILTER (?type IN (${JSON.stringify(options.types).slice(1, -1)}))` : ''}
+ }
+ GROUP BY ?assetId
+ ${options.limit ? `LIMIT ${options.limit}` : ''}
+ }
+ }`;
+ const result = await this.execute(sparqlQuery);
+ return result.results.bindings;
+ }
+
+ async healthCheck() {
+ try {
+ const response = await axios.get(`${this.config.url}/$/ping`, {});
+ if (response.data !== null) {
+ return true;
+ }
+ return false;
+ } catch (e) {
+ return false;
+ }
+ }
+
+ getName() {
+ return 'Fuseki';
+ }
+}
+
+module.exports = FusekiService;
diff --git a/external/graphdb-service.js b/external/graphdb-service.js
index fb49c76fa0..0c7f375c63 100644
--- a/external/graphdb-service.js
+++ b/external/graphdb-service.js
@@ -127,16 +127,7 @@ class GraphdbService {
?s ?p ?o
}
}`;
- let nquads = await this.construct(query);
-
- if (nquads.length) {
- nquads = nquads.toString();
- nquads = nquads.replace(/_:genid(.){37}/gm, '_:$1');
- nquads = nquads.split('\n');
- nquads = nquads.filter((x) => x !== '');
- } else {
- nquads = null;
- }
+ const nquads = await this.construct(query);
return nquads;
}
diff --git a/external/libp2p-service.js b/external/libp2p-service.js
index deb19bdda3..ba83a56ce5 100644
--- a/external/libp2p-service.js
+++ b/external/libp2p-service.js
@@ -8,7 +8,6 @@ const TCP = require('libp2p-tcp');
const pipe = require('it-pipe');
const {sha256} = require('multiformats/hashes/sha2');
const PeerId = require("peer-id");
-const fs = require('fs');
const { BufferList } = require('bl')
const { InMemoryRateLimiter } = require("rolling-rate-limiter");
const constants = require('../modules/constants');
diff --git a/index.js b/index.js
index f1e989927a..6fa68058ad 100644
--- a/index.js
+++ b/index.js
@@ -39,31 +39,30 @@ config = rc(pjson.name, defaultConfig);
process.exit(1);
}
- const backupCode = `${config.autoUpdate.backupDirectory}/AutoGitUpdate/backup`;
- if (fs.ensureDir(backupCode)) {
+ const backupCodeDirectory = path.join(config.autoUpdate.backupDirectory, 'auto-update', 'backup');
+ if (fs.ensureDir(backupCodeDirectory)) {
console.log('Starting back old version of OT-Node.');
- const source = path.join(config.autoUpdate.backupDirectory, 'AutoGitUpdate', 'backup');
const destination = appRootPath.path;
await fs.ensureDir(destination);
- await fs.copy(source, destination);
+ await fs.copy(backupCodeDirectory, destination);
await new Promise((resolve, reject) => {
- const command = `cd ${destination} && npm install`;
+ const command = `cd ${destination} && npm install --omit=dev`;
const child = exec(command);
// Wait for results
child.stdout.on('end', resolve);
- child.stdout.on('data', (data) => console.log(`Auto Git Update - npm install: ${data.replace(/\r?\n|\r/g, '')}`));
+ child.stdout.on('data', (data) => console.log(`AutoUpdater - npm install --omit=dev: ${data.replace(/\r?\n|\r/g, '')}`));
child.stderr.on('data', (data) => {
if (data.toLowerCase().includes('error')) {
// npm passes warnings as errors, only reject if "error" is included
data = data.replace(/\r?\n|\r/g, '');
- console.error('Auto Git Update - Error installing dependencies');
- console.error(`Auto Git Update - ${data}`);
+ console.error('AutoUpdater - Error installing dependencies');
+ console.error(`AutoUpdater - ${data}`);
reject();
} else {
- console.log(`Auto Git Update - ${data}`);
+ console.log(`AutoUpdater - ${data}`);
}
});
});
diff --git a/installer/data/fuseki.service b/installer/data/fuseki.service
new file mode 100644
index 0000000000..97da93b989
--- /dev/null
+++ b/installer/data/fuseki.service
@@ -0,0 +1,17 @@
+#/lib/systemd/system/fuseki.service
+
+[Unit]
+Description=Fuseki - OriginTrail V6 Stage 1 Beta Node
+Documentation=https://github.com/OriginTrail/ot-node
+After=network.target
+
+[Service]
+Environment=JVM_ARGS=-Xmx4G
+Type=simple
+User=root
+WorkingDirectory=/root/fuseki
+ExecStart=/usr/bin/java -jar /root/fuseki/fuseki-server.jar --update --set tdb:unionDefaultGraph=true --loc /root/fuseki/tdb /node0
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target
diff --git a/installer/installer.sh b/installer/installer.sh
index a02e583169..8564d4d6d1 100755
--- a/installer/installer.sh
+++ b/installer/installer.sh
@@ -1,8 +1,5 @@
#!/bin/bash
-OS_VERSION=$(lsb_release -sr)
-GRAPHDB_FILE=$(ls /root/graphdb*.zip)
-GRAPHDB_DIR=$(echo $GRAPHDB_FILE | sed 's|-dist.zip||')
OTNODE_DIR="/root/ot-node"
N1=$'\n'
GREEN='\033[0;32m'
@@ -66,60 +63,80 @@ else
echo -e "${GREEN}SUCCESS${NC}"
fi
+echo -n "Installing build-essential: "
+
+OUTPUT=$(apt install build-essential -y 2>&1)
+
+if [[ $? -ne 0 ]]; then
+ echo -e "${RED}FAILED${NC}"
+ echo "There was an error installing build-essential."
+ echo $OUTPUT
+ exit 1
+else
+ echo -e "${GREEN}SUCCESS${NC}"
+fi
+
while true; do
- read -p "Please select the database you would like to use: [1]GraphDB [2]Blazegraph [E]xit: " choice
+ read -p "Please select the database you would like to use: [1]Fuseki [2]Blazegraph [E]xit: " choice
case "$choice" in
- [1gG]* ) echo -e "GraphDB selected. Proceeding with installation."; DATABASE=graphdb; break;;
+ [1gG]* ) echo -e "Fuseki selected. Proceeding with installation."; DATABASE=fuseki; break;;
[2bB]* ) echo -e "Blazegraph selected. Proceeding with installation."; DATABASE=blazegraph; break;;
[Ee]* ) echo "Installer stopped by user"; exit;;
* ) echo "Please make a valid choice and try again.";;
esac
done
-if [[ $DATABASE = "graphdb" ]]; then
+if [[ $DATABASE = "fuseki" ]]; then
- echo -n "Checking that the GraphDB file is present in /root: "
+ echo -n "Downloading Apache Jena Fuseki: "
+
+ OUTPUT=$(wget https://dlcdn.apache.org/jena/binaries/apache-jena-fuseki-4.4.0.zip 2>&1)
- if [[ ! -f $GRAPHDB_FILE ]]; then
+ if [[ $? -ne 0 ]]; then
echo -e "${RED}FAILED${NC}"
- echo "The graphdb file needs to be downloaded to /root. Please create an account at https://www.ontotext.com/products/graphdb/graphdb-free/ and click the standalone version link in the email."
+ echo "There was an error downloading Fuseki."
+ echo $OUTPUT
exit 1
else
echo -e "${GREEN}SUCCESS${NC}"
fi
- echo -n "Unzipping GraphDB: "
-OUTPUT=$(unzip -o $GRAPHDB_FILE >/dev/null 2>&1)
-OUTPUT=$(unzip -o $GRAPHDB_FILE 2>&1)
+ echo -n "Unzipping Fuseki .zip file: "
+ OUTPUT=$(unzip apache-jena-fuseki-4.4.0.zip 2>&1)
-if [[ $? -ne 0 ]]; then
- echo -e "${RED}FAILED${NC}"
- echo "There was an error unzipping GraphDB."
- echo $OUTPUT
- exit 1
-else
- echo -e "${GREEN}SUCCESS${NC}"
-fi
+ if [[ $? -ne 0 ]]; then
+ echo -e "${RED}FAILED${NC}"
+ echo "There was an error unzipping Fuseki."
+ echo $OUTPUT
+ exit 1
+ else
+ echo -e "${GREEN}SUCCESS${NC}"
+ fi
-echo -n "Rename GraphDB directory: "
-OUTPUT=$(mv $GRAPHDB_DIR graphdb-free 2>&1)
+ echo -n "Setting up fuseki folder in /root/fuseki: "
-if [[ $? -ne 0 ]]; then
- echo -e "${RED}FAILED${NC}"
- echo "There was an error unzipping GraphDB."
- echo $OUTPUT
- exit 1
-else
- echo -e "${GREEN}SUCCESS${NC}"
-fi
+ OUTPUT=$(rm /root/apache-jena-fuseki-4.4.0.zip &&
+ mkdir /root/fuseki &&
+ mkdir /root/fuseki/tdb &&
+ cp /root/apache-jena-fuseki-4.4.0/fuseki-server.jar /root/fuseki/ &&
+ cp -r /root/apache-jena-fuseki-4.4.0/webapp/ /root/fuseki/ 2>&1)
+
+ if [[ $? -ne 0 ]]; then
+ echo -e "${RED}FAILED${NC}"
+ echo "There was an setting up the fuseki folder in /root/fuseki."
+ echo $OUTPUT
+ exit 1
+ else
+ echo -e "${GREEN}SUCCESS${NC}"
+ fi
- echo -n "Copying graphdb service file: "
+ echo -n "Copying fuseki service file: "
- OUTPUT=$(cp $OTNODE_DIR/installer/data/graphdb.service /lib/systemd/system/ 2>&1)
+ OUTPUT=$(cp $OTNODE_DIR/installer/data/fuseki.service /lib/systemd/system/ 2>&1)
if [[ $? -ne 0 ]]; then
echo -e "${RED}FAILED${NC}"
- echo "There was an error copying the graphdb service file."
+ echo "There was an error copying the fuseki service file."
echo $OUTPUT
exit 1
else
@@ -128,44 +145,45 @@ fi
systemctl daemon-reload
- echo -n "Enable GraphDB service on boot: "
+ echo -n "Enable Fuseki service on boot: "
- OUTPUT=$(systemctl enable graphdb 2>&1)
+ OUTPUT=$(systemctl enable fuseki 2>&1)
if [[ $? -ne 0 ]]; then
echo -e "${RED}FAILED${NC}"
- echo "There was an error enabling the GraphDB service."
+ echo "There was an error enabling Fuseki."
echo $OUTPUT
exit 1
else
echo -e "${GREEN}SUCCESS${NC}"
fi
- echo -n "Starting GraphDB: "
+ echo -n "Starting Fuseki: "
- OUTPUT=$(systemctl start graphdb 2>&1)
+ OUTPUT=$(systemctl start fuseki 2>&1)
if [[ $? -ne 0 ]]; then
echo -e "${RED}FAILED${NC}"
- echo "There was an error starting GraphDB."
+ echo "There was an error starting Fuseki."
echo $OUTPUT
exit 1
else
echo -e "${GREEN}SUCCESS${NC}"
fi
- echo -n "Confirming GraphDB has started: "
+ echo -n "Confirming Fuseki has started: "
- IS_RUNNING=$(systemctl show -p ActiveState --value graphdb)
+ IS_RUNNING=$(systemctl show -p ActiveState --value fuseki)
if [[ $IS_RUNNING == "active" ]]; then
echo -e "${GREEN}SUCCESS${NC}"
else
echo -e "${RED}FAILED${NC}"
- echo "There was an error starting GraphDB."
+ echo "There was an error starting Fuseki."
echo $OUTPUT
exit 1
fi
+
fi
if [[ $DATABASE = "blazegraph" ]]; then
@@ -276,12 +294,24 @@ else
echo -e "${GREEN}SUCCESS${NC}"
fi
-echo -n "Installing node.js and npm: "
+echo -n "Installing node.js: "
OUTPUT=$(apt-get install node.js -y 2>&1)
if [[ $? -ne 0 ]]; then
echo -e "${RED}FAILED${NC}"
- echo "There was an error installing node.js/npm."
+ echo "There was an error installing node.js."
+ echo $OUTPUT
+ exit 1
+else
+ echo -e "${GREEN}SUCCESS${NC}"
+fi
+
+echo -n "Installing npm: "
+
+ OUTPUT=$(npm install -g npm 2>&1)
+if [[ $? -ne 0 ]]; then
+ echo -e "${RED}FAILED${NC}"
+ echo "There was an error installing npm."
echo $OUTPUT
exit 1
else
@@ -436,6 +466,11 @@ if [[ $DATABASE = "blazegraph" ]]; then
mv $OTNODE_DIR/origintrail_noderc_temp $OTNODE_DIR/.origintrail_noderc
fi
+if [[ $DATABASE = "fuseki" ]]; then
+ jq '.graphDatabase |= {"name": "node0", "implementation": "Fuseki", "url": "http://localhost:3030"} + .' $OTNODE_DIR/.origintrail_noderc >> $OTNODE_DIR/origintrail_noderc_temp
+ mv $OTNODE_DIR/origintrail_noderc_temp $OTNODE_DIR/.origintrail_noderc
+fi
+
echo -n "Running DB migrations: "
OUTPUT=$(npx sequelize --config=./config/sequelizeConfig.js db:migrate 2>&1)
diff --git a/modules/auto-update/auto-updater-module-interface.js b/modules/auto-update/auto-updater-module-interface.js
new file mode 100644
index 0000000000..dfe9a2e0d1
--- /dev/null
+++ b/modules/auto-update/auto-updater-module-interface.js
@@ -0,0 +1,22 @@
+const OTAutoUpdater = require('./implementation/ot-auto-updater');
+
+class AutoUpdaterModuleInterface {
+ constructor(config) {
+ this.config = config;
+ }
+
+ initialize() {
+ this.implementation = new OTAutoUpdater(this.config);
+ return this.implementation.initialize();
+ }
+
+ async compareVersions() {
+ return this.implementation.compareVersions();
+ }
+
+ async update() {
+ return this.implementation.update();
+ }
+};
+
+module.exports = AutoUpdaterModuleInterface;
diff --git a/modules/auto-update/implementation/ot-auto-updater.js b/modules/auto-update/implementation/ot-auto-updater.js
new file mode 100644
index 0000000000..fa8e8293a4
--- /dev/null
+++ b/modules/auto-update/implementation/ot-auto-updater.js
@@ -0,0 +1,225 @@
+
+const path = require('path');
+const fs = require('fs-extra');
+const {spawn, exec} = require('child_process');
+const https = require('https');
+const appRootPath = require('app-root-path');
+const git = require('simple-git');
+
+// Subdirectories to use within the configured tempLocation from above.
+const CLONE_SUBDIRECTORY = '/auto-update/repo/';
+const BACKUP_SUBDIRECTORY = '/auto-update/backup/';
+const REPOSITORY_URL = 'https://github.com/OriginTrail/ot-node';
+
+class OTAutoUpdater {
+ /**
+ * @param config - Configuration for AutoUpdater
+ * @param {String} config.branch - The branch to update from. Defaults to master.
+ * @param {String} config.tempLocation - The local dir to save temporary information for Auto Git Update.
+ * @param {String} config.executeOnComplete - A command to execute after an update completes. Good for restarting the app.
+ */
+ constructor(config) {
+ this.config = config;
+ this.logger = config.logger;
+ }
+
+ initialize() {
+ if (!this.config) throw new Error('You must pass a config object to AutoUpdater.');
+ if (!this.config.branch) this.config.branch = 'master';
+ if (!this.config.tempLocation) throw new Error('You must define a temp location for cloning the repository');
+ }
+
+ /**
+ * @typedef VersionResults
+ * @param {Boolean} UpToDate - If the local version is the same as the remote version.
+ * @param {String} currentVersion - The version of the local application.
+ * @param {String} remoteVersion - The version of the application in the git repository.
+ *
+ * Checks the local version of the application against the remote repository.
+ * @returns {VersionResults} - An object with the results of the version comparison.
+ */
+ async compareVersions() {
+ try {
+ this.logger.info('AutoUpdater - Comparing versions...');
+ const currentVersion = this.readAppVersion();
+ const remoteVersion = await this.readRemoteVersion();
+ this.logger.info(`AutoUpdater - Current version: ${currentVersion}`);
+ this.logger.info(`AutoUpdater - Remote Version: ${remoteVersion}`);
+ if (currentVersion === remoteVersion) {
+ return {
+ upToDate: true,
+ currentVersion
+ };
+ };
+ return {
+ upToDate: false,
+ currentVersion,
+ remoteVersion
+ };
+ }catch(e) {
+ this.logger.error(`AutoUpdater - Error comparing local and remote versions. Error message: ${e.message}`);
+ return {
+ upToDate: false,
+ currentVersion: 'Error',
+ remoteVersion: 'Error'
+ }
+ }
+ }
+
+ /**
+ * Clones the git repository and installs the update over the local application.
+ * A backup of the application is created before the update is installed.
+ * If configured, a completion command will be executed and the process for the app will be stopped.
+ */
+ async update() {
+ try {
+ this.logger.info(`AutoUpdater - Updating ot-node from ${REPOSITORY_URL}`);
+ await this.downloadUpdate();
+ await this.backup();
+ await this.installUpdate();
+ await this.installDependencies();
+ this.logger.info('AutoUpdater - Finished installing updated version.');
+ if (this.config.executeOnComplete) await this.promiseBlindExecute(this.config.executeOnComplete);
+ process.exit(1);
+ }catch(e) {
+ this.logger.error(`AutoUpdater - Error updating application. Error message: ${e.message}`);
+ }
+ }
+
+ /**
+ * Copy the files to the app directory, and install new modules
+ * The update is installed from the configured tempLocation.
+ */
+ async installUpdate() {
+ const source = path.join(this.config.tempLocation, CLONE_SUBDIRECTORY);
+ const destination = appRootPath.path;
+ this.logger.info('AutoUpdater - Installing update...');
+ this.logger.info(`AutoUpdater - Source: ${source}`);
+ this.logger.info(`AutoUpdater - Destination: ${destination}`);
+ await fs.ensureDir(destination);
+ await fs.copy(source, destination);
+ }
+
+ /**
+ * Reads the applications version from the package.json file.
+ */
+ readAppVersion() {
+ const file = path.join(appRootPath.path, 'package.json');
+ this.logger.info(`AutoUpdater - Reading app version from ${file}`);
+ const appPackage = fs.readFileSync(file);
+ return JSON.parse(appPackage).version;
+ }
+
+ /**
+ * A promise wrapper for sending a get https requests.
+ * @param {String} url - The Https address to request.
+ * @param {String} options - The request options.
+ */
+ promiseHttpsRequest(url, options) {
+ return new Promise((resolve, reject) => {
+ const req = https.request(url, options, res => {
+ let body = '';
+ res.on('data', data => {body += data});
+ res.on('end', () => {
+ if (res.statusCode === 200) return resolve(body);
+ this.logger.info(`AutoUpdater - Bad Response ${res.statusCode}`);
+ reject(res.statusCode);
+ });
+ });
+ this.logger.info(`AutoUpdater - Sending request to ${url}`);
+ this.logger.info(`AutoUpdater - Options: ${JSON.stringify(options)}`);
+ req.on('error', reject);
+ req.end();
+ });
+ }
+
+ /**
+ * Reads the applications version from the git repository.
+ */
+ async readRemoteVersion() {
+ const options = {}
+ let url = `${REPOSITORY_URL}/${this.config.branch}/package.json`;
+ if (url.includes('github')) url = url.replace('github.com', 'raw.githubusercontent.com');
+ this.logger.info(`AutoUpdater - Reading remote version from ${url}`);
+
+ try {
+ const body = await this.promiseHttpsRequest(url, options);
+ const remotePackage = JSON.parse(body);
+ const {version} = remotePackage;
+ return version;
+ } catch(e) {
+ throw new Error(`This repository requires a token or does not exist. Error message: ${e.message}`);
+ }
+ }
+
+ /**
+ * A promise wrapper for the simple-git clone function
+ * @param {String} repo - The url of the repository to clone.
+ * @param {String} destination - The local path to clone into.
+ * @param {String} branch - The repo branch to clone.
+ */
+ promiseClone(repo, destination, branch) {
+ return new Promise((resolve, reject) => {
+ git().clone(repo, destination, [`--branch=${branch}`], (result) => {
+ if (result != null) reject(`Unable to clone repo \n ${repo} \n ${result}`);
+ resolve();
+ });
+ });
+ }
+
+ /**
+ * A promise wrapper for the child-process spawn function. Does not listen for results.
+ * @param {String} command - The command to execute.
+ */
+ promiseBlindExecute(command) {
+ return new Promise((resolve) => {
+ spawn(command, [], { shell: true, detached: true });
+ setTimeout(resolve, 1000);
+ });
+ }
+
+ async backup() {
+ const destination = path.join(this.config.tempLocation, BACKUP_SUBDIRECTORY);
+ this.logger.info(`AutoUpdater - Backing up app to ${destination}`);
+ await fs.ensureDir(destination);
+ await fs.copy(appRootPath.path, destination, {dereference: true});
+ }
+
+ async downloadUpdate() {
+ const destination = path.join(this.config.tempLocation, CLONE_SUBDIRECTORY);
+ this.logger.info(`AutoUpdater - Cloning ${REPOSITORY_URL}`);
+ this.logger.info(`AutoUpdater - Destination: ${destination}`);
+ await fs.ensureDir(destination);
+ await fs.emptyDir(destination);
+ await this.promiseClone(REPOSITORY_URL, destination, this.config.branch);
+ }
+
+ /**
+ * Runs npm install to update/install the application dependencies.
+ */
+ installDependencies() {
+ return new Promise((resolve, reject) => {
+ const destination = appRootPath.path;
+ this.logger.info(`AutoUpdater - Installing application dependencies in ${destination}`);
+
+ const command = `cd ${destination} && npm install --omit=dev`;
+ const child = exec(command);
+
+
+ child.stdout.on('end', resolve);
+ child.stdout.on('data', data => this.logger.info(`AutoUpdater - npm install --omit=dev: ${data.replace(/\r?\n|\r/g, '')}`));
+ child.stderr.on('data', data => {
+ if (data.toLowerCase().includes('error')) {
+ // npm passes warnings as errors, only reject if "error" is included
+ data = data.replace(/\r?\n|\r/g, '');
+ this.logger.error(`AutoUpdater - Error installing dependencies. Error message: ${data}`);
+ reject();
+ } else {
+ this.logger.warn(`AutoUpdater - ${data}`);
+ }
+ });
+ });
+ }
+}
+
+module.exports = OTAutoUpdater;
\ No newline at end of file
diff --git a/modules/command/common/otnode-update-command.js b/modules/command/common/otnode-update-command.js
index c95973b608..0a7e3e3dd2 100644
--- a/modules/command/common/otnode-update-command.js
+++ b/modules/command/common/otnode-update-command.js
@@ -32,7 +32,7 @@ class OtnodeUpdateCommand extends Command {
this.logger.info(`New major update available. Please run update to version ${remoteVersion} manually.`);
return Command.repeat();
}
- await this.updater.autoUpdate();
+ await this.updater.update();
}
} catch (e) {
await this.handleError(e);
diff --git a/modules/constants.js b/modules/constants.js
index 5fe0bcb212..3779ba8ef6 100644
--- a/modules/constants.js
+++ b/modules/constants.js
@@ -160,6 +160,7 @@ exports.STORE_MIN_SUCCESS_RATE = 0.8;
exports.TRIPLE_STORE_IMPLEMENTATION = {
BLAZEGRAPH: 'Blazegraph',
GRAPHDB: 'GraphDB',
+ FUSEKI: 'Fuseki',
};
/**
diff --git a/modules/controller/rpc-controller.js b/modules/controller/rpc-controller.js
index 5e035d03d0..6bec1b8ed7 100644
--- a/modules/controller/rpc-controller.js
+++ b/modules/controller/rpc-controller.js
@@ -644,7 +644,7 @@ class RpcController {
});
this.app.post(constants.SERVICE_API_ROUTES.QUERY, this.rateLimitMiddleware, this.slowDownMiddleware, async (req, res, next) => {
- if (!req.body || !req.body.query || !req.query.type) {
+ if (!req.body || !req.body.query || !req.body.type) {
return next({ code: 400, message: 'Params query and type are necessary.' });
}
diff --git a/modules/service/data-service.js b/modules/service/data-service.js
index 88da943411..b8d1495dda 100644
--- a/modules/service/data-service.js
+++ b/modules/service/data-service.js
@@ -4,6 +4,7 @@ const toobusy = require('toobusy-js');
const constants = require('../constants');
const GraphDB = require('../../external/graphdb-service');
const Blazegraph = require('../../external/blazegraph-service');
+const Fuseki = require('../../external/fuseki-service');
class DataService {
constructor(ctx) {
@@ -39,13 +40,21 @@ class DataService {
this.implementation = new Blazegraph({
url: this.config.graphDatabase.url,
});
- } else {
+ } else if(
+ this.config.graphDatabase.implementation
+ === constants.TRIPLE_STORE_IMPLEMENTATION.GRAPHDB
+ ) {
this.implementation = new GraphDB({
repositoryName: this.config.graphDatabase.name,
username: this.config.graphDatabase.username,
password: this.config.graphDatabase.password,
url: this.config.graphDatabase.url,
});
+ } else {
+ this.implementation = new Fuseki({
+ repositoryName: this.config.graphDatabase.name,
+ url: this.config.graphDatabase.url,
+ });
}
let ready = await this.healthCheck();
@@ -128,6 +137,15 @@ class DataService {
async resolve(id, localQuery = false, metadataOnly = false) {
try {
let nquads = await this.tripleStoreQueue.push({ operation: 'resolve', id });
+ if (nquads.length) {
+ nquads = nquads.toString();
+ nquads = nquads.split('\n');
+ nquads = nquads.filter((x) => x !== '');
+ // canonize nquads before roothash validation
+ nquads = await this.workerPool.exec('toNQuads', [nquads.join('\n'), 'application/n-quads']);
+ } else {
+ nquads = null;
+ }
// TODO: add function for this conditional expr for increased readability
if (!localQuery && nquads && nquads.find((x) => x.includes(`<${constants.DID_PREFIX}:${id}> "private" .`))) {
diff --git a/modules/worker/l1-worker.js b/modules/worker/l1-worker.js
index da2d4800a1..1e129e17a9 100644
--- a/modules/worker/l1-worker.js
+++ b/modules/worker/l1-worker.js
@@ -9,11 +9,15 @@ function JSONStringify(args) {
return JSON.stringify(args);
}
-async function toNQuads(json) {
- const canonized = await jsonld.canonize(json, {
+async function toNQuads(data, inputFormat) {
+ const options = {
algorithm: 'URDNA2015',
format: 'application/n-quads',
- });
+ }
+ if(inputFormat) {
+ options.inputFormat = inputFormat;
+ }
+ const canonized = await jsonld.canonize(data, options);
return canonized.split('\n').filter((x) => x !== '');
}
@@ -23,12 +27,13 @@ function fromNQuads(nquads, context, frame) {
jsonld.fromRDF(nquads.join('\n'), {
algorithm: 'URDNA2015',
format: 'application/n-quads',
- }).then((json) => jsonld.frame(json, frame))
- .then((json) => jsonld.compact(json, context))
- .then((result) => {
- accept(result);
- })
- .catch((err) => reject(err));
+ })
+ .then((json) => jsonld.frame(json, frame))
+ .then((json) => jsonld.compact(json, context))
+ .then((result) => {
+ accept(result);
+ })
+ .catch((err) => reject(err));
});
}
diff --git a/ot-node.js b/ot-node.js
index 56886f251b..ad62e7d18f 100644
--- a/ot-node.js
+++ b/ot-node.js
@@ -1,9 +1,9 @@
const { execSync } = require('child_process');
const DeepExtend = require('deep-extend');
-const AutoGitUpdate = require('auto-git-update');
const rc = require('rc');
const fs = require('fs');
const queue = require('fastq');
+const AutoUpdater = require('./modules/auto-update/auto-updater-module-interface');
const DependencyInjection = require('./modules/service/dependency-injection');
const Logger = require('./modules/logger/logger');
const constants = require('./modules/constants');
@@ -77,7 +77,6 @@ class OTNode {
async initializeAutoUpdate() {
try {
updateFilePath = `./${this.config.appDataPath}/UPDATED`;
- // check if UPDATE file exists if yes set flag updated true
if (fs.existsSync(updateFilePath)) {
this.config.otNodeUpdated = true;
}
@@ -86,19 +85,16 @@ class OTNode {
}
const autoUpdateConfig = {
- repository: 'https://github.com/OriginTrail/ot-node',
+ logger: this.logger,
branch: this.config.autoUpdate.branch,
tempLocation: this.config.autoUpdate.backupDirectory,
executeOnComplete: `touch ${updateFilePath}`,
- exitOnComplete: true,
};
execSync(`mkdir -p ${this.config.autoUpdate.backupDirectory}`);
- this.updater = new AutoGitUpdate(autoUpdateConfig);
- this.updater.setLogConfig({
- logGeneral: true,
- });
+ this.updater = new AutoUpdater(autoUpdateConfig);
+ await this.updater.initialize();
DependencyInjection.registerValue(this.container, 'updater', this.updater);
this.logger.info('Auto update mechanism initialized');
@@ -128,13 +124,14 @@ class OTNode {
this.logger.info('Operational database module: sequelize implementation');
// eslint-disable-next-line global-require
const db = require('./models');
- // todo change if statement to if (this.config.otNodeUpdated);
- if (process.env.NODE_ENV !== 'test') {
+
+ if(this.config.otNodeUpdated) {
execSync('npx sequelize --config=./config/sequelizeConfig.js db:migrate');
- // todo remove UPDATE file for next release
- // execSync('rm ${updateFilePath}');
- // this.config.otNodeUpdated = false;
+ const fileService = this.container.resolve('fileService');
+ await fileService.removeFile(updateFilePath);
+ this.config.otNodeUpdated = false;
}
+
await db.sequelize.sync();
} catch (e) {
this.logger.error({
diff --git a/package-lock.json b/package-lock.json
index 14ef881e5f..bd8e538ca3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "origintrail_node",
- "version": "6.0.0-beta.1.34",
+ "version": "6.0.0-beta.1.35",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
"name": "origintrail_node",
- "version": "6.0.0-beta.1.34",
+ "version": "6.0.0-beta.1.35",
"license": "ISC",
"dependencies": {
"app-root-path": "^3.0.0",
@@ -459,6 +459,33 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/runtime": {
+ "version": "7.15.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz",
+ "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "regenerator-runtime": "^0.13.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/runtime-corejs3": {
+ "version": "7.15.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz",
+ "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "core-js-pure": "^3.16.0",
+ "regenerator-runtime": "^0.13.4"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/template": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
@@ -1519,6 +1546,13 @@
"@types/node": "*"
}
},
+ "node_modules/@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
+ "dev": true,
+ "peer": true
+ },
"node_modules/@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
@@ -1833,11 +1867,82 @@
"node": ">=0.8.0"
}
},
+ "node_modules/aria-query": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
+ "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/runtime": "^7.10.2",
+ "@babel/runtime-corejs3": "^7.10.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
"node_modules/array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
+ "node_modules/array-includes": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
+ "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.2",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.5"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flat": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
+ "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/array.prototype.flatmap": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz",
+ "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1",
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/asap": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
@@ -1891,6 +1996,13 @@
"repeat-string": "^1.6.1"
}
},
+ "node_modules/ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
+ "dev": true,
+ "peer": true
+ },
"node_modules/astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
@@ -1990,6 +2102,16 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
+ "node_modules/axe-core": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz",
+ "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/axios": {
"version": "0.24.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
@@ -1998,6 +2120,13 @@
"follow-redirects": "^1.14.4"
}
},
+ "node_modules/axobject-query": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
+ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -3194,6 +3323,18 @@
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz",
"integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ=="
},
+ "node_modules/core-js-pure": {
+ "version": "3.17.3",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.17.3.tgz",
+ "integrity": "sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "peer": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
"node_modules/core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@@ -3344,6 +3485,13 @@
"type": "^1.0.1"
}
},
+ "node_modules/damerau-levenshtein": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz",
+ "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -3822,6 +3970,16 @@
"resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
"integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA=="
},
+ "node_modules/error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
"node_modules/es-abstract": {
"version": "1.18.6",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz",
@@ -4075,6 +4233,222 @@
"eslint": ">=7.0.0"
}
},
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-module-utils": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
+ "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "debug": "^3.2.7",
+ "pkg-dir": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-module-utils/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import": {
+ "version": "2.24.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz",
+ "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "array-includes": "^3.1.3",
+ "array.prototype.flat": "^1.2.4",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.6.2",
+ "find-up": "^2.0.0",
+ "has": "^1.0.3",
+ "is-core-module": "^2.6.0",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.4",
+ "pkg-up": "^2.0.0",
+ "read-pkg-up": "^3.0.0",
+ "resolve": "^1.20.0",
+ "tsconfig-paths": "^3.11.0"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "ms": "2.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-import/node_modules/ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/eslint-plugin-jsx-a11y": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz",
+ "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@babel/runtime": "^7.11.2",
+ "aria-query": "^4.2.2",
+ "array-includes": "^3.1.1",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.0.2",
+ "axobject-query": "^2.2.0",
+ "damerau-levenshtein": "^1.0.6",
+ "emoji-regex": "^9.0.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.1.0",
+ "language-tags": "^1.0.5"
+ },
+ "engines": {
+ "node": ">=4.0"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7"
+ }
+ },
+ "node_modules/eslint-plugin-jsx-a11y/node_modules/emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/eslint-plugin-react": {
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz",
+ "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "array-includes": "^3.1.3",
+ "array.prototype.flatmap": "^1.2.4",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.2.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.0.4",
+ "object.entries": "^1.1.4",
+ "object.fromentries": "^2.0.4",
+ "object.values": "^1.1.4",
+ "prop-types": "^15.7.2",
+ "resolve": "^2.0.0-next.3",
+ "string.prototype.matchall": "^4.0.5"
+ },
+ "engines": {
+ "node": ">=4"
+ },
+ "peerDependencies": {
+ "eslint": "^3 || ^4 || ^5 || ^6 || ^7"
+ }
+ },
+ "node_modules/eslint-plugin-react-hooks": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz",
+ "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "peerDependencies": {
+ "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/eslint-plugin-react/node_modules/resolve": {
+ "version": "2.0.0-next.3",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
+ "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -4790,6 +5164,19 @@
"node": ">=8"
}
},
+ "node_modules/find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "locate-path": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/flat": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
@@ -5720,6 +6107,13 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
+ "node_modules/hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -6078,6 +6472,13 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true,
+ "peer": true
+ },
"node_modules/is-bigint": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
@@ -6908,6 +7309,13 @@
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
},
+ "node_modules/json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/json-schema": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
@@ -6936,6 +7344,19 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
+ "node_modules/json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "minimist": "^1.2.0"
+ },
+ "bin": {
+ "json5": "lib/cli.js"
+ }
+ },
"node_modules/jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -7038,6 +7459,20 @@
"node": ">=0.6.0"
}
},
+ "node_modules/jsx-ast-utils": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz",
+ "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "array-includes": "^3.1.2",
+ "object.assign": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
"node_modules/k-bucket": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz",
@@ -7142,6 +7577,23 @@
"url": "https://opencollective.com/node-fetch"
}
},
+ "node_modules/language-subtag-registry": {
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz",
+ "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
"node_modules/latest-version": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
@@ -7594,9 +8046,39 @@
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
}
},
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
+ "node_modules/load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/lodash": {
+ "version": "4.17.21",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
"node_modules/lodash.clonedeep": {
@@ -7672,6 +8154,19 @@
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
+ "node_modules/loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ },
+ "bin": {
+ "loose-envify": "cli.js"
+ }
+ },
"node_modules/loupe": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz",
@@ -8711,6 +9206,29 @@
"node": ">=6"
}
},
+ "node_modules/normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "node_modules/normalize-package-data/node_modules/semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "peer": true,
+ "bin": {
+ "semver": "bin/semver"
+ }
+ },
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -8952,6 +9470,43 @@
"node": ">= 0.4"
}
},
+ "node_modules/object.fromentries": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz",
+ "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.2",
+ "has": "^1.0.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/object.values": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
+ "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/oboe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz",
@@ -9096,6 +9651,32 @@
"node": ">=8.0.0"
}
},
+ "node_modules/p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "p-try": "^1.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "p-limit": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/p-map": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
@@ -9216,6 +9797,16 @@
"node": ">=10"
}
},
+ "node_modules/p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/package-hash": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
@@ -9301,6 +9892,20 @@
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
"integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
},
+ "node_modules/parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -9318,6 +9923,16 @@
"tslib": "^2.0.3"
}
},
+ "node_modules/path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -9344,6 +9959,19 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
+ "node_modules/path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "pify": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/pathval": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
@@ -9430,6 +10058,16 @@
"node": ">=0.10"
}
},
+ "node_modules/pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/pino": {
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/pino/-/pino-7.6.3.tgz",
@@ -9533,6 +10171,32 @@
"atomic-sleep": "^1.0.0"
}
},
+ "node_modules/pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "find-up": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
+ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "find-up": "^2.1.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -9632,6 +10296,18 @@
"asap": "~2.0.6"
}
},
+ "node_modules/prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
"node_modules/proto-list": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
@@ -9902,6 +10578,13 @@
"sax": "^1.2.4"
}
},
+ "node_modules/react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/react-native-fetch-api": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz",
@@ -9910,6 +10593,35 @@
"p-defer": "^3.0.0"
}
},
+ "node_modules/read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -9957,6 +10669,13 @@
"integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
"dev": true
},
+ "node_modules/regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/regexp-match-indices": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz",
@@ -9975,6 +10694,23 @@
"regexp-tree": "bin/regexp-tree"
}
},
+ "node_modules/regexp.prototype.flags": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
+ "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -10947,6 +11683,42 @@
"node": ">=8"
}
},
+ "node_modules/spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "node_modules/spdx-license-ids": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
+ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==",
+ "dev": true,
+ "peer": true
+ },
"node_modules/split": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
@@ -11103,6 +11875,26 @@
"node": ">=8"
}
},
+ "node_modules/string.prototype.matchall": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz",
+ "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.2",
+ "get-intrinsic": "^1.1.1",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.3.1",
+ "side-channel": "^1.0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/string.prototype.trimend": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
@@ -11138,6 +11930,16 @@
"node": ">=8"
}
},
+ "node_modules/strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"node_modules/strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -11681,6 +12483,19 @@
"utf8-byte-length": "^1.0.1"
}
},
+ "node_modules/tsconfig-paths": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz",
+ "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
"node_modules/tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
@@ -11995,6 +12810,17 @@
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="
},
+ "node_modules/validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
"node_modules/validator": {
"version": "13.7.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
@@ -13316,6 +14142,27 @@
"integrity": "sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==",
"dev": true
},
+ "@babel/runtime": {
+ "version": "7.15.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.15.4.tgz",
+ "integrity": "sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/runtime-corejs3": {
+ "version": "7.15.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz",
+ "integrity": "sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "core-js-pure": "^3.16.0",
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
"@babel/template": {
"version": "7.15.4",
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
@@ -14127,6 +14974,13 @@
"@types/node": "*"
}
},
+ "@types/json5": {
+ "version": "0.0.29",
+ "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz",
+ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=",
+ "dev": true,
+ "peer": true
+ },
"@types/long": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.1.tgz",
@@ -14382,29 +15236,79 @@
}
}
},
+ "aria-query": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-4.2.2.tgz",
+ "integrity": "sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@babel/runtime": "^7.10.2",
+ "@babel/runtime-corejs3": "^7.10.2"
+ }
+ },
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
- "asap": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
- "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
- "dev": true
- },
- "asn1": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
- "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "array-includes": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz",
+ "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==",
+ "dev": true,
+ "peer": true,
"requires": {
- "safer-buffer": "~2.1.0"
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.2",
+ "get-intrinsic": "^1.1.1",
+ "is-string": "^1.0.5"
}
},
- "asn1.js": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
- "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
+ "array.prototype.flat": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz",
+ "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1"
+ }
+ },
+ "array.prototype.flatmap": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz",
+ "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.0",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.1",
+ "function-bind": "^1.1.1"
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
+ "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.6",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz",
+ "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "asn1.js": {
+ "version": "5.4.1",
+ "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz",
+ "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==",
"requires": {
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
@@ -14434,6 +15338,13 @@
"repeat-string": "^1.6.1"
}
},
+ "ast-types-flow": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
+ "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=",
+ "dev": true,
+ "peer": true
+ },
"astral-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
@@ -14511,6 +15422,13 @@
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz",
"integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA=="
},
+ "axe-core": {
+ "version": "4.3.3",
+ "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.3.3.tgz",
+ "integrity": "sha512-/lqqLAmuIPi79WYfRpy2i8z+x+vxU3zX2uAm0gs1q52qTuKwolOj1P8XbufpXcsydrpKx2yGn2wzAnxCMV86QA==",
+ "dev": true,
+ "peer": true
+ },
"axios": {
"version": "0.24.0",
"resolved": "https://registry.npmjs.org/axios/-/axios-0.24.0.tgz",
@@ -14519,6 +15437,13 @@
"follow-redirects": "^1.14.4"
}
},
+ "axobject-query": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.2.0.tgz",
+ "integrity": "sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==",
+ "dev": true,
+ "peer": true
+ },
"balanced-match": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -15451,6 +16376,13 @@
"resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.3.tgz",
"integrity": "sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ=="
},
+ "core-js-pure": {
+ "version": "3.17.3",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.17.3.tgz",
+ "integrity": "sha512-YusrqwiOTTn8058JDa0cv9unbXdIiIgcgI9gXso0ey4WgkFLd3lYlV9rp9n7nDCsYxXsMDTjA4m1h3T348mdlQ==",
+ "dev": true,
+ "peer": true
+ },
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
@@ -15574,6 +16506,13 @@
"type": "^1.0.1"
}
},
+ "damerau-levenshtein": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.7.tgz",
+ "integrity": "sha512-VvdQIPGdWP0SqFXghj79Wf/5LArmreyMsGLa6FG6iC4t3j7j5s71TrwWmT/4akbDQIqjfACkLZmjXhA7g2oUZw==",
+ "dev": true,
+ "peer": true
+ },
"dashdash": {
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
@@ -15966,6 +16905,16 @@
"resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
"integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA=="
},
+ "error-ex": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
+ "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
"es-abstract": {
"version": "1.18.6",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz",
@@ -16156,6 +17105,194 @@
"dev": true,
"requires": {}
},
+ "eslint-import-resolver-node": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz",
+ "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "resolve": "^1.20.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-module-utils": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz",
+ "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "debug": "^3.2.7",
+ "pkg-dir": "^2.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ }
+ }
+ },
+ "eslint-plugin-import": {
+ "version": "2.24.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.2.tgz",
+ "integrity": "sha512-hNVtyhiEtZmpsabL4neEj+6M5DCLgpYyG9nzJY8lZQeQXEn5UPW1DpUdsMHMXsq98dbNm7nt1w9ZMSVpfJdi8Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "array-includes": "^3.1.3",
+ "array.prototype.flat": "^1.2.4",
+ "debug": "^2.6.9",
+ "doctrine": "^2.1.0",
+ "eslint-import-resolver-node": "^0.3.6",
+ "eslint-module-utils": "^2.6.2",
+ "find-up": "^2.0.0",
+ "has": "^1.0.3",
+ "is-core-module": "^2.6.0",
+ "minimatch": "^3.0.4",
+ "object.values": "^1.1.4",
+ "pkg-up": "^2.0.0",
+ "read-pkg-up": "^3.0.0",
+ "resolve": "^1.20.0",
+ "tsconfig-paths": "^3.11.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "eslint-plugin-jsx-a11y": {
+ "version": "6.4.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.4.1.tgz",
+ "integrity": "sha512-0rGPJBbwHoGNPU73/QCLP/vveMlM1b1Z9PponxO87jfr6tuH5ligXbDT6nHSSzBC8ovX2Z+BQu7Bk5D/Xgq9zg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@babel/runtime": "^7.11.2",
+ "aria-query": "^4.2.2",
+ "array-includes": "^3.1.1",
+ "ast-types-flow": "^0.0.7",
+ "axe-core": "^4.0.2",
+ "axobject-query": "^2.2.0",
+ "damerau-levenshtein": "^1.0.6",
+ "emoji-regex": "^9.0.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^3.1.0",
+ "language-tags": "^1.0.5"
+ },
+ "dependencies": {
+ "emoji-regex": {
+ "version": "9.2.2",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
+ "eslint-plugin-react": {
+ "version": "7.25.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.25.1.tgz",
+ "integrity": "sha512-P4j9K1dHoFXxDNP05AtixcJEvIT6ht8FhYKsrkY0MPCPaUMYijhpWwNiRDZVtA8KFuZOkGSeft6QwH8KuVpJug==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "array-includes": "^3.1.3",
+ "array.prototype.flatmap": "^1.2.4",
+ "doctrine": "^2.1.0",
+ "estraverse": "^5.2.0",
+ "has": "^1.0.3",
+ "jsx-ast-utils": "^2.4.1 || ^3.0.0",
+ "minimatch": "^3.0.4",
+ "object.entries": "^1.1.4",
+ "object.fromentries": "^2.0.4",
+ "object.values": "^1.1.4",
+ "prop-types": "^15.7.2",
+ "resolve": "^2.0.0-next.3",
+ "string.prototype.matchall": "^4.0.5"
+ },
+ "dependencies": {
+ "doctrine": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz",
+ "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "estraverse": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz",
+ "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==",
+ "dev": true,
+ "peer": true
+ },
+ "resolve": {
+ "version": "2.0.0-next.3",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz",
+ "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "is-core-module": "^2.2.0",
+ "path-parse": "^1.0.6"
+ }
+ }
+ }
+ },
+ "eslint-plugin-react-hooks": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.2.0.tgz",
+ "integrity": "sha512-623WEiZJqxR7VdxFCKLI6d6LLpwJkGPYKODnkH3D7WpOG5KM8yWueBd8TLsNAetEJNF5iJmolaAKO3F8yzyVBQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {}
+ },
"eslint-scope": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
@@ -16738,6 +17875,16 @@
}
}
},
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
"flat": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
@@ -17471,6 +18618,13 @@
"minimalistic-crypto-utils": "^1.0.1"
}
},
+ "hosted-git-info": {
+ "version": "2.8.9",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
+ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
+ "dev": true,
+ "peer": true
+ },
"html-escaper": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
@@ -17753,6 +18907,13 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true,
+ "peer": true
+ },
"is-bigint": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
@@ -18369,6 +19530,13 @@
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
"integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
},
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true,
+ "peer": true
+ },
"json-schema": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz",
@@ -18397,6 +19565,16 @@
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
},
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
@@ -18480,6 +19658,17 @@
"verror": "1.10.0"
}
},
+ "jsx-ast-utils": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz",
+ "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "array-includes": "^3.1.2",
+ "object.assign": "^4.1.2"
+ }
+ },
"k-bucket": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/k-bucket/-/k-bucket-5.1.0.tgz",
@@ -18554,6 +19743,23 @@
}
}
},
+ "language-subtag-registry": {
+ "version": "0.3.21",
+ "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz",
+ "integrity": "sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==",
+ "dev": true,
+ "peer": true
+ },
+ "language-tags": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.5.tgz",
+ "integrity": "sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "language-subtag-registry": "~0.3.2"
+ }
+ },
"latest-version": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz",
@@ -18928,6 +20134,30 @@
}
}
},
+ "load-json-file": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
+ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
+ "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
"lodash": {
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
@@ -18987,6 +20217,16 @@
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
"integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
},
+ "loose-envify": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "js-tokens": "^3.0.0 || ^4.0.0"
+ }
+ },
"loupe": {
"version": "2.3.4",
"resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz",
@@ -19791,6 +21031,28 @@
"abbrev": "1"
}
},
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true,
+ "peer": true
+ }
+ }
+ },
"normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
@@ -19969,6 +21231,31 @@
"es-abstract": "^1.18.2"
}
},
+ "object.fromentries": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz",
+ "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.0-next.2",
+ "has": "^1.0.3"
+ }
+ },
+ "object.values": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz",
+ "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.2"
+ }
+ },
"oboe": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/oboe/-/oboe-2.1.5.tgz",
@@ -20080,6 +21367,26 @@
"resolved": "https://registry.npmjs.org/p-iteration/-/p-iteration-1.1.8.tgz",
"integrity": "sha512-IMFBSDIYcPNnW7uWYGrBqmvTiq7W0uB0fJn6shQZs7dlF3OvrHOre+JT9ikSZ7gZS3vWqclVgoQSvToJrns7uQ=="
},
+ "p-limit": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
+ "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
+ "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
"p-map": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
@@ -20159,6 +21466,13 @@
"resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-4.1.0.tgz",
"integrity": "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw=="
},
+ "p-try": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
+ "dev": true,
+ "peer": true
+ },
"package-hash": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
@@ -20231,6 +21545,17 @@
"resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.4.tgz",
"integrity": "sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw=="
},
+ "parse-json": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
+ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "error-ex": "^1.3.1",
+ "json-parse-better-errors": "^1.0.1"
+ }
+ },
"parseurl": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
@@ -20245,6 +21570,13 @@
"tslib": "^2.0.3"
}
},
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true,
+ "peer": true
+ },
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
@@ -20265,6 +21597,16 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
+ "path-type": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
+ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
"pathval": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
@@ -20321,6 +21663,13 @@
"integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==",
"dev": true
},
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true,
+ "peer": true
+ },
"pino": {
"version": "7.6.3",
"resolved": "https://registry.npmjs.org/pino/-/pino-7.6.3.tgz",
@@ -20419,6 +21768,26 @@
"resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-2.5.0.tgz",
"integrity": "sha512-wXqbqSrIhE58TdrxxlfLwU9eDhrzppQDvGhBEr1gYbzzM4KKo3Y63gSjiDXRKLVS2UOXdPNR2v+KnQgNrs+xUg=="
},
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
+ "pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz",
+ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "find-up": "^2.1.0"
+ }
+ },
"prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
@@ -20488,6 +21857,18 @@
"asap": "~2.0.6"
}
},
+ "prop-types": {
+ "version": "15.7.2",
+ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
+ "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "loose-envify": "^1.4.0",
+ "object-assign": "^4.1.1",
+ "react-is": "^16.8.1"
+ }
+ },
"proto-list": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz",
@@ -20706,6 +22087,13 @@
"sax": "^1.2.4"
}
},
+ "react-is": {
+ "version": "16.13.1",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
+ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==",
+ "dev": true,
+ "peer": true
+ },
"react-native-fetch-api": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-2.0.0.tgz",
@@ -20714,6 +22102,29 @@
"p-defer": "^3.0.0"
}
},
+ "read-pkg": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
+ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "load-json-file": "^4.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^3.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz",
+ "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "find-up": "^2.0.0",
+ "read-pkg": "^3.0.0"
+ }
+ },
"readable-stream": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
@@ -20752,6 +22163,13 @@
"integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
"dev": true
},
+ "regenerator-runtime": {
+ "version": "0.13.9",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz",
+ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==",
+ "dev": true,
+ "peer": true
+ },
"regexp-match-indices": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/regexp-match-indices/-/regexp-match-indices-1.0.2.tgz",
@@ -20767,6 +22185,17 @@
"integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==",
"dev": true
},
+ "regexp.prototype.flags": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz",
+ "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3"
+ }
+ },
"regexpp": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz",
@@ -21546,6 +22975,42 @@
"which": "^2.0.1"
}
},
+ "spdx-correct": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
+ "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
+ "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
+ "dev": true,
+ "peer": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
+ "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.10",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz",
+ "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==",
+ "dev": true,
+ "peer": true
+ },
"split": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz",
@@ -21655,6 +23120,23 @@
"strip-ansi": "^6.0.0"
}
},
+ "string.prototype.matchall": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz",
+ "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "call-bind": "^1.0.2",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.18.2",
+ "get-intrinsic": "^1.1.1",
+ "has-symbols": "^1.0.2",
+ "internal-slot": "^1.0.3",
+ "regexp.prototype.flags": "^1.3.1",
+ "side-channel": "^1.0.4"
+ }
+ },
"string.prototype.trimend": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz",
@@ -21681,6 +23163,13 @@
"ansi-regex": "^5.0.0"
}
},
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "dev": true,
+ "peer": true
+ },
"strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
@@ -22107,6 +23596,19 @@
"utf8-byte-length": "^1.0.1"
}
},
+ "tsconfig-paths": {
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.11.0.tgz",
+ "integrity": "sha512-7ecdYDnIdmv639mmDwslG6KQg1Z9STTz1j7Gcz0xa+nshh/gKDAHcPxRbWOsA3SPp0tXP2leTcY9Kw+NAkfZzA==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "@types/json5": "^0.0.29",
+ "json5": "^1.0.1",
+ "minimist": "^1.2.0",
+ "strip-bom": "^3.0.0"
+ }
+ },
"tslib": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
@@ -22362,6 +23864,17 @@
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
"integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA=="
},
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
+ "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
+ "dev": true,
+ "peer": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
"validator": {
"version": "13.7.0",
"resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz",
@@ -23238,4 +24751,4 @@
"dev": true
}
}
-}
+}
\ No newline at end of file
diff --git a/package.json b/package.json
index eb4fa37e10..32f019f7f7 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "origintrail_node",
- "version": "6.0.0-beta.1.34",
+ "version": "6.0.0-beta.1.35",
"description": "OTNode v6 Beta 1",
"main": "index.js",
"scripts": {
@@ -43,7 +43,7 @@
"eslint-config-prettier": "^8.5.0",
"ethereumjs-wallet": "^1.0.2",
"form-data": "^4.0.0",
- "ganache": "^7.0.3",
+ "ganache": "^7.0.4",
"husky": "^6.0.0",
"lint-staged": "^12.3.7",
"mocha": "^9.2.2",
@@ -57,7 +57,6 @@
},
"dependencies": {
"app-root-path": "^3.0.0",
- "auto-git-update": "2.0.2",
"awilix": "^5.0.1",
"axios": "^0.24.0",
"big-number": "^2.0.0",
@@ -106,6 +105,7 @@
"semver": "^7.3.5",
"sequelize": "^6.9.0",
"sequelize-cli": "^6.3.0",
+ "simple-git": "^3.6.0",
"sleep-async": "^1.0.5",
"split": "^1.0.1",
"streaming-iterables": "^6.0.0",