diff --git a/.env.example b/.env.example
index a5459d32f8..43fb705a6a 100644
--- a/.env.example
+++ b/.env.example
@@ -105,4 +105,25 @@ NEXT_PUBLIC_PROPOSAL_ACCEPTED=
NEXT_PUBLIC_PROPOSAL_REJECTED=
# Google Analytics Measurement ID
-NEXT_PUBLIC_GA_MEASUREMENT_ID=
\ No newline at end of file
+NEXT_PUBLIC_GA_MEASUREMENT_ID=
+
+# API log level: 0 none, 1 error, 2 warn, 3 info, 4 trace, 5 log, 6 debug
+LOG_LEVEL=6
+
+# Elastic APM integration secret token
+ELASTIC_APM_SECRET_TOKEN=
+
+# Elastic APM integration server url
+ELASTIC_APM_SERVER_URL=
+
+# Elastic APM integration service name
+ELASTIC_APM_SERVICE_NAME=
+
+# true|false - Enable Elastic APM integration
+ELASTIC_APM_ACTIVE=
+
+# Elastic APM _local_ log level
+ELASTIC_APM_LOG_LEVEL=
+
+# true|false - should we index Logger.trace() into elastic
+ELASTIC_INDEX_STACK_TRACE=
\ No newline at end of file
diff --git a/components/bounties/list-active-networks.tsx b/components/bounties/list-active-networks.tsx
index d3f903c636..88ea2d21d3 100644
--- a/components/bounties/list-active-networks.tsx
+++ b/components/bounties/list-active-networks.tsx
@@ -45,7 +45,6 @@ export default function ListActiveNetworks() {
{t("most-active-networks")}
diff --git a/components/connect-wallet-button.tsx b/components/connect-wallet-button.tsx
index 5c12b3746e..d86e37d67d 100644
--- a/components/connect-wallet-button.tsx
+++ b/components/connect-wallet-button.tsx
@@ -19,11 +19,9 @@ import {changeShowWeb3} from "../contexts/reducers/update-show-prop";
export default function ConnectWalletButton({children = null, asModal = false, forceLogin = false,}) {
const { t } = useTranslation(["common", "connect-wallet-button"]);
- const {dispatch, state: { loading, connectedChain },} = useAppState();
+ const {dispatch, state} = useAppState();
const [showModal, setShowModal] = useState(false);
- const {state} = useAppState();
-
const { connectWallet } = useAuthentication();
async function handleLogin() {
@@ -35,11 +33,12 @@ export default function ConnectWalletButton({children = null, asModal = false, f
if (!state.Service?.active)
return;
- if (+state.connectedChain?.id === +state.Settings?.requiredChain?.id) {
+ if (
+ (+state.connectedChain?.id || +window?.ethereum?.chainId) ===
+ +state.Settings?.requiredChain?.id
+ ) {
connectWallet();
} else {
- console.log('no connected chain?', connectedChain, state.Settings?.requiredChain);
-
dispatch(changeChain.update({...state.connectedChain, id: state.Settings?.requiredChain?.id}));
setShowModal(false);
}
@@ -64,7 +63,7 @@ export default function ConnectWalletButton({children = null, asModal = false, f
if (asModal) {
- if (loading?.isLoading) return <>>;
+ if (state?.loading?.isLoading) return <>>;
return (
{
@@ -74,7 +75,21 @@ export default function MainNav() {
if(!window.ethereum) return dispatch(changeShowWeb3(true))
return dispatch(changeShowCreateBounty(true))
- }
+ }
+
+ function LinkExplore() {
+ return (
+ }
+ nav
+ uppercase
+ icon={!noNeedNetworkInstance ? :null}
+ />
+ );
+ }
function LinkNetworks() {
return(
@@ -101,7 +116,9 @@ export default function MainNav() {
function LinkBounties() {
return (
}
nav
uppercase
@@ -110,41 +127,17 @@ export default function MainNav() {
}
const brandLogo = !noNeedNetworkInstance ? (
-
- ) : (
-
- )
- }
- className="brand"
- nav
- active
- brand
- />
- ): (
-
- }
- className="brand"
- nav
- active
- brand
+ fullLogoUrl ? (
+
+ ) : (
+
+ )
+ ) : (
+
);
return (
@@ -163,7 +156,6 @@ export default function MainNav() {
-
+
+
+
)) || (
)}
diff --git a/components/transaction-modal.tsx b/components/transaction-modal.tsx
index 74af997de9..9b5f4662be 100644
--- a/components/transaction-modal.tsx
+++ b/components/transaction-modal.tsx
@@ -19,6 +19,7 @@ import {toastInfo} from "contexts/reducers/change-toaster";
import {CopyValue} from "helpers/copy-value";
import {formatStringToCurrency} from "helpers/formatNumber";
import {truncateAddress} from "helpers/truncate-address";
+import { isValidUrl } from "helpers/validateUrl";
import {BlockTransaction, Transaction} from "interfaces/transaction";
@@ -99,7 +100,9 @@ export default function TransactionModal({
}
function getEtherScanHref(tx: string) {
- return `${state.Settings?.urls?.blockScan}/${tx}`;
+ const url = state.Settings?.urls?.blockScan
+ const validUrl = isValidUrl(url) ? url : `https://${url}`
+ return `${validUrl}/${tx}`;
}
return (
diff --git a/components/web3-dialog.tsx b/components/web3-dialog.tsx
index 3bd541e23a..6c6856839d 100644
--- a/components/web3-dialog.tsx
+++ b/components/web3-dialog.tsx
@@ -31,12 +31,12 @@ export default function WebThreeDialog() {
useEffect(() => {
if (![
+ "/explore",
+ "/leaderboard",
+ "/networks",
getURLWithNetwork("/").pathname,
getURLWithNetwork("/bounties").pathname,
getURLWithNetwork("/curators").pathname,
- getURLWithNetwork("/oracle").pathname,
- getURLWithNetwork("/oracle/new-bounties").pathname,
- getURLWithNetwork("/oracle/ready-to-merge").pathname,
"/[network]/bounty",
"/[network]",
].includes(router.pathname))
diff --git a/elastic-apm-node.js b/elastic-apm-node.js
new file mode 100644
index 0000000000..961e2df712
--- /dev/null
+++ b/elastic-apm-node.js
@@ -0,0 +1,9 @@
+require(`dotenv`).config();
+
+module.exports = {
+ serverUrl: process.env.ELASTIC_APM_SERVER_URL, // E.g. https://my-deployment-name.apm.us-west2.gcp.elastic-cloud.com
+ secretToken: process.env.ELASTIC_APM_SECRET_TOKEN,
+ serviceName: process.env.ELASTIC_APM_SERVICE_NAME,
+ active: process.env.ELASTIC_APM_ACTIVE === "true",
+ logLevel: process.env.ELASTIC_APM_LOG_LEVEL
+}
\ No newline at end of file
diff --git a/helpers/error-messages.ts b/helpers/error-messages.ts
new file mode 100644
index 0000000000..cc8d969785
--- /dev/null
+++ b/helpers/error-messages.ts
@@ -0,0 +1,2 @@
+export const UNAUTHORIZED = `Unauthorized`;
+export const INVALID_JWT_TOKEN = `Invalid JWT Token`;
\ No newline at end of file
diff --git a/helpers/validateUrl.ts b/helpers/validateUrl.ts
new file mode 100644
index 0000000000..7fd6e8593c
--- /dev/null
+++ b/helpers/validateUrl.ts
@@ -0,0 +1,8 @@
+export function isValidUrl(string) {
+ try {
+ new URL(string);
+ return true;
+ } catch (err) {
+ return false;
+ }
+}
diff --git a/middleware/index.ts b/middleware/index.ts
index 3b976dd80f..9bcc85eafc 100644
--- a/middleware/index.ts
+++ b/middleware/index.ts
@@ -1,5 +1,8 @@
+import {LogAccess} from "./log-access";
import withCors from "./withCors";
import WithJwt from "./withJwt";
const withProtected = (handler) => withCors(WithJwt(handler))
-export {withCors, WithJwt, withProtected}
\ No newline at end of file
+const RouteMiddleware = (handler) => LogAccess(withCors(WithJwt(handler)));
+
+export {withCors, WithJwt, withProtected, RouteMiddleware};
\ No newline at end of file
diff --git a/middleware/log-access.ts b/middleware/log-access.ts
new file mode 100644
index 0000000000..006f82b4cb
--- /dev/null
+++ b/middleware/log-access.ts
@@ -0,0 +1,32 @@
+import {NextApiHandler, NextApiRequest, NextApiResponse} from "next";
+
+import {debug, log, Logger} from "../services/logging";
+
+export const LogAccess = (handler: NextApiHandler) => {
+ return async (req: NextApiRequest, res: NextApiResponse) => {
+ const {url, method} = req as any;
+ const _query = Object.fromEntries(new URLSearchParams(url.split('?')[1]));
+ const query = Object.keys(_query).length ? _query : null;
+ const body = req?.body || null;
+
+ const pathname = url.split('/api')[1].replace(/\?.+/g, '');
+
+ const rest = (query || body) ? ({ ... query ? {query} : {}, ... body ? {body} : {}}) : '';
+
+ log(`${method} access`, pathname);
+ if (rest)
+ debug(`${method} access-payload`, pathname, rest);
+
+ try {
+ await handler(req, res);
+
+ if (res.statusCode >= 400)
+ Logger.warn(`Answered with ${res.statusCode}`, res.statusMessage)
+
+ debug(`${method} access-end`, pathname)
+ } catch (e) {
+ Logger.error(e, `${method}`, pathname, e?.toString(), rest);
+ }
+ Logger.changeActionName(``); // clean action just in case;
+ }
+}
\ No newline at end of file
diff --git a/middleware/withCors.ts b/middleware/withCors.ts
index 93226bae68..7d783c68eb 100644
--- a/middleware/withCors.ts
+++ b/middleware/withCors.ts
@@ -1,8 +1,6 @@
import Cors from 'cors'
import getConfig from "next/config";
-import { info, error } from 'services/logging';
-
const { publicRuntimeConfig } = getConfig();
const cors = Cors({
@@ -10,43 +8,20 @@ const cors = Cors({
origin: [publicRuntimeConfig?.urls?.home || 'http://localhost:3000'],
})
-const ignorePaths = ['health', 'ip'];
-function runMiddleware(req, res, fn) {
- return new Promise((resolve, reject) => {
- fn(req, res, (result) => {
- if (result instanceof Error) {
- return reject(result)
+const WithCors = (handler) =>
+ (req, res) =>
+ new Promise((resolve, reject) => {
+
+ const next = (e) => {
+ if (e instanceof Error)
+ reject(e);
+ resolve(null)
}
- return resolve(result)
- })
- })
-}
-
-function runLogger(req, e = null) {
- const {url, method} = req as any;
- const search = Object(new URLSearchParams(url.split('?')[1]));
- const pathname = url.split('/api')[1].replace(/\?.+/g, '');
-
- if (!ignorePaths.some(k => pathname.includes(k)))
- info('Access', {method, pathname, search,});
-
- if (e)
- error(e?.message);
-}
-
-const withCors = (handler) => {
- return async (req, res) => {
- runLogger(req);
- runMiddleware(req, res, cors)
- .then(()=>{
- return handler(req, res);
- }).catch((e)=>{
- runLogger(req, e?.message || e.toString());
- return res.status(401).write('Unautorized');
- })
- };
-};
-
-export default withCors;
+ cors(req, res, next);
+
+ }).then(() => handler(req, res))
+
+
+export default WithCors;
diff --git a/middleware/withJwt.ts b/middleware/withJwt.ts
index 204696ff1f..0825c4841a 100644
--- a/middleware/withJwt.ts
+++ b/middleware/withJwt.ts
@@ -1,14 +1,19 @@
-import { getToken } from "next-auth/jwt";
+import {NextApiRequest} from "next";
+import {getToken} from "next-auth/jwt";
-const WithJwt = (handler) => {
- return async (req, res) => {
- const method = req.method
- if(method !== 'GET'){
- const token = await getToken({req});
- if(!token) return res.status(401).write('Unautorized');
- }
+import {INVALID_JWT_TOKEN} from "../helpers/error-messages";
+import {Logger} from "../services/logging";
- return handler(req, res);
+Logger.changeActionName(`WithJWT()`);
+
+const WithJwt = (handler, allowMethods = ['GET']) => {
+ return async (req: NextApiRequest, res) => {
+
+ if (allowMethods.map(v => v.toLowerCase()).includes(req.method.toLowerCase()))
+ return handler(req, res);
+
+ if (!await getToken({req}))
+ return res.status(401).json({message: INVALID_JWT_TOKEN});
};
};
diff --git a/next.config.js b/next.config.js
index 2abc50f9a4..8430a96065 100644
--- a/next.config.js
+++ b/next.config.js
@@ -55,7 +55,8 @@ const serverRuntimeConfig = {
},
e2eEnabled: process.env.NEXT_E2E_TESTNET || false,
scheduleInterval: process.env.NEXT_E2E_TESTNET || 60,
- logLevel: process.env.LOG_LEVEL
+ logLevel: process.env.LOG_LEVEL,
+ logStackTrace: process.env.ELASTIC_INDEX_STACK_TRACE === "true"
}
module.exports = () => {
diff --git a/package-lock.json b/package-lock.json
index b626cd7207..0236d5bd58 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -23,6 +23,7 @@
"cron": "^1.8.2",
"date-fns": "^2.28.0",
"dotenv": "^16.0.0",
+ "elastic-apm-node": "^3.42.0",
"file-type": "^17.1.1",
"form-data": "^4.0.0",
"formidable": "^2.0.1",
@@ -526,6 +527,28 @@
"resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz",
"integrity": "sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w=="
},
+ "node_modules/@elastic/ecs-helpers": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@elastic/ecs-helpers/-/ecs-helpers-1.1.0.tgz",
+ "integrity": "sha512-MDLb2aFeGjg46O5mLpdCzT5yOUDnXToJSrco2ShqGIXxNJaM8uJjX+4nd+hRYV4Vex8YJyDtOFEVBldQct6ndg==",
+ "dependencies": {
+ "fast-json-stringify": "^2.4.1"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/@elastic/ecs-pino-format": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@elastic/ecs-pino-format/-/ecs-pino-format-1.3.0.tgz",
+ "integrity": "sha512-U8D57gPECYoRCcwREsrXKBtqeyFFF/KAwHi4rG1u/oQhAg91Kzw8ZtUQJXD/DMDieLOqtbItFr2FRBWI3t3wog==",
+ "dependencies": {
+ "@elastic/ecs-helpers": "^1.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@elastic/elasticsearch": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.2.1.tgz",
@@ -1929,6 +1952,14 @@
"resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.5.1.tgz",
"integrity": "sha512-FaBbqZS2e4fCdQvUqeBKpJJOVsRxGcrf0NA91WBXz9GP5/4xgQgdjpbzAcDOSfESBYDYD78HeI5VeihfCW28Ew=="
},
+ "node_modules/@opentelemetry/api": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.0.tgz",
+ "integrity": "sha512-IgMK9i3sFGNUqPMbjABm0G26g0QCKCUBfglhQ7rQq6WcxbKfEHRcmwsoER4hZcuYqJgkYn2OeuoJIv7Jsftp7g==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/@panva/hkdf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.1.tgz",
@@ -2832,6 +2863,53 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
+ "node_modules/after-all-results": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/after-all-results/-/after-all-results-2.0.0.tgz",
+ "integrity": "sha512-2zHEyuhSJOuCrmas9YV0YL/MFCWLxe1dS6k/ENhgYrb/JqyMnadLN4iIAc9kkZrbElMDyyAGH/0J18OPErOWLg=="
+ },
+ "node_modules/agentkeepalive": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
+ "dependencies": {
+ "debug": "^4.1.0",
+ "depd": "^1.1.2",
+ "humanize-ms": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 8.0.0"
+ }
+ },
+ "node_modules/agentkeepalive/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/agentkeepalive/node_modules/depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/agentkeepalive/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
"node_modules/aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -3008,11 +3086,47 @@
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
},
+ "node_modules/async-cache": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/async-cache/-/async-cache-1.1.0.tgz",
+ "integrity": "sha512-YDQc4vBn5NFhY6g6HhVshyi3Fy9+SQ5ePnE7JLDJn1DoL+i7ER+vMwtTNOYk9leZkYMnOwpBCWqyLDPw8Aig8g==",
+ "deprecated": "No longer maintained. Use [lru-cache](http://npm.im/lru-cache) version 7.6 or higher, and provide an asynchronous `fetchMethod` option.",
+ "dependencies": {
+ "lru-cache": "^4.0.0"
+ }
+ },
+ "node_modules/async-cache/node_modules/lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "dependencies": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "node_modules/async-cache/node_modules/yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
+ },
"node_modules/async-limiter": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
},
+ "node_modules/async-value": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/async-value/-/async-value-1.2.2.tgz",
+ "integrity": "sha512-8rwtYe32OAS1W9CTwvknoyts+mc3ta8N7Pi0h7AjkMaKvsFbr39K+gEfZ7Z81aPXQ1sK5M23lgLy1QfZpcpadQ=="
+ },
+ "node_modules/async-value-promise": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/async-value-promise/-/async-value-promise-1.1.1.tgz",
+ "integrity": "sha512-c2RFDKjJle1rHa0YxN9Ysu97/QBu3Wa+NOejJxsX+1qVDJrkD3JL/GN1B3gaILAEXJXbu/4Z1lcoCHFESe/APA==",
+ "dependencies": {
+ "async-value": "^1.2.2"
+ }
+ },
"node_modules/asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -3026,6 +3140,14 @@
"node": ">= 4.0.0"
}
},
+ "node_modules/atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
"node_modules/attr-accept": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz",
@@ -3116,6 +3238,17 @@
}
]
},
+ "node_modules/basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "dependencies": {
+ "safe-buffer": "5.1.2"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ }
+ },
"node_modules/bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -3145,6 +3278,11 @@
"node": ">=8"
}
},
+ "node_modules/binary-search": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz",
+ "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA=="
+ },
"node_modules/bl": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz",
@@ -3272,6 +3410,14 @@
"node": ">=8"
}
},
+ "node_modules/breadth-filter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/breadth-filter/-/breadth-filter-2.0.0.tgz",
+ "integrity": "sha512-thQShDXnFWSk2oVBixRCyrWsFoV5tfOpWKHmxwafHQDNxCfDBk539utpvytNjmlFrTMqz41poLwJvA1MW3z0MQ==",
+ "dependencies": {
+ "object.entries": "^1.0.4"
+ }
+ },
"node_modules/brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
@@ -3831,6 +3977,11 @@
"proto-list": "~1.2.1"
}
},
+ "node_modules/console-log-level": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz",
+ "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ=="
+ },
"node_modules/content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -4026,8 +4177,7 @@
"node_modules/core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"node_modules/cors": {
"version": "2.8.5",
@@ -4562,6 +4712,148 @@
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
+ "node_modules/elastic-apm-http-client": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/elastic-apm-http-client/-/elastic-apm-http-client-11.2.0.tgz",
+ "integrity": "sha512-XHXK+gQmd34eRN/ffrml7AN4h1VwujB79WEO2C/J59ufvEk+mT1OGBhl6pntHPUWn4Um52C5m84O6jIXzaQwfw==",
+ "dependencies": {
+ "agentkeepalive": "^4.2.1",
+ "breadth-filter": "^2.0.0",
+ "end-of-stream": "^1.4.4",
+ "fast-safe-stringify": "^2.0.7",
+ "fast-stream-to-buffer": "^1.0.0",
+ "object-filter-sequence": "^1.0.0",
+ "readable-stream": "^3.4.0",
+ "semver": "^6.3.0",
+ "stream-chopper": "^3.0.1"
+ },
+ "engines": {
+ "node": "^8.6.0 || 10 || >=12"
+ }
+ },
+ "node_modules/elastic-apm-http-client/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/elastic-apm-node": {
+ "version": "3.42.0",
+ "resolved": "https://registry.npmjs.org/elastic-apm-node/-/elastic-apm-node-3.42.0.tgz",
+ "integrity": "sha512-Q9sugfpaw6jQ8xDeP09LlyF0MwE5k0hphQmUiap+qQKE2jrLvY00zk4WierDQ2GF/AguE6BtRZmXpUELDbHFyA==",
+ "dependencies": {
+ "@elastic/ecs-pino-format": "^1.2.0",
+ "@opentelemetry/api": "^1.1.0",
+ "after-all-results": "^2.0.0",
+ "async-cache": "^1.1.0",
+ "async-value-promise": "^1.1.1",
+ "basic-auth": "^2.0.1",
+ "cookie": "^0.5.0",
+ "core-util-is": "^1.0.2",
+ "debug": "^4.1.1",
+ "elastic-apm-http-client": "11.2.0",
+ "end-of-stream": "^1.4.4",
+ "error-callsites": "^2.0.4",
+ "error-stack-parser": "^2.0.6",
+ "escape-string-regexp": "^4.0.0",
+ "fast-safe-stringify": "^2.0.7",
+ "http-headers": "^3.0.2",
+ "is-native": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "measured-reporting": "^1.51.1",
+ "module-details-from-path": "^1.0.3",
+ "monitor-event-loop-delay": "^1.0.0",
+ "object-filter-sequence": "^1.0.0",
+ "object-identity-map": "^1.0.2",
+ "original-url": "^1.2.3",
+ "pino": "^6.11.2",
+ "relative-microtime": "^2.0.0",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
+ "set-cookie-serde": "^1.0.0",
+ "shallow-clone-shim": "^2.0.0",
+ "source-map": "^0.8.0-beta.0",
+ "sql-summary": "^1.0.1",
+ "traverse": "^0.6.6",
+ "unicode-byte-truncate": "^1.0.0"
+ },
+ "engines": {
+ "node": "^8.6.0 || 10 || 12 || 14 || 16 || 17 || 18 || 19"
+ }
+ },
+ "node_modules/elastic-apm-node/node_modules/cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/elastic-apm-node/node_modules/debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "engines": {
+ "node": ">=6.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/elastic-apm-node/node_modules/ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "node_modules/elastic-apm-node/node_modules/semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "bin": {
+ "semver": "bin/semver.js"
+ }
+ },
+ "node_modules/elastic-apm-node/node_modules/source-map": {
+ "version": "0.8.0-beta.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
+ "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
+ "dependencies": {
+ "whatwg-url": "^7.0.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/elastic-apm-node/node_modules/tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/elastic-apm-node/node_modules/webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
+ },
+ "node_modules/elastic-apm-node/node_modules/whatwg-url": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+ "dependencies": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ },
"node_modules/electron-fetch": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz",
@@ -4635,6 +4927,14 @@
"resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
"integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA=="
},
+ "node_modules/error-callsites": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/error-callsites/-/error-callsites-2.0.4.tgz",
+ "integrity": "sha512-V877Ch4FC4FN178fDK1fsrHN4I1YQIBdtjKrHh3BUHMnh3SMvwUVrqkaOgDpUuevgSNna0RBq6Ox9SGlxYrigA==",
+ "engines": {
+ "node": ">=6.x"
+ }
+ },
"node_modules/error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -4643,6 +4943,14 @@
"is-arrayish": "^0.2.1"
}
},
+ "node_modules/error-stack-parser": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
+ "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
+ "dependencies": {
+ "stackframe": "^1.3.4"
+ }
+ },
"node_modules/es-abstract": {
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz",
@@ -5563,17 +5871,46 @@
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
+ "node_modules/fast-json-stringify": {
+ "version": "2.7.13",
+ "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.13.tgz",
+ "integrity": "sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==",
+ "dependencies": {
+ "ajv": "^6.11.0",
+ "deepmerge": "^4.2.2",
+ "rfdc": "^1.2.0",
+ "string-similarity": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
"node_modules/fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
+ "node_modules/fast-redact": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz",
+ "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw==",
+ "engines": {
+ "node": ">=6"
+ }
+ },
"node_modules/fast-safe-stringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
- "dev": true
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+ },
+ "node_modules/fast-stream-to-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-stream-to-buffer/-/fast-stream-to-buffer-1.0.0.tgz",
+ "integrity": "sha512-bI/544WUQlD2iXBibQbOMSmG07Hay7YrpXlKaeGTPT7H7pC0eitt3usak5vUwEvCGK/O7rUAM3iyQValGU22TQ==",
+ "dependencies": {
+ "end-of-stream": "^1.4.1"
+ }
},
"node_modules/fastq": {
"version": "1.13.0",
@@ -5701,6 +6038,11 @@
"node": "^10.12.0 || >=12.0.0"
}
},
+ "node_modules/flatstr": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
+ "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
+ },
"node_modules/flatted": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
@@ -5813,6 +6155,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/forwarded-parse": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz",
+ "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="
+ },
"node_modules/fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -6357,6 +6704,14 @@
"node": ">= 0.8"
}
},
+ "node_modules/http-headers": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-headers/-/http-headers-3.0.2.tgz",
+ "integrity": "sha512-87E1I+2Wg4dxxz4rcxElo3dxO/w1ZtgL1yA0Sb6vH3qU16vRKq1NjWQv9SCY3ly2OQROcoxHZOUpmelS+k6wOw==",
+ "dependencies": {
+ "next-line": "^1.1.0"
+ }
+ },
"node_modules/http-https": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz",
@@ -6388,6 +6743,14 @@
"node": ">=10.19.0"
}
},
+ "node_modules/humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "dependencies": {
+ "ms": "^2.0.0"
+ }
+ },
"node_modules/i18next": {
"version": "21.6.14",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.14.tgz",
@@ -6912,9 +7275,9 @@
"integrity": "sha512-YttjnrswnUYRVJvxCvu8z+PGMUSzC2JttP0OEXezlAEdp3EXzhf7IZ3j0gRAybJBQupedIZFhY61Tga6E0qASA=="
},
"node_modules/is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"dependencies": {
"has": "^1.0.3"
},
@@ -6972,6 +7335,17 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==",
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -7028,6 +7402,14 @@
"url": "https://github.com/sponsors/wooorm"
}
},
+ "node_modules/is-integer": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz",
+ "integrity": "sha512-RPQc/s9yBHSvpi+hs9dYiJ2cuFeU6x3TyyIp8O2H6SKEltIvJOzRj9ToyvcStDvPR/pS4rxgr1oBFajQjZ2Szg==",
+ "dependencies": {
+ "is-finite": "^1.0.0"
+ }
+ },
"node_modules/is-ip": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz",
@@ -7039,6 +7421,15 @@
"node": ">=8"
}
},
+ "node_modules/is-native": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-native/-/is-native-1.0.1.tgz",
+ "integrity": "sha512-I4z9hx+4u3/zyvpvGtAR+n7SodJugE+i2jiS8yfq1A9QAZY0KldLQz0SBptLC9ti7kBlpghWUwTKE2BA62eCcw==",
+ "dependencies": {
+ "is-nil": "^1.0.0",
+ "to-source-code": "^1.0.0"
+ }
+ },
"node_modules/is-negative-zero": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
@@ -7050,6 +7441,11 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-nil": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-nil/-/is-nil-1.0.1.tgz",
+ "integrity": "sha512-m2Rm8PhUFDNNhgvwZJjJG74a9h5CHU0fkA8WT+WGlCjyEbZ2jPwgb+ZxHu4np284EqNVyOsgppReK4qy/TwEwg=="
+ },
"node_modules/is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -7842,6 +8238,11 @@
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
},
+ "node_modules/lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="
+ },
"node_modules/long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
@@ -7906,6 +8307,11 @@
"es5-ext": "~0.10.2"
}
},
+ "node_modules/mapcap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/mapcap/-/mapcap-1.0.0.tgz",
+ "integrity": "sha512-KcNlZSlFPx+r1jYZmxEbTVymG+dIctf10WmWkuhrhrblM+KMoF77HelwihL5cxYlORye79KoR4IlOOk99lUJ0g=="
+ },
"node_modules/markdown-to-text": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/markdown-to-text/-/markdown-to-text-0.1.1.tgz",
@@ -7936,6 +8342,32 @@
"safe-buffer": "^5.1.2"
}
},
+ "node_modules/measured-core": {
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/measured-core/-/measured-core-1.51.1.tgz",
+ "integrity": "sha512-DZQP9SEwdqqYRvT2slMK81D/7xwdxXosZZBtLVfPSo6y5P672FBTbzHVdN4IQyUkUpcVOR9pIvtUy5Ryl7NKyg==",
+ "dependencies": {
+ "binary-search": "^1.3.3",
+ "optional-js": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 5.12"
+ }
+ },
+ "node_modules/measured-reporting": {
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/measured-reporting/-/measured-reporting-1.51.1.tgz",
+ "integrity": "sha512-JCt+2u6XT1I5lG3SuYqywE0e62DJuAzBcfMzWGUhIYtPQV2Vm4HiYt/durqmzsAbZV181CEs+o/jMKWJKkYIWw==",
+ "dependencies": {
+ "console-log-level": "^1.4.1",
+ "mapcap": "^1.0.0",
+ "measured-core": "^1.51.1",
+ "optional-js": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 5.12"
+ }
+ },
"node_modules/media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -8156,6 +8588,11 @@
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz",
"integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw=="
},
+ "node_modules/module-details-from-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
+ "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="
+ },
"node_modules/moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
@@ -8175,6 +8612,11 @@
"node": "*"
}
},
+ "node_modules/monitor-event-loop-delay": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/monitor-event-loop-delay/-/monitor-event-loop-delay-1.0.0.tgz",
+ "integrity": "sha512-YRIr1exCIfBDLZle8WHOfSo7Xg3M+phcZfq9Fx1L6Abo+atGp7cge5pM7PjyBn4s1oZI/BRD4EMrzQBbPpVb5Q=="
+ },
"node_modules/ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -8454,6 +8896,11 @@
"react": ">= 16.8.0"
}
},
+ "node_modules/next-line": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-line/-/next-line-1.1.0.tgz",
+ "integrity": "sha512-+I10J3wKNoKddNxn0CNpoZ3eTZuqxjNM3b1GImVx22+ePI+Y15P8g/j3WsbP0fhzzrFzrtjOAoq5NCCucswXOQ=="
+ },
"node_modules/next-seo": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/next-seo/-/next-seo-5.3.0.tgz",
@@ -8480,11 +8927,6 @@
"next": "^8.1.1-canary.54 || ^9.0.0 || ^10.0.0-0 || ^11.0.0 || ^12.0.0"
}
},
- "node_modules/nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
- },
"node_modules/nextjs-google-analytics": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/nextjs-google-analytics/-/nextjs-google-analytics-2.2.2.tgz",
@@ -8497,6 +8939,11 @@
"react": ">=17.0.0"
}
},
+ "node_modules/nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
"node_modules/node-addon-api": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
@@ -8636,6 +9083,11 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object-filter-sequence": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/object-filter-sequence/-/object-filter-sequence-1.0.0.tgz",
+ "integrity": "sha512-CsubGNxhIEChNY4cXYuA6KXafztzHqzLLZ/y3Kasf3A+sa3lL9thq3z+7o0pZqzEinjXT6lXDPAfVWI59dUyzQ=="
+ },
"node_modules/object-hash": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
@@ -8644,6 +9096,14 @@
"node": ">= 6"
}
},
+ "node_modules/object-identity-map": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/object-identity-map/-/object-identity-map-1.0.2.tgz",
+ "integrity": "sha512-a2XZDGyYTngvGS67kWnqVdpoaJWsY7C1GhPJvejWAFCsUioTAaiTu8oBad7c6cI4McZxr4CmvnZeycK05iav5A==",
+ "dependencies": {
+ "object.entries": "^1.1.0"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
@@ -8681,7 +9141,6 @@
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
"integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
- "dev": true,
"dependencies": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
@@ -8820,6 +9279,11 @@
"url": "https://github.com/sponsors/panva"
}
},
+ "node_modules/optional-js": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/optional-js/-/optional-js-2.3.0.tgz",
+ "integrity": "sha512-B0LLi+Vg+eko++0z/b8zIv57kp7HKEzaPJo7LowJXMUKYdf+3XJGu/cw03h/JhIOsLnP+cG5QnTHAuicjA5fMw=="
+ },
"node_modules/optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -8837,6 +9301,14 @@
"node": ">= 0.8.0"
}
},
+ "node_modules/original-url": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/original-url/-/original-url-1.2.3.tgz",
+ "integrity": "sha512-BYm+pKYLtS4mVe/mgT3YKGtWV5HzN/XKiaIu1aK4rsxyjuHeTW9N+xVBEpJcY1onB3nccfH0RbzUEoimMqFUHQ==",
+ "dependencies": {
+ "forwarded-parse": "^2.1.0"
+ }
+ },
"node_modules/os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -9362,6 +9834,28 @@
"url": "https://github.com/sponsors/jonschlinkert"
}
},
+ "node_modules/pino": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz",
+ "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==",
+ "dependencies": {
+ "fast-redact": "^3.0.0",
+ "fast-safe-stringify": "^2.0.8",
+ "flatstr": "^1.0.12",
+ "pino-std-serializers": "^3.1.0",
+ "process-warning": "^1.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "sonic-boom": "^1.0.2"
+ },
+ "bin": {
+ "pino": "bin.js"
+ }
+ },
+ "node_modules/pino-std-serializers": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz",
+ "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg=="
+ },
"node_modules/postcss": {
"version": "8.4.5",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
@@ -9470,6 +9964,11 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
+ "node_modules/process-warning": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz",
+ "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="
+ },
"node_modules/prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -9652,6 +10151,11 @@
}
]
},
+ "node_modules/quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"node_modules/quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
@@ -10125,6 +10629,11 @@
"url": "https://github.com/sponsors/mysticatea"
}
},
+ "node_modules/relative-microtime": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/relative-microtime/-/relative-microtime-2.0.0.tgz",
+ "integrity": "sha512-l18ha6HEZc+No/uK4GyAnNxgKW7nvEe35IaeN54sShMojtqik2a6GbTyuiezkjpPaqP874Z3lW5ysBo5irz4NA=="
+ },
"node_modules/remarkable": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz",
@@ -10236,11 +10745,11 @@
"integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A=="
},
"node_modules/resolve": {
- "version": "1.22.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"dependencies": {
- "is-core-module": "^2.8.1",
+ "is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
},
@@ -10311,6 +10820,11 @@
"node": ">=0.10.0"
}
},
+ "node_modules/rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
+ },
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -10772,6 +11286,11 @@
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
"integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg=="
},
+ "node_modules/set-cookie-serde": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-cookie-serde/-/set-cookie-serde-1.0.0.tgz",
+ "integrity": "sha512-Vq8e5GsupfJ7okHIvEPcfs5neCo7MZ1ZuWrO3sllYi3DOWt6bSSCpADzqXjz3k0fXehnoFIrmmhty9IN6U6BXQ=="
+ },
"node_modules/setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -10794,6 +11313,11 @@
"sha.js": "bin.js"
}
},
+ "node_modules/shallow-clone-shim": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shallow-clone-shim/-/shallow-clone-shim-2.0.0.tgz",
+ "integrity": "sha512-YRNymdiL3KGOoS67d73TEmk4tdPTO9GSMCoiphQsTcC9EtC+AOmMPjkyBkRoCJfW9ASsaZw1craaiw1dPN2D3Q=="
+ },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -10882,6 +11406,15 @@
"node": ">=8"
}
},
+ "node_modules/sonic-boom": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz",
+ "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==",
+ "dependencies": {
+ "atomic-sleep": "^1.0.0",
+ "flatstr": "^1.0.12"
+ }
+ },
"node_modules/source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -10920,6 +11453,11 @@
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
+ "node_modules/sql-summary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sql-summary/-/sql-summary-1.0.1.tgz",
+ "integrity": "sha512-IpCr2tpnNkP3Jera4ncexsZUp0enJBLr+pHCyTweMUBrbJsTgQeLWx1FXLhoBj/MvcnUQpkgOn2EY8FKOkUzww=="
+ },
"node_modules/sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
@@ -10950,6 +11488,11 @@
"integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==",
"deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility"
},
+ "node_modules/stackframe": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
+ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="
+ },
"node_modules/statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
@@ -10958,6 +11501,14 @@
"node": ">= 0.8"
}
},
+ "node_modules/stream-chopper": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/stream-chopper/-/stream-chopper-3.0.1.tgz",
+ "integrity": "sha512-f7h+ly8baAE26iIjcp3VbnBkbIRGtrvV0X0xxFM/d7fwLTYnLzDPTXRKNxa2HZzohOrc96NTrR+FaV3mzOelNA==",
+ "dependencies": {
+ "readable-stream": "^3.0.6"
+ }
+ },
"node_modules/stream-to-it": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz",
@@ -10982,6 +11533,11 @@
"safe-buffer": "~5.1.0"
}
},
+ "node_modules/string-similarity": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz",
+ "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ=="
+ },
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -11451,6 +12007,14 @@
"node": ">=8.0"
}
},
+ "node_modules/to-source-code": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/to-source-code/-/to-source-code-1.0.2.tgz",
+ "integrity": "sha512-YzWtjmNIf3E75eZYa7m1SCyl0vgOGoTzdpH3svfa8SUm5rqTgl9hnDolrAGOghCF9P2gsITXQoMrlujOoz+RPw==",
+ "dependencies": {
+ "is-nil": "^1.0.0"
+ }
+ },
"node_modules/toggle-selection": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
@@ -11730,6 +12294,20 @@
"node": ">=12.18"
}
},
+ "node_modules/unicode-byte-truncate": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-byte-truncate/-/unicode-byte-truncate-1.0.0.tgz",
+ "integrity": "sha512-GQgHk6DodEoKddKQdjnv7xKS9G09XCfHWX0R4RKht+EbUMSiVEmtWHGFO8HUm+6NvWik3E2/DG4MxTitOLL64A==",
+ "dependencies": {
+ "is-integer": "^1.0.6",
+ "unicode-substring": "^0.1.0"
+ }
+ },
+ "node_modules/unicode-substring": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-substring/-/unicode-substring-0.1.0.tgz",
+ "integrity": "sha512-36Xaw9wXi7MB/3/EQZZHkZyyiRNa9i3k9YtPAz2KfqMVH2xutdXyMHn4Igarmnvr+wOrfWa/6njhY+jPpXN2EQ=="
+ },
"node_modules/universal-github-app-jwt": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.0.tgz",
@@ -13112,6 +13690,22 @@
"resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.0.tgz",
"integrity": "sha512-mgmE7XBYY/21erpzhexk4Cj1cyTQ9LzvnTxtzM17BJ7ERMNE6W72mQRo0I1Ud8eFJ+RVVIcBNhLFZ3GX4XFz5w=="
},
+ "@elastic/ecs-helpers": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@elastic/ecs-helpers/-/ecs-helpers-1.1.0.tgz",
+ "integrity": "sha512-MDLb2aFeGjg46O5mLpdCzT5yOUDnXToJSrco2ShqGIXxNJaM8uJjX+4nd+hRYV4Vex8YJyDtOFEVBldQct6ndg==",
+ "requires": {
+ "fast-json-stringify": "^2.4.1"
+ }
+ },
+ "@elastic/ecs-pino-format": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/@elastic/ecs-pino-format/-/ecs-pino-format-1.3.0.tgz",
+ "integrity": "sha512-U8D57gPECYoRCcwREsrXKBtqeyFFF/KAwHi4rG1u/oQhAg91Kzw8ZtUQJXD/DMDieLOqtbItFr2FRBWI3t3wog==",
+ "requires": {
+ "@elastic/ecs-helpers": "^1.1.0"
+ }
+ },
"@elastic/elasticsearch": {
"version": "8.2.1",
"resolved": "https://registry.npmjs.org/@elastic/elasticsearch/-/elasticsearch-8.2.1.tgz",
@@ -14144,6 +14738,11 @@
"resolved": "https://registry.npmjs.org/@octokit/webhooks-types/-/webhooks-types-5.5.1.tgz",
"integrity": "sha512-FaBbqZS2e4fCdQvUqeBKpJJOVsRxGcrf0NA91WBXz9GP5/4xgQgdjpbzAcDOSfESBYDYD78HeI5VeihfCW28Ew=="
},
+ "@opentelemetry/api": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.0.tgz",
+ "integrity": "sha512-IgMK9i3sFGNUqPMbjABm0G26g0QCKCUBfglhQ7rQq6WcxbKfEHRcmwsoER4hZcuYqJgkYn2OeuoJIv7Jsftp7g=="
+ },
"@panva/hkdf": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/@panva/hkdf/-/hkdf-1.0.1.tgz",
@@ -14851,6 +15450,41 @@
"dev": true,
"requires": {}
},
+ "after-all-results": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/after-all-results/-/after-all-results-2.0.0.tgz",
+ "integrity": "sha512-2zHEyuhSJOuCrmas9YV0YL/MFCWLxe1dS6k/ENhgYrb/JqyMnadLN4iIAc9kkZrbElMDyyAGH/0J18OPErOWLg=="
+ },
+ "agentkeepalive": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz",
+ "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==",
+ "requires": {
+ "debug": "^4.1.0",
+ "depd": "^1.1.2",
+ "humanize-ms": "^1.2.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "depd": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
+ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ=="
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ }
+ }
+ },
"aggregate-error": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
@@ -14987,11 +15621,48 @@
"resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz",
"integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ=="
},
+ "async-cache": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/async-cache/-/async-cache-1.1.0.tgz",
+ "integrity": "sha512-YDQc4vBn5NFhY6g6HhVshyi3Fy9+SQ5ePnE7JLDJn1DoL+i7ER+vMwtTNOYk9leZkYMnOwpBCWqyLDPw8Aig8g==",
+ "requires": {
+ "lru-cache": "^4.0.0"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
+ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
+ }
+ }
+ },
"async-limiter": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz",
"integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ=="
},
+ "async-value": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/async-value/-/async-value-1.2.2.tgz",
+ "integrity": "sha512-8rwtYe32OAS1W9CTwvknoyts+mc3ta8N7Pi0h7AjkMaKvsFbr39K+gEfZ7Z81aPXQ1sK5M23lgLy1QfZpcpadQ=="
+ },
+ "async-value-promise": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/async-value-promise/-/async-value-promise-1.1.1.tgz",
+ "integrity": "sha512-c2RFDKjJle1rHa0YxN9Ysu97/QBu3Wa+NOejJxsX+1qVDJrkD3JL/GN1B3gaILAEXJXbu/4Z1lcoCHFESe/APA==",
+ "requires": {
+ "async-value": "^1.2.2"
+ }
+ },
"asynckit": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -15002,6 +15673,11 @@
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg=="
},
+ "atomic-sleep": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
+ "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ=="
+ },
"attr-accept": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/attr-accept/-/attr-accept-2.2.2.tgz",
@@ -15066,6 +15742,14 @@
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
},
+ "basic-auth": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
+ "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
"bcrypt-pbkdf": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
@@ -15089,6 +15773,11 @@
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA=="
},
+ "binary-search": {
+ "version": "1.3.6",
+ "resolved": "https://registry.npmjs.org/binary-search/-/binary-search-1.3.6.tgz",
+ "integrity": "sha512-nbE1WxOTTrUWIfsfZ4aHGYu5DOuNkbxGokjV6Z2kxfJK3uaAb8zNK1muzOeipoLHZjInT4Br88BHpzevc681xA=="
+ },
"bl": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/bl/-/bl-5.0.0.tgz",
@@ -15193,6 +15882,14 @@
"fill-range": "^7.0.1"
}
},
+ "breadth-filter": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/breadth-filter/-/breadth-filter-2.0.0.tgz",
+ "integrity": "sha512-thQShDXnFWSk2oVBixRCyrWsFoV5tfOpWKHmxwafHQDNxCfDBk539utpvytNjmlFrTMqz41poLwJvA1MW3z0MQ==",
+ "requires": {
+ "object.entries": "^1.0.4"
+ }
+ },
"brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
@@ -15621,6 +16318,11 @@
"proto-list": "~1.2.1"
}
},
+ "console-log-level": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/console-log-level/-/console-log-level-1.4.1.tgz",
+ "integrity": "sha512-VZzbIORbP+PPcN/gg3DXClTLPLg5Slwd5fL2MIc+o1qZ4BXBvWyc6QxPk6T/Mkr6IVjRpoAGf32XxP3ZWMVRcQ=="
+ },
"content-disposition": {
"version": "0.5.4",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
@@ -15767,8 +16469,7 @@
"core-util-is": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
+ "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
},
"cors": {
"version": "2.8.5",
@@ -16191,6 +16892,126 @@
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
"integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
},
+ "elastic-apm-http-client": {
+ "version": "11.2.0",
+ "resolved": "https://registry.npmjs.org/elastic-apm-http-client/-/elastic-apm-http-client-11.2.0.tgz",
+ "integrity": "sha512-XHXK+gQmd34eRN/ffrml7AN4h1VwujB79WEO2C/J59ufvEk+mT1OGBhl6pntHPUWn4Um52C5m84O6jIXzaQwfw==",
+ "requires": {
+ "agentkeepalive": "^4.2.1",
+ "breadth-filter": "^2.0.0",
+ "end-of-stream": "^1.4.4",
+ "fast-safe-stringify": "^2.0.7",
+ "fast-stream-to-buffer": "^1.0.0",
+ "object-filter-sequence": "^1.0.0",
+ "readable-stream": "^3.4.0",
+ "semver": "^6.3.0",
+ "stream-chopper": "^3.0.1"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ }
+ }
+ },
+ "elastic-apm-node": {
+ "version": "3.42.0",
+ "resolved": "https://registry.npmjs.org/elastic-apm-node/-/elastic-apm-node-3.42.0.tgz",
+ "integrity": "sha512-Q9sugfpaw6jQ8xDeP09LlyF0MwE5k0hphQmUiap+qQKE2jrLvY00zk4WierDQ2GF/AguE6BtRZmXpUELDbHFyA==",
+ "requires": {
+ "@elastic/ecs-pino-format": "^1.2.0",
+ "@opentelemetry/api": "^1.1.0",
+ "after-all-results": "^2.0.0",
+ "async-cache": "^1.1.0",
+ "async-value-promise": "^1.1.1",
+ "basic-auth": "^2.0.1",
+ "cookie": "^0.5.0",
+ "core-util-is": "^1.0.2",
+ "debug": "^4.1.1",
+ "elastic-apm-http-client": "11.2.0",
+ "end-of-stream": "^1.4.4",
+ "error-callsites": "^2.0.4",
+ "error-stack-parser": "^2.0.6",
+ "escape-string-regexp": "^4.0.0",
+ "fast-safe-stringify": "^2.0.7",
+ "http-headers": "^3.0.2",
+ "is-native": "^1.0.1",
+ "lru-cache": "^6.0.0",
+ "measured-reporting": "^1.51.1",
+ "module-details-from-path": "^1.0.3",
+ "monitor-event-loop-delay": "^1.0.0",
+ "object-filter-sequence": "^1.0.0",
+ "object-identity-map": "^1.0.2",
+ "original-url": "^1.2.3",
+ "pino": "^6.11.2",
+ "relative-microtime": "^2.0.0",
+ "resolve": "^1.22.1",
+ "semver": "^6.3.0",
+ "set-cookie-serde": "^1.0.0",
+ "shallow-clone-shim": "^2.0.0",
+ "source-map": "^0.8.0-beta.0",
+ "sql-summary": "^1.0.1",
+ "traverse": "^0.6.6",
+ "unicode-byte-truncate": "^1.0.0"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
+ "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw=="
+ },
+ "debug": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
+ "requires": {
+ "ms": "2.1.2"
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ },
+ "source-map": {
+ "version": "0.8.0-beta.0",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
+ "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
+ "requires": {
+ "whatwg-url": "^7.0.0"
+ }
+ },
+ "tr46": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
+ "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "webidl-conversions": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
+ "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg=="
+ },
+ "whatwg-url": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
+ "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
+ "requires": {
+ "lodash.sortby": "^4.7.0",
+ "tr46": "^1.0.1",
+ "webidl-conversions": "^4.0.2"
+ }
+ }
+ }
+ },
"electron-fetch": {
"version": "1.9.1",
"resolved": "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz",
@@ -16255,6 +17076,11 @@
"resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz",
"integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA=="
},
+ "error-callsites": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/error-callsites/-/error-callsites-2.0.4.tgz",
+ "integrity": "sha512-V877Ch4FC4FN178fDK1fsrHN4I1YQIBdtjKrHh3BUHMnh3SMvwUVrqkaOgDpUuevgSNna0RBq6Ox9SGlxYrigA=="
+ },
"error-ex": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
@@ -16263,6 +17089,14 @@
"is-arrayish": "^0.2.1"
}
},
+ "error-stack-parser": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz",
+ "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==",
+ "requires": {
+ "stackframe": "^1.3.4"
+ }
+ },
"es-abstract": {
"version": "1.19.2",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz",
@@ -17017,17 +17851,40 @@
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
"integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
},
+ "fast-json-stringify": {
+ "version": "2.7.13",
+ "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-2.7.13.tgz",
+ "integrity": "sha512-ar+hQ4+OIurUGjSJD1anvYSDcUflywhKjfxnsW4TBTD7+u0tJufv6DKRWoQk3vI6YBOWMoz0TQtfbe7dxbQmvA==",
+ "requires": {
+ "ajv": "^6.11.0",
+ "deepmerge": "^4.2.2",
+ "rfdc": "^1.2.0",
+ "string-similarity": "^4.0.1"
+ }
+ },
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
"integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
"dev": true
},
+ "fast-redact": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.1.2.tgz",
+ "integrity": "sha512-+0em+Iya9fKGfEQGcd62Yv6onjBmmhV1uh86XVfOU8VwAe6kaFdQCWI9s0/Nnugx5Vd9tdbZ7e6gE2tR9dzXdw=="
+ },
"fast-safe-stringify": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz",
- "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==",
- "dev": true
+ "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="
+ },
+ "fast-stream-to-buffer": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fast-stream-to-buffer/-/fast-stream-to-buffer-1.0.0.tgz",
+ "integrity": "sha512-bI/544WUQlD2iXBibQbOMSmG07Hay7YrpXlKaeGTPT7H7pC0eitt3usak5vUwEvCGK/O7rUAM3iyQValGU22TQ==",
+ "requires": {
+ "end-of-stream": "^1.4.1"
+ }
},
"fastq": {
"version": "1.13.0",
@@ -17127,6 +17984,11 @@
"rimraf": "^3.0.2"
}
},
+ "flatstr": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/flatstr/-/flatstr-1.0.12.tgz",
+ "integrity": "sha512-4zPxDyhCyiN2wIAtSLI6gc82/EjqZc1onI4Mz/l0pWrAlsSfYH/2ZIcU+e3oA2wDwbzIWNKwa23F8rh6+DRWkw=="
+ },
"flatted": {
"version": "3.2.5",
"resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz",
@@ -17203,6 +18065,11 @@
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
"integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
},
+ "forwarded-parse": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/forwarded-parse/-/forwarded-parse-2.1.2.tgz",
+ "integrity": "sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw=="
+ },
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
@@ -17584,6 +18451,14 @@
"toidentifier": "1.0.1"
}
},
+ "http-headers": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/http-headers/-/http-headers-3.0.2.tgz",
+ "integrity": "sha512-87E1I+2Wg4dxxz4rcxElo3dxO/w1ZtgL1yA0Sb6vH3qU16vRKq1NjWQv9SCY3ly2OQROcoxHZOUpmelS+k6wOw==",
+ "requires": {
+ "next-line": "^1.1.0"
+ }
+ },
"http-https": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/http-https/-/http-https-1.0.0.tgz",
@@ -17608,6 +18483,14 @@
"resolve-alpn": "^1.2.0"
}
},
+ "humanize-ms": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
+ "requires": {
+ "ms": "^2.0.0"
+ }
+ },
"i18next": {
"version": "21.6.14",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-21.6.14.tgz",
@@ -18005,9 +18888,9 @@
"integrity": "sha512-YttjnrswnUYRVJvxCvu8z+PGMUSzC2JttP0OEXezlAEdp3EXzhf7IZ3j0gRAybJBQupedIZFhY61Tga6E0qASA=="
},
"is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz",
+ "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==",
"requires": {
"has": "^1.0.3"
}
@@ -18040,6 +18923,11 @@
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI="
},
+ "is-finite": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz",
+ "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w=="
+ },
"is-fullwidth-code-point": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
@@ -18076,6 +18964,14 @@
"resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz",
"integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw=="
},
+ "is-integer": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/is-integer/-/is-integer-1.0.7.tgz",
+ "integrity": "sha512-RPQc/s9yBHSvpi+hs9dYiJ2cuFeU6x3TyyIp8O2H6SKEltIvJOzRj9ToyvcStDvPR/pS4rxgr1oBFajQjZ2Szg==",
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
"is-ip": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-ip/-/is-ip-3.1.0.tgz",
@@ -18084,11 +18980,25 @@
"ip-regex": "^4.0.0"
}
},
+ "is-native": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-native/-/is-native-1.0.1.tgz",
+ "integrity": "sha512-I4z9hx+4u3/zyvpvGtAR+n7SodJugE+i2jiS8yfq1A9QAZY0KldLQz0SBptLC9ti7kBlpghWUwTKE2BA62eCcw==",
+ "requires": {
+ "is-nil": "^1.0.0",
+ "to-source-code": "^1.0.0"
+ }
+ },
"is-negative-zero": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
"integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA=="
},
+ "is-nil": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-nil/-/is-nil-1.0.1.tgz",
+ "integrity": "sha512-m2Rm8PhUFDNNhgvwZJjJG74a9h5CHU0fkA8WT+WGlCjyEbZ2jPwgb+ZxHu4np284EqNVyOsgppReK4qy/TwEwg=="
+ },
"is-number": {
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
@@ -18732,6 +19642,11 @@
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w="
},
+ "lodash.sortby": {
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
+ "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="
+ },
"long": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
@@ -18782,6 +19697,11 @@
"es5-ext": "~0.10.2"
}
},
+ "mapcap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/mapcap/-/mapcap-1.0.0.tgz",
+ "integrity": "sha512-KcNlZSlFPx+r1jYZmxEbTVymG+dIctf10WmWkuhrhrblM+KMoF77HelwihL5cxYlORye79KoR4IlOOk99lUJ0g=="
+ },
"markdown-to-text": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/markdown-to-text/-/markdown-to-text-0.1.1.tgz",
@@ -18806,6 +19726,26 @@
"safe-buffer": "^5.1.2"
}
},
+ "measured-core": {
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/measured-core/-/measured-core-1.51.1.tgz",
+ "integrity": "sha512-DZQP9SEwdqqYRvT2slMK81D/7xwdxXosZZBtLVfPSo6y5P672FBTbzHVdN4IQyUkUpcVOR9pIvtUy5Ryl7NKyg==",
+ "requires": {
+ "binary-search": "^1.3.3",
+ "optional-js": "^2.0.0"
+ }
+ },
+ "measured-reporting": {
+ "version": "1.51.1",
+ "resolved": "https://registry.npmjs.org/measured-reporting/-/measured-reporting-1.51.1.tgz",
+ "integrity": "sha512-JCt+2u6XT1I5lG3SuYqywE0e62DJuAzBcfMzWGUhIYtPQV2Vm4HiYt/durqmzsAbZV181CEs+o/jMKWJKkYIWw==",
+ "requires": {
+ "console-log-level": "^1.4.1",
+ "mapcap": "^1.0.0",
+ "measured-core": "^1.51.1",
+ "optional-js": "^2.0.0"
+ }
+ },
"media-typer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -18979,6 +19919,11 @@
"resolved": "https://registry.npmjs.org/mock-fs/-/mock-fs-4.14.0.tgz",
"integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw=="
},
+ "module-details-from-path": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
+ "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="
+ },
"moment": {
"version": "2.29.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
@@ -18992,6 +19937,11 @@
"moment": ">= 2.9.0"
}
},
+ "monitor-event-loop-delay": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/monitor-event-loop-delay/-/monitor-event-loop-delay-1.0.0.tgz",
+ "integrity": "sha512-YRIr1exCIfBDLZle8WHOfSo7Xg3M+phcZfq9Fx1L6Abo+atGp7cge5pM7PjyBn4s1oZI/BRD4EMrzQBbPpVb5Q=="
+ },
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
@@ -19195,6 +20145,11 @@
"react-i18next": "^11.15.5"
}
},
+ "next-line": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/next-line/-/next-line-1.1.0.tgz",
+ "integrity": "sha512-+I10J3wKNoKddNxn0CNpoZ3eTZuqxjNM3b1GImVx22+ePI+Y15P8g/j3WsbP0fhzzrFzrtjOAoq5NCCucswXOQ=="
+ },
"next-seo": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/next-seo/-/next-seo-5.3.0.tgz",
@@ -19214,11 +20169,6 @@
"cors": "^2.8.5"
}
},
- "nice-try": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
- "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
- },
"nextjs-google-analytics": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/nextjs-google-analytics/-/nextjs-google-analytics-2.2.2.tgz",
@@ -19227,6 +20177,11 @@
"fsevents": "^2.3.2"
}
},
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
+ },
"node-addon-api": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
@@ -19314,11 +20269,24 @@
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
},
+ "object-filter-sequence": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/object-filter-sequence/-/object-filter-sequence-1.0.0.tgz",
+ "integrity": "sha512-CsubGNxhIEChNY4cXYuA6KXafztzHqzLLZ/y3Kasf3A+sa3lL9thq3z+7o0pZqzEinjXT6lXDPAfVWI59dUyzQ=="
+ },
"object-hash": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
"integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw=="
},
+ "object-identity-map": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/object-identity-map/-/object-identity-map-1.0.2.tgz",
+ "integrity": "sha512-a2XZDGyYTngvGS67kWnqVdpoaJWsY7C1GhPJvejWAFCsUioTAaiTu8oBad7c6cI4McZxr4CmvnZeycK05iav5A==",
+ "requires": {
+ "object.entries": "^1.1.0"
+ }
+ },
"object-inspect": {
"version": "1.12.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
@@ -19344,7 +20312,6 @@
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.5.tgz",
"integrity": "sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==",
- "dev": true,
"requires": {
"call-bind": "^1.0.2",
"define-properties": "^1.1.3",
@@ -19447,6 +20414,11 @@
"oidc-token-hash": "^5.0.1"
}
},
+ "optional-js": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/optional-js/-/optional-js-2.3.0.tgz",
+ "integrity": "sha512-B0LLi+Vg+eko++0z/b8zIv57kp7HKEzaPJo7LowJXMUKYdf+3XJGu/cw03h/JhIOsLnP+cG5QnTHAuicjA5fMw=="
+ },
"optionator": {
"version": "0.9.1",
"resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
@@ -19461,6 +20433,14 @@
"word-wrap": "^1.2.3"
}
},
+ "original-url": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/original-url/-/original-url-1.2.3.tgz",
+ "integrity": "sha512-BYm+pKYLtS4mVe/mgT3YKGtWV5HzN/XKiaIu1aK4rsxyjuHeTW9N+xVBEpJcY1onB3nccfH0RbzUEoimMqFUHQ==",
+ "requires": {
+ "forwarded-parse": "^2.1.0"
+ }
+ },
"os-tmpdir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
@@ -19847,6 +20827,25 @@
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="
},
+ "pino": {
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/pino/-/pino-6.14.0.tgz",
+ "integrity": "sha512-iuhEDel3Z3hF9Jfe44DPXR8l07bhjuFY3GMHIXbjnY9XcafbyDDwl2sN2vw2GjMPf5Nkoe+OFao7ffn9SXaKDg==",
+ "requires": {
+ "fast-redact": "^3.0.0",
+ "fast-safe-stringify": "^2.0.8",
+ "flatstr": "^1.0.12",
+ "pino-std-serializers": "^3.1.0",
+ "process-warning": "^1.0.0",
+ "quick-format-unescaped": "^4.0.3",
+ "sonic-boom": "^1.0.2"
+ }
+ },
+ "pino-std-serializers": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-3.2.0.tgz",
+ "integrity": "sha512-EqX4pwDPrt3MuOAAUBMU0Tk5kR/YcCM5fNPEzgCO2zJ5HfX0vbiH9HbJglnyeQsN96Kznae6MWD47pZB5avTrg=="
+ },
"postcss": {
"version": "8.4.5",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
@@ -19920,6 +20919,11 @@
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
+ "process-warning": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz",
+ "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q=="
+ },
"prop-types": {
"version": "15.8.1",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz",
@@ -20059,6 +21063,11 @@
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true
},
+ "quick-format-unescaped": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
+ "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg=="
+ },
"quick-lru": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz",
@@ -20414,6 +21423,11 @@
"integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==",
"dev": true
},
+ "relative-microtime": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/relative-microtime/-/relative-microtime-2.0.0.tgz",
+ "integrity": "sha512-l18ha6HEZc+No/uK4GyAnNxgKW7nvEe35IaeN54sShMojtqik2a6GbTyuiezkjpPaqP874Z3lW5ysBo5irz4NA=="
+ },
"remarkable": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz",
@@ -20503,11 +21517,11 @@
"integrity": "sha512-Zu1xbUt3/OPwsXL46hvOOoQrap2azE7ZQbokq61BQfiXvhewsKDwhMeZjTX9sX0nvw1t/U5Audyn1I9P/m9z0A=="
},
"resolve": {
- "version": "1.22.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
+ "version": "1.22.1",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz",
+ "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==",
"requires": {
- "is-core-module": "^2.8.1",
+ "is-core-module": "^2.9.0",
"path-parse": "^1.0.7",
"supports-preserve-symlinks-flag": "^1.0.0"
}
@@ -20558,6 +21572,11 @@
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true
},
+ "rfdc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz",
+ "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA=="
+ },
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
@@ -20885,6 +21904,11 @@
"resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.8.tgz",
"integrity": "sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg=="
},
+ "set-cookie-serde": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/set-cookie-serde/-/set-cookie-serde-1.0.0.tgz",
+ "integrity": "sha512-Vq8e5GsupfJ7okHIvEPcfs5neCo7MZ1ZuWrO3sllYi3DOWt6bSSCpADzqXjz3k0fXehnoFIrmmhty9IN6U6BXQ=="
+ },
"setimmediate": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz",
@@ -20904,6 +21928,11 @@
"safe-buffer": "^5.0.1"
}
},
+ "shallow-clone-shim": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shallow-clone-shim/-/shallow-clone-shim-2.0.0.tgz",
+ "integrity": "sha512-YRNymdiL3KGOoS67d73TEmk4tdPTO9GSMCoiphQsTcC9EtC+AOmMPjkyBkRoCJfW9ASsaZw1craaiw1dPN2D3Q=="
+ },
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -20965,6 +21994,15 @@
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
+ "sonic-boom": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-1.4.1.tgz",
+ "integrity": "sha512-LRHh/A8tpW7ru89lrlkU4AszXt1dbwSjVWguGrmlxE7tawVmDBlI1PILMkXAxJTwqhgsEeTHzj36D5CmHgQmNg==",
+ "requires": {
+ "atomic-sleep": "^1.0.0",
+ "flatstr": "^1.0.12"
+ }
+ },
"source-map": {
"version": "0.5.7",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
@@ -20990,6 +22028,11 @@
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g=="
},
+ "sql-summary": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/sql-summary/-/sql-summary-1.0.1.tgz",
+ "integrity": "sha512-IpCr2tpnNkP3Jera4ncexsZUp0enJBLr+pHCyTweMUBrbJsTgQeLWx1FXLhoBj/MvcnUQpkgOn2EY8FKOkUzww=="
+ },
"sshpk": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz",
@@ -21011,11 +22054,24 @@
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz",
"integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w=="
},
+ "stackframe": {
+ "version": "1.3.4",
+ "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz",
+ "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw=="
+ },
"statuses": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
"integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ=="
},
+ "stream-chopper": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/stream-chopper/-/stream-chopper-3.0.1.tgz",
+ "integrity": "sha512-f7h+ly8baAE26iIjcp3VbnBkbIRGtrvV0X0xxFM/d7fwLTYnLzDPTXRKNxa2HZzohOrc96NTrR+FaV3mzOelNA==",
+ "requires": {
+ "readable-stream": "^3.0.6"
+ }
+ },
"stream-to-it": {
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/stream-to-it/-/stream-to-it-0.2.4.tgz",
@@ -21037,6 +22093,11 @@
"safe-buffer": "~5.1.0"
}
},
+ "string-similarity": {
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/string-similarity/-/string-similarity-4.0.4.tgz",
+ "integrity": "sha512-/q/8Q4Bl4ZKAPjj8WerIBJWALKkaPRfrvhfF8k/B23i4nzrlRj2/go1m90In7nG/3XDSbOo0+pu6RvCTM9RGMQ=="
+ },
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -21380,6 +22441,14 @@
"is-number": "^7.0.0"
}
},
+ "to-source-code": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/to-source-code/-/to-source-code-1.0.2.tgz",
+ "integrity": "sha512-YzWtjmNIf3E75eZYa7m1SCyl0vgOGoTzdpH3svfa8SUm5rqTgl9hnDolrAGOghCF9P2gsITXQoMrlujOoz+RPw==",
+ "requires": {
+ "is-nil": "^1.0.0"
+ }
+ },
"toggle-selection": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/toggle-selection/-/toggle-selection-1.0.6.tgz",
@@ -21588,6 +22657,20 @@
"resolved": "https://registry.npmjs.org/undici/-/undici-5.9.1.tgz",
"integrity": "sha512-6fB3a+SNnWEm4CJbgo0/CWR8RGcOCQP68SF4X0mxtYTq2VNN8T88NYrWVBAeSX+zb7bny2dx2iYhP3XHi00omg=="
},
+ "unicode-byte-truncate": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unicode-byte-truncate/-/unicode-byte-truncate-1.0.0.tgz",
+ "integrity": "sha512-GQgHk6DodEoKddKQdjnv7xKS9G09XCfHWX0R4RKht+EbUMSiVEmtWHGFO8HUm+6NvWik3E2/DG4MxTitOLL64A==",
+ "requires": {
+ "is-integer": "^1.0.6",
+ "unicode-substring": "^0.1.0"
+ }
+ },
+ "unicode-substring": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-substring/-/unicode-substring-0.1.0.tgz",
+ "integrity": "sha512-36Xaw9wXi7MB/3/EQZZHkZyyiRNa9i3k9YtPAz2KfqMVH2xutdXyMHn4Igarmnvr+wOrfWa/6njhY+jPpXN2EQ=="
+ },
"universal-github-app-jwt": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.0.tgz",
diff --git a/package.json b/package.json
index 1ab05851c0..7ad1fec090 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,7 @@
"migrate": "sequelize db:migrate",
"migrate:undo": "sequelize db:migrate:undo",
"clean": "npm cache clean --force && rm -rf .next",
- "dev": "cross-env NODE_OPTIONS='--inspect' next dev",
+ "dev": "cross-env NODE_OPTIONS=\"--inspect --require=elastic-apm-node/start-next.js\" next dev",
"prebuild": "next telemetry disable",
"build": "next build",
"start": "next start",
@@ -50,6 +50,7 @@
"cron": "^1.8.2",
"date-fns": "^2.28.0",
"dotenv": "^16.0.0",
+ "elastic-apm-node": "^3.42.0",
"file-type": "^17.1.1",
"form-data": "^4.0.0",
"formidable": "^2.0.1",
diff --git a/pages/[network]/bounties.tsx b/pages/[network]/bounties.tsx
index 0298f449e1..0341bc260d 100644
--- a/pages/[network]/bounties.tsx
+++ b/pages/[network]/bounties.tsx
@@ -17,7 +17,7 @@ import {BountyEffectsProvider} from "../../contexts/bounty-effects";
import {useBounty} from "../../x-hooks/use-bounty";
-export default function PageDevelopers() {
+export default function BountiesPage() {
useBounty();
const { t } = useTranslation(["common"]);
diff --git a/pages/[network]/index.tsx b/pages/[network]/index.tsx
index 1689f88a75..10b93482df 100644
--- a/pages/[network]/index.tsx
+++ b/pages/[network]/index.tsx
@@ -1,12 +1,22 @@
-import React from "react";
+import { useEffect } from "react";
import {serverSideTranslations} from "next-i18next/serverSideTranslations";
+import { useRouter } from "next/router";
import {GetServerSideProps} from "next/types";
-import PageDevelopers from "pages/[network]/bounties";
+import useNetworkTheme from "x-hooks/use-network-theme";
export default function Home() {
- return ;
+ const { getURLWithNetwork } = useNetworkTheme();
+ const { replace, query } = useRouter();
+
+ useEffect(() => {
+ replace(getURLWithNetwork(`/bounties`, {
+ network: query?.network
+ }));
+ }, []);
+
+ return null;
}
export const getServerSideProps: GetServerSideProps = async ({locale}) => {
diff --git a/pages/_app.tsx b/pages/_app.tsx
index 294b6f4818..95fcab7f25 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -22,17 +22,19 @@ import RootProviders from "contexts";
import "../styles/styles.scss";
import "../node_modules/@primer/css/dist/markdown.css";
import {useRouter} from "next/router";
+import getConfig from "next/config";
function App({ Component, pageProps: { session, ...pageProps } }: AppProps) {
const {asPath} = useRouter();
+ const {publicRuntimeConfig} = getConfig();
if (asPath.includes('api-doc'))
return
return (
<>
-
+
diff --git a/pages/api-doc.tsx b/pages/api-doc.tsx
index 313c98fe00..21e2071af1 100644
--- a/pages/api-doc.tsx
+++ b/pages/api-doc.tsx
@@ -1,8 +1,9 @@
import React from 'react';
-import dynamic from "next/dynamic";
+
import "swagger-ui-react/swagger-ui.css"
import axios from "axios";
import getConfig from "next/config";
+import dynamic from "next/dynamic";
const SwaggerUI = dynamic<{ spec: Record; }>(import('swagger-ui-react'), { ssr: false });
diff --git a/pages/api/_middleware.ts b/pages/api/_middleware.ts
deleted file mode 100644
index 80c49ecd21..0000000000
--- a/pages/api/_middleware.ts
+++ /dev/null
@@ -1,59 +0,0 @@
-import {IncomingHttpHeaders} from "http2";
-import type {NextApiRequest} from "next";
-import {getToken} from "next-auth/jwt";
-import {NextResponse} from "next/server";
-
-interface CustomHeader {
- get: (key: string) => string
-}
-
-type CombinedHeader = IncomingHttpHeaders & CustomHeader;
-
-const testnet = process.env.NEXT_E2E_TESTNET === "true";
-
-const whiteList = {
- POST: [ "auth/_log",
- "auth/signin/github",
- "auth/signout",
- "graphql",
- "issue",
- "network",
- "search/users/address",
- "search/users/all",
- "search/users/login",
- "search/users/total",
- "files",
- "nft",
- "seo",
- "setup/registry" ],
- PUT: [ "network" ]
-};
-
-const UnauthorizedResponse =
- (reason: string) => new Response(JSON.stringify({ reason }), { status: 401, statusText: "Unauthorized" });
-
-export async function middleware(req: NextApiRequest) {
- const method = req.method;
-
- const shouldCheckForToken =
- method !== "GET" && !whiteList[method]?.some(path => (new RegExp(`${path}$`)).test(req.url) );
-
- if (!testnet && shouldCheckForToken) {
- const token = await getToken({req});
-
- if(!token)
- return UnauthorizedResponse("Missing Token");
-
- const requestWallet = (req.headers as CombinedHeader).get("wallet")?.toLowerCase();
- const tokenWallet = (token.wallet as string)?.toLowerCase();
-
- if (tokenWallet && requestWallet !== "" && tokenWallet !== requestWallet)
- return UnauthorizedResponse("Invalid Accounts");
- }
-
- try {
- return NextResponse.next();
- } catch (e) {
- return NextResponse.error();
- }
-}
\ No newline at end of file
diff --git a/pages/api/files/index.ts b/pages/api/files/index.ts
index c0dbdec3e5..92c1dbcca7 100644
--- a/pages/api/files/index.ts
+++ b/pages/api/files/index.ts
@@ -1,10 +1,12 @@
import formidable from "formidable";
import fs from "fs";
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import IpfsStorage from "services/ipfs-service";
+import {Logger} from "../../../services/logging";
+
export const config = {
api: {
bodyParser: false
@@ -49,4 +51,5 @@ async function FilesMethods (req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(FilesMethods)
\ No newline at end of file
+Logger.changeActionName(`Files`);
+export default RouteMiddleware(FilesMethods)
\ No newline at end of file
diff --git a/pages/api/graphql/index.ts b/pages/api/graphql/index.ts
index d2690cfbe1..c082afda5e 100644
--- a/pages/api/graphql/index.ts
+++ b/pages/api/graphql/index.ts
@@ -1,11 +1,11 @@
// import { error as LogError } from "services/logging";
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {getToken} from "next-auth/jwt";
import getConfig from "next/config";
import {Octokit} from "octokit";
-import {error} from "services/logging";
+import {Logger} from "services/logging";
const {serverRuntimeConfig: {authSecret, github: {token: botToken}}} = getConfig();
@@ -23,7 +23,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
return res.status(200).json(result);
} catch(_error) {
- error("GraphQL Proxy", { req, error:_error?.message, token });
+ Logger.error(_error, "Failed", { query, params, useBotToken });
return res.status(200).json(_error.data);
}
@@ -39,4 +39,5 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
}
}
-export default withCors(handler);
\ No newline at end of file
+Logger.changeActionName(`GraphQL`);
+export default RouteMiddleware(handler);
\ No newline at end of file
diff --git a/pages/api/header/networks/index.ts b/pages/api/header/networks/index.ts
index 3442ccf49c..e3dcd2b352 100644
--- a/pages/api/header/networks/index.ts
+++ b/pages/api/header/networks/index.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import models from "db/models";
@@ -22,8 +22,9 @@ async function SearchNetworks(req: NextApiRequest,
default:
res.status(405);
+ break;
}
res.end();
}
-export default withCors(SearchNetworks)
\ No newline at end of file
+export default RouteMiddleware(SearchNetworks)
\ No newline at end of file
diff --git a/pages/api/health/index.ts b/pages/api/health/index.ts
index 791073bd2c..de9a213d51 100644
--- a/pages/api/health/index.ts
+++ b/pages/api/health/index.ts
@@ -1,7 +1,11 @@
import {NextApiRequest, NextApiResponse} from "next";
-export default async function Health(req: NextApiRequest,
- res: NextApiResponse) {
- res.status(204);
+import {Logger} from "services/logging";
+
+Logger.changeActionName(`Health`);
+
+export default function Health(req: NextApiRequest,
+ res: NextApiResponse) {
+ res.status(200);
res.end();
}
diff --git a/pages/api/issue/[...ids].ts b/pages/api/issue/[...ids].ts
index 62bc734915..37fad9f4b0 100644
--- a/pages/api/issue/[...ids].ts
+++ b/pages/api/issue/[...ids].ts
@@ -3,6 +3,8 @@ import {Op} from "sequelize";
import models from "db/models";
+import {RouteMiddleware} from "../../../middleware";
+
async function get(req: NextApiRequest, res: NextApiResponse) {
const {
ids: [repoId, ghId, networkName]
@@ -42,7 +44,7 @@ async function get(req: NextApiRequest, res: NextApiResponse) {
return res.status(200).json(issue);
}
-export default async function GetIssues(req: NextApiRequest,
+export default RouteMiddleware(async function GetIssues(req: NextApiRequest,
res: NextApiResponse) {
switch (req.method.toLowerCase()) {
case "get":
@@ -54,4 +56,4 @@ export default async function GetIssues(req: NextApiRequest,
}
res.end();
-}
+})
diff --git a/pages/api/issue/index.ts b/pages/api/issue/index.ts
index 58fbff33a1..cb7b11286d 100644
--- a/pages/api/issue/index.ts
+++ b/pages/api/issue/index.ts
@@ -10,6 +10,8 @@ import * as RepositoryQueries from "graphql/repository";
import {GraphQlResponse} from "types/octokit";
+import {RouteMiddleware} from "../../../middleware";
+
const {serverRuntimeConfig} = getConfig();
async function post(req: NextApiRequest, res: NextApiResponse) {
@@ -93,7 +95,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
return res.status(200).json(`${repository.id}/${githubId}`);
}
-export default async function Issue(req: NextApiRequest, res: NextApiResponse) {
+export default RouteMiddleware(async function Issue(req: NextApiRequest, res: NextApiResponse) {
switch (req.method.toLowerCase()) {
case "post":
await post(req, res);
@@ -104,4 +106,4 @@ export default async function Issue(req: NextApiRequest, res: NextApiResponse) {
}
res.end();
-}
+})
diff --git a/pages/api/issue/working/index.ts b/pages/api/issue/working/index.ts
index 89b1796a41..c406ab70c2 100644
--- a/pages/api/issue/working/index.ts
+++ b/pages/api/issue/working/index.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import getConfig from "next/config";
import {Octokit} from "octokit";
@@ -13,6 +13,8 @@ import {getPropertyRecursively} from "helpers/object";
import {GraphQlQueryResponseData, GraphQlResponse} from "types/octokit";
+import {Logger} from "../../../../services/logging";
+
const { serverRuntimeConfig } = getConfig();
async function put(req: NextApiRequest, res: NextApiResponse) {
@@ -27,13 +29,13 @@ async function put(req: NextApiRequest, res: NextApiResponse) {
}
});
- if (!network) return res.status(404).json("Invalid network");
+ if (!network) return res.status(404).json({message: "Invalid network"});
const issue = await models.issue.findOne({
where: { issueId, network_id: network.id }
});
- if (!issue) return res.status(404).json("Issue not found");
+ if (!issue) return res.status(404).json({message: "Issue not found"});
if (!issue.working.find((el) => el === String(githubLogin))) {
const repository = await models.repositories.findOne({
@@ -71,7 +73,7 @@ async function put(req: NextApiRequest, res: NextApiResponse) {
return res.status(200).json(comment);
}
- return res.status(409).json("Already working");
+ return res.status(409).json({message: "Already working"});
} catch (error) {
return res
.status(error.response?.status || 500)
@@ -93,4 +95,5 @@ async function Working(req: NextApiRequest,
res.end();
}
-export default withCors(Working)
\ No newline at end of file
+Logger.changeActionName(`Issue/Working`);
+export default RouteMiddleware(Working)
\ No newline at end of file
diff --git a/pages/api/merge-proposal/[id].ts b/pages/api/merge-proposal/[id].ts
index a9f83416b7..16aea903a2 100644
--- a/pages/api/merge-proposal/[id].ts
+++ b/pages/api/merge-proposal/[id].ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import models from "db/models";
@@ -24,4 +24,4 @@ async function MergeProposal(req: NextApiRequest,
}
}
-export default withCors(MergeProposal)
\ No newline at end of file
+export default RouteMiddleware(MergeProposal)
\ No newline at end of file
diff --git a/pages/api/merge-proposal/poll/[...info].ts b/pages/api/merge-proposal/poll/[...info].ts
index 8f9f88f7e0..b0595ccca7 100644
--- a/pages/api/merge-proposal/poll/[...info].ts
+++ b/pages/api/merge-proposal/poll/[...info].ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Bus} from "helpers/bus";
@@ -27,4 +27,4 @@ async function PollMergeProposal(req: NextApiRequest,
}
}
-export default withCors(PollMergeProposal)
\ No newline at end of file
+export default RouteMiddleware(PollMergeProposal)
\ No newline at end of file
diff --git a/pages/api/network/index.ts b/pages/api/network/index.ts
index 8667505a77..4691588be2 100644
--- a/pages/api/network/index.ts
+++ b/pages/api/network/index.ts
@@ -6,12 +6,15 @@ import Sequelize, {Op} from "sequelize";
import Database from "db/models";
-import { handlefindOrCreateTokens, handleRemoveTokens } from "helpers/handleNetworkTokens";
+import {handlefindOrCreateTokens, handleRemoveTokens} from "helpers/handleNetworkTokens";
import {Settings} from "helpers/settings";
import DAO from "services/dao-service";
import IpfsStorage from "services/ipfs-service";
-import {error as LogError} from 'services/logging';
+import {Logger} from 'services/logging';
+
+import {UNAUTHORIZED} from "../../../helpers/error-messages";
+import {LogAccess} from "../../../middleware/log-access";
const {serverRuntimeConfig} = getConfig();
@@ -67,7 +70,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
isDefault
} = req.body;
- const name = _name.replaceAll(" ", "-").toLowerCase()
+ const name = _name?.replaceAll(" ", "-")?.toLowerCase()
if (!botPermission) return res.status(403).json("Bepro-bot authorization needed");
@@ -78,7 +81,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
}
});
- if(hasNetwork){
+ if(hasNetwork) {
return res.status(409).json("Already exists a network created for this wallet");
}
@@ -92,7 +95,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
if (!publicSettings?.contracts?.networkRegistry) return res.status(500).json("Missing network registry contract");
if (!publicSettings?.urls?.web3Provider) return res.status(500).json("Missing web3 provider url");
if (isDefault && creator !== publicSettings?.defaultNetworkConfig?.adminWallet)
- return res.status(401).json("Unauthorized");
+ return res.status(401).json({message: UNAUTHORIZED});
const defaultNetwork = await Database.network.findOne({
where: {
@@ -131,7 +134,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
if (logo?.hash) logoIconHash = logo.hash;
} catch (error) {
- console.error('Failed to store ipfs', error);
+ Logger.error(error, 'Failed to store ipfs');
}
const network = await Database.network.create({
@@ -174,7 +177,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
})
.then(({data}) => invitations.push(data?.id))
.catch((e) => {
- LogError('[GH Add Colaborator Fail]', {e})
+ Logger.error(e, 'Add Collaborator Fail')
return e;
});
}
@@ -189,7 +192,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
invitation_id
})
.catch((e)=>{
- LogError('[GH Accpet Invitation Fail]', {e})
+ Logger.error(e, 'Accept Invitation Fail')
return e;
});
}
@@ -209,7 +212,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
return res.status(200).json("Network created");
} catch (error) {
- LogError("Failed to create network", { error, req });
+ Logger.error(error, "Failed to create network", req.body);
return res.status(500).json(error);
}
}
@@ -235,7 +238,7 @@ async function put(req: NextApiRequest, res: NextApiResponse) {
const isAdminOverriding = !!override;
- if (!accessToken && !isAdminOverriding) return res.status(401).json("Unauthorized user");
+ if (!accessToken && !isAdminOverriding) return res.status(401).json({message: "Unauthorized user"});
const network = await Database.network.findOne({
where: {
@@ -288,7 +291,7 @@ async function put(req: NextApiRequest, res: NextApiResponse) {
} else {
const isRegistryGovernor = await DAOService.isRegistryGovernor(creator);
- if (!isRegistryGovernor) return res.status(403).json("Unauthorized");
+ if (!isRegistryGovernor) return res.status(403).json({message: UNAUTHORIZED});
}
const addingRepos = repositoriesToAdd ? JSON.parse(repositoriesToAdd) : [];
@@ -350,7 +353,7 @@ async function put(req: NextApiRequest, res: NextApiResponse) {
if (logo?.hash) network.fullLogo = full?.hash;
} catch (error) {
- console.error('Failed to store ipfs', error);
+ Logger.error(error, 'Failed to store ipfs');
}
}
@@ -375,7 +378,7 @@ async function put(req: NextApiRequest, res: NextApiResponse) {
...(githubLogin !== owner && { permission: "maintain"} || {})
})
.catch((e) => {
- LogError('[GH Add Colaborator Fail]', {e})
+ Logger.error(e, 'Add collaborator fail')
return e;
});
@@ -398,7 +401,7 @@ async function put(req: NextApiRequest, res: NextApiResponse) {
invitation_id
})
.catch((e)=>{
- LogError('[GH Accpet Invitation Fail]', {e})
+ Logger.error(e, 'Accept invitation fail', {e})
return e;
});
}
@@ -470,4 +473,5 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(handler)
\ No newline at end of file
+Logger.changeActionName(`Network`);
+export default LogAccess(withCors(handler));
\ No newline at end of file
diff --git a/pages/api/nft/index.ts b/pages/api/nft/index.ts
index 521e77c8ed..41ab8ebb8b 100644
--- a/pages/api/nft/index.ts
+++ b/pages/api/nft/index.ts
@@ -1,13 +1,13 @@
import {Bounty, ProposalDetail,} from "@taikai/dappkit";
import BigNumber from "bignumber.js";
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op} from "sequelize";
import models from "db/models";
-import {formatNumberToNScale} from "helpers/formatNumber";
import calculateDistributedAmounts from "helpers/calculateDistributedAmounts";
+import {formatNumberToNScale} from "helpers/formatNumber";
import {Settings} from "helpers/settings";
import DAO from "services/dao-service";
@@ -178,4 +178,4 @@ async function NftMethods(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(NftMethods);
\ No newline at end of file
+export default RouteMiddleware(NftMethods);
\ No newline at end of file
diff --git a/pages/api/payments/index.ts b/pages/api/payments/index.ts
index b751ed1b17..27da1702fd 100644
--- a/pages/api/payments/index.ts
+++ b/pages/api/payments/index.ts
@@ -1,5 +1,5 @@
import {endOfDay, isAfter, parseISO, startOfDay} from "date-fns";
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op} from "sequelize";
@@ -74,4 +74,4 @@ async function Payments(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(Payments)
\ No newline at end of file
+export default RouteMiddleware(Payments)
\ No newline at end of file
diff --git a/pages/api/poll/index.ts b/pages/api/poll/index.ts
index 23c2962683..cce755f93b 100644
--- a/pages/api/poll/index.ts
+++ b/pages/api/poll/index.ts
@@ -2,6 +2,8 @@ import {NextApiRequest, NextApiResponse} from "next";
import {Bus} from "helpers/bus";
+import {RouteMiddleware} from "../../../middleware";
+
async function post(req: NextApiRequest, res: NextApiResponse) {
const { eventName, ...rest } = req.body;
@@ -34,7 +36,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
});
}
-export default async function PollBody(req: NextApiRequest,
+export default RouteMiddleware(async function PollBody(req: NextApiRequest,
res: NextApiResponse) {
switch (req.method.toLowerCase()) {
case "post":
@@ -44,4 +46,4 @@ export default async function PollBody(req: NextApiRequest,
default:
res.status(405);
}
-}
+})
diff --git a/pages/api/pull-request/index.ts b/pages/api/pull-request/index.ts
index 21c5ab726f..1c28b49994 100644
--- a/pages/api/pull-request/index.ts
+++ b/pages/api/pull-request/index.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import getConfig from "next/config";
import {Octokit} from "octokit";
@@ -289,4 +289,4 @@ async function PullRequest(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(PullRequest);
+export default RouteMiddleware(PullRequest);
diff --git a/pages/api/pull-request/merge/index.ts b/pages/api/pull-request/merge/index.ts
index 3ea177a64c..0a96e60a32 100644
--- a/pages/api/pull-request/merge/index.ts
+++ b/pages/api/pull-request/merge/index.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import getConfig from "next/config";
import {Octokit} from "octokit";
@@ -130,4 +130,4 @@ async function PullRequest(req: NextApiRequest,
res.end();
}
-export default withCors(PullRequest)
\ No newline at end of file
+export default RouteMiddleware(PullRequest)
\ No newline at end of file
diff --git a/pages/api/pull-request/review/index.ts b/pages/api/pull-request/review/index.ts
index 53756935e3..316dcefada 100644
--- a/pages/api/pull-request/review/index.ts
+++ b/pages/api/pull-request/review/index.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import getConfig from "next/config";
import {Octokit} from "octokit";
@@ -100,4 +100,4 @@ async function PullRequestReview(req: NextApiRequest,
res.end();
}
-export default withCors(PullRequestReview)
\ No newline at end of file
+export default RouteMiddleware(PullRequestReview)
\ No newline at end of file
diff --git a/pages/api/repos/index.ts b/pages/api/repos/index.ts
index bc1b9e1667..c4148a63a7 100644
--- a/pages/api/repos/index.ts
+++ b/pages/api/repos/index.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op} from "sequelize";
@@ -103,4 +103,4 @@ async function RepoRoute(req: NextApiRequest,
res.end();
}
-export default withCors(RepoRoute)
\ No newline at end of file
+export default RouteMiddleware(RepoRoute)
\ No newline at end of file
diff --git a/pages/api/rss/index.ts b/pages/api/rss/index.ts
index f505206eaa..27a0eba46e 100644
--- a/pages/api/rss/index.ts
+++ b/pages/api/rss/index.ts
@@ -1,15 +1,17 @@
-import { promises as fs} from "fs";
+import {promises as fs} from "fs";
import Handlebars from "handlebars";
import cache from "memory-cache";
-import { NextApiRequest, NextApiResponse } from "next";
+import {NextApiRequest, NextApiResponse} from "next";
import getConfig from "next/config";
import path from "path";
-import { Op } from "sequelize";
+import {Op} from "sequelize";
import models from "db/models";
-import { error as LogError } from 'services/logging';
+import {error as LogError} from 'services/logging';
+
+import {LogAccess} from "../../../middleware/log-access";
const { publicRuntimeConfig } = getConfig();
@@ -103,7 +105,7 @@ async function get(req: NextApiRequest, res: NextApiResponse) {
}
}
-export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+export default LogAccess(async function handler(req: NextApiRequest, res: NextApiResponse) {
switch (req.method.toLowerCase()) {
case "get":
await get(req, res);
@@ -114,4 +116,4 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
}
res.end();
-}
+})
diff --git a/pages/api/search/curators/index.ts b/pages/api/search/curators/index.ts
index 91da3fd8c5..3467fafb99 100644
--- a/pages/api/search/curators/index.ts
+++ b/pages/api/search/curators/index.ts
@@ -1,10 +1,10 @@
-import { withCors } from "middleware";
-import { NextApiRequest, NextApiResponse } from "next";
-import { Op, WhereOptions } from "sequelize";
+import {RouteMiddleware} from "middleware";
+import {NextApiRequest, NextApiResponse} from "next";
+import {Op, WhereOptions} from "sequelize";
import models from "db/models";
-import paginate, { calculateTotalPages } from "helpers/paginate";
+import paginate, {calculateTotalPages} from "helpers/paginate";
async function get(req: NextApiRequest, res: NextApiResponse) {
try {
@@ -76,4 +76,4 @@ async function SearchCurators(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(SearchCurators);
+export default RouteMiddleware(SearchCurators);
diff --git a/pages/api/search/issues/index.ts b/pages/api/search/issues/index.ts
index 2fad4380ae..245d7afc62 100644
--- a/pages/api/search/issues/index.ts
+++ b/pages/api/search/issues/index.ts
@@ -1,5 +1,5 @@
import {subHours, subMonths, subWeeks, subYears} from "date-fns";
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op, Sequelize, WhereOptions} from "sequelize";
@@ -227,4 +227,4 @@ async function SearchIssues(req: NextApiRequest,
res.end();
}
-export default withCors(SearchIssues)
\ No newline at end of file
+export default RouteMiddleware(SearchIssues)
\ No newline at end of file
diff --git a/pages/api/search/issues/recent.ts b/pages/api/search/issues/recent.ts
index cffb98c3ff..09e6aa5cc0 100644
--- a/pages/api/search/issues/recent.ts
+++ b/pages/api/search/issues/recent.ts
@@ -1,4 +1,4 @@
-import {withCors} from 'middleware';
+import {RouteMiddleware} from 'middleware';
import {NextApiRequest, NextApiResponse} from "next";
import {Op, WhereOptions} from "sequelize";
@@ -84,4 +84,4 @@ async function getAll(req: NextApiRequest,
res.end();
}
-export default withCors(getAll)
\ No newline at end of file
+export default RouteMiddleware(getAll)
\ No newline at end of file
diff --git a/pages/api/search/issues/total.ts b/pages/api/search/issues/total.ts
index ffc67f8f8a..158a2aa154 100644
--- a/pages/api/search/issues/total.ts
+++ b/pages/api/search/issues/total.ts
@@ -1,4 +1,4 @@
-import {withCors} from 'middleware';
+import {RouteMiddleware} from 'middleware';
import withJwt from "middleware/withJwt";
import {NextApiRequest, NextApiResponse} from "next";
import {Op, WhereOptions} from "sequelize";
@@ -72,4 +72,4 @@ async function getAll(req: NextApiRequest,
res.end();
}
-export default withCors(withJwt(getAll))
\ No newline at end of file
+export default RouteMiddleware(withJwt(getAll))
\ No newline at end of file
diff --git a/pages/api/search/leaderboard/index.ts b/pages/api/search/leaderboard/index.ts
index 53887b41de..b9fb6231d3 100644
--- a/pages/api/search/leaderboard/index.ts
+++ b/pages/api/search/leaderboard/index.ts
@@ -1,12 +1,12 @@
-import { subMonths, subWeeks, subYears, subHours } from "date-fns";
-import { withCors } from "middleware";
-import { NextApiRequest, NextApiResponse } from "next";
-import { Op, WhereOptions } from "sequelize";
+import {subHours, subMonths, subWeeks, subYears} from "date-fns";
+import {RouteMiddleware} from "middleware";
+import {NextApiRequest, NextApiResponse} from "next";
+import {Op, WhereOptions} from "sequelize";
import models from "db/models";
-import paginate, { calculateTotalPages, paginateArray } from "helpers/paginate";
-import { searchPatternInText } from "helpers/string";
+import paginate, {calculateTotalPages, paginateArray} from "helpers/paginate";
+import {searchPatternInText} from "helpers/string";
async function get(req: NextApiRequest, res: NextApiResponse) {
try {
@@ -110,4 +110,4 @@ async function SearchLeaderBoard(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(SearchLeaderBoard);
+export default RouteMiddleware(SearchLeaderBoard);
diff --git a/pages/api/search/leaderboard/points/index.ts b/pages/api/search/leaderboard/points/index.ts
index 19c9cb1100..46653ddc54 100644
--- a/pages/api/search/leaderboard/points/index.ts
+++ b/pages/api/search/leaderboard/points/index.ts
@@ -1,11 +1,11 @@
-import { withCors } from "middleware";
-import { NextApiRequest, NextApiResponse } from "next";
-import { WhereOptions, Op } from "sequelize";
+import {RouteMiddleware} from "middleware";
+import {NextApiRequest, NextApiResponse} from "next";
+import {Op, WhereOptions} from "sequelize";
import models from "db/models";
-import { calculateLeaderboardScore } from "helpers/leaderboard-score";
-import paginate, { calculateTotalPages } from "helpers/paginate";
+import {calculateLeaderboardScore} from "helpers/leaderboard-score";
+import paginate, {calculateTotalPages} from "helpers/paginate";
async function get(req: NextApiRequest, res: NextApiResponse) {
try {
@@ -64,4 +64,4 @@ async function SearchLeaderBoardPoints(req: NextApiRequest, res: NextApiResponse
res.end();
}
-export default withCors(SearchLeaderBoardPoints);
+export default RouteMiddleware(SearchLeaderBoardPoints);
diff --git a/pages/api/search/networks/active.ts b/pages/api/search/networks/active.ts
index a808dfc348..273ee1ce69 100644
--- a/pages/api/search/networks/active.ts
+++ b/pages/api/search/networks/active.ts
@@ -1,11 +1,11 @@
import BigNumber from "bignumber.js";
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op, WhereOptions} from "sequelize";
import models from "db/models";
-import { paginateArray} from "helpers/paginate";
+import {paginateArray} from "helpers/paginate";
async function get(req: NextApiRequest, res: NextApiResponse) {
const whereCondition: WhereOptions = {};
@@ -83,4 +83,4 @@ async function SearchNetworks(req: NextApiRequest,
res.end();
}
-export default withCors(SearchNetworks)
\ No newline at end of file
+export default RouteMiddleware(SearchNetworks)
\ No newline at end of file
diff --git a/pages/api/search/networks/index.ts b/pages/api/search/networks/index.ts
index fbbd5362e9..b63b87c634 100644
--- a/pages/api/search/networks/index.ts
+++ b/pages/api/search/networks/index.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op, WhereOptions} from "sequelize";
@@ -63,4 +63,4 @@ async function SearchNetworks(req: NextApiRequest,
res.end();
}
-export default withCors(SearchNetworks)
\ No newline at end of file
+export default RouteMiddleware(SearchNetworks)
\ No newline at end of file
diff --git a/pages/api/search/networks/total.ts b/pages/api/search/networks/total.ts
index af836a540d..4e9f076ebd 100644
--- a/pages/api/search/networks/total.ts
+++ b/pages/api/search/networks/total.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op, WhereOptions} from "sequelize";
@@ -39,4 +39,4 @@ async function GetAll(req: NextApiRequest,
res.end();
}
-export default withCors(GetAll)
\ No newline at end of file
+export default RouteMiddleware(GetAll)
\ No newline at end of file
diff --git a/pages/api/search/repositories/index.ts b/pages/api/search/repositories/index.ts
index 39c54b8fff..f0f74653bf 100644
--- a/pages/api/search/repositories/index.ts
+++ b/pages/api/search/repositories/index.ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op, WhereOptions} from "sequelize";
@@ -56,4 +56,4 @@ async function SearchRepositories(req: NextApiRequest,
res.end();
}
-export default withCors(SearchRepositories)
\ No newline at end of file
+export default RouteMiddleware(SearchRepositories)
\ No newline at end of file
diff --git a/pages/api/search/users/[...action].ts b/pages/api/search/users/[...action].ts
index 8a1c110e87..accda188e8 100644
--- a/pages/api/search/users/[...action].ts
+++ b/pages/api/search/users/[...action].ts
@@ -1,4 +1,4 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op} from "sequelize";
@@ -51,4 +51,4 @@ async function SearchUsers(req: NextApiRequest,
res.end();
}
-export default withCors(SearchUsers)
\ No newline at end of file
+export default RouteMiddleware(SearchUsers)
\ No newline at end of file
diff --git a/pages/api/search/users/total.ts b/pages/api/search/users/total.ts
index 3a43fe91ca..359a7e533b 100644
--- a/pages/api/search/users/total.ts
+++ b/pages/api/search/users/total.ts
@@ -1,4 +1,4 @@
-import {withCors} from 'middleware';
+import {RouteMiddleware} from 'middleware';
import {NextApiRequest, NextApiResponse} from "next";
import models from "db/models";
@@ -23,4 +23,4 @@ async function getAll(req: NextApiRequest,
res.end();
}
-export default withCors(getAll)
\ No newline at end of file
+export default RouteMiddleware(getAll)
\ No newline at end of file
diff --git a/pages/api/seo/[...ids].ts b/pages/api/seo/[...ids].ts
index bd7d7b34db..dd8fc7afc6 100644
--- a/pages/api/seo/[...ids].ts
+++ b/pages/api/seo/[...ids].ts
@@ -1,5 +1,5 @@
import axios from "axios";
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
import {Op} from "sequelize";
@@ -59,4 +59,4 @@ async function Seo(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(Seo)
\ No newline at end of file
+export default RouteMiddleware(Seo)
\ No newline at end of file
diff --git a/pages/api/settings/index.ts b/pages/api/settings/index.ts
index cd433b250e..e13725e1c8 100644
--- a/pages/api/settings/index.ts
+++ b/pages/api/settings/index.ts
@@ -4,6 +4,9 @@ import models from "db/models";
import {Settings} from "helpers/settings";
+import {RouteMiddleware} from "../../../middleware";
+import {Logger} from "../../../services/logging";
+
async function get(_req: NextApiRequest, res: NextApiResponse) {
const settings = await models.settings.findAll({
where: { visibility: "public" },
@@ -15,7 +18,9 @@ async function get(_req: NextApiRequest, res: NextApiResponse) {
return res.status(200).json(settingsList.raw());
}
-export default async function handler(req: NextApiRequest, res: NextApiResponse) {
+Logger.changeActionName(`Settings`);
+
+export default RouteMiddleware(async function handler(req: NextApiRequest, res: NextApiResponse) {
switch (req.method) {
case "GET":
await get(req, res);
@@ -26,4 +31,4 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse)
}
res.end();
-}
\ No newline at end of file
+})
\ No newline at end of file
diff --git a/pages/api/setup/registry.ts b/pages/api/setup/registry.ts
index 7472d3dd32..0482ff6963 100644
--- a/pages/api/setup/registry.ts
+++ b/pages/api/setup/registry.ts
@@ -1,14 +1,15 @@
-import { withCors } from "middleware";
-import { NextApiRequest, NextApiResponse } from "next";
+import {NextApiRequest, NextApiResponse} from "next";
import Database from "db/models";
-import { Settings } from "helpers/settings";
+import {Settings} from "helpers/settings";
import DAO from "services/dao-service";
-import {error as LogError, log as Log} from 'services/logging';
+import {error as LogError, log as Log, Logger} from 'services/logging';
-import { SettingsType } from "types/settings";
+import {SettingsType} from "types/settings";
+
+import {LogAccess} from "../../../middleware/log-access";
async function post(req: NextApiRequest, res: NextApiResponse) {
const {
@@ -86,4 +87,6 @@ async function handler(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(handler)
\ No newline at end of file
+Logger.changeActionName(`Setup`);
+
+export default LogAccess(handler)
\ No newline at end of file
diff --git a/pages/api/tokens/index.ts b/pages/api/tokens/index.ts
index 367da5afcf..d4d0a477f7 100644
--- a/pages/api/tokens/index.ts
+++ b/pages/api/tokens/index.ts
@@ -1,10 +1,10 @@
-import {withCors} from "middleware";
+import {RouteMiddleware} from "middleware";
import {NextApiRequest, NextApiResponse} from "next";
-import { Op, Sequelize } from "sequelize";
+import {Op, Sequelize} from "sequelize";
import Database from "db/models";
-import { error as logError } from 'services/logging';
+import {error as logError, Logger} from 'services/logging';
const colToLower = (colName: string) => Sequelize.fn("LOWER", Sequelize.col(colName));
@@ -55,4 +55,5 @@ async function tokensEndPoint(req: NextApiRequest, res: NextApiResponse) {
res.end();
}
-export default withCors(tokensEndPoint);
+Logger.changeActionName(`Tokens`);
+export default RouteMiddleware(tokensEndPoint);
diff --git a/pages/api/user/connect/index.ts b/pages/api/user/connect/index.ts
index 44c4535fc6..aa0795e56c 100644
--- a/pages/api/user/connect/index.ts
+++ b/pages/api/user/connect/index.ts
@@ -6,6 +6,8 @@ import models from "db/models";
import {error as LogError} from "services/logging";
+import {RouteMiddleware} from "../../../../middleware";
+
enum Actions {
REGISTER = "register",
RESET = "reset"
@@ -56,7 +58,7 @@ async function patch(req: NextApiRequest, res: NextApiResponse) {
}
}
-export default async function ConnectUser(req: NextApiRequest, res: NextApiResponse) {
+export default RouteMiddleware(async function ConnectUser(req: NextApiRequest, res: NextApiResponse) {
switch (req.method.toLowerCase()) {
case "patch":
await patch(req, res);
@@ -67,4 +69,4 @@ export default async function ConnectUser(req: NextApiRequest, res: NextApiRespo
}
res.end();
-}
+})
diff --git a/pages/api/user/reset/index.ts b/pages/api/user/reset/index.ts
index 16954578c8..35a512ed5b 100644
--- a/pages/api/user/reset/index.ts
+++ b/pages/api/user/reset/index.ts
@@ -6,6 +6,9 @@ import models from "db/models";
import {error as LogError} from "services/logging";
+import {UNAUTHORIZED} from "../../../../helpers/error-messages";
+import {RouteMiddleware} from "../../../../middleware";
+
async function post(req: NextApiRequest, res: NextApiResponse) {
const {address, githubLogin} = req.body;
@@ -23,7 +26,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
const token = await getToken({req});
if ( headerWallet !== user.address || !token || token?.login !== githubLogin )
- return res.status(401).json("Unauthorized");
+ return res.status(401).json({message: UNAUTHORIZED});
const issuesWithPullRequestsByAccount = await models.issue.findAndCountAll({
where: {
@@ -58,7 +61,7 @@ async function post(req: NextApiRequest, res: NextApiResponse) {
}
}
-export default async function ResetUser(req: NextApiRequest, res: NextApiResponse) {
+export default RouteMiddleware(async function ResetUser(req: NextApiRequest, res: NextApiResponse) {
switch (req.method.toLowerCase()) {
case "post":
await post(req, res);
@@ -69,4 +72,4 @@ export default async function ResetUser(req: NextApiRequest, res: NextApiRespons
}
res.end();
-}
+})
diff --git a/pages/bounty-hall.tsx b/pages/explore.tsx
similarity index 98%
rename from pages/bounty-hall.tsx
rename to pages/explore.tsx
index 84dc6122f7..ca17237167 100644
--- a/pages/bounty-hall.tsx
+++ b/pages/explore.tsx
@@ -14,7 +14,7 @@ import { BountyEffectsProvider } from "contexts/bounty-effects";
import useApi from "x-hooks/use-api";
-export default function BountyHallPage() {
+export default function ExplorePage() {
const { t } = useTranslation(["common", "custom-network", "bounty"]);
const [numberOfNetworks, setNumberOfNetworks] = useState(0);
const [numberOfBounties, setNumberOfBounties] = useState(0);
diff --git a/pages/index.tsx b/pages/index.tsx
index a6f6008406..9586ecaaf2 100644
--- a/pages/index.tsx
+++ b/pages/index.tsx
@@ -10,7 +10,7 @@ export default function Index() {
const { replace } = useRouter();
useEffect(() => {
- replace(`/bounty-hall`);
+ replace(`/explore`);
}, []);
return(
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 129c0b1d0a..4743bec70d 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -62,6 +62,7 @@
"leaderboard": "Leaderboard",
"Oracle": "bv{{token}}",
"new-bounty": "New bounty",
+ "explorer": "Explore",
"get-started": "Get Started",
"connect": "Connect Wallet",
"new-network": "New Network",
diff --git a/services/coingecko.ts b/services/coingecko.ts
index 8f568b4fdd..553c99f51b 100644
--- a/services/coingecko.ts
+++ b/services/coingecko.ts
@@ -100,12 +100,12 @@ async function getCoinPrice(search: string, fiat = settings?.currency.defaultFia
if (!coinEntry)
return 0;
- const price = await COINGECKO_API.get(`/simple/price?ids=digitalprice&vs_currencies=${fiat || 'eur'}`);
+ const price = await COINGECKO_API.get(`/simple/price?ids=${coinEntry.id}&vs_currencies=${fiat || 'eur'}`);
- if (!price?.data?.digitalprice)
+ if (!price?.data?.[coinEntry.id])
return 0;
- return price?.data?.digitalprice[fiat || 'eur'];
+ return price?.data?.[coinEntry.id]?.[fiat || 'eur'];
}
export {
diff --git a/services/logging.ts b/services/logging.ts
index f8389ea7a5..fcbebb5448 100644
--- a/services/logging.ts
+++ b/services/logging.ts
@@ -1,41 +1,77 @@
import {Client} from "@elastic/elasticsearch";
+import {format} from "date-fns";
import getConfig from "next/config";
+
const { serverRuntimeConfig } = getConfig();
-const Levels = {none: '', log: 'log', info: 'info', error: 'error', DEBUG: 'debug'};
-let DebugLevel;
+enum LogLevel {
+ none, error, warn, info, trace, log, debug
+}
-(function (DebugLevel) {
- DebugLevel[DebugLevel["none"] = 0] = "none";
- DebugLevel[DebugLevel["error"] = 1] = "error";
- DebugLevel[DebugLevel["warn"] = 2] = "warn";
- DebugLevel[DebugLevel["info"] = 3] = "info";
- DebugLevel[DebugLevel["log"] = 4] = "log";
-})(DebugLevel || (DebugLevel = {}))
+const consoleMethods = {
+ none: '',
+ log: 'log',
+ info: 'info',
+ error: 'error',
+ DEBUG: 'debug',
+ warn: 'warn',
+ debug: 'debug',
+ trace: 'info'
+};
-export const LOG_LEVEL = serverRuntimeConfig.logLevel ? parseInt(serverRuntimeConfig.logLevel, 10) : DebugLevel.log;
+const LOG_LEVEL = serverRuntimeConfig.logLevel ? parseInt(serverRuntimeConfig.logLevel, 10) : LogLevel.debug;
+const INDEX_STACK_TRACE = serverRuntimeConfig.logStackTrace;
const {url: node, username, password} = serverRuntimeConfig.elasticSearch;
-export const output = (level, message, ...rest) => { // eslint-disable-line
- let _rest;
+export const output = (_level: LogLevel, message, ...rest) => { // eslint-disable-line
+ const level = LogLevel[_level];
+ const method = consoleMethods[level];
- if (rest.some(v => v !== undefined))
- _rest = rest;
+ if (!(LOG_LEVEL && LOG_LEVEL >= _level))
+ return;
- const string = `(${level.toUpperCase()}) (${new Date().toISOString()}) ${message}\n`;
+ const string = `(${level.toUpperCase()}) (${format(new Date(), `dd/MM HH:mm:ss`)}) ${message}`;
- if (LOG_LEVEL && LOG_LEVEL >= +DebugLevel[level])
- console[level](string, _rest ? _rest : ""); // eslint-disable-line
+ console[method](string, ...rest); // eslint-disable-line
if (node && username && password) {
+ if (!INDEX_STACK_TRACE && _level === LogLevel.trace)
+ return; // optionally disable indexing stack traces
+
const client = new Client({node, auth: {username, password} })
- client?.index({ index: "web-network-app", document: {level, timestamp: new Date(), message, rest: _rest}})
+ client?.index({ index: "web-network-app", document: {level, timestamp: new Date(), message, rest}})
.catch(e => console.log(e))
}
}
/* eslint-disable */
-export const info = (message, rest?) => output(Levels.info, message, rest);
-export const error = (message, rest?) => output(Levels.error, message, rest);
-export const log = (message, rest?) => output(Levels.log, message, rest);
\ No newline at end of file
+export const info = (message, ...rest) => output(LogLevel.info, message, ...rest);
+export const error = (message, ...rest) => output(LogLevel.error, message, ...rest);
+export const log = (message, ...rest) => output(LogLevel.log, message, ...rest);
+export const warn = (message, ...rest) => output(LogLevel.warn, message, ...rest);
+export const debug = (message, ...rest) => output(LogLevel.debug, message, ...rest);
+export const trace = (message, ...rest) => output(LogLevel.trace, message, ...rest);
+
+
+export class Logger {
+ static action: string = ``;
+ static changeActionName(action: string) { this.action = action; }
+
+ static _args(...v): [string?, ...any[]] {
+ return [
+ ... Logger.action ? [Logger.action] : [],
+ ...v
+ ]
+ }
+
+ static info(..._args) { info(...this._args(..._args)) }
+ static log(..._args) { log(...this._args(..._args)) }
+ static warn(..._args) { warn(...this._args(..._args)) }
+ static debug(..._args) { debug(...this._args(..._args)) }
+ static trace(..._args) { trace(...this._args(..._args)) }
+ static error(e: Error, ..._args) {
+ error(...this._args(...[e?.toString(), ..._args]))
+ trace(...this._args(...[`Code: ${(e as any).code || `NO_OPCODE`}\n`, e.stack || `NO_STACK_TRACE`, ..._args]));
+ }
+}
\ No newline at end of file
diff --git a/x-hooks/use-analytic-events.ts b/x-hooks/use-analytic-events.ts
index 743898a512..1213e5f742 100644
--- a/x-hooks/use-analytic-events.ts
+++ b/x-hooks/use-analytic-events.ts
@@ -1,8 +1,10 @@
-import {Analytic, EventName} from "../interfaces/analytics";
+import getConfig from "next/config";
import {event} from "nextjs-google-analytics";
-import {analyticEvents} from "../helpers/analytic-events";
+
import {useAppState} from "../contexts/app-state";
-import getConfig from "next/config";
+import {analyticEvents} from "../helpers/analytic-events";
+import {Analytic, EventName} from "../interfaces/analytics";
+
export default function useAnalyticEvents() {
@@ -26,12 +28,12 @@ export default function useAnalyticEvents() {
switch (type) {
- case "ga4":
- if (!publicRuntimeConfig.gaMeasureID)
- return rejectMissingParams(`publicRuntimeConfig.gaMeasureID`);
- return event;
- default:
- return reject(`Missing implementation for ${type}`);
+ case "ga4":
+ if (!publicRuntimeConfig.gaMeasureID)
+ return rejectMissingParams(`publicRuntimeConfig.gaMeasureID`);
+ return event;
+ default:
+ return reject(`Missing implementation for ${type}`);
}
}
@@ -51,14 +53,12 @@ export default function useAnalyticEvents() {
}
if (eventName in analyticEvents)
- return Promise.all(
- analyticEvents[eventName]
+ return Promise.all(analyticEvents[eventName]
.map(getCallback)
.map(call => {
// console.debug(`Pushing ${eventName}`)
return call(eventName, details);
- })
- )
+ }))
.then(() => {
// console.debug(`Event published ${eventName}`, details);
return true;
diff --git a/x-hooks/use-authentication.tsx b/x-hooks/use-authentication.tsx
index 0a2d693611..3d47358878 100644
--- a/x-hooks/use-authentication.tsx
+++ b/x-hooks/use-authentication.tsx
@@ -26,8 +26,9 @@ import useApi from "x-hooks/use-api";
import {useDao} from "x-hooks/use-dao";
import {useNetwork} from "x-hooks/use-network";
import {useTransactions} from "x-hooks/use-transactions";
-import useAnalyticEvents from "./use-analytic-events";
+
import {EventName} from "../interfaces/analytics";
+import useAnalyticEvents from "./use-analytic-events";
export const SESSION_EXPIRATION_KEY = "next-auth.expiration";