diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fe323569..1719a53c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,6 +6,7 @@ on: - master - develop - beta + - next tags-ignore: - '**' paths-ignore: @@ -146,6 +147,16 @@ jobs: fetch-depth: 0 persist-credentials: false + - name: Use Node.js + uses: actions/setup-node@v6 + with: + node-version-file: .nvmrc + + - name: Upgrade to latest npm + run: | + npm install -g npm@latest + npm -v + - name: Get bot user ID id: bot-user-id run: | @@ -166,7 +177,6 @@ jobs: if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository env: GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} SEMANTIC_RELEASE_PACKAGE: ${{ github.event.repository.name }} GIT_AUTHOR_EMAIL: "${{ steps.bot-user-id.outputs.user-id }}+${{ steps.generate_token.outputs.app-slug }}[bot]@users.noreply.github.com" GIT_COMMITTER_EMAIL: "${{ steps.bot-user-id.outputs.user-id }}+${{ steps.generate_token.outputs.app-slug }}[bot]@users.noreply.github.com" diff --git a/.nvmrc b/.nvmrc index 209e3ef4..2bd5a0a9 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20 +22 diff --git a/.releaserc b/.releaserc index 1aa24c95..56c5027a 100644 --- a/.releaserc +++ b/.releaserc @@ -1,35 +1,54 @@ { - "plugins": [ - [ - "@semantic-release/commit-analyzer", - { - "preset": "conventionalcommits" - } - ], - [ - "@semantic-release/release-notes-generator", - { - "preset": "conventionalcommits" - } - ], - [ - "@semantic-release/npm", - { - "pkgRoot": "./client", - "npmPublish": true - } - ], - "@semantic-release/github", - "@semantic-release/changelog", - [ - "@semantic-release/git", - { - "assets": [ - "CHANGELOG.md", - "client/package.json", - "client/package-lock.json" - ] - } + "branches": [ + "master", + { + "name": "beta", + "channel": "beta", + "prerelease": true + }, + { + "name": "next", + "channel": "next", + "prerelease": true + } + ], + "plugins": [ + [ + "@semantic-release/commit-analyzer", + { + "preset": "conventionalcommits" + } + ], + [ + "@semantic-release/release-notes-generator", + { + "preset": "conventionalcommits" + } + ], + [ + "@semantic-release/npm", + { + "pkgRoot": "./client", + "npmPublish": true + } + ], + [ + "@semantic-release/github", + { + "successComment": false, + "draftRelease": true + } + ], + "@semantic-release/changelog", + [ + "@semantic-release/git", + { + "assets": [ + "CHANGELOG.md", + "client/package.json", + "client/package-lock.json" ] + } ] + ] } diff --git a/Dockerfile b/Dockerfile index 07bd5e7e..0c36d56d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:20-alpine +FROM node:22-alpine WORKDIR /app COPY . . diff --git a/README.md b/README.md index fe34b4eb..8529d7b7 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ database, the Token Metadata Service local database, and the Stacks node RPC int [`env.ts`](https://github.com/hirosystems/token-metadata-api/blob/develop/src/env.ts) for all available configuration options. -Build the app (NodeJS v18+ is required) +Build the app (NodeJS v22+ is required) ``` npm install npm run build diff --git a/client/package-lock.json b/client/package-lock.json index fece0332..fedab690 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -12,10 +12,13 @@ "openapi-fetch": "^0.12.2" }, "devDependencies": { - "@types/node": "^20.16.11", + "@types/node": "^22.0.0", "microbundle": "^0.15.1", "rimraf": "^6.0.1", "typescript": "^5.6.3" + }, + "engines": { + "node": ">=22" } }, "node_modules/@ampproject/remapping": { @@ -2113,12 +2116,13 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.16.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.11.tgz", - "integrity": "sha512-y+cTCACu92FyA5fgQSAI8A1H429g7aSK2HsO7K4XYUWc4dY5IUz55JSDIYT6/VsOLfGy8vmvQYC2hfb0iF16Uw==", + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", "dev": true, + "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@types/parse-json": { @@ -6631,10 +6635,11 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "dev": true, + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", diff --git a/client/package.json b/client/package.json index bfdaf200..25e63fce 100644 --- a/client/package.json +++ b/client/package.json @@ -10,6 +10,9 @@ "@hirosystems/token-metadata-api-client" ], "license": "GPL-3.0", + "engines": { + "node": ">=22" + }, "main": "./lib/index.js", "typings": "./lib/index.d.ts", "unpkg": "lib/index.umd.js", @@ -23,7 +26,7 @@ "build:browser": "microbundle -i src/index.ts -o lib/index.umd.js --no-pkg-main -f umd --external none --globals none --no-compress --tsconfig tsconfig.browser.json --name TokenMetadataApiClient" }, "devDependencies": { - "@types/node": "^20.16.11", + "@types/node": "^22.0.0", "microbundle": "^0.15.1", "rimraf": "^6.0.1", "typescript": "^5.6.3" diff --git a/package-lock.json b/package-lock.json index 84bd5a17..560c9e25 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,19 +10,20 @@ "license": "GPL-3.0", "dependencies": { "@fastify/cors": "^8.2.0", - "@fastify/swagger": "^7.6.1", + "@fastify/swagger": "^8.15.0", "@fastify/type-provider-typebox": "^3.2.0", "@google-cloud/storage": "^7.12.1", - "@hirosystems/api-toolkit": "^1.7.1", + "@hirosystems/api-toolkit": "^1.12.0", "@hirosystems/chainhook-client": "^2.4.0", + "@hirosystems/stacks-encoding-native-js": "^1.2.0", "@sinclair/typebox": "^0.28.17", - "@stacks/blockchain-api-client": "^8.11.1", - "@stacks/transactions": "^6.1.0", - "@types/node": "^20.16.1", + "@stacks/blockchain-api-client": "^8.13.6", + "@stacks/transactions": "^7.3.1", + "@types/node": "^22.0.0", "bignumber.js": "^9.1.2", "env-schema": "^5.1.0", "evt": "^1.11.2", - "fastify": "^4.29.1", + "fastify": "4.29.1", "fastify-metrics": "^9.2.4", "json5": "^2.2.3", "node-pg-migrate": "^6.2.2", @@ -30,7 +31,6 @@ "pino": "^8.8.0", "postgres": "^3.3.1", "sharp": "^0.33.3", - "stacks-encoding-native-js": "^1.0.0", "undici": "^5.29.0" }, "devDependencies": { @@ -57,6 +57,9 @@ "ts-jest": "^29.1.1", "ts-node": "^10.9.1", "typescript": "^5.6.3" + }, + "engines": { + "node": ">=22" } }, "node_modules/@ampproject/remapping": { @@ -2506,14 +2509,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@fastify/accept-negotiator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.0.0.tgz", - "integrity": "sha512-4R/N2KfYeld7A5LGkai+iUFMahXcxxYbDp+XS2B1yuL3cdmZLJ9TlCnNzT3q5xFTqsYm0GPpinLUwfSwjcVjyA==", - "engines": { - "node": ">=14" - } - }, "node_modules/@fastify/ajv-compiler": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.5.0.tgz", @@ -2562,31 +2557,17 @@ "fast-deep-equal": "^3.1.3" } }, - "node_modules/@fastify/static": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@fastify/static/-/static-6.5.0.tgz", - "integrity": "sha512-WEk6iqgejA6ivjkvbJ47A+uMci225z5lZwLXCXZS3ZYR/kYje1gzzarkKKGL6TWpBw6smkOzxA7dfEoY0347Nw==", - "dependencies": { - "@fastify/accept-negotiator": "^1.0.0", - "content-disposition": "^0.5.3", - "fastify-plugin": "^4.0.0", - "glob": "^8.0.1", - "p-limit": "^3.1.0", - "readable-stream": "^4.0.0", - "send": "^0.18.0" - } - }, "node_modules/@fastify/swagger": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/@fastify/swagger/-/swagger-7.6.1.tgz", - "integrity": "sha512-fpwblS7aOfnVymdRyKI3Zw/ZNt2u0oGm7KQgQ/itmd4Hlh/LKNNoWg6R/+eLa9H/4JTd34ZRRC3mNKhkVl5Kdw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@fastify/swagger/-/swagger-8.15.0.tgz", + "integrity": "sha512-zy+HEEKFqPMS2sFUsQU5X0MHplhKJvWeohBwTCkBAJA/GDYGLGUWQaETEhptiqxK7Hs0fQB9B4MDb3pbwIiCwA==", + "license": "MIT", "dependencies": { - "@fastify/static": "^6.0.0", "fastify-plugin": "^4.0.0", "json-schema-resolver": "^2.0.0", "openapi-types": "^12.0.0", "rfdc": "^1.3.0", - "yaml": "^2.1.1" + "yaml": "^2.2.2" } }, "node_modules/@fastify/type-provider-typebox": { @@ -2670,14 +2651,16 @@ } }, "node_modules/@hirosystems/api-toolkit": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@hirosystems/api-toolkit/-/api-toolkit-1.7.1.tgz", - "integrity": "sha512-Fx7euWKcQYUrBtAjsDnX6rMkDF+vdY1Yk57QuF3cJ4UcPbO2zwMKRxc4L2aSLOxRePi/DBFTyR2E8axA54Uzaw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@hirosystems/api-toolkit/-/api-toolkit-1.12.0.tgz", + "integrity": "sha512-MwZ4WoqjaHsbyP01VulSobz059h9ej2FPJLraWFuMFEmooRN+MpZvO+rPLEXhFUtCukeEin3ax+gdZYfZZsJSw==", + "license": "Apache 2.0", "dependencies": { "@fastify/cors": "^8.0.0", "@fastify/swagger": "^8.3.1", "@fastify/type-provider-typebox": "^3.2.0", "@sinclair/typebox": "^0.28.20", + "@types/node": "^22.14.1", "fastify": "^4.3.0", "fastify-metrics": "^10.2.0", "node-pg-migrate": "^6.2.2", @@ -2688,19 +2671,7 @@ "api-toolkit-git-info": "bin/api-toolkit-git-info.js" }, "engines": { - "node": ">=18" - } - }, - "node_modules/@hirosystems/api-toolkit/node_modules/@fastify/swagger": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/@fastify/swagger/-/swagger-8.15.0.tgz", - "integrity": "sha512-zy+HEEKFqPMS2sFUsQU5X0MHplhKJvWeohBwTCkBAJA/GDYGLGUWQaETEhptiqxK7Hs0fQB9B4MDb3pbwIiCwA==", - "dependencies": { - "fastify-plugin": "^4.0.0", - "json-schema-resolver": "^2.0.0", - "openapi-types": "^12.0.0", - "rfdc": "^1.3.0", - "yaml": "^2.2.2" + "node": ">=22" } }, "node_modules/@hirosystems/api-toolkit/node_modules/fastify-metrics": { @@ -2726,6 +2697,22 @@ "undici": "^5.21.2" } }, + "node_modules/@hirosystems/stacks-encoding-native-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@hirosystems/stacks-encoding-native-js/-/stacks-encoding-native-js-1.2.0.tgz", + "integrity": "sha512-FJ1s7c84WPCOHczMrT2YXwN7Tj48wckFpJr3qPsp877HEqAuDDMf9BvRifi8PgEHd0VYccROWlCF86Ciomp1rQ==", + "license": "GPL-3.0", + "dependencies": { + "@types/node": "^16.11.26", + "detect-libc": "^2.0.1" + } + }, + "node_modules/@hirosystems/stacks-encoding-native-js/node_modules/@types/node": { + "version": "16.18.126", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.126.tgz", + "integrity": "sha512-OTcgaiwfGFBKacvfwuHzzn1KLxH/er8mluiy8/uM3sGXHaRe73RrSIj01jow9t4kJEW633Ov+cOexXeiApTyAw==", + "license": "MIT" + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.7", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.7.tgz", @@ -4233,9 +4220,10 @@ "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==" }, "node_modules/@stacks/blockchain-api-client": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/@stacks/blockchain-api-client/-/blockchain-api-client-8.11.1.tgz", - "integrity": "sha512-yVMsyEOTSvozy1J3/456Cu7kL01ObkBIG0YEjptXs5G2lBXUf25isYXhmkxiD1NtnpjWFE2zdxvJwOrU7kclxw==", + "version": "8.13.6", + "resolved": "https://registry.npmjs.org/@stacks/blockchain-api-client/-/blockchain-api-client-8.13.6.tgz", + "integrity": "sha512-ja7jYybcPorDCNtc3UPyJLdmpjrz24R09wxQ9+T7jlKjYKjrooKYJlyH+YYujbck/G6Q2Ga7n8pc6kiy/EwNKA==", + "license": "GPL-3.0", "dependencies": { "@types/node": "20.14.14", "eventemitter3": "^4.0.7", @@ -4258,26 +4246,10 @@ "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/@stacks/common": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/@stacks/common/-/common-6.0.0.tgz", - "integrity": "sha512-tETwccvbYvaZ7u3ZucWNMOIPN97r6IPeZXKIFhLc1KSVaWSGEPTtZcwVp+Rz3mu2XgI2pg37SUrOWXSL7OOkDw==", - "dependencies": { - "@types/bn.js": "^5.1.0", - "@types/node": "^18.0.4" - } - }, - "node_modules/@stacks/common/node_modules/@types/node": { - "version": "18.19.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.45.tgz", - "integrity": "sha512-VZxPKNNhjKmaC1SUYowuXSRSMGyQGmQjvvA1xE4QZ0xce2kLtEhPDS+kqpCPBZYgqblCLQ2DAjSzmgCM5auvhA==", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "node_modules/@stacks/common/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@stacks/common/-/common-7.3.1.tgz", + "integrity": "sha512-29ANTFcSSlXnGQlgDVWg7OQ74lgQhu3x8JkeN19Q+UE/1lbQrzcctgPHG74XHjWNp8NPBqskUYA8/HLgIKuKNQ==", + "license": "MIT" }, "node_modules/@stacks/eslint-config": { "version": "1.2.0", @@ -4739,11 +4711,12 @@ } }, "node_modules/@stacks/network": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@stacks/network/-/network-6.1.0.tgz", - "integrity": "sha512-kJ7Btpw7M9qxnimwmszZomJZdzqQmlKDX7NoIGqlbjpy1TJ0FRHjnqELLNgK0qKLlzkw06SwWNOaxiFytdmCHg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@stacks/network/-/network-7.3.1.tgz", + "integrity": "sha512-dQjhcwkz8lihSYSCUMf7OYeEh/Eh0++NebDtXbIB3pHWTvNCYEH7sxhYTB1iyunurv31/QEi0RuWdlfXK/BjeA==", + "license": "MIT", "dependencies": { - "@stacks/common": "^6.0.0", + "@stacks/common": "^7.3.1", "cross-fetch": "^3.1.5" } }, @@ -4769,14 +4742,15 @@ } }, "node_modules/@stacks/transactions": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-6.1.0.tgz", - "integrity": "sha512-5+6M6wvUiO3HQAWP77y80crJXtoDHaiirY3dnwrkUCwJD/021JRYDNCzeW8QDrtAaAlpCcmtjUh/Nv8Vwtb4mg==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/@stacks/transactions/-/transactions-7.3.1.tgz", + "integrity": "sha512-ufnC1BPrOKz5b5gxxdseP3vBrFq1+qx1L6t+J/QnjXULyWdkhtS+LBEqRw2bL5qNteMvU2GhqPgFtYQPzolGbw==", + "license": "MIT", "dependencies": { - "@noble/hashes": "^1.1.3", - "@noble/secp256k1": "^1.6.3", - "@stacks/common": "^6.0.0", - "@stacks/network": "^6.1.0", + "@noble/hashes": "1.1.5", + "@noble/secp256k1": "1.7.1", + "@stacks/common": "^7.3.1", + "@stacks/network": "^7.3.1", "c32check": "^2.0.0", "lodash.clonedeep": "^4.5.0" } @@ -4854,14 +4828,6 @@ "@babel/types": "^7.20.7" } }, - "node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/caseless": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", @@ -4929,11 +4895,12 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.16.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.1.tgz", - "integrity": "sha512-zJDo7wEadFtSyNz5QITDfRcrhqDvQI1xQNQ0VoizPjM/dVAODqqIUWbJPkvsxmTI0MYRGRikcdjMPhOssnPejQ==", + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", + "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.21.0" } }, "node_modules/@types/normalize-package-data": { @@ -5801,7 +5768,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/base-x": { "version": "4.0.0", @@ -5844,6 +5812,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -6200,17 +6169,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", @@ -6455,11 +6413,12 @@ "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.2.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.2.0.tgz", + "integrity": "sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==", + "license": "MIT", "dependencies": { - "node-fetch": "2.6.7" + "node-fetch": "^2.7.0" } }, "node_modules/cross-spawn": { @@ -6599,23 +6558,6 @@ "node": ">=0.4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -6735,11 +6677,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, "node_modules/electron-to-chromium": { "version": "1.4.615", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", @@ -6763,14 +6700,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -6902,11 +6831,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -7576,14 +7500,6 @@ "node": ">=0.10.0" } }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -8036,14 +7952,6 @@ "node": ">= 0.6" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fs-extra": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.0.tgz", @@ -8061,7 +7969,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true }, "node_modules/fsevents": { "version": "2.3.3", @@ -8131,25 +8040,6 @@ "node": ">=14" } }, - "node_modules/gaxios/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/gaxios/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -8284,24 +8174,6 @@ "readable-stream": "^3.0.0" } }, - "node_modules/glob": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", - "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -8506,21 +8378,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -8687,6 +8544,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -11212,17 +11070,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -11269,6 +11116,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -11350,9 +11198,10 @@ } }, "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.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11541,17 +11390,6 @@ "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", "integrity": "sha512-VuCaZZAjReZ3vUwgOB8LxAosIurDiAW0s13rI1YwmaP++jvcxP77AWoQvenZebpCA2m8WC1/EosPYPMjnRAp/w==" }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -12246,14 +12084,6 @@ "node": ">=8" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/react-is": { "version": "18.2.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", @@ -12749,6 +12579,15 @@ "integrity": "sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==", "dev": true }, + "node_modules/redoc-cli/node_modules/@types/mkdirp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-1.0.1.tgz", + "integrity": "sha512-HkGSK7CGAXncr8Qn/0VqNtExEE+PHMWb+qlR1faHMao7ng6P3tAaoWWBMdva0gL5h4zprjIO89GJOLXsMcDm1Q==", + "extraneous": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/redoc-cli/node_modules/@types/node": { "version": "15.12.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.2.tgz", @@ -16981,57 +16820,11 @@ "semver": "bin/semver.js" } }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/set-cookie-parser": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, "node_modules/sharp": { "version": "0.33.4", "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", @@ -17271,28 +17064,6 @@ "node": ">=8" } }, - "node_modules/stacks-encoding-native-js": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stacks-encoding-native-js/-/stacks-encoding-native-js-1.0.0.tgz", - "integrity": "sha512-7lbcU98ozN+/XvMViXc1cZe72PB3Lz/Fcw5Lv4xcRbDfZDqdT4LqNzDfApb0TrrPWDf1moT2jtR5Lq0pSm1byQ==", - "dependencies": { - "@types/node": "^16.11.26", - "detect-libc": "^2.0.1" - } - }, - "node_modules/stacks-encoding-native-js/node_modules/@types/node": { - "version": "16.18.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.11.tgz", - "integrity": "sha512-3oJbGBUWuS6ahSnEq1eN2XrCyf4YsWI8OyCvo7c64zQJNplk3mO84t53o8lfTk+2ji59g5ycfc6qQ3fdHliHuA==" - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/stream-events": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", @@ -17507,25 +17278,6 @@ "node": ">= 6" } }, - "node_modules/teeny-request/node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/teeny-request/node_modules/uuid": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", @@ -17682,14 +17434,6 @@ "node": ">=12" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -17933,9 +17677,10 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.21.0.tgz", + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==", + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", diff --git a/package.json b/package.json index 230f6189..ccc0ca48 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,9 @@ "main": "index.js", "author": "Hiro Systems PBC (https://hiro.so)", "license": "GPL-3.0", + "engines": { + "node": ">=22" + }, "scripts": { "build": "rimraf ./dist && tsc --project tsconfig.build.json", "build:client": "npm run generate:git-info && npm run generate:openapi && npm run generate:client", @@ -55,15 +58,16 @@ }, "dependencies": { "@fastify/cors": "^8.2.0", - "@fastify/swagger": "^7.6.1", + "@fastify/swagger": "^8.15.0", "@fastify/type-provider-typebox": "^3.2.0", "@google-cloud/storage": "^7.12.1", - "@hirosystems/api-toolkit": "^1.7.1", + "@hirosystems/api-toolkit": "^1.12.0", "@hirosystems/chainhook-client": "^2.4.0", + "@hirosystems/stacks-encoding-native-js": "^1.2.0", "@sinclair/typebox": "^0.28.17", - "@stacks/blockchain-api-client": "^8.11.1", - "@stacks/transactions": "^6.1.0", - "@types/node": "^20.16.1", + "@stacks/blockchain-api-client": "^8.13.6", + "@stacks/transactions": "^7.3.1", + "@types/node": "^22.0.0", "bignumber.js": "^9.1.2", "env-schema": "^5.1.0", "evt": "^1.11.2", @@ -75,7 +79,6 @@ "pino": "^8.8.0", "postgres": "^3.3.1", "sharp": "^0.33.3", - "stacks-encoding-native-js": "^1.0.0", "undici": "^5.29.0" } } diff --git a/src/api/schemas.ts b/src/api/schemas.ts index 6b005c77..d96b4e1c 100644 --- a/src/api/schemas.ts +++ b/src/api/schemas.ts @@ -35,7 +35,6 @@ export const OpenApiSchemaOptions: SwaggerOptions = { }, ], }, - exposeRoute: true, }; // ========================== diff --git a/src/api/util/cache.ts b/src/api/util/cache.ts index 0c2a7478..e86a1e4f 100644 --- a/src/api/util/cache.ts +++ b/src/api/util/cache.ts @@ -37,9 +37,9 @@ export async function handleChainTipCache(request: FastifyRequest, reply: Fastif return handleCache(ETagType.chainTip, request, reply); } -export function setReplyNonCacheable(reply: FastifyReply) { - reply.removeHeader('Cache-Control'); - reply.removeHeader('Etag'); +export function setReplyNonCacheable(reply: FastifyReply): void { + void reply.removeHeader('Cache-Control'); + void reply.removeHeader('Etag'); } /** diff --git a/src/pg/chainhook/block-cache.ts b/src/pg/chainhook/block-cache.ts index 0d75c553..f43ab966 100644 --- a/src/pg/chainhook/block-cache.ts +++ b/src/pg/chainhook/block-cache.ts @@ -13,7 +13,7 @@ import { getSmartContractSip, } from '../../token-processor/util/sip-validation'; import { ClarityAbi } from '@stacks/transactions'; -import { ClarityTypeID, decodeClarityValue } from 'stacks-encoding-native-js'; +import { ClarityTypeID, decodeClarityValue } from '@hirosystems/stacks-encoding-native-js'; import BigNumber from 'bignumber.js'; export type CachedEvent = { diff --git a/src/token-processor/queue/job/process-token-job.ts b/src/token-processor/queue/job/process-token-job.ts index 4d460fdc..40b90a2f 100644 --- a/src/token-processor/queue/job/process-token-job.ts +++ b/src/token-processor/queue/job/process-token-job.ts @@ -1,5 +1,5 @@ import { cvToHex, uintCV } from '@stacks/transactions'; -import { ClarityValueUInt, decodeClarityValueToRepr } from 'stacks-encoding-native-js'; +import { ClarityValueUInt, decodeClarityValueToRepr } from '@hirosystems/stacks-encoding-native-js'; import { ENV } from '../../../env'; import { DbMetadataLocaleInsertBundle, diff --git a/src/token-processor/stacks-node/stacks-node-rpc-client.ts b/src/token-processor/stacks-node/stacks-node-rpc-client.ts index 824891a9..8e4ce66c 100644 --- a/src/token-processor/stacks-node/stacks-node-rpc-client.ts +++ b/src/token-processor/stacks-node/stacks-node-rpc-client.ts @@ -4,7 +4,7 @@ import { ClarityValueUInt, TransactionVersion, decodeClarityValue, -} from 'stacks-encoding-native-js'; +} from '@hirosystems/stacks-encoding-native-js'; import { request, errors } from 'undici'; import { ENV } from '../../env'; import { RetryableJobError } from '../queue/errors'; @@ -41,7 +41,7 @@ export class StacksNodeRpcClient { static create(args: { contractPrincipal: string }): StacksNodeRpcClient { const randomPrivKey = makeRandomPrivKey(); - const senderAddress = getAddressFromPrivateKey(randomPrivKey.data, TransactionVersion.Mainnet); + const senderAddress = getAddressFromPrivateKey(randomPrivKey, 'mainnet'); const client = new StacksNodeRpcClient({ contractPrincipal: args.contractPrincipal, senderAddress: senderAddress, diff --git a/src/token-processor/util/sip-validation.ts b/src/token-processor/util/sip-validation.ts index d7198a0d..80ce614e 100644 --- a/src/token-processor/util/sip-validation.ts +++ b/src/token-processor/util/sip-validation.ts @@ -6,7 +6,7 @@ import { ClarityValueList, ClarityValueUInt, decodeClarityValue, -} from 'stacks-encoding-native-js'; +} from '@hirosystems/stacks-encoding-native-js'; import { DbSipNumber } from '../../pg/types'; import { StacksTransactionSmartContractEvent } from '@hirosystems/chainhook-client'; diff --git a/tests/token-queue/sip-validation.test.ts b/tests/token-queue/sip-validation.test.ts index b61a713b..09bc6ddc 100644 --- a/tests/token-queue/sip-validation.test.ts +++ b/tests/token-queue/sip-validation.test.ts @@ -3,11 +3,11 @@ import { cvToHex, intCV, listCV, + principalCV, stringAsciiCV, tupleCV, uintCV, } from '@stacks/transactions'; -import { principalCV } from '@stacks/transactions/dist/clarity/types/principalCV'; import { getContractLogMetadataUpdateNotification } from '../../src/token-processor/util/sip-validation'; import { StacksTransactionSmartContractEvent } from '@hirosystems/chainhook-client'; diff --git a/tests/token-queue/stacks-node-rpc-client.test.ts b/tests/token-queue/stacks-node-rpc-client.test.ts index 506ab664..861b95fd 100644 --- a/tests/token-queue/stacks-node-rpc-client.test.ts +++ b/tests/token-queue/stacks-node-rpc-client.test.ts @@ -3,7 +3,6 @@ import { uintCV, getAddressFromPrivateKey, makeRandomPrivKey, - TransactionVersion, noneCV, } from '@stacks/transactions'; import { MockAgent, setGlobalDispatcher } from 'undici'; @@ -24,7 +23,7 @@ describe('StacksNodeRpcClient', () => { beforeEach(() => { const randomPrivKey = makeRandomPrivKey(); - const senderAddress = getAddressFromPrivateKey(randomPrivKey.data, TransactionVersion.Mainnet); + const senderAddress = getAddressFromPrivateKey(randomPrivKey, 'mainnet'); client = new StacksNodeRpcClient({ contractPrincipal: contractPrincipal, senderAddress: senderAddress, diff --git a/util/openapi-generator.ts b/util/openapi-generator.ts index b10573ed..a0bea9a2 100644 --- a/util/openapi-generator.ts +++ b/util/openapi-generator.ts @@ -1,33 +1,28 @@ -import Fastify, { FastifyPluginAsync } from 'fastify'; +import Fastify from 'fastify'; import { TypeBoxTypeProvider } from '@fastify/type-provider-typebox'; import { Api } from '../src/api/init'; import FastifySwagger from '@fastify/swagger'; import { existsSync, mkdirSync, writeFileSync } from 'fs'; -import { Server } from 'http'; import { OpenApiSchemaOptions } from '../src/api/schemas'; /** * Generates `openapi.yaml` based on current Swagger definitions. */ -export const ApiGenerator: FastifyPluginAsync< - Record, - Server, - TypeBoxTypeProvider -> = async (fastify, options) => { +async function generateOpenApiFiles() { + const fastify = Fastify({ + trustProxy: true, + logger: true, + }).withTypeProvider(); + await fastify.register(FastifySwagger, OpenApiSchemaOptions); await fastify.register(Api, { prefix: '/metadata/v1' }); + await fastify.ready(); if (!existsSync('./tmp')) { mkdirSync('./tmp'); } writeFileSync('./tmp/openapi.yaml', fastify.swagger({ yaml: true })); writeFileSync('./tmp/openapi.json', JSON.stringify(fastify.swagger(), null, 2)); -}; - -const fastify = Fastify({ - trustProxy: true, - logger: true, -}).withTypeProvider(); - -void fastify.register(ApiGenerator).then(async () => { await fastify.close(); -}); +} + +void generateOpenApiFiles();