Add demo for graph-watcher IPLD statediff and checkpointing

This commit is contained in:
nabarun 2022-05-05 19:43:45 +05:30 committed by Ashwin Phatak
parent ba6b996e65
commit ce6568aad2
9 changed files with 343 additions and 64 deletions

View File

@ -45,6 +45,10 @@ yarn build
* [graph-node](./packages/graph-node/README.md)
## Demos
* [IPLD statediff and checkpointing](./ipld-demo.md)
## Services
The default config files used by the watchers assume the following services are setup and running on localhost:

209
ipld-demo.md Normal file
View File

@ -0,0 +1,209 @@
# Demo for IPLD statediff and checkpointing
* In the root of `graph-watcher-ts`, run:
```bash
yarn && yarn build
```
* In console, run the IPFS daemon:
```bash
# Verify ipfs version
ipfs version
# ipfs version 0.12.2
ipfs daemon
```
* The following services should be running to work with watcher:
* [vulcanize/go-ethereum](https://github.com/vulcanize/go-ethereum) ([v1.10.17-statediff-3.2.0](https://github.com/vulcanize/go-ethereum/releases/tag/v1.10.17-statediff-3.2.0)) on port 8545.
* [vulcanize/ipld-eth-server](https://github.com/vulcanize/ipld-eth-server) ([v3.0.0](https://github.com/vulcanize/ipld-eth-server/releases/tag/v3.0.0)) with native GQL API enabled on port 8082 and RPC API enabled on port 8081.
* [postgraphile](https://github.com/vulcanize/postgraphile) ([v1.1.1](https://github.com/vulcanize/postgraphile/releases/tag/v1.1.1)) on the `vulcanize/ipld-eth-server` database, on port 5000
* Deploy `Example` contract:
```bash
cd packages/graph-node
yarn example:deploy
```
* Set the returned address to the variable `$EXAMPLE_ADDRESS`:
```bash
EXAMPLE_ADDRESS=
```
* In `packages/graph-node`, run:
```bash
cp .env.example .env
```
* In `.env` file, set `EXAMPLE_CONTRACT_ADDRESS` to the `EXAMPLE_ADDRESS`.
* In [packages/graph-node/test/subgraph/example1/subgraph.yaml](./packages/graph-node/test/subgraph/example1/subgraph.yaml), set the source address for `Example1` datasource to the `EXAMPLE_ADDRESS`.
```bash
yarn build:example
```
* In `packages/codegen`, create a `config.yaml` file with the following contents:
```yaml
contracts:
- name: Example
path: ../graph-node/test/contracts/Example.sol
kind: Example1
outputFolder: ../demo-example-watcher
mode: all
kind: active
port: 3008
flatten: true
subgraphPath: ../graph-node/test/subgraph/example1/build
```
Reference: [packages/codegen/README.md](./packages/codegen/README.md#run)
* Generate watcher:
```bash
cd packages/codegen
yarn codegen --config-file ./config.yaml
```
* In `packages/demo-example-watcher`, run:
```bash
yarn
```
* Create dbs:
```bash
sudo su - postgres
# Delete databases if they already exist.
dropdb demo-example-watcher
dropdb demo-example-watcher-job-queue
# Create databases
createdb demo-example-watcher
createdb demo-example-watcher-job-queue
```
Enable the `pgcrypto` extension.
```
psql -U postgres -h localhost demo-example-watcher-job-queue
demo-example-watcher-job-queue=# CREATE EXTENSION pgcrypto;
demo-example-watcher-job-queue=# exit
```
* In a new terminal, in `packages/demo-example-watcher`, run:
```bash
yarn server
```
```bash
yarn job-runner
```
* Run the following GQL subscription at the [graphql endpoint](http://127.0.0.1:3008/graphql):
```graphql
subscription {
onEvent {
event {
__typename
... on TestEvent {
param1
param2
param3
},
},
block {
number
hash
}
}
}
```
* Trigger the `Test` event by calling example contract method:
```bash
cd packages/graph-node
yarn example:test --address $EXAMPLE_ADDRESS
```
A `Test` event shall be visible in the subscription at endpoint.
* Run the `getState` query at the endpoint to get the latest `IPLDBlock` for `EXAMPLE_ADDRESS`:
```graphql
query {
getState (
blockHash: "EVENT_BLOCK_HASH"
contractAddress: "EXAMPLE_ADDRESS"
kind: "diff_staged"
) {
cid
block {
cid
hash
number
timestamp
parentHash
}
contractAddress
data
}
}
```
* Run the query for entity at the endpoint:
```graphql
query {
author (
block: {
hash: "EVENT_BLOCK_HASH"
}
id: "0xdc7d7a8920c8eecc098da5b7522a5f31509b5bfc"
) {
__typename
name
paramInt
paramBigInt
paramBytes
}
}
```
* `diff` IPLDBlocks get created corresponding to the `diff_staged` blocks when their respective `eth_block`s reach the pruned region.
* In `packages/demo-example-watcher`:
* After the `diff` block has been created, create a `checkpoint`:
```bash
cd packages/demo-example-watcher
yarn checkpoint --address $EXAMPLE_ADDRESS
```
* A `checkpoint` IPLDBlock should be created at the latest canonical block hash.
* Run the `getState` query again at the endpoint with the output `blockHash` and kind `checkpoint`.
* All the `IPLDBlock` entries can be seen in `pg-admin` in table `ipld_block`.
* All the `diff` and `checkpoint` IPLDBlocks should be pushed to `IPFS`.
* Open IPFS WebUI http://127.0.0.1:5001/webui and search for `IPLDBlock`s using their `CID`s.

View File

@ -5,6 +5,7 @@
import '@nomiclabs/hardhat-waffle';
import './test/tasks/example-deploy';
import './test/tasks/example-test';
// You need to export an object to set up your config
// Go to https://hardhat.org/config/ to learn more

View File

@ -42,7 +42,8 @@
"build:example": "cd test/subgraph/example1 && yarn && yarn codegen && yarn build",
"watch": "DEBUG=vulcanize:* nodemon --watch src src/watcher.ts",
"compare-entity": "node bin/compare-entity",
"example:deploy": "hardhat --network localhost example-deploy"
"example:deploy": "hardhat --network localhost example-deploy",
"example:test": "hardhat --network localhost example-test"
},
"dependencies": {
"@apollo/client": "^3.3.19",

View File

@ -0,0 +1,31 @@
//
// Copyright 2022 Vulcanize, Inc.
//
import { task, types } from 'hardhat/config';
import '@nomiclabs/hardhat-ethers';
import { ContractTransaction } from 'ethers';
task('example-test', 'Trigger Test event')
.addParam('address', 'Contract address', undefined, types.string)
.setAction(async (args, hre) => {
const { address } = args;
await hre.run('compile');
const Example = await hre.ethers.getContractFactory('Example');
const example = Example.attach(address);
const transaction: ContractTransaction = await example.emitEvent();
const receipt = await transaction.wait();
if (receipt.events) {
const TestEvent = receipt.events.find(el => el.event === 'Test');
if (TestEvent && TestEvent.args) {
console.log('Test Event');
console.log('param1:', TestEvent.args.param1.toString());
console.log('param2:', TestEvent.args.param2.toString());
console.log('param3:', TestEvent.args.param3.toString());
}
}
});

View File

@ -32,25 +32,24 @@
"@ethersproject/providers": "5.3.0",
"@ipld/dag-cbor": "^6.0.12",
"@vulcanize/cache": "^0.1.0",
"@vulcanize/graph-node": "^0.1.0",
"@vulcanize/ipld-eth-client": "^0.1.0",
"@vulcanize/solidity-mapper": "^0.1.0",
"@vulcanize/util": "^0.1.0",
"@vulcanize/graph-node": "^0.1.0",
"apollo-server-express": "^2.25.0",
"apollo-type-bigint": "^0.1.3",
"debug": "^4.3.1",
"decimal.js": "^10.3.1",
"ethers": "^5.2.0",
"express": "^4.17.1",
"graphql": "^15.5.0",
"graphql-import-node": "^0.0.4",
"ipfs-http-client": "^53.0.1",
"json-bigint": "^1.0.0",
"lodash": "^4.17.21",
"multiformats": "^9.4.8",
"reflect-metadata": "^0.1.13",
"typeorm": "^0.2.32",
"yargs": "^17.0.1",
"decimal.js": "^10.3.1"
"yargs": "^17.0.1"
},
"devDependencies": {
"@ethersproject/abi": "^5.3.0",

View File

@ -12,7 +12,8 @@
"lodash": "^4.17.21",
"multiformats": "^9.4.8",
"pg-boss": "^6.1.0",
"toml": "^3.0.0"
"toml": "^3.0.0",
"ipfs-http-client": "^56.0.3"
},
"devDependencies": {
"@types/fs-extra": "^9.0.11",

View File

@ -12,6 +12,6 @@ export class IPFSClient {
}
async push (data: any): Promise<void> {
await this._client.dag.put(data, { format: 'dag-cbor', hashAlg: 'sha2-256' });
await this._client.dag.put(data, { storeCodec: 'dag-cbor', hashAlg: 'sha2-256' });
}
}

147
yarn.lock
View File

@ -1116,7 +1116,7 @@
resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.0.tgz#0eee6373e11418bfe0b5638f654df7a4ca6a3950"
integrity sha512-wYn6r8zVZyQJ6rQaALBEln5B1pzxb9shV5Ef97kTvn6yVGrqyXVnDqnU24MXnFubR+rZjBY9NWuxX3FB2sTsjg==
"@ipld/dag-cbor@^6.0.12", "@ipld/dag-cbor@^6.0.5":
"@ipld/dag-cbor@^6.0.12":
version "6.0.13"
resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-6.0.13.tgz#b68265a3fbb808f2ea3fa247a107399dbc71d5a7"
integrity sha512-tqh1VLjiHi6+i0gDEnoBrQcRvgnUwQV413uTyFnXQMOjJs8px95/TBVMBpQBkhQoeCL4oQlPAr4qIrelKEkQHw==
@ -1124,6 +1124,30 @@
cborg "^1.2.1"
multiformats "^9.0.0"
"@ipld/dag-cbor@^6.0.3":
version "6.0.15"
resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-6.0.15.tgz#aebe7a26c391cae98c32faedb681b1519e3d2372"
integrity sha512-Vm3VTSTwlmGV92a3C5aeY+r2A18zbH2amehNhsX8PBa3muXICaWrN8Uri85A5hLH7D7ElhE8PdjxD6kNqUmTZA==
dependencies:
cborg "^1.5.4"
multiformats "^9.5.4"
"@ipld/dag-cbor@^7.0.0":
version "7.0.1"
resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-7.0.1.tgz#d46c6bbb9afa55c74a85d0117b4ab389ceb9083b"
integrity sha512-XqG8VEzHjQDC/Qcy5Gyf1kvAav5VuAugc6c7VtdaRLI+3d8lJrUP3F76GYJNNXuEnRZ58cCBnNNglkIGTdg1+A==
dependencies:
cborg "^1.6.0"
multiformats "^9.5.4"
"@ipld/dag-json@^8.0.1":
version "8.0.9"
resolved "https://registry.yarnpkg.com/@ipld/dag-json/-/dag-json-8.0.9.tgz#c41641ddbd3799abd0c683015c56a37f3f6d1edc"
integrity sha512-NNKHmgHxc2zOEaB8qOUpAb2UK1vcEE/rBeh018Da/RzXE7N8GwiTJLRZ3Fe/G4fsiis67G0sagRz/YNQcANRsQ==
dependencies:
cborg "^1.5.4"
multiformats "^9.5.4"
"@ipld/dag-pb@^2.1.3":
version "2.1.13"
resolved "https://registry.yarnpkg.com/@ipld/dag-pb/-/dag-pb-2.1.13.tgz#174779914cf2bffca9e5be96e5b7f06821402333"
@ -3178,13 +3202,10 @@ any-promise@^1.0.0:
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
integrity sha1-q8av7tzqUugJzcA3au0845Y10X8=
any-signal@^2.1.0, any-signal@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-2.1.2.tgz#8d48270de0605f8b218cf9abe8e9c6a0e7418102"
integrity sha512-B+rDnWasMi/eWcajPcCWSlYc7muXOrcYrqgyzcdKisl2H/WTlQ0gip1KyQfr0ZlxJdsuWCj/LWwQm7fhyhRfIQ==
dependencies:
abort-controller "^3.0.0"
native-abort-controller "^1.0.3"
any-signal@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/any-signal/-/any-signal-3.0.1.tgz#49cae34368187a3472e31de28fb5cb1430caa9a6"
integrity sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==
anymatch@~3.1.1, anymatch@~3.1.2:
version "3.1.2"
@ -4678,6 +4699,11 @@ cborg@^1.2.1:
resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.5.3.tgz#94cd037a50cde007397ca872259457d2f8dd0846"
integrity sha512-iUweYinQpR48eXxcmEoZlixY2eo+vDCGc5utNwXV0oYhmowHU/2DwcSiJ4xU1l7niwXOR91pcE3zEgZl4VoFAQ==
cborg@^1.5.4, cborg@^1.6.0:
version "1.9.1"
resolved "https://registry.yarnpkg.com/cborg/-/cborg-1.9.1.tgz#9ea2f7b1745048e7db51e78d54e8a9a0e4f64a11"
integrity sha512-6xKRdJ89ncwEXJGx9rFMRBNp72UqgYSGt2a88rqsvCLda4OuhRlh3xD2nu+ufrw6h9l94K0cnvyD4WEGpKtRtw==
chai-spies@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/chai-spies/-/chai-spies-1.0.0.tgz#d16b39336fb316d03abf8c375feb23c0c8bb163d"
@ -5422,6 +5448,14 @@ d@1, d@^1.0.1:
es5-ext "^0.10.50"
type "^1.0.1"
dag-jose@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/dag-jose/-/dag-jose-1.0.0.tgz#52e42d70cb5bee31ae4e8e3ab860615568d7ad73"
integrity sha512-U0b/YsIPBp6YZNTFrVjwLZAlY3qGRxZTIEcM/CcQmrVrCWq9MWQq9pheXVSPLIhF4SNwzp2SikPva4/BIrJY+g==
dependencies:
"@ipld/dag-cbor" "^6.0.3"
multiformats "^9.0.2"
dargs@^7.0.0:
version "7.0.0"
resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
@ -8457,28 +8491,30 @@ ipaddr.js@1.9.1:
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
ipfs-core-types@^0.8.1:
version "0.8.2"
resolved "https://registry.yarnpkg.com/ipfs-core-types/-/ipfs-core-types-0.8.2.tgz#6923dd1a5fda9ea26d7b03e83f96a16a9e8cfc24"
integrity sha512-qgKn+hHAdRRyP4eX7ygmNSPucI75KUMxtoxgYaJGPcew4rdvCA1VCD/Rc0W+dHlRbTRM4CYIE10VS3qjpXSgDQ==
ipfs-core-types@^0.10.3:
version "0.10.3"
resolved "https://registry.yarnpkg.com/ipfs-core-types/-/ipfs-core-types-0.10.3.tgz#89ebe98199d4d829f2b20104bfa3299f808c80fe"
integrity sha512-GNid2lRBjR5qgScCglgk7w9Hk3TZAwPHQXxOLQx72wgyc0jF2U5NXRoKW0GRvX8NPbHmsrFszForIqxd23I1Gw==
dependencies:
"@ipld/dag-pb" "^2.1.3"
interface-datastore "^6.0.2"
ipfs-unixfs "^6.0.3"
multiaddr "^10.0.0"
multiformats "^9.4.1"
multiformats "^9.5.1"
ipfs-core-utils@^0.11.1:
version "0.11.1"
resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.11.1.tgz#4ac2143f2d89917f0823c9b8104e5ed489383ecb"
integrity sha512-SYBTeESuLgjYeDh8meCgttHV/LlES8FbljIDCySp+DpgPxYJA4EyC4GhywBaneQc/X3GWvHEzvW5b7ADluFcAw==
ipfs-core-utils@^0.14.3:
version "0.14.3"
resolved "https://registry.yarnpkg.com/ipfs-core-utils/-/ipfs-core-utils-0.14.3.tgz#d04c631c472507bdefc58d4e8d1d9109efbb411c"
integrity sha512-aBkewVhgAj3NWXPwu6imj0wADGiGVZmJzqKzODOJsibDjkx6FGdMv8kvvqtLnK8LS/dvSk9yk32IDtuDyYoV7Q==
dependencies:
any-signal "^2.1.2"
any-signal "^3.0.0"
blob-to-it "^1.0.1"
browser-readablestream-to-it "^1.0.1"
debug "^4.1.1"
err-code "^3.0.1"
ipfs-core-types "^0.8.1"
ipfs-core-types "^0.10.3"
ipfs-unixfs "^6.0.3"
ipfs-utils "^9.0.2"
ipfs-utils "^9.0.6"
it-all "^1.0.4"
it-map "^1.0.4"
it-peekable "^1.0.2"
@ -8486,32 +8522,32 @@ ipfs-core-utils@^0.11.1:
merge-options "^3.0.4"
multiaddr "^10.0.0"
multiaddr-to-uri "^8.0.0"
multiformats "^9.4.1"
multiformats "^9.5.1"
nanoid "^3.1.23"
parse-duration "^1.0.0"
timeout-abort-controller "^1.1.1"
timeout-abort-controller "^3.0.0"
uint8arrays "^3.0.0"
ipfs-http-client@^53.0.1:
version "53.0.1"
resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-53.0.1.tgz#1ae5afce607c87cec285429c7de665e341a3ec7d"
integrity sha512-0hmm5esSxoArEtVE9jeLwLw3pJm6rJA1kWKW+3Nqs2O8TQVSot8u1nzopF/yJ2IJGd5PHJc2JxqtEdVzV+p7nQ==
ipfs-http-client@^56.0.3:
version "56.0.3"
resolved "https://registry.yarnpkg.com/ipfs-http-client/-/ipfs-http-client-56.0.3.tgz#45bbea55347ef13524769d5919cbed84d9d022d6"
integrity sha512-E3L5ylVl6BjyRUsNehvfuRBYp1hj8vQ8in4zskVPMNzXs6JiCFUbif5a6BtcAlSK4xPQyJCeLNNAWLUeFQTLNA==
dependencies:
"@ipld/dag-cbor" "^6.0.5"
"@ipld/dag-cbor" "^7.0.0"
"@ipld/dag-json" "^8.0.1"
"@ipld/dag-pb" "^2.1.3"
abort-controller "^3.0.0"
any-signal "^2.1.2"
any-signal "^3.0.0"
dag-jose "^1.0.0"
debug "^4.1.1"
err-code "^3.0.1"
ipfs-core-types "^0.8.1"
ipfs-core-utils "^0.11.1"
ipfs-utils "^9.0.2"
ipfs-core-types "^0.10.3"
ipfs-core-utils "^0.14.3"
ipfs-utils "^9.0.6"
it-first "^1.0.6"
it-last "^1.0.4"
merge-options "^3.0.4"
multiaddr "^10.0.0"
multiformats "^9.4.1"
native-abort-controller "^1.0.3"
multiformats "^9.5.1"
parse-duration "^1.0.0"
stream-to-it "^0.2.2"
uint8arrays "^3.0.0"
@ -8524,13 +8560,12 @@ ipfs-unixfs@^6.0.3:
err-code "^3.0.1"
protobufjs "^6.10.2"
ipfs-utils@^9.0.2:
version "9.0.2"
resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-9.0.2.tgz#7e816a863753c5af1187464839a6b46aa8764e5b"
integrity sha512-o0DjVfd1kcr09fAYMkSnZ56ZkfoAzZhFWkizG3/tL7svukZpqyGyRxNlF58F+hsrn/oL8ouAP9x+4Hdf8XM+hg==
ipfs-utils@^9.0.6:
version "9.0.6"
resolved "https://registry.yarnpkg.com/ipfs-utils/-/ipfs-utils-9.0.6.tgz#b7657b8be101e0bb64402aeb631c64168075a5e4"
integrity sha512-/WfdwOIiJVb3uqfKRQ9Eo+vCEKsDgp7h4Pdc37MRwAiFciZ7xKAkEqsfXubV0VQi8x5jWTifeHn8WEPBLL451w==
dependencies:
abort-controller "^3.0.0"
any-signal "^2.1.0"
any-signal "^3.0.0"
buffer "^6.0.1"
electron-fetch "^1.7.2"
err-code "^3.0.1"
@ -8540,7 +8575,6 @@ ipfs-utils@^9.0.2:
it-to-stream "^1.0.0"
merge-options "^3.0.4"
nanoid "^3.1.20"
native-abort-controller "^1.0.3"
native-fetch "^3.0.0"
node-fetch "https://registry.npmjs.org/@achingbrain/node-fetch/-/node-fetch-2.6.7.tgz"
react-native-fetch-api "^2.0.0"
@ -10523,11 +10557,16 @@ multicodec@^1.0.0:
buffer "^5.6.0"
varint "^5.0.0"
multiformats@^9.0.0, multiformats@^9.4.1, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.4.8:
multiformats@^9.0.0, multiformats@^9.4.2, multiformats@^9.4.5, multiformats@^9.4.8:
version "9.4.10"
resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.4.10.tgz#d654d06b28cc066506e4e59b246d65267fb6b93b"
integrity sha512-BwWGvgqB/5J/cnWaOA0sXzJ+UGl+kyFAw3Sw1L6TN4oad34C9OpW+GCpYTYPDp4pUaXDC1EjvB3yv9Iodo1EhA==
multiformats@^9.0.2, multiformats@^9.5.1, multiformats@^9.5.4:
version "9.6.4"
resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.6.4.tgz#5dce1f11a407dbb69aa612cb7e5076069bb759ca"
integrity sha512-fCCB6XMrr6CqJiHNjfFNGT0v//dxOBMrOMqUIzpPc/mmITweLEyhvMpY9bF+jZ9z3vaMAau5E8B68DW77QMXkg==
multihashes@^0.4.15, multihashes@~0.4.15:
version "0.4.21"
resolved "https://registry.yarnpkg.com/multihashes/-/multihashes-0.4.21.tgz#dc02d525579f334a7909ade8a122dabb58ccfcb5"
@ -10618,11 +10657,6 @@ napi-macros@~2.0.0:
resolved "https://registry.yarnpkg.com/napi-macros/-/napi-macros-2.0.0.tgz#2b6bae421e7b96eb687aa6c77a7858640670001b"
integrity sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==
native-abort-controller@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/native-abort-controller/-/native-abort-controller-1.0.4.tgz#39920155cc0c18209ff93af5bc90be856143f251"
integrity sha512-zp8yev7nxczDJMoP6pDxyD20IU0T22eX8VwN2ztDccKvSZhRaV33yP1BGwKSZfXuqWUzsXopVFjBdau9OOAwMQ==
native-fetch@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/native-fetch/-/native-fetch-3.0.0.tgz#06ccdd70e79e171c365c75117959cf4fe14a09bb"
@ -12609,10 +12643,10 @@ ret@~0.1.10:
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==
retimer@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/retimer/-/retimer-2.0.0.tgz#e8bd68c5e5a8ec2f49ccb5c636db84c04063bbca"
integrity sha512-KLXY85WkEq2V2bKex/LOO1ViXVn2KGYe4PYysAdYdjmraYIUsVkXu8O4am+8+5UbaaGl1qho4aqAAPHNQ4GSbg==
retimer@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/retimer/-/retimer-3.0.0.tgz#98b751b1feaf1af13eb0228f8ea68b8f9da530df"
integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA==
retry@0.12.0, retry@^0.12.0:
version "0.12.0"
@ -13722,13 +13756,12 @@ timed-out@^4.0.0, timed-out@^4.0.1:
resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f"
integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=
timeout-abort-controller@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/timeout-abort-controller/-/timeout-abort-controller-1.1.1.tgz#2c3c3c66f13c783237987673c276cbd7a9762f29"
integrity sha512-BsF9i3NAJag6T0ZEjki9j654zoafI2X6ayuNd6Tp8+Ul6Tr5s4jo973qFeiWrRSweqvskC+AHDKUmIW4b7pdhQ==
timeout-abort-controller@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz#dd57ffca041652c03769904f8d95afd93fb95595"
integrity sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA==
dependencies:
abort-controller "^3.0.0"
retimer "^2.0.0"
retimer "^3.0.0"
tmp@0.0.33, tmp@^0.0.33:
version "0.0.33"