diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 000000000..06cc47d9a
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,35 @@
+{
+ "root": true,
+ "ignorePatterns": ["**/*"],
+ "plugins": ["@nrwl/nx"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {
+ "@nrwl/nx/enforce-module-boundaries": [
+ "error",
+ {
+ "enforceBuildableLibDependency": true,
+ "allow": [],
+ "depConstraints": [
+ {
+ "sourceTag": "*",
+ "onlyDependOnLibsWithTags": ["*"]
+ }
+ ]
+ }
+ ]
+ }
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "extends": ["plugin:@nrwl/nx/typescript"],
+ "rules": {}
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "extends": ["plugin:@nrwl/nx/javascript"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 000000000..00d99b203
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,48 @@
+name: Publish Push SDK
+
+on:
+ pull_request:
+ types: [closed]
+ branches:
+ - main
+jobs:
+ publish:
+ if: github.event.pull_request.merged == true
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: "Checkout"
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 0
+
+ - name: "Setup NodeJS"
+ uses: actions/setup-node@v2
+ with:
+ node-version: '14'
+
+ - name: Ensure NPM access
+ run: |
+ npm config set '//registry.npmjs.org/:_authToken' "${NPM_TOKEN}"
+ env:
+ NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
+
+ - name: Setup Git
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ git config user.name "${{ github.actor }}"
+ git config user.email "${{ github.actor}}@users.noreply.github.com"
+ - run: yarn install --frozen-lockfile
+
+ # The NX target "ci-version" has postTargets=[build, ci-publish]
+ - name: "Version, Build, Publish"
+ shell: bash
+ run: yarn nx affected --target ci-version --base= origin/main~1 --head= HEAD --parallel=1 --exclude=demoreact demonative
+
+ - name: "Push GIT Tags"
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ shell: bash
+ run: |
+ git push origin main --follow-tags
\ No newline at end of file
diff --git a/.husky/commit-msg b/.husky/commit-msg
new file mode 100755
index 000000000..1f015e271
--- /dev/null
+++ b/.husky/commit-msg
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+red=`tput setaf 1`
+green=`tput setaf 2`
+reset=`tput sgr0`
+
+echo "\n\nRunning GIT 'commit-msg' hook..."
+echo "\n This enforces Conventional Commits"
+
+if ! head -1 "$1" | grep -qE "^(feat|fix|chore|docs|test|style|refactor|perf|build|ci|revert)(\(.+?\))?: .{1,}$"; then
+ echo "${red}Aborting commit. Your commit message is invalid!!!" >&2
+ exit 1
+fi
+if ! head -1 "$1" | grep -qE "^.{1,88}$"; then
+ echo "${red}Aborting commit. Your commit message is too long!!!" >&2
+ exit 1
+fi
\ No newline at end of file
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100755
index 000000000..2665d0376
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1,7 @@
+#!/bin/sh
+. "$(dirname "$0")/_/husky.sh"
+
+echo "\nRunning GIT hooks..."
+yarn cleanbuild
+yarn nx affected --target=lint
+yarn nx affected --target=test
\ No newline at end of file
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
index 36949df54..6a302fe53 100644
--- a/.vscode/extensions.json
+++ b/.vscode/extensions.json
@@ -1,7 +1,8 @@
{
"recommendations": [
-
"nrwl.angular-console",
- "esbenp.prettier-vscode"
+ "esbenp.prettier-vscode",
+ "dbaeumer.vscode-eslint",
+ "firsttris.vscode-jest-runner"
]
}
diff --git a/jest.config.ts b/jest.config.ts
new file mode 100644
index 000000000..2a738f774
--- /dev/null
+++ b/jest.config.ts
@@ -0,0 +1,5 @@
+import { getJestProjects } from '@nrwl/jest';
+
+export default {
+ projects: getJestProjects(),
+};
diff --git a/jest.preset.js b/jest.preset.js
new file mode 100644
index 000000000..e6c8ebea0
--- /dev/null
+++ b/jest.preset.js
@@ -0,0 +1,3 @@
+const nxPreset = require('@nrwl/jest/preset').default;
+
+module.exports = { ...nxPreset };
diff --git a/package.json b/package.json
index 9d0f33119..a939953df 100644
--- a/package.json
+++ b/package.json
@@ -2,15 +2,44 @@
"name": "sdk",
"version": "0.0.0",
"license": "MIT",
- "scripts": {},
+ "scripts": {
+ "prepare": "husky install",
+ "cleanbuild": "rimraf ./dist && rimraf ./tmp"
+ },
+ "config": {
+ "commitizen": {
+ "path": "cz-conventional-changelog"
+ }
+ },
"private": true,
- "dependencies": {},
+ "dependencies": {
+ "axios": "^1.0.0",
+ "ethers": "^5.7.1",
+ "tslib": "^2.3.0",
+ "uuid": "^9.0.0"
+ },
"devDependencies": {
"@nrwl/cli": "14.1.7",
+ "@nrwl/eslint-plugin-nx": "14.1.7",
+ "@nrwl/jest": "14.1.7",
"@nrwl/js": "14.1.7",
+ "@nrwl/linter": "14.1.7",
"@nrwl/workspace": "14.1.7",
+ "@types/jest": "27.4.1",
+ "@types/node": "16.11.7",
+ "@types/uuid": "^8.3.4",
+ "@typescript-eslint/eslint-plugin": "~5.18.0",
+ "@typescript-eslint/parser": "~5.18.0",
+ "commitizen": "^4.2.5",
+ "cz-conventional-changelog": "^3.3.0",
+ "eslint": "~8.12.0",
+ "eslint-config-prettier": "8.1.0",
+ "husky": "^8.0.0",
+ "jest": "27.5.1",
"nx": "14.1.7",
"prettier": "^2.5.1",
+ "ts-jest": "27.1.4",
+ "ts-node": "9.1.1",
"typescript": "~4.6.2"
}
}
diff --git a/packages/restapi/.eslintrc.json b/packages/restapi/.eslintrc.json
new file mode 100644
index 000000000..9d9c0db55
--- /dev/null
+++ b/packages/restapi/.eslintrc.json
@@ -0,0 +1,18 @@
+{
+ "extends": ["../../.eslintrc.json"],
+ "ignorePatterns": ["!**/*"],
+ "overrides": [
+ {
+ "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.ts", "*.tsx"],
+ "rules": {}
+ },
+ {
+ "files": ["*.js", "*.jsx"],
+ "rules": {}
+ }
+ ]
+}
diff --git a/packages/restapi/README.md b/packages/restapi/README.md
new file mode 100644
index 000000000..a6fa78bda
--- /dev/null
+++ b/packages/restapi/README.md
@@ -0,0 +1,506 @@
+# restapi
+This package gives access to EPNS backend APIs
+
+## How to use in your app?
+
+### Installation
+```
+ yarn add @pushprotocol/restapi ethers
+```
+ or
+```
+ npm install @pushprotocol/restapi ethers
+```
+Import in your file
+```typescript
+import * as PushAPI from "@pushprotocol/restapi";
+```
+
+### **NOTE on Addresses:**
+
+In any of the below methods (unless explicitly stated otherwise) we accept either -
+- [CAIP format](https://github.com/ChainAgnostic/CAIPs/blob/master/CAIPs/caip-10.md#test-cases): for any on chain addresses ***We strongly recommend using this address format***.
+(Example : `eip155:1:0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb`)
+
+- ETH address format: only for backwards compatibility.
+(Example: `0xab16a96d359ec26a11e2c2b3d8f8b8942d5bfcdb`)
+
+
+
+### **NOTE on generating the "signer" object for different platforms:**
+
+#### When using in SERVER-SIDE code:
+```typescript
+const ethers = require('ethers');
+const PK = 'your_channel_address_secret_key';
+const Pkey = `0x${PK}`;
+const signer = new ethers.Wallet(Pkey);
+```
+#### When using in FRONT-END code:
+```typescript
+// any other web3 ui lib is also acceptable
+import { useWeb3React } from "@web3-react/core";
+.
+.
+.
+const { account, library, chainId } = useWeb3React();
+const signer = library.getSigner(account);
+```
+
+### MAIN FEATURES
+
+#### **fetching user notifications**
+```typescript
+const notifications = await PushAPI.user.getFeeds({
+ user: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // user address in CAIP
+ env: 'staging'
+});
+```
+
+#### **fetching user spam notifications**
+```typescript
+const spams = await PushAPI.user.getFeeds({
+ user: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // user address in CAIP
+ spam: true,
+ env: 'staging'
+});
+```
+
+Allowed Options (params with * are mandatory)
+| Param | Type | Default | Remarks |
+|----------|---------|---------|--------------------------------------------|
+| user* | string | - | user account address (CAIP) |
+| page | number | 1 | page index of the results |
+| limit | number | 10 | number of items in 1 page |
+| spam | boolean | false | if "true" it will fetch spam feeds |
+| env | string | 'prod' | API env - 'prod', 'staging', 'dev'|
+| raw | boolean | false | if "true" the method will return unformatted raw API response|
+
+#### **fetching user subscriptions**
+```typescript
+const subscriptions = await PushAPI.user.getSubscriptions({
+ user: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // user address in CAIP
+ env: 'staging'
+});
+```
+
+where `subscriptions` is a list of channels `[{ channel: '0xaddress', ... }]` subscribed by the user.
+
+*Note: We can find out if a user is subscribed to a channel by checking if the channel address is present in the subscriptions list*
+
+Allowed Options (params with * are mandatory)
+| Param | Type | Default | Remarks |
+|----------|---------|---------|--------------------------------------------|
+| user* | string | - | user address (CAIP) |
+| env | string | 'prod' | API env - 'prod', 'staging', 'dev'|
+
+
+#### **fetching channel details**
+```typescript
+const channelData = await PushAPI.channels.getChannel({
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // channel address in CAIP
+ env: 'staging'
+});
+```
+
+Allowed Options (params with * are mandatory)
+| Param | Type | Default | Remarks |
+|----------|---------|---------|--------------------------------------------|
+| channel* | string | - | channel address (CAIP) |
+| env | string | 'prod' | API env - 'prod', 'staging', 'dev'|
+
+
+#### **searching for channel(s)**
+```typescript
+const channelsData = await PushAPI.channels.search({
+ query: 'epns', // a search query
+ page: 1, // page index
+ limit: 20, // no of items per page
+ env: 'staging'
+});
+```
+
+Allowed Options (params with * are mandatory)
+| Param | Type | Default | Remarks |
+|----------|---------|---------|--------------------------------------------|
+| query* | string | - | search query |
+| page | number | 1 | page index of the results |
+| limit | number | 10 | number of items in 1 page |
+| env | string | 'prod' | API env - 'prod', 'staging', 'dev'|
+
+
+#### **opt in to a channel**
+```typescript
+await PushAPI.channels.subscribe({
+ signer: _signer,
+ channelAddress: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // channel address in CAIP
+ userAddress: 'eip155:5:0x52f856A160733A860ae7DC98DC71061bE33A28b3', // user address in CAIP
+ onSuccess: () => {
+ console.log('opt in success');
+ },
+ onError: () => {
+ console.error('opt in error');
+ },
+ env: 'staging'
+})
+```
+
+Allowed Options (params with * are mandatory)
+| Param | Type | Default | Remarks |
+|----------|---------|---------|--------------------------------------------|
+| signer* | - | - | Signer object |
+| channelAddress* | string | - | channel address (CAIP) |
+| userAddress* | string | - | user address (CAIP) | |
+| verifyingContractAddress | string | - | EPNS communicator contract address|
+| onSuccess | function | - | on success callback |
+| onError | function | - | on error callback |
+| env | string | 'prod' | API env - 'prod', 'staging', 'dev'|
+
+
+#### **opt out to a channel**
+```typescript
+await PushAPI.channels.unsubscribe({
+ signer: _signer,
+ channelAddress: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // channel address in CAIP
+ userAddress: 'eip155:5:0x52f856A160733A860ae7DC98DC71061bE33A28b3', // user address in CAIP
+ onSuccess: () => {
+ console.log('opt out success');
+ },
+ onError: () => {
+ console.error('opt out error');
+ },
+ env: 'staging'
+})
+```
+Allowed Options (params with * are mandatory)
+| Param | Type | Default | Remarks |
+|----------|---------|---------|--------------------------------------------|
+| signer* | - | - | Signer object |
+| channelAddress* | string | - | channel address (CAIP) |
+| userAddress* | string | - | user address (CAIP) | |
+| verifyingContractAddress | string | - | EPNS communicator contract address|
+| onSuccess | function | - | on success callback |
+| onError | function | - | on error callback |
+| env | string | 'prod' | API env - 'prod', 'staging', 'dev'|
+
+
+
+*EPNS communicator contract address
+```
+ETH Mainnet - 0xb3971BCef2D791bc4027BbfedFb47319A4AAaaAa
+ETH Goerli - 0x87da9Af1899ad477C67FeA31ce89c1d2435c77DC
+```
+
+#### **sending notification**
+
+
+##### **direct payload for single recipient(target)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 3, // target
+ identityType: 2, // direct payload
+ notification: {
+ title: `[SDK-TEST] notification TITLE:`,
+ body: `[sdk-test] notification BODY`
+ },
+ payload: {
+ title: `[sdk-test] payload title`,
+ body: `sample msg body`,
+ cta: '',
+ img: ''
+ },
+ recipients: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // recipient address
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **direct payload for group of recipients(subset)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 4, // subset
+ identityType: 2, // direct payload
+ notification: {
+ title: `[SDK-TEST] notification TITLE:`,
+ body: `[sdk-test] notification BODY`
+ },
+ payload: {
+ title: `[sdk-test] payload title`,
+ body: `sample msg body`,
+ cta: '',
+ img: ''
+ },
+ recipients: ['eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', 'eip155:5:0xCdBE6D076e05c5875D90fa35cc85694E1EAFBBd1'], // recipients addresses
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **direct payload for all recipients(broadcast)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 1, // broadcast
+ identityType: 2, // direct payload
+ notification: {
+ title: `[SDK-TEST] notification TITLE:`,
+ body: `[sdk-test] notification BODY`
+ },
+ payload: {
+ title: `[sdk-test] payload title`,
+ body: `sample msg body`,
+ cta: '',
+ img: ''
+ },
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **IPFS payload for single recipient(target)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 3, // target
+ identityType: 1, // ipfs payload
+ ipfsHash: 'bafkreicuttr5gpbyzyn6cyapxctlr7dk2g6fnydqxy6lps424mcjcn73we', // IPFS hash of the payload
+ recipients: 'eip155:5:0xCdBE6D076e05c5875D90fa35cc85694E1EAFBBd1', // recipient address
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **IPFS payload for group of recipients(subset)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 4, // subset
+ identityType: 1, // ipfs payload
+ ipfsHash: 'bafkreicuttr5gpbyzyn6cyapxctlr7dk2g6fnydqxy6lps424mcjcn73we', // IPFS hash of the payload
+ recipients: ['eip155:5:0xCdBE6D076e05c5875D90fa35cc85694E1EAFBBd1', 'eip155:5:0x52f856A160733A860ae7DC98DC71061bE33A28b3'], // recipients addresses
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **IPFS payload for all recipients(broadcast)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 1, // broadcast
+ identityType: 1, // direct payload
+ ipfsHash: 'bafkreicuttr5gpbyzyn6cyapxctlr7dk2g6fnydqxy6lps424mcjcn73we', // IPFS hash of the payload
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **minimal payload for single recipient(target)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 3, // target
+ identityType: 0, // Minimal payload
+ notification: {
+ title: `[SDK-TEST] notification TITLE:`,
+ body: `[sdk-test] notification BODY`
+ },
+ payload: {
+ title: `[sdk-test] payload title`,
+ body: `sample msg body`,
+ cta: '',
+ img: ''
+ },
+ recipients: 'eip155:5:0xCdBE6D076e05c5875D90fa35cc85694E1EAFBBd1', // recipient address
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **minimal payload for a group of recipient(subset)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 4, // subset
+ identityType: 0, // Minimal payload
+ notification: {
+ title: `[SDK-TEST] notification TITLE:`,
+ body: `[sdk-test] notification BODY`
+ },
+ payload: {
+ title: `[sdk-test] payload title`,
+ body: `sample msg body`,
+ cta: '',
+ img: ''
+ },
+ recipients: ['eip155:5:0xCdBE6D076e05c5875D90fa35cc85694E1EAFBBd1', 'eip155:5:0x52f856A160733A860ae7DC98DC71061bE33A28b3'], // recipients address
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **minimal payload for all recipients(broadcast)**
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 1, // broadcast
+ identityType: 0, // Minimal payload
+ notification: {
+ title: `[SDK-TEST] notification TITLE:`,
+ body: `[sdk-test] notification BODY`
+ },
+ payload: {
+ title: `[sdk-test] payload title`,
+ body: `sample msg body`,
+ cta: '',
+ img: ''
+ },
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **graph payload for single recipient(target)**
+***Make sure the channel has the graph id you are providing!!***
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 3, // target
+ identityType: 3, // Subgraph payload
+ graph: {
+ id: '_your_graph_id',
+ counter: 3
+ },
+ recipients: 'eip155:5:0xCdBE6D076e05c5875D90fa35cc85694E1EAFBBd1', // recipient address
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **graph payload for group of recipients(subset)**
+***Make sure the channel has the graph id you are providing!!***
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 4, // subset
+ identityType: 3, // graph payload
+ graph: {
+ id: '_your_graph_id',
+ counter: 3
+ },
+ recipients: ['eip155:5:0xCdBE6D076e05c5875D90fa35cc85694E1EAFBBd1', 'eip155:5:0x52f856A160733A860ae7DC98DC71061bE33A28b3'], // recipients addresses
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+##### **graph payload for all recipients(broadcast)**
+***Make sure the channel has the graph id you are providing!!***
+```typescript
+// apiResponse?.status === 204, if sent successfully!
+const apiResponse = await PushAPI.payloads.sendNotification({
+ signer,
+ type: 1, // broadcast
+ identityType: 3, // graph payload
+ graph: {
+ id: '_your_graph_id',
+ counter: 3
+ },
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // your channel address
+ env: 'staging'
+});
+```
+
+Allowed Options (params with * are mandatory)
+| Param | Type | Default | Remarks |
+|----------|---------|---------|--------------------------------------------|
+| signer* | - | - | Signer object |
+| channel* | string | - | channel address (CAIP) |
+| type* | number | - | Notification Type
Target = 3 (send to 1 address),
Subset = 4 (send to 1 or more addresses),
Broadcast = 1 (send to all addresses) |
+| identityType* | number | - | Identity Type
Minimal = 0,
IPFS = 1,
Direct Payload = 2,
Subgraph = 3 } |
+| recipients* | string or string[] | - | for Notification Type = Target it is 1 address,
for Notification Type = Subset, Broadcast it is an array of addresses (CAIP) |
+| notification.title* | string | - | Push Notification Title (not required for identityType IPFS, Subgraph)|
+| notification.body* | string | - | Push Notification Body (not required for identityType IPFS, Subgraph)|
+| payload.title | string | - | Notification Title (not required for identityType IPFS, Subgraph)|
+| payload.body | string | - | Notification Body (not required for identityType IPFS, Subgraph)|
+| payload.cta | string | - | Notification Call To Action url (not required for identityType IPFS, Subgraph)|
+| payload.img | string | - | Notification Media url (not required for identityType IPFS, Subgraph)|
+| payload.sectype | string | - | If Secret Notification then pass (not required for identityType IPFS, Subgraph)|
+| graph.id | string | - | graph id, required only if the identityType is 3 |
+| graph.counter | string | - | graph counter, required only if the identityType is 3 |
+| ipfsHash | string | - | ipfsHash, required only if the identityType is 1 |
+| expiry | number | - | (optional) epoch value if the notification has an expiry |
+| hidden | boolean | false | (optional) true if we want to hide the notification |
+| env | string | 'prod' | API env - 'prod', 'staging', 'dev'|
+
+
+
+### UTILS
+#### **parsing notifications**
+Utils method to parse raw EPNS Feeds API response into a pre-defined shape as below.
+```typescript
+// fetch some raw feeds data
+const apiResponse = await PushAPI.user.getFeeds({
+ user: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // user address
+ raw: true,
+ env: 'staging'
+});
+// parse it to get a specific shape of object.
+const parsedResults = PushAPI.utils.parseApiResponse(apiResponse);
+
+const [oneNotification] = parsedResults;
+
+// Now this object can be directly used by for e.g. "@pushprotocol/uiweb" NotificationItem component as props.
+
+const {
+ cta,
+ title,
+ message,
+ app,
+ icon,
+ image,
+ url,
+ blockchain,
+ secret,
+ notification
+} = oneNotification;
+
+```
+*We get the above `keys` after the parsing of the API repsonse.*
+
+
+
+### ADVANCED (WIP)
+
+
+### DEPRECATED
+
+#### **get a channel's subscriber list of addresses**
+```typescript
+const subscribers = await PushAPI.channels._getSubscribers({
+ channel: 'eip155:5:0xD8634C39BBFd4033c0d3289C4515275102423681', // channel address in CAIP
+ env: 'staging'
+});
+```
+
+Allowed Options (params with * are mandatory)
+| Param | Type | Default | Remarks |
+|----------|---------|---------|--------------------------------------------|
+| channel* | string | - | channel address (CAIP) |
+| env | string | 'prod' | API env - 'prod', 'staging', 'dev'|
+
+
+
diff --git a/packages/restapi/jest.config.ts b/packages/restapi/jest.config.ts
new file mode 100644
index 000000000..b83234150
--- /dev/null
+++ b/packages/restapi/jest.config.ts
@@ -0,0 +1,15 @@
+/* eslint-disable */
+export default {
+ displayName: 'restapi',
+ preset: '../../jest.preset.js',
+ globals: {
+ 'ts-jest': {
+ tsconfig: '/tsconfig.spec.json',
+ },
+ },
+ transform: {
+ '^.+\\.[tj]s$': 'ts-jest',
+ },
+ moduleFileExtensions: ['ts', 'js', 'html'],
+ coverageDirectory: '../../coverage/packages/restapi',
+};
diff --git a/packages/restapi/package.json b/packages/restapi/package.json
new file mode 100644
index 000000000..0b0b8d864
--- /dev/null
+++ b/packages/restapi/package.json
@@ -0,0 +1,11 @@
+{
+ "name": "@pushprotocol/restapi",
+ "version": "0.0.1",
+ "type": "commonjs",
+ "publishConfig": {
+ "registry": "https://registry.npmjs.org/"
+ },
+ "peerDependencies": {
+ "ethers": "^5.6.8"
+ }
+}
\ No newline at end of file
diff --git a/packages/restapi/project.json b/packages/restapi/project.json
new file mode 100644
index 000000000..02106730f
--- /dev/null
+++ b/packages/restapi/project.json
@@ -0,0 +1,49 @@
+{
+ "$schema": "../../node_modules/nx/schemas/project-schema.json",
+ "sourceRoot": "packages/restapi/src",
+ "projectType": "library",
+ "targets": {
+ "build": {
+ "executor": "@nrwl/js:tsc",
+ "outputs": ["{options.outputPath}"],
+ "options": {
+ "outputPath": "dist/packages/restapi",
+ "main": "packages/restapi/src/index.ts",
+ "tsConfig": "packages/restapi/tsconfig.lib.json",
+ "assets": ["packages/restapi/*.md"],
+ "updateBuildableProjectDepsInPackageJson": true,
+ "buildableProjectDepsInPackageJsonType": "dependencies"
+ }
+ },
+ "lint": {
+ "executor": "@nrwl/linter:eslint",
+ "outputs": ["{options.outputFile}"],
+ "options": {
+ "lintFilePatterns": ["packages/restapi/**/*.ts"]
+ }
+ },
+ "test": {
+ "executor": "@nrwl/jest:jest",
+ "outputs": ["coverage/packages/restapi"],
+ "options": {
+ "jestConfig": "packages/restapi/jest.config.ts",
+ "passWithNoTests": true
+ }
+ },
+ "ci-version": {
+ "executor": "@jscutlery/semver:version",
+ "options": {
+ "preset": "angular",
+ "commitMessageFormat": "ci(${projectName}): 🎉 cut release to ${projectName}-v${version}",
+ "postTargets": ["restapi:build", "restapi:ci-publish"]
+ }
+ },
+ "ci-publish": {
+ "executor": "@nrwl/workspace:run-commands",
+ "options": {
+ "command": "node tools/scripts/publish.mjs restapi"
+ }
+ }
+ },
+ "tags": []
+}
diff --git a/packages/restapi/src/index.ts b/packages/restapi/src/index.ts
new file mode 100644
index 000000000..f41a696fd
--- /dev/null
+++ b/packages/restapi/src/index.ts
@@ -0,0 +1 @@
+export * from './lib';
diff --git a/packages/restapi/src/lib/channels/_getSubscribers.ts b/packages/restapi/src/lib/channels/_getSubscribers.ts
new file mode 100644
index 000000000..bbdeb53cb
--- /dev/null
+++ b/packages/restapi/src/lib/channels/_getSubscribers.ts
@@ -0,0 +1,60 @@
+import axios from "axios";
+import {
+ getCAIPAddress,
+ getAPIBaseUrls,
+ getCAIPDetails
+} from '../helpers';
+import Constants from '../constants';
+
+export type GetSubscribersOptionsType = {
+ channel: string; // plain ETH Format only
+ env?: string
+}
+
+/**
+ * LEGACY SDK method, kept to support old functionality
+ * can be removed if not needed in future.
+ */
+
+const deprecationWarning = `
+ [EPNS-SDK]: _getSubscribers() Deprecation Warning!
+ This method has been deprecated, please use the below alternatives
+ if you need to,
+ * to check if user is subscribed or not: user.getSubscriptions()
+ * get channels count: channels.getChannels()
+`;
+
+export const _getSubscribers = async (
+ options: GetSubscribersOptionsType
+) => {
+
+ console.warn(deprecationWarning);
+
+ const {
+ channel,
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const _channelAddress = getCAIPAddress(env, channel, 'Channel');
+
+ const channelCAIPDetails = getCAIPDetails(_channelAddress);
+ if (!channelCAIPDetails) throw Error('Invalid Channel CAIP!');
+
+ const chainId = channelCAIPDetails.networkId;
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/channels/_get_subscribers`;
+ const requestUrl = `${apiEndpoint}`;
+
+ const body = {
+ channel: channelCAIPDetails.address, // deprecated API expects ETH address format
+ blockchain: chainId,
+ op: "read"
+ };
+
+ const apiResponse = await axios.post(requestUrl, body);
+
+ const { data: { subscribers = [] } } = apiResponse;
+
+ return subscribers;
+}
diff --git a/packages/restapi/src/lib/channels/getChannel.ts b/packages/restapi/src/lib/channels/getChannel.ts
new file mode 100644
index 000000000..76f969cf5
--- /dev/null
+++ b/packages/restapi/src/lib/channels/getChannel.ts
@@ -0,0 +1,35 @@
+import axios from 'axios';
+import {
+ getCAIPAddress,
+ getAPIBaseUrls
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * GET /v1/channels/{addressinCAIP}
+ */
+
+export type GetChannelOptionsType = {
+ channel: string;
+ env?: string;
+}
+
+export const getChannel = async (
+ options : GetChannelOptionsType
+) => {
+ const {
+ channel,
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const _channel = getCAIPAddress(env, channel, 'Channel');
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/channels`;
+ const requestUrl = `${apiEndpoint}/${_channel}`;
+
+ return await axios.get(requestUrl)
+ .then((response) => response.data)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/channels/index.ts b/packages/restapi/src/lib/channels/index.ts
new file mode 100644
index 000000000..bd8f48168
--- /dev/null
+++ b/packages/restapi/src/lib/channels/index.ts
@@ -0,0 +1,5 @@
+export * from './getChannel';
+export * from './search';
+export * from './subscribe';
+export * from './unsubscribe';
+export * from './_getSubscribers';
\ No newline at end of file
diff --git a/packages/restapi/src/lib/channels/search.ts b/packages/restapi/src/lib/channels/search.ts
new file mode 100644
index 000000000..8ec76b770
--- /dev/null
+++ b/packages/restapi/src/lib/channels/search.ts
@@ -0,0 +1,47 @@
+import axios from 'axios';
+import { getAPIBaseUrls, getQueryParams, getLimit } from '../helpers';
+import Constants from '../constants';
+
+/**
+ * GET /v1/channels/search/
+ * optional params: page=(1)&limit=(20{min:1}{max:30})&query=(searchquery)
+ *
+ */
+
+export type SearchChannelOptionsType = {
+ query: string;
+ env?: string;
+ page?: number;
+ limit?: number;
+}
+
+export const search = async (
+ options : SearchChannelOptionsType
+) => {
+ const {
+ query,
+ env = Constants.ENV.PROD,
+ page = Constants.PAGINATION.INITIAL_PAGE,
+ limit = Constants.PAGINATION.LIMIT,
+ } = options || {};
+
+ if (!query) throw Error('"query" not provided!');
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+
+ const apiEndpoint = `${API_BASE_URL}/v1/channels/search/`;
+
+ const queryObj = {
+ page,
+ limit: getLimit(limit),
+ query: query
+ };
+
+ const requestUrl = `${apiEndpoint}?${getQueryParams(queryObj)}`;
+
+ return axios.get(requestUrl)
+ .then((response) => response.data.channels)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/channels/signature.helpers.ts b/packages/restapi/src/lib/channels/signature.helpers.ts
new file mode 100644
index 000000000..33f977f4e
--- /dev/null
+++ b/packages/restapi/src/lib/channels/signature.helpers.ts
@@ -0,0 +1,47 @@
+
+type channelActionType = "Unsubscribe" | "Subscribe";
+
+export const getDomainInformation = (
+ chainId: number,
+ verifyingContract: string
+) => {
+ return {
+ name: "EPNS COMM V1",
+ chainId,
+ verifyingContract,
+ };
+}
+
+export const getSubscriptionMessage = (
+ channel: string,
+ userAddress: string,
+ action: channelActionType
+) => {
+ const actionTypeKey = (action === "Unsubscribe") ? "unsubscriber" : "subscriber";
+
+ return {
+ channel,
+ [actionTypeKey]: userAddress,
+ action: action,
+ };
+}
+
+export const getTypeInformation = (action: string) => {
+ if (action === "Subscribe") {
+ return {
+ Subscribe: [
+ { name: "channel", type: "address" },
+ { name: "subscriber", type: "address" },
+ { name: "action", type: "string" },
+ ],
+ };
+ }
+
+ return {
+ Unsubscribe: [
+ { name: "channel", type: "address" },
+ { name: "unsubscriber", type: "address" },
+ { name: "action", type: "string" },
+ ],
+ };
+};
\ No newline at end of file
diff --git a/packages/restapi/src/lib/channels/subscribe.ts b/packages/restapi/src/lib/channels/subscribe.ts
new file mode 100644
index 000000000..785c00074
--- /dev/null
+++ b/packages/restapi/src/lib/channels/subscribe.ts
@@ -0,0 +1,106 @@
+import axios from "axios";
+import {
+ getCAIPAddress,
+ getConfig,
+ getCAIPDetails,
+} from '../helpers';
+import {
+ getTypeInformation,
+ getDomainInformation,
+ getSubscriptionMessage
+} from './signature.helpers';
+import Constants from '../constants';
+
+type SignerType = {
+ _signTypedData: (
+ domain: unknown,
+ types: unknown,
+ value: unknown
+ ) => Promise
+}
+
+export type SubscribeOptionsType = {
+ signer: SignerType;
+ channelAddress: string;
+ userAddress: string;
+ verifyingContractAddress?: string;
+ env?: string;
+ onSuccess?: () => void
+ onError?: (err: Error) => void,
+}
+
+export const subscribe = async (
+ options: SubscribeOptionsType
+) => {
+ const {
+ signer,
+ channelAddress,
+ userAddress,
+ verifyingContractAddress,
+ env = Constants.ENV.PROD,
+ onSuccess,
+ onError,
+ } = options || {};
+
+ try {
+ const _channelAddress = getCAIPAddress(env, channelAddress, 'Channel');
+
+ const channelCAIPDetails = getCAIPDetails(_channelAddress);
+ if (!channelCAIPDetails) throw Error('Invalid Channel CAIP!');
+
+ const chainId = parseInt(channelCAIPDetails.networkId, 10);
+
+ const _userAddress = getCAIPAddress(env, userAddress, 'User');
+
+ const userCAIPDetails = getCAIPDetails(_userAddress);
+ if (!userCAIPDetails) throw Error('Invalid User CAIP!');
+
+ const { API_BASE_URL,EPNS_COMMUNICATOR_CONTRACT } = getConfig(env, channelCAIPDetails);
+
+ const requestUrl = `${API_BASE_URL}/v1/channels/${_channelAddress}/subscribe`;
+
+ // get domain information
+ const domainInformation = getDomainInformation(
+ chainId,
+ verifyingContractAddress || EPNS_COMMUNICATOR_CONTRACT
+ );
+
+ // get type information
+ const typeInformation = getTypeInformation("Subscribe");
+
+ // get message
+ const messageInformation = getSubscriptionMessage(
+ channelCAIPDetails.address,
+ userCAIPDetails.address,
+ "Subscribe"
+ );
+
+ // sign a message using EIP712
+ const signature = await signer._signTypedData(
+ domainInformation,
+ typeInformation,
+ messageInformation
+ );
+
+ const verificationProof = signature; // might change
+
+ const body = {
+ verificationProof,
+ message: {
+ ...messageInformation,
+ channel: _channelAddress,
+ subscriber: _userAddress
+ },
+ };
+
+ await axios.post(requestUrl, body);
+
+ if (typeof onSuccess === 'function') onSuccess();
+
+ return { status: "success", message: "successfully opted into channel" };
+ } catch (err) {
+ if (typeof onError === 'function') onError(err as Error);
+
+ return { status: "error", message: err instanceof Error ? err.message : JSON.stringify(err) };
+ }
+}
\ No newline at end of file
diff --git a/packages/restapi/src/lib/channels/unsubscribe.ts b/packages/restapi/src/lib/channels/unsubscribe.ts
new file mode 100644
index 000000000..56f6ae642
--- /dev/null
+++ b/packages/restapi/src/lib/channels/unsubscribe.ts
@@ -0,0 +1,106 @@
+import axios from "axios";
+import {
+ getCAIPAddress,
+ getConfig,
+ getCAIPDetails,
+} from '../helpers';
+import {
+ getTypeInformation,
+ getDomainInformation,
+ getSubscriptionMessage
+} from './signature.helpers';
+import Constants from '../constants';
+
+type SignerType = {
+ _signTypedData: (
+ domain: unknown,
+ types: unknown,
+ value: unknown
+ ) => Promise
+}
+
+export type UnSubscribeOptionsType = {
+ signer: SignerType;
+ channelAddress: string;
+ userAddress: string;
+ verifyingContractAddress?: string;
+ env?: string;
+ onSuccess?: () => void
+ onError?: (err: Error) => void,
+}
+
+export const unsubscribe = async (
+ options: UnSubscribeOptionsType
+) => {
+ const {
+ signer,
+ channelAddress,
+ userAddress,
+ verifyingContractAddress,
+ env = Constants.ENV.PROD,
+ onSuccess,
+ onError,
+ } = options || {};
+
+ try {
+ const _channelAddress = getCAIPAddress(env, channelAddress, 'Channel');
+
+ const channelCAIPDetails = getCAIPDetails(_channelAddress);
+ if (!channelCAIPDetails) throw Error('Invalid Channel CAIP!');
+
+ const chainId = parseInt(channelCAIPDetails.networkId, 10);
+
+ const _userAddress = getCAIPAddress(env, userAddress, 'User');
+
+ const userCAIPDetails = getCAIPDetails(_userAddress);
+ if (!userCAIPDetails) throw Error('Invalid User CAIP!');
+
+ const { API_BASE_URL,EPNS_COMMUNICATOR_CONTRACT } = getConfig(env, channelCAIPDetails);
+
+ const requestUrl = `${API_BASE_URL}/v1/channels/${_channelAddress}/unsubscribe`;
+
+ // get domain information
+ const domainInformation = getDomainInformation(
+ chainId,
+ verifyingContractAddress || EPNS_COMMUNICATOR_CONTRACT
+ );
+
+ // get type information
+ const typeInformation = getTypeInformation("Unsubscribe");
+
+ // get message
+ const messageInformation = getSubscriptionMessage(
+ channelCAIPDetails.address,
+ userCAIPDetails.address,
+ "Unsubscribe"
+ );
+
+ // sign a message using EIP712
+ const signature = await signer._signTypedData(
+ domainInformation,
+ typeInformation,
+ messageInformation
+ );
+
+ const verificationProof = signature; // might change
+
+ const body = {
+ verificationProof,
+ message: {
+ ...messageInformation,
+ channel: _channelAddress,
+ unsubscriber: _userAddress
+ },
+ };
+
+ await axios.post(requestUrl, body);
+
+ if (typeof onSuccess === 'function') onSuccess();
+
+ return { status: "success", message: "successfully opted out channel" };
+ } catch (err) {
+ if (typeof onError === 'function') onError(err as Error);
+
+ return { status: "error", message: err instanceof Error ? err.message : JSON.stringify(err) };
+ }
+}
\ No newline at end of file
diff --git a/packages/restapi/src/lib/chat/createIntent.ts b/packages/restapi/src/lib/chat/createIntent.ts
new file mode 100644
index 000000000..1259b22ee
--- /dev/null
+++ b/packages/restapi/src/lib/chat/createIntent.ts
@@ -0,0 +1,61 @@
+import axios from 'axios';
+import {
+ getAPIBaseUrls,
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * POST '/v1/w2w/intents
+ */
+
+export type ChatCreateIntentOptionsType = {
+ from: string;
+ to: string;
+ encType: string;
+ messageContent?: string;
+ messageType?: string;
+ signature?: string;
+ encryptedSecret?: string;
+ sigType?: string;
+ env?: string;
+}
+
+export const createIntent = async (
+ options : ChatCreateIntentOptionsType
+) => {
+ const {
+ from,
+ to,
+ encType,
+ messageContent = '',
+ messageType = '',
+ signature = '',
+ encryptedSecret = '',
+ sigType = '',
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/w2w/intents`;
+
+
+ const requestUrl = `${apiEndpoint}`;
+
+ const body = {
+ fromDID: from,
+ toDID: to,
+ fromCAIP10: from,
+ toCAIP10: to,
+ messageContent,
+ messageType,
+ signature,
+ encType,
+ encryptedSecret,
+ sigType,
+ };
+
+ return axios.post(requestUrl, body)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/chat/createUser.ts b/packages/restapi/src/lib/chat/createUser.ts
new file mode 100644
index 000000000..cca8a5da9
--- /dev/null
+++ b/packages/restapi/src/lib/chat/createUser.ts
@@ -0,0 +1,54 @@
+import axios from 'axios';
+import {
+ getAPIBaseUrls,
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * POST '/v1/w2w/users
+ */
+
+export type ChatCreateUserOptionsType = {
+ user: string;
+ publicKey?: string;
+ encryptedPrivateKey?: string;
+ encryptionType?: string;
+ signature?: string;
+ sigType?: string;
+ env?: string;
+}
+
+export const createUser = async (
+ options : ChatCreateUserOptionsType
+) => {
+ const {
+ user,
+ publicKey = '',
+ encryptedPrivateKey = '',
+ encryptionType = '',
+ signature = '',
+ sigType = '',
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/w2w/users`;
+
+
+ const requestUrl = `${apiEndpoint}`;
+
+ const body = {
+ caip10: user,
+ did: user,
+ publicKey,
+ encryptedPrivateKey,
+ encryptionType,
+ signature,
+ sigType,
+ };
+
+ return axios.post(requestUrl, body)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/chat/getChat.ts b/packages/restapi/src/lib/chat/getChat.ts
new file mode 100644
index 000000000..7c8743ed7
--- /dev/null
+++ b/packages/restapi/src/lib/chat/getChat.ts
@@ -0,0 +1,34 @@
+import axios from 'axios';
+import {
+ getAPIBaseUrls,
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * GET '/v1/w2w/users/:did/messages
+ */
+
+export type ChatOptionsType = {
+ user: string; // caip10
+ env?: string;
+}
+
+export const getChat = async (
+ options : ChatOptionsType
+) => {
+ const {
+ user,
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/w2w/users/${user}/messages`;
+
+
+ const requestUrl = `${apiEndpoint}`;
+
+ return axios.get(requestUrl)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/chat/getUsers.ts b/packages/restapi/src/lib/chat/getUsers.ts
new file mode 100644
index 000000000..352d2aee9
--- /dev/null
+++ b/packages/restapi/src/lib/chat/getUsers.ts
@@ -0,0 +1,32 @@
+import axios from 'axios';
+import {
+ getAPIBaseUrls,
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * GET '/v1/w2w/users
+ */
+
+export type ChatUsersOptionsType = {
+ env?: string;
+}
+
+export const getUsers = async (
+ options : ChatUsersOptionsType
+) => {
+ const {
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/w2w/users`;
+
+
+ const requestUrl = `${apiEndpoint}`;
+
+ return axios.get(requestUrl)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/chat/index.ts b/packages/restapi/src/lib/chat/index.ts
new file mode 100644
index 000000000..ccc7cf675
--- /dev/null
+++ b/packages/restapi/src/lib/chat/index.ts
@@ -0,0 +1,7 @@
+export * from './getChat';
+export * from './getUsers';
+export * from './createUser';
+export * from './createIntent';
+export * from './sendMessage';
+export * from './updateIntent';
+export * from './updateUser';
\ No newline at end of file
diff --git a/packages/restapi/src/lib/chat/sendMessage.ts b/packages/restapi/src/lib/chat/sendMessage.ts
new file mode 100644
index 000000000..4dfef631c
--- /dev/null
+++ b/packages/restapi/src/lib/chat/sendMessage.ts
@@ -0,0 +1,61 @@
+import axios from 'axios';
+import {
+ getAPIBaseUrls,
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * POST '/v1/w2w/messages
+ */
+
+export type ChatSendMessageOptionsType = {
+ from: string;
+ to: string;
+ messageType: string;
+ messageContent: string;
+ signature: string;
+ encType: string;
+ encryptedSecret: string;
+ sigType: string;
+ env?: string;
+}
+
+export const sendMessage = async (
+ options : ChatSendMessageOptionsType
+) => {
+ const {
+ from,
+ to,
+ messageType,
+ messageContent,
+ signature,
+ encType,
+ encryptedSecret,
+ sigType,
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/w2w/messages`;
+
+
+ const requestUrl = `${apiEndpoint}`;
+
+ const body = {
+ fromDID: from,
+ toDID: to,
+ fromCAIP10: from,
+ toCAIP10: to,
+ messageType,
+ messageContent,
+ signature,
+ encType,
+ encryptedSecret,
+ sigType,
+ };
+
+ return axios.post(requestUrl, body)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/chat/updateIntent.ts b/packages/restapi/src/lib/chat/updateIntent.ts
new file mode 100644
index 000000000..139c27d6d
--- /dev/null
+++ b/packages/restapi/src/lib/chat/updateIntent.ts
@@ -0,0 +1,50 @@
+import axios from 'axios';
+import {
+ getAPIBaseUrls,
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * PUT '/v1/w2w/intents
+ */
+
+export type ChatUpdateIntentOptionsType = {
+ from: string;
+ to: string;
+ signature: string;
+ status: string;
+ sigType: string;
+ env?: string;
+}
+
+export const updateIntent = async (
+ options : ChatUpdateIntentOptionsType
+) => {
+ const {
+ from,
+ to,
+ signature,
+ status,
+ sigType,
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/w2w/intents`;
+
+
+ const requestUrl = `${apiEndpoint}`;
+
+ const body = {
+ fromDID: from,
+ toDID: to,
+ signature,
+ status,
+ sigType,
+ };
+
+ return axios.put(requestUrl, body)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/chat/updateUser.ts b/packages/restapi/src/lib/chat/updateUser.ts
new file mode 100644
index 000000000..ec7de1bd9
--- /dev/null
+++ b/packages/restapi/src/lib/chat/updateUser.ts
@@ -0,0 +1,44 @@
+import axios from 'axios';
+import {
+ getAPIBaseUrls,
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * PUT '/v1/w2w/users/:did
+ */
+
+export type ChatUpdateUserOptionsType = {
+ user: string;
+ profilePictureCID?: string;
+ name?: string;
+ env?: string;
+}
+
+export const updateUser = async (
+ options : ChatUpdateUserOptionsType
+) => {
+ const {
+ user,
+ profilePictureCID = '',
+ name = '',
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/w2w/users/${user}`;
+
+
+ const requestUrl = `${apiEndpoint}`;
+
+ const body = {
+ caip10: user,
+ profilePictureCID,
+ name,
+ };
+
+ return axios.put(requestUrl, body)
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/config.ts b/packages/restapi/src/lib/config.ts
new file mode 100644
index 000000000..8b05e84a4
--- /dev/null
+++ b/packages/restapi/src/lib/config.ts
@@ -0,0 +1,57 @@
+import Constants from './constants';
+
+const { ENV } = Constants;
+
+// for methods not needing the entire config
+export const API_BASE_URL = {
+ [ENV.PROD]: 'https://backend.epns.io/apis',
+ [ENV.STAGING]: 'https://backend-staging.epns.io/apis',
+ [ENV.DEV]: 'https://backend-dev.epns.io/apis'
+};
+
+const BLOCKCHAIN_NETWORK = {
+ ETH_MAINNET: 'eip155:1',
+ ETH_GOERLI: 'eip155:5',
+ POLYGON_MAINNET: 'eip155:137',
+ POLYGON_MUMBAI: 'eip155:80001'
+};
+
+export interface ConfigType {
+ API_BASE_URL: string,
+ EPNS_COMMUNICATOR_CONTRACT: string
+}
+
+const CONFIG = {
+ [ENV.PROD]: {
+ [BLOCKCHAIN_NETWORK.ETH_MAINNET]: {
+ API_BASE_URL: API_BASE_URL[ENV.PROD],
+ EPNS_COMMUNICATOR_CONTRACT: '0xb3971BCef2D791bc4027BbfedFb47319A4AAaaAa'
+ },
+ [BLOCKCHAIN_NETWORK.POLYGON_MAINNET]: {
+ API_BASE_URL: API_BASE_URL[ENV.PROD],
+ EPNS_COMMUNICATOR_CONTRACT: '0xb3971BCef2D791bc4027BbfedFb47319A4AAaaAa'
+ }
+ },
+ [ENV.STAGING]: {
+ [BLOCKCHAIN_NETWORK.ETH_GOERLI]: {
+ API_BASE_URL: API_BASE_URL[ENV.STAGING],
+ EPNS_COMMUNICATOR_CONTRACT: '0xb3971BCef2D791bc4027BbfedFb47319A4AAaaAa'
+ },
+ [BLOCKCHAIN_NETWORK.POLYGON_MUMBAI]: {
+ API_BASE_URL: API_BASE_URL[ENV.STAGING],
+ EPNS_COMMUNICATOR_CONTRACT: '0xb3971BCef2D791bc4027BbfedFb47319A4AAaaAa'
+ }
+ },
+ [ENV.DEV]: {
+ [BLOCKCHAIN_NETWORK.ETH_GOERLI]: {
+ API_BASE_URL: API_BASE_URL[ENV.DEV],
+ EPNS_COMMUNICATOR_CONTRACT: '0xc064F30bac07e84500c97A04D21a9d1bfFC72Ec0'
+ },
+ [BLOCKCHAIN_NETWORK.POLYGON_MUMBAI]: {
+ API_BASE_URL: API_BASE_URL[ENV.DEV],
+ EPNS_COMMUNICATOR_CONTRACT: '0xAf55BE8e6b0d6107891bA76eADeEa032ef8A4504'
+ }
+ }
+};
+
+export default CONFIG;
\ No newline at end of file
diff --git a/packages/restapi/src/lib/constants.ts b/packages/restapi/src/lib/constants.ts
new file mode 100644
index 000000000..e552fee87
--- /dev/null
+++ b/packages/restapi/src/lib/constants.ts
@@ -0,0 +1,19 @@
+const Constants = {
+ ENV: {
+ PROD: 'prod',
+ STAGING: 'staging',
+ DEV: 'dev'
+ },
+ PAGINATION: {
+ INITIAL_PAGE: 1,
+ LIMIT: 10,
+ LIMIT_MIN: 1,
+ LIMIT_MAX: 50
+ },
+ DEFAULT_CHAIN_ID: 5,
+ DEV_CHAIN_ID: 99999,
+ NON_ETH_CHAINS: [137, 80001],
+ ETH_CHAINS: [1, 5]
+};
+
+export default Constants;
\ No newline at end of file
diff --git a/packages/restapi/src/lib/helpers/address.ts b/packages/restapi/src/lib/helpers/address.ts
new file mode 100644
index 000000000..172593601
--- /dev/null
+++ b/packages/restapi/src/lib/helpers/address.ts
@@ -0,0 +1,90 @@
+import * as ethers from 'ethers';
+import Constants from '../constants';
+
+export interface AddressValidatorsType {
+ [key: string]: ({ address } : { address: string }) => boolean;
+}
+
+export function isValidETHAddress(address: string) {
+ return ethers.utils.isAddress(address);
+}
+
+const AddressValidators: AddressValidatorsType = {
+ // Ethereum
+ 'eip155': ({ address } : { address: string }) => {
+ return isValidETHAddress(address);
+ }
+ // Add other chains here
+};
+
+export function validateCAIP(addressInCAIP: string) {
+ const [
+ blockchain,
+ networkId,
+ address
+ ] = addressInCAIP.split(':');
+
+ if (!blockchain) return false;
+ if (!networkId) return false;
+ if (!address) return false;
+
+ const validatorFn = AddressValidators[blockchain];
+
+ return validatorFn({ address });
+}
+
+export type CAIPDetailsType = {
+ blockchain: string;
+ networkId: string;
+ address: string;
+};
+
+export function getCAIPDetails(addressInCAIP: string) : CAIPDetailsType | null {
+ if (validateCAIP(addressInCAIP)) {
+ const [
+ blockchain,
+ networkId,
+ address
+ ] = addressInCAIP.split(':');
+
+ return {
+ blockchain,
+ networkId,
+ address
+ };
+ }
+
+ return null;
+}
+
+export function getFallbackETHCAIPAddress(env: string, address: string) {
+ let chainId = 1; // by default PROD
+
+ if (env === Constants.ENV.DEV || env === Constants.ENV.STAGING) {
+ chainId = 5;
+ }
+
+ return `eip155:${chainId}:${address}`;
+}
+
+/**
+ * This helper
+ * checks if a VALID CAIP
+ * return the CAIP
+ * else
+ * check if valid ETH
+ * return a CAIP representation of that address (EIP155 + env)
+ * else
+ * throw error!
+ */
+export function getCAIPAddress(env: string, address: string, msg?: string) {
+ if (validateCAIP(address)) {
+ return address;
+ } else {
+ if (isValidETHAddress(address)) {
+ return getFallbackETHCAIPAddress(env, address);
+ } else {
+ throw Error(`Invalid Address! ${msg} ADDRESS: ${address}`);
+ }
+ }
+}
\ No newline at end of file
diff --git a/packages/restapi/src/lib/helpers/api.ts b/packages/restapi/src/lib/helpers/api.ts
new file mode 100644
index 000000000..54cfc1db6
--- /dev/null
+++ b/packages/restapi/src/lib/helpers/api.ts
@@ -0,0 +1,19 @@
+import Constants from '../constants';
+
+export function getQueryParams(obj: any) {
+ return Object.keys(obj)
+ .map(key => {
+ return `${key}=${encodeURIComponent(obj[key])}`;
+ })
+ .join('&');
+}
+
+export function getLimit(passedLimit?: number) {
+ if (!passedLimit) return Constants.PAGINATION.LIMIT;
+
+ // if (passedLimit > Constants.PAGINATION.LIMIT_MAX) {
+ // return Constants.PAGINATION.LIMIT_MAX;
+ // }
+
+ return passedLimit;
+}
\ No newline at end of file
diff --git a/packages/restapi/src/lib/helpers/config.ts b/packages/restapi/src/lib/helpers/config.ts
new file mode 100644
index 000000000..1607f5552
--- /dev/null
+++ b/packages/restapi/src/lib/helpers/config.ts
@@ -0,0 +1,40 @@
+import CONFIG, { API_BASE_URL, ConfigType } from '../config';
+
+/**
+ * This config helper returns the API url as well as the
+ * EPNS communicator contract method address
+ */
+export const getConfig = (
+ env: string,
+ {
+ blockchain,
+ networkId
+ } : {
+ blockchain: string,
+ networkId: string
+ }
+) : ConfigType => {
+
+ const blockchainSelector = `${blockchain}:${networkId}`;
+ const configuration = CONFIG[env][blockchainSelector];
+
+ if (!configuration) {
+ throw Error(`
+ [EPNS-SDK] - cannot determine config for
+ env: ${env},
+ blockchain: ${blockchain},
+ networkId: ${networkId}
+ `)
+ }
+
+ return configuration;
+};
+
+
+/**
+ * This config helper returns only the API urls
+ */
+export function getAPIBaseUrls(env: string) {
+ if (!env) throw Error('ENV not provided!');
+ return API_BASE_URL[env];
+}
\ No newline at end of file
diff --git a/packages/restapi/src/lib/helpers/index.ts b/packages/restapi/src/lib/helpers/index.ts
new file mode 100644
index 000000000..dd9a0019b
--- /dev/null
+++ b/packages/restapi/src/lib/helpers/index.ts
@@ -0,0 +1,8 @@
+export * from './config';
+export * from './address';
+export * from './api';
+
+
+
+
+
diff --git a/packages/restapi/src/lib/index.ts b/packages/restapi/src/lib/index.ts
new file mode 100644
index 000000000..6804bc968
--- /dev/null
+++ b/packages/restapi/src/lib/index.ts
@@ -0,0 +1,15 @@
+import * as channels from './channels';
+import * as user from './user';
+import * as utils from './utils';
+import * as payloads from './payloads';
+import * as chat from './chat';
+
+export * from './types';
+
+export {
+ channels,
+ user,
+ utils,
+ payloads,
+ chat
+}
\ No newline at end of file
diff --git a/packages/restapi/src/lib/payloads/constants.ts b/packages/restapi/src/lib/payloads/constants.ts
new file mode 100644
index 000000000..b0d8ce6a9
--- /dev/null
+++ b/packages/restapi/src/lib/payloads/constants.ts
@@ -0,0 +1,31 @@
+export interface ChainIdToSourceType {
+ [key: number]: string
+}
+
+export const CHAIN_ID_TO_SOURCE: ChainIdToSourceType = {
+ 1: "ETH_MAINNET",
+ 5: "ETH_TEST_GOERLI",
+ 137: "POLYGON_MAINNET",
+ 80001: "POLYGON_TEST_MUMBAI",
+};
+
+export const SOURCE_TYPES = {
+ ETH_MAINNET: 'ETH_MAINNET',
+ ETH_TEST_GOERLI: 'ETH_TEST_GOERLI',
+ POLYGON_MAINNET: 'POLYGON_MAINNET',
+ POLYGON_TEST_MUMBAI: 'POLYGON_TEST_MUMBAI',
+ THE_GRAPH: 'THE_GRAPH'
+};
+
+export const IDENTITY_TYPE = {
+ MINIMAL: 0,
+ IPFS: 1,
+ DIRECT_PAYLOAD: 2,
+ SUBGRAPH: 3
+};
+
+export const NOTIFICATION_TYPE = {
+ BROADCAST: 1,
+ TARGETTED: 3,
+ SUBSET: 4
+};
\ No newline at end of file
diff --git a/packages/restapi/src/lib/payloads/helpers.ts b/packages/restapi/src/lib/payloads/helpers.ts
new file mode 100644
index 000000000..f956efca2
--- /dev/null
+++ b/packages/restapi/src/lib/payloads/helpers.ts
@@ -0,0 +1,263 @@
+import { v4 as uuidv4 } from 'uuid';
+import { getCAIPAddress } from '../helpers';
+
+import { ISendNotificationInputOptions, INotificationPayload } from '../types';
+import {
+ IDENTITY_TYPE,
+ NOTIFICATION_TYPE,
+ CHAIN_ID_TO_SOURCE,
+ SOURCE_TYPES
+} from './constants';
+
+export function getUUID() {
+ return uuidv4();
+}
+
+
+/**
+ * This function will map the Input options passed to the SDK to the "payload" structure
+ * needed by the API input
+ *
+ * We need notificationPayload only for identityType
+ * - DIRECT_PAYLOAD
+ * - MINIMAL
+ */
+export function getPayloadForAPIInput(
+ inputOptions: ISendNotificationInputOptions,
+ recipients: any
+) : INotificationPayload | null {
+
+ if (inputOptions?.notification && inputOptions?.payload) {
+ return {
+ notification: {
+ title: inputOptions?.notification?.title,
+ body: inputOptions?.notification?.body
+ },
+ data: {
+ acta: inputOptions?.payload?.cta || '',
+ aimg: inputOptions?.payload?.img || '',
+ amsg: inputOptions?.payload?.body || '',
+ asub: inputOptions?.payload?.title || '',
+ type: inputOptions?.type?.toString() || '',
+ ...(inputOptions?.expiry && { etime: inputOptions?.expiry }),
+ ...(inputOptions?.hidden && { hidden: inputOptions?.hidden }),
+ ...(inputOptions?.payload?.sectype && { sectype: inputOptions?.payload?.sectype }),
+ ...(inputOptions?.payload?.metadata && { metadata: inputOptions?.payload?.metadata }),
+ },
+ recipients: recipients
+ };
+ }
+
+ return null;
+}
+
+/**
+ * This function returns the recipient format accepted by the API for different notification types
+ */
+export async function getRecipients({
+ env,
+ notificationType,
+ channel,
+ recipients,
+ secretType
+} : {
+ env: string,
+ notificationType: number,
+ channel: string,
+ recipients?: string | string[],
+ secretType?: string,
+}) {
+ let addressInCAIP = '';
+
+ if (secretType) {
+ let secret = '';
+ // return '';
+ /**
+ * Currently SECRET FLOW is yet to be finalized on the backend, so will revisit this later.
+ * But in secret flow we basically generate secret for the address
+ * and send it in { 0xtarget: secret_generated_for_0xtarget } format for all
+ */
+ if (notificationType === NOTIFICATION_TYPE.TARGETTED) {
+ if (typeof recipients === 'string') {
+ addressInCAIP = getCAIPAddress(env, recipients, 'Recipient');
+ secret = ''; // do secret stuff // TODO
+
+ return {
+ [addressInCAIP]: secret
+ };
+ }
+ } else if (notificationType === NOTIFICATION_TYPE.SUBSET) {
+ if (Array.isArray(recipients)) {
+ const recipientObject = recipients.reduce((_recipients, _rAddress) => {
+ addressInCAIP = getCAIPAddress(env, _rAddress, 'Recipient');
+ secret = ''; // do secret stuff // TODO
+
+ return {
+ ..._recipients,
+ [addressInCAIP]: secret
+ };
+ }, {});
+
+ return recipientObject;
+ }
+ }
+
+
+ } else {
+ /**
+ * NON-SECRET FLOW
+ */
+
+ if (notificationType === NOTIFICATION_TYPE.BROADCAST) {
+ if (!recipients) {
+ // return getCAIPFormat(chainId, channel || '');
+ return getCAIPAddress(env, channel, 'Recipient');
+ }
+ } else if (notificationType === NOTIFICATION_TYPE.TARGETTED) {
+ if (typeof recipients === 'string') {
+ return getCAIPAddress(env, recipients, 'Recipient');
+ }
+ } else if (notificationType === NOTIFICATION_TYPE.SUBSET) {
+ if (Array.isArray(recipients)) {
+ const recipientObject = recipients.reduce((_recipients, _rAddress) => {
+ addressInCAIP = getCAIPAddress(env, _rAddress, 'Recipient');
+ return {
+ ..._recipients,
+ [addressInCAIP]: null
+ };
+ }, {});
+ return recipientObject;
+ }
+ }
+ }
+ return recipients;
+}
+
+export function getRecipientFieldForAPIPayload({
+ env,
+ notificationType,
+ recipients,
+ channel,
+} : {
+ env: string,
+ notificationType: number,
+ recipients: string | string[],
+ channel: string
+}) {
+
+ if (notificationType === NOTIFICATION_TYPE.TARGETTED && typeof recipients === 'string') {
+ return getCAIPAddress(env, recipients, 'Recipient')
+ }
+
+ return getCAIPAddress(env, channel, 'Recipient')
+}
+
+export async function getVerificationProof({
+ signer,
+ chainId,
+ notificationType,
+ identityType,
+ verifyingContract,
+ payload,
+ ipfsHash,
+ graph = {},
+ uuid
+}: {
+ signer: any,
+ chainId: number,
+ notificationType: number,
+ identityType: number,
+ verifyingContract: string,
+ payload: any,
+ ipfsHash?: string,
+ graph?: any,
+ uuid: string
+}) {
+
+ // console.log('payload ---> \n\n', payload);
+
+ const type = {
+ Data: [{ name: 'data', type: 'string' }]
+ };
+ const domain = {
+ name: 'EPNS COMM V1',
+ chainId: chainId,
+ verifyingContract: verifyingContract,
+ };
+
+ let message = null;
+ let signature = null;
+
+ if (identityType === IDENTITY_TYPE.MINIMAL) {
+ message = {
+ data: `${identityType}+${notificationType}+${payload.notification.title}+${payload.notification.body}`,
+ };
+ signature = await signer._signTypedData(domain, type, message);
+ return `eip712v2:${signature}::uid::${uuid}`;
+ } else if (identityType === IDENTITY_TYPE.IPFS) {
+ message = {
+ data: `1+${ipfsHash}`,
+ };
+ signature = await signer._signTypedData(domain, type, message);
+ return `eip712v2:${signature}::uid::${uuid}`;
+ } else if (identityType === IDENTITY_TYPE.DIRECT_PAYLOAD) {
+ const payloadJSON = JSON.stringify(payload);
+ message = {
+ data: `2+${payloadJSON}`,
+ };
+ signature = await signer._signTypedData(domain, type, message);
+ return `eip712v2:${signature}::uid::${uuid}`;
+ } else if (identityType === IDENTITY_TYPE.SUBGRAPH) {
+ message = {
+ data: `3+graph:${graph?.id}+${graph?.counter}`,
+ };
+ signature = await signer._signTypedData(domain, type, message);
+ return `eip712v2:${signature}::uid::${uuid}`;
+ }
+
+ return signature;
+}
+
+export function getPayloadIdentity({
+ identityType,
+ payload,
+ notificationType,
+ ipfsHash,
+ graph = {},
+} : {
+ identityType: number,
+ payload: any,
+ notificationType?: number,
+ ipfsHash?: string,
+ graph?: any,
+}) {
+ if (identityType === IDENTITY_TYPE.MINIMAL) {
+ return `0+${notificationType}+${payload.notification.title}+${payload.notification.body}`;
+ } else if (identityType === IDENTITY_TYPE.IPFS) {
+ return `1+${ipfsHash}`;
+ } else if (identityType === IDENTITY_TYPE.DIRECT_PAYLOAD) {
+ const payloadJSON = JSON.stringify(payload);
+ return `2+${payloadJSON}`;
+ } else if (identityType === IDENTITY_TYPE.SUBGRAPH) {
+ return `3+graph:${graph?.id}+${graph?.counter}`;
+ }
+
+ return null;
+}
+
+export function getSource(chainId: number, identityType: number) {
+ if (identityType === IDENTITY_TYPE.SUBGRAPH) {
+ return SOURCE_TYPES.THE_GRAPH;
+ }
+ return CHAIN_ID_TO_SOURCE[chainId];
+}
+
+export function getCAIPFormat(chainId: number, address: string) {
+ // EVM based chains
+ if ([1, 5, 42, 137, 80001].includes(chainId)) {
+ return `eip155:${chainId}:${address}`;
+ }
+
+ return address;
+ // TODO: add support for other non-EVM based chains
+}
\ No newline at end of file
diff --git a/packages/restapi/src/lib/payloads/index.ts b/packages/restapi/src/lib/payloads/index.ts
new file mode 100644
index 000000000..410fc0c0e
--- /dev/null
+++ b/packages/restapi/src/lib/payloads/index.ts
@@ -0,0 +1 @@
+export * from './sendNotifications';
diff --git a/packages/restapi/src/lib/payloads/sendNotifications.ts b/packages/restapi/src/lib/payloads/sendNotifications.ts
new file mode 100644
index 000000000..871d26645
--- /dev/null
+++ b/packages/restapi/src/lib/payloads/sendNotifications.ts
@@ -0,0 +1,134 @@
+import axios from 'axios';
+import { ISendNotificationInputOptions } from '../types';
+import {
+ getPayloadForAPIInput,
+ getPayloadIdentity,
+ getRecipients,
+ getRecipientFieldForAPIPayload,
+ getVerificationProof,
+ getSource,
+ getUUID
+} from './helpers';
+import { getCAIPAddress, getCAIPDetails, getConfig } from '../helpers';
+import { IDENTITY_TYPE } from './constants';
+
+
+/**
+ * Validate options for some scenarios
+ */
+function validateOptions(options: any) {
+ if (!options?.channel) {
+ throw '[EPNS-SDK] - Error - sendNotification() - "channel" is mandatory!';
+ }
+
+ /**
+ * Apart from IPFS, GRAPH use cases "notification", "payload" is mandatory
+ */
+ if (options?.identityType === IDENTITY_TYPE.DIRECT_PAYLOAD || options?.identityType === IDENTITY_TYPE.MINIMAL) {
+ if (!options.notification) {
+ throw '[EPNS-SDK] - Error - sendNotification() - "notification" mandatory for Identity Type: Direct Payload, Minimal!';
+ }
+ if (!options.payload) {
+ throw '[EPNS-SDK] - Error - sendNotification() - "payload" mandatory for Identity Type: Direct Payload, Minimal!';
+ }
+ }
+}
+
+export async function sendNotification(options: ISendNotificationInputOptions) {
+ try {
+ const {
+ signer,
+ type,
+ identityType,
+ payload,
+ recipients,
+ channel,
+ graph,
+ ipfsHash,
+ env = 'prod'
+ } = options || {};
+
+ validateOptions(options);
+
+
+ const _channelAddress = getCAIPAddress(env, channel, 'Channel');
+ const channelCAIPDetails = getCAIPDetails(_channelAddress);
+
+ if (!channelCAIPDetails) throw Error('Invalid Channel CAIP!');
+
+ const uuid = getUUID();
+ const chainId = parseInt(channelCAIPDetails.networkId, 10);
+
+ const { API_BASE_URL, EPNS_COMMUNICATOR_CONTRACT } = getConfig(env, channelCAIPDetails);
+
+ const _recipients = await getRecipients({
+ env,
+ notificationType: type,
+ channel: _channelAddress,
+ recipients,
+ secretType: payload?.sectype
+ });
+
+ const notificationPayload = getPayloadForAPIInput(options, _recipients);
+
+ const verificationProof = await getVerificationProof({
+ signer,
+ chainId,
+ identityType,
+ notificationType: type,
+ verifyingContract: EPNS_COMMUNICATOR_CONTRACT,
+ payload: notificationPayload,
+ graph,
+ ipfsHash,
+ uuid
+ });
+
+ const identity = getPayloadIdentity({
+ identityType,
+ payload: notificationPayload,
+ notificationType: type,
+ graph,
+ ipfsHash
+ });
+
+ const source = getSource(chainId, identityType);
+
+ const apiPayload = {
+ verificationProof,
+ identity,
+ sender: _channelAddress,
+ source,
+ /** note this recipient key has a different expectation from the BE API, see the funciton for more */
+ recipient: getRecipientFieldForAPIPayload({
+ env,
+ notificationType: type,
+ recipients: recipients || '',
+ channel: _channelAddress
+ })
+ };
+
+ const requestURL = `${API_BASE_URL}/v1/payloads/`;
+
+ console.log(
+ '\n\nAPI call :-->> ',
+ requestURL,
+ '\n\n',
+ apiPayload,
+ '\n\n\n\n'
+ );
+
+ return await axios.post(
+ requestURL,
+ apiPayload,
+ {
+ headers: {
+ 'Content-Type': 'application/json',
+ },
+ }
+ );
+
+ } catch (err) {
+ console.error('[EPNS-SDK] - Error - sendNotification() - ', JSON.stringify(err));
+ throw err;
+ }
+}
\ No newline at end of file
diff --git a/packages/restapi/src/lib/types/index.ts b/packages/restapi/src/lib/types/index.ts
new file mode 100644
index 000000000..1121e1430
--- /dev/null
+++ b/packages/restapi/src/lib/types/index.ts
@@ -0,0 +1,112 @@
+// the type for the the response of the input data to be parsed
+export type ApiNotificationType = {
+ "payload_id": number,
+ "channel": string,
+ "epoch": string,
+ "payload": {
+ "apns": {
+ "payload": {
+ "aps": {
+ "category": string,
+ "mutable-content": number,
+ "content-available": number
+ }
+ },
+ "fcm_options": {
+ "image": string
+ }
+ },
+ "data": {
+ "app": string,
+ "sid": string,
+ "url": string,
+ "acta": string,
+ "aimg": string,
+ "amsg": string,
+ "asub": string,
+ "icon": string,
+ "type": string,
+ "epoch": string,
+ "appbot": string,
+ "hidden": string,
+ "secret": string
+ },
+ "android": {
+ "notification": {
+ "icon": string,
+ "color": string,
+ "image": string
+ "default_vibrate_timings": boolean
+ }
+ },
+ "notification": {
+ "body": string,
+ "title": string
+ }
+ },
+ "source": string
+}
+
+// The output response from parsing a notification object
+export type ParsedResponseType = {
+ cta : string,
+ title: string,
+ message: string,
+ icon: string,
+ url: string,
+ sid: string,
+ app: string,
+ image: string,
+ blockchain: string,
+ secret: string,
+ notification: {
+ title: string,
+ body: string,
+ }
+}
+
+export interface ISendNotificationInputOptions {
+ signer: any;
+ type: number;
+ identityType: number;
+ notification?: {
+ title: string;
+ body: string;
+ };
+ payload?: {
+ sectype?: string;
+ title: string;
+ body: string;
+ cta: string;
+ img: string;
+ metadata?: any;
+ },
+ recipients?: string | string[]; // CAIP or plain ETH
+ channel: string; // CAIP or plain ETH
+ expiry?: number;
+ hidden?: boolean;
+ graph?: {
+ id: string,
+ counter: number
+ };
+ ipfsHash?: string;
+ env?: string;
+ }
+
+ export interface INotificationPayload {
+ notification: {
+ title: string;
+ body: string;
+ };
+ data: {
+ acta: string;
+ aimg: string;
+ amsg: string;
+ asub: string;
+ type: string;
+ etime?: number;
+ hidden?: boolean;
+ sectype?: string;
+ };
+ recipients: any;
+ };
\ No newline at end of file
diff --git a/packages/restapi/src/lib/user/getFeeds.ts b/packages/restapi/src/lib/user/getFeeds.ts
new file mode 100644
index 000000000..fb3d2fcda
--- /dev/null
+++ b/packages/restapi/src/lib/user/getFeeds.ts
@@ -0,0 +1,59 @@
+import axios from 'axios';
+import {
+ getCAIPAddress,
+ getAPIBaseUrls,
+ getQueryParams,
+ getLimit,
+} from '../helpers';
+import Constants from '../constants';
+import { parseApiResponse } from '../utils';
+
+/**
+ * GET '/v1/users/:userAddressInCAIP/feeds
+ * optional params: page=(1)&limit=(20{min=1|max=50})&spam=(false)'
+ */
+
+export type FeedsOptionsType = {
+ user: string;
+ env?: string;
+ page?: number;
+ limit?: number;
+ spam?: boolean;
+ raw?: boolean;
+}
+
+export const getFeeds = async (
+ options : FeedsOptionsType
+) => {
+ const {
+ user,
+ env = Constants.ENV.PROD,
+ page = Constants.PAGINATION.INITIAL_PAGE,
+ limit = Constants.PAGINATION.LIMIT,
+ spam = false,
+ raw = false,
+ } = options || {};
+
+ const _user = getCAIPAddress(env, user, 'User');
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/users/${_user}/feeds`;
+
+ const queryObj = {
+ page,
+ limit: getLimit(limit),
+ spam
+ };
+
+ const requestUrl = `${apiEndpoint}?${getQueryParams(queryObj)}`;
+
+ return axios.get(requestUrl)
+ .then((response) => {
+ if (raw) {
+ return response?.data?.feeds || [];
+ }
+ return parseApiResponse(response?.data?.feeds) || [];
+ })
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/user/getSubscriptions.ts b/packages/restapi/src/lib/user/getSubscriptions.ts
new file mode 100644
index 000000000..b2879d6aa
--- /dev/null
+++ b/packages/restapi/src/lib/user/getSubscriptions.ts
@@ -0,0 +1,35 @@
+import axios from 'axios';
+import {
+ getCAIPAddress,
+ getAPIBaseUrls
+} from '../helpers';
+import Constants from '../constants';
+
+/**
+ * GET /users/:userAddressInCAIP/subscriptions
+ */
+
+export type UserSubscriptionsOptionsType = {
+ user: string;
+ env?: string;
+}
+
+export const getSubscriptions = async (
+ options : UserSubscriptionsOptionsType
+) => {
+ const {
+ user,
+ env = Constants.ENV.PROD,
+ } = options || {};
+
+ const _user = getCAIPAddress(env, user, 'User');
+ const API_BASE_URL = getAPIBaseUrls(env);
+ const apiEndpoint = `${API_BASE_URL}/v1/users/${_user}/subscriptions`;
+ const requestUrl = `${apiEndpoint}`;
+
+ return axios.get(requestUrl)
+ .then((response) => response.data?.subscriptions || [])
+ .catch((err) => {
+ console.error(`[EPNS-SDK] - API ${requestUrl}: `, err);
+ });
+}
diff --git a/packages/restapi/src/lib/user/index.ts b/packages/restapi/src/lib/user/index.ts
new file mode 100644
index 000000000..9d03d1535
--- /dev/null
+++ b/packages/restapi/src/lib/user/index.ts
@@ -0,0 +1,2 @@
+export * from './getFeeds';
+export * from './getSubscriptions';
\ No newline at end of file
diff --git a/packages/restapi/src/lib/utils/index.ts b/packages/restapi/src/lib/utils/index.ts
new file mode 100644
index 000000000..476b78a58
--- /dev/null
+++ b/packages/restapi/src/lib/utils/index.ts
@@ -0,0 +1,4 @@
+/**
+ * Only externally used Helpers
+ */
+export * from './parseAPI';
\ No newline at end of file
diff --git a/packages/restapi/src/lib/utils/parseAPI.ts b/packages/restapi/src/lib/utils/parseAPI.ts
new file mode 100644
index 000000000..505952738
--- /dev/null
+++ b/packages/restapi/src/lib/utils/parseAPI.ts
@@ -0,0 +1,42 @@
+import { ApiNotificationType, ParsedResponseType } from '../types';
+
+/**
+ * @description parse the response gotten from the API
+ * @param {ApiNotificationType[]} response
+ * @returns {ParsedResponseType[]}
+ */
+export function parseApiResponse(response: ApiNotificationType[]): ParsedResponseType[] {
+ return response.map((apiNotification: ApiNotificationType) => {
+ const {
+ payload: {
+ data: {
+ acta: cta = "",
+ amsg: bigMessage = "",
+ asub = "",
+ icon = "",
+ url = "",
+ sid = "",
+ app = "",
+ aimg = "",
+ secret = ""
+ },
+ notification,
+ },
+ source,
+ } = apiNotification;
+
+ return {
+ cta,
+ title: asub || notification.title || '',
+ message: bigMessage || notification.body || '',
+ icon,
+ url,
+ sid,
+ app,
+ image: aimg,
+ blockchain: source,
+ notification,
+ secret
+ };
+ });
+}
\ No newline at end of file
diff --git a/packages/restapi/tsconfig.json b/packages/restapi/tsconfig.json
new file mode 100644
index 000000000..f5b85657a
--- /dev/null
+++ b/packages/restapi/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "extends": "../../tsconfig.base.json",
+ "compilerOptions": {
+ "module": "commonjs",
+ "forceConsistentCasingInFileNames": true,
+ "strict": true,
+ "noImplicitOverride": true,
+ "noPropertyAccessFromIndexSignature": true,
+ "noImplicitReturns": true,
+ "noFallthroughCasesInSwitch": true
+ },
+ "files": [],
+ "include": [],
+ "references": [
+ {
+ "path": "./tsconfig.lib.json"
+ },
+ {
+ "path": "./tsconfig.spec.json"
+ }
+ ]
+}
diff --git a/packages/restapi/tsconfig.lib.json b/packages/restapi/tsconfig.lib.json
new file mode 100644
index 000000000..e85ef50f6
--- /dev/null
+++ b/packages/restapi/tsconfig.lib.json
@@ -0,0 +1,10 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../dist/out-tsc",
+ "declaration": true,
+ "types": []
+ },
+ "include": ["**/*.ts"],
+ "exclude": ["jest.config.ts", "**/*.spec.ts", "**/*.test.ts"]
+}
diff --git a/packages/restapi/tsconfig.spec.json b/packages/restapi/tsconfig.spec.json
new file mode 100644
index 000000000..546f12877
--- /dev/null
+++ b/packages/restapi/tsconfig.spec.json
@@ -0,0 +1,9 @@
+{
+ "extends": "./tsconfig.json",
+ "compilerOptions": {
+ "outDir": "../../dist/out-tsc",
+ "module": "commonjs",
+ "types": ["jest", "node"]
+ },
+ "include": ["jest.config.ts", "**/*.test.ts", "**/*.spec.ts", "**/*.d.ts"]
+}
diff --git a/tools/scripts/publish.mjs b/tools/scripts/publish.mjs
new file mode 100644
index 000000000..6381abee0
--- /dev/null
+++ b/tools/scripts/publish.mjs
@@ -0,0 +1,34 @@
+import { readCachedProjectGraph } from '@nrwl/devkit';
+import { execSync } from 'child_process';
+import chalk from 'chalk';
+
+function invariant(condition, message) {
+ if (!condition) {
+ console.error(chalk.bold.red(message));
+ process.exit(1);
+ }
+}
+
+// get anything passed from the cli
+const [, , name] = process.argv;
+
+const graph = readCachedProjectGraph();
+const project = graph.nodes[name];
+
+invariant(
+ project,
+ `Could not find project "${name}" in the workspace. Is the project.json configured correctly?`
+);
+
+// capture NX's specifc dist path
+const outputPath = project.data?.targets?.build?.options?.outputPath;
+invariant(
+ outputPath,
+ `Could not find "build.options.outputPath" of project "${name}". Is project.json configured correctly?`
+);
+
+// change the working directory to the dist/package_name
+process.chdir(outputPath);
+
+// Execute "npm publish" to publish the package to NPM registry
+execSync(`npm publish --access public`);
diff --git a/tsconfig.base.json b/tsconfig.base.json
index 11253ac5c..6033c1c0a 100644
--- a/tsconfig.base.json
+++ b/tsconfig.base.json
@@ -14,7 +14,9 @@
"skipLibCheck": true,
"skipDefaultLibCheck": true,
"baseUrl": ".",
- "paths": {}
+ "paths": {
+ "@pushprotocol/restapi": ["packages/restapi/src/index.ts"]
+ }
},
"exclude": ["node_modules", "tmp"]
}
diff --git a/workspace.json b/workspace.json
index 2aacd396f..d5d47d1e9 100644
--- a/workspace.json
+++ b/workspace.json
@@ -1,5 +1,7 @@
{
"$schema": "./node_modules/nx/schemas/workspace-schema.json",
"version": 2,
- "projects": {}
+ "projects": {
+ "restapi": "packages/restapi"
+ }
}
diff --git a/yarn.lock b/yarn.lock
index 04b491c5e..18e8c8728 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -290,6 +290,434 @@
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
+"@commitlint/config-validator@^17.1.0":
+ version "17.1.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.1.0.tgz#51d09ca53d7a0d19736abf34eb18a66efce0f97a"
+ integrity sha512-Q1rRRSU09ngrTgeTXHq6ePJs2KrI+axPTgkNYDWSJIuS1Op4w3J30vUfSXjwn5YEJHklK3fSqWNHmBhmTR7Vdg==
+ dependencies:
+ "@commitlint/types" "^17.0.0"
+ ajv "^8.11.0"
+
+"@commitlint/execute-rule@^17.0.0":
+ version "17.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.0.0.tgz#186e9261fd36733922ae617497888c4bdb6e5c92"
+ integrity sha512-nVjL/w/zuqjCqSJm8UfpNaw66V9WzuJtQvEnCrK4jDw6qKTmZB+1JQ8m6BQVZbNBcwfYdDNKnhIhqI0Rk7lgpQ==
+
+"@commitlint/load@>6.1.1":
+ version "17.1.2"
+ resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.1.2.tgz#19c88be570d8666bbd32f9b3d81925a08328bc13"
+ integrity sha512-sk2p/jFYAWLChIfOIp/MGSIn/WzZ0vkc3afw+l4X8hGEYkvDe4gQUUAVxjl/6xMRn0HgnSLMZ04xXh5pkTsmgg==
+ dependencies:
+ "@commitlint/config-validator" "^17.1.0"
+ "@commitlint/execute-rule" "^17.0.0"
+ "@commitlint/resolve-extends" "^17.1.0"
+ "@commitlint/types" "^17.0.0"
+ "@types/node" "^14.0.0"
+ chalk "^4.1.0"
+ cosmiconfig "^7.0.0"
+ cosmiconfig-typescript-loader "^4.0.0"
+ lodash "^4.17.19"
+ resolve-from "^5.0.0"
+ ts-node "^10.8.1"
+ typescript "^4.6.4"
+
+"@commitlint/resolve-extends@^17.1.0":
+ version "17.1.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.1.0.tgz#7cf04fa13096c8a6544a4af13321fdf8d0d50694"
+ integrity sha512-jqKm00LJ59T0O8O4bH4oMa4XyJVEOK4GzH8Qye9XKji+Q1FxhZznxMV/bDLyYkzbTodBt9sL0WLql8wMtRTbqQ==
+ dependencies:
+ "@commitlint/config-validator" "^17.1.0"
+ "@commitlint/types" "^17.0.0"
+ import-fresh "^3.0.0"
+ lodash "^4.17.19"
+ resolve-from "^5.0.0"
+ resolve-global "^1.0.0"
+
+"@commitlint/types@^17.0.0":
+ version "17.0.0"
+ resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.0.0.tgz#3b4604c1a0f06c340ce976e6c6903d4f56e3e690"
+ integrity sha512-hBAw6U+SkAT5h47zDMeOu3HSiD0SODw4Aq7rRNh1ceUmL7GyLKYhPbUvlRWqZ65XjBLPHZhFyQlRaPNz8qvUyQ==
+ dependencies:
+ chalk "^4.1.0"
+
+"@cspotcode/source-map-support@^0.8.0":
+ version "0.8.1"
+ resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
+ integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
+ dependencies:
+ "@jridgewell/trace-mapping" "0.3.9"
+
+"@eslint/eslintrc@^1.2.1":
+ version "1.3.2"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.2.tgz#58b69582f3b7271d8fa67fe5251767a5b38ea356"
+ integrity sha512-AXYd23w1S/bv3fTs3Lz0vjiYemS08jWkI3hYyS9I1ry+0f+Yjs1wm+sU0BS8qDOPrBIkp4qHYC16I8uVtpLajQ==
+ dependencies:
+ ajv "^6.12.4"
+ debug "^4.3.2"
+ espree "^9.4.0"
+ globals "^13.15.0"
+ ignore "^5.2.0"
+ import-fresh "^3.2.1"
+ js-yaml "^4.1.0"
+ minimatch "^3.1.2"
+ strip-json-comments "^3.1.1"
+
+"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449"
+ integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==
+ dependencies:
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef"
+ integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/networks" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/web" "^5.7.0"
+
+"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2"
+ integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+
+"@ethersproject/address@5.7.0", "@ethersproject/address@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37"
+ integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+
+"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c"
+ integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+
+"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b"
+ integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+
+"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2"
+ integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ bn.js "^5.2.1"
+
+"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d"
+ integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e"
+ integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+
+"@ethersproject/contracts@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e"
+ integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==
+ dependencies:
+ "@ethersproject/abi" "^5.7.0"
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+
+"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7"
+ integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf"
+ integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/basex" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/pbkdf2" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/wordlists" "^5.7.0"
+
+"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360"
+ integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==
+ dependencies:
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hdnode" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/pbkdf2" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ aes-js "3.0.0"
+ scrypt-js "3.0.1"
+
+"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a"
+ integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ js-sha3 "0.8.0"
+
+"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892"
+ integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==
+
+"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0":
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6"
+ integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102"
+ integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+
+"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30"
+ integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==
+ dependencies:
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/providers@5.7.1":
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.1.tgz#b0799b616d5579cd1067a8ebf1fc1ec74c1e122c"
+ integrity sha512-vZveG/DLyo+wk4Ga1yx6jSEHrLPgmTt+dFv0dv8URpVCRf0jVhalps1jq/emN/oXnMRsC7cQgAF32DcXLL7BPQ==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/basex" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/networks" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/web" "^5.7.0"
+ bech32 "1.1.4"
+ ws "7.4.6"
+
+"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c"
+ integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304"
+ integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb"
+ integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ hash.js "1.1.7"
+
+"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3"
+ integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ bn.js "^5.2.1"
+ elliptic "6.5.4"
+ hash.js "1.1.7"
+
+"@ethersproject/solidity@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8"
+ integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/sha2" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2"
+ integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b"
+ integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==
+ dependencies:
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/rlp" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+
+"@ethersproject/units@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1"
+ integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==
+ dependencies:
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/constants" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+
+"@ethersproject/wallet@5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d"
+ integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==
+ dependencies:
+ "@ethersproject/abstract-provider" "^5.7.0"
+ "@ethersproject/abstract-signer" "^5.7.0"
+ "@ethersproject/address" "^5.7.0"
+ "@ethersproject/bignumber" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/hdnode" "^5.7.0"
+ "@ethersproject/json-wallets" "^5.7.0"
+ "@ethersproject/keccak256" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/random" "^5.7.0"
+ "@ethersproject/signing-key" "^5.7.0"
+ "@ethersproject/transactions" "^5.7.0"
+ "@ethersproject/wordlists" "^5.7.0"
+
+"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0":
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae"
+ integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==
+ dependencies:
+ "@ethersproject/base64" "^5.7.0"
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0":
+ version "5.7.0"
+ resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5"
+ integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==
+ dependencies:
+ "@ethersproject/bytes" "^5.7.0"
+ "@ethersproject/hash" "^5.7.0"
+ "@ethersproject/logger" "^5.7.0"
+ "@ethersproject/properties" "^5.7.0"
+ "@ethersproject/strings" "^5.7.0"
+
+"@humanwhocodes/config-array@^0.9.2":
+ version "0.9.5"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.5.tgz#2cbaf9a89460da24b5ca6531b8bbfc23e1df50c7"
+ integrity sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==
+ dependencies:
+ "@humanwhocodes/object-schema" "^1.2.1"
+ debug "^4.1.1"
+ minimatch "^3.0.4"
+
+"@humanwhocodes/object-schema@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45"
+ integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==
+
"@istanbuljs/load-nyc-config@^1.0.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced"
@@ -318,6 +746,40 @@
jest-util "^27.5.1"
slash "^3.0.0"
+"@jest/core@^27.5.1":
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/@jest/core/-/core-27.5.1.tgz#267ac5f704e09dc52de2922cbf3af9edcd64b626"
+ integrity sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==
+ dependencies:
+ "@jest/console" "^27.5.1"
+ "@jest/reporters" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/transform" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ emittery "^0.8.1"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ jest-changed-files "^27.5.1"
+ jest-config "^27.5.1"
+ jest-haste-map "^27.5.1"
+ jest-message-util "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-resolve "^27.5.1"
+ jest-resolve-dependencies "^27.5.1"
+ jest-runner "^27.5.1"
+ jest-runtime "^27.5.1"
+ jest-snapshot "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ jest-watcher "^27.5.1"
+ micromatch "^4.0.4"
+ rimraf "^3.0.0"
+ slash "^3.0.0"
+ strip-ansi "^6.0.0"
+
"@jest/environment@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-27.5.1.tgz#d7425820511fe7158abbecc010140c3fd3be9c74"
@@ -349,7 +811,7 @@
"@jest/types" "^27.5.1"
expect "^27.5.1"
-"@jest/reporters@27.5.1":
+"@jest/reporters@27.5.1", "@jest/reporters@^27.5.1":
version "27.5.1"
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-27.5.1.tgz#ceda7be96170b03c923c37987b64015812ffec04"
integrity sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==
@@ -473,6 +935,14 @@
resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24"
integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==
+"@jridgewell/trace-mapping@0.3.9":
+ version "0.3.9"
+ resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
+ integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
+ dependencies:
+ "@jridgewell/resolve-uri" "^3.0.3"
+ "@jridgewell/sourcemap-codec" "^1.4.10"
+
"@jridgewell/trace-mapping@^0.3.9":
version "0.3.15"
resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz#aba35c48a38d3fd84b37e66c9c0423f9744f9774"
@@ -520,6 +990,17 @@
semver "7.3.4"
tslib "^2.3.0"
+"@nrwl/eslint-plugin-nx@14.1.7":
+ version "14.1.7"
+ resolved "https://registry.yarnpkg.com/@nrwl/eslint-plugin-nx/-/eslint-plugin-nx-14.1.7.tgz#96e11969c04ba5e6e22a7592b77d25c018e3f181"
+ integrity sha512-Phu7yujOGy48WMKepZMAfO51BqJwa1JBsg4fsmajIngtr/Lq9AjRAAaGpbYTv8pWP/Pgqb/I/oF2xIYOh+lfLA==
+ dependencies:
+ "@nrwl/devkit" "14.1.7"
+ "@nrwl/workspace" "14.1.7"
+ "@typescript-eslint/experimental-utils" "~5.18.0"
+ chalk "4.1.0"
+ confusing-browser-globals "^1.0.9"
+
"@nrwl/jest@14.1.7":
version "14.1.7"
resolved "https://registry.yarnpkg.com/@nrwl/jest/-/jest-14.1.7.tgz#fe3841e1312206e947c75ffb0f0f346abde3e028"
@@ -769,6 +1250,26 @@
resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
+"@tsconfig/node10@^1.0.7":
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
+ integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
+
+"@tsconfig/node12@^1.0.7":
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
+ integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
+
+"@tsconfig/node14@^1.0.0":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
+ integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
+
+"@tsconfig/node16@^1.0.2":
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e"
+ integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==
+
"@types/babel__core@^7.0.0", "@types/babel__core@^7.1.14":
version "7.1.19"
resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.19.tgz#7b497495b7d1b4812bdb9d02804d0576f43ee460"
@@ -828,6 +1329,19 @@
dependencies:
"@types/istanbul-lib-report" "*"
+"@types/jest@27.4.1":
+ version "27.4.1"
+ resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.4.1.tgz#185cbe2926eaaf9662d340cc02e548ce9e11ab6d"
+ integrity sha512-23iPJADSmicDVrWk+HT58LMJtzLAnB2AgIzplQuq/bSrGaxCrlvRFjGbXmamnnk/mAmCdLStiGqggu28ocUyiw==
+ dependencies:
+ jest-matcher-utils "^27.0.0"
+ pretty-format "^27.0.0"
+
+"@types/json-schema@^7.0.9":
+ version "7.0.11"
+ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3"
+ integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==
+
"@types/json5@^0.0.29":
version "0.0.29"
resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
@@ -838,6 +1352,21 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-18.8.2.tgz#17d42c6322d917764dd3d2d3a10d7884925de067"
integrity sha512-cRMwIgdDN43GO4xMWAfJAecYn8wV4JbsOGHNfNUIDiuYkUYAR5ec4Rj7IO2SAhFPEfpPtLtUTbbny/TCT7aDwA==
+"@types/node@16.11.7":
+ version "16.11.7"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.7.tgz#36820945061326978c42a01e56b61cd223dfdc42"
+ integrity sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==
+
+"@types/node@^14.0.0":
+ version "14.18.31"
+ resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.31.tgz#4b873dea3122e71af4f77e65ec5841397ff254d3"
+ integrity sha512-vQAnaReSQkEDa8uwAyQby8bYGKu84R/deEc6mg5T8fX6gzCn8QW6rziSgsti1fNvsrswKUKPnVTi7uoB+u62Mw==
+
+"@types/parse-json@^4.0.0":
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
+ integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==
+
"@types/prettier@^2.1.5":
version "2.7.1"
resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.1.tgz#dfd20e2dc35f027cdd6c1908e80a5ddc7499670e"
@@ -848,6 +1377,11 @@
resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c"
integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==
+"@types/uuid@^8.3.4":
+ version "8.3.4"
+ resolved "https://registry.yarnpkg.com/@types/uuid/-/uuid-8.3.4.tgz#bd86a43617df0594787d38b735f55c805becf1bc"
+ integrity sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==
+
"@types/yargs-parser@*":
version "21.0.0"
resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b"
@@ -860,6 +1394,93 @@
dependencies:
"@types/yargs-parser" "*"
+"@typescript-eslint/eslint-plugin@~5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz#950df411cec65f90d75d6320a03b2c98f6c3af7d"
+ integrity sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==
+ dependencies:
+ "@typescript-eslint/scope-manager" "5.18.0"
+ "@typescript-eslint/type-utils" "5.18.0"
+ "@typescript-eslint/utils" "5.18.0"
+ debug "^4.3.2"
+ functional-red-black-tree "^1.0.1"
+ ignore "^5.1.8"
+ regexpp "^3.2.0"
+ semver "^7.3.5"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/experimental-utils@~5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.18.0.tgz#a6b5662e6b0452cb0e75a13662ce3b33cd1be59d"
+ integrity sha512-hypiw5N0aM2aH91/uMmG7RpyUH3PN/iOhilMwkMFZIbm/Bn/G3ZnbaYdSoAN4PG/XHQjdhBYLi0ZoRZsRYT4hA==
+ dependencies:
+ "@typescript-eslint/utils" "5.18.0"
+
+"@typescript-eslint/parser@~5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.18.0.tgz#2bcd4ff21df33621df33e942ccb21cb897f004c6"
+ integrity sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==
+ dependencies:
+ "@typescript-eslint/scope-manager" "5.18.0"
+ "@typescript-eslint/types" "5.18.0"
+ "@typescript-eslint/typescript-estree" "5.18.0"
+ debug "^4.3.2"
+
+"@typescript-eslint/scope-manager@5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz#a7d7b49b973ba8cebf2a3710eefd457ef2fb5505"
+ integrity sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==
+ dependencies:
+ "@typescript-eslint/types" "5.18.0"
+ "@typescript-eslint/visitor-keys" "5.18.0"
+
+"@typescript-eslint/type-utils@5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz#62dbfc8478abf36ba94a90ddf10be3cc8e471c74"
+ integrity sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==
+ dependencies:
+ "@typescript-eslint/utils" "5.18.0"
+ debug "^4.3.2"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/types@5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.18.0.tgz#4f0425d85fdb863071680983853c59a62ce9566e"
+ integrity sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==
+
+"@typescript-eslint/typescript-estree@5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz#6498e5ee69a32e82b6e18689e2f72e4060986474"
+ integrity sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==
+ dependencies:
+ "@typescript-eslint/types" "5.18.0"
+ "@typescript-eslint/visitor-keys" "5.18.0"
+ debug "^4.3.2"
+ globby "^11.0.4"
+ is-glob "^4.0.3"
+ semver "^7.3.5"
+ tsutils "^3.21.0"
+
+"@typescript-eslint/utils@5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.18.0.tgz#27fc84cf95c1a96def0aae31684cb43a37e76855"
+ integrity sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==
+ dependencies:
+ "@types/json-schema" "^7.0.9"
+ "@typescript-eslint/scope-manager" "5.18.0"
+ "@typescript-eslint/types" "5.18.0"
+ "@typescript-eslint/typescript-estree" "5.18.0"
+ eslint-scope "^5.1.1"
+ eslint-utils "^3.0.0"
+
+"@typescript-eslint/visitor-keys@5.18.0":
+ version "5.18.0"
+ resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz#c7c07709823804171d569017f3b031ced7253e60"
+ integrity sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==
+ dependencies:
+ "@typescript-eslint/types" "5.18.0"
+ eslint-visitor-keys "^3.0.0"
+
abab@^2.0.3, abab@^2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291"
@@ -873,21 +1494,36 @@ acorn-globals@^6.0.0:
acorn "^7.1.1"
acorn-walk "^7.1.1"
+acorn-jsx@^5.3.2:
+ version "5.3.2"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937"
+ integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==
+
acorn-walk@^7.1.1:
version "7.2.0"
resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc"
integrity sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==
+acorn-walk@^8.1.1:
+ version "8.2.0"
+ resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
+ integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
+
acorn@^7.1.1:
version "7.4.1"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa"
integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==
-acorn@^8.2.4:
+acorn@^8.2.4, acorn@^8.4.1, acorn@^8.8.0:
version "8.8.0"
resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8"
integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==
+aes-js@3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d"
+ integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==
+
agent-base@6:
version "6.0.2"
resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77"
@@ -895,6 +1531,26 @@ agent-base@6:
dependencies:
debug "4"
+ajv@^6.10.0, ajv@^6.12.4:
+ version "6.12.6"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
+ integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ fast-json-stable-stringify "^2.0.0"
+ json-schema-traverse "^0.4.1"
+ uri-js "^4.2.2"
+
+ajv@^8.11.0:
+ version "8.11.0"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
+ integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
+ dependencies:
+ fast-deep-equal "^3.1.1"
+ json-schema-traverse "^1.0.0"
+ require-from-string "^2.0.2"
+ uri-js "^4.2.2"
+
ansi-colors@^4.1.1:
version "4.1.3"
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
@@ -939,6 +1595,11 @@ anymatch@^3.0.3, anymatch@~3.1.2:
normalize-path "^3.0.0"
picomatch "^2.0.4"
+arg@^4.1.0:
+ version "4.1.3"
+ resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
+ integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
+
argparse@^1.0.7:
version "1.0.10"
resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
@@ -946,6 +1607,16 @@ argparse@^1.0.7:
dependencies:
sprintf-js "~1.0.2"
+argparse@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
+ integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
+
+array-union@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
+ integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
+
async@^3.2.3:
version "3.2.4"
resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c"
@@ -956,6 +1627,20 @@ asynckit@^0.4.0:
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
+at-least-node@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2"
+ integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==
+
+axios@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/axios/-/axios-1.0.0.tgz#16ded6096c1d37650db9f6a8d48a2f7c1bb58622"
+ integrity sha512-SsHsGFN1qNPFT5QhSoSD37SHDfGyLSW5AESmyLk2JeCMHv5g0I9g0Hz/zQHx2KNe0jGXh2q2hAm7OdkXm360CA==
+ dependencies:
+ follow-redirects "^1.15.0"
+ form-data "^4.0.0"
+ proxy-from-env "^1.1.0"
+
babel-jest@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-27.5.1.tgz#a1bf8d61928edfefd21da27eb86a695bfd691444"
@@ -1027,12 +1712,17 @@ base64-js@^1.3.1:
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
+bech32@1.1.4:
+ version "1.1.4"
+ resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9"
+ integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==
+
binary-extensions@^2.0.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
-bl@^4.0.3:
+bl@^4.0.3, bl@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
@@ -1041,6 +1731,16 @@ bl@^4.0.3:
inherits "^2.0.4"
readable-stream "^3.4.0"
+bn.js@^4.11.9:
+ version "4.12.0"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88"
+ integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==
+
+bn.js@^5.2.1:
+ version "5.2.1"
+ resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70"
+ integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==
+
brace-expansion@^1.1.7:
version "1.1.11"
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
@@ -1063,6 +1763,11 @@ braces@^3.0.2, braces@~3.0.2:
dependencies:
fill-range "^7.0.1"
+brorand@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f"
+ integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==
+
browser-process-hrtime@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626"
@@ -1078,6 +1783,13 @@ browserslist@^4.21.3:
node-releases "^2.0.6"
update-browserslist-db "^1.0.9"
+bs-logger@0.x:
+ version "0.2.6"
+ resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8"
+ integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==
+ dependencies:
+ fast-json-stable-stringify "2.x"
+
bser@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05"
@@ -1098,6 +1810,11 @@ buffer@^5.5.0:
base64-js "^1.3.1"
ieee754 "^1.1.13"
+cachedir@2.3.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8"
+ integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==
+
callsites@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
@@ -1126,7 +1843,7 @@ chalk@4.1.0:
ansi-styles "^4.1.0"
supports-color "^7.1.0"
-chalk@^2.0.0:
+chalk@^2.0.0, chalk@^2.4.1:
version "2.4.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
@@ -1135,7 +1852,7 @@ chalk@^2.0.0:
escape-string-regexp "^1.0.5"
supports-color "^5.3.0"
-chalk@^4.0.0, chalk@^4.0.2:
+chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.1:
version "4.1.2"
resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
@@ -1148,6 +1865,11 @@ char-regex@^1.0.2:
resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf"
integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==
+chardet@^0.7.0:
+ version "0.7.0"
+ resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
+ integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
+
chokidar@^3.5.1:
version "3.5.3"
resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd"
@@ -1173,7 +1895,7 @@ cjs-module-lexer@^1.0.0:
resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz#9f84ba3244a512f3a54e5277e8eef4c489864e40"
integrity sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==
-cli-cursor@3.1.0:
+cli-cursor@3.1.0, cli-cursor@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
@@ -1185,6 +1907,16 @@ cli-spinners@2.6.1:
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d"
integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==
+cli-spinners@^2.5.0:
+ version "2.7.0"
+ resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.7.0.tgz#f815fd30b5f9eaac02db604c7a231ed7cb2f797a"
+ integrity sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==
+
+cli-width@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
+ integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
+
cliui@^7.0.2:
version "7.0.4"
resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
@@ -1203,6 +1935,11 @@ cliui@^8.0.1:
strip-ansi "^6.0.1"
wrap-ansi "^7.0.0"
+clone@^1.0.2:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
+ integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
+
co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
@@ -1249,11 +1986,41 @@ combined-stream@^1.0.8:
dependencies:
delayed-stream "~1.0.0"
+commitizen@^4.0.3, commitizen@^4.2.5:
+ version "4.2.5"
+ resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-4.2.5.tgz#48e5a5c28334c6e8ed845cc24fc9f072efd3961e"
+ integrity sha512-9sXju8Qrz1B4Tw7kC5KhnvwYQN88qs2zbiB8oyMsnXZyJ24PPGiNM3nHr73d32dnE3i8VJEXddBFIbOgYSEXtQ==
+ dependencies:
+ cachedir "2.3.0"
+ cz-conventional-changelog "3.3.0"
+ dedent "0.7.0"
+ detect-indent "6.1.0"
+ find-node-modules "^2.1.2"
+ find-root "1.1.0"
+ fs-extra "9.1.0"
+ glob "7.2.3"
+ inquirer "8.2.4"
+ is-utf8 "^0.2.1"
+ lodash "4.17.21"
+ minimist "1.2.6"
+ strip-bom "4.0.0"
+ strip-json-comments "3.1.1"
+
concat-map@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
+confusing-browser-globals@^1.0.9:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81"
+ integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==
+
+conventional-commit-types@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b"
+ integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg==
+
convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369"
@@ -1261,7 +2028,28 @@ convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0:
dependencies:
safe-buffer "~5.1.1"
-cross-spawn@^7.0.3:
+cosmiconfig-typescript-loader@^4.0.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.1.1.tgz#38dd3578344038dae40fdf09792bc2e9df529f78"
+ integrity sha512-9DHpa379Gp0o0Zefii35fcmuuin6q92FnLDffzdZ0l9tVd3nEobG3O+MZ06+kuBvFTSVScvNb/oHA13Nd4iipg==
+
+cosmiconfig@^7.0.0:
+ version "7.0.1"
+ resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d"
+ integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==
+ dependencies:
+ "@types/parse-json" "^4.0.0"
+ import-fresh "^3.2.1"
+ parse-json "^5.0.0"
+ path-type "^4.0.0"
+ yaml "^1.10.0"
+
+create-require@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
+ integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
+
+cross-spawn@^7.0.2, cross-spawn@^7.0.3:
version "7.0.3"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
@@ -1287,6 +2075,20 @@ cssstyle@^2.3.0:
dependencies:
cssom "~0.3.6"
+cz-conventional-changelog@3.3.0, cz-conventional-changelog@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz#9246947c90404149b3fe2cf7ee91acad3b7d22d2"
+ integrity sha512-U466fIzU5U22eES5lTNiNbZ+d8dfcHcssH4o7QsdWaCcRs/feIPCxKYSWkYBNs5mny7MvEfwpTLWjvbm94hecw==
+ dependencies:
+ chalk "^2.4.1"
+ commitizen "^4.0.3"
+ conventional-commit-types "^3.0.0"
+ lodash.map "^4.5.1"
+ longest "^2.0.1"
+ word-wrap "^1.0.3"
+ optionalDependencies:
+ "@commitlint/load" ">6.1.1"
+
data-urls@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-2.0.0.tgz#156485a72963a970f5d5821aaf642bef2bf2db9b"
@@ -1296,7 +2098,7 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
-debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.4:
+debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@@ -1308,12 +2110,12 @@ decimal.js@^10.2.1:
resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.1.tgz#be75eeac4a2281aace80c1a8753587c27ef053e7"
integrity sha512-F29o+vci4DodHYT9UrR5IEbfBw9pE5eSapIJdTqXK5+6hq+t8VRxwQyKlW2i+KDKFkkJQRvFyI/QXD83h8LyQw==
-dedent@^0.7.0:
+dedent@0.7.0, dedent@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c"
integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==
-deep-is@~0.1.3:
+deep-is@^0.1.3, deep-is@~0.1.3:
version "0.1.4"
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831"
integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==
@@ -1323,6 +2125,13 @@ deepmerge@^4.2.2:
resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955"
integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==
+defaults@^1.0.3:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
+ integrity sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==
+ dependencies:
+ clone "^1.0.2"
+
define-lazy-prop@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
@@ -1333,6 +2142,16 @@ delayed-stream@~1.0.0:
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
+detect-file@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
+ integrity sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==
+
+detect-indent@6.1.0:
+ version "6.1.0"
+ resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
+ integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
+
detect-newline@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
@@ -1343,6 +2162,25 @@ diff-sequences@^27.5.1:
resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.5.1.tgz#eaecc0d327fd68c8d9672a1e64ab8dccb2ef5327"
integrity sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==
+diff@^4.0.1:
+ version "4.0.2"
+ resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
+ integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
+
+dir-glob@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
+ integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
+ dependencies:
+ path-type "^4.0.0"
+
+doctrine@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961"
+ integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==
+ dependencies:
+ esutils "^2.0.2"
+
domexception@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/domexception/-/domexception-2.0.1.tgz#fb44aefba793e1574b0af6aed2801d057529f304"
@@ -1367,6 +2205,19 @@ electron-to-chromium@^1.4.251:
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.272.tgz#cedebaeec5d9879da85b127e65a55c6b4c58344e"
integrity sha512-KS6gPPGNrzpVv9HzFVq+Etd0AjZEPr5pvaTBn2yD6KV4+cKW4I0CJoJNgmTG6gUQPAMZ4wIPtcOuoou3qFAZCA==
+elliptic@6.5.4:
+ version "6.5.4"
+ resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb"
+ integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==
+ dependencies:
+ bn.js "^4.11.9"
+ brorand "^1.1.0"
+ hash.js "^1.0.0"
+ hmac-drbg "^1.0.1"
+ inherits "^2.0.4"
+ minimalistic-assert "^1.0.1"
+ minimalistic-crypto-utils "^1.0.1"
+
emittery@^0.8.1:
version "0.8.1"
resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.8.1.tgz#bb23cc86d03b30aa75a7f734819dee2e1ba70860"
@@ -1413,6 +2264,11 @@ escape-string-regexp@^2.0.0:
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
+escape-string-regexp@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
+ integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+
escodegen@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd"
@@ -1425,18 +2281,118 @@ escodegen@^2.0.0:
optionalDependencies:
source-map "~0.6.1"
+eslint-config-prettier@8.1.0:
+ version "8.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.1.0.tgz#4ef1eaf97afe5176e6a75ddfb57c335121abc5a6"
+ integrity sha512-oKMhGv3ihGbCIimCAjqkdzx2Q+jthoqnXSP+d86M9tptwugycmTFdVR4IpLgq2c4SHifbwO90z2fQ8/Aio73yw==
+
+eslint-scope@^5.1.1:
+ version "5.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
+ integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^4.1.1"
+
+eslint-scope@^7.1.1:
+ version "7.1.1"
+ resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.1.tgz#fff34894c2f65e5226d3041ac480b4513a163642"
+ integrity sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==
+ dependencies:
+ esrecurse "^4.3.0"
+ estraverse "^5.2.0"
+
+eslint-utils@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672"
+ integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==
+ dependencies:
+ eslint-visitor-keys "^2.0.0"
+
+eslint-visitor-keys@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303"
+ integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==
+
+eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.3.0:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz#f6480fa6b1f30efe2d1968aa8ac745b862469826"
+ integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
+
+eslint@~8.12.0:
+ version "8.12.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.12.0.tgz#c7a5bd1cfa09079aae64c9076c07eada66a46e8e"
+ integrity sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==
+ dependencies:
+ "@eslint/eslintrc" "^1.2.1"
+ "@humanwhocodes/config-array" "^0.9.2"
+ ajv "^6.10.0"
+ chalk "^4.0.0"
+ cross-spawn "^7.0.2"
+ debug "^4.3.2"
+ doctrine "^3.0.0"
+ escape-string-regexp "^4.0.0"
+ eslint-scope "^7.1.1"
+ eslint-utils "^3.0.0"
+ eslint-visitor-keys "^3.3.0"
+ espree "^9.3.1"
+ esquery "^1.4.0"
+ esutils "^2.0.2"
+ fast-deep-equal "^3.1.3"
+ file-entry-cache "^6.0.1"
+ functional-red-black-tree "^1.0.1"
+ glob-parent "^6.0.1"
+ globals "^13.6.0"
+ ignore "^5.2.0"
+ import-fresh "^3.0.0"
+ imurmurhash "^0.1.4"
+ is-glob "^4.0.0"
+ js-yaml "^4.1.0"
+ json-stable-stringify-without-jsonify "^1.0.1"
+ levn "^0.4.1"
+ lodash.merge "^4.6.2"
+ minimatch "^3.0.4"
+ natural-compare "^1.4.0"
+ optionator "^0.9.1"
+ regexpp "^3.2.0"
+ strip-ansi "^6.0.1"
+ strip-json-comments "^3.1.0"
+ text-table "^0.2.0"
+ v8-compile-cache "^2.0.3"
+
+espree@^9.3.1, espree@^9.4.0:
+ version "9.4.0"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-9.4.0.tgz#cd4bc3d6e9336c433265fc0aa016fc1aaf182f8a"
+ integrity sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==
+ dependencies:
+ acorn "^8.8.0"
+ acorn-jsx "^5.3.2"
+ eslint-visitor-keys "^3.3.0"
+
esprima@^4.0.0, esprima@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
-esquery@^1.0.1:
+esquery@^1.0.1, esquery@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.4.0.tgz#2148ffc38b82e8c7057dfed48425b3e61f0f24a5"
integrity sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==
dependencies:
estraverse "^5.1.0"
+esrecurse@^4.3.0:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921"
+ integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==
+ dependencies:
+ estraverse "^5.2.0"
+
+estraverse@^4.1.1:
+ version "4.3.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
+ integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
+
estraverse@^5.1.0, estraverse@^5.2.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
@@ -1447,6 +2403,42 @@ esutils@^2.0.2:
resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==
+ethers@^5.7.1:
+ version "5.7.1"
+ resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.1.tgz#48c83a44900b5f006eb2f65d3ba6277047fd4f33"
+ integrity sha512-5krze4dRLITX7FpU8J4WscXqADiKmyeNlylmmDLbS95DaZpBhDe2YSwRQwKXWNyXcox7a3gBgm/MkGXV1O1S/Q==
+ dependencies:
+ "@ethersproject/abi" "5.7.0"
+ "@ethersproject/abstract-provider" "5.7.0"
+ "@ethersproject/abstract-signer" "5.7.0"
+ "@ethersproject/address" "5.7.0"
+ "@ethersproject/base64" "5.7.0"
+ "@ethersproject/basex" "5.7.0"
+ "@ethersproject/bignumber" "5.7.0"
+ "@ethersproject/bytes" "5.7.0"
+ "@ethersproject/constants" "5.7.0"
+ "@ethersproject/contracts" "5.7.0"
+ "@ethersproject/hash" "5.7.0"
+ "@ethersproject/hdnode" "5.7.0"
+ "@ethersproject/json-wallets" "5.7.0"
+ "@ethersproject/keccak256" "5.7.0"
+ "@ethersproject/logger" "5.7.0"
+ "@ethersproject/networks" "5.7.1"
+ "@ethersproject/pbkdf2" "5.7.0"
+ "@ethersproject/properties" "5.7.0"
+ "@ethersproject/providers" "5.7.1"
+ "@ethersproject/random" "5.7.0"
+ "@ethersproject/rlp" "5.7.0"
+ "@ethersproject/sha2" "5.7.0"
+ "@ethersproject/signing-key" "5.7.0"
+ "@ethersproject/solidity" "5.7.0"
+ "@ethersproject/strings" "5.7.0"
+ "@ethersproject/transactions" "5.7.0"
+ "@ethersproject/units" "5.7.0"
+ "@ethersproject/wallet" "5.7.0"
+ "@ethersproject/web" "5.7.1"
+ "@ethersproject/wordlists" "5.7.0"
+
execa@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
@@ -1467,6 +2459,13 @@ exit@^0.1.2:
resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==
+expand-tilde@^2.0.0, expand-tilde@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502"
+ integrity sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==
+ dependencies:
+ homedir-polyfill "^1.0.1"
+
expect@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/expect/-/expect-27.5.1.tgz#83ce59f1e5bdf5f9d2b94b61d2050db48f3fef74"
@@ -1477,6 +2476,20 @@ expect@^27.5.1:
jest-matcher-utils "^27.5.1"
jest-message-util "^27.5.1"
+external-editor@^3.0.3:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
+ integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
+ dependencies:
+ chardet "^0.7.0"
+ iconv-lite "^0.4.24"
+ tmp "^0.0.33"
+
+fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+ integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
fast-glob@3.2.7:
version "3.2.7"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1"
@@ -1488,12 +2501,23 @@ fast-glob@3.2.7:
merge2 "^1.3.0"
micromatch "^4.0.4"
-fast-json-stable-stringify@^2.0.0:
+fast-glob@^3.2.9:
+ version "3.2.12"
+ resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80"
+ integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==
+ dependencies:
+ "@nodelib/fs.stat" "^2.0.2"
+ "@nodelib/fs.walk" "^1.2.3"
+ glob-parent "^5.1.2"
+ merge2 "^1.3.0"
+ micromatch "^4.0.4"
+
+fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
-fast-levenshtein@~2.0.6:
+fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6:
version "2.0.6"
resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==
@@ -1512,13 +2536,20 @@ fb-watchman@^2.0.0:
dependencies:
bser "2.1.1"
-figures@3.2.0:
+figures@3.2.0, figures@^3.0.0:
version "3.2.0"
resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
dependencies:
escape-string-regexp "^1.0.5"
+file-entry-cache@^6.0.1:
+ version "6.0.1"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027"
+ integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==
+ dependencies:
+ flat-cache "^3.0.4"
+
filelist@^1.0.1:
version "1.0.4"
resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5"
@@ -1533,7 +2564,20 @@ fill-range@^7.0.1:
dependencies:
to-regex-range "^5.0.1"
-find-up@^4.1.0:
+find-node-modules@^2.1.2:
+ version "2.1.3"
+ resolved "https://registry.yarnpkg.com/find-node-modules/-/find-node-modules-2.1.3.tgz#3c976cff2ca29ee94b4f9eafc613987fc4c0ee44"
+ integrity sha512-UC2I2+nx1ZuOBclWVNdcnbDR5dlrOdVb7xNjmT/lHE+LsgztWks3dG7boJ37yTS/venXw84B/mAW9uHVoC5QRg==
+ dependencies:
+ findup-sync "^4.0.0"
+ merge "^2.1.1"
+
+find-root@1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4"
+ integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==
+
+find-up@^4.0.0, find-up@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
@@ -1541,11 +2585,39 @@ find-up@^4.1.0:
locate-path "^5.0.0"
path-exists "^4.0.0"
+findup-sync@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-4.0.0.tgz#956c9cdde804052b881b428512905c4a5f2cdef0"
+ integrity sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==
+ dependencies:
+ detect-file "^1.0.0"
+ is-glob "^4.0.0"
+ micromatch "^4.0.2"
+ resolve-dir "^1.0.1"
+
+flat-cache@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11"
+ integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==
+ dependencies:
+ flatted "^3.1.0"
+ rimraf "^3.0.2"
+
flat@^5.0.2:
version "5.0.2"
resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241"
integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==
+flatted@^3.1.0:
+ version "3.2.7"
+ resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.7.tgz#609f39207cb614b89d0765b477cb2d437fbf9787"
+ integrity sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==
+
+follow-redirects@^1.15.0:
+ version "1.15.2"
+ resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13"
+ integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==
+
form-data@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"
@@ -1555,11 +2627,30 @@ form-data@^3.0.0:
combined-stream "^1.0.8"
mime-types "^2.1.12"
+form-data@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452"
+ integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==
+ dependencies:
+ asynckit "^0.4.0"
+ combined-stream "^1.0.8"
+ mime-types "^2.1.12"
+
fs-constants@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
+fs-extra@9.1.0:
+ version "9.1.0"
+ resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d"
+ integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==
+ dependencies:
+ at-least-node "^1.0.0"
+ graceful-fs "^4.2.0"
+ jsonfile "^6.0.1"
+ universalify "^2.0.0"
+
fs-extra@^10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
@@ -1584,6 +2675,11 @@ function-bind@^1.1.1:
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+functional-red-black-tree@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327"
+ integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==
+
gensync@^1.0.0-beta.2:
version "1.0.0-beta.2"
resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0"
@@ -1611,6 +2707,13 @@ glob-parent@^5.1.2, glob-parent@~5.1.2:
dependencies:
is-glob "^4.0.1"
+glob-parent@^6.0.1:
+ version "6.0.2"
+ resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3"
+ integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==
+ dependencies:
+ is-glob "^4.0.3"
+
glob@7.1.4:
version "7.1.4"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
@@ -1623,7 +2726,7 @@ glob@7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
-glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
+glob@7.2.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
version "7.2.3"
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
@@ -1635,11 +2738,57 @@ glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4:
once "^1.3.0"
path-is-absolute "^1.0.0"
+global-dirs@^0.1.1:
+ version "0.1.1"
+ resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
+ integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==
+ dependencies:
+ ini "^1.3.4"
+
+global-modules@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea"
+ integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==
+ dependencies:
+ global-prefix "^1.0.1"
+ is-windows "^1.0.1"
+ resolve-dir "^1.0.0"
+
+global-prefix@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe"
+ integrity sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==
+ dependencies:
+ expand-tilde "^2.0.2"
+ homedir-polyfill "^1.0.1"
+ ini "^1.3.4"
+ is-windows "^1.0.1"
+ which "^1.2.14"
+
globals@^11.1.0:
version "11.12.0"
resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e"
integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==
+globals@^13.15.0, globals@^13.6.0:
+ version "13.17.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-13.17.0.tgz#902eb1e680a41da93945adbdcb5a9f361ba69bd4"
+ integrity sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==
+ dependencies:
+ type-fest "^0.20.2"
+
+globby@^11.0.4:
+ version "11.1.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
+ integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
+ dependencies:
+ array-union "^2.1.0"
+ dir-glob "^3.0.1"
+ fast-glob "^3.2.9"
+ ignore "^5.2.0"
+ merge2 "^1.4.1"
+ slash "^3.0.0"
+
graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9:
version "4.2.10"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c"
@@ -1667,6 +2816,30 @@ has@^1.0.3:
dependencies:
function-bind "^1.1.1"
+hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42"
+ integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==
+ dependencies:
+ inherits "^2.0.3"
+ minimalistic-assert "^1.0.1"
+
+hmac-drbg@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1"
+ integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==
+ dependencies:
+ hash.js "^1.0.3"
+ minimalistic-assert "^1.0.0"
+ minimalistic-crypto-utils "^1.0.1"
+
+homedir-polyfill@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8"
+ integrity sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==
+ dependencies:
+ parse-passwd "^1.0.0"
+
html-encoding-sniffer@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"
@@ -1701,7 +2874,12 @@ human-signals@^2.1.0:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
-iconv-lite@0.4.24:
+husky@^8.0.0:
+ version "8.0.1"
+ resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.1.tgz#511cb3e57de3e3190514ae49ed50f6bc3f50b3e9"
+ integrity sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==
+
+iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@@ -1720,11 +2898,27 @@ ieee754@^1.1.13:
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
-ignore@^5.0.4:
+ignore@^5.0.4, ignore@^5.1.8, ignore@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
+import-fresh@^3.0.0, import-fresh@^3.2.1:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
+ integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
+ dependencies:
+ parent-module "^1.0.0"
+ resolve-from "^4.0.0"
+
+import-local@^3.0.2:
+ version "3.1.0"
+ resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4"
+ integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==
+ dependencies:
+ pkg-dir "^4.2.0"
+ resolve-cwd "^3.0.0"
+
imurmurhash@^0.1.4:
version "0.1.4"
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
@@ -1743,6 +2937,32 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4:
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
+ini@^1.3.4:
+ version "1.3.8"
+ resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
+ integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
+
+inquirer@8.2.4:
+ version "8.2.4"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.2.4.tgz#ddbfe86ca2f67649a67daa6f1051c128f684f0b4"
+ integrity sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==
+ dependencies:
+ ansi-escapes "^4.2.1"
+ chalk "^4.1.1"
+ cli-cursor "^3.1.0"
+ cli-width "^3.0.0"
+ external-editor "^3.0.3"
+ figures "^3.0.0"
+ lodash "^4.17.21"
+ mute-stream "0.0.8"
+ ora "^5.4.1"
+ run-async "^2.4.0"
+ rxjs "^7.5.5"
+ string-width "^4.1.0"
+ strip-ansi "^6.0.0"
+ through "^2.3.6"
+ wrap-ansi "^7.0.0"
+
is-arrayish@^0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
@@ -1782,13 +3002,18 @@ is-generator-fn@^2.0.0:
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==
-is-glob@^4.0.1, is-glob@~4.0.1:
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
dependencies:
is-extglob "^2.1.1"
+is-interactive@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e"
+ integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==
+
is-number@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
@@ -1809,6 +3034,21 @@ is-typedarray@^1.0.0:
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==
+is-unicode-supported@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7"
+ integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==
+
+is-utf8@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+ integrity sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==
+
+is-windows@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
+ integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
+
is-wsl@^2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
@@ -1873,6 +3113,15 @@ jake@^10.8.5:
filelist "^1.0.1"
minimatch "^3.0.4"
+jest-changed-files@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-27.5.1.tgz#a348aed00ec9bf671cc58a66fcbe7c3dfd6a68f5"
+ integrity sha512-buBLMiByfWGCoMsLLzGUUSpAmIAGnbR2KJoMN10ziLhOLvP4e0SlypHnAel8iqQXTrcbmfEY9sSqae5sgUsTvw==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ execa "^5.0.0"
+ throat "^6.0.1"
+
jest-circus@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-27.5.1.tgz#37a5a4459b7bf4406e53d637b49d22c65d125ecc"
@@ -1898,7 +3147,25 @@ jest-circus@^27.5.1:
stack-utils "^2.0.3"
throat "^6.0.1"
-jest-config@27.5.1:
+jest-cli@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-27.5.1.tgz#278794a6e6458ea8029547e6c6cbf673bd30b145"
+ integrity sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==
+ dependencies:
+ "@jest/core" "^27.5.1"
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ chalk "^4.0.0"
+ exit "^0.1.2"
+ graceful-fs "^4.2.9"
+ import-local "^3.0.2"
+ jest-config "^27.5.1"
+ jest-util "^27.5.1"
+ jest-validate "^27.5.1"
+ prompts "^2.0.1"
+ yargs "^16.2.0"
+
+jest-config@27.5.1, jest-config@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-27.5.1.tgz#5c387de33dca3f99ad6357ddeccd91bf3a0e4a41"
integrity sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==
@@ -2037,7 +3304,7 @@ jest-leak-detector@^27.5.1:
jest-get-type "^27.5.1"
pretty-format "^27.5.1"
-jest-matcher-utils@^27.5.1:
+jest-matcher-utils@^27.0.0, jest-matcher-utils@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz#9c0cdbda8245bc22d2331729d1091308b40cf8ab"
integrity sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==
@@ -2080,6 +3347,15 @@ jest-regex-util@^27.5.1:
resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.5.1.tgz#4da143f7e9fd1e542d4aa69617b38e4a78365b95"
integrity sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==
+jest-resolve-dependencies@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz#d811ecc8305e731cc86dd79741ee98fed06f1da8"
+ integrity sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==
+ dependencies:
+ "@jest/types" "^27.5.1"
+ jest-regex-util "^27.5.1"
+ jest-snapshot "^27.5.1"
+
jest-resolve@27.5.1, jest-resolve@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-27.5.1.tgz#a2f1c5a0796ec18fe9eb1536ac3814c23617b384"
@@ -2187,7 +3463,7 @@ jest-snapshot@^27.5.1:
pretty-format "^27.5.1"
semver "^7.3.2"
-jest-util@27.5.1, jest-util@^27.5.1:
+jest-util@27.5.1, jest-util@^27.0.0, jest-util@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-27.5.1.tgz#3ba9771e8e31a0b85da48fe0b0891fb86c01c2f9"
integrity sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==
@@ -2211,6 +3487,19 @@ jest-validate@^27.5.1:
leven "^3.1.0"
pretty-format "^27.5.1"
+jest-watcher@^27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-27.5.1.tgz#71bd85fb9bde3a2c2ec4dc353437971c43c642a2"
+ integrity sha512-z676SuD6Z8o8qbmEGhoEUFOM1+jfEiL3DXHK/xgEiG2EyNYfFG60jluWcupY6dATjfEsKQuibReS1djInQnoVw==
+ dependencies:
+ "@jest/test-result" "^27.5.1"
+ "@jest/types" "^27.5.1"
+ "@types/node" "*"
+ ansi-escapes "^4.2.1"
+ chalk "^4.0.0"
+ jest-util "^27.5.1"
+ string-length "^4.0.1"
+
jest-worker@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0"
@@ -2220,6 +3509,20 @@ jest-worker@^27.5.1:
merge-stream "^2.0.0"
supports-color "^8.0.0"
+jest@27.5.1:
+ version "27.5.1"
+ resolved "https://registry.yarnpkg.com/jest/-/jest-27.5.1.tgz#dadf33ba70a779be7a6fc33015843b51494f63fc"
+ integrity sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==
+ dependencies:
+ "@jest/core" "^27.5.1"
+ import-local "^3.0.2"
+ jest-cli "^27.5.1"
+
+js-sha3@0.8.0:
+ version "0.8.0"
+ resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840"
+ integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==
+
js-tokens@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
@@ -2233,6 +3536,13 @@ js-yaml@^3.13.1:
argparse "^1.0.7"
esprima "^4.0.0"
+js-yaml@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
+ integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
+ dependencies:
+ argparse "^2.0.1"
+
jsdom@^16.6.0:
version "16.7.0"
resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-16.7.0.tgz#918ae71965424b197c819f8183a754e18977b710"
@@ -2276,6 +3586,26 @@ json-parse-even-better-errors@^2.3.0:
resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
+json-schema-traverse@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
+ integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
+
+json-schema-traverse@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+ integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+json-stable-stringify-without-jsonify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651"
+ integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==
+
+json5@2.x, json5@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
+ integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
+
json5@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe"
@@ -2283,11 +3613,6 @@ json5@^1.0.1:
dependencies:
minimist "^1.2.0"
-json5@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c"
- integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==
-
jsonc-parser@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.0.0.tgz#abdd785701c7e7eaca8a9ec8cf070ca51a745a22"
@@ -2302,11 +3627,24 @@ jsonfile@^6.0.1:
optionalDependencies:
graceful-fs "^4.1.6"
+kleur@^3.0.3:
+ version "3.0.3"
+ resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
+ integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
+
leven@^3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
+levn@^0.4.1:
+ version "0.4.1"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade"
+ integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==
+ dependencies:
+ prelude-ls "^1.2.1"
+ type-check "~0.4.0"
+
levn@~0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
@@ -2327,11 +3665,39 @@ locate-path@^5.0.0:
dependencies:
p-locate "^4.1.0"
-lodash@^4.7.0:
+lodash.map@^4.5.1:
+ version "4.6.0"
+ resolved "https://registry.yarnpkg.com/lodash.map/-/lodash.map-4.6.0.tgz#771ec7839e3473d9c4cde28b19394c3562f4f6d3"
+ integrity sha512-worNHGKLDetmcEYDvh2stPCrrQRkP20E4l0iIS7F8EvzMqBBi7ltvFN5m1HvTf1P7Jk1txKhvFcmYsCr8O2F1Q==
+
+lodash.memoize@4.x:
+ version "4.1.2"
+ resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
+ integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==
+
+lodash.merge@^4.6.2:
+ version "4.6.2"
+ resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
+ integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
+
+lodash@4.17.21, lodash@^4.17.19, lodash@^4.17.21, lodash@^4.7.0:
version "4.17.21"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+log-symbols@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503"
+ integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==
+ dependencies:
+ chalk "^4.1.0"
+ is-unicode-supported "^0.1.0"
+
+longest@^2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/longest/-/longest-2.0.1.tgz#781e183296aa94f6d4d916dc335d0d17aefa23f8"
+ integrity sha512-Ajzxb8CM6WAnFjgiloPsI3bF+WCxcvhdIG3KNA2KN962+tdBsHcuQ4k4qX/EcS/2CRkcc0iAkR956Nib6aXU/Q==
+
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
@@ -2346,6 +3712,11 @@ make-dir@^3.0.0:
dependencies:
semver "^6.0.0"
+make-error@1.x, make-error@^1.1.1:
+ version "1.3.6"
+ resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
+ integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
+
makeerror@1.0.12:
version "1.0.12"
resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a"
@@ -2358,12 +3729,17 @@ merge-stream@^2.0.0:
resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
-merge2@^1.3.0:
+merge2@^1.3.0, merge2@^1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
-micromatch@^4.0.4:
+merge@^2.1.1:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/merge/-/merge-2.1.1.tgz#59ef4bf7e0b3e879186436e8481c06a6c162ca98"
+ integrity sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==
+
+micromatch@^4.0.2, micromatch@^4.0.4:
version "4.0.5"
resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
@@ -2388,6 +3764,16 @@ mimic-fn@^2.1.0:
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
+minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7"
+ integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==
+
+minimalistic-crypto-utils@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
+ integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==
+
minimatch@3.0.4:
version "3.0.4"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
@@ -2395,7 +3781,7 @@ minimatch@3.0.4:
dependencies:
brace-expansion "^1.1.7"
-minimatch@^3.0.4, minimatch@^3.1.1:
+minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2:
version "3.1.2"
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
@@ -2409,7 +3795,7 @@ minimatch@^5.0.1:
dependencies:
brace-expansion "^2.0.1"
-minimist@^1.2.0, minimist@^1.2.6:
+minimist@1.2.6, minimist@^1.2.0, minimist@^1.2.6:
version "1.2.6"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
@@ -2419,6 +3805,11 @@ ms@2.1.2:
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
+mute-stream@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
+ integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
+
natural-compare@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -2535,6 +3926,38 @@ optionator@^0.8.1:
type-check "~0.3.2"
word-wrap "~1.2.3"
+optionator@^0.9.1:
+ version "0.9.1"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.1.tgz#4f236a6373dae0566a6d43e1326674f50c291499"
+ integrity sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==
+ dependencies:
+ deep-is "^0.1.3"
+ fast-levenshtein "^2.0.6"
+ levn "^0.4.1"
+ prelude-ls "^1.2.1"
+ type-check "^0.4.0"
+ word-wrap "^1.2.3"
+
+ora@^5.4.1:
+ version "5.4.1"
+ resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18"
+ integrity sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==
+ dependencies:
+ bl "^4.1.0"
+ chalk "^4.1.0"
+ cli-cursor "^3.1.0"
+ cli-spinners "^2.5.0"
+ is-interactive "^1.0.0"
+ is-unicode-supported "^0.1.0"
+ log-symbols "^4.1.0"
+ strip-ansi "^6.0.0"
+ wcwidth "^1.0.1"
+
+os-tmpdir@~1.0.2:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
+ integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
+
p-limit@^2.2.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
@@ -2554,7 +3977,14 @@ p-try@^2.0.0:
resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
-parse-json@^5.2.0:
+parent-module@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
+ integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
+ dependencies:
+ callsites "^3.0.0"
+
+parse-json@^5.0.0, parse-json@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
@@ -2564,6 +3994,11 @@ parse-json@^5.2.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
+parse-passwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
+ integrity sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==
+
parse5@6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b"
@@ -2589,6 +4024,11 @@ path-parse@^1.0.7:
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+path-type@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
+ integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
+
picocolors@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
@@ -2604,6 +4044,18 @@ pirates@^4.0.4, pirates@^4.0.5:
resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.5.tgz#feec352ea5c3268fb23a37c702ab1699f35a5f3b"
integrity sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==
+pkg-dir@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
+ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
+ dependencies:
+ find-up "^4.0.0"
+
+prelude-ls@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396"
+ integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==
+
prelude-ls@~1.1.2:
version "1.1.2"
resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
@@ -2614,7 +4066,7 @@ prettier@^2.5.1:
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.7.1.tgz#e235806850d057f97bb08368a4f7d899f7760c64"
integrity sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==
-pretty-format@^27.5.1:
+pretty-format@^27.0.0, pretty-format@^27.5.1:
version "27.5.1"
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e"
integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==
@@ -2623,12 +4075,25 @@ pretty-format@^27.5.1:
ansi-styles "^5.0.0"
react-is "^17.0.1"
+prompts@^2.0.1:
+ version "2.4.2"
+ resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069"
+ integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==
+ dependencies:
+ kleur "^3.0.3"
+ sisteransi "^1.0.5"
+
+proxy-from-env@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
+ integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
+
psl@^1.1.33:
version "1.9.0"
resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7"
integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==
-punycode@^2.1.1:
+punycode@^2.1.0, punycode@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
@@ -2664,21 +4129,58 @@ readdirp@~3.6.0:
dependencies:
picomatch "^2.2.1"
+regexpp@^3.2.0:
+ version "3.2.0"
+ resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2"
+ integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==
+
require-directory@^2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+require-from-string@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+ integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
requires-port@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==
+resolve-cwd@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"
+ integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==
+ dependencies:
+ resolve-from "^5.0.0"
+
+resolve-dir@^1.0.0, resolve-dir@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43"
+ integrity sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==
+ dependencies:
+ expand-tilde "^2.0.0"
+ global-modules "^1.0.0"
+
+resolve-from@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
+ integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
+
resolve-from@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
+resolve-global@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255"
+ integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
+ dependencies:
+ global-dirs "^0.1.1"
+
resolve.exports@1.1.0, resolve.exports@^1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9"
@@ -2706,13 +4208,18 @@ reusify@^1.0.4:
resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
-rimraf@^3.0.0:
+rimraf@^3.0.0, rimraf@^3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
dependencies:
glob "^7.1.3"
+run-async@^2.4.0:
+ version "2.4.1"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
+ integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
+
run-parallel@^1.1.9:
version "1.2.0"
resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -2732,6 +4239,13 @@ rxjs@^6.5.4:
dependencies:
tslib "^1.9.0"
+rxjs@^7.5.5:
+ version "7.5.7"
+ resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39"
+ integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==
+ dependencies:
+ tslib "^2.1.0"
+
safe-buffer@~5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -2754,6 +4268,11 @@ saxes@^5.0.1:
dependencies:
xmlchars "^2.2.0"
+scrypt-js@3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312"
+ integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==
+
semver@7.3.4:
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
@@ -2761,18 +4280,18 @@ semver@7.3.4:
dependencies:
lru-cache "^6.0.0"
-semver@^6.0.0, semver@^6.3.0:
- version "6.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
- integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
-
-semver@^7.3.2:
+semver@7.x, semver@^7.3.2, semver@^7.3.5:
version "7.3.8"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798"
integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==
dependencies:
lru-cache "^6.0.0"
+semver@^6.0.0, semver@^6.3.0:
+ version "6.3.0"
+ resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d"
+ integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
+
shebang-command@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
@@ -2790,6 +4309,11 @@ signal-exit@^3.0.2, signal-exit@^3.0.3:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
+sisteransi@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed"
+ integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==
+
slash@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
@@ -2803,7 +4327,7 @@ source-map-support@0.5.19:
buffer-from "^1.0.0"
source-map "^0.6.0"
-source-map-support@^0.5.21, source-map-support@^0.5.6:
+source-map-support@^0.5.17, source-map-support@^0.5.21, source-map-support@^0.5.6:
version "0.5.21"
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f"
integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==
@@ -2864,22 +4388,22 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1:
dependencies:
ansi-regex "^5.0.1"
+strip-bom@4.0.0, strip-bom@^4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
+ integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
+
strip-bom@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
-strip-bom@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878"
- integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==
-
strip-final-newline@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
-strip-json-comments@^3.1.1:
+strip-json-comments@3.1.1, strip-json-comments@^3.1.0, strip-json-comments@^3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006"
integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==
@@ -2951,11 +4475,28 @@ test-exclude@^6.0.0:
glob "^7.1.4"
minimatch "^3.0.4"
+text-table@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+ integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==
+
throat@^6.0.1:
version "6.0.1"
resolved "https://registry.yarnpkg.com/throat/-/throat-6.0.1.tgz#d514fedad95740c12c2d7fc70ea863eb51ade375"
integrity sha512-8hmiGIJMDlwjg7dlJ4yKGLK8EsYqKgPWbG3b4wjJddKNwc7N7Dpn08Df4szr/sZdMVeOstrdYSsqzX6BYbcB+w==
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+ integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
+
+tmp@^0.0.33:
+ version "0.0.33"
+ resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
+ integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
+ dependencies:
+ os-tmpdir "~1.0.2"
+
tmp@~0.2.1:
version "0.2.1"
resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14"
@@ -3002,6 +4543,51 @@ tree-kill@1.2.2:
resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc"
integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
+ts-jest@27.1.4:
+ version "27.1.4"
+ resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-27.1.4.tgz#84d42cf0f4e7157a52e7c64b1492c46330943e00"
+ integrity sha512-qjkZlVPWVctAezwsOD1OPzbZ+k7zA5z3oxII4dGdZo5ggX/PL7kvwTM0pXTr10fAtbiVpJaL3bWd502zAhpgSQ==
+ dependencies:
+ bs-logger "0.x"
+ fast-json-stable-stringify "2.x"
+ jest-util "^27.0.0"
+ json5 "2.x"
+ lodash.memoize "4.x"
+ make-error "1.x"
+ semver "7.x"
+ yargs-parser "20.x"
+
+ts-node@9.1.1:
+ version "9.1.1"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-9.1.1.tgz#51a9a450a3e959401bda5f004a72d54b936d376d"
+ integrity sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==
+ dependencies:
+ arg "^4.1.0"
+ create-require "^1.1.0"
+ diff "^4.0.1"
+ make-error "^1.1.1"
+ source-map-support "^0.5.17"
+ yn "3.1.1"
+
+ts-node@^10.8.1:
+ version "10.9.1"
+ resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
+ integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
+ dependencies:
+ "@cspotcode/source-map-support" "^0.8.0"
+ "@tsconfig/node10" "^1.0.7"
+ "@tsconfig/node12" "^1.0.7"
+ "@tsconfig/node14" "^1.0.0"
+ "@tsconfig/node16" "^1.0.2"
+ acorn "^8.4.1"
+ acorn-walk "^8.1.1"
+ arg "^4.1.0"
+ create-require "^1.1.0"
+ diff "^4.0.1"
+ make-error "^1.1.1"
+ v8-compile-cache-lib "^3.0.1"
+ yn "3.1.1"
+
tsconfig-paths@^3.9.0:
version "3.14.1"
resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz#ba0734599e8ea36c862798e920bcf163277b137a"
@@ -3012,16 +4598,30 @@ tsconfig-paths@^3.9.0:
minimist "^1.2.6"
strip-bom "^3.0.0"
-tslib@^1.9.0:
+tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
-tslib@^2.3.0, tslib@^2.4.0:
+tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
+tsutils@^3.21.0:
+ version "3.21.0"
+ resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623"
+ integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==
+ dependencies:
+ tslib "^1.8.1"
+
+type-check@^0.4.0, type-check@~0.4.0:
+ version "0.4.0"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"
+ integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==
+ dependencies:
+ prelude-ls "^1.2.1"
+
type-check@~0.3.2:
version "0.3.2"
resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
@@ -3034,6 +4634,11 @@ type-detect@4.0.8:
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==
+type-fest@^0.20.2:
+ version "0.20.2"
+ resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4"
+ integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==
+
type-fest@^0.21.3:
version "0.21.3"
resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37"
@@ -3046,6 +4651,11 @@ typedarray-to-buffer@^3.1.5:
dependencies:
is-typedarray "^1.0.0"
+typescript@^4.6.4:
+ version "4.8.4"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.4.tgz#c464abca159669597be5f96b8943500b238e60e6"
+ integrity sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==
+
typescript@~4.6.2:
version "4.6.4"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9"
@@ -3069,6 +4679,13 @@ update-browserslist-db@^1.0.9:
escalade "^3.1.1"
picocolors "^1.0.0"
+uri-js@^4.2.2:
+ version "4.4.1"
+ resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+ integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+ dependencies:
+ punycode "^2.1.0"
+
url-parse@^1.5.3:
version "1.5.10"
resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1"
@@ -3082,7 +4699,17 @@ util-deprecate@^1.0.1:
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
-v8-compile-cache@2.3.0:
+uuid@^9.0.0:
+ version "9.0.0"
+ resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5"
+ integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==
+
+v8-compile-cache-lib@^3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
+ integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
+
+v8-compile-cache@2.3.0, v8-compile-cache@^2.0.3:
version "2.3.0"
resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee"
integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==
@@ -3117,6 +4744,13 @@ walker@^1.0.7:
dependencies:
makeerror "1.0.12"
+wcwidth@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
+ integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
+ dependencies:
+ defaults "^1.0.3"
+
webidl-conversions@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-5.0.0.tgz#ae59c8a00b121543a2acc65c0434f57b0fc11aff"
@@ -3148,6 +4782,13 @@ whatwg-url@^8.0.0, whatwg-url@^8.5.0:
tr46 "^2.1.0"
webidl-conversions "^6.1.0"
+which@^1.2.14:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
+ integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
+ dependencies:
+ isexe "^2.0.0"
+
which@^2.0.1:
version "2.0.2"
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
@@ -3155,7 +4796,7 @@ which@^2.0.1:
dependencies:
isexe "^2.0.0"
-word-wrap@~1.2.3:
+word-wrap@^1.0.3, word-wrap@^1.2.3, word-wrap@~1.2.3:
version "1.2.3"
resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c"
integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==
@@ -3184,6 +4825,11 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
+ws@7.4.6:
+ version "7.4.6"
+ resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c"
+ integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==
+
ws@^7.4.6:
version "7.5.9"
resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591"
@@ -3209,6 +4855,16 @@ yallist@^4.0.0:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
+yaml@^1.10.0:
+ version "1.10.2"
+ resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+ integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yargs-parser@20.x, yargs-parser@^20.2.2:
+ version "20.2.9"
+ resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
+ integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
+
yargs-parser@21.0.1:
version "21.0.1"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35"
@@ -3219,6 +4875,19 @@ yargs-parser@^21.0.0:
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+yargs@^16.2.0:
+ version "16.2.0"
+ resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"
+ integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==
+ dependencies:
+ cliui "^7.0.2"
+ escalade "^3.1.1"
+ get-caller-file "^2.0.5"
+ require-directory "^2.1.1"
+ string-width "^4.2.0"
+ y18n "^5.0.5"
+ yargs-parser "^20.2.2"
+
yargs@^17.4.0:
version "17.6.0"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.6.0.tgz#e134900fc1f218bc230192bdec06a0a5f973e46c"
@@ -3231,3 +4900,8 @@ yargs@^17.4.0:
string-width "^4.2.3"
y18n "^5.0.5"
yargs-parser "^21.0.0"
+
+yn@3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
+ integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==