diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 1cdd013..9ec6615 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -74,3 +74,6 @@ jobs: env: ADDRESS_FILE: /home/runner/.ocean/ocean-contracts/artifacts/address.json BARGE_FOLDER: /home/runner/.ocean/ + - name: docker logs + run: docker logs ocean_graph-node_1 + if: ${{ failure() }} diff --git a/CHANGELOG.md b/CHANGELOG.md index cb9f491..7516486 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,9 +4,23 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v3.0.8](https://github.com/oceanprotocol/ocean-subgraph/compare/v3.0.7...v3.0.8) + +- Bump @graphprotocol/graph-ts from 0.29.3 to 0.30.0 [`#680`](https://github.com/oceanprotocol/ocean-subgraph/pull/680) +- Bump cross-fetch from 3.1.5 to 3.1.6 [`#679`](https://github.com/oceanprotocol/ocean-subgraph/pull/679) +- Add lockedAmount to veDelegation [`#672`](https://github.com/oceanprotocol/ocean-subgraph/pull/672) +- Fix #628 & #629 & #621: Store event log index for all records [`#630`](https://github.com/oceanprotocol/ocean-subgraph/pull/630) +- Bump release-it from 15.10.2 to 15.10.3 [`#673`](https://github.com/oceanprotocol/ocean-subgraph/pull/673) +- Bump @types/chai from 4.3.4 to 4.3.5 [`#669`](https://github.com/oceanprotocol/ocean-subgraph/pull/669) +- Bump release-it from 15.10.1 to 15.10.2 [`#668`](https://github.com/oceanprotocol/ocean-subgraph/pull/668) +- Fix #628 & #629 & #621: Store event log index for all records (#630) [`#628`](https://github.com/oceanprotocol/ocean-subgraph/issues/628) + #### [v3.0.7](https://github.com/oceanprotocol/ocean-subgraph/compare/v3.0.6...v3.0.7) +> 28 April 2023 + - switch amount from wei to numeric [`#666`](https://github.com/oceanprotocol/ocean-subgraph/pull/666) +- Release 3.0.7 [`8691538`](https://github.com/oceanprotocol/ocean-subgraph/commit/8691538078f0d8aa81a0543de403a4e540adbfbd) #### [v3.0.6](https://github.com/oceanprotocol/ocean-subgraph/compare/v3.0.5...v3.0.6) diff --git a/package-lock.json b/package-lock.json index 4600f1b..0d9131d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,21 +1,22 @@ { "name": "ocean-subgraph", - "version": "3.0.7", + "version": "3.0.8", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "ocean-subgraph", - "version": "3.0.7", + "version": "3.0.8", "license": "Apache-2.0", "dependencies": { "@oceanprotocol/contracts": "^1.1.12", "@oceanprotocol/lib": "^2.7.0", - "cross-fetch": "^3.1.4" + "cross-fetch": "^3.1.6", + "ethereumjs-util": "^7.1.5" }, "devDependencies": { "@graphprotocol/graph-cli": "^0.38.0", - "@graphprotocol/graph-ts": "^0.29.3", + "@graphprotocol/graph-ts": "^0.30.0", "@types/chai": "^4.3.5", "@types/chai-spies": "^1.0.3", "@types/mocha": "^10.0.1", @@ -32,9 +33,9 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-standard": "^5.0.0", "mocha": "^10.2.0", - "mock-local-storage": "^1.1.23", + "mock-local-storage": "^1.1.24", "prettier": "^2.8.8", - "release-it": "^15.10.2", + "release-it": "^15.11.0", "source-map-support": "^0.5.21", "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", @@ -845,9 +846,9 @@ } }, "node_modules/@graphprotocol/graph-ts": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@graphprotocol/graph-ts/-/graph-ts-0.29.3.tgz", - "integrity": "sha512-FXBLGlunOSwjiUXYEz1J9J/I2D/myldyib/9v0R+gn/NJaYqUkXD39UmIuRxqj9cBzB/FYojHzoHidIG5nYZDw==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/@graphprotocol/graph-ts/-/graph-ts-0.30.0.tgz", + "integrity": "sha512-h5tJqlsZXglGYM0PcBsBOqof4PT0Fr4Z3QBTYN/IjMF3VvRX2A8/bdpqaAnva+2N0uAfXXwRcwcOcW5O35yzXw==", "dev": true, "dependencies": { "assemblyscript": "0.19.10" @@ -986,21 +987,18 @@ } }, "node_modules/@octokit/auth-token": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", - "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", "dev": true, - "dependencies": { - "@octokit/types": "^9.0.0" - }, "engines": { "node": ">= 14" } }, "node_modules/@octokit/core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", - "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz", + "integrity": "sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==", "dev": true, "dependencies": { "@octokit/auth-token": "^3.0.0", @@ -1016,9 +1014,9 @@ } }, "node_modules/@octokit/endpoint": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", - "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, "dependencies": { "@octokit/types": "^9.0.0", @@ -1030,9 +1028,9 @@ } }, "node_modules/@octokit/graphql": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", - "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "dependencies": { "@octokit/request": "^6.0.0", @@ -1044,18 +1042,19 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", - "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", "dev": true }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", - "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, "dependencies": { - "@octokit/types": "^9.0.0" + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" }, "engines": { "node": ">= 14" @@ -1074,13 +1073,12 @@ } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", - "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.1.tgz", + "integrity": "sha512-UmlNrrcF+AXxcxhZslTt1a/8aDxUKH0trrt/mJCxEPrWbW1ZEc+6xxcd5/n0iw3b+Xo8UBJQUKDr71+vNCBpRQ==", "dev": true, "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.3.1" + "@octokit/types": "^9.3.1" }, "engines": { "node": ">= 14" @@ -1090,9 +1088,9 @@ } }, "node_modules/@octokit/request": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", - "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz", + "integrity": "sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==", "dev": true, "dependencies": { "@octokit/endpoint": "^7.0.0", @@ -1121,27 +1119,33 @@ } }, "node_modules/@octokit/rest": { - "version": "19.0.7", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.7.tgz", - "integrity": "sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==", + "version": "19.0.11", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", + "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", "dev": true, "dependencies": { - "@octokit/core": "^4.1.0", - "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.0.0" + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" }, "engines": { "node": ">= 14" } }, + "node_modules/@octokit/tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "dev": true + }, "node_modules/@octokit/types": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", - "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.1.tgz", + "integrity": "sha512-zfJzyXLHC42sWcn2kS+oZ/DRvFZBYCCbfInZtwp1Uopl1qh6pRg4NSP/wFX1xCOpXvEkctiG1sxlSlkZmzvxdw==", "dev": true, "dependencies": { - "@octokit/openapi-types": "^16.0.0" + "@octokit/openapi-types": "^18.0.0" } }, "node_modules/@pnpm/network.ca-file": { @@ -1191,15 +1195,6 @@ "node": ">=14.16" } }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", @@ -1627,15 +1622,15 @@ } }, "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/ajv": { @@ -1716,27 +1711,27 @@ } }, "node_modules/ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "type-fest": "^3.0.0" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=14.16" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.9.0.tgz", - "integrity": "sha512-hR8JP2e8UiH7SME5JZjsobBlEiatFoxpzCP+R3ZeCo7kAaG1jXQE5X/buLzogM6GJu8le9Y4OcfNuIQX0rZskA==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { - "node": ">=14.16" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2107,6 +2102,15 @@ } ] }, + "node_modules/basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -3246,9 +3250,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-js": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz", - "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==", + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz", + "integrity": "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==", "dev": true, "hasInstallScript": true, "funding": { @@ -3342,11 +3346,11 @@ "dev": true }, "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, "node_modules/cross-spawn": { @@ -3437,12 +3441,12 @@ } }, "node_modules/data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", + "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", "dev": true, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/debug": { @@ -3747,18 +3751,18 @@ } }, "node_modules/degenerator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", - "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-4.0.2.tgz", + "integrity": "sha512-HKwIFvZROUMfH3qI3gBpD61BYh7q3c3GXD5UGZzoVNJwVSYgZKvYl1fRMXc9ozoTxl/VZxKJ5v/bA+19tywFiw==", "dev": true, "dependencies": { "ast-types": "^0.13.2", "escodegen": "^1.8.1", "esprima": "^4.0.0", - "vm2": "^3.9.8" + "vm2": "^3.9.17" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/delay": { @@ -4280,7 +4284,7 @@ "node_modules/escodegen/node_modules/levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "dependencies": { "prelude-ls": "~1.1.2", @@ -4310,7 +4314,7 @@ "node_modules/escodegen/node_modules/prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true, "engines": { "node": ">= 0.8.0" @@ -4319,7 +4323,7 @@ "node_modules/escodegen/node_modules/type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "dependencies": { "prelude-ls": "~1.1.2" @@ -6010,43 +6014,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "dependencies": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/ftp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "node_modules/ftp/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ftp/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -6156,29 +6123,18 @@ } }, "node_modules/get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", + "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^5.0.1", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/get-uri/node_modules/file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "dev": true, - "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/get-uri/node_modules/fs-extra": { @@ -6692,17 +6648,16 @@ "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/http-response-object": { @@ -6747,16 +6702,16 @@ } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", + "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", "dev": true, "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -6883,53 +6838,49 @@ } }, "node_modules/inquirer": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.0.tgz", - "integrity": "sha512-WWERbVqjsTXjXub1ZW0ZHDit1dyHqy0T9XIkky9TnmKAPrjU9Jkd59nZPK0dUuM3s73GZAZu2Jo4iFU3XSPVLA==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.6.tgz", + "integrity": "sha512-y71l237eJJKS4rl7sQcEUiMhrR0pB/ZnRMMTxLpjJhWL4hdWCT03a6jJnC1w6qIPSRZWEozuieGt3v7XaEJYFw==", "dev": true, "dependencies": { - "ansi-escapes": "^6.0.0", + "ansi-escapes": "^4.3.2", "chalk": "^5.2.0", - "cli-cursor": "^4.0.0", + "cli-cursor": "^3.1.0", "cli-width": "^4.0.0", "external-editor": "^3.0.3", "figures": "^5.0.0", "lodash": "^4.17.21", "mute-stream": "1.0.0", - "ora": "^6.1.2", - "run-async": "^2.4.0", - "rxjs": "^7.8.0", - "string-width": "^5.1.2", - "strip-ansi": "^7.0.1", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "through": "^2.3.6", - "wrap-ansi": "^8.1.0" + "wrap-ansi": "^6.0.1" }, "engines": { "node": ">=14.18.0" } }, "node_modules/inquirer/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, - "node_modules/inquirer/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "node_modules/inquirer/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "node_modules/inquirer/node_modules/chalk": { @@ -6944,65 +6895,13 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "dependencies": { - "restore-cursor": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true - }, - "node_modules/inquirer/node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dev": true, - "dependencies": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/inquirer/node_modules/mute-stream": { @@ -7015,91 +6914,96 @@ } }, "node_modules/inquirer/node_modules/ora": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", - "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "dependencies": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", + "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" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "node_modules/inquirer/node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/inquirer/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/inquirer/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, "node_modules/internal-slot": { @@ -9426,12 +9330,12 @@ "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" }, "node_modules/mock-local-storage": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/mock-local-storage/-/mock-local-storage-1.1.23.tgz", - "integrity": "sha512-G1qWl7Ik017sqB3omvWzazrWC69najuLL8Q4ROnr2clOmwCP/d7HTEHH8v29S+YYouh1mq7wmybrrTbzAf7P6A==", + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/mock-local-storage/-/mock-local-storage-1.1.24.tgz", + "integrity": "sha512-NEfmw+yEK9oe6xCfOnTaJ6Dz+L3eu6vsZopJlxflXYxr7Mg3EV+S0NXKUQlY9AAeDEdaPZDSUGq1Gi6kLSa5PA==", "dev": true, "dependencies": { - "core-js": "^3.19.0", + "core-js": "^3.30.2", "global": "^4.3.2" } }, @@ -9691,9 +9595,9 @@ } }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -10194,37 +10098,35 @@ } }, "node_modules/pac-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", - "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz", + "integrity": "sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ==", "dev": true, "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "pac-resolver": "^6.0.1", + "socks-proxy-agent": "^8.0.1" }, "engines": { - "node": ">= 8" + "node": ">= 14" } }, "node_modules/pac-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", - "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-6.0.1.tgz", + "integrity": "sha512-dg497MhVT7jZegPRuOScQ/z0aV/5WR0gTdRu1md+Irs9J9o+ls5jIuxjo1WfaTG+eQQkxyn5HMGvWK+w7EIBkQ==", "dev": true, "dependencies": { - "degenerator": "^3.0.1", + "degenerator": "^4.0.1", "ip": "^1.1.5", - "netmask": "^2.0.1" + "netmask": "^2.0.2" }, "engines": { - "node": ">= 8" + "node": ">= 14" } }, "node_modules/package-json": { @@ -10686,22 +10588,31 @@ } }, "node_modules/proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", - "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.2.1.tgz", + "integrity": "sha512-OIbBKlRAT+ycCm6wAYIzMwPejzRtjy8F3QiDX0eKOA3e4pe3U9F/IvzcHP42bmgQxVv97juG+J8/gx+JIeCX/Q==", "dev": true, "dependencies": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^6.0.3", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" }, "engines": { - "node": ">= 8" + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" } }, "node_modules/proxy-from-env": { @@ -11078,21 +10989,21 @@ } }, "node_modules/release-it": { - "version": "15.10.2", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-15.10.2.tgz", - "integrity": "sha512-fm1MtEG6IFxMMmOhUzpw9FTx8k9Ln5iiM+bikjrg3oZ5JLJO1uR1yxloPqc4A2gIXUq+bQp8/g4wipOwgDmEcw==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-15.11.0.tgz", + "integrity": "sha512-lZwoGEnKYKwGnfxxlA7vtR7vvozPrOSsIgQaHO4bgQ5ARbG3IA6Dmo0IVusv6nR1KmnjH70QIeNAgsWs6Ji/tw==", "dev": true, "dependencies": { "@iarna/toml": "2.2.5", - "@octokit/rest": "19.0.7", + "@octokit/rest": "19.0.11", "async-retry": "1.3.3", "chalk": "5.2.0", "cosmiconfig": "8.1.3", "execa": "7.1.1", "git-url-parse": "13.1.0", "globby": "13.1.4", - "got": "12.6.0", - "inquirer": "9.2.0", + "got": "12.6.1", + "inquirer": "9.2.6", "is-ci": "3.0.1", "issue-parser": "6.0.0", "lodash": "4.17.21", @@ -11100,11 +11011,11 @@ "new-github-release-url": "2.0.0", "node-fetch": "3.3.1", "open": "9.1.0", - "ora": "6.3.0", + "ora": "6.3.1", "os-name": "5.1.0", "promise.allsettled": "1.0.6", - "proxy-agent": "5.0.0", - "semver": "7.5.0", + "proxy-agent": "6.2.1", + "semver": "7.5.1", "shelljs": "0.8.5", "update-notifier": "6.0.2", "url-join": "5.0.0", @@ -11119,9 +11030,9 @@ } }, "node_modules/release-it/node_modules/@sindresorhus/is": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", - "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.4.1.tgz", + "integrity": "sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==", "dev": true, "engines": { "node": ">=14.16" @@ -11158,9 +11069,9 @@ } }, "node_modules/release-it/node_modules/cacheable-request": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.8.tgz", - "integrity": "sha512-IDVO5MJ4LItE6HKFQTqT2ocAQsisOoCTUDu1ddCmnhyiwFQjXNPp4081Xj23N4tO+AFEFNzGuNEf/c8Gwwt15A==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz", + "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==", "dev": true, "dependencies": { "@types/http-cache-semantics": "^4.0.1", @@ -11293,9 +11204,9 @@ } }, "node_modules/release-it/node_modules/got": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", - "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, "dependencies": { "@sindresorhus/is": "^5.2.0", @@ -11496,9 +11407,9 @@ } }, "node_modules/release-it/node_modules/ora": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", - "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", "dev": true, "dependencies": { "chalk": "^5.0.0", @@ -11586,9 +11497,9 @@ } }, "node_modules/release-it/node_modules/semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -11613,9 +11524,9 @@ } }, "node_modules/release-it/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "dependencies": { "ansi-regex": "^6.0.1" @@ -11950,9 +11861,9 @@ } }, "node_modules/run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "dev": true, "engines": { "node": ">=0.12.0" @@ -12357,12 +12268,12 @@ } }, "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { @@ -12371,19 +12282,25 @@ } }, "node_modules/socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", + "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", "dev": true, "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "socks": "^2.7.1" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, + "node_modules/socks/node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -13370,9 +13287,9 @@ } }, "node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", "dev": true }, "node_modules/tsutils": { @@ -13787,9 +13704,9 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "node_modules/vm2": { - "version": "3.9.17", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz", - "integrity": "sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==", + "version": "3.9.19", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", + "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", "dev": true, "dependencies": { "acorn": "^8.7.0", @@ -13803,9 +13720,9 @@ } }, "node_modules/vm2/node_modules/acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -14592,15 +14509,6 @@ "xhr-request": "^1.1.0" } }, - "node_modules/xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -15336,9 +15244,9 @@ } }, "@graphprotocol/graph-ts": { - "version": "0.29.3", - "resolved": "https://registry.npmjs.org/@graphprotocol/graph-ts/-/graph-ts-0.29.3.tgz", - "integrity": "sha512-FXBLGlunOSwjiUXYEz1J9J/I2D/myldyib/9v0R+gn/NJaYqUkXD39UmIuRxqj9cBzB/FYojHzoHidIG5nYZDw==", + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/@graphprotocol/graph-ts/-/graph-ts-0.30.0.tgz", + "integrity": "sha512-h5tJqlsZXglGYM0PcBsBOqof4PT0Fr4Z3QBTYN/IjMF3VvRX2A8/bdpqaAnva+2N0uAfXXwRcwcOcW5O35yzXw==", "dev": true, "requires": { "assemblyscript": "0.19.10" @@ -15448,18 +15356,15 @@ } }, "@octokit/auth-token": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", - "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", - "dev": true, - "requires": { - "@octokit/types": "^9.0.0" - } + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", + "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", + "dev": true }, "@octokit/core": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", - "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.1.tgz", + "integrity": "sha512-tEDxFx8E38zF3gT7sSMDrT1tGumDgsw5yPG6BBh/X+5ClIQfMH/Yqocxz1PnHx6CHyF6pxmovUTOfZAUvQ0Lvw==", "dev": true, "requires": { "@octokit/auth-token": "^3.0.0", @@ -15472,9 +15377,9 @@ } }, "@octokit/endpoint": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", - "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", + "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, "requires": { "@octokit/types": "^9.0.0", @@ -15483,9 +15388,9 @@ } }, "@octokit/graphql": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", - "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", + "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, "requires": { "@octokit/request": "^6.0.0", @@ -15494,18 +15399,19 @@ } }, "@octokit/openapi-types": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-16.0.0.tgz", - "integrity": "sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==", + "version": "18.0.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", + "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==", "dev": true }, "@octokit/plugin-paginate-rest": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.0.0.tgz", - "integrity": "sha512-Sq5VU1PfT6/JyuXPyt04KZNVsFOSBaYOAq2QRZUwzVlI10KFvcbUo8lR258AAQL1Et60b0WuVik+zOWKLuDZxw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", + "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, "requires": { - "@octokit/types": "^9.0.0" + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" } }, "@octokit/plugin-request-log": { @@ -15516,19 +15422,18 @@ "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.0.1.tgz", - "integrity": "sha512-pnCaLwZBudK5xCdrR823xHGNgqOzRnJ/mpC/76YPpNP7DybdsJtP7mdOwh+wYZxK5jqeQuhu59ogMI4NRlBUvA==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.1.tgz", + "integrity": "sha512-UmlNrrcF+AXxcxhZslTt1a/8aDxUKH0trrt/mJCxEPrWbW1ZEc+6xxcd5/n0iw3b+Xo8UBJQUKDr71+vNCBpRQ==", "dev": true, "requires": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.3.1" + "@octokit/types": "^9.3.1" } }, "@octokit/request": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", - "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", + "version": "6.2.5", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.5.tgz", + "integrity": "sha512-z83E8UIlPNaJUsXpjD8E0V5o/5f+vJJNbNcBwVZsX3/vC650U41cOkTLjq4PKk9BYonQGOnx7N17gvLyNjgGcQ==", "dev": true, "requires": { "@octokit/endpoint": "^7.0.0", @@ -15551,24 +15456,30 @@ } }, "@octokit/rest": { - "version": "19.0.7", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.7.tgz", - "integrity": "sha512-HRtSfjrWmWVNp2uAkEpQnuGMJsu/+dBr47dRc5QVgsCbnIc1+GFEaoKBWkYG+zjrsHpSqcAElMio+n10c0b5JA==", + "version": "19.0.11", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", + "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", "dev": true, "requires": { - "@octokit/core": "^4.1.0", - "@octokit/plugin-paginate-rest": "^6.0.0", + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.0.0" + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" } }, + "@octokit/tsconfig": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", + "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", + "dev": true + }, "@octokit/types": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.0.0.tgz", - "integrity": "sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.1.tgz", + "integrity": "sha512-zfJzyXLHC42sWcn2kS+oZ/DRvFZBYCCbfInZtwp1Uopl1qh6pRg4NSP/wFX1xCOpXvEkctiG1sxlSlkZmzvxdw==", "dev": true, "requires": { - "@octokit/openapi-types": "^16.0.0" + "@octokit/openapi-types": "^18.0.0" } }, "@pnpm/network.ca-file": { @@ -15603,12 +15514,6 @@ "defer-to-connect": "^2.0.1" } }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true - }, "@tsconfig/node10": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.8.tgz", @@ -15944,12 +15849,12 @@ "dev": true }, "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", "dev": true, "requires": { - "debug": "4" + "debug": "^4.3.4" } }, "ajv": { @@ -16013,18 +15918,18 @@ "dev": true }, "ansi-escapes": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-6.2.0.tgz", - "integrity": "sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^3.0.0" + "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-3.9.0.tgz", - "integrity": "sha512-hR8JP2e8UiH7SME5JZjsobBlEiatFoxpzCP+R3ZeCo7kAaG1jXQE5X/buLzogM6GJu8le9Y4OcfNuIQX0rZskA==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } @@ -16303,6 +16208,12 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "basic-ftp": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.3.tgz", + "integrity": "sha512-QHX8HLlncOLpy54mh+k/sWIFd0ThmRqwe9ZjELybGZK+tZ8rUb9VO0saKJUROTbE+KhzDUT7xziGpGrW8Kmd+g==", + "dev": true + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -17216,9 +17127,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "core-js": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.21.0.tgz", - "integrity": "sha512-YUdI3fFu4TF/2WykQ2xzSiTQdldLB4KVuL9WeAy5XONZYt5Cun/fpQvctoKbCgvPhmzADeesTk/j2Rdx77AcKQ==", + "version": "3.30.2", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.30.2.tgz", + "integrity": "sha512-uBJiDmwqsbJCWHAwjrx3cvjbMXP7xD72Dmsn5LOJpiRmE3WbBbN5rCqQ2Qh6Ek6/eOrjlWngEynBWo4VxerQhg==", "dev": true }, "core-util-is": { @@ -17295,11 +17206,11 @@ "dev": true }, "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.6.tgz", + "integrity": "sha512-riRvo06crlE8HiqOwIpQhxwdOk4fOeR7FVM/wXoxchFEqMNUjvbs3bfo4OTgMEMHzppd4DxFBDbyySj8Cv781g==", "requires": { - "node-fetch": "2.6.7" + "node-fetch": "^2.6.11" } }, "cross-spawn": { @@ -17371,9 +17282,9 @@ } }, "data-uri-to-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-3.0.1.tgz", - "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-5.0.1.tgz", + "integrity": "sha512-a9l6T1qqDogvvnw0nKlfZzqsyikEBZBClF39V3TFoKhDtGBqHu2HkuomJc02j5zft8zrUaXEuoicLeW54RkzPg==", "dev": true }, "debug": { @@ -17571,15 +17482,15 @@ } }, "degenerator": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-3.0.2.tgz", - "integrity": "sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-4.0.2.tgz", + "integrity": "sha512-HKwIFvZROUMfH3qI3gBpD61BYh7q3c3GXD5UGZzoVNJwVSYgZKvYl1fRMXc9ozoTxl/VZxKJ5v/bA+19tywFiw==", "dev": true, "requires": { "ast-types": "^0.13.2", "escodegen": "^1.8.1", "esprima": "^4.0.0", - "vm2": "^3.9.8" + "vm2": "^3.9.17" } }, "delay": { @@ -18009,7 +17920,7 @@ "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", - "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", "dev": true, "requires": { "prelude-ls": "~1.1.2", @@ -18033,13 +17944,13 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", "dev": true }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", - "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", "dev": true, "requires": { "prelude-ls": "~1.1.2" @@ -19316,42 +19227,6 @@ "dev": true, "optional": true }, - "ftp": { - "version": "0.3.10", - "resolved": "https://registry.npmjs.org/ftp/-/ftp-0.3.10.tgz", - "integrity": "sha1-kZfYYa2BQvPmPVqDv+TFn3MwiF0=", - "dev": true, - "requires": { - "readable-stream": "1.1.x", - "xregexp": "2.0.0" - }, - "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - } - } - }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -19428,25 +19303,17 @@ } }, "get-uri": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-3.0.2.tgz", - "integrity": "sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.1.tgz", + "integrity": "sha512-7ZqONUVqaabogsYNWlYj0t3YZaL6dhuEueZXGF+/YVmf6dHmaFg8/6psJKqhx9QykIDKzpGcy2cn4oV4YC7V/Q==", "dev": true, "requires": { - "@tootallnate/once": "1", - "data-uri-to-buffer": "3", - "debug": "4", - "file-uri-to-path": "2", - "fs-extra": "^8.1.0", - "ftp": "^0.3.10" + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^5.0.1", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" }, "dependencies": { - "file-uri-to-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-2.0.0.tgz", - "integrity": "sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==", - "dev": true - }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -19842,14 +19709,13 @@ "integrity": "sha512-o0PWwVCSp3O0wS6FvNr6xfBCHgt0m1tvPLFOCc2iFDKTRAXhB7m8klDf7ErowFH8POa6dVdGatKU5I1YYwzUyg==" }, "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", "dev": true, "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" } }, "http-response-object": { @@ -19889,12 +19755,12 @@ } }, "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.0.tgz", + "integrity": "sha512-0euwPCRyAPSgGdzD1IVN9nJYHtBhJwb6XPfbpQcYbPCwrBidX6GzxmchnaF4sfF/jPb74Ojx5g4yTg3sixlyPw==", "dev": true, "requires": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" } }, @@ -19981,39 +19847,44 @@ "dev": true }, "inquirer": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.0.tgz", - "integrity": "sha512-WWERbVqjsTXjXub1ZW0ZHDit1dyHqy0T9XIkky9TnmKAPrjU9Jkd59nZPK0dUuM3s73GZAZu2Jo4iFU3XSPVLA==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-9.2.6.tgz", + "integrity": "sha512-y71l237eJJKS4rl7sQcEUiMhrR0pB/ZnRMMTxLpjJhWL4hdWCT03a6jJnC1w6qIPSRZWEozuieGt3v7XaEJYFw==", "dev": true, "requires": { - "ansi-escapes": "^6.0.0", + "ansi-escapes": "^4.3.2", "chalk": "^5.2.0", - "cli-cursor": "^4.0.0", + "cli-cursor": "^3.1.0", "cli-width": "^4.0.0", "external-editor": "^3.0.3", "figures": "^5.0.0", "lodash": "^4.17.21", "mute-stream": "1.0.0", - "ora": "^6.1.2", - "run-async": "^2.4.0", - "rxjs": "^7.8.0", - "string-width": "^5.1.2", - "strip-ansi": "^7.0.1", + "ora": "^5.4.1", + "run-async": "^3.0.0", + "rxjs": "^7.8.1", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "through": "^2.3.6", - "wrap-ansi": "^8.1.0" + "wrap-ansi": "^6.0.1" }, "dependencies": { "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } }, "chalk": { "version": "5.2.0", @@ -20021,43 +19892,12 @@ "integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==", "dev": true }, - "cli-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", - "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", - "dev": true, - "requires": { - "restore-cursor": "^4.0.0" - } - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", - "dev": true - }, - "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true - }, - "log-symbols": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", - "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", - "dev": true, - "requires": { - "chalk": "^5.0.0", - "is-unicode-supported": "^1.1.0" - } - }, "mute-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", @@ -20065,61 +19905,74 @@ "dev": true }, "ora": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", - "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, "requires": { - "chalk": "^5.0.0", - "cli-cursor": "^4.0.0", - "cli-spinners": "^2.6.1", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^1.1.0", - "log-symbols": "^5.1.0", - "stdin-discarder": "^0.1.0", - "strip-ansi": "^7.0.1", + "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" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } } }, - "restore-cursor": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", - "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^5.0.1" } }, "wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "dev": true, "requires": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } } } @@ -21936,12 +21789,12 @@ "integrity": "sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw==" }, "mock-local-storage": { - "version": "1.1.23", - "resolved": "https://registry.npmjs.org/mock-local-storage/-/mock-local-storage-1.1.23.tgz", - "integrity": "sha512-G1qWl7Ik017sqB3omvWzazrWC69najuLL8Q4ROnr2clOmwCP/d7HTEHH8v29S+YYouh1mq7wmybrrTbzAf7P6A==", + "version": "1.1.24", + "resolved": "https://registry.npmjs.org/mock-local-storage/-/mock-local-storage-1.1.24.tgz", + "integrity": "sha512-NEfmw+yEK9oe6xCfOnTaJ6Dz+L3eu6vsZopJlxflXYxr7Mg3EV+S0NXKUQlY9AAeDEdaPZDSUGq1Gi6kLSa5PA==", "dev": true, "requires": { - "core-js": "^3.19.0", + "core-js": "^3.30.2", "global": "^4.3.2" } }, @@ -22143,9 +21996,9 @@ "dev": true }, "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", "requires": { "whatwg-url": "^5.0.0" } @@ -22505,31 +22358,29 @@ } }, "pac-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-5.0.0.tgz", - "integrity": "sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-6.0.3.tgz", + "integrity": "sha512-5Hr1KgPDoc21Vn3rsXBirwwDnF/iac1jN/zkpsOYruyT+ZgsUhUOgVwq3v9+ukjZd/yGm/0nzO1fDfl7rkGoHQ==", "dev": true, "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4", - "get-uri": "3", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "5", - "pac-resolver": "^5.0.0", - "raw-body": "^2.2.0", - "socks-proxy-agent": "5" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "pac-resolver": "^6.0.1", + "socks-proxy-agent": "^8.0.1" } }, "pac-resolver": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-5.0.0.tgz", - "integrity": "sha512-H+/A6KitiHNNW+bxBKREk2MCGSxljfqRX76NjummWEYIat7ldVXRU3dhRIE3iXZ0nvGBk6smv3nntxKkzRL8NA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-6.0.1.tgz", + "integrity": "sha512-dg497MhVT7jZegPRuOScQ/z0aV/5WR0gTdRu1md+Irs9J9o+ls5jIuxjo1WfaTG+eQQkxyn5HMGvWK+w7EIBkQ==", "dev": true, "requires": { - "degenerator": "^3.0.1", + "degenerator": "^4.0.1", "ip": "^1.1.5", - "netmask": "^2.0.1" + "netmask": "^2.0.2" } }, "package-json": { @@ -22881,19 +22732,27 @@ } }, "proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-5.0.0.tgz", - "integrity": "sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.2.1.tgz", + "integrity": "sha512-OIbBKlRAT+ycCm6wAYIzMwPejzRtjy8F3QiDX0eKOA3e4pe3U9F/IvzcHP42bmgQxVv97juG+J8/gx+JIeCX/Q==", "dev": true, "requires": { - "agent-base": "^6.0.0", - "debug": "4", - "http-proxy-agent": "^4.0.0", - "https-proxy-agent": "^5.0.0", - "lru-cache": "^5.1.1", - "pac-proxy-agent": "^5.0.0", - "proxy-from-env": "^1.0.0", - "socks-proxy-agent": "^5.0.0" + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^6.0.3", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true + } } }, "proxy-from-env": { @@ -23192,21 +23051,21 @@ } }, "release-it": { - "version": "15.10.2", - "resolved": "https://registry.npmjs.org/release-it/-/release-it-15.10.2.tgz", - "integrity": "sha512-fm1MtEG6IFxMMmOhUzpw9FTx8k9Ln5iiM+bikjrg3oZ5JLJO1uR1yxloPqc4A2gIXUq+bQp8/g4wipOwgDmEcw==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/release-it/-/release-it-15.11.0.tgz", + "integrity": "sha512-lZwoGEnKYKwGnfxxlA7vtR7vvozPrOSsIgQaHO4bgQ5ARbG3IA6Dmo0IVusv6nR1KmnjH70QIeNAgsWs6Ji/tw==", "dev": true, "requires": { "@iarna/toml": "2.2.5", - "@octokit/rest": "19.0.7", + "@octokit/rest": "19.0.11", "async-retry": "1.3.3", "chalk": "5.2.0", "cosmiconfig": "8.1.3", "execa": "7.1.1", "git-url-parse": "13.1.0", "globby": "13.1.4", - "got": "12.6.0", - "inquirer": "9.2.0", + "got": "12.6.1", + "inquirer": "9.2.6", "is-ci": "3.0.1", "issue-parser": "6.0.0", "lodash": "4.17.21", @@ -23214,11 +23073,11 @@ "new-github-release-url": "2.0.0", "node-fetch": "3.3.1", "open": "9.1.0", - "ora": "6.3.0", + "ora": "6.3.1", "os-name": "5.1.0", "promise.allsettled": "1.0.6", - "proxy-agent": "5.0.0", - "semver": "7.5.0", + "proxy-agent": "6.2.1", + "semver": "7.5.1", "shelljs": "0.8.5", "update-notifier": "6.0.2", "url-join": "5.0.0", @@ -23227,9 +23086,9 @@ }, "dependencies": { "@sindresorhus/is": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.3.0.tgz", - "integrity": "sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.4.1.tgz", + "integrity": "sha512-axlrvsHlHlFmKKMEg4VyvMzFr93JWJj4eIfXY1STVuO2fsImCa7ncaiG5gC8HKOX590AW5RtRsC41/B+OfrSqw==", "dev": true }, "ansi-regex": { @@ -23251,9 +23110,9 @@ "dev": true }, "cacheable-request": { - "version": "10.2.8", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.8.tgz", - "integrity": "sha512-IDVO5MJ4LItE6HKFQTqT2ocAQsisOoCTUDu1ddCmnhyiwFQjXNPp4081Xj23N4tO+AFEFNzGuNEf/c8Gwwt15A==", + "version": "10.2.10", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.10.tgz", + "integrity": "sha512-v6WB+Epm/qO4Hdlio/sfUn69r5Shgh39SsE9DSd4bIezP0mblOlObI+I0kUEM7J0JFc+I7pSeMeYaOYtX1N/VQ==", "dev": true, "requires": { "@types/http-cache-semantics": "^4.0.1", @@ -23341,9 +23200,9 @@ } }, "got": { - "version": "12.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-12.6.0.tgz", - "integrity": "sha512-WTcaQ963xV97MN3x0/CbAriXFZcXCfgxVp91I+Ze6pawQOa7SgzwSx2zIJJsX+kTajMnVs0xcFD1TxZKFqhdnQ==", + "version": "12.6.1", + "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", + "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", "dev": true, "requires": { "@sindresorhus/is": "^5.2.0", @@ -23465,9 +23324,9 @@ } }, "ora": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.0.tgz", - "integrity": "sha512-1/D8uRFY0ay2kgBpmAwmSA404w4OoPVhHMqRqtjvrcK/dnzcEZxMJ+V4DUbyICu8IIVRclHcOf5wlD1tMY4GUQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-6.3.1.tgz", + "integrity": "sha512-ERAyNnZOfqM+Ao3RAvIXkYh5joP220yf59gVe2X/cI6SiCxIdi4c9HZKZD8R6q/RDXEje1THBju6iExiSsgJaQ==", "dev": true, "requires": { "chalk": "^5.0.0", @@ -23524,9 +23383,9 @@ } }, "semver": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.0.tgz", - "integrity": "sha512-+XC0AD/R7Q2mPSRuy2Id0+CGTZ98+8f+KvwirxOKIEyid+XSx6HbC63p+O4IndTHuX5Z+JxQ0TghCkO5Cg/2HA==", + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", + "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -23539,9 +23398,9 @@ "dev": true }, "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { "ansi-regex": "^6.0.1" @@ -23788,9 +23647,9 @@ } }, "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-3.0.0.tgz", + "integrity": "sha512-540WwVDOMxA6dN6We19EcT9sc3hkXPw5mzRNGM3FkdN/vtE9NFvj5lFAPNwUDmJjXidm3v7TC1cTE7t17Ulm1Q==", "dev": true }, "run-parallel": { @@ -24092,24 +23951,32 @@ "dev": true }, "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "dev": true, "requires": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" + }, + "dependencies": { + "ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + } } }, "socks-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", - "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.1.tgz", + "integrity": "sha512-59EjPbbgg8U3x62hhKOFVAmySQUcfRQ4C7Q/D5sEHnZTQRrQlNKINks44DMR1gwXp0p4LaVIeccX2KHTTcHVqQ==", "dev": true, "requires": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "agent-base": "^7.0.1", + "debug": "^4.3.4", + "socks": "^2.7.1" } }, "source-map": { @@ -24889,9 +24756,9 @@ } }, "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", "dev": true }, "tsutils": { @@ -25212,9 +25079,9 @@ } }, "vm2": { - "version": "3.9.17", - "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.17.tgz", - "integrity": "sha512-AqwtCnZ/ERcX+AVj9vUsphY56YANXxRuqMb7GsDtAr0m0PcQX3u0Aj3KWiXM0YAHy7i6JEeHrwOnwXbGYgRpAw==", + "version": "3.9.19", + "resolved": "https://registry.npmjs.org/vm2/-/vm2-3.9.19.tgz", + "integrity": "sha512-J637XF0DHDMV57R6JyVsTak7nIL8gy5KH4r1HiwWLf/4GBbb5MKL5y7LpmF4A8E2nR6XmzpmMFQ7V7ppPTmUQg==", "dev": true, "requires": { "acorn": "^8.7.0", @@ -25222,9 +25089,9 @@ }, "dependencies": { "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "dev": true } } @@ -25862,12 +25729,6 @@ "xhr-request": "^1.1.0" } }, - "xregexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-2.0.0.tgz", - "integrity": "sha1-UqY+VsoLhKfzpfPWGHLxJq16WUM=", - "dev": true - }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 6b63dde..22d6365 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ocean-subgraph", - "version": "3.0.7", + "version": "3.0.8", "scripts": { "start": "", "quickstart:development": "node ./scripts/generatenetworkssubgraphs.js development && npm run codegen && npm run create:local && npm run deploy:local", @@ -33,6 +33,8 @@ "test-df": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/DFRewards.test.ts'", "test-dt": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/Datatoken.test.ts'", "test-zend": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/ZEnding.test.ts'", + "test-publish-consume": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/SimplePublishConsume.test.ts'", + "test-nft": "TS_NODE_PROJECT='test/integration/tsconfig.json' mocha --config=test/integration/.mocharc.json --node-env=test --exit 'test/integration/Nft.test.ts'", "lint": "eslint --ignore-path .gitignore --ext .js --ext .ts --ext .tsx .", "lint:fix": "eslint --ignore-path .gitignore --ext .js,.ts,.tsx . --fix", "format": "prettier --ignore-path .gitignore './**/*.{css,yml,js,ts,tsx,json,yaml}' --write", @@ -43,7 +45,7 @@ }, "devDependencies": { "@graphprotocol/graph-cli": "^0.38.0", - "@graphprotocol/graph-ts": "^0.29.3", + "@graphprotocol/graph-ts": "^0.30.0", "@types/chai": "^4.3.5", "@types/chai-spies": "^1.0.3", "@types/mocha": "^10.0.1", @@ -60,9 +62,9 @@ "eslint-plugin-prettier": "^4.2.1", "eslint-plugin-standard": "^5.0.0", "mocha": "^10.2.0", - "mock-local-storage": "^1.1.23", + "mock-local-storage": "^1.1.24", "prettier": "^2.8.8", - "release-it": "^15.10.2", + "release-it": "^15.11.0", "source-map-support": "^0.5.21", "ts-node": "^10.9.1", "ts-node-dev": "^2.0.0", @@ -72,7 +74,8 @@ "dependencies": { "@oceanprotocol/contracts": "^1.1.12", "@oceanprotocol/lib": "^2.7.0", - "cross-fetch": "^3.1.4" + "cross-fetch": "^3.1.6", + "ethereumjs-util": "^7.1.5" }, "repository": { "type": "git", diff --git a/schema.graphql b/schema.graphql index cfb3b93..5e68073 100644 --- a/schema.graphql +++ b/schema.graphql @@ -52,7 +52,7 @@ type Token @entity { "datatoken creation transaction id" tx: String! - + eventIndex: Int! "block number when it was created" block: Int! @@ -105,6 +105,7 @@ type Nft @entity{ createdTimestamp: Int! "nft creation transaction id" tx: String! + eventIndex: Int! "block number when it was created" block: Int @@ -132,6 +133,7 @@ type OrderReuse @entity { caller: String! createdTimestamp: Int! tx: String! + eventIndex: Int! block: Int! providerFee: String providerFeeValidUntil: BigInt @@ -141,7 +143,7 @@ type OrderReuse @entity { } type Order @entity { - "transaction hash - token address - from address" + "transaction hash - token address - from address - eventIndex" id: ID! datatoken: Token! @@ -167,6 +169,7 @@ type Order @entity { createdTimestamp: Int! tx: String! + eventIndex: Int! block: Int! lastPriceToken: Token @@ -220,6 +223,7 @@ type FixedRateExchange @entity { createdTimestamp: Int! tx: String! + eventIndex: Int! block: Int! "address of the market where the datatoken was created. This address collects market fees." @@ -246,6 +250,7 @@ type FixedRateExchangeUpdate @entity { block: Int! createdTimestamp: Int! tx: String! + eventIndex: Int! } type FixedRateExchangeSwap @entity { @@ -257,6 +262,7 @@ type FixedRateExchangeSwap @entity { block: Int! createdTimestamp: Int! tx: String! + eventIndex: Int! oceanFeeAmount: BigDecimal! marketFeeAmount: BigDecimal! consumeMarketFeeAmount: BigDecimal! @@ -285,7 +291,8 @@ type Dispenser @entity { block: Int! createdTimestamp: Int! tx: String! - + eventIndex: Int! + dispenses: [DispenserTransaction!] @derivedFrom(field: "dispenser") } @@ -298,6 +305,7 @@ type DispenserTransaction @entity { block: Int! createdTimestamp: Int! tx: String! + eventIndex: Int! } "utility type" @@ -385,6 +393,7 @@ type NftUpdate @entity { block: Int! timestamp: Int! tx: String! + eventIndex: Int! } type Template @entity{ @@ -406,6 +415,7 @@ type VeAllocateUser @entity{ firstContact: Int! lastContact: Int! tx: String! + eventIndex: Int! veOcean: VeOCEAN! } @@ -422,6 +432,7 @@ type VeAllocateId @entity{ firstContact: Int! lastContact: Int! tx: String! + eventIndex: Int! } # we need to track allocation of user to id @@ -441,6 +452,7 @@ type VeAllocation @entity { firstContact: Int! lastContact: Int! tx: String! + eventIndex: Int! } enum veAllocationUpdateType { @@ -449,7 +461,7 @@ enum veAllocationUpdateType { } type VeAllocationUpdate @entity { - "{tx}-{VeAllocation id}" + "{tx}-{VeAllocation id}-{eventIndex}" id: ID! veAllocation: VeAllocation! @@ -459,15 +471,18 @@ type VeAllocationUpdate @entity { block: Int! timestamp: Int! tx: String! + eventIndex: Int! } type VeDelegation @entity { - "id = VeDelegation contract + tokenId" + "id = VeDelegation contract + tokenId" id: ID! delegator: VeOCEAN! receiver: VeOCEAN! tokenId: BigInt! amount: BigDecimal! + lockedAmount: BigDecimal! + timeLeftUnlock: Int! cancelTime: BigInt! expireTime: BigInt! updates: [VeDelegationUpdate!] @derivedFrom(field: "veDelegation") @@ -480,6 +495,7 @@ type VeDelegationUpdate @entity { block: Int! timestamp: Int! tx: String! + eventIndex: Int! sender: String! amount: BigDecimal! cancelTime: BigInt! @@ -521,6 +537,7 @@ type VeDeposit @entity { timestamp: BigInt! block: Int! tx: String! + eventIndex: Int! veOcean: VeOCEAN! totalOceanLocked:BigDecimal! } @@ -546,6 +563,7 @@ type VeFeeDistributorCheckPoint @entity { timestamp: BigInt! block: Int! tx: String! + eventIndex: Int! } type VeClaim @entity { @@ -560,6 +578,7 @@ type VeClaim @entity { timestamp: BigInt! block: Int! tx: String! + eventIndex: Int! veOcean: VeOCEAN! VeFeeDistributor: VeFeeDistributor! } @@ -588,6 +607,7 @@ type DFHistory @entity { timestamp: BigInt! block: Int! tx: String! + eventIndex: Int! } @@ -606,7 +626,7 @@ type NftTransferHistory @entity { oldOwner: User! newOwner: User! txId: String + eventIndex: Int! timestamp: Int! block: Int! } - diff --git a/src/mappings/dfRewards.ts b/src/mappings/dfRewards.ts index 83d4059..3778895 100644 --- a/src/mappings/dfRewards.ts +++ b/src/mappings/dfRewards.ts @@ -26,6 +26,7 @@ export function handleAllocated(event: Allocated): void { history.type = 'Allocated' history.timestamp = event.block.timestamp history.tx = event.transaction.hash.toHex() + history.eventIndex = event.logIndex.toI32() history.block = event.block.number.toI32() history.save() @@ -55,6 +56,7 @@ export function handleClaimed(event: Claimed): void { history.type = 'Claimed' history.timestamp = event.block.timestamp history.tx = event.transaction.hash.toHex() + history.eventIndex = event.logIndex.toI32() history.block = event.block.number.toI32() history.save() diff --git a/src/mappings/dispenser.ts b/src/mappings/dispenser.ts index 20a41b5..555ee74 100644 --- a/src/mappings/dispenser.ts +++ b/src/mappings/dispenser.ts @@ -43,6 +43,7 @@ export function handleNewDispenser(event: DispenserCreated): void { dispenser.allowedSwapper = event.params.allowedSwapper.toHex() dispenser.createdTimestamp = event.block.timestamp.toI32() dispenser.tx = event.transaction.hash.toHex() + dispenser.eventIndex = event.logIndex.toI32() dispenser.block = event.block.number.toI32() dispenser.save() @@ -57,6 +58,7 @@ export function handleActivate(event: DispenserActivated): void { ) const dispenser = getDispenser(dispenserID) dispenser.active = true + dispenser.eventIndex = event.logIndex.toI32() dispenser.save() } @@ -67,6 +69,7 @@ export function handleDeactivate(event: DispenserDeactivated): void { ) const dispenser = getDispenser(dispenserID) dispenser.active = false + dispenser.eventIndex = event.logIndex.toI32() dispenser.save() } @@ -76,6 +79,7 @@ export function handleAllowedSwapperChanged( const dispenserID = getDispenserGraphID(event.address, event.params.datatoken) const dispenser = getDispenser(dispenserID) dispenser.allowedSwapper = event.params.newAllowedSwapper.toHex() + dispenser.eventIndex = event.logIndex.toI32() dispenser.save() } @@ -84,10 +88,8 @@ export function handleTokensDispensed(event: TokensDispensed): void { event.address, event.params.datatokenAddress ) - const id = event.transaction.hash - .toHexString() - .concat('-') - .concat(dispenserID) + const eventIndex: number = event.logIndex.toI32() + const id = `${event.transaction.hash.toHexString()}-${dispenserID}-${eventIndex}` const dispenserTransaction = new DispenserTransaction(id) const dispenser = getDispenser(dispenserID) @@ -98,6 +100,7 @@ export function handleTokensDispensed(event: TokensDispensed): void { dispenserTransaction.createdTimestamp = event.block.timestamp.toI32() dispenserTransaction.tx = event.transaction.hash.toHex() + dispenserTransaction.eventIndex = event.logIndex.toI32() dispenserTransaction.block = event.block.number.toI32() const token = getToken(event.params.datatokenAddress, true) dispenserTransaction.amount = weiToDecimal( @@ -111,5 +114,6 @@ export function handleOwnerWinthdraw(event: OwnerWithdrawed): void { const dispenserID = getDispenserGraphID(event.address, event.params.datatoken) const dispenser = getDispenser(dispenserID) dispenser.balance = decimal.ZERO + dispenser.eventIndex = event.logIndex.toI32() dispenser.save() } diff --git a/src/mappings/erc20Templates.ts b/src/mappings/erc20Templates.ts index 1822283..5bf9dd9 100644 --- a/src/mappings/erc20Templates.ts +++ b/src/mappings/erc20Templates.ts @@ -1,11 +1,12 @@ import { Order, Nft, OrderReuse } from '../@types/schema' -import { BigInt, BigDecimal, Address } from '@graphprotocol/graph-ts' +import { BigInt, BigDecimal, Address, log } from '@graphprotocol/graph-ts' import { NewPaymentCollector, OrderStarted, PublishMarketFee, PublishMarketFeeChanged, + ConsumeMarketFee, AddedMinter, AddedPaymentManager, RemovedMinter, @@ -20,14 +21,19 @@ import { weiToDecimal } from './utils/generic' import { addOrder } from './utils/globalUtils' import { getToken, getUSDValue } from './utils/tokenUtils' import { getUser } from './utils/userUtils' -import { getOrderId } from './utils/orderUtils' +import { + getOrderId, + searchOrderForEvent, + searchOrderReusedForEvent +} from './utils/orderUtils' export function handleOrderStarted(event: OrderStarted): void { const order = new Order( getOrderId( event.transaction.hash.toHex(), event.address.toHex(), - event.transaction.from.toHex() + event.transaction.from.toHex(), + event.logIndex.toI32() ) ) @@ -59,11 +65,9 @@ export function handleOrderStarted(event: OrderStarted): void { const publishMarket = getUser(event.params.publishMarketAddress.toHex()) order.publishingMarket = publishMarket.id - // const consumeMarket = getUser(event.params..toHex()) - // order.consumerMarket = consumeMarket.id - order.createdTimestamp = event.block.timestamp.toI32() order.tx = event.transaction.hash.toHex() + order.eventIndex = event.logIndex.toI32() order.block = event.block.number.toI32() const tokenId = token.lastPriceToken if (tokenId) { @@ -103,33 +107,56 @@ export function handleOrderStarted(event: OrderStarted): void { } export function handlerOrderReused(event: OrderReused): void { - const orderId = getOrderId( + const order = searchOrderForEvent( event.params.orderTxId.toHexString(), event.address.toHex(), - event.params.caller.toHex() + event.params.caller.toHex(), + event.logIndex.toI32() ) - const order = Order.load(orderId) if (!order) return + const eventIndex: number = event.logIndex.toI32() - const reuseOrder = new OrderReuse(event.transaction.hash.toHex()) + const reuseOrder = new OrderReuse( + `${event.transaction.hash.toHex()}-${eventIndex}` + ) if (event.transaction.gasPrice) reuseOrder.gasPrice = event.transaction.gasPrice else reuseOrder.gasPrice = BigInt.zero() if (event.receipt !== null && event.receipt!.gasUsed) { reuseOrder.gasUsed = event.receipt!.gasUsed.toBigDecimal() } else reuseOrder.gasUsed = BigDecimal.zero() - reuseOrder.order = orderId + reuseOrder.order = order.id reuseOrder.caller = event.params.caller.toHexString() reuseOrder.createdTimestamp = event.params.timestamp.toI32() reuseOrder.tx = event.transaction.hash.toHex() + reuseOrder.eventIndex = event.logIndex.toI32() reuseOrder.block = event.params.number.toI32() reuseOrder.save() } -export function handlePublishMarketFee(event: PublishMarketFee): void {} +export function handlePublishMarketFee(event: PublishMarketFee): void { + const order = searchOrderForEvent( + event.transaction.hash.toHex(), + event.address.toHex(), + event.transaction.from.toHex(), + event.logIndex.toI32() + ) + if (!order) return + const publishMarket = getUser(event.params.PublishMarketFeeAddress.toHex()) + order.publishingMarket = publishMarket.id + + const publishMarketToken = getToken(event.params.PublishMarketFeeToken, true) + order.publishingMarketToken = publishMarketToken.id + order.publishingMarketAmmount = weiToDecimal( + event.params.PublishMarketFeeAmount.toBigDecimal(), + publishMarketToken.decimals + ) + + order.save() +} export function handlePublishMarketFeeChanged( event: PublishMarketFeeChanged ): void { @@ -150,10 +177,33 @@ export function handlePublishMarketFeeChanged( event.params.PublishMarketFeeAmount.toBigDecimal(), decimals ) + token.eventIndex = event.logIndex.toI32() token.save() // TODO - shold we have a history } +export function handleConsumeMarketFee(event: ConsumeMarketFee): void { + const order = searchOrderForEvent( + event.transaction.hash.toHex(), + event.address.toHex(), + event.transaction.from.toHex(), + event.logIndex.toI32() + ) + + if (!order) return + const consumeMarket = getUser(event.params.consumeMarketFeeAddress.toHex()) + order.consumerMarket = consumeMarket.id + + const consumeMarketToken = getToken(event.params.consumeMarketFeeToken, false) + order.consumerMarketToken = consumeMarketToken.id + order.consumerMarketAmmount = weiToDecimal( + event.params.consumeMarketFeeAmount.toBigDecimal(), + consumeMarketToken.decimals + ) + + order.save() +} + // roles // roles export function handleAddedMinter(event: AddedMinter): void { @@ -164,6 +214,7 @@ export function handleAddedMinter(event: AddedMinter): void { if (!existingRoles.includes(event.params.user.toHexString())) existingRoles.push(event.params.user.toHexString()) token.minter = existingRoles + token.eventIndex = event.logIndex.toI32() token.save() } @@ -180,6 +231,7 @@ export function handleRemovedMinter(event: RemovedMinter): void { if (role !== event.params.user.toHexString()) newList.push(role) } token.minter = newList + token.eventIndex = event.logIndex.toI32() token.save() } @@ -191,6 +243,7 @@ export function handleAddedPaymentManager(event: AddedPaymentManager): void { if (!existingRoles.includes(event.params.user.toHexString())) existingRoles.push(event.params.user.toHexString()) token.paymentManager = existingRoles + token.eventIndex = event.logIndex.toI32() token.save() } export function handleRemovedPaymentManager( @@ -208,6 +261,7 @@ export function handleRemovedPaymentManager( if (role !== event.params.user.toHexString()) newList.push(role) } token.paymentManager = newList + token.eventIndex = event.logIndex.toI32() token.save() } export function handleCleanedPermissions(event: CleanedPermissions): void { @@ -218,12 +272,14 @@ export function handleCleanedPermissions(event: CleanedPermissions): void { const nft = Nft.load(token.nft as string) if (nft) token.paymentCollector = nft.owner else token.paymentCollector = '0x0000000000000000000000000000000000000000' + token.eventIndex = event.logIndex.toI32() token.save() } export function handleNewPaymentCollector(event: NewPaymentCollector): void { const token = getToken(event.address, true) token.paymentCollector = event.params._newPaymentCollector.toHexString() + token.eventIndex = event.logIndex.toI32() token.save() } @@ -236,12 +292,12 @@ export function handleProviderFee(event: ProviderFee): void { event.params.validUntil }"}` - const orderId = getOrderId( + const order = searchOrderForEvent( event.transaction.hash.toHex(), event.address.toHex(), - event.transaction.from.toHex() + event.transaction.from.toHex(), + event.logIndex.toI32() ) - const order = Order.load(orderId) if (order) { order.providerFee = providerFee @@ -249,27 +305,15 @@ export function handleProviderFee(event: ProviderFee): void { order.save() return } - - let orderReuse = OrderReuse.load(event.transaction.hash.toHex()) + const orderReuse = searchOrderReusedForEvent( + event.transaction.hash.toHex(), + event.address.toHex(), + event.logIndex.toI32() + ) if (orderReuse) { + log.info('order reuse id in provider fee handler: {}', [orderReuse.id]) orderReuse.providerFee = providerFee orderReuse.providerFeeValidUntil = event.params.validUntil orderReuse.save() - } else { - orderReuse = new OrderReuse(event.transaction.hash.toHex()) - orderReuse.providerFee = providerFee - orderReuse.providerFeeValidUntil = event.params.validUntil - orderReuse.order = orderId - orderReuse.createdTimestamp = event.block.timestamp.toI32() - orderReuse.tx = event.transaction.hash.toHex() - orderReuse.block = event.block.number.toI32() - orderReuse.caller = event.transaction.from.toHex() - if (event.transaction.gasPrice) - orderReuse.gasPrice = event.transaction.gasPrice - else orderReuse.gasPrice = BigInt.zero() - if (event.receipt !== null && event.receipt!.gasUsed) { - orderReuse.gasUsed = event.receipt!.gasUsed.toBigDecimal() - } else orderReuse.gasUsed = BigDecimal.zero() - orderReuse.save() } } diff --git a/src/mappings/erc721Factory.ts b/src/mappings/erc721Factory.ts index 92cc746..7b54a15 100644 --- a/src/mappings/erc721Factory.ts +++ b/src/mappings/erc721Factory.ts @@ -25,6 +25,7 @@ export function handleNftCreated(event: NFTCreated): void { nft.createdTimestamp = event.block.timestamp.toI32() nft.tx = event.transaction.hash.toHex() nft.block = event.block.number.toI32() + nft.eventIndex = event.logIndex.toI32() nft.transferable = event.params.transferable nft.save() @@ -39,6 +40,7 @@ export function handleNewToken(event: TokenCreated): void { token.createdTimestamp = event.block.timestamp.toI32() token.tx = event.transaction.hash.toHex() token.block = event.block.number.toI32() + token.eventIndex = event.logIndex.toI32() token.nft = event.params.creator.toHexString() diff --git a/src/mappings/fixedRateExchange.ts b/src/mappings/fixedRateExchange.ts index 7c62a49..df2e84f 100644 --- a/src/mappings/fixedRateExchange.ts +++ b/src/mappings/fixedRateExchange.ts @@ -51,6 +51,7 @@ export function handleExchangeCreated(event: ExchangeCreated): void { ) fixedRateExchange.createdTimestamp = event.block.timestamp.toI32() fixedRateExchange.tx = event.transaction.hash.toHex() + fixedRateExchange.eventIndex = event.logIndex.toI32() fixedRateExchange.block = event.block.number.toI32() fixedRateExchange.save() @@ -64,12 +65,14 @@ export function handleRateChange(event: ExchangeRateChanged): void { event.address ) const fixedRateExchange = getFixedRateExchange(fixedRateId) + const eventIndex: number = event.logIndex.toI32() const newExchangeUpdate = new FixedRateExchangeUpdate( - getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId) + getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId, eventIndex) ) newExchangeUpdate.oldPrice = fixedRateExchange.price newExchangeUpdate.createdTimestamp = event.block.timestamp.toI32() newExchangeUpdate.tx = event.transaction.hash.toHex() + newExchangeUpdate.eventIndex = event.logIndex.toI32() newExchangeUpdate.block = event.block.number.toI32() newExchangeUpdate.exchangeId = fixedRateId const baseToken = getToken( @@ -94,6 +97,7 @@ export function handleMintStateChanged(event: ExchangeMintStateChanged): void { ) const fixedRateExchange = getFixedRateExchange(fixedRateId) fixedRateExchange.withMint = event.params.withMint + fixedRateExchange.eventIndex = event.logIndex.toI32() fixedRateExchange.save() } @@ -103,14 +107,16 @@ export function handleActivated(event: ExchangeActivated): void { event.address ) const fixedRateExchange = getFixedRateExchange(fixedRateId) + const eventIndex: number = event.logIndex.toI32() const newExchangeUpdate = new FixedRateExchangeUpdate( - getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId) + getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId, eventIndex) ) newExchangeUpdate.exchangeId = fixedRateId newExchangeUpdate.oldActive = fixedRateExchange.active newExchangeUpdate.newActive = true newExchangeUpdate.createdTimestamp = event.block.timestamp.toI32() newExchangeUpdate.tx = event.transaction.hash.toHex() + newExchangeUpdate.eventIndex = event.logIndex.toI32() newExchangeUpdate.block = event.block.number.toI32() fixedRateExchange.active = true @@ -125,8 +131,9 @@ export function handleDeactivated(event: ExchangeDeactivated): void { event.address ) const fixedRateExchange = getFixedRateExchange(fixedRateId) + const eventIndex: number = event.logIndex.toI32() const newExchangeUpdate = new FixedRateExchangeUpdate( - getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId) + getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId, eventIndex) ) newExchangeUpdate.oldActive = fixedRateExchange.active newExchangeUpdate.newActive = false @@ -134,6 +141,7 @@ export function handleDeactivated(event: ExchangeDeactivated): void { newExchangeUpdate.exchangeId = fixedRateId newExchangeUpdate.createdTimestamp = event.block.timestamp.toI32() newExchangeUpdate.tx = event.transaction.hash.toHex() + newExchangeUpdate.eventIndex = event.logIndex.toI32() newExchangeUpdate.block = event.block.number.toI32() fixedRateExchange.active = false @@ -149,11 +157,13 @@ export function handleAllowedSwapperChanged( event.address ) const fixedRateExchange = getFixedRateExchange(fixedRateId) + const eventIndex: number = event.logIndex.toI32() const newExchangeUpdate = new FixedRateExchangeUpdate( - getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId) + getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId, eventIndex) ) newExchangeUpdate.createdTimestamp = event.block.timestamp.toI32() newExchangeUpdate.tx = event.transaction.hash.toHex() + newExchangeUpdate.eventIndex = event.logIndex.toI32() newExchangeUpdate.block = event.block.number.toI32() newExchangeUpdate.oldAllowedSwapper = fixedRateExchange.allowedSwapper newExchangeUpdate.exchangeId = fixedRateId @@ -170,12 +180,13 @@ export function handleSwap(event: Swapped): void { event.address ) const fixedRateExchange = getFixedRateExchange(fixedRateId) - + const eventIndex: number = event.logIndex.toI32() const swap = new FixedRateExchangeSwap( - getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId) + getUpdateOrSwapId(event.transaction.hash.toHex(), fixedRateId, eventIndex) ) swap.createdTimestamp = event.block.timestamp.toI32() swap.tx = event.transaction.hash.toHex() + swap.eventIndex = event.logIndex.toI32() swap.block = event.block.number.toI32() swap.exchangeId = fixedRateId @@ -249,7 +260,7 @@ export function handlePublishMarketFeeChanged( if (fixedRateExchange) { const feeToken = getToken( - Address.fromString(fixedRateExchange.publishMarketFeeAddress), + Address.fromString(fixedRateExchange!.publishMarketFeeAddress!), false ) const feeDecimals = BigInt.fromI32(feeToken.decimals).toI32() @@ -260,6 +271,7 @@ export function handlePublishMarketFeeChanged( event.params.swapFee.toBigDecimal(), feeDecimals ) + fixedRateExchange.eventIndex = event.logIndex.toI32() fixedRateExchange.save() } } @@ -277,7 +289,7 @@ export function handleTokenCollected(event: TokenCollected): void { fixedRateExchange.baseTokenBalance.minus( weiToDecimal(event.params.amount.toBigDecimal(), baseToken.decimals) ) - + fixedRateExchange.eventIndex = event.logIndex.toI32() fixedRateExchange.save() } } diff --git a/src/mappings/nftUpdate.ts b/src/mappings/nftUpdate.ts index 60c1ac4..ef76f82 100644 --- a/src/mappings/nftUpdate.ts +++ b/src/mappings/nftUpdate.ts @@ -20,8 +20,8 @@ import { NftUpdateType } from './utils/constants' import { getNftToken, getNftTokenWithID } from './utils/tokenUtils' import { getUser } from './utils/userUtils' -function getId(tx: string, nftAddress: string): string { - return `${tx}-${nftAddress}` +function getId(tx: string, nftAddress: string, eventIndex: number): string { + return `${tx}-${nftAddress}-${eventIndex}` } export function handleMetadataCreated(event: MetadataCreated): void { @@ -33,8 +33,9 @@ export function handleMetadataCreated(event: MetadataCreated): void { nft.providerUrl = event.params.decryptorUrl.toString() nft.hasMetadata = true + const eventIndex: number = event.logIndex.toI32() const nftUpdate = new NftUpdate( - getId(event.transaction.hash.toHex(), nftAddress) + getId(event.transaction.hash.toHex(), nftAddress, eventIndex) ) nftUpdate.type = NftUpdateType.METADATA_CREATED @@ -47,6 +48,7 @@ export function handleMetadataCreated(event: MetadataCreated): void { nftUpdate.timestamp = event.block.timestamp.toI32() nftUpdate.tx = event.transaction.hash.toHex() + nftUpdate.eventIndex = event.logIndex.toI32() nftUpdate.block = event.block.number.toI32() nftUpdate.save() @@ -60,8 +62,9 @@ export function handleMetadataUpdated(event: MetadataUpdated): void { nft.assetState = event.params.state nft.hasMetadata = true + const eventIndex: number = event.logIndex.toI32() const nftUpdate = new NftUpdate( - getId(event.transaction.hash.toHex(), nftAddress) + getId(event.transaction.hash.toHex(), nftAddress, eventIndex) ) nftUpdate.nft = nft.id @@ -71,6 +74,7 @@ export function handleMetadataUpdated(event: MetadataUpdated): void { nftUpdate.timestamp = event.block.timestamp.toI32() nftUpdate.tx = event.transaction.hash.toHex() + nftUpdate.eventIndex = event.logIndex.toI32() nftUpdate.block = event.block.number.toI32() nftUpdate.save() @@ -83,9 +87,9 @@ export function handleMetadataState(event: MetadataState): void { if (!nft) return nft.assetState = event.params.state - + const eventIndex: number = event.logIndex.toI32() const nftUpdate = new NftUpdate( - getId(event.transaction.hash.toHex(), nftAddress) + getId(event.transaction.hash.toHex(), nftAddress, eventIndex) ) nftUpdate.nft = nft.id @@ -95,6 +99,7 @@ export function handleMetadataState(event: MetadataState): void { nftUpdate.timestamp = event.block.timestamp.toI32() nftUpdate.tx = event.transaction.hash.toHex() + nftUpdate.eventIndex = event.logIndex.toI32() nftUpdate.block = event.block.number.toI32() nftUpdate.save() @@ -108,9 +113,9 @@ export function handleTokenUriUpdate(event: TokenURIUpdate): void { if (!nft) return nft.tokenUri = event.params.tokenURI.toString() - + const eventIndex: number = event.logIndex.toI32() const nftUpdate = new NftUpdate( - getId(event.transaction.hash.toHex(), nftAddress) + getId(event.transaction.hash.toHex(), nftAddress, eventIndex) ) nftUpdate.nft = nft.id nftUpdate.type = NftUpdateType.TOKENURI_UPDATED @@ -118,6 +123,7 @@ export function handleTokenUriUpdate(event: TokenURIUpdate): void { nftUpdate.tokenUri = nft.tokenUri nftUpdate.timestamp = event.block.timestamp.toI32() nftUpdate.tx = event.transaction.hash.toHex() + nftUpdate.eventIndex = event.logIndex.toI32() nftUpdate.block = event.block.number.toI32() nftUpdate.assetState = nft.assetState nftUpdate.save() @@ -133,6 +139,7 @@ export function handleAddedManager(event: AddedManager): void { if (!existingRoles.includes(event.params.user.toHexString())) existingRoles.push(event.params.user.toHexString()) nft.managerRole = existingRoles + nft.eventIndex = event.logIndex.toI32() nft.save() } export function handleRemovedManager(event: RemovedManager): void { @@ -148,6 +155,7 @@ export function handleRemovedManager(event: RemovedManager): void { if (role !== event.params.user.toHexString()) newList.push(role) } nft.managerRole = newList + nft.eventIndex = event.logIndex.toI32() nft.save() } @@ -160,6 +168,7 @@ export function handleAddedTo725StoreList(event: AddedTo725StoreList): void { if (!existingRoles.includes(event.params.user.toHexString())) existingRoles.push(event.params.user.toHexString()) nft.storeUpdateRole = existingRoles + nft.eventIndex = event.logIndex.toI32() nft.save() } @@ -178,6 +187,7 @@ export function handleRemovedFrom725StoreList( if (role !== event.params.user.toHexString()) newList.push(role) } nft.storeUpdateRole = newList + nft.eventIndex = event.logIndex.toI32() nft.save() } @@ -192,6 +202,7 @@ export function handleAddedToCreateERC20List( if (!existingRoles.includes(event.params.user.toHexString())) existingRoles.push(event.params.user.toHexString()) nft.erc20DeployerRole = existingRoles + nft.eventIndex = event.logIndex.toI32() nft.save() } @@ -210,6 +221,7 @@ export function handleRemovedFromCreateERC20List( if (role !== event.params.user.toHexString()) newList.push(role) } nft.erc20DeployerRole = newList + nft.eventIndex = event.logIndex.toI32() nft.save() } @@ -222,6 +234,7 @@ export function handleAddedToMetadataList(event: AddedToMetadataList): void { if (!existingRoles.includes(event.params.user.toHexString())) existingRoles.push(event.params.user.toHexString()) nft.metadataRole = existingRoles + nft.eventIndex = event.logIndex.toI32() nft.save() } @@ -240,6 +253,7 @@ export function handleRemovedFromMetadataList( if (role !== event.params.user.toHexString()) newList.push(role) } nft.metadataRole = newList + nft.eventIndex = event.logIndex.toI32() nft.save() } @@ -250,6 +264,7 @@ export function handleCleanedPermissions(event: CleanedPermissions): void { nft.erc20DeployerRole = newList nft.storeUpdateRole = newList nft.managerRole = newList + nft.eventIndex = event.logIndex.toI32() nft.save() } @@ -260,15 +275,16 @@ export function handleNftTransferred(event: Transfer): void { const newOwner = getUser(event.params.to.toHexString()) nft.owner = newOwner.id nft.save() - - const transferId = `${nft.address}-${event.transaction.hash.toHex()}-${ - event.logIndex - }` + const eventIndex: number = event.logIndex.toI32() + const transferId = `${ + nft.address + }-${event.transaction.hash.toHex()}-${eventIndex}` const newTransfer = new NftTransferHistory(transferId) newTransfer.oldOwner = oldOwner newTransfer.nft = nft.id newTransfer.newOwner = newOwner.id newTransfer.txId = event.transaction.hash.toHex() + newTransfer.eventIndex = event.logIndex.toI32() newTransfer.timestamp = event.block.timestamp.toI32() newTransfer.block = event.block.number.toI32() newTransfer.save() diff --git a/src/mappings/utils/fixedRateUtils.ts b/src/mappings/utils/fixedRateUtils.ts index b4160a7..b81fa85 100644 --- a/src/mappings/utils/fixedRateUtils.ts +++ b/src/mappings/utils/fixedRateUtils.ts @@ -57,7 +57,8 @@ export function updateFixedRateExchangeSupply( export function getUpdateOrSwapId( txAddress: string, - exchangeId: string + exchangeId: string, + eventIndex: number ): string { - return `${txAddress}-${exchangeId}` + return `${txAddress}-${exchangeId}-${eventIndex}` } diff --git a/src/mappings/utils/globalUtils.ts b/src/mappings/utils/globalUtils.ts index ccc65b9..cd4a0f4 100644 --- a/src/mappings/utils/globalUtils.ts +++ b/src/mappings/utils/globalUtils.ts @@ -13,7 +13,7 @@ export function getGlobalStats(): GlobalStatistic { let globalStats = GlobalStatistic.load(GLOBAL_ID) if (!globalStats) { globalStats = new GlobalStatistic(GLOBAL_ID) - globalStats.version = '3.0.7' + globalStats.version = '3.0.8' globalStats.orderCount = 0 globalStats.fixedCount = 0 globalStats.datatokenCount = 0 diff --git a/src/mappings/utils/orderUtils.ts b/src/mappings/utils/orderUtils.ts index 497833d..f868d5b 100644 --- a/src/mappings/utils/orderUtils.ts +++ b/src/mappings/utils/orderUtils.ts @@ -1,11 +1,12 @@ -import { Order } from '../../@types/schema' +import { Order, OrderReuse } from '../../@types/schema' export function getOrderId( tx: string, tokenAddress: string, - fromAddress: string + fromAddress: string, + eventIndex: number ): string { - return `${tx}-${tokenAddress}-${fromAddress}` + return `${tx}-${tokenAddress}-${fromAddress}-${eventIndex}` } export function createOrder(orderId: string): Order { @@ -16,12 +17,53 @@ export function createOrder(orderId: string): Order { export function getOrder( transactionHash: string, address: string, - transactionFrom: string + transactionFrom: string, + eventIndex: number ): Order { - const orderId = getOrderId(transactionHash, address, transactionFrom) + const orderId = getOrderId( + transactionHash, + address, + transactionFrom, + eventIndex + ) let newOrder = Order.load(orderId) if (newOrder === null) { newOrder = createOrder(orderId) } return newOrder } + +export function searchOrderForEvent( + transactionHash: string, + address: string, + transactionFrom: string, + eventIndex: number +): Order | null { + for (let i = eventIndex; i >= 0; i--) { + const orderId = getOrderId(transactionHash, address, transactionFrom, i) + const order = Order.load(orderId) + if (order && order.datatoken == address) { + return order + } + } + return null +} + +export function searchOrderReusedForEvent( + transactionHash: string, + eventAddress: string, + eventIndex: number +): OrderReuse | null { + for (let i = eventIndex; i >= 0; i--) { + const orderReused = OrderReuse.load(`${transactionHash}-${i}`) + if (!orderReused) { + continue + } + const order = Order.load(orderReused.order) + + if (order && order.datatoken == eventAddress) { + return orderReused + } + } + return null +} diff --git a/src/mappings/utils/tokenUtils.ts b/src/mappings/utils/tokenUtils.ts index 98d574b..387ff48 100644 --- a/src/mappings/utils/tokenUtils.ts +++ b/src/mappings/utils/tokenUtils.ts @@ -30,6 +30,7 @@ export function createToken(address: Address, isDatatoken: boolean): Token { token.createdTimestamp = 0 token.block = 0 token.tx = '' + token.eventIndex = 0 token.save() return token } @@ -60,6 +61,7 @@ export function createNftToken(address: Address): Nft { token.tx = '' token.orderCount = BigInt.zero() token.hasMetadata = false + token.eventIndex = 0 token.save() addNft() return token @@ -93,6 +95,7 @@ export function getNftTokenWithID(tokenId: string): Nft { nftToken.tx = '' nftToken.orderCount = BigInt.zero() nftToken.hasMetadata = false + nftToken.eventIndex = 0 nftToken.save() addNft() } diff --git a/src/mappings/utils/veUtils.ts b/src/mappings/utils/veUtils.ts index 792e7cf..8d89577 100644 --- a/src/mappings/utils/veUtils.ts +++ b/src/mappings/utils/veUtils.ts @@ -38,6 +38,7 @@ export function getveAllocateUser( allocateUser.firstContact = event.block.timestamp.toI32() allocateUser.tx = event.transaction.hash.toHex() + allocateUser.eventIndex = event.logIndex.toI32() allocateUser.block = event.block.number.toI32() allocateUser.lastContact = 0 const veOcean = getveOCEAN(sender) @@ -60,6 +61,7 @@ export function getveAllocateId( allocateId.firstContact = event.block.timestamp.toI32() allocateId.tx = event.transaction.hash.toHex() + allocateId.eventIndex = event.logIndex.toI32() allocateId.block = event.block.number.toI32() allocateId.lastContact = 0 allocateId.chainId = BigInt.zero() @@ -87,6 +89,7 @@ export function getveAllocation( veAllocation.firstContact = event.block.timestamp.toI32() veAllocation.tx = event.transaction.hash.toHex() + veAllocation.eventIndex = event.logIndex.toI32() veAllocation.block = event.block.number.toI32() veAllocation.lastContact = 0 @@ -103,16 +106,17 @@ export function writeveAllocationUpdate( allocationType: string, amount: BigDecimal ): VeAllocationUpdate { - const tx = event.transaction.hash.toHex() - let allocationUpdate = VeAllocationUpdate.load(tx + '-' + veAllocationId) + const id = `${event.transaction.hash.toHex()}-${veAllocationId}-${event.logIndex.toString()}` + let allocationUpdate = VeAllocationUpdate.load(id) if (allocationUpdate === null) { - allocationUpdate = new VeAllocationUpdate(tx + '-' + veAllocationId) + allocationUpdate = new VeAllocationUpdate(id) allocationUpdate.veAllocation = veAllocationId allocationUpdate.type = allocationType allocationUpdate.allocatedTotal = amount allocationUpdate.timestamp = event.block.timestamp.toI32() allocationUpdate.tx = event.transaction.hash.toHex() + allocationUpdate.eventIndex = event.logIndex.toI32() allocationUpdate.block = event.block.number.toI32() allocationUpdate.save() @@ -136,14 +140,14 @@ export function getveDelegation( veDelegation.amount = BigDecimal.zero() veDelegation.receiver = '' veDelegation.delegator = '' + veDelegation.lockedAmount = BigDecimal.zero() + veDelegation.timeLeftUnlock = 0 veDelegation.save() } return veDelegation } - export function getDeposit(id: string): VeDeposit { let deposit = VeDeposit.load(id) - if (deposit === null) { deposit = new VeDeposit(id) deposit.provider = '' @@ -153,6 +157,7 @@ export function getDeposit(id: string): VeDeposit { deposit.type = BigInt.zero() deposit.timestamp = BigInt.zero() deposit.tx = '' + deposit.eventIndex = 0 deposit.block = 0 // do not save it // deposit.save() diff --git a/src/mappings/veDelegation.ts b/src/mappings/veDelegation.ts index 3362ff4..e2ecb96 100644 --- a/src/mappings/veDelegation.ts +++ b/src/mappings/veDelegation.ts @@ -18,9 +18,10 @@ export function handleDelegation(event: DelegateBoost): void { const _expireTime = event.params._expire_time // create veOcean if does not exists getveOCEAN(_receiver) - getveOCEAN(_delegator) - + const delegator = getveOCEAN(_delegator) const veDelegation = getveDelegation(event.address, _tokenId.toHex()) + const ts = event.block.timestamp.toI32() + veDelegation.delegator = _delegator veDelegation.receiver = _receiver veDelegation.tokenId = _tokenId @@ -28,6 +29,8 @@ export function handleDelegation(event: DelegateBoost): void { _amount.toBigDecimal(), BigInt.fromI32(18).toI32() ) + veDelegation.lockedAmount = delegator.lockedAmount + veDelegation.timeLeftUnlock = delegator.unlockTime.toI32() - ts veDelegation.cancelTime = _cancelTime veDelegation.expireTime = _expireTime veDelegation.save() @@ -40,6 +43,7 @@ export function handleDelegation(event: DelegateBoost): void { veDelegationUpdate.block = event.block.number.toI32() veDelegationUpdate.timestamp = event.block.timestamp.toI32() veDelegationUpdate.tx = event.transaction.hash.toHex() + veDelegationUpdate.eventIndex = event.logIndex.toI32() veDelegationUpdate.amount = veDelegation.amount veDelegationUpdate.cancelTime = _cancelTime veDelegationUpdate.expireTime = _expireTime @@ -79,6 +83,7 @@ export function handleExtendBoost(event: ExtendBoost): void { veDelegationUpdate.block = event.block.number.toI32() veDelegationUpdate.timestamp = event.block.timestamp.toI32() veDelegationUpdate.tx = event.transaction.hash.toHex() + veDelegationUpdate.eventIndex = event.logIndex.toI32() veDelegationUpdate.amount = veDelegation.amount veDelegationUpdate.cancelTime = _cancelTime veDelegationUpdate.expireTime = _expireTime @@ -111,6 +116,7 @@ export function handleBurnBoost(event: BurnBoost): void { veDelegationUpdate.block = event.block.number.toI32() veDelegationUpdate.timestamp = event.block.timestamp.toI32() veDelegationUpdate.tx = event.transaction.hash.toHex() + veDelegationUpdate.eventIndex = event.logIndex.toI32() veDelegationUpdate.amount = veDelegation.amount veDelegationUpdate.cancelTime = veDelegation.cancelTime veDelegationUpdate.expireTime = veDelegation.expireTime diff --git a/src/mappings/veFeeDistributor.ts b/src/mappings/veFeeDistributor.ts index 7b5b9ac..792fc75 100644 --- a/src/mappings/veFeeDistributor.ts +++ b/src/mappings/veFeeDistributor.ts @@ -27,6 +27,7 @@ export function handleClaimed(event: Claimed): void { claim.block = event.block.number.toI32() claim.tx = event.transaction.hash.toHex() + claim.eventIndex = event.logIndex.toI32() claim.timestamp = event.block.timestamp claim.save() } @@ -44,6 +45,7 @@ export function handleCheckpoint(event: CheckpointToken): void { checkpoint.sender = event.transaction.from.toHexString() checkpoint.block = event.block.number.toI32() checkpoint.tx = event.transaction.hash.toHex() + checkpoint.eventIndex = event.logIndex.toI32() checkpoint.timestamp = event.params.time checkpoint.VeFeeDistributor = distributor.id checkpoint.save() diff --git a/src/mappings/veOCEAN.ts b/src/mappings/veOCEAN.ts index 2534419..601278e 100644 --- a/src/mappings/veOCEAN.ts +++ b/src/mappings/veOCEAN.ts @@ -68,6 +68,7 @@ export function handleWithdraw(event: Withdraw): void { deposit.timestamp = ts deposit.block = event.block.number.toI32() deposit.tx = event.transaction.hash.toHex() + deposit.eventIndex = event.logIndex.toI32() deposit.sender = event.transaction.from.toHex() deposit.veOcean = veOCEAN.id deposit.totalOceanLocked = totalOceanLocked.plus(deposit.value) // it's already negated above diff --git a/subgraph.template.yaml b/subgraph.template.yaml index 490c677..aff14de 100644 --- a/subgraph.template.yaml +++ b/subgraph.template.yaml @@ -38,6 +38,8 @@ templates: handler: handlePublishMarketFee - event: PublishMarketFeeChanged(address,address,address,uint256) handler: handlePublishMarketFeeChanged + - event: ConsumeMarketFee(indexed address,indexed address,uint256) + handler: handleConsumeMarketFee - event: AddedMinter(indexed address,indexed address,uint256,uint256) handler: handleAddedMinter - event: AddedPaymentManager(indexed address,indexed address,uint256,uint256) diff --git a/test/integration/DFRewards.test.ts b/test/integration/DFRewards.test.ts index 2c9e97f..1162085 100644 --- a/test/integration/DFRewards.test.ts +++ b/test/integration/DFRewards.test.ts @@ -159,6 +159,7 @@ describe('DFRewards tests', async () => { } type tx + eventIndex } } }` @@ -175,6 +176,7 @@ describe('DFRewards tests', async () => { ) assert(info[0].history[0].amount === '100') assert(info[0].history[0].tx === tx.transactionHash.toLowerCase()) + assert(info[0].history[0].eventIndex === tx.events.Allocated.logIndex) assert(info[0].history[0].type === 'Allocated') }) @@ -183,7 +185,7 @@ describe('DFRewards tests', async () => { user2, datatokenAddress1 ) - await dfRewards.claimRewards(user2, user2, datatokenAddress1) + const tx = await dfRewards.claimRewards(user2, user2, datatokenAddress1) const user2Balance = await dfRewards.getAvailableRewards( user2, @@ -219,6 +221,7 @@ describe('DFRewards tests', async () => { } type tx + eventIndex } } }` @@ -235,5 +238,6 @@ describe('DFRewards tests', async () => { ) assert(info[0].history[0].amount === expectedReward) assert(info[0].history[0].type === 'Claimed') + assert(info[0].history[0].eventIndex === tx.events.Claimed.logIndex) }) }) diff --git a/test/integration/Datatoken.test.ts b/test/integration/Datatoken.test.ts index 24d30a3..01a32fb 100644 --- a/test/integration/Datatoken.test.ts +++ b/test/integration/Datatoken.test.ts @@ -135,7 +135,7 @@ describe('Datatoken tests', async () => { datatokenAddress = result.events.TokenCreated.returnValues[0].toLowerCase() // Check values before updating metadata - await sleep(2000) + await sleep(3000) const initialQuery = { query: `query { token(id: "${datatokenAddress}"){ @@ -161,6 +161,7 @@ describe('Datatoken tests', async () => { dispensers {id}, createdTimestamp, tx, + eventIndex, block, lastPriceValue }}` @@ -214,6 +215,10 @@ describe('Datatoken tests', async () => { assert(dt.block >= blockNumber, 'incorrect value for: block') assert(dt.block < blockNumber + 50, 'incorrect value for: block') assert(dt.lastPriceValue === '0', 'incorrect value for: lastPriceValue') + assert( + dt.eventIndex !== null && dt.eventIndex > 0, + 'incorrect value for: eventIndex' + ) }) it('Correct Datatoken fields after updating metadata', async () => { @@ -247,7 +252,7 @@ describe('Datatoken tests', async () => { ) // Check values before updating metadata - await sleep(2000) + await sleep(3000) const initialQuery = { query: `query { token(id: "${datatokenAddress}"){ @@ -273,6 +278,7 @@ describe('Datatoken tests', async () => { dispensers {id}, createdTimestamp, tx, + eventIndex, block, lastPriceValue }}` @@ -281,7 +287,7 @@ describe('Datatoken tests', async () => { method: 'POST', body: JSON.stringify(initialQuery) }) - await sleep(2000) + await sleep(3000) const dt = (await initialResponse.json()).data.token const tx: TransactionReceipt = await web3.eth.getTransactionReceipt(dt.tx) @@ -325,10 +331,41 @@ describe('Datatoken tests', async () => { assert(dt.block >= blockNumber, 'incorrect value for: block') assert(dt.block < blockNumber + 50, 'incorrect value for: block') assert(dt.lastPriceValue === '0', 'incorrect value for: lastPriceValue') + assert( + dt.eventIndex !== null && dt.eventIndex > 0, + 'incorrect value for: eventIndex' + ) }) - it('Check datatoken orders are updated correctly after publishing & ordering a datatoken', async () => { - // Start with publishing a new datatoken + it('Check datatoken orders are updated correctly after publishing & ordering a datatoken with fees', async () => { + // Publish a datatoken for publishingMarketFeeToken + const nftParams1: NftCreateData = { + name: 'newNFT1', + symbol: 'newTST1', + templateIndex, + tokenURI: '', + transferable: true, + owner: publisher + } + const erc20Params1: DatatokenCreateParams = { + templateIndex, + cap: '100000', + feeAmount: '0', + paymentCollector: ZERO_ADDRESS, + feeToken: ZERO_ADDRESS, + minter: publisher, + mpFeeAddress: ZERO_ADDRESS + } + const result1 = await Factory.createNftWithDatatoken( + publisher, + nftParams1, + erc20Params1 + ) + await sleep(3000) + const publishingTokenAddress = result1.events.TokenCreated.returnValues[0] + const publishingDatatoken = new Datatoken(web3, 8996) + + // Start with publishing the datatoken used for startOrder const nftParams: NftCreateData = { name: 'newNFT', symbol: 'newTST', @@ -340,42 +377,76 @@ describe('Datatoken tests', async () => { const erc20Params: DatatokenCreateParams = { templateIndex, cap: '100000', - feeAmount: '0', + feeAmount: '0.2', paymentCollector: ZERO_ADDRESS, - feeToken: ZERO_ADDRESS, + feeToken: publishingTokenAddress, minter: publisher, - mpFeeAddress: ZERO_ADDRESS + mpFeeAddress: publisher } const result = await Factory.createNftWithDatatoken( publisher, nftParams, erc20Params ) - await sleep(2000) + await sleep(3000) const newDtAddress = result.events.TokenCreated.returnValues[0] const datatoken = new Datatoken(web3, 8996) + + await datatoken.approve( + newDtAddress, + publishingTokenAddress, + '100000000000000000000000000', + user1 + ) + await publishingDatatoken.approve( + publishingTokenAddress, + newDtAddress, + '100000000000000000000000000', + user1 + ) await datatoken.mint(newDtAddress, publisher, '100', user1) + await publishingDatatoken.mint( + publishingTokenAddress, + publisher, + '100', + user1 + ) const user1balance = await datatoken.balance(newDtAddress, user1) const user2balance = await datatoken.balance(newDtAddress, user2) assert(Number(user1balance) === 100, 'Invalid user1 balance') assert(Number(user2balance) === 0, 'Invalid user2 balance') + const user1balanceOfPublishing = await datatoken.balance( + publishingTokenAddress, + user1 + ) + const user2balanceOfPublishing = await datatoken.balance( + publishingTokenAddress, + user2 + ) + assert(Number(user1balanceOfPublishing) === 100, 'Invalid user1 balance') + assert(Number(user2balanceOfPublishing) === 0, 'Invalid user2 balance') + const query = { - query: `query {token(id: "${newDtAddress.toLowerCase()}"){id,orderCount,orders {id, nftOwner{id}, lastPriceToken{id}}}}` + query: `query {token(id: "${newDtAddress.toLowerCase()}"){id,orderCount,orders {id, nftOwner{id}, lastPriceToken{id}, eventIndex}, eventIndex}}` } - await sleep(2000) + await sleep(3000) let response = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(query) }) - + await sleep(3000) const initialToken = (await response.json()).data.token assert(initialToken, 'Invalid initialToken') assert(initialToken.orderCount === '0', 'Invalid initial orderCount') assert(initialToken.orders.length === 0, 'Invalid initial orders') + assert( + initialToken.eventIndex !== null && initialToken.eventIndex > 0, + 'Invalid eventIndex' + ) const providerData = JSON.stringify({ timeout: 0 }) const providerFeeToken = ZERO_ADDRESS @@ -400,22 +471,31 @@ describe('Datatoken tests', async () => { providerData: web3.utils.toHex(web3.utils.asciiToHex(providerData)), validUntil: providerValidUntil } + const consumeMarketFees = { + consumeMarketFeeAddress: publisher, + consumeMarketFeeToken: publishingTokenAddress, + consumeMarketFeeAmount: '20000' + } assert(setProviderFee, 'Invalid setProviderFee') const orderTx = await datatoken.startOrder( newDtAddress, user1, user2, 1, - setProviderFee + setProviderFee, + consumeMarketFees ) assert(orderTx, 'Invalid orderTx') - const orderId = `${orderTx.transactionHash.toLowerCase()}-${newDtAddress.toLowerCase()}-${user1.toLowerCase()}` + const orderId = `${orderTx.transactionHash.toLowerCase()}-${newDtAddress.toLowerCase()}-${user1.toLowerCase()}-${orderTx.events.OrderStarted.logIndex.toFixed( + 1 + )}` - await sleep(2000) + await sleep(3000) response = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(query) }) + await sleep(3000) const token = (await response.json()).data.token @@ -424,5 +504,48 @@ describe('Datatoken tests', async () => { assert(token.orders[0].id === orderId) assert(token.orders[0].lastPriceToken.id === ZERO_ADDRESS) assert(token.orders[0].nftOwner.id === publisher, 'invalid nftOwner') + assert(token.orders[0].eventIndex === 0, 'invalid order eventIndex') + assert(token.eventIndex !== null, 'Invalid eventIndex') + assert( + token.eventIndex !== token.orders[0].eventIndex, + 'Invalid log indeces' + ) + const orderQuery = { + query: `query {order(id:"${orderId}"){id, publishingMarket{id}, publishingMarketToken{id}, publishingMarketAmmount, consumerMarket{id}, consumerMarketToken{id}, consumerMarketAmmount, eventIndex}}` + } + await sleep(3000) + const orderResponse = await fetch(subgraphUrl, { + method: 'POST', + body: JSON.stringify(orderQuery) + }) + await sleep(3000) + const queryResult = await orderResponse.json() + const order = queryResult.data.order + assert( + order.publishingMarket.id === erc20Params.mpFeeAddress.toLowerCase(), + 'incorrect publish market fee address' + ) + assert( + order.publishingMarketToken.id === erc20Params.feeToken.toLowerCase(), + 'incorrect publish market fee token' + ) + assert( + order.publishingMarketAmmount === erc20Params.feeAmount, + 'incorrect publish market fee amount' + ) + assert( + order.consumerMarket.id === + consumeMarketFees.consumeMarketFeeAddress.toLowerCase(), + 'incorrect consume market fee address' + ) + assert( + order.consumerMarketToken.id === + consumeMarketFees.consumeMarketFeeToken.toLowerCase(), + 'incorrect consume market fee token' + ) + assert( + order.consumerMarketAmmount === '0.00000000000002', + 'incorrect consume market fee amount' + ) }) }) diff --git a/test/integration/Dispenser.test.ts b/test/integration/Dispenser.test.ts index 763ffe8..b56fa10 100644 --- a/test/integration/Dispenser.test.ts +++ b/test/integration/Dispenser.test.ts @@ -138,6 +138,7 @@ describe('Dispenser tests', async () => { transferable, createdTimestamp, tx, + eventIndex, block, orderCount}}` } @@ -172,6 +173,10 @@ describe('Dispenser tests', async () => { assert(nft.block >= blockNumber, 'incorrect value for: block') assert(nft.block < blockNumber + 50, 'incorrect value for: block') assert(nft.orderCount === '0', 'incorrect value for: orderCount') + assert( + nft.eventIndex !== null && nft.eventIndex > 0, + 'Invalid eventIndex for NFT creation' + ) }) it('Test all DT Fields after deploying', async () => { @@ -201,6 +206,7 @@ describe('Dispenser tests', async () => { dispensers {id}, createdTimestamp, tx, + eventIndex, block, lastPriceValue }}` @@ -254,6 +260,10 @@ describe('Dispenser tests', async () => { assert(dt.block >= blockNumber, 'incorrect value for: block') assert(dt.block < blockNumber + 50, 'incorrect value for: block') assert(dt.lastPriceValue === '0', 'incorrect value for: lastPriceValue') + assert( + dt.eventIndex !== null && dt.eventIndex > 0, + 'incorrect value for: eventIndex' + ) }) it('Make user1 minter', async () => { @@ -262,15 +272,16 @@ describe('Dispenser tests', async () => { assert((await datatoken.getPermissions(dtAddress, user1)).minter === true) await sleep(sleepMs) const minterQuery = { - query: `query {token(id: "${dtAddress}"){minter{id}}}` + query: `query {token(id: "${dtAddress}"){minter{id}, eventIndex}}` } const minterResponse = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(minterQuery) }) - const minter = (await minterResponse.json()).data.token.minter - assert(minter[1] === user1, 'incorrect value for: minter') + const dt = (await minterResponse.json()).data.token + assert(dt.minter[1] === user1, 'incorrect value for: minter') + assert(dt.eventIndex !== null, 'incorrect value for: eventIndex') }) it('Create dispenser', async () => { @@ -310,6 +321,7 @@ describe('Dispenser tests', async () => { block createdTimestamp tx + eventIndex dispenses { id } @@ -336,13 +348,17 @@ describe('Dispenser tests', async () => { assert(response.createdTimestamp >= time, 'incorrect: createdTimestamp') assert(response.createdTimestamp < time + 15, 'incorrect: createdTimestamp') assert(response.tx === tx.transactionHash, 'incorrect value for: tx') + assert( + response.eventIndex !== null && response.eventIndex > 0, + 'incorrect value for: eventIndex' + ) assert(response.dispenses.length === 0, 'incorrect value for: dispenses') assert(response.__typename === 'Dispenser', 'incorrect value: __typename') }) it('Deactivates dispenser', async () => { const deactiveQuery = { - query: `query {dispenser(id: "${dispenserId}"){active}}` + query: `query {dispenser(id: "${dispenserId}"){active, eventIndex}}` } const initialResponse = await fetch(subgraphUrl, { @@ -353,7 +369,7 @@ describe('Dispenser tests', async () => { assert(initialActive === true, 'incorrect value for: initialActive') // Deactivate exchange - await dispenser.deactivate(dtAddress, publisher) + const tx = await dispenser.deactivate(dtAddress, publisher) const status = await dispenser.status(dtAddress) assert(status.active === false, 'Dispenser is still active') await sleep(sleepMs) @@ -362,23 +378,29 @@ describe('Dispenser tests', async () => { method: 'POST', body: JSON.stringify(deactiveQuery) }) - const updatedActive = (await updatedResponse.json()).data.dispenser.active - assert(updatedActive === false, 'incorrect value for: updatedActive') + const updatedActive = (await updatedResponse.json()).data.dispenser + assert(updatedActive.active === false, 'incorrect value for: updatedActive') + assert(updatedActive.eventIndex !== null, 'incorrect value for: eventIndex') + assert( + updatedActive.eventIndex === tx.events.DispenserDeactivated.logIndex, + 'incorrect value for: eventIndex' + ) }) - it('Activates exchange', async () => { + it('Activates dispenser', async () => { const activeQuery = { - query: `query {dispenser(id: "${dispenserId}"){active}}` + query: `query {dispenser(id: "${dispenserId}"){active, eventIndex}}` } const initialResponse = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(activeQuery) }) - const initialActive = (await initialResponse.json()).data.dispenser.active - assert(initialActive === false, 'incorrect value for: initialActive') + const initialActive = (await initialResponse.json()).data.dispenser + assert(initialActive.active === false, 'incorrect value for: initialActive') + assert(initialActive.eventIndex !== null, 'incorrect value for: eventIndex') - // Activate exchange - await dispenser.activate(dtAddress, '100', '100', publisher) + // Activate dispenser + const tx = await dispenser.activate(dtAddress, '100', '100', publisher) await sleep(sleepMs) // Check the updated value for active @@ -386,8 +408,13 @@ describe('Dispenser tests', async () => { method: 'POST', body: JSON.stringify(activeQuery) }) - const updatedActive = (await updatedResponse.json()).data.dispenser.active - assert(updatedActive === true, 'incorrect value for: updatedActive') + const updatedActive = (await updatedResponse.json()).data.dispenser + assert(updatedActive.active === true, 'incorrect value for: updatedActive') + assert(updatedActive.eventIndex !== null, 'incorrect value for: eventIndex') + assert( + updatedActive.eventIndex === tx.events.DispenserActivated.logIndex, + 'incorrect value for: eventIndex' + ) }) it('User2 gets datatokens from the dispenser', async () => { @@ -402,6 +429,7 @@ describe('Dispenser tests', async () => { block createdTimestamp tx + eventIndex __typename }}}` } @@ -410,6 +438,7 @@ describe('Dispenser tests', async () => { method: 'POST', body: JSON.stringify(dispenseQuery) }) + await sleep(sleepMs) const before = (await response1.json()).data.dispenser.dispenses assert(before.length === 0, 'incorrect value for: dispenses') @@ -423,7 +452,13 @@ describe('Dispenser tests', async () => { }) const dispense = (await response2.json()).data.dispenser.dispenses[0] - assert(dispense.id === `${tx.transactionHash}-${dispenserId}`, 'wrong id') + assert( + dispense.id === + `${ + tx.transactionHash + }-${dispenserId}-${tx.events.TokensDispensed.logIndex.toFixed(1)}`, + 'wrong id' + ) assert(dispense.dispenser.id === dispenserId, 'incorrect value for: user') assert(dispense.user.id === user2, 'incorrect value for: user') assert(dispense.amount === amount, 'incorrect value for: user') @@ -431,6 +466,7 @@ describe('Dispenser tests', async () => { assert(dispense.createdTimestamp >= time, 'incorrect: createdTimestamp') assert(dispense.createdTimestamp < time + 15, 'incorrect: createdTimestamp') assert(dispense.tx === tx.transactionHash, 'incorrect value for: tx') + assert(dispense.eventIndex !== null, 'incorrect value for: eventIndex') assert(dispense.__typename === 'DispenserTransaction', 'wrong __typename') }) @@ -440,21 +476,21 @@ describe('Dispenser tests', async () => { // Check balance after owner withdraw const balanceQuery = { - query: `query {dispenser(id: "${dispenserId}"){balance}}` + query: `query {dispenser(id: "${dispenserId}"){balance, eventIndex}}` } const response = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(balanceQuery) }) - const balance = (await response.json()).data.dispenser.balance - - assert(balance === '0', 'incorrect value for: balance') + const balance = (await response.json()).data.dispenser + assert(balance.balance === '0', 'incorrect value for: balance') + assert(balance.eventIndex !== null, 'incorrect value for: eventIndex') }) it('Updates allowed swapper', async () => { const swapperQuery = { - query: `query {dispenser(id: "${dispenserId}"){allowedSwapper}}` + query: `query {dispenser(id: "${dispenserId}"){allowedSwapper, eventIndex}}` } // Check initial allowedSwapper const swapperResponse1 = await fetch(subgraphUrl, { @@ -468,7 +504,7 @@ describe('Dispenser tests', async () => { 'incorrect value for: allowedSwapper' ) - await dispenser.setAllowedSwapper(dtAddress, publisher, user1) + const tx = await dispenser.setAllowedSwapper(dtAddress, publisher, user1) await sleep(sleepMs) const swapperResponse2 = await fetch(subgraphUrl, { @@ -476,8 +512,16 @@ describe('Dispenser tests', async () => { body: JSON.stringify(swapperQuery) }) const allowedSwapper2 = (await swapperResponse2.json()).data.dispenser - .allowedSwapper - assert(allowedSwapper2 === user1, 'incorrect value for: allowedSwapper 2') + assert( + allowedSwapper2.allowedSwapper === user1, + 'incorrect value for: allowedSwapper 2' + ) + assert( + allowedSwapper2.eventIndex !== null && + allowedSwapper2.eventIndex === + tx.events.DispenserAllowedSwapperChanged.logIndex, + 'incorrect value for: eventIndex' + ) }) }) diff --git a/test/integration/FixedRateExchange.test.ts b/test/integration/FixedRateExchange.test.ts index 278f4cd..0ae1fdf 100644 --- a/test/integration/FixedRateExchange.test.ts +++ b/test/integration/FixedRateExchange.test.ts @@ -151,6 +151,7 @@ describe('Fixed Rate Exchange tests', async () => { transferable, createdTimestamp, tx, + eventIndex, block, orderCount}}` } @@ -191,6 +192,10 @@ describe('Fixed Rate Exchange tests', async () => { assert(nft.block >= blockNumber, 'incorrect value for: block') assert(nft.block < blockNumber + 50, 'incorrect value for: block') assert(nft.orderCount === '0', 'incorrect value for: orderCount') + assert( + nft.eventIndex !== null && nft.eventIndex > 0, + 'incorrect value for: eventIndex' + ) }) it('Test DT Fields after deploying Fixed rate exchange', async () => { @@ -220,6 +225,7 @@ describe('Fixed Rate Exchange tests', async () => { dispensers {id}, createdTimestamp, tx, + eventIndex, block, lastPriceToken, lastPriceValue @@ -274,6 +280,10 @@ describe('Fixed Rate Exchange tests', async () => { assert(dt.block >= blockNumber, 'incorrect value for: block') assert(dt.block < blockNumber + 50, 'incorrect value for: block') assert(dt.lastPriceValue === '0', 'incorrect value for: lastPriceValue') + assert( + dt.eventIndex !== null && dt.eventIndex > 0, + 'incorrect value for: eventIndex' + ) }) it('Test fixedRateExchanges Fields', async () => { @@ -310,6 +320,7 @@ describe('Fixed Rate Exchange tests', async () => { } createdTimestamp tx + eventIndex block publishMarketFeeAddress publishMarketSwapFee @@ -385,6 +396,10 @@ describe('Fixed Rate Exchange tests', async () => { ) assert(fixedTx.from === publisher, 'incorrect value for: tx') assert(fixedTx.to === factoryAddress, 'incorrect value for: tx') + assert( + fixed.eventIndex !== null && fixed.eventIndex > 0, + 'incorrect value for: eventIndex' + ) }) it('Updates Fixed Rate Price', async () => { @@ -398,6 +413,7 @@ describe('Fixed Rate Exchange tests', async () => { } oldPrice newPrice + eventIndex } }}` } @@ -422,7 +438,7 @@ describe('Fixed Rate Exchange tests', async () => { // Update price const newPrice = '999' - await fixedRate.setRate(publisher, exchangeId, newPrice) + const tx = await fixedRate.setRate(publisher, exchangeId, newPrice) await sleep(sleepMs) // Check price after first update @@ -441,10 +457,14 @@ describe('Fixed Rate Exchange tests', async () => { ) assert(updates2.oldPrice === price1, 'incorrect value: 2nd oldPrice') assert(updates2.newPrice === newPrice, 'incorrect value: 2nd newPrice') + assert( + updates2.eventIndex === tx.events.ExchangeRateChanged.logIndex, + 'incorrect value: 2nd eventIndex' + ) // Update price a 2nd time const newPrice2 = '1' // '5.123' - await fixedRate.setRate(publisher, exchangeId, newPrice2) + const tx2 = await fixedRate.setRate(publisher, exchangeId, newPrice2) await sleep(sleepMs) // Check price after 2nd update @@ -464,10 +484,14 @@ describe('Fixed Rate Exchange tests', async () => { ) assert(updates3.oldPrice === newPrice, 'incorrect value: 3rd oldPrice') assert(updates3.newPrice === newPrice2, 'incorrect value: 3rd newPrice') + assert( + updates3.eventIndex === tx2.events.ExchangeRateChanged.logIndex, + 'incorrect value: 3nd eventIndex' + ) }) it('Deactivates exchange', async () => { const deactiveQuery = { - query: `query {fixedRateExchange(id: "${fixedRateId}"){active}}` + query: `query {fixedRateExchange(id: "${fixedRateId}"){active, eventIndex}}` } const initialResponse = await fetch(subgraphUrl, { @@ -488,13 +512,17 @@ describe('Fixed Rate Exchange tests', async () => { body: JSON.stringify(deactiveQuery) }) const updatedActive = (await updatedResponse.json()).data.fixedRateExchange - .active - assert(updatedActive === false, 'incorrect value for: updatedActive') + + assert(updatedActive.active === false, 'incorrect value for: updatedActive') + assert( + updatedActive.eventIndex !== null && updatedActive.eventIndex > 0, + 'incorrect value: eventIndex' + ) }) it('Activates exchange', async () => { const activeQuery = { - query: `query {fixedRateExchange(id: "${fixedRateId}"){active}}` + query: `query {fixedRateExchange(id: "${fixedRateId}"){active, eventIndex}}` } const initialResponse = await fetch(subgraphUrl, { method: 'POST', @@ -514,13 +542,16 @@ describe('Fixed Rate Exchange tests', async () => { body: JSON.stringify(activeQuery) }) const updatedActive = (await updatedResponse.json()).data.fixedRateExchange - .active - assert(updatedActive === true, 'incorrect value for: updatedActive') + assert(updatedActive.active === true, 'incorrect value for: updatedActive') + assert( + updatedActive.eventIndex !== null && updatedActive.eventIndex > 0, + 'incorrect value: eventIndex' + ) }) it('Activate Minting', async () => { const mintingQuery = { - query: `query {fixedRateExchange(id: "${fixedRateId}"){withMint}}` + query: `query {fixedRateExchange(id: "${fixedRateId}"){withMint, eventIndex}}` } const initialResponse = await fetch(subgraphUrl, { method: 'POST', @@ -531,7 +562,7 @@ describe('Fixed Rate Exchange tests', async () => { assert(initialMint === null, 'incorrect value for: initialMint') // Activate minting - await fixedRate.activateMint(publisher, exchangeId) + const tx = await fixedRate.activateMint(publisher, exchangeId) await sleep(sleepMs) // Check the updated value for active @@ -541,13 +572,16 @@ describe('Fixed Rate Exchange tests', async () => { }) const updatedMint = (await updatedResponse.json()).data.fixedRateExchange - .withMint - assert(updatedMint === true, 'incorrect value for: updatedMint') + assert(updatedMint.withMint === true, 'incorrect value for: updatedMint') + assert( + updatedMint.eventIndex === tx.events.ExchangeMintStateChanged.logIndex, + 'incorrect value for: eventIndex' + ) }) it('Deactivate Minting', async () => { const mintingQuery = { - query: `query {fixedRateExchange(id: "${fixedRateId}"){withMint}}` + query: `query {fixedRateExchange(id: "${fixedRateId}"){withMint, eventIndex}}` } const initialResponse = await fetch(subgraphUrl, { method: 'POST', @@ -558,7 +592,7 @@ describe('Fixed Rate Exchange tests', async () => { assert(initialMint === true, 'incorrect value for: initialMint') // Activate minting - await fixedRate.deactivateMint(publisher, exchangeId) + const tx = await fixedRate.deactivateMint(publisher, exchangeId) await sleep(sleepMs) // Check the updated value for active @@ -568,8 +602,11 @@ describe('Fixed Rate Exchange tests', async () => { }) const updatedMint = (await updatedResponse.json()).data.fixedRateExchange - .withMint - assert(updatedMint === false, 'incorrect value for: updatedMint') + assert(updatedMint.withMint === false, 'incorrect value for: updatedMint') + assert( + updatedMint.eventIndex === tx.events.ExchangeMintStateChanged.logIndex, + 'incorrect value for: eventIndex' + ) }) it('User1 buys a datatoken', async () => { @@ -584,6 +621,7 @@ describe('Fixed Rate Exchange tests', async () => { block createdTimestamp tx + eventIndex oceanFeeAmount marketFeeAmount consumeMarketFeeAmount @@ -654,7 +692,11 @@ describe('Fixed Rate Exchange tests', async () => { const swappedAmount = web3.utils.fromWei( new BN(tx.returnValues.baseTokenSwappedAmount) ) - assert(swaps.id === `${tx.transactionHash}-${fixedRateId}`, 'incorrect: id') + assert( + swaps.id === + `${tx.transactionHash}-${fixedRateId}-${tx.logIndex.toFixed(1)}`, + 'incorrect: id' + ) assert(swaps.exchangeId.id === fixedRateId, 'incorrect: exchangeId') assert(swaps.by.id === user1, 'incorrect value for: id') assert(swaps.baseTokenAmount === swappedAmount, 'incorrect baseTokenAmount') @@ -669,6 +711,7 @@ describe('Fixed Rate Exchange tests', async () => { 'wrong consumeMarketFeeAmount' ) assert(swaps.tx === tx.transactionHash, 'incorrect value for: tx') + assert(swaps.eventIndex === tx.logIndex, 'incorrect value for: eventIndex') assert(swaps.__typename === 'FixedRateExchangeSwap', 'incorrect __typename') }) it('User1 sells a datatoken', async () => { @@ -691,6 +734,7 @@ describe('Fixed Rate Exchange tests', async () => { block createdTimestamp tx + eventIndex oceanFeeAmount __typename } @@ -705,7 +749,11 @@ describe('Fixed Rate Exchange tests', async () => { const swappedAmount = web3.utils.fromWei( new BN(tx.returnValues.baseTokenSwappedAmount) ) - assert(swaps.id === `${tx.transactionHash}-${fixedRateId}`, 'incorrect: id') + assert( + swaps.id === + `${tx.transactionHash}-${fixedRateId}-${tx.logIndex.toFixed(1)}`, + 'incorrect: id' + ) assert(swaps.exchangeId.id === fixedRateId, 'incorrect: exchangeId') assert(swaps.by.id === user1, 'incorrect value for: id') assert(swaps.baseTokenAmount === swappedAmount, 'incorrect baseTokenAmount') @@ -715,12 +763,13 @@ describe('Fixed Rate Exchange tests', async () => { assert(swaps.createdTimestamp < time + 25, 'incorrect: createdTimestamp 2') assert(swaps.oceanFeeAmount === oceanFeeAmount, 'incorrect: oceanFeeAmount') assert(swaps.tx === tx.transactionHash, 'incorrect value for: tx') + assert(swaps.eventIndex === tx.logIndex, 'incorrect value for: eventIndex') assert(swaps.__typename === 'FixedRateExchangeSwap', 'incorrect __typename') }) it('Updates allowed swapper', async () => { const swapperQuery = { - query: `query {fixedRateExchange(id: "${fixedRateId}"){allowedSwapper}}` + query: `query {fixedRateExchange(id: "${fixedRateId}"){allowedSwapper, eventIndex}}` } // Check initial allowedSwapper const swapperResponse1 = await fetch(subgraphUrl, { @@ -734,7 +783,7 @@ describe('Fixed Rate Exchange tests', async () => { 'incorrect value for: allowedSwapper' ) - await fixedRate.setAllowedSwapper(publisher, exchangeId, user1) + const tx = await fixedRate.setAllowedSwapper(publisher, exchangeId, user1) await sleep(sleepMs) const swapperResponse2 = await fetch(subgraphUrl, { @@ -742,8 +791,16 @@ describe('Fixed Rate Exchange tests', async () => { body: JSON.stringify(swapperQuery) }) const allowedSwapper2 = (await swapperResponse2.json()).data - .fixedRateExchange.allowedSwapper + .fixedRateExchange - assert(allowedSwapper2 === user1, 'incorrect value for: allowedSwapper 2') + assert( + allowedSwapper2.allowedSwapper === user1, + 'incorrect value for: allowedSwapper 2' + ) + assert( + allowedSwapper2.eventIndex === + tx.events.ExchangeAllowedSwapperChanged.logIndex, + 'incorrect value for: eventIndex' + ) }) }) diff --git a/test/integration/Nft.test.ts b/test/integration/Nft.test.ts index ae4abd3..47e95cc 100644 --- a/test/integration/Nft.test.ts +++ b/test/integration/Nft.test.ts @@ -121,7 +121,7 @@ describe('NFT tests', async () => { datatokenAddress = result.events.TokenCreated.returnValues[0] // Check values before updating metadata - await sleep(2000) + await sleep(3000) nftAddress = erc721Address.toLowerCase() const initialQuery = { query: `query { @@ -143,6 +143,7 @@ describe('NFT tests', async () => { transferable, createdTimestamp, tx, + eventIndex, block, orderCount}}` } @@ -150,7 +151,7 @@ describe('NFT tests', async () => { method: 'POST', body: JSON.stringify(initialQuery) }) - await sleep(2000) + await sleep(3000) const nft = (await initialResponse.json()).data.nft const tx: TransactionReceipt = await web3.eth.getTransactionReceipt(nft.tx) assert(nft.id === nftAddress, 'incorrect value for: id') @@ -182,6 +183,10 @@ describe('NFT tests', async () => { assert(nft.block >= blockNumber, 'incorrect value for: block') assert(nft.block < blockNumber + 50, 'incorrect value for: block') assert(nft.orderCount === '0', 'incorrect value for: orderCount') + assert( + nft.eventIndex !== null && nft.eventIndex > 0, + 'Invalid eventIndex for NFT creation' + ) }) it('Update metadata', async () => { @@ -215,7 +220,7 @@ describe('NFT tests', async () => { ) // graph tests here - await sleep(2000) + await sleep(3000) const query = { query: `query { nft(id:"${nftAddress}"){ @@ -236,6 +241,7 @@ describe('NFT tests', async () => { transferable, createdTimestamp, tx, + eventIndex, block, orderCount}}` } @@ -243,6 +249,7 @@ describe('NFT tests', async () => { method: 'POST', body: JSON.stringify(query) }) + await sleep(3000) const updatedNft = (await response.json()).data.nft const tx: TransactionReceipt = await web3.eth.getTransactionReceipt( updatedNft.tx @@ -288,6 +295,10 @@ describe('NFT tests', async () => { assert(updatedNft.block >= blockNumber, 'incorrect value for: block') assert(updatedNft.block < blockNumber + 50, 'incorrect value for: block') assert(updatedNft.orderCount === '0', 'incorrect value for: orderCount') + assert( + updatedNft.eventIndex !== null && updatedNft.eventIndex > 0, + 'Invalid eventIndex for NFT update' + ) }) it('Set a key/value in erc725 store', async () => { @@ -301,6 +312,7 @@ describe('NFT tests', async () => { key value } + eventIndex } }` } @@ -310,5 +322,9 @@ describe('NFT tests', async () => { }) const updatedNft = (await response.json()).data.nft assert(updatedNft.nftData.key !== null, 'incorrect value for key') + assert( + updatedNft.eventIndex !== null && updatedNft.eventIndex > 0, + 'Invalid eventIndex for NFT update' + ) }) }) diff --git a/test/integration/SimplePublishConsume.test.ts b/test/integration/SimplePublishConsume.test.ts index 17ee0e4..bb6719e 100644 --- a/test/integration/SimplePublishConsume.test.ts +++ b/test/integration/SimplePublishConsume.test.ts @@ -152,18 +152,24 @@ describe('Simple Publish & consume test', async () => { ) // graph tests here - await sleep(2000) + await sleep(3000) const graphNftToken = erc721Address.toLowerCase() const query = { query: `query { - nft(id:"${graphNftToken}"){symbol,id}}` + nft(id:"${graphNftToken}"){symbol,id,eventIndex}}` } const response = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(query) }) + await sleep(3000) const queryResult = await response.json() assert(queryResult.data.nft.id === graphNftToken) + assert( + queryResult.data.nft.eventIndex !== null && + queryResult.data.nft.eventIndex > 0, + 'Invalid eventIndex for NFT creation' + ) }) it('should publish and transfer an NFT', async () => { const nftParams: NftCreateData = { @@ -188,27 +194,34 @@ describe('Simple Publish & consume test', async () => { nftParams, erc20Params ) - await sleep(2000) + await sleep(3000) const erc721Address = result.events.NFTCreated.returnValues[0] const datatokenAddress = result.events.TokenCreated.returnValues[0] const graphNftToken = erc721Address.toLowerCase() const queryOriginalOwner = { query: `query { - nft(id:"${graphNftToken}"){symbol,id,owner{id}}}` + nft(id:"${graphNftToken}"){symbol,id,owner{id},eventIndex}}` } const initialResponse = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(queryOriginalOwner) }) + await sleep(3000) const initialResult = await initialResponse.json() // Checking original owner account has been set correctly assert( initialResult.data.nft.owner.id.toLowerCase() === publisherAccount.toLowerCase() ) - const chain = await web3.eth.getChainId() + assert( + initialResult.data.nft.eventIndex !== null && + initialResult.data.nft.eventIndex > 0, + 'Invalid eventIndex for NFT creation' + ) + // create the files encrypted string + const chain = await web3.eth.getChainId() let providerResponse = await ProviderInstance.encrypt( assetUrl, chain, @@ -235,21 +248,27 @@ describe('Simple Publish & consume test', async () => { encryptedResponse, '0x' + metadataHash ) - await sleep(2000) + await sleep(3000) // Transfer the NFT await nft.transferNft(graphNftToken, publisherAccount, newOwnerAccount) - await sleep(2000) + await sleep(3000) const query2 = { query: `query { - nft(id:"${graphNftToken}"){symbol,id,owner{id}, transferable}}` + nft(id:"${graphNftToken}"){symbol,id,owner{id}, transferable, eventIndex}}` } const response = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(query2) }) + await sleep(3000) const queryResult = await response.json() assert(queryResult.data.nft.owner.id === newOwnerAccount) + assert( + queryResult.data.nft.eventIndex !== null && + queryResult.data.nft.eventIndex > 0, + 'Invalid eventIndex for NFT creation' + ) }) it('should save provider fees after startOrder is called', async () => { @@ -287,18 +306,20 @@ describe('Simple Publish & consume test', async () => { 1, setProviderFee ) - const orderId = `${orderTx.transactionHash.toLowerCase()}-${datatokenAddress.toLowerCase()}-${user1.toLowerCase()}` - + await sleep(3000) + const orderId = `${orderTx.transactionHash.toLowerCase()}-${datatokenAddress.toLowerCase()}-${user1.toLowerCase()}-${orderTx.events.OrderStarted.logIndex.toFixed( + 1 + )}` const query = { - query: `query {order(id:"${orderId}"){id, providerFee, lastPriceToken{id}}}` + query: `query {order(id:"${orderId}"){id, providerFee, lastPriceToken{id}, eventIndex}}` } - await sleep(2000) + await sleep(3000) const response = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(query) }) - + await sleep(3000) const queryResult = await response.json() const providerFeeJSON = JSON.parse(queryResult.data.order.providerFee) @@ -321,6 +342,10 @@ describe('Simple Publish & consume test', async () => { setProviderFee.providerFeeToken.toLowerCase(), 'Wrong providerFeeToken set' ) + assert( + queryResult.data.order.eventIndex !== null, + 'Invalid eventIndex for order' + ) }) it('should save provider fees after calling reuseOrder on a using a previous txId', async () => { @@ -361,16 +386,19 @@ describe('Simple Publish & consume test', async () => { assert(orderTx.transactionHash, 'Failed to start order') // Check initial provider fee has been set correctly - const orderId = `${orderTx.transactionHash.toLowerCase()}-${datatokenAddress.toLowerCase()}-${user4.toLowerCase()}` + const orderId = `${orderTx.transactionHash.toLowerCase()}-${datatokenAddress.toLowerCase()}-${user4.toLowerCase()}-${orderTx.events.OrderStarted.logIndex.toFixed( + 1 + )}` const initialQuery = { - query: `query {order(id:"${orderId}"){id, providerFee, lastPriceToken{id}}}` + query: `query {order(id:"${orderId}"){id, providerFee, lastPriceToken{id}, eventIndex}}` } - await sleep(2000) + await sleep(3000) const initialResponse = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(initialQuery) }) + await sleep(3000) const initialQueryResult = await initialResponse.json() const initialProviderFeeJSON = JSON.parse( initialQueryResult.data.order.providerFee @@ -393,6 +421,10 @@ describe('Simple Publish & consume test', async () => { setInitialProviderFee.providerFeeToken.toLowerCase(), 'Wrong initial providerFeeToken set' ) + assert( + initialQueryResult.data.order.eventIndex !== null, + 'Invalid eventIndex for order' + ) providerFeeAmount = '990000' providerValidUntil = '10000' @@ -421,7 +453,7 @@ describe('Simple Publish & consume test', async () => { const reusedOrder = await datatoken.reuseOrder( datatokenAddress, - user2, + user4, orderTx.transactionHash, setNewProviderFee ) @@ -433,7 +465,11 @@ describe('Simple Publish & consume test', async () => { // Check the new provider fee has been set in OrderReuse const reuseQuery = { - query: `query {orderReuse(id:"${reusedOrder.transactionHash}"){id, providerFee}}` + query: `query {orderReuse(id:"${ + reusedOrder.transactionHash + }-${reusedOrder.events.OrderReused.logIndex.toFixed( + 1 + )}"){id, providerFee, eventIndex}}` } await sleep(2000) @@ -463,5 +499,17 @@ describe('Simple Publish & consume test', async () => { setNewProviderFee.providerFeeToken.toLowerCase(), 'New providerFeeToken set in reuse order is wrong' ) + assert( + reuseQueryResult.data.orderReuse.eventIndex !== null, + 'Invalid eventIndex for reuse order' + ) + assert( + reuseQueryResult.data.orderReuse.eventIndex === 0, + 'Invalid reuse order event index' + ) + assert( + initialQueryResult.data.order.eventIndex === 0, + 'Invalid start order event index' + ) }) }) diff --git a/test/integration/SimpleSubgraph.test.ts b/test/integration/SimpleSubgraph.test.ts index 83a1a28..b02d110 100644 --- a/test/integration/SimpleSubgraph.test.ts +++ b/test/integration/SimpleSubgraph.test.ts @@ -69,18 +69,23 @@ describe('Tests coverage without provider/aquarius', async () => { const erc721Address = result.events.NFTCreated.returnValues[0] // graph tests here - await sleep(2000) + await sleep(3000) const graphNftToken = erc721Address.toLowerCase() const query = { query: `query { - nft(id:"${graphNftToken}"){symbol,id}}` + nft(id:"${graphNftToken}"){symbol,id,eventIndex}}` } const response = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(query) }) + await sleep(3000) const queryResult = await response.json() assert(queryResult.data.nft.id === graphNftToken) + assert( + queryResult.data.nft.eventIndex !== null && + queryResult.data.nft.eventIndex > 0 + ) }) it('should publish and transfer an NFT', async () => { @@ -106,7 +111,7 @@ describe('Tests coverage without provider/aquarius', async () => { nftParams, erc20Params ) - await sleep(2000) + await sleep(3000) const erc721Address = result.events.NFTCreated.returnValues[0] const nftAddress = erc721Address.toLowerCase() @@ -117,7 +122,7 @@ describe('Tests coverage without provider/aquarius', async () => { newOwnerAccount ) - await sleep(2000) + await sleep(3000) const query2 = { query: `query { nft(id:"${nftAddress}"){ @@ -125,23 +130,30 @@ describe('Tests coverage without provider/aquarius', async () => { id, owner{id}, transferable, - transferHistory(orderBy: timestamp, orderDirection: desc){id,nft,oldOwner,newOwner,txId,timestamp,block} + transferHistory(orderBy: timestamp, orderDirection: desc){id,nft,oldOwner,newOwner,txId,eventIndex,timestamp,block} }}` } const response = await fetch(subgraphUrl, { method: 'POST', body: JSON.stringify(query2) }) + await sleep(3000) const queryResult = await response.json() const transferHistory = queryResult.data.nft.transferHistory[0] assert(queryResult.data.nft.owner.id === newOwnerAccount) assert( transferHistory.id === - `${nftAddress}-${tx.transactionHash}-${tx.events.Transfer.logIndex}`, + `${nftAddress}-${ + tx.transactionHash + }-${tx.events.Transfer.logIndex.toFixed(1)}`, 'Invalid transferHistory Id' ) assert(transferHistory.txId === tx.transactionHash, 'invalid txId') + assert( + transferHistory.eventIndex === tx.events.Transfer.logIndex, + 'invalid eventIndex' + ) assert(transferHistory.timestamp) assert(transferHistory.timestamp >= time - 500, 'incorrect value timestamp') diff --git a/test/integration/VeOcean.test.ts b/test/integration/VeOcean.test.ts index 5085f9c..f84b721 100644 --- a/test/integration/VeOcean.test.ts +++ b/test/integration/VeOcean.test.ts @@ -324,7 +324,7 @@ describe('veOcean tests', async () => { }) it('Alice should allocate 10% to NFT1', async () => { - await veAllocate.setAllocation(Alice, '1000', nft1, chainId) + const tx = await veAllocate.setAllocation(Alice, '1000', nft1, chainId) const newTotalAllocation = await veAllocate.getTotalAllocation(Alice) await sleep(2000) let initialQuery = { @@ -332,6 +332,7 @@ describe('veOcean tests', async () => { veAllocateUsers(id:"${Alice.toLowerCase()}"){ id, allocatedTotal + eventIndex } }` } @@ -347,13 +348,15 @@ describe('veOcean tests', async () => { ' to equal subgraph value ' + info[0].allocatedTotal ) + assert(info[0].eventIndex === tx.events.AllocationSet.logIndex) initialQuery = { query: `query { veAllocations( where: {allocationUser:"${Alice.toLowerCase()}", chainId:"${chainId}", nftAddress:"${nft1.toLowerCase()}"} ){ id, - allocated + allocated, + eventIndex } }` } @@ -367,10 +370,11 @@ describe('veOcean tests', async () => { 'Expected totalAllocation 1000 to equal subgraph value ' + info[0].allocatedTotal ) + assert(info[0].eventIndex === tx.events.AllocationSet.logIndex) }) it('Alice should allocate 10% to NFT2 and 20% to NFT3', async () => { - await veAllocate.setBatchAllocation( + const tx = await veAllocate.setBatchAllocation( Alice, ['1000', '2000'], [nft2, nft3], @@ -383,7 +387,8 @@ describe('veOcean tests', async () => { query: `query { veAllocateUsers(id:"${Alice.toLowerCase()}"){ id, - allocatedTotal + allocatedTotal, + eventIndex } }` } @@ -399,13 +404,15 @@ describe('veOcean tests', async () => { ' to equal subgraph value ' + info[0].allocatedTotal ) + assert(info[0].eventIndex === tx.events.AllocationSetMultiple.logIndex) initialQuery = { query: `query { veAllocations( where: {allocationUser:"${Alice.toLowerCase()}", chainId:"${chainId}", nftAddress:"${nft2.toLowerCase()}"} ){ id, - allocated + allocated, + eventIndex } }` } @@ -419,6 +426,7 @@ describe('veOcean tests', async () => { 'Expected totalAllocation 1000 to equal subgraph value ' + info[0].allocatedTotal ) + assert(info[0].eventIndex === tx.events.AllocationSetMultiple.logIndex) initialQuery = { query: `query { veAllocations( @@ -627,7 +635,7 @@ describe('veOcean tests', async () => { await sleep(2000) const initialQuery = { query: `query { - veOCEANs(id:"${Alice.toLowerCase()}"){ + veOCEANs(id:"${Alice.toLowerCase()}"){ id, lockedAmount, unlockTime @@ -749,6 +757,7 @@ describe('veOcean tests', async () => { block timestamp tx + eventIndex sender amount cancelTime