diff --git a/.ebextensions/25-load-sgid-env.config b/.ebextensions/25-load-sgid-env.config
new file mode 100644
index 000000000..97aab3d42
--- /dev/null
+++ b/.ebextensions/25-load-sgid-env.config
@@ -0,0 +1,41 @@
+# loads SGID environment variables to a .env file from SSM
+
+commands:
+ 01-create-env:
+ command: "/tmp/create-env.sh"
+
+files:
+ "/tmp/create-env.sh":
+ mode: "000755"
+ content : |
+ #!/bin/bash
+ ENV_NAME=$(/opt/elasticbeanstalk/bin/get-config environment -k SSM_PREFIX)
+
+ ENV_VARS=("SGID_CLIENT_ID" "SGID_CLIENT_SECRET" "SGID_PRIVATE_KEY")
+
+ echo "Set AWS region"
+ aws configure set default.region ap-southeast-1
+
+ TARGET_DIR=/etc/gogovsg
+
+ echo "Checking if ${TARGET_DIR} exists..."
+ if [ ! -d ${TARGET_DIR} ]; then
+ echo "Creating directory ${TARGET_DIR} ..."
+ mkdir -p ${TARGET_DIR}
+ if [ $? -ne 0 ]; then
+ echo 'ERROR: Directory creation failed!'
+ exit 1
+ fi
+ else
+ echo "Directory ${TARGET_DIR} already exists!"
+ fi
+
+ echo "Creating config for ${ENV_NAME} in ${AWS_REGION}"
+
+ for ENV_VAR in "${ENV_VARS[@]}"; do
+ echo "Running for this ${ENV_NAME}"
+ echo "Fetching ${ENV_VAR} from SSM"
+ VALUE=$(aws ssm get-parameter --name "${ENV_NAME}_${ENV_VAR}" --with-decryption --query "Parameter.Value" --output text)
+ echo "${ENV_VAR}=${VALUE}" >> $TARGET_DIR/.env
+ echo "Saved ${ENV_VAR}"
+ done
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ac8abc5e5..1ae2f6826 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -94,7 +94,7 @@ jobs:
- run: npm run test:e2e-headless
integration:
name: Integration Tests
- runs-on: ubuntu-18.04
+ runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v2
- name: Use Node.js
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3fd033a67..73bbacab2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,8 +4,48 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+#### [v1.77.0](https://github.com/opengovsg/GoGovSG/compare/v1.76.1...v1.77.0)
+
+- Experiment go <> sgid integration [`#2247`](https://github.com/opengovsg/GoGovSG/pull/2247)
+- [develop] 1.76.1 [`#2241`](https://github.com/opengovsg/GoGovSG/pull/2241)
+
+#### [v1.76.1](https://github.com/opengovsg/GoGovSG/compare/v1.76.0...v1.76.1)
+
+> 13 July 2023
+
+- build(deps): bump semver from 7.3.8 to 7.5.4 [`#2239`](https://github.com/opengovsg/GoGovSG/pull/2239)
+- build(deps): bump react-vis from 1.11.7 to 1.11.8 [`#2238`](https://github.com/opengovsg/GoGovSG/pull/2238)
+- build(deps): bump @sentry/cli from 1.67.2 to 1.75.2 [`#2231`](https://github.com/opengovsg/GoGovSG/pull/2231)
+- fix: validate email before passing through glob expression [`#2232`](https://github.com/opengovsg/GoGovSG/pull/2232)
+- build(deps): bump dottie from 2.0.2 to 2.0.4 [`#2227`](https://github.com/opengovsg/GoGovSG/pull/2227)
+- build(deps): bump dd-trace from 2.11.0 to 2.30.1 [`#2236`](https://github.com/opengovsg/GoGovSG/pull/2236)
+- build: bump alpine to 3.18 in Dockerfile [`#2234`](https://github.com/opengovsg/GoGovSG/pull/2234)
+- [develop] 1.76.0 [`#2221`](https://github.com/opengovsg/GoGovSG/pull/2221)
+
+#### [v1.76.0](https://github.com/opengovsg/GoGovSG/compare/v1.75.0...v1.76.0)
+
+> 29 May 2023
+
+- feat: admin api v1 - create url [`#2213`](https://github.com/opengovsg/GoGovSG/pull/2213)
+- feat: allow zip files and block password-protected files [`#2203`](https://github.com/opengovsg/GoGovSG/pull/2203)
+- fix: package.json & package-lock.json to reduce vulnerabilities [`#2207`](https://github.com/opengovsg/GoGovSG/pull/2207)
+- [develop] 1.75.0 [`#2201`](https://github.com/opengovsg/GoGovSG/pull/2201)
+
+#### [v1.75.0](https://github.com/opengovsg/GoGovSG/compare/v1.74.0...v1.75.0)
+
+> 13 April 2023
+
+- chore: redirect user to existing link in directory [`#2181`](https://github.com/opengovsg/GoGovSG/pull/2181)
+- feat: add verify Message button to headers [`#2199`](https://github.com/opengovsg/GoGovSG/pull/2199)
+- feat: announcement modal image for memos [`#2198`](https://github.com/opengovsg/GoGovSG/pull/2198)
+- feat: add env var to configure announcement modal button text [`#2195`](https://github.com/opengovsg/GoGovSG/pull/2195)
+- build: update ubuntu to 22 in integration tests [`#2196`](https://github.com/opengovsg/GoGovSG/pull/2196)
+- [develop] 1.74.0 [`#2182`](https://github.com/opengovsg/GoGovSG/pull/2182)
+
#### [v1.74.0](https://github.com/opengovsg/GoGovSG/compare/v1.73.0...v1.74.0)
+> 17 March 2023
+
- chore: fix error messages [`#2185`](https://github.com/opengovsg/GoGovSG/pull/2185)
- [Test] increase e2e test confidence [`#2165`](https://github.com/opengovsg/GoGovSG/pull/2165)
- feat(link-transfer): add request ownership button to directory table [`#2179`](https://github.com/opengovsg/GoGovSG/pull/2179)
diff --git a/Dockerfile b/Dockerfile
index 205208aaa..3c52c84a5 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:16-alpine3.16
+FROM node:16-alpine3.18
LABEL maintainer="Open Government Products" email="go@open.gov.sg"
@@ -20,10 +20,10 @@ EXPOSE 8080
# For dev webpack server only, proxies to localhost:8080
EXPOSE 3000
-RUN apk update && apk add ttf-freefont && rm -rf /var/cache/apk/*
+RUN apk update && apk add font-freefont && rm -rf /var/cache/apk/*
-# Installs IBMPlexSans-Regular.ttf for QRCodeService.
-RUN wget https://github.com/IBM/plex/blob/master/IBM-Plex-Sans/fonts/complete/ttf/IBMPlexSans-Regular.ttf?raw=true -O /usr/share/fonts/TTF/IBMPlexSans-Regular.ttf
+# Installs IBMPlexSans-Regular.otf for QRCodeService.
+RUN wget https://github.com/IBM/plex/blob/master/IBM-Plex-Sans/fonts/complete/otf/IBMPlexSans-Regular.otf?raw=true -O /usr/share/fonts/freefont/IBMPlexSans-Regular.otf
RUN fc-cache -f
# Install libraries
diff --git a/Dockerfile.dev b/Dockerfile.dev
index d740c96c3..b191b35f0 100644
--- a/Dockerfile.dev
+++ b/Dockerfile.dev
@@ -1,4 +1,4 @@
-FROM --platform=amd64 node:16-alpine3.16
+FROM --platform=amd64 node:16-alpine3.18
LABEL maintainer="Open Government Products" email="go@open.gov.sg"
@@ -10,10 +10,10 @@ EXPOSE 8080
# For dev webpack server only, proxies to localhost:8080
EXPOSE 3000
-RUN apk update && apk add ttf-freefont && rm -rf /var/cache/apk/*
+RUN apk update && apk add font-freefont && rm -rf /var/cache/apk/*
-# Installs IBMPlexSans-Regular.ttf for QRCodeService.
-RUN wget https://github.com/IBM/plex/blob/master/IBM-Plex-Sans/fonts/complete/ttf/IBMPlexSans-Regular.ttf?raw=true -O /usr/share/fonts/TTF/IBMPlexSans-Regular.ttf
+# Installs IBMPlexSans-Regular.otf for QRCodeService.
+RUN wget https://github.com/IBM/plex/blob/master/IBM-Plex-Sans/fonts/complete/otf/IBMPlexSans-Regular.otf?raw=true -O /usr/share/fonts/freefont/IBMPlexSans-Regular.otf
RUN fc-cache -f
# Install libraries
diff --git a/Dockerrun.aws.json b/Dockerrun.aws.json
index 894ebd200..8cd0436ac 100644
--- a/Dockerrun.aws.json
+++ b/Dockerrun.aws.json
@@ -8,5 +8,11 @@
{
"ContainerPort": "8080"
}
+ ],
+ "Volumes": [
+ {
+ "HostDirectory": "/etc/gogovsg/.env",
+ "ContainerDirectory": "/usr/src/gogovsg/.env"
+ }
]
}
diff --git a/README.md b/README.md
index cde70a556..6324d3f1f 100644
--- a/README.md
+++ b/README.md
@@ -121,9 +121,10 @@ After these have been set up, set the environment variables according to the tab
|ANNOUNCEMENT_MESSAGE|No|The message in the announcement displayed as a modal to users on login|
|ANNOUNCEMENT_TITLE|No|The title in the announcement displayed as a modal to users on login|
|ANNOUNCEMENT_SUBTITLE|No|The subtitle in the announcement displayed as a modal to users on login|
-|ROTATED_LINKS|No|List of comma separated path of links to rotate on the landing page|
|ANNOUNCEMENT_URL|No|The hyperlink for the button in the announcement displayed as a modal to users on login|
|ANNOUNCEMENT_IMAGE|No|The image in the announcement displayed as a modal to users on login|
+|ANNOUNCEMENT_BUTTON_TEXT|No|The text on the button in the announcement displayed as a modal to users on login|
+|ROTATED_LINKS|No|List of comma separated path of links to rotate on the landing page|
|CSP_REPORT_URI|No|A URI to report CSP violations to.|
|CSP_ONLY_REPORT_VIOLATIONS|No|Only report CSP violations, do not enforce.|
|CLOUDMERSIVE_KEY|No|API key for access to Cloudmersive.|
@@ -143,8 +144,8 @@ After these have been set up, set the environment variables according to the tab
|JOB_POLL_ATTEMPTS|No|Number of attempts for long polling of job status before timeout of 408 is returned. Defaults to 12|
|JOB_POLL_INTERVAL|No|Interval of time between attempts for long polling of job status in ms. Defaults to 5000ms (5s)|
|API_LINK_RANDOM_STR_LENGTH|No|String length of randomly generated shortUrl in API created links. Defaults to 8|
-|FF_EXTERNAL_API|No|Boolean, feature flag for enabling the external API. Defaults to false|
-|ADMIN_API_EMAIL|No|Email with admin API access. Defaults to none.|
+|FF_EXTERNAL_API|No|Boolean, feature flag for enabling the external and admin API. Defaults to false|
+|ADMIN_API_EMAILS|No|Emails with admin API access, separated by commas without spaces. Defaults to none.|
#### Serverless functions for link migration
diff --git a/docker-compose.yml b/docker-compose.yml
index 6b256f9b9..a43fc7d3a 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -28,6 +28,8 @@ services:
- REDIS_SAFE_BROWSING_URI=redis://redis:6379/4
- SESSION_SECRET=thiscouldbeanything
- GA_TRACKING_ID=UA-139330318-1
+ - SGID_API_HOSTNAME=https://api.id.gov.sg
+
- OG_URL=https://go.gov.sg
- VALID_EMAIL_GLOB_EXPRESSION=*.gov.sg
- COOKIE_MAX_AGE=86400000
@@ -38,6 +40,7 @@ services:
- ANNOUNCEMENT_SUBTITLE=Search all go.gov.sg links
- ANNOUNCEMENT_URL=https://go.gov.sg/
- ANNOUNCEMENT_IMAGE=/assets/gov/transition-page/images/directory-browser.svg
+ - ANNOUNCEMENT_BUTTON_TEXT=Try me now
- AWS_S3_BUCKET=local-bucket
- ROTATED_LINKS=whatsapp,passport,spsc,sppr
- AWS_ACCESS_KEY_ID=foobar
@@ -64,7 +67,7 @@ services:
- API_LINK_RANDOM_STR_LENGTH=8
- API_KEY_SALT=$$2b$$10$$9rBKuE4Gb5ravnvP4xjoPu
- FF_EXTERNAL_API=true
- - ADMIN_API_EMAIL
+ - ADMIN_API_EMAILS=integration-test-admin@open.gov.sg
volumes:
- ./public:/usr/src/gogovsg/public
- ./src:/usr/src/gogovsg/src
diff --git a/package-lock.json b/package-lock.json
index 3845ef135..3fad5af14 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,24 +1,25 @@
{
"name": "GoGovSG",
- "version": "1.74.0",
+ "version": "1.77.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
- "version": "1.73.0",
+ "version": "1.77.0",
"license": "MIT",
"dependencies": {
"@datadog/browser-rum": "^4.15.0",
"@hapi/joi": "^17.1.1",
"@material-ui/core": "^4.11.4",
"@material-ui/lab": "^4.0.0-alpha.61",
+ "@opengovsg/sgid-client": "^2.0.0",
"@sentry/react": "^6.11.0",
"@sentry/tracing": "^6.8.0",
"@sentry/webpack-plugin": "^1.15.1",
"@types/express-rate-limit": "^5.1.3",
"@types/papaparse": "^5.3.5",
"archiver": "^5.3.1",
- "aws-sdk": "^2.1101.0",
+ "aws-sdk": "^2.1354.0",
"babel-polyfill": "^6.26.0",
"bcrypt": "^5.1.0",
"body-parser": "^1.19.2",
@@ -28,14 +29,15 @@
"clean-webpack-plugin": "^3.0.0",
"cloudmersive-virus-api-client": "^1.2.2",
"connect-redis": "^6.0.0",
+ "cookie-parser": "^1.4.6",
"cookie-session": "^1.4.0",
"copy-to-clipboard": "^3.3.1",
"core-js": "^3.16.3",
"cross-fetch": "^3.1.5",
- "csv-parse": "^5.3.6",
"datadog-winston": "^1.5.1",
"date-fns-tz": "^1.3.4",
- "dd-trace": "^2.11.0",
+ "dd-trace": "^2.30.1",
+ "dotenv": "^16.3.1",
"ejs": "^3.1.7",
"express": "^4.17.3",
"express-fileupload": "^1.4.0",
@@ -73,7 +75,7 @@
"react-redux": "^7.2.4",
"react-router-dom": "^5.2.0",
"react-typed": "^1.2.0",
- "react-vis": "^1.11.7",
+ "react-vis": "^1.11.8",
"redis": "^3.1.2",
"redux": "^4.1.1",
"redux-devtools-extension": "^2.13.9",
@@ -95,14 +97,15 @@
"@babel/preset-env": "^7.14.7",
"@babel/preset-react": "^7.14.5",
"@babel/preset-typescript": "^7.14.5",
- "@commitlint/cli": "^12.1.4",
- "@commitlint/config-conventional": "^12.1.4",
+ "@commitlint/cli": "^17.6.6",
+ "@commitlint/config-conventional": "^17.6.6",
"@commitlint/travis-cli": "^14.1.0",
"@types/bcrypt": "^5.0.0",
"@types/chart.js": "^2.9.34",
"@types/classnames": "^2.3.1",
"@types/cloudmersive-virus-api-client": "^1.1.1",
"@types/connect-redis": "0.0.17",
+ "@types/cookie-parser": "^1.4.3",
"@types/cookie-session": "^2.0.39",
"@types/d3": "^6.7.3",
"@types/datadog-winston": "^1.0.5",
@@ -141,6 +144,7 @@
"concurrently": "^6.2.0",
"copyfiles": "^2.4.1",
"coveralls": "^3.1.1",
+ "csv-parse": "^5.3.6",
"cz-conventional-changelog": "^3.3.0",
"eslint": "^7.30.0",
"eslint-config-airbnb": "^18.2.1",
@@ -2063,32 +2067,33 @@
}
},
"node_modules/@commitlint/cli": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-12.1.4.tgz",
- "integrity": "sha512-ZR1WjXLvqEffYyBPT0XdnSxtt3Ty1TMoujEtseW5o3vPnkA1UNashAMjQVg/oELqfaiAMnDw8SERPMN0e/0kLg==",
+ "version": "17.6.6",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.6.tgz",
+ "integrity": "sha512-sTKpr2i/Fjs9OmhU+beBxjPavpnLSqZaO6CzwKVq2Tc4UYVTMFgpKOslDhUBVlfAUBfjVO8ParxC/MXkIOevEA==",
"dev": true,
"dependencies": {
- "@commitlint/format": "^12.1.4",
- "@commitlint/lint": "^12.1.4",
- "@commitlint/load": "^12.1.4",
- "@commitlint/read": "^12.1.4",
- "@commitlint/types": "^12.1.4",
- "lodash": "^4.17.19",
+ "@commitlint/format": "^17.4.4",
+ "@commitlint/lint": "^17.6.6",
+ "@commitlint/load": "^17.5.0",
+ "@commitlint/read": "^17.5.1",
+ "@commitlint/types": "^17.4.4",
+ "execa": "^5.0.0",
+ "lodash.isfunction": "^3.0.9",
"resolve-from": "5.0.0",
"resolve-global": "1.0.0",
- "yargs": "^16.2.0"
+ "yargs": "^17.0.0"
},
"bin": {
"commitlint": "cli.js"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/cli/node_modules/ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"engines": {
"node": ">=8"
@@ -2110,14 +2115,17 @@
}
},
"node_modules/@commitlint/cli/node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"dependencies": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/@commitlint/cli/node_modules/color-convert": {
@@ -2148,26 +2156,26 @@
}
},
"node_modules/@commitlint/cli/node_modules/string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/@commitlint/cli/node_modules/strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"dependencies": {
- "ansi-regex": "^5.0.0"
+ "ansi-regex": "^5.0.1"
},
"engines": {
"node": ">=8"
@@ -2200,77 +2208,116 @@
}
},
"node_modules/@commitlint/cli/node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"dependencies": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
},
"engines": {
- "node": ">=10"
+ "node": ">=12"
}
},
"node_modules/@commitlint/cli/node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
"engines": {
- "node": ">=10"
+ "node": ">=12"
}
},
"node_modules/@commitlint/config-conventional": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-12.1.4.tgz",
- "integrity": "sha512-ZIdzmdy4o4WyqywMEpprRCrehjCSQrHkaRTVZV411GyLigFQHlEBSJITAihLAWe88Qy/8SyoIe5uKvAsV5vRqQ==",
+ "version": "17.6.6",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.6.tgz",
+ "integrity": "sha512-phqPz3BDhfj49FUYuuZIuDiw+7T6gNAEy7Yew1IBHqSohVUCWOK2FXMSAExzS2/9X+ET93g0Uz83KjiHDOOFag==",
+ "dev": true,
+ "dependencies": {
+ "conventional-changelog-conventionalcommits": "^5.0.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/config-validator": {
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz",
+ "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==",
"dev": true,
"dependencies": {
- "conventional-changelog-conventionalcommits": "^4.3.1"
+ "@commitlint/types": "^17.4.4",
+ "ajv": "^8.11.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/config-validator/node_modules/ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
}
},
+ "node_modules/@commitlint/config-validator/node_modules/json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ },
"node_modules/@commitlint/ensure": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-12.1.4.tgz",
- "integrity": "sha512-MxHIBuAG9M4xl33qUfIeMSasbv3ktK0W+iygldBxZOL4QSYC2Gn66pZAQMnV9o3V+sVFHoAK2XUKqBAYrgbEqw==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz",
+ "integrity": "sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^12.1.4",
- "lodash": "^4.17.19"
+ "@commitlint/types": "^17.4.4",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.snakecase": "^4.1.1",
+ "lodash.startcase": "^4.4.0",
+ "lodash.upperfirst": "^4.3.1"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/execute-rule": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-12.1.4.tgz",
- "integrity": "sha512-h2S1j8SXyNeABb27q2Ok2vD1WfxJiXvOttKuRA9Or7LN6OQoC/KtT3844CIhhWNteNMu/wE0gkTqGxDVAnJiHg==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz",
+ "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==",
"dev": true,
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/format": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-12.1.4.tgz",
- "integrity": "sha512-h28ucMaoRjVvvgS6Bdf85fa/+ZZ/iu1aeWGCpURnQV7/rrVjkhNSjZwGlCOUd5kDV1EnZ5XdI7L18SUpRjs26g==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz",
+ "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^12.1.4",
- "chalk": "^4.0.0"
+ "@commitlint/types": "^17.4.4",
+ "chalk": "^4.1.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/format/node_modules/ansi-styles": {
@@ -2289,9 +2336,9 @@
}
},
"node_modules/@commitlint/format/node_modules/chalk": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
- "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -2338,49 +2385,71 @@
}
},
"node_modules/@commitlint/is-ignored": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-12.1.4.tgz",
- "integrity": "sha512-uTu2jQU2SKvtIRVLOzMQo3KxDtO+iJ1p0olmncwrqy4AfPLgwoyCP2CiULq5M7xpR3+dE3hBlZXbZTQbD7ycIw==",
+ "version": "17.6.6",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.6.tgz",
+ "integrity": "sha512-4Fw875faAKO+2nILC04yW/2Vy/wlV3BOYCSQ4CEFzriPEprc1Td2LILmqmft6PDEK5Sr14dT9tEzeaZj0V56Gg==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^12.1.4",
- "semver": "7.3.5"
+ "@commitlint/types": "^17.4.4",
+ "semver": "7.5.2"
+ },
+ "engines": {
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/is-ignored/node_modules/semver": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
+ "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
},
"engines": {
- "node": ">=v10"
+ "node": ">=10"
}
},
"node_modules/@commitlint/lint": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-12.1.4.tgz",
- "integrity": "sha512-1kZ8YDp4to47oIPFELUFGLiLumtPNKJigPFDuHt2+f3Q3IKdQ0uk53n3CPl4uoyso/Og/EZvb1mXjFR/Yce4cA==",
+ "version": "17.6.6",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.6.tgz",
+ "integrity": "sha512-5bN+dnHcRLkTvwCHYMS7Xpbr+9uNi0Kq5NR3v4+oPNx6pYXt8ACuw9luhM/yMgHYwW0ajIR20wkPAFkZLEMGmg==",
"dev": true,
"dependencies": {
- "@commitlint/is-ignored": "^12.1.4",
- "@commitlint/parse": "^12.1.4",
- "@commitlint/rules": "^12.1.4",
- "@commitlint/types": "^12.1.4"
+ "@commitlint/is-ignored": "^17.6.6",
+ "@commitlint/parse": "^17.6.5",
+ "@commitlint/rules": "^17.6.5",
+ "@commitlint/types": "^17.4.4"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/load": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-12.1.4.tgz",
- "integrity": "sha512-Keszi0IOjRzKfxT+qES/n+KZyLrxy79RQz8wWgssCboYjKEp+wC+fLCgbiMCYjI5k31CIzIOq/16J7Ycr0C0EA==",
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz",
+ "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==",
"dev": true,
"dependencies": {
- "@commitlint/execute-rule": "^12.1.4",
- "@commitlint/resolve-extends": "^12.1.4",
- "@commitlint/types": "^12.1.4",
- "chalk": "^4.0.0",
- "cosmiconfig": "^7.0.0",
- "lodash": "^4.17.19",
- "resolve-from": "^5.0.0"
+ "@commitlint/config-validator": "^17.4.4",
+ "@commitlint/execute-rule": "^17.4.0",
+ "@commitlint/resolve-extends": "^17.4.4",
+ "@commitlint/types": "^17.4.4",
+ "@types/node": "*",
+ "chalk": "^4.1.0",
+ "cosmiconfig": "^8.0.0",
+ "cosmiconfig-typescript-loader": "^4.0.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0",
+ "resolve-from": "^5.0.0",
+ "ts-node": "^10.8.1",
+ "typescript": "^4.6.4 || ^5.0.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/load/node_modules/ansi-styles": {
@@ -2398,6 +2467,12 @@
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
}
},
+ "node_modules/@commitlint/load/node_modules/argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"node_modules/@commitlint/load/node_modules/chalk": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
@@ -2426,6 +2501,24 @@
"node": ">=7.0.0"
}
},
+ "node_modules/@commitlint/load/node_modules/cosmiconfig": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
+ "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "dev": true,
+ "dependencies": {
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/d-fischer"
+ }
+ },
"node_modules/@commitlint/load/node_modules/has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
@@ -2435,6 +2528,18 @@
"node": ">=8"
}
},
+ "node_modules/@commitlint/load/node_modules/js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "dependencies": {
+ "argparse": "^2.0.1"
+ },
+ "bin": {
+ "js-yaml": "bin/js-yaml.js"
+ }
+ },
"node_modules/@commitlint/load/node_modules/supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -2447,93 +2552,119 @@
"node": ">=8"
}
},
+ "node_modules/@commitlint/load/node_modules/typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
"node_modules/@commitlint/message": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-12.1.4.tgz",
- "integrity": "sha512-6QhalEKsKQ/Y16/cTk5NH4iByz26fqws2ub+AinHPtM7Io0jy4e3rym9iE+TkEqiqWZlUigZnTwbPvRJeSUBaA==",
+ "version": "17.4.2",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz",
+ "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==",
"dev": true,
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/parse": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-12.1.4.tgz",
- "integrity": "sha512-yqKSAsK2V4X/HaLb/yYdrzs6oD/G48Ilt0EJ2Mp6RJeWYxG14w/Out6JrneWnr/cpzemyN5hExOg6+TB19H/Lw==",
+ "version": "17.6.5",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.5.tgz",
+ "integrity": "sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==",
"dev": true,
"dependencies": {
- "@commitlint/types": "^12.1.4",
+ "@commitlint/types": "^17.4.4",
"conventional-changelog-angular": "^5.0.11",
- "conventional-commits-parser": "^3.0.0"
+ "conventional-commits-parser": "^3.2.2"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/read": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-12.1.4.tgz",
- "integrity": "sha512-TnPQSJgD8Aod5Xeo9W4SaYKRZmIahukjcCWJ2s5zb3ZYSmj6C85YD9cR5vlRyrZjj78ItLUV/X4FMWWVIS38Jg==",
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz",
+ "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==",
"dev": true,
"dependencies": {
- "@commitlint/top-level": "^12.1.4",
- "@commitlint/types": "^12.1.4",
- "fs-extra": "^9.0.0",
- "git-raw-commits": "^2.0.0"
+ "@commitlint/top-level": "^17.4.0",
+ "@commitlint/types": "^17.4.4",
+ "fs-extra": "^11.0.0",
+ "git-raw-commits": "^2.0.11",
+ "minimist": "^1.2.6"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
+ }
+ },
+ "node_modules/@commitlint/read/node_modules/minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/@commitlint/resolve-extends": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-12.1.4.tgz",
- "integrity": "sha512-R9CoUtsXLd6KSCfsZly04grsH6JVnWFmVtWgWs1KdDpdV+G3TSs37tColMFqglpkx3dsWu8dsPD56+D9YnJfqg==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz",
+ "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==",
"dev": true,
"dependencies": {
+ "@commitlint/config-validator": "^17.4.4",
+ "@commitlint/types": "^17.4.4",
"import-fresh": "^3.0.0",
- "lodash": "^4.17.19",
+ "lodash.mergewith": "^4.6.2",
"resolve-from": "^5.0.0",
"resolve-global": "^1.0.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/rules": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-12.1.4.tgz",
- "integrity": "sha512-W8m6ZSjg7RuIsIfzQiFHa48X5mcPXeKT9yjBxVmjHvYfS2FDBf1VxCQ7vO0JTVIdV4ohjZ0eKg/wxxUuZHJAZg==",
+ "version": "17.6.5",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.5.tgz",
+ "integrity": "sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==",
"dev": true,
"dependencies": {
- "@commitlint/ensure": "^12.1.4",
- "@commitlint/message": "^12.1.4",
- "@commitlint/to-lines": "^12.1.4",
- "@commitlint/types": "^12.1.4"
+ "@commitlint/ensure": "^17.4.4",
+ "@commitlint/message": "^17.4.2",
+ "@commitlint/to-lines": "^17.4.0",
+ "@commitlint/types": "^17.4.4",
+ "execa": "^5.0.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/to-lines": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-12.1.4.tgz",
- "integrity": "sha512-TParumvbi8bdx3EdLXz2MaX+e15ZgoCqNUgqHsRLwyqLUTRbqCVkzrfadG1UcMQk8/d5aMbb327ZKG3Q4BRorw==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz",
+ "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==",
"dev": true,
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/top-level": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-12.1.4.tgz",
- "integrity": "sha512-d4lTJrOT/dXlpY+NIt4CUl77ciEzYeNVc0VFgUQ6VA+b1rqYD2/VWFjBlWVOrklxtSDeKyuEhs36RGrppEFAvg==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz",
+ "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==",
"dev": true,
"dependencies": {
"find-up": "^5.0.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/top-level/node_modules/find-up": {
@@ -2893,26 +3024,6 @@
"node": ">=7.0.0"
}
},
- "node_modules/@commitlint/travis-cli/node_modules/conventional-commits-parser": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz",
- "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==",
- "dev": true,
- "dependencies": {
- "is-text-path": "^1.0.1",
- "JSONStream": "^1.0.4",
- "lodash": "^4.17.15",
- "meow": "^8.0.0",
- "split2": "^3.0.0",
- "through2": "^4.0.0"
- },
- "bin": {
- "conventional-commits-parser": "cli.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/@commitlint/travis-cli/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -3021,6 +3132,21 @@
"node": ">=8"
}
},
+ "node_modules/@commitlint/travis-cli/node_modules/semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@commitlint/travis-cli/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -3126,15 +3252,15 @@
}
},
"node_modules/@commitlint/types": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-12.1.4.tgz",
- "integrity": "sha512-KRIjdnWNUx6ywz+SJvjmNCbQKcKP6KArhjZhY2l+CWKxak0d77SOjggkMwFTiSgLODOwmuLTbarR2ZfWPiPMlw==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz",
+ "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==",
"dev": true,
"dependencies": {
- "chalk": "^4.0.0"
+ "chalk": "^4.1.0"
},
"engines": {
- "node": ">=v10"
+ "node": ">=v14"
}
},
"node_modules/@commitlint/types/node_modules/ansi-styles": {
@@ -3153,9 +3279,9 @@
}
},
"node_modules/@commitlint/types/node_modules/chalk": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
- "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"dependencies": {
"ansi-styles": "^4.1.0",
@@ -3201,27 +3327,28 @@
"node": ">=8"
}
},
- "node_modules/@cspotcode/source-map-consumer": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
- "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
- "dev": true,
- "engines": {
- "node": ">= 12"
- }
- },
"node_modules/@cspotcode/source-map-support": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
- "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
"dependencies": {
- "@cspotcode/source-map-consumer": "0.8.0"
+ "@jridgewell/trace-mapping": "0.3.9"
},
"engines": {
"node": ">=12"
}
},
+ "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ },
"node_modules/@dabh/diagnostics": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz",
@@ -3255,60 +3382,69 @@
}
},
"node_modules/@datadog/native-appsec": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@datadog/native-appsec/-/native-appsec-1.2.1.tgz",
- "integrity": "sha512-jF+k7xhBmJIYYLtjvhCey08RBbItTG7O2zcSCDGFffhvCvo3ZOoou+IKtAm9z+U7hOoeOmD+Xg+h29xj/BB9MA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@datadog/native-appsec/-/native-appsec-3.2.0.tgz",
+ "integrity": "sha512-biAa7EFfuavjSWgSQaCit9CqGzr6Af5nhzfNNGJ38Y/Y387hDvLivAR374kK1z6XoxGZEOa+XPbVogmV/2Bcjw==",
"hasInstallScript": true,
"dependencies": {
- "detect-libc": "^1.0.3",
- "minimist": "^1.2.6",
- "tar": "^6.1.11"
- },
- "bin": {
- "appsec-reinstall": "bin/appsec-reinstall.js"
+ "node-gyp-build": "^3.9.0"
},
"engines": {
"node": ">=12"
}
},
- "node_modules/@datadog/native-appsec/node_modules/minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ "node_modules/@datadog/native-iast-rewriter": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@datadog/native-iast-rewriter/-/native-iast-rewriter-2.0.1.tgz",
+ "integrity": "sha512-Mm+FG3XxEbPrAfJQPOMHts7iZZXRvg9gnGeeFRGkyirmRcQcOpZO4wFe/8K61DUVa5pXpgAJQ2ZkBGYF1O9STg==",
+ "dependencies": {
+ "node-gyp-build": "^4.5.0"
+ },
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/@datadog/native-iast-rewriter/node_modules/node-gyp-build": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
+ "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==",
+ "bin": {
+ "node-gyp-build": "bin.js",
+ "node-gyp-build-optional": "optional.js",
+ "node-gyp-build-test": "build-test.js"
+ }
+ },
+ "node_modules/@datadog/native-iast-taint-tracking": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@datadog/native-iast-taint-tracking/-/native-iast-taint-tracking-1.5.0.tgz",
+ "integrity": "sha512-SOWIk1M6PZH0osNB191Voz2rKBPoF5hISWVSK9GiJPrD40+xjib1Z/bFDV7EkDn3kjOyordSBdNPG5zOqZJdyg==",
+ "dependencies": {
+ "node-gyp-build": "^3.9.0"
+ }
},
"node_modules/@datadog/native-metrics": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@datadog/native-metrics/-/native-metrics-1.4.0.tgz",
- "integrity": "sha512-bkD74/9LVhW+N5h9suaPAOY/XdCanUqupnMU+Ik1F89kNHT4JG2NVG7c8NaXvpPsklY4UGXUz6xfOgKnMt+dBw==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@datadog/native-metrics/-/native-metrics-1.6.0.tgz",
+ "integrity": "sha512-+8jBzd0nlLV+ay3Vb87DLwz8JHAS817hRhSRQ6zxhud9TyvvcNTNN+VA2sb2fe5UK4aMDvj/sGVJjEtgr4RHew==",
"hasInstallScript": true,
"dependencies": {
- "nan": "^2.15.0",
"node-gyp-build": "^3.9.0"
},
"engines": {
"node": ">=12"
}
},
- "node_modules/@datadog/native-metrics/node_modules/nan": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz",
- "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA=="
- },
"node_modules/@datadog/pprof": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-0.5.1.tgz",
- "integrity": "sha512-Q4Qg8EpW1U/Vtd1GUONoKJmf91jxdzLLdDDidyW+nug2tq879MNi1Eh7q4bYETz93DAbV85lDUXDe0Ffkd4pDw==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-2.2.3.tgz",
+ "integrity": "sha512-cZXvNBBzvTMUx2xOxp49cZJ7/HOF7geVxqeRbveeJUVKwi8ZxmU1rQGcWPFX4iEEtfQu1M3NqbhmNtYsMJdEsQ==",
"hasInstallScript": true,
"dependencies": {
"delay": "^5.0.0",
- "findit2": "^2.2.3",
- "nan": "^2.14.0",
"node-gyp-build": "^3.9.0",
- "p-limit": "^3.0.0",
+ "p-limit": "^3.1.0",
"pify": "^5.0.0",
- "protobufjs": "~6.11.3",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
+ "pprof-format": "^2.0.7",
"source-map": "^0.7.3",
"split": "^1.0.1"
},
@@ -3350,12 +3486,9 @@
}
},
"node_modules/@datadog/sketches-js": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@datadog/sketches-js/-/sketches-js-1.0.5.tgz",
- "integrity": "sha512-1ZKyHxxgDI+zY0r+7msMUhFdLR7gkRgKGcNLdYjtXVyo5H64q16J/Khfp5+YAXOedKizKzT0Jf0kLwQ/IBU/pA==",
- "dependencies": {
- "protobufjs": "^6.11.3"
- }
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@datadog/sketches-js/-/sketches-js-2.1.0.tgz",
+ "integrity": "sha512-smLocSfrt3s53H/XSVP3/1kP42oqvrkjUPtyaFd1F79ux24oE31BKt+q0c6lsa6hOYrFzsIwyc5GXAI5JmfOew=="
},
"node_modules/@discoveryjs/json-ext": {
"version": "0.5.3",
@@ -4658,6 +4791,46 @@
"node": ">= 8"
}
},
+ "node_modules/@opengovsg/sgid-client": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@opengovsg/sgid-client/-/sgid-client-2.0.0.tgz",
+ "integrity": "sha512-zqcVQz03zB7dAwWh2MJVRAmHYjK1EryqOPnbBgrkr8Jx8BjtcjFa4cCrHstwWP1kVkGomhi0C7e3TRvf1qYSFQ==",
+ "dependencies": {
+ "jose": "4.9.2",
+ "node-rsa": "1.1.1",
+ "openid-client": "5.4.0"
+ }
+ },
+ "node_modules/@opentelemetry/api": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz",
+ "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA==",
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@opentelemetry/core": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.3.1.tgz",
+ "integrity": "sha512-k7lOC86N7WIyUZsUuSKZfFIrUtINtlauMGQsC1r7jNmcr0vVJGqK1ROBvt7WWMxLbpMnt1q2pXJO8tKu0b9auA==",
+ "dependencies": {
+ "@opentelemetry/semantic-conventions": "1.3.1"
+ },
+ "engines": {
+ "node": ">=8.12.0"
+ },
+ "peerDependencies": {
+ "@opentelemetry/api": ">=1.0.0 <1.2.0"
+ }
+ },
+ "node_modules/@opentelemetry/semantic-conventions": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.3.1.tgz",
+ "integrity": "sha512-wU5J8rUoo32oSef/rFpOT1HIjLjAv3qIDHkw1QIhODV3OpAVHi5oVzlouozg9obUmZKtbZ0qUe/m7FP0y0yBzA==",
+ "engines": {
+ "node": ">=8.12.0"
+ }
+ },
"node_modules/@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -4747,17 +4920,17 @@
}
},
"node_modules/@sentry/cli": {
- "version": "1.67.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.67.2.tgz",
- "integrity": "sha512-lPn0Sffbjg2UmCkHl2iw8pKlqpPhy85mW0za5kz3LEqC9JGUXHo9eSyyCkiRktlemMXKk+DeS/nyFy/LTRUG2Q==",
+ "version": "1.75.2",
+ "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.75.2.tgz",
+ "integrity": "sha512-CG0CKH4VCKWzEaegouWfCLQt9SFN+AieFESCatJ7zSuJmzF05ywpMusjxqRul6lMwfUhRKjGKOzcRJ1jLsfTBw==",
"hasInstallScript": true,
"dependencies": {
"https-proxy-agent": "^5.0.0",
"mkdirp": "^0.5.5",
- "node-fetch": "^2.6.0",
- "npmlog": "^4.1.2",
+ "node-fetch": "^2.6.7",
"progress": "^2.0.3",
- "proxy-from-env": "^1.1.0"
+ "proxy-from-env": "^1.1.0",
+ "which": "^2.0.2"
},
"bin": {
"sentry-cli": "bin/sentry-cli"
@@ -5144,6 +5317,15 @@
"@types/redis": "*"
}
},
+ "node_modules/@types/cookie-parser": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz",
+ "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==",
+ "dev": true,
+ "dependencies": {
+ "@types/express": "*"
+ }
+ },
"node_modules/@types/cookie-session": {
"version": "2.0.43",
"resolved": "https://registry.npmjs.org/@types/cookie-session/-/cookie-session-2.0.43.tgz",
@@ -5652,11 +5834,6 @@
"integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==",
"dev": true
},
- "node_modules/@types/long": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
- "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
- },
"node_modules/@types/mime": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
@@ -6419,7 +6596,6 @@
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
"integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true,
"bin": {
"acorn": "bin/acorn"
},
@@ -6446,6 +6622,14 @@
"@types/estree": "0.0.46"
}
},
+ "node_modules/acorn-import-assertions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+ "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "peerDependencies": {
+ "acorn": "^8"
+ }
+ },
"node_modules/acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
@@ -6563,6 +6747,7 @@
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -6646,15 +6831,6 @@
"node": ">= 6"
}
},
- "node_modules/are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "dependencies": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
"node_modules/arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -6863,7 +7039,6 @@
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
"dependencies": {
"safer-buffer": "~2.1.0"
}
@@ -6947,15 +7122,6 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
- "node_modules/at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
"node_modules/atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -6996,10 +7162,21 @@
"semver": "bin/semver.js"
}
},
+ "node_modules/available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/aws-sdk": {
- "version": "2.1102.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1102.0.tgz",
- "integrity": "sha512-MMOncE8IG3Dop3WPza6ryTAEz413ftn/MtDO7ouessb3ljlg5BfqRkTe/rhPH5svqEqJvlh7qHnK0VjgJwmLTQ==",
+ "version": "2.1354.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1354.0.tgz",
+ "integrity": "sha512-3aDxvyuOqMB9DqJguCq6p8momdsz0JR1axwkWOOCzHA7a35+Bw+WLmqt3pWwRjR1tGIwkkZ2CvGJObYHsOuw3w==",
"dependencies": {
"buffer": "4.9.2",
"events": "1.1.1",
@@ -7008,20 +7185,20 @@
"querystring": "0.2.0",
"sax": "1.2.1",
"url": "0.10.3",
- "uuid": "3.3.2",
- "xml2js": "0.4.19"
+ "util": "^0.12.4",
+ "uuid": "8.0.0",
+ "xml2js": "0.5.0"
},
"engines": {
"node": ">= 10.0.0"
}
},
"node_modules/aws-sdk/node_modules/uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
- "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz",
+ "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==",
"bin": {
- "uuid": "bin/uuid"
+ "uuid": "dist/bin/uuid"
}
},
"node_modules/aws-sign2": {
@@ -8443,6 +8620,7 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -9109,9 +9287,9 @@
}
},
"node_modules/conventional-changelog-conventionalcommits": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.0.tgz",
- "integrity": "sha512-sj9tj3z5cnHaSJCYObA9nISf7eq/YjscLPoq6nmew4SiOjxqL2KRpK20fjnjVbpNDjJ2HR3MoVcWKXwbVvzS0A==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz",
+ "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==",
"dev": true,
"dependencies": {
"compare-func": "^2.0.0",
@@ -9129,9 +9307,9 @@
"dev": true
},
"node_modules/conventional-commits-parser": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz",
- "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz",
+ "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==",
"dev": true,
"dependencies": {
"is-text-path": "^1.0.1",
@@ -9139,8 +9317,7 @@
"lodash": "^4.17.15",
"meow": "^8.0.0",
"split2": "^3.0.0",
- "through2": "^4.0.0",
- "trim-off-newlines": "^1.0.0"
+ "through2": "^4.0.0"
},
"bin": {
"conventional-commits-parser": "cli.js"
@@ -9166,6 +9343,26 @@
"node": ">= 0.6"
}
},
+ "node_modules/cookie-parser": {
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
+ "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
+ "dependencies": {
+ "cookie": "0.4.1",
+ "cookie-signature": "1.0.6"
+ },
+ "engines": {
+ "node": ">= 0.8.0"
+ }
+ },
+ "node_modules/cookie-parser/node_modules/cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==",
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
"node_modules/cookie-session": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-1.4.0.tgz",
@@ -9473,6 +9670,22 @@
"node": ">=10"
}
},
+ "node_modules/cosmiconfig-typescript-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz",
+ "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=12",
+ "npm": ">=6"
+ },
+ "peerDependencies": {
+ "@types/node": "*",
+ "cosmiconfig": ">=7",
+ "ts-node": ">=10",
+ "typescript": ">=3"
+ }
+ },
"node_modules/coveralls": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz",
@@ -9662,7 +9875,8 @@
"node_modules/csv-parse": {
"version": "5.3.6",
"resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.3.6.tgz",
- "integrity": "sha512-WI330GjCuEioK/ii8HM2YE/eV+ynpeLvU+RXw4R8bRU8R0laK5zO3fDsc4gH8s472e3Ga38rbIjCAiQh+tEHkw=="
+ "integrity": "sha512-WI330GjCuEioK/ii8HM2YE/eV+ynpeLvU+RXw4R8bRU8R0laK5zO3fDsc4gH8s472e3Ga38rbIjCAiQh+tEHkw==",
+ "dev": true
},
"node_modules/cuint": {
"version": "0.2.2",
@@ -9691,9 +9905,15 @@
}
},
"node_modules/d3-array": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
- "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "dependencies": {
+ "internmap": "1 - 2"
+ },
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/d3-collection": {
"version": "1.0.7",
@@ -9701,29 +9921,41 @@
"integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
},
"node_modules/d3-color": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
- "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/d3-contour": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz",
- "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+ "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
"dependencies": {
- "d3-array": "^1.1.1"
+ "d3-array": "^3.2.0"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/d3-format": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
- "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/d3-geo": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz",
- "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz",
+ "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
"dependencies": {
- "d3-array": "1"
+ "d3-array": "2.5.0 - 3"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/d3-hexbin": {
@@ -9732,48 +9964,55 @@
"integrity": "sha1-nFg32s/UcasFM3qeke8Qv8T5iDE="
},
"node_modules/d3-hierarchy": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
- "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/d3-interpolate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
- "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
"dependencies": {
- "d3-color": "1"
+ "d3-color": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/d3-path": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
- "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/d3-sankey": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz",
- "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=",
+ "version": "0.12.3",
+ "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
+ "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
"dependencies": {
- "d3-array": "1",
- "d3-collection": "1",
+ "d3-array": "1 - 2",
"d3-shape": "^1.2.0"
}
},
- "node_modules/d3-scale": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz",
- "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==",
+ "node_modules/d3-sankey/node_modules/d3-array": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+ "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
"dependencies": {
- "d3-array": "^1.2.0",
- "d3-collection": "1",
- "d3-color": "1",
- "d3-format": "1",
- "d3-interpolate": "1",
- "d3-time": "1",
- "d3-time-format": "2"
+ "internmap": "^1.0.0"
}
},
- "node_modules/d3-shape": {
+ "node_modules/d3-sankey/node_modules/d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+ },
+ "node_modules/d3-sankey/node_modules/d3-shape": {
"version": "1.3.7",
"resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
"integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
@@ -9781,17 +10020,57 @@
"d3-path": "1"
}
},
+ "node_modules/d3-sankey/node_modules/internmap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
+ "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
+ },
+ "node_modules/d3-scale": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+ "dependencies": {
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/d3-shape": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+ "dependencies": {
+ "d3-path": "^3.1.0"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/d3-time": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
- "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "dependencies": {
+ "d3-array": "2 - 3"
+ },
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/d3-time-format": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
- "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
"dependencies": {
- "d3-time": "1"
+ "d3-time": "1 - 3"
+ },
+ "engines": {
+ "node": ">=12"
}
},
"node_modules/d3-voronoi": {
@@ -9854,7 +10133,6 @@
"version": "2.23.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz",
"integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==",
- "dev": true,
"engines": {
"node": ">=0.11"
},
@@ -9872,52 +10150,48 @@
}
},
"node_modules/dd-trace": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-2.11.0.tgz",
- "integrity": "sha512-UA4OGIIlW5NswS2y/2Qjy7p+oTJkWuetOurK/1fCetOSJLTp++Hh5Fys+RNn48meJfrayW4XMgCUinQsHU9qgg==",
+ "version": "2.40.0",
+ "resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-2.40.0.tgz",
+ "integrity": "sha512-hF+M9NnuAtFe8r82lMbCsZjJfBa0Yui58NgD/qnTBOwhaqnyVe8fsi1goOhvisafifkg3nlK46Fn7IIKruwtEw==",
"hasInstallScript": true,
"dependencies": {
- "@datadog/native-appsec": "^1.2.1",
- "@datadog/native-metrics": "^1.4.0",
- "@datadog/pprof": "^0.5.1",
- "@datadog/sketches-js": "^1.0.5",
- "@types/node": ">=12",
+ "@datadog/native-appsec": "^3.2.0",
+ "@datadog/native-iast-rewriter": "2.0.1",
+ "@datadog/native-iast-taint-tracking": "^1.5.0",
+ "@datadog/native-metrics": "^1.6.0",
+ "@datadog/pprof": "2.2.3",
+ "@datadog/sketches-js": "^2.1.0",
+ "@opentelemetry/api": "^1.0.0",
+ "@opentelemetry/core": "<1.4.0",
+ "@types/node": "<18.13",
"crypto-randomuuid": "^1.0.0",
"diagnostics_channel": "^1.1.0",
- "form-data": "^3.0.0",
"ignore": "^5.2.0",
- "import-in-the-middle": "^1.2.1",
+ "import-in-the-middle": "^1.3.5",
+ "int64-buffer": "^0.1.9",
+ "ipaddr.js": "^2.0.1",
+ "istanbul-lib-coverage": "3.2.0",
"koalas": "^1.0.2",
"limiter": "^1.1.4",
"lodash.kebabcase": "^4.1.1",
"lodash.pick": "^4.4.0",
"lodash.sortby": "^4.7.0",
"lodash.uniq": "^4.5.0",
+ "lru-cache": "^7.14.0",
"methods": "^1.1.2",
"module-details-from-path": "^1.0.3",
+ "msgpack-lite": "^0.1.26",
+ "node-abort-controller": "^3.0.1",
"opentracing": ">=0.12.1",
"path-to-regexp": "^0.1.2",
- "performance-now": "^2.1.0",
+ "protobufjs": "^7.1.2",
"retry": "^0.10.1",
- "semver": "^5.5.0"
+ "semver": "^7.3.8"
},
"engines": {
"node": ">=12"
}
},
- "node_modules/dd-trace/node_modules/form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/dd-trace/node_modules/ignore": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
@@ -9926,10 +10200,21 @@
"node": ">= 4"
}
},
- "node_modules/dd-trace/node_modules/performance-now": {
+ "node_modules/dd-trace/node_modules/ipaddr.js": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz",
+ "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==",
+ "engines": {
+ "node": ">= 10"
+ }
+ },
+ "node_modules/dd-trace/node_modules/lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==",
+ "engines": {
+ "node": ">=12"
+ }
},
"node_modules/dd-trace/node_modules/retry": {
"version": "0.10.1",
@@ -9939,14 +10224,6 @@
"node": "*"
}
},
- "node_modules/dd-trace/node_modules/semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "bin": {
- "semver": "bin/semver"
- }
- },
"node_modules/debug": {
"version": "4.3.4",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
@@ -10396,17 +10673,6 @@
"node": ">=8"
}
},
- "node_modules/detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=",
- "bin": {
- "detect-libc": "bin/detect-libc.js"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -10767,10 +11033,21 @@
"node": ">=8"
}
},
+ "node_modules/dotenv": {
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
+ "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/motdotla/dotenv?sponsor=1"
+ }
+ },
"node_modules/dottie": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
- "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.4.tgz",
+ "integrity": "sha512-iz64WUOmp/ECQhWMJjTWFzJN/wQ7RJ5v/a6A2OiCwjaGCpNo66WGIjlSf+IULO9DQd0b4cFawLOTbiKSrpKodw=="
},
"node_modules/dynamic-dedupe": {
"version": "0.3.0",
@@ -12066,6 +12343,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/event-lite": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/event-lite/-/event-lite-0.1.3.tgz",
+ "integrity": "sha512-8qz9nOz5VeD2z96elrEKD2U433+L3DWdUdDkOINLGOJvx1GsMBbMn0aCeu28y8/e85A6mCigBiFlYMnTBEGlSw=="
+ },
"node_modules/eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -12861,14 +13143,6 @@
"node": ">=6"
}
},
- "node_modules/findit2": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz",
- "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog==",
- "engines": {
- "node": ">=0.8.22"
- }
- },
"node_modules/findup-sync": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
@@ -12935,6 +13209,14 @@
}
}
},
+ "node_modules/for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "dependencies": {
+ "is-callable": "^1.1.3"
+ }
+ },
"node_modules/for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -13010,18 +13292,17 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"node_modules/fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
+ "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
"dev": true,
"dependencies": {
- "at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
},
"engines": {
- "node": ">=10"
+ "node": ">=14.14"
}
},
"node_modules/fs-minipass": {
@@ -13065,21 +13346,6 @@
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
- "node_modules/gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "dependencies": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
"node_modules/gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -13120,13 +13386,13 @@
}
},
"node_modules/get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"dependencies": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
- "has-symbols": "^1.0.1"
+ "has-symbols": "^1.0.3"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -13187,9 +13453,9 @@
}
},
"node_modules/git-raw-commits": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz",
- "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
+ "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
"dev": true,
"dependencies": {
"dargs": "^7.0.0",
@@ -13353,6 +13619,17 @@
"node": ">=0.6.0"
}
},
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.10",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
@@ -13472,9 +13749,23 @@
}
},
"node_modules/has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "dependencies": {
+ "has-symbols": "^1.0.2"
+ },
"engines": {
"node": ">= 0.4"
},
@@ -13596,15 +13887,6 @@
"value-equal": "^1.0.1"
}
},
- "node_modules/hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA==",
- "deprecated": "This version has been deprecated in accordance with the hapi support policy (hapi.im/support). Please upgrade to the latest version to get the best features, bug fixes, and security patches. If you are unable to upgrade at this time, paid support is available for older versions (hapi.im/commercial).",
- "engines": {
- "node": ">=4.0.0"
- }
- },
"node_modules/hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
@@ -14091,13 +14373,32 @@
}
},
"node_modules/import-in-the-middle": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.2.3.tgz",
- "integrity": "sha512-x7XhsP/pGf+HFFSmu5CoPwpTADPvr1tdZC7sYqAvtij0WeaxXoWXpjFbkm9OcT9gdSW9I3kgObIwmJj4jgE2zg==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.1.tgz",
+ "integrity": "sha512-hGG0PcCsykVo8MBVH8l0uEWLWW6DXMgJA9jvC0yps6M3uIJ8L/tagTCbyF8Ud5TtqJ8/jmZL1YkyySyeVkVQrA==",
"dependencies": {
+ "acorn": "^8.8.2",
+ "acorn-import-assertions": "^1.9.0",
+ "cjs-module-lexer": "^1.2.2",
"module-details-from-path": "^1.0.3"
}
},
+ "node_modules/import-in-the-middle/node_modules/acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/import-in-the-middle/node_modules/cjs-module-lexer": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ=="
+ },
"node_modules/import-lazy": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz",
@@ -14262,6 +14563,11 @@
"node": ">=6"
}
},
+ "node_modules/int64-buffer": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.10.tgz",
+ "integrity": "sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA=="
+ },
"node_modules/internal-ip": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
@@ -14289,6 +14595,14 @@
"node": ">= 0.4"
}
},
+ "node_modules/internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/interpret": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
@@ -14424,7 +14738,6 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
"integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
- "dev": true,
"engines": {
"node": ">= 0.4"
},
@@ -14569,6 +14882,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
"dependencies": {
"number-is-nan": "^1.0.0"
},
@@ -14585,6 +14899,20 @@
"node": ">=6"
}
},
+ "node_modules/is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "dependencies": {
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
@@ -14781,6 +15109,24 @@
"node": ">=0.10.0"
}
},
+ "node_modules/is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -14841,8 +15187,7 @@
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"node_modules/isobject": {
"version": "3.0.1",
@@ -14860,10 +15205,9 @@
"dev": true
},
"node_modules/istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
- "dev": true,
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==",
"engines": {
"node": ">=8"
}
@@ -16898,6 +17242,14 @@
"node": ">= 0.6.0"
}
},
+ "node_modules/jose": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-4.9.2.tgz",
+ "integrity": "sha512-EqKvu2PqJCD3Jrg3PvcYZVS7D21qMVLSYMDAFcOdGUEOpJSLNtJO7NjLANvu3SYHVl6pdP2ff7ve6EZW2nX7Nw==",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -17715,6 +18067,12 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
+ "node_modules/lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "dev": true
+ },
"node_modules/lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -17748,6 +18106,12 @@
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
+ "node_modules/lodash.isfunction": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
+ "dev": true
+ },
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
@@ -17770,16 +18134,34 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
+ "node_modules/lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true
+ },
"node_modules/lodash.pick": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
"integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q=="
},
+ "node_modules/lodash.snakecase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+ "dev": true
+ },
"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/lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
"node_modules/lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
@@ -17796,6 +18178,12 @@
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
},
+ "node_modules/lodash.upperfirst": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
+ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
+ "dev": true
+ },
"node_modules/log-driver": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
@@ -18127,9 +18515,9 @@
}
},
"node_modules/long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
},
"node_modules/longest": {
"version": "2.0.1",
@@ -18190,9 +18578,9 @@
}
},
"node_modules/make-dir/node_modules/semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
"bin": {
"semver": "bin/semver.js"
}
@@ -18620,6 +19008,20 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "node_modules/msgpack-lite": {
+ "version": "0.1.26",
+ "resolved": "https://registry.npmjs.org/msgpack-lite/-/msgpack-lite-0.1.26.tgz",
+ "integrity": "sha512-SZ2IxeqZ1oRFGo0xFGbvBJWMp3yLIY9rlIJyxy8CGrwZn1f0ZK4r6jV/AM1r0FZMDUkWkglOk/eeKIL9g77Nxw==",
+ "dependencies": {
+ "event-lite": "^0.1.1",
+ "ieee754": "^1.1.8",
+ "int64-buffer": "^0.1.9",
+ "isarray": "^1.0.0"
+ },
+ "bin": {
+ "msgpack": "bin/msgpack"
+ }
+ },
"node_modules/multicast-dns": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
@@ -18660,7 +19062,8 @@
"node_modules/nan": {
"version": "2.14.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
- "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
+ "optional": true
},
"node_modules/nanoid": {
"version": "3.3.2",
@@ -18751,6 +19154,11 @@
"node": ">=10"
}
},
+ "node_modules/node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="
+ },
"node_modules/node-addon-api": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz",
@@ -18868,6 +19276,14 @@
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz",
"integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg=="
},
+ "node_modules/node-rsa": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz",
+ "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==",
+ "dependencies": {
+ "asn1": "^0.2.4"
+ }
+ },
"node_modules/node-source-walk": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz",
@@ -18971,17 +19387,6 @@
"node": ">=8"
}
},
- "node_modules/npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "dependencies": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
"node_modules/nth-check": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
@@ -18997,6 +19402,7 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -19062,6 +19468,14 @@
"node": ">=0.10.0"
}
},
+ "node_modules/object-hash": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz",
+ "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==",
+ "engines": {
+ "node": ">= 6"
+ }
+ },
"node_modules/object-inspect": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
@@ -19191,6 +19605,14 @@
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
"dev": true
},
+ "node_modules/oidc-token-hash": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz",
+ "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw==",
+ "engines": {
+ "node": "^10.13.0 || >=12.0.0"
+ }
+ },
"node_modules/on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -19241,6 +19663,28 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/openid-client": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.0.tgz",
+ "integrity": "sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==",
+ "dependencies": {
+ "jose": "^4.10.0",
+ "lru-cache": "^6.0.0",
+ "object-hash": "^2.0.1",
+ "oidc-token-hash": "^5.0.1"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
+ "node_modules/openid-client/node_modules/jose": {
+ "version": "4.14.4",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz",
+ "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g==",
+ "funding": {
+ "url": "https://github.com/sponsors/panva"
+ }
+ },
"node_modules/opentracing": {
"version": "0.14.7",
"resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz",
@@ -20040,6 +20484,11 @@
"node": ">=0.10.0"
}
},
+ "node_modules/pprof-format": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.0.7.tgz",
+ "integrity": "sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA=="
+ },
"node_modules/prebuild-install": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
@@ -20267,9 +20716,9 @@
"integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="
},
"node_modules/protobufjs": {
- "version": "6.11.3",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
- "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz",
+ "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==",
"hasInstallScript": true,
"dependencies": {
"@protobufjs/aspromise": "^1.1.2",
@@ -20282,13 +20731,11 @@
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
- "@types/long": "^4.0.1",
"@types/node": ">=13.7.0",
- "long": "^4.0.0"
+ "long": "^5.0.0"
},
- "bin": {
- "pbjs": "bin/pbjs",
- "pbts": "bin/pbts"
+ "engines": {
+ "node": ">=12.0.0"
}
},
"node_modules/proxy-addr": {
@@ -20858,35 +21305,35 @@
}
},
"node_modules/react-vis": {
- "version": "1.11.7",
- "resolved": "https://registry.npmjs.org/react-vis/-/react-vis-1.11.7.tgz",
- "integrity": "sha512-vJqS12l/6RHeSq8DVl4PzX0j8iPgbT8H8PtgTRsimKsBNcPjPseO4RICw1FUPrwj8MPrrna34LBtzyC4ATd5Ow==",
- "dependencies": {
- "d3-array": "^1.2.0",
- "d3-collection": "^1.0.3",
- "d3-color": "^1.0.3",
- "d3-contour": "^1.1.0",
- "d3-format": "^1.2.0",
- "d3-geo": "^1.6.4",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/react-vis/-/react-vis-1.12.1.tgz",
+ "integrity": "sha512-vH7ihTPlBD6wBuzwPoipheyJnx46kKKMXnVqdk4mv5vq+bJVC6JRYdRZSofa2030+kko99rSq/idnYnNWGr6zA==",
+ "dependencies": {
+ "d3-array": "^3.2.1",
+ "d3-collection": "^1.0.7",
+ "d3-color": "^3.1.0",
+ "d3-contour": "^4.0.0",
+ "d3-format": "^3.1.0",
+ "d3-geo": "^3.1.0",
"d3-hexbin": "^0.2.2",
- "d3-hierarchy": "^1.1.4",
- "d3-interpolate": "^1.1.4",
- "d3-sankey": "^0.7.1",
- "d3-scale": "^1.0.5",
- "d3-shape": "^1.1.0",
- "d3-voronoi": "^1.1.2",
+ "d3-hierarchy": "^3.1.2",
+ "d3-interpolate": "^3.0.1",
+ "d3-sankey": "^0.12.3",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.2.0",
+ "d3-voronoi": "^1.1.4",
"deep-equal": "^1.0.1",
"global": "^4.3.1",
- "hoek": "4.2.1",
"prop-types": "^15.5.8",
"react-motion": "^0.5.2"
},
"engines": {
- "node": ">=0.10.0",
- "npm": ">=3.0"
+ "node": ">=14.18.0",
+ "npm": ">=6.13.0"
},
"peerDependencies": {
- "react": "15.3.0 - 16.x"
+ "react": "^16.8.3",
+ "react-dom": "^16.8.3"
}
},
"node_modules/read-file-relative": {
@@ -22089,7 +22536,7 @@
"node_modules/sax": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
- "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
+ "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="
},
"node_modules/saxes": {
"version": "5.0.1",
@@ -22146,9 +22593,9 @@
}
},
"node_modules/semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"dependencies": {
"lru-cache": "^6.0.0"
},
@@ -22464,20 +22911,6 @@
"node": ">=8"
}
},
- "node_modules/sharp/node_modules/semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -23171,6 +23604,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
"dependencies": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -23252,6 +23686,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -24990,15 +25425,6 @@
"node": ">=8"
}
},
- "node_modules/trim-off-newlines": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz",
- "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/triple-beam": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
@@ -25134,12 +25560,12 @@
}
},
"node_modules/ts-node": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz",
- "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==",
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
"dev": true,
"dependencies": {
- "@cspotcode/source-map-support": "0.7.0",
+ "@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
@@ -25150,7 +25576,7 @@
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
- "v8-compile-cache-lib": "^3.0.0",
+ "v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"bin": {
@@ -25720,6 +26146,18 @@
"integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
"dev": true
},
+ "node_modules/util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "dependencies": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
"node_modules/util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -26515,14 +26953,6 @@
"node": ">=0.4.0"
}
},
- "node_modules/webpack/node_modules/acorn-import-assertions": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
- "peerDependencies": {
- "acorn": "^8"
- }
- },
"node_modules/webpack/node_modules/events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
@@ -26604,7 +27034,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"dependencies": {
"isexe": "^2.0.0"
},
@@ -26689,6 +27118,25 @@
"which": "bin/which"
}
},
+ "node_modules/which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "dependencies": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
@@ -26927,18 +27375,21 @@
"dev": true
},
"node_modules/xml2js": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
- "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"dependencies": {
"sax": ">=0.6.0",
- "xmlbuilder": "~9.0.1"
+ "xmlbuilder": "~11.0.0"
+ },
+ "engines": {
+ "node": ">=4.0.0"
}
},
"node_modules/xmlbuilder": {
- "version": "9.0.7",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==",
"engines": {
"node": ">=4.0"
}
@@ -28401,26 +28852,27 @@
"integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ=="
},
"@commitlint/cli": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-12.1.4.tgz",
- "integrity": "sha512-ZR1WjXLvqEffYyBPT0XdnSxtt3Ty1TMoujEtseW5o3vPnkA1UNashAMjQVg/oELqfaiAMnDw8SERPMN0e/0kLg==",
+ "version": "17.6.6",
+ "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-17.6.6.tgz",
+ "integrity": "sha512-sTKpr2i/Fjs9OmhU+beBxjPavpnLSqZaO6CzwKVq2Tc4UYVTMFgpKOslDhUBVlfAUBfjVO8ParxC/MXkIOevEA==",
"dev": true,
"requires": {
- "@commitlint/format": "^12.1.4",
- "@commitlint/lint": "^12.1.4",
- "@commitlint/load": "^12.1.4",
- "@commitlint/read": "^12.1.4",
- "@commitlint/types": "^12.1.4",
- "lodash": "^4.17.19",
+ "@commitlint/format": "^17.4.4",
+ "@commitlint/lint": "^17.6.6",
+ "@commitlint/load": "^17.5.0",
+ "@commitlint/read": "^17.5.1",
+ "@commitlint/types": "^17.4.4",
+ "execa": "^5.0.0",
+ "lodash.isfunction": "^3.0.9",
"resolve-from": "5.0.0",
"resolve-global": "1.0.0",
- "yargs": "^16.2.0"
+ "yargs": "^17.0.0"
},
"dependencies": {
"ansi-regex": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
- "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true
},
"ansi-styles": {
@@ -28433,13 +28885,13 @@
}
},
"cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
+ "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"requires": {
"string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
+ "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0"
}
},
@@ -28465,23 +28917,23 @@
"dev": true
},
"string-width": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz",
- "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==",
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"requires": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.0"
+ "strip-ansi": "^6.0.1"
}
},
"strip-ansi": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
- "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"requires": {
- "ansi-regex": "^5.0.0"
+ "ansi-regex": "^5.0.1"
}
},
"wrap-ansi": {
@@ -28502,61 +28954,95 @@
"dev": true
},
"yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
+ "version": "17.7.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
+ "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
"dev": true,
"requires": {
- "cliui": "^7.0.2",
+ "cliui": "^8.0.1",
"escalade": "^3.1.1",
"get-caller-file": "^2.0.5",
"require-directory": "^2.1.1",
- "string-width": "^4.2.0",
+ "string-width": "^4.2.3",
"y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
+ "yargs-parser": "^21.1.1"
}
},
"yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
+ "version": "21.1.1",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
+ "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true
}
}
},
"@commitlint/config-conventional": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-12.1.4.tgz",
- "integrity": "sha512-ZIdzmdy4o4WyqywMEpprRCrehjCSQrHkaRTVZV411GyLigFQHlEBSJITAihLAWe88Qy/8SyoIe5uKvAsV5vRqQ==",
+ "version": "17.6.6",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-17.6.6.tgz",
+ "integrity": "sha512-phqPz3BDhfj49FUYuuZIuDiw+7T6gNAEy7Yew1IBHqSohVUCWOK2FXMSAExzS2/9X+ET93g0Uz83KjiHDOOFag==",
+ "dev": true,
+ "requires": {
+ "conventional-changelog-conventionalcommits": "^5.0.0"
+ }
+ },
+ "@commitlint/config-validator": {
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-17.4.4.tgz",
+ "integrity": "sha512-bi0+TstqMiqoBAQDvdEP4AFh0GaKyLFlPPEObgI29utoKEYoPQTvF0EYqIwYYLEoJYhj5GfMIhPHJkTJhagfeg==",
"dev": true,
"requires": {
- "conventional-changelog-conventionalcommits": "^4.3.1"
+ "@commitlint/types": "^17.4.4",
+ "ajv": "^8.11.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "8.12.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
+ "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "json-schema-traverse": "^1.0.0",
+ "require-from-string": "^2.0.2",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "json-schema-traverse": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
+ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
+ "dev": true
+ }
}
},
"@commitlint/ensure": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-12.1.4.tgz",
- "integrity": "sha512-MxHIBuAG9M4xl33qUfIeMSasbv3ktK0W+iygldBxZOL4QSYC2Gn66pZAQMnV9o3V+sVFHoAK2XUKqBAYrgbEqw==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-17.4.4.tgz",
+ "integrity": "sha512-AHsFCNh8hbhJiuZ2qHv/m59W/GRE9UeOXbkOqxYMNNg9pJ7qELnFcwj5oYpa6vzTSHtPGKf3C2yUFNy1GGHq6g==",
"dev": true,
"requires": {
- "@commitlint/types": "^12.1.4",
- "lodash": "^4.17.19"
+ "@commitlint/types": "^17.4.4",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.kebabcase": "^4.1.1",
+ "lodash.snakecase": "^4.1.1",
+ "lodash.startcase": "^4.4.0",
+ "lodash.upperfirst": "^4.3.1"
}
},
"@commitlint/execute-rule": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-12.1.4.tgz",
- "integrity": "sha512-h2S1j8SXyNeABb27q2Ok2vD1WfxJiXvOttKuRA9Or7LN6OQoC/KtT3844CIhhWNteNMu/wE0gkTqGxDVAnJiHg==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz",
+ "integrity": "sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==",
"dev": true
},
"@commitlint/format": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-12.1.4.tgz",
- "integrity": "sha512-h28ucMaoRjVvvgS6Bdf85fa/+ZZ/iu1aeWGCpURnQV7/rrVjkhNSjZwGlCOUd5kDV1EnZ5XdI7L18SUpRjs26g==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-17.4.4.tgz",
+ "integrity": "sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==",
"dev": true,
"requires": {
- "@commitlint/types": "^12.1.4",
- "chalk": "^4.0.0"
+ "@commitlint/types": "^17.4.4",
+ "chalk": "^4.1.0"
},
"dependencies": {
"ansi-styles": {
@@ -28569,9 +29055,9 @@
}
},
"chalk": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
- "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
@@ -28605,40 +29091,58 @@
}
},
"@commitlint/is-ignored": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-12.1.4.tgz",
- "integrity": "sha512-uTu2jQU2SKvtIRVLOzMQo3KxDtO+iJ1p0olmncwrqy4AfPLgwoyCP2CiULq5M7xpR3+dE3hBlZXbZTQbD7ycIw==",
+ "version": "17.6.6",
+ "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-17.6.6.tgz",
+ "integrity": "sha512-4Fw875faAKO+2nILC04yW/2Vy/wlV3BOYCSQ4CEFzriPEprc1Td2LILmqmft6PDEK5Sr14dT9tEzeaZj0V56Gg==",
"dev": true,
"requires": {
- "@commitlint/types": "^12.1.4",
- "semver": "7.3.5"
+ "@commitlint/types": "^17.4.4",
+ "semver": "7.5.2"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "7.5.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz",
+ "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
}
},
"@commitlint/lint": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-12.1.4.tgz",
- "integrity": "sha512-1kZ8YDp4to47oIPFELUFGLiLumtPNKJigPFDuHt2+f3Q3IKdQ0uk53n3CPl4uoyso/Og/EZvb1mXjFR/Yce4cA==",
+ "version": "17.6.6",
+ "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-17.6.6.tgz",
+ "integrity": "sha512-5bN+dnHcRLkTvwCHYMS7Xpbr+9uNi0Kq5NR3v4+oPNx6pYXt8ACuw9luhM/yMgHYwW0ajIR20wkPAFkZLEMGmg==",
"dev": true,
"requires": {
- "@commitlint/is-ignored": "^12.1.4",
- "@commitlint/parse": "^12.1.4",
- "@commitlint/rules": "^12.1.4",
- "@commitlint/types": "^12.1.4"
+ "@commitlint/is-ignored": "^17.6.6",
+ "@commitlint/parse": "^17.6.5",
+ "@commitlint/rules": "^17.6.5",
+ "@commitlint/types": "^17.4.4"
}
},
"@commitlint/load": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-12.1.4.tgz",
- "integrity": "sha512-Keszi0IOjRzKfxT+qES/n+KZyLrxy79RQz8wWgssCboYjKEp+wC+fLCgbiMCYjI5k31CIzIOq/16J7Ycr0C0EA==",
+ "version": "17.5.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-17.5.0.tgz",
+ "integrity": "sha512-l+4W8Sx4CD5rYFsrhHH8HP01/8jEP7kKf33Xlx2Uk2out/UKoKPYMOIRcDH5ppT8UXLMV+x6Wm5osdRKKgaD1Q==",
"dev": true,
"requires": {
- "@commitlint/execute-rule": "^12.1.4",
- "@commitlint/resolve-extends": "^12.1.4",
- "@commitlint/types": "^12.1.4",
- "chalk": "^4.0.0",
- "cosmiconfig": "^7.0.0",
- "lodash": "^4.17.19",
- "resolve-from": "^5.0.0"
+ "@commitlint/config-validator": "^17.4.4",
+ "@commitlint/execute-rule": "^17.4.0",
+ "@commitlint/resolve-extends": "^17.4.4",
+ "@commitlint/types": "^17.4.4",
+ "@types/node": "*",
+ "chalk": "^4.1.0",
+ "cosmiconfig": "^8.0.0",
+ "cosmiconfig-typescript-loader": "^4.0.0",
+ "lodash.isplainobject": "^4.0.6",
+ "lodash.merge": "^4.6.2",
+ "lodash.uniq": "^4.5.0",
+ "resolve-from": "^5.0.0",
+ "ts-node": "^10.8.1",
+ "typescript": "^4.6.4 || ^5.0.0"
},
"dependencies": {
"ansi-styles": {
@@ -28650,6 +29154,12 @@
"color-convert": "^2.0.1"
}
},
+ "argparse": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
+ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
+ "dev": true
+ },
"chalk": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
@@ -28669,12 +29179,33 @@
"color-name": "~1.1.4"
}
},
+ "cosmiconfig": {
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz",
+ "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^3.2.1",
+ "js-yaml": "^4.1.0",
+ "parse-json": "^5.0.0",
+ "path-type": "^4.0.0"
+ }
+ },
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
+ "js-yaml": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
+ "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
+ "dev": true,
+ "requires": {
+ "argparse": "^2.0.1"
+ }
+ },
"supports-color": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
@@ -28683,72 +29214,90 @@
"requires": {
"has-flag": "^4.0.0"
}
+ },
+ "typescript": {
+ "version": "5.1.6",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
+ "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+ "dev": true
}
}
},
"@commitlint/message": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-12.1.4.tgz",
- "integrity": "sha512-6QhalEKsKQ/Y16/cTk5NH4iByz26fqws2ub+AinHPtM7Io0jy4e3rym9iE+TkEqiqWZlUigZnTwbPvRJeSUBaA==",
+ "version": "17.4.2",
+ "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-17.4.2.tgz",
+ "integrity": "sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==",
"dev": true
},
"@commitlint/parse": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-12.1.4.tgz",
- "integrity": "sha512-yqKSAsK2V4X/HaLb/yYdrzs6oD/G48Ilt0EJ2Mp6RJeWYxG14w/Out6JrneWnr/cpzemyN5hExOg6+TB19H/Lw==",
+ "version": "17.6.5",
+ "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-17.6.5.tgz",
+ "integrity": "sha512-0zle3bcn1Hevw5Jqpz/FzEWNo2KIzUbc1XyGg6WrWEoa6GH3A1pbqNF6MvE6rjuy6OY23c8stWnb4ETRZyN+Yw==",
"dev": true,
"requires": {
- "@commitlint/types": "^12.1.4",
+ "@commitlint/types": "^17.4.4",
"conventional-changelog-angular": "^5.0.11",
- "conventional-commits-parser": "^3.0.0"
+ "conventional-commits-parser": "^3.2.2"
}
},
"@commitlint/read": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-12.1.4.tgz",
- "integrity": "sha512-TnPQSJgD8Aod5Xeo9W4SaYKRZmIahukjcCWJ2s5zb3ZYSmj6C85YD9cR5vlRyrZjj78ItLUV/X4FMWWVIS38Jg==",
+ "version": "17.5.1",
+ "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-17.5.1.tgz",
+ "integrity": "sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==",
"dev": true,
"requires": {
- "@commitlint/top-level": "^12.1.4",
- "@commitlint/types": "^12.1.4",
- "fs-extra": "^9.0.0",
- "git-raw-commits": "^2.0.0"
+ "@commitlint/top-level": "^17.4.0",
+ "@commitlint/types": "^17.4.4",
+ "fs-extra": "^11.0.0",
+ "git-raw-commits": "^2.0.11",
+ "minimist": "^1.2.6"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
+ "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
+ "dev": true
+ }
}
},
"@commitlint/resolve-extends": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-12.1.4.tgz",
- "integrity": "sha512-R9CoUtsXLd6KSCfsZly04grsH6JVnWFmVtWgWs1KdDpdV+G3TSs37tColMFqglpkx3dsWu8dsPD56+D9YnJfqg==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-17.4.4.tgz",
+ "integrity": "sha512-znXr1S0Rr8adInptHw0JeLgumS11lWbk5xAWFVno+HUFVN45875kUtqjrI6AppmD3JI+4s0uZlqqlkepjJd99A==",
"dev": true,
"requires": {
+ "@commitlint/config-validator": "^17.4.4",
+ "@commitlint/types": "^17.4.4",
"import-fresh": "^3.0.0",
- "lodash": "^4.17.19",
+ "lodash.mergewith": "^4.6.2",
"resolve-from": "^5.0.0",
"resolve-global": "^1.0.0"
}
},
"@commitlint/rules": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-12.1.4.tgz",
- "integrity": "sha512-W8m6ZSjg7RuIsIfzQiFHa48X5mcPXeKT9yjBxVmjHvYfS2FDBf1VxCQ7vO0JTVIdV4ohjZ0eKg/wxxUuZHJAZg==",
+ "version": "17.6.5",
+ "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-17.6.5.tgz",
+ "integrity": "sha512-uTB3zSmnPyW2qQQH+Dbq2rekjlWRtyrjDo4aLFe63uteandgkI+cc0NhhbBAzcXShzVk0qqp8SlkQMu0mgHg/A==",
"dev": true,
"requires": {
- "@commitlint/ensure": "^12.1.4",
- "@commitlint/message": "^12.1.4",
- "@commitlint/to-lines": "^12.1.4",
- "@commitlint/types": "^12.1.4"
+ "@commitlint/ensure": "^17.4.4",
+ "@commitlint/message": "^17.4.2",
+ "@commitlint/to-lines": "^17.4.0",
+ "@commitlint/types": "^17.4.4",
+ "execa": "^5.0.0"
}
},
"@commitlint/to-lines": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-12.1.4.tgz",
- "integrity": "sha512-TParumvbi8bdx3EdLXz2MaX+e15ZgoCqNUgqHsRLwyqLUTRbqCVkzrfadG1UcMQk8/d5aMbb327ZKG3Q4BRorw==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-17.4.0.tgz",
+ "integrity": "sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==",
"dev": true
},
"@commitlint/top-level": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-12.1.4.tgz",
- "integrity": "sha512-d4lTJrOT/dXlpY+NIt4CUl77ciEzYeNVc0VFgUQ6VA+b1rqYD2/VWFjBlWVOrklxtSDeKyuEhs36RGrppEFAvg==",
+ "version": "17.4.0",
+ "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-17.4.0.tgz",
+ "integrity": "sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==",
"dev": true,
"requires": {
"find-up": "^5.0.0"
@@ -29014,20 +29563,6 @@
"color-name": "~1.1.4"
}
},
- "conventional-commits-parser": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.3.tgz",
- "integrity": "sha512-YyRDR7On9H07ICFpRm/igcdjIqebXbvf4Cff+Pf0BrBys1i1EOzx9iFXNlAbdrLAR8jf7bkUYkDAr8pEy0q4Pw==",
- "dev": true,
- "requires": {
- "is-text-path": "^1.0.1",
- "JSONStream": "^1.0.4",
- "lodash": "^4.17.15",
- "meow": "^8.0.0",
- "split2": "^3.0.0",
- "through2": "^4.0.0"
- }
- },
"emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -29100,6 +29635,15 @@
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
},
+ "semver": {
+ "version": "7.3.5",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
+ "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ },
"string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -29176,12 +29720,12 @@
}
},
"@commitlint/types": {
- "version": "12.1.4",
- "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-12.1.4.tgz",
- "integrity": "sha512-KRIjdnWNUx6ywz+SJvjmNCbQKcKP6KArhjZhY2l+CWKxak0d77SOjggkMwFTiSgLODOwmuLTbarR2ZfWPiPMlw==",
+ "version": "17.4.4",
+ "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-17.4.4.tgz",
+ "integrity": "sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==",
"dev": true,
"requires": {
- "chalk": "^4.0.0"
+ "chalk": "^4.1.0"
},
"dependencies": {
"ansi-styles": {
@@ -29194,9 +29738,9 @@
}
},
"chalk": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz",
- "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
@@ -29229,19 +29773,25 @@
}
}
},
- "@cspotcode/source-map-consumer": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-consumer/-/source-map-consumer-0.8.0.tgz",
- "integrity": "sha512-41qniHzTU8yAGbCp04ohlmSrZf8bkf/iJsl3V0dRGsQN/5GFfx+LbCSsCpp2gqrqjTVg/K6O8ycoV35JIwAzAg==",
- "dev": true
- },
"@cspotcode/source-map-support": {
- "version": "0.7.0",
- "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.7.0.tgz",
- "integrity": "sha512-X4xqRHqN8ACt2aHVe51OxeA2HjbcL4MqFqXkrmQszJ1NOUuUu5u6Vqx/0lZSVNku7velL5FC/s5uEAj1lsBMhA==",
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz",
+ "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==",
"dev": true,
"requires": {
- "@cspotcode/source-map-consumer": "0.8.0"
+ "@jridgewell/trace-mapping": "0.3.9"
+ },
+ "dependencies": {
+ "@jridgewell/trace-mapping": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz",
+ "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==",
+ "dev": true,
+ "requires": {
+ "@jridgewell/resolve-uri": "^3.0.3",
+ "@jridgewell/sourcemap-codec": "^1.4.10"
+ }
+ }
}
},
"@dabh/diagnostics": {
@@ -29277,52 +29827,54 @@
}
},
"@datadog/native-appsec": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/@datadog/native-appsec/-/native-appsec-1.2.1.tgz",
- "integrity": "sha512-jF+k7xhBmJIYYLtjvhCey08RBbItTG7O2zcSCDGFffhvCvo3ZOoou+IKtAm9z+U7hOoeOmD+Xg+h29xj/BB9MA==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/@datadog/native-appsec/-/native-appsec-3.2.0.tgz",
+ "integrity": "sha512-biAa7EFfuavjSWgSQaCit9CqGzr6Af5nhzfNNGJ38Y/Y387hDvLivAR374kK1z6XoxGZEOa+XPbVogmV/2Bcjw==",
"requires": {
- "detect-libc": "^1.0.3",
- "minimist": "^1.2.6",
- "tar": "^6.1.11"
+ "node-gyp-build": "^3.9.0"
+ }
+ },
+ "@datadog/native-iast-rewriter": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@datadog/native-iast-rewriter/-/native-iast-rewriter-2.0.1.tgz",
+ "integrity": "sha512-Mm+FG3XxEbPrAfJQPOMHts7iZZXRvg9gnGeeFRGkyirmRcQcOpZO4wFe/8K61DUVa5pXpgAJQ2ZkBGYF1O9STg==",
+ "requires": {
+ "node-gyp-build": "^4.5.0"
},
"dependencies": {
- "minimist": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz",
- "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q=="
+ "node-gyp-build": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz",
+ "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ=="
}
}
},
+ "@datadog/native-iast-taint-tracking": {
+ "version": "1.5.0",
+ "resolved": "https://registry.npmjs.org/@datadog/native-iast-taint-tracking/-/native-iast-taint-tracking-1.5.0.tgz",
+ "integrity": "sha512-SOWIk1M6PZH0osNB191Voz2rKBPoF5hISWVSK9GiJPrD40+xjib1Z/bFDV7EkDn3kjOyordSBdNPG5zOqZJdyg==",
+ "requires": {
+ "node-gyp-build": "^3.9.0"
+ }
+ },
"@datadog/native-metrics": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@datadog/native-metrics/-/native-metrics-1.4.0.tgz",
- "integrity": "sha512-bkD74/9LVhW+N5h9suaPAOY/XdCanUqupnMU+Ik1F89kNHT4JG2NVG7c8NaXvpPsklY4UGXUz6xfOgKnMt+dBw==",
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/@datadog/native-metrics/-/native-metrics-1.6.0.tgz",
+ "integrity": "sha512-+8jBzd0nlLV+ay3Vb87DLwz8JHAS817hRhSRQ6zxhud9TyvvcNTNN+VA2sb2fe5UK4aMDvj/sGVJjEtgr4RHew==",
"requires": {
- "nan": "^2.15.0",
"node-gyp-build": "^3.9.0"
- },
- "dependencies": {
- "nan": {
- "version": "2.16.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.16.0.tgz",
- "integrity": "sha512-UdAqHyFngu7TfQKsCBgAA6pWDkT8MAO7d0jyOecVhN5354xbLqdn8mV9Tat9gepAupm0bt2DbeaSC8vS52MuFA=="
- }
}
},
"@datadog/pprof": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-0.5.1.tgz",
- "integrity": "sha512-Q4Qg8EpW1U/Vtd1GUONoKJmf91jxdzLLdDDidyW+nug2tq879MNi1Eh7q4bYETz93DAbV85lDUXDe0Ffkd4pDw==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@datadog/pprof/-/pprof-2.2.3.tgz",
+ "integrity": "sha512-cZXvNBBzvTMUx2xOxp49cZJ7/HOF7geVxqeRbveeJUVKwi8ZxmU1rQGcWPFX4iEEtfQu1M3NqbhmNtYsMJdEsQ==",
"requires": {
"delay": "^5.0.0",
- "findit2": "^2.2.3",
- "nan": "^2.14.0",
"node-gyp-build": "^3.9.0",
- "p-limit": "^3.0.0",
+ "p-limit": "^3.1.0",
"pify": "^5.0.0",
- "protobufjs": "~6.11.3",
- "rimraf": "^3.0.2",
- "semver": "^7.3.5",
+ "pprof-format": "^2.0.7",
"source-map": "^0.7.3",
"split": "^1.0.1"
},
@@ -29348,12 +29900,9 @@
}
},
"@datadog/sketches-js": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@datadog/sketches-js/-/sketches-js-1.0.5.tgz",
- "integrity": "sha512-1ZKyHxxgDI+zY0r+7msMUhFdLR7gkRgKGcNLdYjtXVyo5H64q16J/Khfp5+YAXOedKizKzT0Jf0kLwQ/IBU/pA==",
- "requires": {
- "protobufjs": "^6.11.3"
- }
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/@datadog/sketches-js/-/sketches-js-2.1.0.tgz",
+ "integrity": "sha512-smLocSfrt3s53H/XSVP3/1kP42oqvrkjUPtyaFd1F79ux24oE31BKt+q0c6lsa6hOYrFzsIwyc5GXAI5JmfOew=="
},
"@discoveryjs/json-ext": {
"version": "0.5.3",
@@ -30264,7 +30813,8 @@
"@material-ui/types": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.1.0.tgz",
- "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A=="
+ "integrity": "sha512-7cqRjrY50b8QzRSYyhSpx4WRw2YuO0KKIGQEVk5J8uoz2BanawykgZGoWEqKm7pVIbzFDN0SpPcVV4IhOFkl8A==",
+ "requires": {}
},
"@material-ui/utils": {
"version": "4.11.2",
@@ -30302,6 +30852,34 @@
"fastq": "^1.6.0"
}
},
+ "@opengovsg/sgid-client": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@opengovsg/sgid-client/-/sgid-client-2.0.0.tgz",
+ "integrity": "sha512-zqcVQz03zB7dAwWh2MJVRAmHYjK1EryqOPnbBgrkr8Jx8BjtcjFa4cCrHstwWP1kVkGomhi0C7e3TRvf1qYSFQ==",
+ "requires": {
+ "jose": "4.9.2",
+ "node-rsa": "1.1.1",
+ "openid-client": "5.4.0"
+ }
+ },
+ "@opentelemetry/api": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.4.1.tgz",
+ "integrity": "sha512-O2yRJce1GOc6PAy3QxFM4NzFiWzvScDC1/5ihYBL6BUEVdq0XMWN01sppE+H6bBXbaFYipjwFLEWLg5PaSOThA=="
+ },
+ "@opentelemetry/core": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.3.1.tgz",
+ "integrity": "sha512-k7lOC86N7WIyUZsUuSKZfFIrUtINtlauMGQsC1r7jNmcr0vVJGqK1ROBvt7WWMxLbpMnt1q2pXJO8tKu0b9auA==",
+ "requires": {
+ "@opentelemetry/semantic-conventions": "1.3.1"
+ }
+ },
+ "@opentelemetry/semantic-conventions": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.3.1.tgz",
+ "integrity": "sha512-wU5J8rUoo32oSef/rFpOT1HIjLjAv3qIDHkw1QIhODV3OpAVHi5oVzlouozg9obUmZKtbZ0qUe/m7FP0y0yBzA=="
+ },
"@protobufjs/aspromise": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
@@ -30384,16 +30962,16 @@
}
},
"@sentry/cli": {
- "version": "1.67.2",
- "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.67.2.tgz",
- "integrity": "sha512-lPn0Sffbjg2UmCkHl2iw8pKlqpPhy85mW0za5kz3LEqC9JGUXHo9eSyyCkiRktlemMXKk+DeS/nyFy/LTRUG2Q==",
+ "version": "1.75.2",
+ "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-1.75.2.tgz",
+ "integrity": "sha512-CG0CKH4VCKWzEaegouWfCLQt9SFN+AieFESCatJ7zSuJmzF05ywpMusjxqRul6lMwfUhRKjGKOzcRJ1jLsfTBw==",
"requires": {
"https-proxy-agent": "^5.0.0",
"mkdirp": "^0.5.5",
- "node-fetch": "^2.6.0",
- "npmlog": "^4.1.2",
+ "node-fetch": "^2.6.7",
"progress": "^2.0.3",
- "proxy-from-env": "^1.1.0"
+ "proxy-from-env": "^1.1.0",
+ "which": "^2.0.2"
},
"dependencies": {
"mkdirp": {
@@ -30722,6 +31300,15 @@
"@types/redis": "*"
}
},
+ "@types/cookie-parser": {
+ "version": "1.4.3",
+ "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz",
+ "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==",
+ "dev": true,
+ "requires": {
+ "@types/express": "*"
+ }
+ },
"@types/cookie-session": {
"version": "2.0.43",
"resolved": "https://registry.npmjs.org/@types/cookie-session/-/cookie-session-2.0.43.tgz",
@@ -31231,11 +31818,6 @@
"integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==",
"dev": true
},
- "@types/long": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz",
- "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA=="
- },
"@types/mime": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz",
@@ -31851,7 +32433,8 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.4.tgz",
"integrity": "sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@webpack-cli/info": {
"version": "1.3.0",
@@ -31866,7 +32449,8 @@
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.5.1.tgz",
"integrity": "sha512-4vSVUiOPJLmr45S8rMGy7WDvpWxfFxfP/Qx/cxZFCfvoypTYpPPL1X8VIZMe0WTA+Jr7blUxwUSEZNkjoMTgSw==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"@xtuc/ieee754": {
"version": "1.2.0",
@@ -31902,8 +32486,7 @@
"acorn": {
"version": "7.4.1",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz",
- "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==",
- "dev": true
+ "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="
},
"acorn-globals": {
"version": "6.0.0",
@@ -31924,11 +32507,18 @@
"@types/estree": "0.0.46"
}
},
+ "acorn-import-assertions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+ "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "requires": {}
+ },
"acorn-jsx": {
"version": "5.3.2",
"resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
"integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"acorn-walk": {
"version": "7.2.0",
@@ -31969,12 +32559,14 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz",
"integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"ajv-keywords": {
"version": "3.5.2",
"resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
- "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ=="
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "requires": {}
},
"amdefine": {
"version": "1.0.1",
@@ -32003,7 +32595,8 @@
"ansi-regex": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
},
"ansi-styles": {
"version": "3.2.1",
@@ -32071,15 +32664,6 @@
"readable-stream": "^2.0.0"
}
},
- "are-we-there-yet": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
- "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
"arg": {
"version": "4.1.3",
"resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz",
@@ -32236,7 +32820,6 @@
"version": "0.2.4",
"resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
"integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
- "dev": true,
"requires": {
"safer-buffer": "~2.1.0"
}
@@ -32305,12 +32888,6 @@
"resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
"integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k="
},
- "at-least-node": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
- "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
- "dev": true
- },
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
@@ -32338,10 +32915,15 @@
}
}
},
+ "available-typed-arrays": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz",
+ "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw=="
+ },
"aws-sdk": {
- "version": "2.1102.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1102.0.tgz",
- "integrity": "sha512-MMOncE8IG3Dop3WPza6ryTAEz413ftn/MtDO7ouessb3ljlg5BfqRkTe/rhPH5svqEqJvlh7qHnK0VjgJwmLTQ==",
+ "version": "2.1354.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1354.0.tgz",
+ "integrity": "sha512-3aDxvyuOqMB9DqJguCq6p8momdsz0JR1axwkWOOCzHA7a35+Bw+WLmqt3pWwRjR1tGIwkkZ2CvGJObYHsOuw3w==",
"requires": {
"buffer": "4.9.2",
"events": "1.1.1",
@@ -32350,14 +32932,15 @@
"querystring": "0.2.0",
"sax": "1.2.1",
"url": "0.10.3",
- "uuid": "3.3.2",
- "xml2js": "0.4.19"
+ "util": "^0.12.4",
+ "uuid": "8.0.0",
+ "xml2js": "0.5.0"
},
"dependencies": {
"uuid": {
- "version": "3.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
- "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz",
+ "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw=="
}
}
},
@@ -33494,7 +34077,8 @@
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
},
"coffeescript": {
"version": "2.5.1",
@@ -34016,9 +34600,9 @@
}
},
"conventional-changelog-conventionalcommits": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-4.6.0.tgz",
- "integrity": "sha512-sj9tj3z5cnHaSJCYObA9nISf7eq/YjscLPoq6nmew4SiOjxqL2KRpK20fjnjVbpNDjJ2HR3MoVcWKXwbVvzS0A==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz",
+ "integrity": "sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw==",
"dev": true,
"requires": {
"compare-func": "^2.0.0",
@@ -34033,9 +34617,9 @@
"dev": true
},
"conventional-commits-parser": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.1.tgz",
- "integrity": "sha512-OG9kQtmMZBJD/32NEw5IhN5+HnBqVjy03eC+I71I0oQRFA5rOgA4OtPOYG7mz1GkCfCNxn3gKIX8EiHJYuf1cA==",
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz",
+ "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==",
"dev": true,
"requires": {
"is-text-path": "^1.0.1",
@@ -34043,8 +34627,7 @@
"lodash": "^4.17.15",
"meow": "^8.0.0",
"split2": "^3.0.0",
- "through2": "^4.0.0",
- "trim-off-newlines": "^1.0.0"
+ "through2": "^4.0.0"
}
},
"convert-source-map": {
@@ -34061,6 +34644,22 @@
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
"integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA=="
},
+ "cookie-parser": {
+ "version": "1.4.6",
+ "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz",
+ "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==",
+ "requires": {
+ "cookie": "0.4.1",
+ "cookie-signature": "1.0.6"
+ },
+ "dependencies": {
+ "cookie": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz",
+ "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA=="
+ }
+ }
+ },
"cookie-session": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/cookie-session/-/cookie-session-1.4.0.tgz",
@@ -34305,6 +34904,13 @@
"yaml": "^1.10.0"
}
},
+ "cosmiconfig-typescript-loader": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz",
+ "integrity": "sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q==",
+ "dev": true,
+ "requires": {}
+ },
"coveralls": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz",
@@ -34460,7 +35066,8 @@
"csv-parse": {
"version": "5.3.6",
"resolved": "https://registry.npmjs.org/csv-parse/-/csv-parse-5.3.6.tgz",
- "integrity": "sha512-WI330GjCuEioK/ii8HM2YE/eV+ynpeLvU+RXw4R8bRU8R0laK5zO3fDsc4gH8s472e3Ga38rbIjCAiQh+tEHkw=="
+ "integrity": "sha512-WI330GjCuEioK/ii8HM2YE/eV+ynpeLvU+RXw4R8bRU8R0laK5zO3fDsc4gH8s472e3Ga38rbIjCAiQh+tEHkw==",
+ "dev": true
},
"cuint": {
"version": "0.2.2",
@@ -34484,9 +35091,12 @@
}
},
"d3-array": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
- "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+ "version": "3.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
+ "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+ "requires": {
+ "internmap": "1 - 2"
+ }
},
"d3-collection": {
"version": "1.0.7",
@@ -34494,29 +35104,29 @@
"integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
},
"d3-color": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
- "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
+ "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="
},
"d3-contour": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz",
- "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
+ "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
"requires": {
- "d3-array": "^1.1.1"
+ "d3-array": "^3.2.0"
}
},
"d3-format": {
- "version": "1.4.5",
- "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
- "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz",
+ "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA=="
},
"d3-geo": {
- "version": "1.12.1",
- "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz",
- "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz",
+ "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==",
"requires": {
- "d3-array": "1"
+ "d3-array": "2.5.0 - 3"
}
},
"d3-hexbin": {
@@ -34525,66 +35135,94 @@
"integrity": "sha1-nFg32s/UcasFM3qeke8Qv8T5iDE="
},
"d3-hierarchy": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz",
- "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
+ "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="
},
"d3-interpolate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
- "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
+ "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
"requires": {
- "d3-color": "1"
+ "d3-color": "1 - 3"
}
},
"d3-path": {
- "version": "1.0.9",
- "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
- "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
+ "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="
},
"d3-sankey": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.7.1.tgz",
- "integrity": "sha1-0imDImj8aaf+yEgD6WwiVqYUxSE=",
+ "version": "0.12.3",
+ "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
+ "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
"requires": {
- "d3-array": "1",
- "d3-collection": "1",
+ "d3-array": "1 - 2",
"d3-shape": "^1.2.0"
+ },
+ "dependencies": {
+ "d3-array": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
+ "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+ "requires": {
+ "internmap": "^1.0.0"
+ }
+ },
+ "d3-path": {
+ "version": "1.0.9",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
+ "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+ },
+ "d3-shape": {
+ "version": "1.3.7",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
+ "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+ "requires": {
+ "d3-path": "1"
+ }
+ },
+ "internmap": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
+ "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
+ }
}
},
"d3-scale": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz",
- "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
+ "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
"requires": {
- "d3-array": "^1.2.0",
- "d3-collection": "1",
- "d3-color": "1",
- "d3-format": "1",
- "d3-interpolate": "1",
- "d3-time": "1",
- "d3-time-format": "2"
+ "d3-array": "2.10.0 - 3",
+ "d3-format": "1 - 3",
+ "d3-interpolate": "1.2.0 - 3",
+ "d3-time": "2.1.1 - 3",
+ "d3-time-format": "2 - 4"
}
},
"d3-shape": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
- "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
+ "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
"requires": {
- "d3-path": "1"
+ "d3-path": "^3.1.0"
}
},
"d3-time": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
- "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
+ "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
+ "requires": {
+ "d3-array": "2 - 3"
+ }
},
"d3-time-format": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
- "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
+ "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
"requires": {
- "d3-time": "1"
+ "d3-time": "1 - 3"
}
},
"d3-voronoi": {
@@ -34637,73 +35275,72 @@
"date-fns": {
"version": "2.23.0",
"resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.23.0.tgz",
- "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA==",
- "dev": true
+ "integrity": "sha512-5ycpauovVyAk0kXNZz6ZoB9AYMZB4DObse7P3BPWmyEjXNORTI8EJ6X0uaSAq4sCHzM1uajzrkr6HnsLQpxGXA=="
},
"date-fns-tz": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.4.tgz",
- "integrity": "sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow=="
+ "integrity": "sha512-O47vEyz85F2ax/ZdhMBJo187RivZGjH6V0cPjPzpm/yi6YffJg4upD/8ibezO11ezZwP3QYlBHh/t4JhRNx0Ow==",
+ "requires": {}
},
"dd-trace": {
- "version": "2.11.0",
- "resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-2.11.0.tgz",
- "integrity": "sha512-UA4OGIIlW5NswS2y/2Qjy7p+oTJkWuetOurK/1fCetOSJLTp++Hh5Fys+RNn48meJfrayW4XMgCUinQsHU9qgg==",
- "requires": {
- "@datadog/native-appsec": "^1.2.1",
- "@datadog/native-metrics": "^1.4.0",
- "@datadog/pprof": "^0.5.1",
- "@datadog/sketches-js": "^1.0.5",
- "@types/node": ">=12",
+ "version": "2.40.0",
+ "resolved": "https://registry.npmjs.org/dd-trace/-/dd-trace-2.40.0.tgz",
+ "integrity": "sha512-hF+M9NnuAtFe8r82lMbCsZjJfBa0Yui58NgD/qnTBOwhaqnyVe8fsi1goOhvisafifkg3nlK46Fn7IIKruwtEw==",
+ "requires": {
+ "@datadog/native-appsec": "^3.2.0",
+ "@datadog/native-iast-rewriter": "2.0.1",
+ "@datadog/native-iast-taint-tracking": "^1.5.0",
+ "@datadog/native-metrics": "^1.6.0",
+ "@datadog/pprof": "2.2.3",
+ "@datadog/sketches-js": "^2.1.0",
+ "@opentelemetry/api": "^1.0.0",
+ "@opentelemetry/core": "<1.4.0",
+ "@types/node": "<18.13",
"crypto-randomuuid": "^1.0.0",
"diagnostics_channel": "^1.1.0",
- "form-data": "^3.0.0",
"ignore": "^5.2.0",
- "import-in-the-middle": "^1.2.1",
+ "import-in-the-middle": "^1.3.5",
+ "int64-buffer": "^0.1.9",
+ "ipaddr.js": "^2.0.1",
+ "istanbul-lib-coverage": "3.2.0",
"koalas": "^1.0.2",
"limiter": "^1.1.4",
"lodash.kebabcase": "^4.1.1",
"lodash.pick": "^4.4.0",
"lodash.sortby": "^4.7.0",
"lodash.uniq": "^4.5.0",
+ "lru-cache": "^7.14.0",
"methods": "^1.1.2",
"module-details-from-path": "^1.0.3",
+ "msgpack-lite": "^0.1.26",
+ "node-abort-controller": "^3.0.1",
"opentracing": ">=0.12.1",
"path-to-regexp": "^0.1.2",
- "performance-now": "^2.1.0",
+ "protobufjs": "^7.1.2",
"retry": "^0.10.1",
- "semver": "^5.5.0"
+ "semver": "^7.3.8"
},
"dependencies": {
- "form-data": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
- "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "mime-types": "^2.1.12"
- }
- },
"ignore": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz",
"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ=="
},
- "performance-now": {
+ "ipaddr.js": {
"version": "2.1.0",
- "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
- "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz",
+ "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ=="
+ },
+ "lru-cache": {
+ "version": "7.18.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
+ "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA=="
},
"retry": {
"version": "0.10.1",
"resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz",
"integrity": "sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ=="
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
}
}
},
@@ -35044,11 +35681,6 @@
"integrity": "sha512-oSyFlqaTHCItVRGK5RmrmjB+CmaMOW7IaNA/kdxqhoa6d17j/5ce9O9eWXmV/KEdRwqpQA+Vqe8a8Bsybu4YnA==",
"dev": true
},
- "detect-libc": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
- "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
- },
"detect-newline": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz",
@@ -35338,10 +35970,15 @@
"is-obj": "^2.0.0"
}
},
+ "dotenv": {
+ "version": "16.3.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
+ "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ=="
+ },
"dottie": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz",
- "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg=="
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.4.tgz",
+ "integrity": "sha512-iz64WUOmp/ECQhWMJjTWFzJN/wQ7RJ5v/a6A2OiCwjaGCpNo66WGIjlSf+IULO9DQd0b4cFawLOTbiKSrpKodw=="
},
"dynamic-dedupe": {
"version": "0.3.0",
@@ -35834,13 +36471,15 @@
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz",
"integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"eslint-import-resolver-alias": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-alias/-/eslint-import-resolver-alias-1.1.2.tgz",
"integrity": "sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"eslint-import-resolver-node": {
"version": "0.3.4",
@@ -36201,7 +36840,8 @@
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
"integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"eslint-scope": {
"version": "5.1.1",
@@ -36309,6 +36949,11 @@
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
+ "event-lite": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/event-lite/-/event-lite-0.1.3.tgz",
+ "integrity": "sha512-8qz9nOz5VeD2z96elrEKD2U433+L3DWdUdDkOINLGOJvx1GsMBbMn0aCeu28y8/e85A6mCigBiFlYMnTBEGlSw=="
+ },
"eventemitter3": {
"version": "4.0.7",
"resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz",
@@ -36551,7 +37196,8 @@
"express-joi-validation": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/express-joi-validation/-/express-joi-validation-4.0.3.tgz",
- "integrity": "sha512-XnEyhlllurczZDx1vLPWnaohTAQzxlvaP7ifEbvRf2zvYC5C5ZZrgFH75g0/XcL7OuaZ0XlVtB0J0E/R0O1L4A=="
+ "integrity": "sha512-XnEyhlllurczZDx1vLPWnaohTAQzxlvaP7ifEbvRf2zvYC5C5ZZrgFH75g0/XcL7OuaZ0XlVtB0J0E/R0O1L4A==",
+ "requires": {}
},
"express-rate-limit": {
"version": "5.3.0",
@@ -36947,11 +37593,6 @@
"locate-path": "^3.0.0"
}
},
- "findit2": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/findit2/-/findit2-2.2.3.tgz",
- "integrity": "sha512-lg/Moejf4qXovVutL0Lz4IsaPoNYMuxt4PA0nGqFxnJ1CTTGGlEO2wKgoDpwknhvZ8k4Q2F+eesgkLbG2Mxfog=="
- },
"findup-sync": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
@@ -36997,6 +37638,14 @@
"integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==",
"dev": true
},
+ "for-each": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz",
+ "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==",
+ "requires": {
+ "is-callable": "^1.1.3"
+ }
+ },
"for-in": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@@ -37050,12 +37699,11 @@
"integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow=="
},
"fs-extra": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
- "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==",
+ "version": "11.1.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
+ "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
"dev": true,
"requires": {
- "at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
@@ -37092,21 +37740,6 @@
"integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
"dev": true
},
- "gauge": {
- "version": "2.7.4",
- "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
- "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
"gensync": {
"version": "1.0.0-beta.2",
"resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
@@ -37135,13 +37768,13 @@
"dev": true
},
"get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
+ "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
"requires": {
"function-bind": "^1.1.1",
"has": "^1.0.3",
- "has-symbols": "^1.0.1"
+ "has-symbols": "^1.0.3"
}
},
"get-own-enumerable-property-symbols": {
@@ -37184,9 +37817,9 @@
}
},
"git-raw-commits": {
- "version": "2.0.10",
- "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.10.tgz",
- "integrity": "sha512-sHhX5lsbG9SOO6yXdlwgEMQ/ljIn7qMpAbJZCGfXX2fq5T8M5SrDnpYk9/4HswTildcIqatsWa91vty6VhWSaQ==",
+ "version": "2.0.11",
+ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-2.0.11.tgz",
+ "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==",
"dev": true,
"requires": {
"dargs": "^7.0.0",
@@ -37310,6 +37943,14 @@
"minimist": "^1.2.5"
}
},
+ "gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "requires": {
+ "get-intrinsic": "^1.1.3"
+ }
+ },
"graceful-fs": {
"version": "4.2.10",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz",
@@ -37401,9 +38042,17 @@
"dev": true
},
"has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw=="
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
+ "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A=="
+ },
+ "has-tostringtag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz",
+ "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==",
+ "requires": {
+ "has-symbols": "^1.0.2"
+ }
},
"has-unicode": {
"version": "2.0.1",
@@ -37504,11 +38153,6 @@
"value-equal": "^1.0.1"
}
},
- "hoek": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.1.tgz",
- "integrity": "sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA=="
- },
"hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
@@ -37901,11 +38545,26 @@
}
},
"import-in-the-middle": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.2.3.tgz",
- "integrity": "sha512-x7XhsP/pGf+HFFSmu5CoPwpTADPvr1tdZC7sYqAvtij0WeaxXoWXpjFbkm9OcT9gdSW9I3kgObIwmJj4jgE2zg==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.4.1.tgz",
+ "integrity": "sha512-hGG0PcCsykVo8MBVH8l0uEWLWW6DXMgJA9jvC0yps6M3uIJ8L/tagTCbyF8Ud5TtqJ8/jmZL1YkyySyeVkVQrA==",
"requires": {
+ "acorn": "^8.8.2",
+ "acorn-import-assertions": "^1.9.0",
+ "cjs-module-lexer": "^1.2.2",
"module-details-from-path": "^1.0.3"
+ },
+ "dependencies": {
+ "acorn": {
+ "version": "8.10.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
+ "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw=="
+ },
+ "cjs-module-lexer": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz",
+ "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ=="
+ }
}
},
"import-lazy": {
@@ -38039,6 +38698,11 @@
}
}
},
+ "int64-buffer": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/int64-buffer/-/int64-buffer-0.1.10.tgz",
+ "integrity": "sha512-v7cSY1J8ydZ0GyjUHqF+1bshJ6cnEVLo9EnjB8p+4HDRPZc9N5jjmvUV7NvEsqQOKyH0pmIBFWXVQbiS0+OBbA=="
+ },
"internal-ip": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-4.3.0.tgz",
@@ -38060,6 +38724,11 @@
"side-channel": "^1.0.4"
}
},
+ "internmap": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
+ "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg=="
+ },
"interpret": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz",
@@ -38160,8 +38829,7 @@
"is-callable": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz",
- "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==",
- "dev": true
+ "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ=="
},
"is-ci": {
"version": "2.0.0",
@@ -38259,6 +38927,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
"requires": {
"number-is-nan": "^1.0.0"
}
@@ -38269,6 +38938,14 @@
"integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==",
"dev": true
},
+ "is-generator-function": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz",
+ "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==",
+ "requires": {
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"is-glob": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
@@ -38399,6 +39076,18 @@
"text-extensions": "^1.0.0"
}
},
+ "is-typed-array": {
+ "version": "1.1.10",
+ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz",
+ "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==",
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0"
+ }
+ },
"is-typedarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
@@ -38447,8 +39136,7 @@
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA="
},
"isobject": {
"version": "3.0.1",
@@ -38463,10 +39151,9 @@
"dev": true
},
"istanbul-lib-coverage": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
- "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
- "dev": true
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz",
+ "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw=="
},
"istanbul-lib-instrument": {
"version": "4.0.3",
@@ -39307,7 +39994,8 @@
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz",
"integrity": "sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"jest-regex-util": {
"version": "26.0.0",
@@ -39974,6 +40662,11 @@
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
"integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw=="
},
+ "jose": {
+ "version": "4.9.2",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-4.9.2.tgz",
+ "integrity": "sha512-EqKvu2PqJCD3Jrg3PvcYZVS7D21qMVLSYMDAFcOdGUEOpJSLNtJO7NjLANvu3SYHVl6pdP2ff7ve6EZW2nX7Nw=="
+ },
"js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
@@ -40618,6 +41311,12 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
"integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
},
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==",
+ "dev": true
+ },
"lodash.clonedeep": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
@@ -40651,6 +41350,12 @@
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
+ "lodash.isfunction": {
+ "version": "3.0.9",
+ "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz",
+ "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==",
+ "dev": true
+ },
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
@@ -40673,16 +41378,34 @@
"integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
"dev": true
},
+ "lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==",
+ "dev": true
+ },
"lodash.pick": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
"integrity": "sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q=="
},
+ "lodash.snakecase": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz",
+ "integrity": "sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==",
+ "dev": true
+ },
"lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
"integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA=="
},
+ "lodash.startcase": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.startcase/-/lodash.startcase-4.4.0.tgz",
+ "integrity": "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==",
+ "dev": true
+ },
"lodash.truncate": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
@@ -40699,6 +41422,12 @@
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
"integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ=="
},
+ "lodash.upperfirst": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz",
+ "integrity": "sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==",
+ "dev": true
+ },
"log-driver": {
"version": "1.2.7",
"resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz",
@@ -40939,9 +41668,9 @@
"dev": true
},
"long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz",
+ "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q=="
},
"longest": {
"version": "2.0.1",
@@ -40989,9 +41718,9 @@
},
"dependencies": {
"semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw=="
+ "version": "6.3.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="
}
}
},
@@ -41320,6 +42049,17 @@
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
},
+ "msgpack-lite": {
+ "version": "0.1.26",
+ "resolved": "https://registry.npmjs.org/msgpack-lite/-/msgpack-lite-0.1.26.tgz",
+ "integrity": "sha512-SZ2IxeqZ1oRFGo0xFGbvBJWMp3yLIY9rlIJyxy8CGrwZn1f0ZK4r6jV/AM1r0FZMDUkWkglOk/eeKIL9g77Nxw==",
+ "requires": {
+ "event-lite": "^0.1.1",
+ "ieee754": "^1.1.8",
+ "int64-buffer": "^0.1.9",
+ "isarray": "^1.0.0"
+ }
+ },
"multicast-dns": {
"version": "6.2.3",
"resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz",
@@ -41351,7 +42091,8 @@
"nan": {
"version": "2.14.2",
"resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz",
- "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ=="
+ "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==",
+ "optional": true
},
"nanoid": {
"version": "3.3.2",
@@ -41429,6 +42170,11 @@
"semver": "^7.3.5"
}
},
+ "node-abort-controller": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/node-abort-controller/-/node-abort-controller-3.1.1.tgz",
+ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ=="
+ },
"node-addon-api": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.0.0.tgz",
@@ -41523,6 +42269,14 @@
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz",
"integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg=="
},
+ "node-rsa": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/node-rsa/-/node-rsa-1.1.1.tgz",
+ "integrity": "sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==",
+ "requires": {
+ "asn1": "^0.2.4"
+ }
+ },
"node-source-walk": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/node-source-walk/-/node-source-walk-4.2.0.tgz",
@@ -41607,17 +42361,6 @@
"path-key": "^3.0.0"
}
},
- "npmlog": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
- "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
"nth-check": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz",
@@ -41629,7 +42372,8 @@
"number-is-nan": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
},
"nwsapi": {
"version": "2.2.0",
@@ -41679,6 +42423,11 @@
}
}
},
+ "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-inspect": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz",
@@ -41769,6 +42518,11 @@
"integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==",
"dev": true
},
+ "oidc-token-hash": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/oidc-token-hash/-/oidc-token-hash-5.0.3.tgz",
+ "integrity": "sha512-IF4PcGgzAr6XXSff26Sk/+P4KZFJVuHAJZj3wgO3vX2bMdNVp/QXTP3P7CEm9V1IdG8lDLY3HhiqpsE/nOwpPw=="
+ },
"on-finished": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
@@ -41807,6 +42561,24 @@
"mimic-fn": "^2.1.0"
}
},
+ "openid-client": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.4.0.tgz",
+ "integrity": "sha512-hgJa2aQKcM2hn3eyVtN12tEA45ECjTJPXCgUh5YzTzy9qwapCvmDTVPWOcWVL0d34zeQoQ/hbG9lJhl3AYxJlQ==",
+ "requires": {
+ "jose": "^4.10.0",
+ "lru-cache": "^6.0.0",
+ "object-hash": "^2.0.1",
+ "oidc-token-hash": "^5.0.1"
+ },
+ "dependencies": {
+ "jose": {
+ "version": "4.14.4",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.4.tgz",
+ "integrity": "sha512-j8GhLiKmUAh+dsFXlX1aJCbt5KMibuKb+d7j1JaOJG6s2UjX1PQlW+OKB/sD4a/5ZYF4RcmYmLSndOoU3Lt/3g=="
+ }
+ }
+ },
"opentracing": {
"version": "0.14.7",
"resolved": "https://registry.npmjs.org/opentracing/-/opentracing-0.14.7.tgz",
@@ -42124,7 +42896,8 @@
"pg-pool": {
"version": "3.4.1",
"resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.4.1.tgz",
- "integrity": "sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ=="
+ "integrity": "sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==",
+ "requires": {}
},
"pg-protocol": {
"version": "1.5.0",
@@ -42409,6 +43182,11 @@
"xtend": "^4.0.0"
}
},
+ "pprof-format": {
+ "version": "2.0.7",
+ "resolved": "https://registry.npmjs.org/pprof-format/-/pprof-format-2.0.7.tgz",
+ "integrity": "sha512-1qWaGAzwMpaXJP9opRa23nPnt2Egi7RMNoNBptEE/XwHbcn4fC2b/4U4bKc5arkGkIh2ZabpF2bEb+c5GNHEKA=="
+ },
"prebuild-install": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz",
@@ -42590,9 +43368,9 @@
}
},
"protobufjs": {
- "version": "6.11.3",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz",
- "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==",
+ "version": "7.2.4",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.4.tgz",
+ "integrity": "sha512-AT+RJgD2sH8phPmCf7OUZR8xGdcJRga4+1cOaXJ64hvcSkVhNcRHOwIxUatPH15+nj59WAGTDv3LSGZPEQbJaQ==",
"requires": {
"@protobufjs/aspromise": "^1.1.2",
"@protobufjs/base64": "^1.1.2",
@@ -42604,9 +43382,8 @@
"@protobufjs/path": "^1.1.2",
"@protobufjs/pool": "^1.1.0",
"@protobufjs/utf8": "^1.1.0",
- "@types/long": "^4.0.1",
"@types/node": ">=13.7.0",
- "long": "^4.0.0"
+ "long": "^5.0.0"
}
},
"proxy-addr": {
@@ -42919,7 +43696,8 @@
"react-ga": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/react-ga/-/react-ga-3.3.0.tgz",
- "integrity": "sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ=="
+ "integrity": "sha512-o8RScHj6Lb8cwy3GMrVH6NJvL+y0zpJvKtc0+wmH7Bt23rszJmnqEQxRbyrqUzk9DTJIHoP42bfO5rswC9SWBQ==",
+ "requires": {}
},
"react-i18next": {
"version": "11.11.4",
@@ -43037,26 +43815,25 @@
}
},
"react-vis": {
- "version": "1.11.7",
- "resolved": "https://registry.npmjs.org/react-vis/-/react-vis-1.11.7.tgz",
- "integrity": "sha512-vJqS12l/6RHeSq8DVl4PzX0j8iPgbT8H8PtgTRsimKsBNcPjPseO4RICw1FUPrwj8MPrrna34LBtzyC4ATd5Ow==",
- "requires": {
- "d3-array": "^1.2.0",
- "d3-collection": "^1.0.3",
- "d3-color": "^1.0.3",
- "d3-contour": "^1.1.0",
- "d3-format": "^1.2.0",
- "d3-geo": "^1.6.4",
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/react-vis/-/react-vis-1.12.1.tgz",
+ "integrity": "sha512-vH7ihTPlBD6wBuzwPoipheyJnx46kKKMXnVqdk4mv5vq+bJVC6JRYdRZSofa2030+kko99rSq/idnYnNWGr6zA==",
+ "requires": {
+ "d3-array": "^3.2.1",
+ "d3-collection": "^1.0.7",
+ "d3-color": "^3.1.0",
+ "d3-contour": "^4.0.0",
+ "d3-format": "^3.1.0",
+ "d3-geo": "^3.1.0",
"d3-hexbin": "^0.2.2",
- "d3-hierarchy": "^1.1.4",
- "d3-interpolate": "^1.1.4",
- "d3-sankey": "^0.7.1",
- "d3-scale": "^1.0.5",
- "d3-shape": "^1.1.0",
- "d3-voronoi": "^1.1.2",
+ "d3-hierarchy": "^3.1.2",
+ "d3-interpolate": "^3.0.1",
+ "d3-sankey": "^0.12.3",
+ "d3-scale": "^4.0.2",
+ "d3-shape": "^3.2.0",
+ "d3-voronoi": "^1.1.4",
"deep-equal": "^1.0.1",
"global": "^4.3.1",
- "hoek": "4.2.1",
"prop-types": "^15.5.8",
"react-motion": "^0.5.2"
}
@@ -43301,12 +44078,14 @@
"redux-devtools-extension": {
"version": "2.13.9",
"resolved": "https://registry.npmjs.org/redux-devtools-extension/-/redux-devtools-extension-2.13.9.tgz",
- "integrity": "sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A=="
+ "integrity": "sha512-cNJ8Q/EtjhQaZ71c8I9+BPySIBVEKssbPpskBfsXqb8HJ002A3KRVHfeRzwRo6mGPqsm7XuHTqNSNeS1Khig0A==",
+ "requires": {}
},
"redux-thunk": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz",
- "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q=="
+ "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==",
+ "requires": {}
},
"reflect-metadata": {
"version": "0.1.13",
@@ -44001,7 +44780,7 @@
"sax": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz",
- "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o="
+ "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA=="
},
"saxes": {
"version": "5.0.1",
@@ -44048,9 +44827,9 @@
}
},
"semver": {
- "version": "7.3.5",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
- "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+ "version": "7.5.4",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
"requires": {
"lru-cache": "^6.0.0"
}
@@ -44292,14 +45071,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
"integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w=="
- },
- "semver": {
- "version": "7.3.8",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
- "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
- "requires": {
- "lru-cache": "^6.0.0"
- }
}
}
},
@@ -44864,6 +45635,7 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
"requires": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -44929,6 +45701,7 @@
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
"requires": {
"ansi-regex": "^2.0.0"
}
@@ -46303,12 +47076,6 @@
"integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==",
"dev": true
},
- "trim-off-newlines": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/trim-off-newlines/-/trim-off-newlines-1.0.3.tgz",
- "integrity": "sha512-kh6Tu6GbeSNMGfrrZh6Bb/4ZEHV1QlB4xNDBeog8Y9/QwFlKTRyWvY3Fs9tRDAMZliVUwieMgEdIeL/FtqjkJg==",
- "dev": true
- },
"triple-beam": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz",
@@ -46407,12 +47174,12 @@
}
},
"ts-node": {
- "version": "10.7.0",
- "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.7.0.tgz",
- "integrity": "sha512-TbIGS4xgJoX2i3do417KSaep1uRAW/Lu+WAL2doDHC0D6ummjirVOXU5/7aiZotbQ5p1Zp9tP7U6cYhA0O7M8A==",
+ "version": "10.9.1",
+ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
+ "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
"dev": true,
"requires": {
- "@cspotcode/source-map-support": "0.7.0",
+ "@cspotcode/source-map-support": "^0.8.0",
"@tsconfig/node10": "^1.0.7",
"@tsconfig/node12": "^1.0.7",
"@tsconfig/node14": "^1.0.0",
@@ -46423,7 +47190,7 @@
"create-require": "^1.1.0",
"diff": "^4.0.1",
"make-error": "^1.1.1",
- "v8-compile-cache-lib": "^3.0.0",
+ "v8-compile-cache-lib": "^3.0.1",
"yn": "3.1.1"
},
"dependencies": {
@@ -46829,6 +47596,18 @@
"integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
"dev": true
},
+ "util": {
+ "version": "0.12.5",
+ "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz",
+ "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==",
+ "requires": {
+ "inherits": "^2.0.3",
+ "is-arguments": "^1.0.4",
+ "is-generator-function": "^1.0.7",
+ "is-typed-array": "^1.1.3",
+ "which-typed-array": "^1.1.2"
+ }
+ },
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
@@ -47019,12 +47798,6 @@
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
"integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw=="
},
- "acorn-import-assertions": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz",
- "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==",
- "requires": {}
- },
"events": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
@@ -47511,7 +48284,6 @@
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
- "dev": true,
"requires": {
"isexe": "^2.0.0"
}
@@ -47577,6 +48349,19 @@
}
}
},
+ "which-typed-array": {
+ "version": "1.1.9",
+ "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz",
+ "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==",
+ "requires": {
+ "available-typed-arrays": "^1.0.5",
+ "call-bind": "^1.0.2",
+ "for-each": "^0.3.3",
+ "gopd": "^1.0.1",
+ "has-tostringtag": "^1.0.0",
+ "is-typed-array": "^1.1.10"
+ }
+ },
"wide-align": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
@@ -47755,7 +48540,8 @@
"version": "7.5.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz",
"integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==",
- "dev": true
+ "dev": true,
+ "requires": {}
},
"xml-name-validator": {
"version": "3.0.0",
@@ -47764,18 +48550,18 @@
"dev": true
},
"xml2js": {
- "version": "0.4.19",
- "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz",
- "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==",
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz",
+ "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==",
"requires": {
"sax": ">=0.6.0",
- "xmlbuilder": "~9.0.1"
+ "xmlbuilder": "~11.0.0"
}
},
"xmlbuilder": {
- "version": "9.0.7",
- "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
- "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0="
+ "version": "11.0.1",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz",
+ "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA=="
},
"xmlchars": {
"version": "2.2.0",
diff --git a/package.json b/package.json
index 4c325dc5d..cc9258b35 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "GoGovSG",
- "version": "1.74.0",
+ "version": "1.77.0",
"description": "Link shortener for Singapore government.",
"main": "src/server/index.js",
"scripts": {
@@ -13,9 +13,9 @@
"build": "tsc && webpack --mode production",
"postbuild": "copyfiles -u 1 src/server/views/**/* build && copyfiles -u 4 src/server/modules/qr/assets/**/* build/server/modules/qr",
"version": "auto-changelog -p && git add CHANGELOG.md",
- "start": "node build/server/index.js",
+ "start": "node -r dotenv/config build/server/index.js",
"client-dev": "webpack serve --mode development --host 0.0.0.0 --devtool inline-source-map --hot",
- "server-dev": "ts-node-dev --poll --respawn --transpile-only --inspect=0.0.0.0 -- src/server/index.ts",
+ "server-dev": "ts-node-dev --poll --respawn --transpile-only --inspect=0.0.0.0 -r dotenv/config -- src/server/index.ts",
"docker-dev": "concurrently \"npm run server-dev\" \"npm run client-dev\"",
"dev": "docker-compose -f docker-compose.yml up --build",
"test": "jest --collectCoverage",
@@ -40,13 +40,14 @@
"@hapi/joi": "^17.1.1",
"@material-ui/core": "^4.11.4",
"@material-ui/lab": "^4.0.0-alpha.61",
+ "@opengovsg/sgid-client": "^2.0.0",
"@sentry/react": "^6.11.0",
"@sentry/tracing": "^6.8.0",
"@sentry/webpack-plugin": "^1.15.1",
"@types/express-rate-limit": "^5.1.3",
"@types/papaparse": "^5.3.5",
"archiver": "^5.3.1",
- "aws-sdk": "^2.1101.0",
+ "aws-sdk": "^2.1354.0",
"babel-polyfill": "^6.26.0",
"bcrypt": "^5.1.0",
"body-parser": "^1.19.2",
@@ -56,13 +57,15 @@
"clean-webpack-plugin": "^3.0.0",
"cloudmersive-virus-api-client": "^1.2.2",
"connect-redis": "^6.0.0",
+ "cookie-parser": "^1.4.6",
"cookie-session": "^1.4.0",
"copy-to-clipboard": "^3.3.1",
"core-js": "^3.16.3",
"cross-fetch": "^3.1.5",
"datadog-winston": "^1.5.1",
"date-fns-tz": "^1.3.4",
- "dd-trace": "^2.11.0",
+ "dd-trace": "^2.30.1",
+ "dotenv": "^16.3.1",
"ejs": "^3.1.7",
"express": "^4.17.3",
"express-fileupload": "^1.4.0",
@@ -100,7 +103,7 @@
"react-redux": "^7.2.4",
"react-router-dom": "^5.2.0",
"react-typed": "^1.2.0",
- "react-vis": "^1.11.7",
+ "react-vis": "^1.11.8",
"redis": "^3.1.2",
"redux": "^4.1.1",
"redux-devtools-extension": "^2.13.9",
@@ -122,14 +125,15 @@
"@babel/preset-env": "^7.14.7",
"@babel/preset-react": "^7.14.5",
"@babel/preset-typescript": "^7.14.5",
- "@commitlint/cli": "^12.1.4",
- "@commitlint/config-conventional": "^12.1.4",
+ "@commitlint/cli": "^17.6.6",
+ "@commitlint/config-conventional": "^17.6.6",
"@commitlint/travis-cli": "^14.1.0",
"@types/bcrypt": "^5.0.0",
"@types/chart.js": "^2.9.34",
"@types/classnames": "^2.3.1",
"@types/cloudmersive-virus-api-client": "^1.1.1",
"@types/connect-redis": "0.0.17",
+ "@types/cookie-parser": "^1.4.3",
"@types/cookie-session": "^2.0.39",
"@types/d3": "^6.7.3",
"@types/datadog-winston": "^1.0.5",
@@ -203,6 +207,9 @@
"webpack-cli": "^4.7.2",
"webpack-dev-server": "^3.11.2"
},
+ "overrides": {
+ "@sentry/cli": "^1.75.2"
+ },
"lint-staged": {
"**/*.(js|jsx)": [
"eslint --ext .js,.jsx --no-eslintrc -c .eslintrc.js.json --fix"
diff --git a/public/assets/edu/transition-page/images/announcement-modal-memos.svg b/public/assets/edu/transition-page/images/announcement-modal-memos.svg
new file mode 100644
index 000000000..c56560043
--- /dev/null
+++ b/public/assets/edu/transition-page/images/announcement-modal-memos.svg
@@ -0,0 +1,68 @@
+
diff --git a/public/assets/gov/transition-page/images/announcement-modal-memos.svg b/public/assets/gov/transition-page/images/announcement-modal-memos.svg
new file mode 100644
index 000000000..c56560043
--- /dev/null
+++ b/public/assets/gov/transition-page/images/announcement-modal-memos.svg
@@ -0,0 +1,68 @@
+
diff --git a/public/assets/health/transition-page/images/announcement-modal-memos.svg b/public/assets/health/transition-page/images/announcement-modal-memos.svg
new file mode 100644
index 000000000..c56560043
--- /dev/null
+++ b/public/assets/health/transition-page/images/announcement-modal-memos.svg
@@ -0,0 +1,68 @@
+
diff --git a/public/locales/gov/en/translation.json b/public/locales/gov/en/translation.json
index fdac3373e..501ced066 100644
--- a/public/locales/gov/en/translation.json
+++ b/public/locales/gov/en/translation.json
@@ -28,7 +28,8 @@
"builtBy": "https://open.gov.sg",
"linkedin": "https://sg.linkedin.com/company/open-government-products",
"facebook": "https://www.facebook.com/opengovsg",
- "apiDoc": "https://guide.go.gov.sg/developer-guide/api-documentation"
+ "apiDoc": "https://guide.go.gov.sg/developer-guide/api-documentation",
+ "verifyMessages": "https://check.go.gov.sg"
},
"builtBy": "Built by Open Government Products"
},
diff --git a/src/client/app/assets/edu/components/app/base-layout/checkwho-icon.svg b/src/client/app/assets/edu/components/app/base-layout/checkwho-icon.svg
new file mode 100644
index 000000000..235db5eff
--- /dev/null
+++ b/src/client/app/assets/edu/components/app/base-layout/checkwho-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/client/app/assets/gov/components/app/base-layout/checkwho-icon.svg b/src/client/app/assets/gov/components/app/base-layout/checkwho-icon.svg
new file mode 100644
index 000000000..235db5eff
--- /dev/null
+++ b/src/client/app/assets/gov/components/app/base-layout/checkwho-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/client/app/assets/health/components/app/base-layout/checkwho-icon.svg b/src/client/app/assets/health/components/app/base-layout/checkwho-icon.svg
new file mode 100644
index 000000000..235db5eff
--- /dev/null
+++ b/src/client/app/assets/health/components/app/base-layout/checkwho-icon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/client/app/components/BaseLayout/BaseLayoutHeader.tsx b/src/client/app/components/BaseLayout/BaseLayoutHeader.tsx
index e7ef044fe..5ac124a6b 100644
--- a/src/client/app/components/BaseLayout/BaseLayoutHeader.tsx
+++ b/src/client/app/components/BaseLayout/BaseLayoutHeader.tsx
@@ -18,6 +18,7 @@ import GoLogoMiniLight from '@assets/go-logo-graphics/go-main-logo-mini-light.sv
import helpIcon from '@assets/shared/help-icon.svg'
import logoutIcon from '@assets/components/app/base-layout/logout-icon.svg'
import logoutWhiteIcon from '@assets/components/app/base-layout/logout-white-icon.svg'
+import checkwhoIcon from '@assets/components/app/base-layout/checkwho-icon.svg'
import directoryIcon from '@assets/components/app/base-layout/directory-icon.svg'
import feedbackIcon from '@assets/components/app/base-layout/feedback-icon.svg'
import githubIcon from '@assets/components/app/base-layout/github-icon.svg'
@@ -27,6 +28,7 @@ import homeIcon from '@assets/components/app/base-layout/home-icon.svg'
import Section from '../Section'
import loginActions from '../../../login/actions'
import { GoGovReduxState } from '../../reducers/types'
+import assetVariant from '../../../../shared/util/asset-variant'
type StyleProps = {
isLoggedIn: boolean
@@ -101,6 +103,7 @@ const useStyles = makeStyles((theme) =>
paddingRight: 0,
minWidth: theme.spacing(6),
},
+ order: 10,
},
logoutIcon: {
width: '24px',
@@ -118,6 +121,21 @@ type BaseLayoutHeaderProps = {
toStick: boolean
}
+type HeaderButtonProps = {
+ text: string
+ link: string
+ public: boolean
+ icon: string
+ mobileOrder?: number
+ internalLink?: boolean
+ displayNotEnabledForVariant?: string[]
+}
+
+function isEnabledForAssetVariant(header: HeaderButtonProps) {
+ if (header.displayNotEnabledForVariant === undefined) return true
+ return !header.displayNotEnabledForVariant.includes(assetVariant)
+}
+
const BaseLayoutHeader: FunctionComponent = ({
backgroundType,
hideNavButtons = false,
@@ -163,18 +181,21 @@ const BaseLayoutHeader: FunctionComponent = ({
link: i18next.t('general.links.feedback'),
public: true,
icon: feedbackIcon,
+ mobileOrder: 3,
},
{
text: 'Guide',
link: i18next.t('general.links.faq'),
public: true,
icon: helpIcon,
+ mobileOrder: 4,
},
{
text: 'Contribute',
link: i18next.t('general.links.contribute'),
public: true,
icon: githubIcon,
+ mobileOrder: 5,
},
{
text: 'Guide',
@@ -190,6 +211,14 @@ const BaseLayoutHeader: FunctionComponent = ({
icon: feedbackIcon,
mobileOrder: 5,
},
+ {
+ text: 'Verify Messages',
+ link: i18next.t('general.links.verifyMessages'),
+ public: true,
+ icon: checkwhoIcon,
+ mobileOrder: 6,
+ displayNotEnabledForVariant: ['edu', 'health'],
+ },
]
const appBarBtn = isLoggedIn ? (
@@ -273,6 +302,7 @@ const BaseLayoutHeader: FunctionComponent = ({
{!hideNavButtons &&
headers.map(
(header) =>
+ isEnabledForAssetVariant(header) &&
(header.public ? !isLoggedIn : isLoggedIn) && (
diff --git a/src/client/app/components/pages/RootPage/index.tsx b/src/client/app/components/pages/RootPage/index.tsx
index 5e8b51dfa..09476088c 100644
--- a/src/client/app/components/pages/RootPage/index.tsx
+++ b/src/client/app/components/pages/RootPage/index.tsx
@@ -10,6 +10,7 @@ import { History } from 'history'
import PrivateRoute from '../../PrivateRoute'
import HomePage from '../../../../home'
import LoginPage from '../../../../login'
+import SgidLoginPage from '../../../../sgidLogin'
import UserPage from '../../../../user'
import NotFoundPage from '../NotFoundPage'
import DirectoryPage from '../../../../directory'
@@ -30,6 +31,7 @@ import {
HOME_PAGE,
LOGIN_PAGE,
NOT_FOUND_PAGE,
+ SGID_LOGIN_PAGE,
USER_PAGE,
} from '../../../util/types'
import theme from '../../../theme'
@@ -47,6 +49,7 @@ const Root: FunctionComponent = ({ store, history }: RootProps) => (
+
diff --git a/src/client/app/util/types.ts b/src/client/app/util/types.ts
index 131ab6647..7ca360554 100644
--- a/src/client/app/util/types.ts
+++ b/src/client/app/util/types.ts
@@ -1,5 +1,6 @@
export const HOME_PAGE = '/'
export const LOGIN_PAGE = '/login'
+export const SGID_LOGIN_PAGE = '/ogp-login'
export const USER_PAGE = '/user'
export const SEARCH_PAGE = '/search'
export const NOT_FOUND_PAGE = '/404/:shortUrl'
diff --git a/src/client/login/actions/index.ts b/src/client/login/actions/index.ts
index 46d987f10..4125e6b75 100644
--- a/src/client/login/actions/index.ts
+++ b/src/client/login/actions/index.ts
@@ -115,8 +115,8 @@ const getEmailValidationGlobExpression =
dispatch(
setEmailValidator((email: string) => {
return (
- globValidator.match(email) &&
- validator.isEmail(email, { allow_utf8_local_part: false })
+ validator.isEmail(email, { allow_utf8_local_part: false }) &&
+ globValidator.match(email)
)
}),
)
diff --git a/src/client/sgidLogin/index.tsx b/src/client/sgidLogin/index.tsx
new file mode 100644
index 000000000..e361c1cec
--- /dev/null
+++ b/src/client/sgidLogin/index.tsx
@@ -0,0 +1,208 @@
+import React, { useEffect } from 'react'
+import i18next from 'i18next'
+import {
+ Button,
+ Hidden,
+ Link,
+ Typography,
+ createStyles,
+ makeStyles,
+} from '@material-ui/core'
+import GoLogo from '@assets/go-logo-graphics/go-main-logo.svg'
+import LoginGraphics from '@assets/login-page-graphics/login-page-graphics.svg'
+import { useDispatch } from 'react-redux'
+import rootActions from '../app/components/pages/RootPage/actions'
+
+import assetVariant from '../../shared/util/asset-variant'
+
+import { htmlSanitizer } from '../app/util/format'
+import Section from '../app/components/Section'
+import BaseLayout from '../app/components/BaseLayout'
+import { get } from '../app/util/requests'
+
+const URL_PREFIX_LENGTH = '#/ogp-login'.length
+
+const useStyles = makeStyles((theme) =>
+ createStyles({
+ container: {
+ display: 'flex',
+ flexGrow: 1,
+ '-ms-flex': '1 1 auto',
+ },
+ loginContainer: {
+ display: 'flex',
+ width: '100%',
+ [theme.breakpoints.up('lg')]: {
+ width: '50%',
+ },
+ },
+ verticalAlign: {
+ display: 'flex',
+ width: '100%',
+ [theme.breakpoints.up('lg')]: {
+ alignItems: 'center',
+ },
+ },
+ signInButton: {
+ width: '250px',
+ minWidth: '120px',
+ marginRight: theme.spacing(2),
+ },
+ loginWrapper: {
+ display: 'block',
+ [theme.breakpoints.up('lg')]: {
+ // Gives the contents slightly more than enough height,
+ // so that validation messages do not shift the centering.
+ height: '400px',
+ maxHeight: '80vh',
+ },
+ },
+ headerGroup: {
+ marginBottom: theme.spacing(4),
+ },
+ logo: {
+ maxWidth: '130px',
+ width: '40%',
+ },
+ loginHeader: {
+ marginTop: theme.spacing(1),
+ },
+ loginReferral: {
+ fontSize: '0.85rem',
+ color: '#767676',
+ marginBottom: theme.spacing(4),
+ },
+ graphicColorFill: {
+ backgroundColor: theme.palette.primary.dark,
+ width: '50vw',
+ height: '100%',
+ // allocates space for the government masthead when on gov variant
+ maxHeight: assetVariant === 'gov' ? 'calc(100vh - 28px)' : '100vh',
+ textAlign: 'center',
+ overflow: 'hidden',
+ },
+ loginGraphic: {
+ userDrag: 'none',
+ height: '100%',
+ },
+ '@media screen\\0': {
+ // Styles for Internet Explorer compatibility
+ logoLink: {
+ marginBottom: '0',
+ },
+ },
+ }),
+)
+
+const SgidLoginPage = (): JSX.Element => {
+ const dispatch = useDispatch()
+ const classes = useStyles()
+ const queryParams = new URLSearchParams(
+ new URL(window.location.href).hash.substring(URL_PREFIX_LENGTH),
+ )
+
+ const setLoginStatusMessage = (message: string) =>
+ dispatch(rootActions.setInfoMessage(message))
+
+ useEffect(() => {
+ const officerEmail = queryParams.get('officerEmail')
+ const statusCode = queryParams.get('statusCode')
+ if (officerEmail) {
+ setLoginStatusMessage(
+ `${officerEmail} doesn't look like a valid ${i18next.t(
+ 'general.emailDomain',
+ )} email.`,
+ )
+ } else if (statusCode === '403') {
+ setLoginStatusMessage(
+ `Unable to fetch a valid work email for authentication.`,
+ )
+ } else if (statusCode === '400') {
+ setLoginStatusMessage(`Authentication failed. Please try again.`)
+ }
+ }, [])
+
+ return (
+
+
+
+
+
+
![Login page graphic]({LoginGraphics})
+
+
+
+
+
+
+
+
+
+
+
+
+ {/* NOTE: dangerouslySetInnerHTML is used as copy includes tag */}
+
+
+ {i18next.t('login.referrals.1.officerPhrase')} can use their{' '}
+ {i18next.t('login.referrals.1.emailDomain')} emails at{' '}
+
+ {i18next.t('login.referrals.1.link')}
+
+ , and {i18next.t('login.referrals.2.officerPhrase')} can use
+ their {i18next.t('login.referrals.2.emailDomain')} emails at{' '}
+
+ {i18next.t('login.referrals.2.link')}
+ {' '}
+ to shorten links.
+
+
+
+
+
+
+
+
+
+ )
+}
+
+export default SgidLoginPage
diff --git a/src/client/user/actions/index.ts b/src/client/user/actions/index.ts
index be5db9fc2..73ddff266 100644
--- a/src/client/user/actions/index.ts
+++ b/src/client/user/actions/index.ts
@@ -186,6 +186,7 @@ const setUserAnnouncement: (payload: {
subtitle: string
url: string
image: string
+ buttonText: string
}) => SetUserAnnouncementAction = (payload) => ({
type: UserAction.SET_USER_ANNOUNCEMENT,
payload,
diff --git a/src/client/user/actions/types.ts b/src/client/user/actions/types.ts
index 0dd5068c9..6adcc0b91 100644
--- a/src/client/user/actions/types.ts
+++ b/src/client/user/actions/types.ts
@@ -67,6 +67,7 @@ export type SetUserAnnouncementAction = ReduxPayloadAction<
subtitle: string | undefined
url: string | undefined
image: string | undefined
+ buttonText: string | undefined
}
>
diff --git a/src/client/user/components/AnnouncementModal/index.tsx b/src/client/user/components/AnnouncementModal/index.tsx
index 8b8ea476b..5a84316e9 100644
--- a/src/client/user/components/AnnouncementModal/index.tsx
+++ b/src/client/user/components/AnnouncementModal/index.tsx
@@ -38,8 +38,8 @@ const useStyles = makeStyles((theme) =>
backgroundColor: theme.palette.primary.dark,
},
announcementImage: {
- width: '600px',
- height: '30vh',
+ maxWidth: '600px',
+ maxHeight: '30vh',
marginLeft: 'auto',
marginRight: 'auto',
paddingLeft: '80px',
@@ -62,9 +62,9 @@ const useStyles = makeStyles((theme) =>
justifyCenterImage: {
display: 'flex',
justifyContent: 'center',
- width: '600px',
+ maxWidth: '600px',
[theme.breakpoints.down('sm')]: {
- width: '100%',
+ maxWidth: '100%',
},
},
message: {
@@ -94,7 +94,7 @@ const useStyles = makeStyles((theme) =>
boxShadow: 'unset',
},
},
- learnMoreButton: {
+ button: {
// @ts-ignore
filter: (props) => (props.isLightItems ? 'brightness(10)' : ''),
// this class is not mobile first by default as padding should not be set
@@ -104,7 +104,7 @@ const useStyles = makeStyles((theme) =>
paddingRight: 0,
minWidth: theme.spacing(6),
},
- width: theme.spacing(16),
+ minWidth: theme.spacing(16),
marginTop: theme.spacing(3),
backgroundColor: theme.palette.primary.dark,
color: theme.palette.background.default,
@@ -143,7 +143,8 @@ const AnnouncementModal = () => {
announcement.title ||
announcement.subtitle ||
announcement.url ||
- announcement.image,
+ announcement.image ||
+ announcement.buttonText,
)
setShowModal(hasAnnouncement)
}
@@ -233,12 +234,12 @@ const AnnouncementModal = () => {
color="primary"
size="large"
variant="text"
- className={classes.learnMoreButton}
+ className={classes.button}
onClick={() => {
GAEvent('Announcement Page', announcement?.title || 'successful')
}}
>
- Try it now
+ {announcement.buttonText || 'Try it now'}
) : null}
diff --git a/src/client/user/components/CreateUrlModal/CreateLinkForm.tsx b/src/client/user/components/CreateUrlModal/CreateLinkForm.tsx
index c86812c69..87fc4031e 100644
--- a/src/client/user/components/CreateUrlModal/CreateLinkForm.tsx
+++ b/src/client/user/components/CreateUrlModal/CreateLinkForm.tsx
@@ -321,7 +321,10 @@ const CreateLinkForm: FunctionComponent = ({
visible={!!createShortLinkError}
type={CollapsibleMessageType.Error}
>
-
+
{createShortLinkError}
diff --git a/src/client/user/reducers/types.ts b/src/client/user/reducers/types.ts
index cfa2cc948..4242cec9b 100644
--- a/src/client/user/reducers/types.ts
+++ b/src/client/user/reducers/types.ts
@@ -94,6 +94,7 @@ export type UserState = {
subtitle: string | undefined
url: string | undefined
image: string | undefined
+ buttonText: string | undefined
} | null
linkHistory: Array
linkHistoryCount: number
diff --git a/src/server/api/admin-v1/index.ts b/src/server/api/admin-v1/index.ts
new file mode 100644
index 000000000..11d1c776c
--- /dev/null
+++ b/src/server/api/admin-v1/index.ts
@@ -0,0 +1,30 @@
+import Express from 'express'
+import { createValidator } from 'express-joi-validation'
+import { container } from '../../util/inversify'
+import jsonMessage from '../../util/json'
+import { DependencyIds } from '../../constants'
+import { AdminApiV1Controller } from '../../modules/api/admin-v1'
+import { UrlCheckController } from '../../modules/threat'
+import { urlSchema } from './validators'
+
+const adminApiV1Controller = container.get(
+ DependencyIds.adminApiV1Controller,
+)
+const urlCheckController = container.get(
+ DependencyIds.urlCheckController,
+)
+const validator = createValidator({ passError: true })
+const router = Express.Router()
+
+router.post(
+ '/urls',
+ validator.body(urlSchema),
+ urlCheckController.singleUrlCheck,
+ adminApiV1Controller.createUrl,
+)
+
+router.use((_, res) => {
+ res.status(404).send(jsonMessage('Resource not found.'))
+})
+
+export = router
diff --git a/src/server/api/admin-v1/validators.ts b/src/server/api/admin-v1/validators.ts
new file mode 100644
index 000000000..db5a3a89d
--- /dev/null
+++ b/src/server/api/admin-v1/validators.ts
@@ -0,0 +1,55 @@
+import * as Joi from '@hapi/joi'
+import { isValidGovEmail } from '../../util/email'
+import {
+ isBlacklisted,
+ isCircularRedirects,
+ isHttps,
+ isValidShortUrl,
+ isValidUrl,
+} from '../../../shared/util/validation'
+import { ogHostname } from '../../config'
+
+export const urlSchema = Joi.object({
+ userId: Joi.number().required(),
+ shortUrl: Joi.string()
+ .custom((url: string, helpers) => {
+ if (!isValidShortUrl(url)) {
+ return helpers.message({ custom: 'Short URL format is invalid.' })
+ }
+ return url
+ })
+ .optional(),
+ longUrl: Joi.string()
+ .custom((url: string, helpers) => {
+ if (!isHttps(url)) {
+ return helpers.message({ custom: 'Only HTTPS URLs are allowed.' })
+ }
+ if (!isValidUrl(url)) {
+ return helpers.message({ custom: 'Long URL format is invalid.' })
+ }
+ if (isCircularRedirects(url, ogHostname)) {
+ return helpers.message({
+ custom: 'Circular redirects are not allowed.',
+ })
+ }
+ if (isBlacklisted(url)) {
+ return helpers.message({
+ custom: 'Creation of URLs to link shortener sites are not allowed.',
+ })
+ }
+ return url
+ })
+ .required(),
+ email: Joi.string()
+ .custom((email: string, helpers) => {
+ if (!isValidGovEmail(email)) {
+ return helpers.message({
+ custom: 'Invalid email provided. Email domain is not whitelisted.',
+ })
+ }
+ return email
+ })
+ .required(),
+})
+
+export default urlSchema
diff --git a/src/server/api/index.ts b/src/server/api/index.ts
index 103701b74..261da7355 100644
--- a/src/server/api/index.ts
+++ b/src/server/api/index.ts
@@ -16,6 +16,7 @@ const router = Express.Router()
/* Public routes that do not need to be protected */
router.use('/logout', require('./logout'))
router.use('/login', require('./login'))
+router.use('/sgidLogin', require('./sgidLogin'))
router.use('/stats', require('./statistics'))
router.use('/sentry', require('./sentry'))
router.use('/links', require('./links'))
@@ -80,7 +81,7 @@ async function apiKeyAdminAuthMiddleware(
const { userId } = req.body
const isAdmin = await apiKeyAuthService.isAdmin(userId)
if (!isAdmin) {
- res.unauthorized('User is unauthorized')
+ res.unauthorized(jsonMessage('User is unauthorized'))
return
}
next()
@@ -117,6 +118,14 @@ router.use(
/* Register APIKey protected endpoints */
if (ffExternalApi) {
+ router.use(
+ '/v1/admin',
+ apiKeyAuthMiddleware,
+ apiKeyAdminAuthMiddleware,
+ preprocess,
+ // eslint-disable-next-line global-require
+ require('./admin-v1'),
+ )
// eslint-disable-next-line global-require
router.use('/v1', apiKeyAuthMiddleware, preprocess, require('./external-v1'))
}
diff --git a/src/server/api/sgidLogin/index.ts b/src/server/api/sgidLogin/index.ts
new file mode 100644
index 000000000..3a3ad9ef5
--- /dev/null
+++ b/src/server/api/sgidLogin/index.ts
@@ -0,0 +1,16 @@
+import Express from 'express'
+import { SgidLoginController } from '../../modules/auth'
+import { container } from '../../util/inversify'
+import { DependencyIds } from '../../constants'
+
+const router: Express.Router = Express.Router()
+
+const sgidLoginController = container.get(
+ DependencyIds.sgidLoginController,
+)
+
+router.get('/authurl', sgidLoginController.generateAuthUrl)
+
+router.get('/authenticate', sgidLoginController.handleLogin)
+
+module.exports = router
diff --git a/src/server/config.ts b/src/server/config.ts
index bbb1d94bf..604eb0752 100644
--- a/src/server/config.ts
+++ b/src/server/config.ts
@@ -171,6 +171,7 @@ export const userAnnouncement = {
subtitle: process.env.ANNOUNCEMENT_SUBTITLE,
url: process.env.ANNOUNCEMENT_URL,
image: process.env.ANNOUNCEMENT_IMAGE,
+ buttonText: process.env.ANNOUNCEMENT_BUTTON_TEXT,
}
export const s3Bucket = process.env.AWS_S3_BUCKET as string
@@ -268,4 +269,10 @@ export const apiKeySalt = process.env.API_KEY_SALT as string
export const apiLinkRandomStrLength: number =
Number(process.env.API_LINK_RANDOM_STR_LENGTH) || 8
export const ffExternalApi: boolean = process.env.FF_EXTERNAL_API === 'true'
-export const apiAdmin: string = process.env.ADMIN_API_EMAIL || ''
+export const apiAdmins: string[] = process.env.ADMIN_API_EMAILS
+ ? process.env.ADMIN_API_EMAILS.split(',')
+ : []
+export const sgidClientId = process.env.SGID_CLIENT_ID || ''
+export const sgidPrivateKey = process.env.SGID_PRIVATE_KEY || ''
+export const sgidClientSecret = process.env.SGID_CLIENT_SECRET || ''
+export const sgidApiHostname = process.env.SGID_API_HOSTNAME || ''
diff --git a/src/server/constants.ts b/src/server/constants.ts
index 03d44e70e..3525c6b18 100644
--- a/src/server/constants.ts
+++ b/src/server/constants.ts
@@ -35,6 +35,7 @@ export const DependencyIds = {
linksController: Symbol.for('linksController'),
authService: Symbol.for('authService'),
loginController: Symbol.for('loginController'),
+ sgidLoginController: Symbol.for('sgidLoginController'),
logoutController: Symbol.for('logoutController'),
urlManagementService: Symbol.for('urlManagementService'),
userController: Symbol.for('userController'),
@@ -69,6 +70,7 @@ export const DependencyIds = {
bulkService: Symbol.for('bulkService'),
apiKeyAuthService: Symbol.for('apiKeyAuthService'),
apiV1Controller: Symbol.for('apiV1Controller'),
+ adminApiV1Controller: Symbol.for('adminApiV1Controller'),
}
export const ERROR_404_PATH = '404.error.ejs'
diff --git a/src/server/index.ts b/src/server/index.ts
index 0ee01b901..b4c068bdf 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -7,6 +7,7 @@ import helmet from 'helmet'
import morgan from 'morgan'
import session from 'express-session'
import cookieSession from 'cookie-session'
+import cookieParser from 'cookie-parser'
import connectRedis from 'connect-redis'
import jsonMessage from './util/json'
import bindInversifyDependencies from './inversify.config'
@@ -94,6 +95,7 @@ if (sentryDns) {
}
const app = express()
+app.use(cookieParser())
app.use(
helmet({
contentSecurityPolicy: {
diff --git a/src/server/inversify.config.ts b/src/server/inversify.config.ts
index 4124a1171..08ab8e7fa 100644
--- a/src/server/inversify.config.ts
+++ b/src/server/inversify.config.ts
@@ -49,7 +49,11 @@ import { RotatingLinksController } from './modules/display/RotatingLinksControll
import { SentryController } from './modules/sentry/SentryController'
import { AuthService, CryptographyBcrypt } from './modules/auth/services'
-import { LoginController, LogoutController } from './modules/auth'
+import {
+ LoginController,
+ LogoutController,
+ SgidLoginController,
+} from './modules/auth'
import { UrlManagementService } from './modules/user/services'
import { UserController } from './modules/user'
import { DirectoryController } from './modules/directory'
@@ -61,6 +65,7 @@ import {
} from './modules/analytics/services'
import { LinkStatisticsRepository } from './modules/analytics/repositories/LinkStatisticsRepository'
import { ApiV1Controller } from './modules/api/external-v1'
+import { AdminApiV1Controller } from './modules/api/admin-v1'
import { LinkAuditController } from './modules/audit'
import { LinkAuditService } from './modules/audit/services'
import { UrlHistoryRepository } from './modules/audit/repositories'
@@ -129,6 +134,7 @@ export default () => {
bindIfUnbound(DependencyIds.linksController, RotatingLinksController)
bindIfUnbound(DependencyIds.sentryController, SentryController)
bindIfUnbound(DependencyIds.loginController, LoginController)
+ bindIfUnbound(DependencyIds.sgidLoginController, SgidLoginController)
bindIfUnbound(DependencyIds.authService, AuthService)
bindIfUnbound(DependencyIds.logoutController, LogoutController)
bindIfUnbound(DependencyIds.urlManagementService, UrlManagementService)
@@ -142,6 +148,7 @@ export default () => {
bindIfUnbound(DependencyIds.directoryController, DirectoryController)
bindIfUnbound(DependencyIds.deviceCheckService, DeviceCheckService)
bindIfUnbound(DependencyIds.apiV1Controller, ApiV1Controller)
+ bindIfUnbound(DependencyIds.adminApiV1Controller, AdminApiV1Controller)
container
.bind(DependencyIds.allowedFileExtensions)
diff --git a/src/server/models/user.ts b/src/server/models/user.ts
index 5ff56f0db..498abd702 100644
--- a/src/server/models/user.ts
+++ b/src/server/models/user.ts
@@ -26,7 +26,10 @@ export const User = sequelize.define(
validate: {
isEmail: true,
isLowercase: true,
- is: emailValidator.makeRe(),
+ is: {
+ args: emailValidator.makeRe(),
+ msg: 'Email domain is not whitelisted.',
+ },
},
set(this: Settable, email: string) {
// must save email as lowercase
diff --git a/src/server/modules/api/admin-v1/AdminApiV1Controller.ts b/src/server/modules/api/admin-v1/AdminApiV1Controller.ts
new file mode 100644
index 000000000..1f9f44b81
--- /dev/null
+++ b/src/server/modules/api/admin-v1/AdminApiV1Controller.ts
@@ -0,0 +1,87 @@
+import Express from 'express'
+import { inject, injectable } from 'inversify'
+import Sequelize from 'sequelize'
+
+import { logger } from '../../../config'
+import { DependencyIds } from '../../../constants'
+import jsonMessage from '../../../util/json'
+import { AlreadyExistsError, NotFoundError } from '../../../util/error'
+
+import { UrlManagementService } from '../../user/interfaces'
+import { MessageType } from '../../../../shared/util/messages'
+import { StorableUrlSource } from '../../../repositories/enums'
+
+import { UrlCreationRequest } from '.'
+import { UrlV1Mapper } from '../../../mappers/UrlV1Mapper'
+import { UserRepositoryInterface } from '../../../repositories/interfaces/UserRepositoryInterface'
+
+@injectable()
+export class AdminApiV1Controller {
+ private userRepository: UserRepositoryInterface
+
+ private urlManagementService: UrlManagementService
+
+ private urlV1Mapper: UrlV1Mapper
+
+ public constructor(
+ @inject(DependencyIds.userRepository)
+ userRepository: UserRepositoryInterface,
+ @inject(DependencyIds.urlManagementService)
+ urlManagementService: UrlManagementService,
+ @inject(DependencyIds.urlV1Mapper)
+ urlV1Mapper: UrlV1Mapper,
+ ) {
+ this.userRepository = userRepository
+ this.urlManagementService = urlManagementService
+ this.urlV1Mapper = urlV1Mapper
+ }
+
+ public createUrl: (
+ req: Express.Request,
+ res: Express.Response,
+ ) => Promise = async (req, res) => {
+ const { userId, shortUrl, longUrl, email }: UrlCreationRequest = req.body
+
+ try {
+ const targetUser = await this.userRepository.findOrCreateWithEmail(email)
+ const newUrl = await this.urlManagementService.createUrl(
+ userId,
+ StorableUrlSource.Api,
+ shortUrl,
+ longUrl,
+ )
+
+ if (userId !== targetUser.id) {
+ const url = await this.urlManagementService.changeOwnership(
+ userId,
+ newUrl.shortUrl,
+ targetUser.email,
+ )
+ const apiUrl = this.urlV1Mapper.persistenceToDto(url)
+ res.ok(apiUrl)
+ return
+ }
+ const apiUrl = this.urlV1Mapper.persistenceToDto(newUrl)
+ res.ok(apiUrl)
+ return
+ } catch (error) {
+ if (error instanceof NotFoundError) {
+ res.notFound(jsonMessage(error.message))
+ return
+ }
+ if (error instanceof AlreadyExistsError) {
+ res.badRequest(jsonMessage(error.message, MessageType.ShortUrlError))
+ return
+ }
+ if (error instanceof Sequelize.ValidationError) {
+ res.badRequest(jsonMessage(error.message))
+ return
+ }
+ logger.error(`Error creating short URL:\t${error}`)
+ res.serverError(jsonMessage('Server error.'))
+ return
+ }
+ }
+}
+
+export default AdminApiV1Controller
diff --git a/src/server/modules/api/admin-v1/__tests__/AdminApiV1Controller.test.ts b/src/server/modules/api/admin-v1/__tests__/AdminApiV1Controller.test.ts
new file mode 100644
index 000000000..659130999
--- /dev/null
+++ b/src/server/modules/api/admin-v1/__tests__/AdminApiV1Controller.test.ts
@@ -0,0 +1,250 @@
+import moment from 'moment'
+import httpMocks from 'node-mocks-http'
+import { ValidationError } from 'sequelize'
+import { createRequestWithUser } from '../../../../../../test/server/api/util'
+import { UrlV1Mapper } from '../../../../mappers/UrlV1Mapper'
+import { AlreadyExistsError, NotFoundError } from '../../../../util/error'
+import { AdminApiV1Controller } from '../AdminApiV1Controller'
+
+const urlManagementService = {
+ createUrl: jest.fn(),
+ updateUrl: jest.fn(),
+ changeOwnership: jest.fn(),
+ getUrlsWithConditions: jest.fn(),
+ bulkCreate: jest.fn(),
+}
+
+const userRepository = {
+ findById: jest.fn(),
+ findByEmail: jest.fn(),
+ findOrCreateWithEmail: jest.fn(),
+ findOneUrlForUser: jest.fn(),
+ findUserByUrl: jest.fn(),
+ findUrlsForUser: jest.fn(),
+ saveApiKeyHash: jest.fn(),
+ findUserByApiKey: jest.fn(),
+ hasApiKey: jest.fn(),
+}
+
+const urlV1Mapper = new UrlV1Mapper()
+
+const controller = new AdminApiV1Controller(
+ userRepository,
+ urlManagementService,
+ urlV1Mapper,
+)
+
+/**
+ * Unit tests for Admin API v1 controller.
+ */
+describe('AdminApiV1Controller', () => {
+ describe('createUrl', () => {
+ it('create and sanitize link with same owner and target email for admin API', async () => {
+ const userId = 1
+ const shortUrl = 'abcdef'
+ const longUrl = 'https://www.agency.sg'
+ const state = 'ACTIVE'
+ const source = 'API'
+ const clicks = 0
+ const contactEmail = 'person@open.gov.sg'
+ const description = 'test description'
+ const tags: string[] = []
+ const tagStrings = ''
+ const createdAt = moment().toISOString()
+ const updatedAt = moment().toISOString()
+ const email = 'person@domain.sg'
+
+ const req = httpMocks.createRequest({
+ body: {
+ userId,
+ shortUrl,
+ longUrl,
+ email,
+ },
+ })
+
+ const res: any = httpMocks.createResponse()
+ res.ok = jest.fn()
+ const result = {
+ shortUrl,
+ longUrl,
+ state,
+ source,
+ clicks,
+ contactEmail,
+ description,
+ tags,
+ tagStrings,
+ createdAt,
+ updatedAt,
+ }
+ urlManagementService.createUrl.mockResolvedValue(result)
+ userRepository.findOrCreateWithEmail.mockResolvedValue({
+ id: userId,
+ email,
+ urls: undefined,
+ })
+
+ await controller.createUrl(req, res)
+ expect(userRepository.findOrCreateWithEmail).toHaveBeenCalledWith(email)
+ expect(urlManagementService.createUrl).toHaveBeenCalledWith(
+ userId,
+ source,
+ shortUrl,
+ longUrl,
+ )
+ expect(res.ok).toHaveBeenCalledWith({
+ shortUrl,
+ longUrl,
+ state,
+ clicks,
+ createdAt,
+ updatedAt,
+ })
+ })
+
+ it('create, sanitize and transfer link to target email for admin API', async () => {
+ const userId = 1
+ const shortUrl = 'abcdef'
+ const longUrl = 'https://www.agency.sg'
+ const state = 'ACTIVE'
+ const source = 'API'
+ const clicks = 0
+ const contactEmail = 'person@open.gov.sg'
+ const description = 'test description'
+ const tags: string[] = []
+ const tagStrings = ''
+ const createdAt = moment().toISOString()
+ const updatedAt = moment().toISOString()
+ const email = 'person@domain.sg'
+
+ const req = httpMocks.createRequest({
+ body: {
+ userId,
+ shortUrl,
+ longUrl,
+ email,
+ },
+ })
+
+ const res: any = httpMocks.createResponse()
+ res.ok = jest.fn()
+ const result = {
+ shortUrl,
+ longUrl,
+ state,
+ source,
+ clicks,
+ contactEmail,
+ description,
+ tags,
+ tagStrings,
+ createdAt,
+ updatedAt,
+ }
+ urlManagementService.createUrl.mockResolvedValue(result)
+ userRepository.findOrCreateWithEmail.mockResolvedValue({
+ id: 2,
+ email,
+ urls: undefined,
+ })
+ urlManagementService.changeOwnership.mockResolvedValue(result)
+
+ await controller.createUrl(req, res)
+ expect(userRepository.findOrCreateWithEmail).toHaveBeenCalledWith(email)
+ expect(urlManagementService.createUrl).toHaveBeenCalledWith(
+ userId,
+ source,
+ shortUrl,
+ longUrl,
+ )
+ expect(urlManagementService.changeOwnership).toHaveBeenCalledWith(
+ userId,
+ shortUrl,
+ email,
+ )
+ expect(res.ok).toHaveBeenCalledWith({
+ shortUrl,
+ longUrl,
+ state,
+ clicks,
+ createdAt,
+ updatedAt,
+ })
+ })
+
+ it('reports server error with user creation', async () => {
+ const req = createRequestWithUser(undefined)
+ const res: any = httpMocks.createResponse()
+ res.serverError = jest.fn()
+
+ userRepository.findOrCreateWithEmail.mockRejectedValue(new Error())
+
+ await controller.createUrl(req, res)
+ expect(res.serverError).toHaveBeenCalledWith({
+ message: expect.any(String),
+ })
+ })
+
+ it('reports not found on NotFoundError', async () => {
+ const req = createRequestWithUser(undefined)
+ const res: any = httpMocks.createResponse()
+ res.notFound = jest.fn()
+
+ userRepository.findOrCreateWithEmail.mockResolvedValue({})
+ urlManagementService.createUrl.mockRejectedValue(new NotFoundError(''))
+
+ await controller.createUrl(req, res)
+ expect(res.notFound).toHaveBeenCalledWith({
+ message: expect.any(String),
+ })
+ })
+
+ it('reports bad request on AlreadyExistsError', async () => {
+ const req = createRequestWithUser(undefined)
+ const res: any = httpMocks.createResponse()
+ res.badRequest = jest.fn()
+
+ userRepository.findOrCreateWithEmail.mockResolvedValue({})
+ urlManagementService.createUrl.mockRejectedValue(
+ new AlreadyExistsError(''),
+ )
+
+ await controller.createUrl(req, res)
+ expect(res.badRequest).toHaveBeenCalledWith({
+ message: expect.any(String),
+ type: expect.any(String),
+ })
+ })
+
+ it('reports bad request on Sequelize.ValidationError', async () => {
+ const req = createRequestWithUser(undefined)
+ const res: any = httpMocks.createResponse()
+ res.badRequest = jest.fn()
+
+ userRepository.findOrCreateWithEmail.mockResolvedValue({})
+ urlManagementService.createUrl.mockRejectedValue(
+ new ValidationError('', []),
+ )
+
+ await controller.createUrl(req, res)
+ expect(res.badRequest).toHaveBeenCalledWith({
+ message: expect.any(String),
+ })
+ })
+
+ it('reports server error on generic Error', async () => {
+ const req = createRequestWithUser(undefined)
+ const res: any = httpMocks.createResponse()
+ res.serverError = jest.fn()
+
+ userRepository.findOrCreateWithEmail.mockResolvedValue({})
+ urlManagementService.createUrl.mockRejectedValue(new Error())
+
+ await controller.createUrl(req, res)
+ expect(res.serverError).toHaveBeenCalledWith({
+ message: expect.any(String),
+ })
+ })
+ })
+})
diff --git a/src/server/modules/api/admin-v1/index.ts b/src/server/modules/api/admin-v1/index.ts
new file mode 100644
index 000000000..b483cb5d0
--- /dev/null
+++ b/src/server/modules/api/admin-v1/index.ts
@@ -0,0 +1,29 @@
+import { StorableUrl } from '../../../repositories/types'
+
+export { AdminApiV1Controller } from './AdminApiV1Controller'
+
+type LongUrlProperty = {
+ longUrl: string
+}
+type UserIdProperty = {
+ userId: number
+}
+
+type ShortUrlProperty = {
+ shortUrl: string
+}
+
+type EmailProperty = {
+ email: string
+}
+
+type ShortUrlOperationProperty = UserIdProperty & ShortUrlProperty
+
+export type UrlCreationRequest = ShortUrlOperationProperty &
+ LongUrlProperty &
+ EmailProperty
+
+export type UrlV1DTO = Pick<
+ StorableUrl,
+ 'shortUrl' | 'longUrl' | 'state' | 'clicks' | 'createdAt' | 'updatedAt'
+>
diff --git a/src/server/modules/api/external-v1/ApiV1Controller.ts b/src/server/modules/api/external-v1/ApiV1Controller.ts
index 31819835b..13df7650c 100644
--- a/src/server/modules/api/external-v1/ApiV1Controller.ts
+++ b/src/server/modules/api/external-v1/ApiV1Controller.ts
@@ -65,9 +65,10 @@ export class ApiV1Controller {
}
if (error instanceof Sequelize.ValidationError) {
res.badRequest(jsonMessage(error.message))
+ return
}
logger.error(`Error creating short URL:\t${error}`)
- res.badRequest(jsonMessage('Server error.'))
+ res.serverError(jsonMessage('Server error.'))
return
}
}
diff --git a/src/server/modules/api/external-v1/__tests__/ApiV1Controller.test.ts b/src/server/modules/api/external-v1/__tests__/ApiV1Controller.test.ts
index c482d6e76..44e96da11 100644
--- a/src/server/modules/api/external-v1/__tests__/ApiV1Controller.test.ts
+++ b/src/server/modules/api/external-v1/__tests__/ApiV1Controller.test.ts
@@ -127,15 +127,15 @@ describe('ApiV1Controller', () => {
})
})
- it('reports bad request on generic Error', async () => {
+ it('reports server error on generic Error', async () => {
const req = createRequestWithUser(undefined)
const res: any = httpMocks.createResponse()
- res.badRequest = jest.fn()
+ res.serverError = jest.fn()
urlManagementService.createUrl.mockRejectedValue(new Error())
await controller.createUrl(req, res)
- expect(res.badRequest).toHaveBeenCalledWith({
+ expect(res.serverError).toHaveBeenCalledWith({
message: expect.any(String),
})
})
diff --git a/src/server/modules/auth/SgidLoginController.ts b/src/server/modules/auth/SgidLoginController.ts
new file mode 100644
index 000000000..d16011636
--- /dev/null
+++ b/src/server/modules/auth/SgidLoginController.ts
@@ -0,0 +1,95 @@
+import Express, { CookieOptions } from 'express'
+import { inject, injectable } from 'inversify'
+import { SGID_LOGIN_OAUTH_STATE, SgidAuthService } from '../../services/sgid'
+import { DependencyIds } from '../../constants'
+import { logger } from '../../config'
+import { isValidGovEmail } from '../../util/email'
+import { AuthService } from './interfaces'
+import jsonMessage from '../../util/json'
+
+export const OFFICER_EMAIL_SCOPE = 'ogpofficerinfo.work_email'
+const SGID_STATE_COOKIE_NAME = 'gogovsg_sgid_state'
+const SgidStateCookieConfig: CookieOptions = {
+ httpOnly: true,
+}
+
+@injectable()
+export class SgidLoginController {
+ private sgidService
+
+ private authService: AuthService
+
+ constructor(@inject(DependencyIds.authService) authService: AuthService) {
+ this.sgidService = SgidAuthService
+ this.authService = authService
+ }
+
+ public generateAuthUrl: (
+ req: Express.Request,
+ res: Express.Response,
+ ) => void = (_req, res) => {
+ try {
+ const { url, codeVerifier, nonce } = this.sgidService.authorizationUrl()
+
+ res.cookie(
+ SGID_STATE_COOKIE_NAME,
+ { codeVerifier, nonce },
+ SgidStateCookieConfig,
+ )
+ res.send(url)
+ return
+ } catch (err) {
+ logger.error(err)
+ res.status(400)
+ res.badRequest(
+ jsonMessage('SGID login not supported by edu and health domains.'),
+ )
+ return
+ }
+ }
+
+ public handleLogin = async (req: Express.Request, res: Express.Response) => {
+ try {
+ const { code, state } = req.query
+ const sessionData = req.cookies[SGID_STATE_COOKIE_NAME]
+
+ if (state !== SGID_LOGIN_OAUTH_STATE) {
+ res.redirect(`/#/ogp-login?statusCode=400`)
+ return
+ }
+
+ const { sub, accessToken } = await this.sgidService.callback(
+ String(code),
+ String(sessionData.nonce),
+ String(sessionData.codeVerifier),
+ )
+
+ const { data } = await this.sgidService.userinfo(accessToken, sub)
+ const officerEmail = data[OFFICER_EMAIL_SCOPE]
+
+ if (
+ !officerEmail ||
+ !officerEmail.length ||
+ !isValidGovEmail(officerEmail)
+ ) {
+ // redirect back to sgid login page, if authentication fails,
+ // or officer email is not valid
+ res.redirect(`/#/ogp-login?statusCode=403&officerEmail=${officerEmail}`)
+ return
+ }
+ const dbUser = await this.authService.genDBUserWithOfficerEmail(
+ data[OFFICER_EMAIL_SCOPE],
+ )
+
+ req.session!.user = dbUser
+
+ res.redirect(`/#/user`)
+ return
+ } catch (error) {
+ logger.error(error)
+ res.status(500).render('error', { error })
+ }
+ }
+}
+
+export default SgidLoginController
diff --git a/src/server/modules/auth/__tests__/LoginController.test.ts b/src/server/modules/auth/__tests__/LoginController.test.ts
index e324e2d8f..70433dede 100644
--- a/src/server/modules/auth/__tests__/LoginController.test.ts
+++ b/src/server/modules/auth/__tests__/LoginController.test.ts
@@ -39,7 +39,11 @@ describe('LoginController', () => {
loggerErrorSpy.mockClear()
})
describe('getIsLoggedIn', () => {
- const authService = { generateOtp: jest.fn(), verifyOtp: jest.fn() }
+ const authService = {
+ generateOtp: jest.fn(),
+ verifyOtp: jest.fn(),
+ genDBUserWithOfficerEmail: jest.fn(),
+ }
const controller = new LoginController(authService)
test('session contains user', () => {
@@ -64,7 +68,11 @@ describe('LoginController', () => {
})
describe('getLoginMessage', () => {
- const authService = { generateOtp: jest.fn(), verifyOtp: jest.fn() }
+ const authService = {
+ generateOtp: jest.fn(),
+ verifyOtp: jest.fn(),
+ genDBUserWithOfficerEmail: jest.fn(),
+ }
const controller = new LoginController(authService)
test('returns login message', () => {
@@ -78,7 +86,11 @@ describe('LoginController', () => {
})
describe('getEmailDomains', () => {
- const authService = { generateOtp: jest.fn(), verifyOtp: jest.fn() }
+ const authService = {
+ generateOtp: jest.fn(),
+ verifyOtp: jest.fn(),
+ genDBUserWithOfficerEmail: jest.fn(),
+ }
const controller = new LoginController(authService)
test('returns domains', () => {
diff --git a/src/server/modules/auth/index.ts b/src/server/modules/auth/index.ts
index b3025d475..eaaff0719 100644
--- a/src/server/modules/auth/index.ts
+++ b/src/server/modules/auth/index.ts
@@ -1,5 +1,6 @@
export { LoginController } from './LoginController'
export { LogoutController } from './LogoutController'
+export { SgidLoginController } from './SgidLoginController'
export type EmailProperty = {
email: string
diff --git a/src/server/modules/auth/interfaces/AuthService.ts b/src/server/modules/auth/interfaces/AuthService.ts
index d6e232b96..9218ae7ea 100644
--- a/src/server/modules/auth/interfaces/AuthService.ts
+++ b/src/server/modules/auth/interfaces/AuthService.ts
@@ -17,4 +17,13 @@ export interface AuthService {
* @returns Promise that resolves to the user if the otp is valid.
*/
verifyOtp(email: string, otp: string): Promise
+
+ /**
+ * Generates the user with the officer email provided, if the
+ * user with the specified officer email does not exist then we
+ * create a new user for the input email.
+ * @param {string} email Email of the user.
+ * @returns Promise that creates or find the existing user.
+ */
+ genDBUserWithOfficerEmail(email: string): Promise
}
diff --git a/src/server/modules/auth/services/AuthService.ts b/src/server/modules/auth/services/AuthService.ts
index 6e5178e0c..8331da907 100644
--- a/src/server/modules/auth/services/AuthService.ts
+++ b/src/server/modules/auth/services/AuthService.ts
@@ -125,6 +125,12 @@ export class AuthService implements interfaces.AuthService {
throw new Error('Error creating user.')
}
}
+
+ public genDBUserWithOfficerEmail: (
+ officerEmail: string,
+ ) => Promise = async (officerEmail) => {
+ return this.userRepository.findOrCreateWithEmail(officerEmail)
+ }
}
export default AuthService
diff --git a/src/server/modules/threat/FileCheckController.ts b/src/server/modules/threat/FileCheckController.ts
index e4a905340..30a9ab821 100644
--- a/src/server/modules/threat/FileCheckController.ts
+++ b/src/server/modules/threat/FileCheckController.ts
@@ -67,11 +67,22 @@ export class FileCheckController {
next: NextFunction,
) => Promise = async (req, res, next) => {
const file = req.files?.file as fileUpload.UploadedFile | undefined
+ const user = req.session?.user
if (file) {
try {
- const hasVirus = await this.virusScanService.hasVirus(file)
+ const { hasVirus, isPasswordProtected } =
+ await this.virusScanService.scanFile(file)
+ if (isPasswordProtected) {
+ // Do not support password-protected files as they cannot be scanned for viruses
+ logger.info(
+ `User ${
+ user?.email || user?.id
+ } tried to upload a password-protected file ${file.name}`,
+ )
+ res.badRequest(jsonMessage('Cannot upload password-protected files.'))
+ return
+ }
if (hasVirus) {
- const user = req.session?.user
logger.warn(
`Malicious file attempt: User ${
user?.email || user?.id
diff --git a/src/server/modules/threat/__tests__/FileCheckController.test.ts b/src/server/modules/threat/__tests__/FileCheckController.test.ts
index ebd9998d1..74de75aa0 100644
--- a/src/server/modules/threat/__tests__/FileCheckController.test.ts
+++ b/src/server/modules/threat/__tests__/FileCheckController.test.ts
@@ -18,16 +18,20 @@ export function createRequestWithFile(file: any): Request {
describe('FileCheckController test', () => {
const file = { data: Buffer.from('data'), name: 'file.csv' }
+ const getExtension = jest.fn()
const hasAllowedType = jest.fn()
- const hasVirus = jest.fn()
+ const scanFile = jest.fn()
- const controller = new FileCheckController({ hasAllowedType }, { hasVirus })
+ const controller = new FileCheckController(
+ { getExtension, hasAllowedType },
+ { scanFile },
+ )
const badRequest = jest.fn()
beforeEach(() => {
hasAllowedType.mockClear()
- hasVirus.mockClear()
+ scanFile.mockClear()
badRequest.mockClear()
})
@@ -42,7 +46,7 @@ describe('FileCheckController test', () => {
await controller.fileVirusCheck(req, res, afterFileVirusCheck)
expect(hasAllowedType).not.toHaveBeenCalled()
- expect(hasVirus).not.toHaveBeenCalled()
+ expect(scanFile).not.toHaveBeenCalled()
expect(afterSingleFileCheck).toHaveBeenCalled()
expect(afterFileExtensionCheck).toHaveBeenCalled()
expect(afterFileVirusCheck).toHaveBeenCalled()
@@ -83,12 +87,12 @@ describe('FileCheckController test', () => {
const res = httpMocks.createResponse() as any
const afterFileVirusCheck = jest.fn()
- hasVirus.mockRejectedValue(false)
+ scanFile.mockRejectedValue(new Error())
res.badRequest = badRequest
await controller.fileVirusCheck(req, res, afterFileVirusCheck)
- expect(hasVirus).toHaveBeenCalled()
+ expect(scanFile).toHaveBeenCalled()
expect(res.badRequest).toHaveBeenCalled()
expect(afterFileVirusCheck).not.toHaveBeenCalled()
})
@@ -98,12 +102,12 @@ describe('FileCheckController test', () => {
const res = httpMocks.createResponse() as any
const afterFileVirusCheck = jest.fn()
- hasVirus.mockResolvedValue(true)
+ scanFile.mockResolvedValue({ hasVirus: true, isPasswordProtected: false })
res.badRequest = badRequest
await controller.fileVirusCheck(req, res, afterFileVirusCheck)
- expect(hasVirus).toHaveBeenCalled()
+ expect(scanFile).toHaveBeenCalled()
expect(res.badRequest).toHaveBeenCalled()
expect(afterFileVirusCheck).not.toHaveBeenCalled()
})
@@ -117,7 +121,7 @@ describe('FileCheckController test', () => {
const afterFileVirusCheck = jest.fn()
hasAllowedType.mockResolvedValue(true)
- hasVirus.mockResolvedValue(false)
+ scanFile.mockResolvedValue(false)
res.badRequest = badRequest
res.serverError = badRequest
@@ -129,7 +133,7 @@ describe('FileCheckController test', () => {
await controller.fileVirusCheck(req, res, afterFileVirusCheck)
expect(hasAllowedType).toHaveBeenCalled()
- expect(hasVirus).toHaveBeenCalled()
+ expect(scanFile).toHaveBeenCalled()
expect(res.badRequest).not.toHaveBeenCalled()
expect(res.serverError).not.toHaveBeenCalled()
diff --git a/src/server/modules/threat/interfaces/FileTypeFilterService.ts b/src/server/modules/threat/interfaces/FileTypeFilterService.ts
index 515e9292c..8750ed0ac 100644
--- a/src/server/modules/threat/interfaces/FileTypeFilterService.ts
+++ b/src/server/modules/threat/interfaces/FileTypeFilterService.ts
@@ -1,4 +1,9 @@
export interface FileTypeFilterService {
+ getExtension: (file: {
+ name: string
+ data: Buffer
+ }) => Promise
+
hasAllowedType: (
file: {
name: string
diff --git a/src/server/modules/threat/interfaces/VirusScanService.ts b/src/server/modules/threat/interfaces/VirusScanService.ts
index 1d83b9b44..fd83fc78d 100644
--- a/src/server/modules/threat/interfaces/VirusScanService.ts
+++ b/src/server/modules/threat/interfaces/VirusScanService.ts
@@ -1,5 +1,7 @@
import fileUpload from 'express-fileupload'
export interface VirusScanService {
- hasVirus(file: fileUpload.UploadedFile): Promise
+ scanFile(
+ file: fileUpload.UploadedFile,
+ ): Promise<{ hasVirus: boolean; isPasswordProtected: boolean }>
}
diff --git a/src/server/modules/threat/services/CloudmersiveScanService.ts b/src/server/modules/threat/services/CloudmersiveScanService.ts
index fc0e378b3..4e98975f8 100644
--- a/src/server/modules/threat/services/CloudmersiveScanService.ts
+++ b/src/server/modules/threat/services/CloudmersiveScanService.ts
@@ -20,14 +20,26 @@ export class CloudmersiveScanService implements VirusScanService {
this.api = api
}
- private scanFilePromise: (file: Buffer) => Promise = (file) =>
+ private scanFilePromise: (
+ file: Buffer,
+ ) => Promise<{ hasVirus: boolean; isPasswordProtected: boolean }> = (file) =>
new Promise((res, rej) => {
- this.api.scanFile(file, (err, data) => {
+ const options = {
+ allowExecutables: false, // default value
+ allowInvalidFiles: false, // default value
+ allowScripts: false, // default value
+ restrictFileTypes: '', // default value, disabled
+ }
+ this.api.scanFileAdvanced(file, options, (err, data) => {
if (err) {
logger.error(`Error when scanning file via Cloudmersive: ${err}`)
return rej(err)
}
- return res(!data.CleanResult)
+ return res({
+ // @types/cloudmersive-virus-api-client is outdated so `data` doesn't have the `ContainsPasswordProtectedFile` property
+ isPasswordProtected: (data as any).ContainsPasswordProtectedFile,
+ hasVirus: data.FoundViruses !== null,
+ })
})
})
@@ -43,16 +55,20 @@ export class CloudmersiveScanService implements VirusScanService {
})
})
- public hasVirus: (file: { data: Buffer; name: string }) => Promise =
- async (file) => {
- if (!this.cloudmersiveKey) {
- logger.warn(
- `No Cloudmersive API key provided. Not scanning file: ${file.name}`,
- )
- return false
- }
- return this.scanFilePromise(file.data)
+ public scanFile: (file: {
+ data: Buffer
+ name: string
+ }) => Promise<{ hasVirus: boolean; isPasswordProtected: boolean }> = async (
+ file,
+ ) => {
+ if (!this.cloudmersiveKey) {
+ logger.warn(
+ `No Cloudmersive API key provided. Not scanning file: ${file.name}`,
+ )
+ return { hasVirus: false, isPasswordProtected: false }
}
+ return this.scanFilePromise(file.data)
+ }
// Note: This function is no longer used as we now use Google Safe Browsing
// to scan URLs instead. We can consider removing this functionality.
diff --git a/src/server/modules/threat/services/FileTypeFilterService.ts b/src/server/modules/threat/services/FileTypeFilterService.ts
index 55215bdbd..3b78a2036 100644
--- a/src/server/modules/threat/services/FileTypeFilterService.ts
+++ b/src/server/modules/threat/services/FileTypeFilterService.ts
@@ -25,6 +25,7 @@ export const DEFAULT_ALLOWED_FILE_EXTENSIONS = [
'tiff',
'txt',
'xlsx',
+ 'zip',
]
@injectable()
@@ -38,15 +39,22 @@ export class FileTypeFilterService implements interfaces.FileTypeFilterService {
this.allowedFileExtensions = allowedFileExtensions
}
+ getExtension: (file: {
+ name: string
+ data: Buffer
+ }) => Promise = async ({ name, data }) => {
+ const fileType = await FileType.fromBuffer(data)
+ return fileType?.ext || name.split('.').pop()
+ }
+
hasAllowedType: (
file: {
name: string
data: Buffer
},
allowedExtensions?: string[],
- ) => Promise = async ({ name, data }, allowedExtensions) => {
- const fileType = await FileType.fromBuffer(data)
- const extension = fileType?.ext || name.split('.').pop()
+ ) => Promise = async (file, allowedExtensions) => {
+ const extension = await this.getExtension(file)
if (!extension) return false
if (allowedExtensions && allowedExtensions.length > 0) {
diff --git a/src/server/modules/threat/services/__tests__/CloudmersiveScanService.test.ts b/src/server/modules/threat/services/__tests__/CloudmersiveScanService.test.ts
index d90f1e0a1..05397742d 100644
--- a/src/server/modules/threat/services/__tests__/CloudmersiveScanService.test.ts
+++ b/src/server/modules/threat/services/__tests__/CloudmersiveScanService.test.ts
@@ -1,9 +1,8 @@
import { CloudmersiveScanService } from '..'
-const scanFile = jest.fn()
+const scanFile = () => {}
const scanWebsite = jest.fn()
-
-const scanFileAdvanced = () => {}
+const scanFileAdvanced = jest.fn()
const api = { scanFile, scanWebsite, scanFileAdvanced }
const file = { data: Buffer.from(''), name: '' }
@@ -14,8 +13,11 @@ describe('CloudmersiveScanService', () => {
const service = new CloudmersiveScanService('', api)
it('does not trigger file scans', async () => {
- await expect(service.hasVirus(file)).resolves.toBeFalsy()
- expect(scanFile).not.toHaveBeenCalled()
+ await expect(service.scanFile(file)).resolves.toEqual({
+ hasVirus: false,
+ isPasswordProtected: false,
+ })
+ expect(scanFileAdvanced).not.toHaveBeenCalled()
})
it('does not trigger url scans', async () => {
@@ -28,30 +30,40 @@ describe('CloudmersiveScanService', () => {
const service = new CloudmersiveScanService('key', api)
describe('hasVirus', () => {
- beforeEach(() => scanFile.mockClear())
+ beforeEach(() => scanFileAdvanced.mockClear())
it('returns false on clean file', async () => {
- scanFile.mockImplementation((_ignored, callback) =>
- callback(null, { CleanResult: true }),
+ scanFileAdvanced.mockImplementation((_ignored, _ignored2, callback) =>
+ callback(null, {
+ FoundViruses: null,
+ ContainsPasswordProtectedFile: false,
+ }),
)
- await expect(service.hasVirus(file)).resolves.toBeFalsy()
- expect(scanFile).toHaveBeenCalled()
+ await expect(service.scanFile(file)).resolves.toEqual({
+ hasVirus: false,
+ isPasswordProtected: false,
+ })
+ expect(scanFileAdvanced).toHaveBeenCalled()
})
it('returns true on dirty file', async () => {
- scanFile.mockImplementation((_ignored, callback) =>
- callback(null, { CleanResult: false }),
+ scanFileAdvanced.mockImplementation((_ignored, _ignored2, callback) =>
+ callback(null, {
+ FoundViruses: [
+ { FileName: 'stream', VirusName: ' Eicar-Signature' },
+ ],
+ }),
)
- await expect(service.hasVirus(file)).resolves.toBeTruthy()
- expect(scanFile).toHaveBeenCalled()
+ await expect(service.scanFile(file)).resolves.toBeTruthy()
+ expect(scanFileAdvanced).toHaveBeenCalled()
})
it('throws on scan error', async () => {
const error = new Error()
- scanFile.mockImplementation((_ignored, callback) =>
+ scanFileAdvanced.mockImplementation((_ignored, _ignored2, callback) =>
callback(error, null),
)
- await expect(service.hasVirus(file)).rejects.toStrictEqual(error)
- expect(scanFile).toHaveBeenCalled()
+ await expect(service.scanFile(file)).rejects.toStrictEqual(error)
+ expect(scanFileAdvanced).toHaveBeenCalled()
})
})
diff --git a/src/server/modules/user/UserController.ts b/src/server/modules/user/UserController.ts
index 787466f12..e3beb3885 100644
--- a/src/server/modules/user/UserController.ts
+++ b/src/server/modules/user/UserController.ts
@@ -98,7 +98,7 @@ export class UserController {
return
}
if (error instanceof AlreadyExistsError) {
- const newErrorMessage = `${error.message} Click here to find out more`
+ const newErrorMessage = `${error.message} Click here to find out who is the link owner & request for ownership.`
res.badRequest(jsonMessage(newErrorMessage, MessageType.ShortUrlError))
return
}
diff --git a/src/server/modules/user/services/ApiKeyAuthService.ts b/src/server/modules/user/services/ApiKeyAuthService.ts
index 40da196be..32080eca9 100644
--- a/src/server/modules/user/services/ApiKeyAuthService.ts
+++ b/src/server/modules/user/services/ApiKeyAuthService.ts
@@ -9,7 +9,7 @@ import dogstatsd, {
import { UserRepositoryInterface } from '../../../repositories/interfaces/UserRepositoryInterface'
import { API_KEY_SEPARATOR, DependencyIds } from '../../../constants'
import { StorableUser } from '../../../repositories/types'
-import { apiAdmin, apiEnv, apiKeySalt, apiKeyVersion } from '../../../config'
+import { apiAdmins, apiEnv, apiKeySalt, apiKeyVersion } from '../../../config'
const BASE64_ENCODING = 'base64'
@injectable()
@@ -46,7 +46,7 @@ class ApiKeyAuthService implements ApiKeyAuthServiceInterface {
isAdmin: (userId: number) => Promise = async (userId: number) => {
const user = await this.userRepository.findById(userId)
if (!user) return false
- return apiAdmin === user.email
+ return apiAdmins.includes(user.email)
}
hasApiKey: (userId: number) => Promise = async (userId: number) => {
diff --git a/src/server/services/sgid.ts b/src/server/services/sgid.ts
new file mode 100644
index 000000000..1a74cb296
--- /dev/null
+++ b/src/server/services/sgid.ts
@@ -0,0 +1,108 @@
+import SgidClient, { generatePkcePair } from '@opengovsg/sgid-client'
+import {
+ logger,
+ ogUrl,
+ sgidApiHostname,
+ sgidClientId,
+ sgidClientSecret,
+ sgidPrivateKey,
+} from '../config'
+
+interface SgidServiceOption {
+ clientId: string
+ clientSecret: string
+ privateKey: string
+ redirectUri: string
+ hostname: string
+}
+
+export const SGID_LOGIN_OAUTH_STATE = 'login'
+
+class SgidService {
+ // SGID client will be null for other domains like edu, health
+ // so we will need to handle cases for those as well, so that
+ // they continue to work in prod without sgid client being initialised
+ private sgidClient: SgidClient | null
+
+ constructor({
+ clientId,
+ clientSecret,
+ privateKey,
+ redirectUri,
+ hostname,
+ }: SgidServiceOption) {
+ try {
+ this.sgidClient = new SgidClient({
+ clientId,
+ clientSecret,
+ privateKey,
+ redirectUri,
+ hostname,
+ })
+ logger.info('SGID client initialised successfully')
+ } catch (e) {
+ logger.error('SGID client initialisation failed', e)
+ this.sgidClient = null
+ }
+ }
+
+ /**
+ * Fetches the url via sgid SDK.
+ */
+ authorizationUrl(): { url: string; codeVerifier: string; nonce?: string } {
+ if (!this.sgidClient) {
+ throw new Error('SGID client not initialised')
+ }
+ try {
+ const { codeChallenge, codeVerifier } = generatePkcePair()
+ const { url, nonce } = this.sgidClient.authorizationUrl({
+ state: SGID_LOGIN_OAUTH_STATE,
+ scope: ['openid', 'ogpofficerinfo.work_email'].join(' '),
+ codeChallenge,
+ })
+ return { url, codeVerifier, nonce }
+ } catch (e) {
+ throw new Error(`Error retrieving url via sgid-client ${e.message}`)
+ }
+ }
+
+ /**
+ * Fetches the token via sgid SDK.
+ */
+ async callback(code: string, nonce: string, codeVerifier: string) {
+ if (!code || !this.sgidClient)
+ throw new Error(`code cannot be empty or sgid client not initialised`)
+ try {
+ const { sub, accessToken } = await this.sgidClient.callback({
+ code,
+ nonce,
+ codeVerifier,
+ })
+ return { sub, accessToken }
+ } catch (e) {
+ throw new Error('Error retrieving access token via sgid-client')
+ }
+ }
+
+ /**
+ * Fetches the user info via sgid SDK.
+ */
+ async userinfo(accessToken: string, sub: string) {
+ if (!accessToken || !this.sgidClient)
+ throw new Error(`accessToken cannot be empty`)
+ try {
+ return await this.sgidClient.userinfo({ accessToken, sub })
+ } catch (e) {
+ throw new Error('Error retrieving user info via sgid-client')
+ }
+ }
+}
+
+// Initialised the sgidService object with the different environments
+export const SgidAuthService = new SgidService({
+ clientId: sgidClientId,
+ clientSecret: sgidClientSecret,
+ privateKey: sgidPrivateKey,
+ redirectUri: `${ogUrl}/api/sgidLogin/authenticate`,
+ hostname: sgidApiHostname,
+})
diff --git a/test/integration/api/admin-v1/Urls.test.ts b/test/integration/api/admin-v1/Urls.test.ts
new file mode 100644
index 000000000..f4c3acc86
--- /dev/null
+++ b/test/integration/api/admin-v1/Urls.test.ts
@@ -0,0 +1,209 @@
+import { API_ADMIN_V1_URLS } from '../../config'
+import {
+ DATETIME_REGEX,
+ createIntegrationTestAdminUser,
+ createIntegrationTestUser,
+ deleteIntegrationTestUser,
+ generateRandomString,
+} from '../../util/helpers'
+import { postJson } from '../../util/requests'
+
+async function createLinkUrl(
+ link: {
+ shortUrl?: string
+ longUrl?: string
+ email?: string
+ },
+ apiKey: string,
+) {
+ const res = await postJson(API_ADMIN_V1_URLS, link, undefined, apiKey)
+ return res
+}
+
+/**
+ * Integration tests for Admin API v1.
+ */
+describe('Admin API v1 Integration Tests', () => {
+ let email: string
+ let apiKey: string
+ const longUrl = 'https://example.com'
+ const validEmail = 'integration-test-user@test.gov.sg'
+
+ beforeAll(async () => {
+ ;({ email, apiKey } = await createIntegrationTestAdminUser())
+ })
+
+ afterAll(async () => {
+ await deleteIntegrationTestUser(email)
+ })
+
+ it('should not be able to create urls without API key header', async () => {
+ const res = await postJson(
+ API_ADMIN_V1_URLS,
+ { longUrl },
+ undefined,
+ undefined,
+ )
+ expect(res.status).toBe(401)
+ const json = await res.json()
+ expect(json).toBeTruthy()
+ expect(json).toEqual({
+ message: 'Authorization header is missing',
+ })
+ })
+
+ it('should not be able to create urls with invalid API key', async () => {
+ const res = await postJson(
+ API_ADMIN_V1_URLS,
+ { longUrl },
+ undefined,
+ 'this-is-an-invalid-api-key',
+ )
+ expect(res.status).toBe(401)
+ const json = await res.json()
+ expect(json).toBeTruthy()
+ expect(json).toEqual({
+ message: 'Invalid API Key',
+ })
+ })
+
+ it('should not be able to create urls with unauthorized API key', async () => {
+ const testUser = await createIntegrationTestUser()
+ const res = await postJson(
+ API_ADMIN_V1_URLS,
+ { longUrl },
+ undefined,
+ testUser.apiKey,
+ )
+ expect(res.status).toBe(401)
+ const json = await res.json()
+ expect(json).toBeTruthy()
+ expect(json).toEqual({
+ message: `User is unauthorized`,
+ })
+ await deleteIntegrationTestUser(testUser.email)
+ })
+
+ it('should be able to create link url with longUrl, shortUrl, and validEmail', async () => {
+ const shortUrl = await generateRandomString(8)
+ const res = await createLinkUrl(
+ { shortUrl, longUrl, email: validEmail },
+ apiKey,
+ )
+ expect(res.status).toBe(200)
+ const body = await res.json()
+ expect(body).toEqual({
+ shortUrl: expect.stringMatching(/^[a-z0-9]{8}$/),
+ longUrl,
+ clicks: 0,
+ state: 'ACTIVE',
+ createdAt: expect.stringMatching(DATETIME_REGEX),
+ updatedAt: expect.stringMatching(DATETIME_REGEX),
+ })
+ })
+
+ it('should not be able to create link url with longUrl and shortUrl, without validEmail', async () => {
+ const shortUrl = await generateRandomString(8)
+ const res = await createLinkUrl({ shortUrl, longUrl }, apiKey)
+ expect(res.status).toBe(400)
+ const json = await res.json()
+ expect(json).toBeTruthy()
+ expect(json).toEqual({
+ message: 'ValidationError: "email" is required',
+ })
+ })
+
+ it('should not be able to create link url with longUrl and shortUrl, with invalid email', async () => {
+ const shortUrl = await generateRandomString(8)
+ const invalidEmail = 'integration-test-user@nongov.sg'
+ const res = await createLinkUrl(
+ { shortUrl, longUrl, email: invalidEmail },
+ apiKey,
+ )
+ expect(res.status).toBe(400)
+ const json = await res.json()
+ expect(json).toBeTruthy()
+ expect(json).toEqual({
+ message:
+ 'ValidationError: Invalid email provided. Email domain is not whitelisted.',
+ })
+ })
+
+ it('should be able to create link url with longUrl and validEmail, without shortUrl', async () => {
+ const res = await createLinkUrl({ longUrl, email: validEmail }, apiKey)
+ expect(res.status).toBe(200)
+ const body = await res.json()
+ expect(body).toEqual({
+ shortUrl: expect.stringMatching(/^[a-z0-9]{8}$/),
+ longUrl,
+ clicks: 0,
+ state: 'ACTIVE',
+ createdAt: expect.stringMatching(DATETIME_REGEX),
+ updatedAt: expect.stringMatching(DATETIME_REGEX),
+ })
+ })
+
+ it('should not be able to create link url with longUrl, without shortUrl and validEmail', async () => {
+ const res = await createLinkUrl({ longUrl }, apiKey)
+ expect(res.status).toBe(400)
+ const json = await res.json()
+ expect(json).toBeTruthy()
+ expect(json).toEqual({
+ message: 'ValidationError: "email" is required',
+ })
+ })
+
+ it('should not be able to create link url with invalid email', async () => {
+ const res = await createLinkUrl(
+ { longUrl, email: 'invalid-email-value' },
+ apiKey,
+ )
+ expect(res.status).toBe(400)
+ const body = await res.json()
+ expect(body).toEqual({
+ message:
+ 'ValidationError: Invalid email provided. Email domain is not whitelisted.',
+ })
+ })
+
+ it('should not be able to create link url without longUrl, shortUrl, and email', async () => {
+ const res = await createLinkUrl({}, apiKey)
+ expect(res.status).toBe(400)
+ const body = await res.json()
+ expect(body).toEqual({
+ message: 'ValidationError: "longUrl" is required. "email" is required',
+ })
+ })
+
+ it('should not be able to create link url with invalid longUrl', async () => {
+ const invalidLongUrl = 'this-is-an-invalid-url'
+ const res = await createLinkUrl(
+ { longUrl: invalidLongUrl, email: validEmail },
+ apiKey,
+ )
+ expect(res.status).toBe(400)
+ const body = await res.json()
+ expect(body).toEqual({
+ message: 'ValidationError: Only HTTPS URLs are allowed.',
+ })
+ })
+
+ it('should not be able to create link url with invalid shortUrl', async () => {
+ const invalidShortUrl = 'foo%bar'
+ const res = await createLinkUrl(
+ { shortUrl: invalidShortUrl, longUrl, email: validEmail },
+ apiKey,
+ )
+ expect(res.status).toBe(400)
+ const body = await res.json()
+ expect(body).toEqual({
+ message: 'ValidationError: Short URL format is invalid.',
+ })
+ })
+
+ it('should be able to create link url with longUrl, shortUrl, and same email as admin', async () => {
+ const shortUrl = await generateRandomString(8)
+ const res = await createLinkUrl({ shortUrl, longUrl, email }, apiKey)
+ expect(res.status).toBe(200)
+ })
+})
diff --git a/test/integration/config.ts b/test/integration/config.ts
index d33e389b4..488ee7e6b 100644
--- a/test/integration/config.ts
+++ b/test/integration/config.ts
@@ -8,6 +8,7 @@ export const IMAGE_FILE_PATH = './test/integration/assets/go-logo.png'
export const API_USER_URL = 'http://localhost:8080/api/user/url'
export const API_EXTERNAL_V1_URLS = 'http://localhost:8080/api/v1/urls'
+export const API_ADMIN_V1_URLS = 'http://localhost:8080/api/v1/admin/urls'
export const API_LOGIN_OTP = 'http://localhost:8080/api/login/otp'
export const API_LOGIN_VERIFY = 'http://localhost:8080/api/login/verify'
diff --git a/test/integration/util/helpers.ts b/test/integration/util/helpers.ts
index 92c6aa34b..80195d462 100644
--- a/test/integration/util/helpers.ts
+++ b/test/integration/util/helpers.ts
@@ -37,6 +37,21 @@ export const createIntegrationTestUser: () => Promise<{
return { email: integrationTestEmail, apiKey }
}
+export const createIntegrationTestAdminUser: () => Promise<{
+ email: string
+ apiKey: string
+}> = async () => {
+ const testAdminEmail = 'integration-test-admin@open.gov.sg'
+
+ const randomApiString = crypto.randomBytes(32).toString('base64')
+ const hash = await bcrypt.hash(randomApiString, API_KEY_SALT)
+ const apiKey = `test_v1_${randomApiString}`
+ const apiKeyHash = `test_v1_${hash.replace(API_KEY_SALT, '')}`
+
+ await createDbUser(testAdminEmail, apiKeyHash)
+ return { email: testAdminEmail, apiKey }
+}
+
export const deleteIntegrationTestUser: (email: string) => Promise =
async (email) => {
await deleteDbUser(email)