From 4537263d5262d9c69f9ebc20cf24dc1e7da11ce6 Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Mon, 4 Aug 2025 13:58:35 +0200 Subject: [PATCH 1/5] fix: npm update --- package-lock.json | 249 +++++++++++++++++++++-------------------- src/types/lib/index.ts | 6 +- 2 files changed, 128 insertions(+), 127 deletions(-) diff --git a/package-lock.json b/package-lock.json index dcf2de10a..dcabc1dc6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -417,14 +417,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz", - "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.2.tgz", + "integrity": "sha512-/V9771t+EgXz62aCcyofnQhGM8DQACbRhvzKFsXKC9QM+5MadF8ZmIm0crDMaz3+o0h0zXfJnd4EhbYbxsrcFw==", "dev": true, "license": "MIT", "dependencies": { "@babel/template": "^7.27.2", - "@babel/types": "^7.27.6" + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" @@ -1846,9 +1846,9 @@ } }, "node_modules/@babel/types": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.1.tgz", - "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3876,9 +3876,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", - "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.46.2.tgz", + "integrity": "sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==", "cpu": [ "arm" ], @@ -3890,9 +3890,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", - "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.46.2.tgz", + "integrity": "sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==", "cpu": [ "arm64" ], @@ -3904,9 +3904,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", - "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.46.2.tgz", + "integrity": "sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==", "cpu": [ "arm64" ], @@ -3918,9 +3918,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", - "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.46.2.tgz", + "integrity": "sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==", "cpu": [ "x64" ], @@ -3932,9 +3932,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", - "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.46.2.tgz", + "integrity": "sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==", "cpu": [ "arm64" ], @@ -3946,9 +3946,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", - "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.46.2.tgz", + "integrity": "sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==", "cpu": [ "x64" ], @@ -3960,9 +3960,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", - "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.46.2.tgz", + "integrity": "sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==", "cpu": [ "arm" ], @@ -3974,9 +3974,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", - "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.46.2.tgz", + "integrity": "sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==", "cpu": [ "arm" ], @@ -3988,9 +3988,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", - "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.46.2.tgz", + "integrity": "sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==", "cpu": [ "arm64" ], @@ -4002,9 +4002,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", - "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.46.2.tgz", + "integrity": "sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==", "cpu": [ "arm64" ], @@ -4016,9 +4016,9 @@ ] }, "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", - "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.46.2.tgz", + "integrity": "sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==", "cpu": [ "loong64" ], @@ -4029,10 +4029,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", - "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.46.2.tgz", + "integrity": "sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==", "cpu": [ "ppc64" ], @@ -4044,9 +4044,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", - "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.46.2.tgz", + "integrity": "sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==", "cpu": [ "riscv64" ], @@ -4058,9 +4058,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", - "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.46.2.tgz", + "integrity": "sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==", "cpu": [ "riscv64" ], @@ -4072,9 +4072,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", - "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.46.2.tgz", + "integrity": "sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==", "cpu": [ "s390x" ], @@ -4086,9 +4086,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", - "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.46.2.tgz", + "integrity": "sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==", "cpu": [ "x64" ], @@ -4100,9 +4100,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", - "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.46.2.tgz", + "integrity": "sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==", "cpu": [ "x64" ], @@ -4114,9 +4114,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", - "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.46.2.tgz", + "integrity": "sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==", "cpu": [ "arm64" ], @@ -4128,9 +4128,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", - "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.46.2.tgz", + "integrity": "sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==", "cpu": [ "ia32" ], @@ -4142,9 +4142,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", - "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.46.2.tgz", + "integrity": "sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==", "cpu": [ "x64" ], @@ -4878,9 +4878,9 @@ }, "node_modules/@starknet-io/starknet-types-09": { "name": "@starknet-io/types-js", - "version": "0.9.0-beta.4", - "resolved": "https://registry.npmjs.org/@starknet-io/types-js/-/types-js-0.9.0-beta.4.tgz", - "integrity": "sha512-vXvzENdSe0lvTT2tSdU4hjc5vfVx1BrSFAXcTDhtnArnmGup/Fuei/zb8kKEJ1SqT7AwtdF7/uQ65FP+B4APIA==", + "version": "0.9.0-beta.5", + "resolved": "https://registry.npmjs.org/@starknet-io/types-js/-/types-js-0.9.0-beta.5.tgz", + "integrity": "sha512-VbtqLeM/AMErgZqIwzOc/frMOUDj7Z5d0/oR1wcruGa4QQjKjAE98ii1lKEFjMMsXnQdmsqs+FinRlyinvkTIw==", "license": "MIT" }, "node_modules/@tootallnate/once": { @@ -4929,13 +4929,13 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.7.tgz", - "integrity": "sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==", + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/conventional-commits-parser": { @@ -5065,13 +5065,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.15", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.15.tgz", - "integrity": "sha512-oaeTSbCef7U/z7rDeJA138xpG3NuKc64/rZ2qmUFkFJmnMsAPaluIifqyWd8hSSMxyP9oie3dLAqYPblag9KgA==", + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.2.0.tgz", + "integrity": "sha512-3xyG3pMCq3oYCNg7/ZP+E1ooTaGB4cG8JWRsqqOYQdbWNY4zbaV0Ennrd7stjiJEFZCaybcIgpTjJWHRfBSIDw==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.8.0" + "undici-types": "~7.10.0" } }, "node_modules/@types/normalize-package-data": { @@ -5917,9 +5917,9 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz", - "integrity": "sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", "dev": true, "license": "MIT", "dependencies": { @@ -5940,7 +5940,7 @@ "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -6200,9 +6200,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001727", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001727.tgz", - "integrity": "sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==", + "version": "1.0.30001731", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001731.tgz", + "integrity": "sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==", "dev": true, "funding": [ { @@ -6234,9 +6234,9 @@ } }, "node_modules/chalk": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", - "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.5.0.tgz", + "integrity": "sha512-1tm8DTaJhPBG3bIkVeZt1iZM9GfSX2lzOeDVZH9R9ffRHpmHvxZ/QhgQH/aDTkswQVt+YHdXAdS/In/30OjCbg==", "dev": true, "license": "MIT", "engines": { @@ -7360,9 +7360,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.187", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.187.tgz", - "integrity": "sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==", + "version": "1.5.194", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.194.tgz", + "integrity": "sha512-SdnWJwSUot04UR51I2oPD8kuP2VI37/CADR1OHsFOUzZIvfWJBO6q11k5P/uKNyTT3cdOsnyjkrZ+DDShqYqJA==", "dev": true, "license": "ISC" }, @@ -11717,9 +11717,9 @@ } }, "node_modules/jiti": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", - "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", "dev": true, "license": "MIT", "bin": { @@ -15594,9 +15594,9 @@ "license": "ISC" }, "node_modules/nwsapi": { - "version": "2.2.20", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", - "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", "dev": true, "license": "MIT" }, @@ -17001,9 +17001,9 @@ } }, "node_modules/rollup": { - "version": "4.45.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz", - "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "version": "4.46.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.46.2.tgz", + "integrity": "sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==", "dev": true, "license": "MIT", "dependencies": { @@ -17017,26 +17017,26 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.45.1", - "@rollup/rollup-android-arm64": "4.45.1", - "@rollup/rollup-darwin-arm64": "4.45.1", - "@rollup/rollup-darwin-x64": "4.45.1", - "@rollup/rollup-freebsd-arm64": "4.45.1", - "@rollup/rollup-freebsd-x64": "4.45.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", - "@rollup/rollup-linux-arm-musleabihf": "4.45.1", - "@rollup/rollup-linux-arm64-gnu": "4.45.1", - "@rollup/rollup-linux-arm64-musl": "4.45.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-gnu": "4.45.1", - "@rollup/rollup-linux-riscv64-musl": "4.45.1", - "@rollup/rollup-linux-s390x-gnu": "4.45.1", - "@rollup/rollup-linux-x64-gnu": "4.45.1", - "@rollup/rollup-linux-x64-musl": "4.45.1", - "@rollup/rollup-win32-arm64-msvc": "4.45.1", - "@rollup/rollup-win32-ia32-msvc": "4.45.1", - "@rollup/rollup-win32-x64-msvc": "4.45.1", + "@rollup/rollup-android-arm-eabi": "4.46.2", + "@rollup/rollup-android-arm64": "4.46.2", + "@rollup/rollup-darwin-arm64": "4.46.2", + "@rollup/rollup-darwin-x64": "4.46.2", + "@rollup/rollup-freebsd-arm64": "4.46.2", + "@rollup/rollup-freebsd-x64": "4.46.2", + "@rollup/rollup-linux-arm-gnueabihf": "4.46.2", + "@rollup/rollup-linux-arm-musleabihf": "4.46.2", + "@rollup/rollup-linux-arm64-gnu": "4.46.2", + "@rollup/rollup-linux-arm64-musl": "4.46.2", + "@rollup/rollup-linux-loongarch64-gnu": "4.46.2", + "@rollup/rollup-linux-ppc64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-gnu": "4.46.2", + "@rollup/rollup-linux-riscv64-musl": "4.46.2", + "@rollup/rollup-linux-s390x-gnu": "4.46.2", + "@rollup/rollup-linux-x64-gnu": "4.46.2", + "@rollup/rollup-linux-x64-musl": "4.46.2", + "@rollup/rollup-win32-arm64-msvc": "4.46.2", + "@rollup/rollup-win32-ia32-msvc": "4.46.2", + "@rollup/rollup-win32-x64-msvc": "4.46.2", "fsevents": "~2.3.2" } }, @@ -18934,6 +18934,7 @@ "version": "0.8.0-beta.0", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -19301,9 +19302,9 @@ } }, "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", "dev": true, "license": "MIT" }, diff --git a/src/types/lib/index.ts b/src/types/lib/index.ts index 9303dfe45..af486cf25 100644 --- a/src/types/lib/index.ts +++ b/src/types/lib/index.ts @@ -1,6 +1,6 @@ import { StarknetChainId } from '../../global/constants'; import { weierstrass } from '../../utils/ec'; -import { EDataAvailabilityMode, ETransactionType, SUBSCRIPTION_BLOCK_TAG } from '../api'; +import { EDataAvailabilityMode, ETransactionType, SUBSCRIPTION_BLOCK_ID } from '../api'; import { CairoEnum } from '../cairoEnum'; import { Abi, CompiledContract, CompiledSierraCasm, ContractClass } from './contract'; import { @@ -260,8 +260,8 @@ export type BlockNumber = BlockTag | null | number; * null return 'pending' block tag */ export type BlockIdentifier = BlockNumber | BigNumberish; - -export type SubscriptionBlockIdentifier = SUBSCRIPTION_BLOCK_TAG | (string & {}) | number | bigint; +type SubscriptionBlockTag = Extract; +export type SubscriptionBlockIdentifier = SubscriptionBlockTag | (string & {}) | number | bigint; /** * items used by AccountInvocations From 1ddac48a19931a58c289d14e63bf1754f239ed21 Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Mon, 4 Aug 2025 15:38:55 +0200 Subject: [PATCH 2/5] feat: implement websocket 0.9 --- __tests__/WebSocketChannel.test.ts | 93 +++++++++++++- src/channel/index.ts | 4 +- src/channel/ws/subscription.ts | 2 +- src/channel/ws/{ws_0_8.ts => ws_0_9.ts} | 157 ++++++++++++++++-------- 4 files changed, 197 insertions(+), 59 deletions(-) rename src/channel/ws/{ws_0_8.ts => ws_0_9.ts} (83%) diff --git a/__tests__/WebSocketChannel.test.ts b/__tests__/WebSocketChannel.test.ts index 37b724896..5a614075b 100644 --- a/__tests__/WebSocketChannel.test.ts +++ b/__tests__/WebSocketChannel.test.ts @@ -10,6 +10,8 @@ const NODE_URL = TEST_WS_URL!; describeIfWs('E2E WebSocket Tests', () => { describe('websocket specific endpoints', () => { + // Updated for RPC 0.9: removed subscribePendingTransaction (not available in 0.9) + // Added subscribeNewTransactionReceipts and subscribeNewTransactions (new in 0.9) // account provider const provider = new Provider(getTestProvider()); const account = getTestAccount(provider); @@ -87,6 +89,7 @@ describeIfWs('E2E WebSocket Tests', () => { sub.on(async (result) => { i += 1; expect(result).toBeDefined(); + expect(result).toHaveProperty('event'); if (i === 5) { const status = await sub.unsubscribe(); expect(status).toBe(true); @@ -96,19 +99,99 @@ describeIfWs('E2E WebSocket Tests', () => { await webSocketChannel.waitForUnsubscription(sub.id); }); - test('Test subscribePendingTransaction', async () => { - const sub = await webSocketChannel.subscribePendingTransaction(true); + test('Test subscribeEvents with finality status filter', async () => { + const sub = await webSocketChannel.subscribeEvents({ + finalityStatus: 'ACCEPTED_ON_L2', + }); expect(sub).toBeInstanceOf(Subscription); let i = 0; sub.on(async (result) => { i += 1; expect(result).toBeDefined(); - if (i === 5) { + expect(result).toHaveProperty('event'); + if (i === 2) { const status = await sub.unsubscribe(); expect(status).toBe(true); } }); + + await webSocketChannel.waitForUnsubscription(sub.id); + }); + + test('Test subscribeNewTransactionReceipts', async () => { + const sub = await webSocketChannel.subscribeNewTransactionReceipts(); + expect(sub).toBeInstanceOf(Subscription); + + let i = 0; + sub.on(async (result) => { + i += 1; + expect(result).toBeDefined(); + expect(result).toHaveProperty('transaction_receipt'); + if (i === 2) { + const status = await sub.unsubscribe(); + expect(status).toBe(true); + } + }); + + await webSocketChannel.waitForUnsubscription(sub.id); + }); + + test('Test subscribeNewTransactionReceipts with finality status filter', async () => { + const sub = await webSocketChannel.subscribeNewTransactionReceipts({ + finalityStatus: ['ACCEPTED_ON_L2'], + }); + expect(sub).toBeInstanceOf(Subscription); + + let i = 0; + sub.on(async (result) => { + i += 1; + expect(result).toBeDefined(); + expect(result).toHaveProperty('transaction_receipt'); + if (i === 1) { + const status = await sub.unsubscribe(); + expect(status).toBe(true); + } + }); + + await webSocketChannel.waitForUnsubscription(sub.id); + }); + + test('Test subscribeNewTransactions', async () => { + const sub = await webSocketChannel.subscribeNewTransactions(); + expect(sub).toBeInstanceOf(Subscription); + + let i = 0; + sub.on(async (result) => { + i += 1; + expect(result).toBeDefined(); + expect(result).toHaveProperty('transaction'); + if (i === 2) { + const status = await sub.unsubscribe(); + expect(status).toBe(true); + } + }); + + await webSocketChannel.waitForUnsubscription(sub.id); + }); + + test('Test subscribeNewTransactions with finality status filter', async () => { + const sub = await webSocketChannel.subscribeNewTransactions({ + finalityStatus: ['ACCEPTED_ON_L2'], + }); + expect(sub).toBeInstanceOf(Subscription); + + let i = 0; + sub.on(async (result) => { + i += 1; + expect(result).toBeDefined(); + expect(result).toHaveProperty('transaction'); + if (i === 1) { + const status = await sub.unsubscribe(); + expect(status).toBe(true); + } + }); + await webSocketChannel.waitForUnsubscription(sub.id); }); @@ -119,7 +202,9 @@ describeIfWs('E2E WebSocket Tests', () => { calldata: [account.address, '10', '0'], }); - const sub = await webSocketChannel.subscribeTransactionStatus(transaction_hash); + const sub = await webSocketChannel.subscribeTransactionStatus({ + transactionHash: transaction_hash, + }); expect(sub).toBeInstanceOf(Subscription); let i = 0; diff --git a/src/channel/index.ts b/src/channel/index.ts index f0923e827..0a4985abb 100644 --- a/src/channel/index.ts +++ b/src/channel/index.ts @@ -2,6 +2,6 @@ export * as RPC08 from './rpc_0_8_1'; export * as RPC09 from './rpc_0_9_0'; // Default channel export * from './rpc_0_9_0'; -export { WebSocketChannel, WebSocketOptions } from './ws/ws_0_8'; -export { Subscription } from './ws/subscription'; +export * from './ws/ws_0_9'; +export * from './ws/subscription'; export { TimeoutError, WebSocketNotConnectedError } from '../utils/errors'; diff --git a/src/channel/ws/subscription.ts b/src/channel/ws/subscription.ts index bf4d5f004..466510efc 100644 --- a/src/channel/ws/subscription.ts +++ b/src/channel/ws/subscription.ts @@ -1,7 +1,7 @@ /* eslint-disable no-underscore-dangle */ import type { SUBSCRIPTION_ID } from '../../types/api'; import { logger } from '../../global/logger'; -import type { WebSocketChannel } from './ws_0_8'; +import type { WebSocketChannel } from './ws_0_9'; import { EventEmitter } from '../../utils/eventEmitter'; type SubscriptionEvents = { diff --git a/src/channel/ws/ws_0_8.ts b/src/channel/ws/ws_0_9.ts similarity index 83% rename from src/channel/ws/ws_0_8.ts rename to src/channel/ws/ws_0_9.ts index bece63cb2..df80fac40 100644 --- a/src/channel/ws/ws_0_8.ts +++ b/src/channel/ws/ws_0_9.ts @@ -1,5 +1,16 @@ /* eslint-disable no-underscore-dangle */ -import { RPCSPEC08, JRPC } from '../../types/api'; +import { + JRPC, + StarknetEventsEvent, + NewHeadsEvent, + TransactionsStatusEvent, + NewTransactionReceiptsEvent, + TXN_STATUS_WITHOUT_L1, + NewTransactionEvent, + SUBSCRIPTION_ID, + TXN_FINALITY_STATUS, + STATUS_ACCEPTED_ON_L1, +} from '../../types/api'; // Default exported RPC 0.9 Types import { BigNumberish, SubscriptionBlockIdentifier } from '../../types'; import { WebSocketEvent } from '../../types/api/jsonrpc'; @@ -14,13 +25,32 @@ import { config } from '../../global/config'; import { logger } from '../../global/logger'; import { Subscription } from './subscription'; -// Create type aliases to avoid repeating RPCSPEC08 prefix -type BLOCK_HEADER = RPCSPEC08.BLOCK_HEADER; -type EMITTED_EVENT = RPCSPEC08.EMITTED_EVENT; -type NEW_TXN_STATUS = RPCSPEC08.NEW_TXN_STATUS; -type SUBSCRIPTION_ID = RPCSPEC08.SUBSCRIPTION_ID; -type TXN_HASH = RPCSPEC08.TXN_HASH; -type TXN_WITH_HASH = RPCSPEC08.TXN_WITH_HASH; +// Subscription parameter interfaces for object-based API +export interface SubscribeNewHeadsParams { + blockIdentifier?: SubscriptionBlockIdentifier; +} + +export interface SubscribeEventsParams { + fromAddress?: BigNumberish; + keys?: string[][]; + blockIdentifier?: SubscriptionBlockIdentifier; + finalityStatus?: Exclude; +} + +export interface SubscribeTransactionStatusParams { + transactionHash: BigNumberish; + blockIdentifier?: SubscriptionBlockIdentifier; +} + +export interface SubscribeNewTransactionReceiptsParams { + finalityStatus?: Exclude[]; + senderAddress?: BigNumberish[]; +} + +export interface SubscribeNewTransactionsParams { + finalityStatus?: TXN_STATUS_WITHOUT_L1[]; + senderAddress?: BigNumberish[]; +} /** * Options for configuring the automatic reconnection behavior of the WebSocketChannel. @@ -39,6 +69,9 @@ export type ReconnectOptions = { delay?: number; }; +/** + * The type of the WebSocket implementation. + */ export type WebSocketModule = { new (nodeUrl: WebSocketOptions['nodeUrl']): WebSocket }; /** @@ -542,21 +575,21 @@ export class WebSocketChannel { /** * Subscribes to new block headers. - * @param {SubscriptionBlockIdentifier} [blockIdentifier] - The block to start receiving notifications from. Defaults to 'latest'. + * @param {SubscribeNewHeadsParams} params - The parameters for the subscription. * @returns {Promise>} A Promise that resolves with a `Subscription` object for new block headers. */ public async subscribeNewHeads( - blockIdentifier?: SubscriptionBlockIdentifier - ): Promise> { + params: SubscribeNewHeadsParams = {} + ): Promise> { const method = 'starknet_subscribeNewHeads'; - const params = { - block_id: blockIdentifier ? new Block(blockIdentifier).identifier : undefined, + const rpcParams = { + block_id: params.blockIdentifier ? new Block(params.blockIdentifier).identifier : undefined, }; - const subId = await this.sendReceive(method, params); + const subId = await this.sendReceive(method, rpcParams); const subscription = new Subscription({ channel: this, method, - params, + params: rpcParams, id: subId, maxBufferSize: this.maxBufferSize, }); @@ -566,27 +599,24 @@ export class WebSocketChannel { /** * Subscribes to events matching a given filter. - * @param {BigNumberish} [fromAddress] - The contract address to filter by. - * @param {string[][]} [keys] - The event keys to filter by. - * @param {SubscriptionBlockIdentifier} [blockIdentifier] - The block to start receiving notifications from. Defaults to 'latest'. + * @param {SubscribeEventsParams} params - The parameters for the subscription. * @returns {Promise>} A Promise that resolves with a `Subscription` object for the specified events. */ public async subscribeEvents( - fromAddress?: BigNumberish, - keys?: string[][], - blockIdentifier?: SubscriptionBlockIdentifier - ): Promise> { + params: SubscribeEventsParams = {} + ): Promise> { const method = 'starknet_subscribeEvents'; - const params = { - from_address: fromAddress !== undefined ? toHex(fromAddress) : undefined, - keys, - block_id: blockIdentifier ? new Block(blockIdentifier).identifier : undefined, + const rpcParams = { + from_address: params.fromAddress !== undefined ? toHex(params.fromAddress) : undefined, + keys: params.keys, + block_id: params.blockIdentifier ? new Block(params.blockIdentifier).identifier : undefined, + finality_status: params.finalityStatus, }; - const subId = await this.sendReceive(method, params); + const subId = await this.sendReceive(method, rpcParams); const subscription = new Subscription({ channel: this, method, - params, + params: rpcParams, id: subId, maxBufferSize: this.maxBufferSize, }); @@ -596,24 +626,48 @@ export class WebSocketChannel { /** * Subscribes to status updates for a specific transaction. - * @param {BigNumberish} transactionHash - The hash of the transaction to monitor. - * @param {SubscriptionBlockIdentifier} [blockIdentifier] - The block context. Not typically required. + * @param {SubscribeTransactionStatusParams} params - The parameters for the subscription. * @returns {Promise>} A Promise that resolves with a `Subscription` object for the transaction's status. */ public async subscribeTransactionStatus( - transactionHash: BigNumberish, - blockIdentifier?: SubscriptionBlockIdentifier - ): Promise> { + params: SubscribeTransactionStatusParams + ): Promise> { const method = 'starknet_subscribeTransactionStatus'; - const params = { - transaction_hash: toHex(transactionHash), - block_id: blockIdentifier ? new Block(blockIdentifier).identifier : undefined, + const rpcParams = { + transaction_hash: toHex(params.transactionHash), + block_id: params.blockIdentifier ? new Block(params.blockIdentifier).identifier : undefined, + }; + const subId = await this.sendReceive(method, rpcParams); + const subscription = new Subscription({ + channel: this, + method, + params: rpcParams, + id: subId, + maxBufferSize: this.maxBufferSize, + }); + this.activeSubscriptions.set(subId, subscription); + return subscription; + } + + /** + * Subscribes to new transaction receipts. + * @param {SubscribeNewTransactionReceiptsParams} params - The parameters for the subscription. + * @returns {Promise>} A Promise that resolves with a `Subscription` object for new transaction receipts. + */ + public async subscribeNewTransactionReceipts( + params: SubscribeNewTransactionReceiptsParams = {} + ): Promise> { + const method = 'starknet_subscribeNewTransactionReceipts'; + const rpcParams = { + finality_status: params.finalityStatus, + sender_address: + params.senderAddress && bigNumberishArrayToHexadecimalStringArray(params.senderAddress), }; - const subId = await this.sendReceive(method, params); + const subId = await this.sendReceive(method, rpcParams); const subscription = new Subscription({ channel: this, method, - params, + params: rpcParams, id: subId, maxBufferSize: this.maxBufferSize, }); @@ -622,25 +676,24 @@ export class WebSocketChannel { } /** - * Subscribes to pending transactions. - * @param {boolean} [transactionDetails] - If `true`, the full transaction details are included. Defaults to `false` (hash only). - * @param {BigNumberish[]} [senderAddress] - An array of sender addresses to filter by. - * @returns {Promise>} A Promise that resolves with a `Subscription` object for pending transactions. + * Subscribes to new transactions. + * @param {SubscribeNewTransactionsParams} params - The parameters for the subscription. + * @returns {Promise>} A Promise that resolves with a `Subscription` object for new transactions. */ - public async subscribePendingTransaction( - transactionDetails?: boolean, - senderAddress?: BigNumberish[] - ): Promise> { - const method = 'starknet_subscribePendingTransactions'; - const params = { - transaction_details: transactionDetails, - sender_address: senderAddress && bigNumberishArrayToHexadecimalStringArray(senderAddress), + public async subscribeNewTransactions( + params: SubscribeNewTransactionsParams = {} + ): Promise> { + const method = 'starknet_subscribeNewTransactions'; + const rpcParams = { + finality_status: params.finalityStatus, + sender_address: + params.senderAddress && bigNumberishArrayToHexadecimalStringArray(params.senderAddress), }; - const subId = await this.sendReceive(method, params); + const subId = await this.sendReceive(method, rpcParams); const subscription = new Subscription({ channel: this, method, - params, + params: rpcParams, id: subId, maxBufferSize: this.maxBufferSize, }); From 695eba6e987822a3352836964f107049a103389d Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Mon, 4 Aug 2025 15:50:59 +0200 Subject: [PATCH 3/5] fix: simplify ws result types --- __tests__/WebSocketChannel.test.ts | 5 +++-- src/channel/ws/ws_0_9.ts | 19 ++++++++++++++----- www/docs/guides/websocket_channel.md | 2 +- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/__tests__/WebSocketChannel.test.ts b/__tests__/WebSocketChannel.test.ts index 5a614075b..a73bd1879 100644 --- a/__tests__/WebSocketChannel.test.ts +++ b/__tests__/WebSocketChannel.test.ts @@ -1,5 +1,5 @@ /* eslint-disable no-underscore-dangle */ -import { Provider, Subscription, WebSocketChannel } from '../src'; +import { Provider, Subscription, SubscriptionNewHeadsEvent, WebSocketChannel } from '../src'; import { logger } from '../src/global/logger'; import { StarknetChainId } from '../src/global/constants'; import { getTestProvider, TEST_WS_URL } from './config/fixtures'; @@ -65,7 +65,8 @@ describeIfWs('E2E WebSocket Tests', () => { }); test('Test subscribeNewHeads', async () => { - const sub = await webSocketChannel.subscribeNewHeads(); + // type not required, here I just test type availability + const sub: SubscriptionNewHeadsEvent = await webSocketChannel.subscribeNewHeads(); expect(sub).toBeInstanceOf(Subscription); let i = 0; diff --git a/src/channel/ws/ws_0_9.ts b/src/channel/ws/ws_0_9.ts index df80fac40..ba40d5e0c 100644 --- a/src/channel/ws/ws_0_9.ts +++ b/src/channel/ws/ws_0_9.ts @@ -52,6 +52,15 @@ export interface SubscribeNewTransactionsParams { senderAddress?: BigNumberish[]; } +// Subscription Result types +export type SubscriptionNewHeadsEvent = Subscription; +export type SubscriptionStarknetEventsEvent = Subscription; +export type SubscriptionTransactionStatusEvent = Subscription; +export type SubscriptionNewTransactionReceiptsEvent = Subscription< + NewTransactionReceiptsEvent['result'] +>; +export type SubscriptionNewTransactionEvent = Subscription; + /** * Options for configuring the automatic reconnection behavior of the WebSocketChannel. */ @@ -580,7 +589,7 @@ export class WebSocketChannel { */ public async subscribeNewHeads( params: SubscribeNewHeadsParams = {} - ): Promise> { + ): Promise { const method = 'starknet_subscribeNewHeads'; const rpcParams = { block_id: params.blockIdentifier ? new Block(params.blockIdentifier).identifier : undefined, @@ -604,7 +613,7 @@ export class WebSocketChannel { */ public async subscribeEvents( params: SubscribeEventsParams = {} - ): Promise> { + ): Promise { const method = 'starknet_subscribeEvents'; const rpcParams = { from_address: params.fromAddress !== undefined ? toHex(params.fromAddress) : undefined, @@ -631,7 +640,7 @@ export class WebSocketChannel { */ public async subscribeTransactionStatus( params: SubscribeTransactionStatusParams - ): Promise> { + ): Promise { const method = 'starknet_subscribeTransactionStatus'; const rpcParams = { transaction_hash: toHex(params.transactionHash), @@ -656,7 +665,7 @@ export class WebSocketChannel { */ public async subscribeNewTransactionReceipts( params: SubscribeNewTransactionReceiptsParams = {} - ): Promise> { + ): Promise { const method = 'starknet_subscribeNewTransactionReceipts'; const rpcParams = { finality_status: params.finalityStatus, @@ -682,7 +691,7 @@ export class WebSocketChannel { */ public async subscribeNewTransactions( params: SubscribeNewTransactionsParams = {} - ): Promise> { + ): Promise { const method = 'starknet_subscribeNewTransactions'; const rpcParams = { finality_status: params.finalityStatus, diff --git a/www/docs/guides/websocket_channel.md b/www/docs/guides/websocket_channel.md index 74f043ef2..862318c3d 100644 --- a/www/docs/guides/websocket_channel.md +++ b/www/docs/guides/websocket_channel.md @@ -43,7 +43,7 @@ const channel = new WebSocketChannel({ await channel.waitForConnection(); ``` -If you are in an environment without a native `WebSocket` object (like Node.js), you can provide a custom implementation (e.g., from the `ws` library). +If you are in an environment without a native `WebSocket` object (like old node.js), you can provide a custom implementation (e.g., from the `ws` library). ```typescript import WebSocket from 'ws'; From b3232968dbeaf9bed13a3f63fedbd1adf4e14b9a Mon Sep 17 00:00:00 2001 From: Toni Tabak Date: Mon, 4 Aug 2025 16:03:03 +0200 Subject: [PATCH 4/5] docs: websocket docs update --- www/docs/guides/websocket_channel.md | 280 +++++++++++++++++++++++++-- 1 file changed, 264 insertions(+), 16 deletions(-) diff --git a/www/docs/guides/websocket_channel.md b/www/docs/guides/websocket_channel.md index 862318c3d..1d335c728 100644 --- a/www/docs/guides/websocket_channel.md +++ b/www/docs/guides/websocket_channel.md @@ -6,15 +6,17 @@ sidebar_position: 7 The `WebSocketChannel` provides a robust, real-time connection to a Starknet RPC Node, enabling you to subscribe to events and receive updates as they happen. It's designed for production use with features like automatic reconnection, request queueing, and a modern subscription management API. -Ensure that you are using a node that supports the required RPC spec (e.g., v0.8.0). +Ensure that you are using a node that supports the required RPC spec (RPC 0.9). ## Key Features -- **Modern API**: Uses a `Subscription` object to manage event streams. -- **Automatic Reconnection**: Automatically detects connection drops and reconnects with an exponential backoff strategy. -- **Request Queueing**: Queues any requests made while the connection is down and executes them upon reconnection. -- **Event Buffering**: Buffers events for a subscription if no handler is attached, preventing event loss. -- **Custom Errors**: Throws specific, catchable errors like `TimeoutError` for more reliable error handling. +- **Object-Based API**: All subscription methods now use object-based parameters for better type safety and extensibility +- **Modern Subscription Management**: Uses a `Subscription` object to manage event streams with typed results +- **Automatic Reconnection**: Automatically detects connection drops and reconnects with an exponential backoff strategy +- **Request Queueing**: Queues any requests made while the connection is down and executes them upon reconnection +- **Event Buffering**: Buffers events for a subscription if no handler is attached, preventing event loss +- **Custom Errors**: Throws specific, catchable errors like `TimeoutError` for more reliable error handling +- **Full Type Safety**: Complete TypeScript support with exported parameter interfaces and subscription types ## Importing @@ -24,7 +26,23 @@ To get started, import the necessary classes and types from the `starknet` libra import { WebSocketChannel, WebSocketOptions, + ReconnectOptions, + WebSocketModule, Subscription, + SubscriptionOptions, + // Subscription parameter interfaces + SubscribeNewHeadsParams, + SubscribeEventsParams, + SubscribeTransactionStatusParams, + SubscribeNewTransactionReceiptsParams, + SubscribeNewTransactionsParams, + // Typed subscription results + SubscriptionNewHeadsEvent, + SubscriptionStarknetEventsEvent, + SubscriptionTransactionStatusEvent, + SubscriptionNewTransactionReceiptsEvent, + SubscriptionNewTransactionEvent, + // Error types TimeoutError, WebSocketNotConnectedError, } from 'starknet'; @@ -36,21 +54,21 @@ Instantiate `WebSocketChannel` with your node's WebSocket URL. ```typescript const channel = new WebSocketChannel({ - nodeUrl: 'wss://your-starknet-node/rpc/v0_8', + nodeUrl: 'wss://your-starknet-node/rpc/v0_9', }); // It's good practice to wait for the initial connection. await channel.waitForConnection(); ``` -If you are in an environment without a native `WebSocket` object (like old node.js), you can provide a custom implementation (e.g., from the `ws` library). +If you are in an environment without a native `WebSocket` object (like older node.js), you can provide a custom implementation (e.g., from the `ws` library). ```typescript import WebSocket from 'ws'; const channel = new WebSocketChannel({ nodeUrl: '...', - websocket: WebSocket, // Provide the implementation class + websocket: WebSocket as WebSocketModule, // Provide the implementation class }); await channel.waitForConnection(); @@ -82,8 +100,10 @@ When you call a subscription method (e.g., `subscribeNewHeads`), it returns a `P You attach a listener with `.on()` and stop listening with `.unsubscribe()`. ```typescript -// 1. Subscribe to an event stream. -const sub: Subscription = await channel.subscribeNewHeads(); +// 1. Subscribe to an event stream using object-based API. +const sub: SubscriptionNewHeadsEvent = await channel.subscribeNewHeads({ + blockIdentifier: 'latest', // optional: 'latest', 'pending', block hash, or block number +}); // 2. Attach a handler to process incoming data. sub.on((data) => { @@ -102,6 +122,51 @@ If you `await` a subscription but don't immediately attach an `.on()` handler, t The buffer size is limited by the `maxBufferSize` in the channel options. If the buffer is full, the oldest events are dropped. +## Type Safety and Exported Types + +Starknet.js v8 provides complete TypeScript support for WebSocket subscriptions. All subscription methods return properly typed `Subscription` objects, and parameter interfaces are exported for external use. + +```typescript +import { SubscriptionNewHeadsEvent, SubscribeEventsParams } from 'starknet'; + +// Typed subscription result +const headsSub: SubscriptionNewHeadsEvent = await channel.subscribeNewHeads(); + +// Typed parameters +const eventsParams: SubscribeEventsParams = { + fromAddress: '0x1234...', + finalityStatus: 'ACCEPTED_ON_L2', +}; +const eventsSub = await channel.subscribeEvents(eventsParams); + +// Type-safe event handling +headsSub.on((blockHeader) => { + // blockHeader is properly typed as NewHeadsEvent['result'] + console.log('Block number:', blockHeader.block_number); + console.log('Block hash:', blockHeader.block_hash); +}); +``` + +### Available Parameter Types + +All subscription parameter interfaces are exported: + +- `SubscribeNewHeadsParams` - For `subscribeNewHeads()` +- `SubscribeEventsParams` - For `subscribeEvents()` +- `SubscribeTransactionStatusParams` - For `subscribeTransactionStatus()` +- `SubscribeNewTransactionReceiptsParams` - For `subscribeNewTransactionReceipts()` +- `SubscribeNewTransactionsParams` - For `subscribeNewTransactions()` + +### Available Subscription Result Types + +All subscription result types are exported for type annotations: + +- `SubscriptionNewHeadsEvent` - Result type for new block headers +- `SubscriptionStarknetEventsEvent` - Result type for contract events +- `SubscriptionTransactionStatusEvent` - Result type for transaction status updates +- `SubscriptionNewTransactionReceiptsEvent` - Result type for transaction receipts +- `SubscriptionNewTransactionEvent` - Result type for new transactions + ## Automatic Reconnection and Queueing The channel is designed to be resilient. If the connection drops, it will automatically try to reconnect. While reconnecting: @@ -130,11 +195,194 @@ try { ## Available Subscription Methods -Each of these methods returns a `Promise`. +All subscription methods now use object-based parameters for better type safety and extensibility. Each method returns a `Promise` with typed results. + +### `subscribeNewHeads(params?: SubscribeNewHeadsParams)` + +Subscribes to new block headers. + +```typescript +// Subscribe to all new blocks +const sub1 = await channel.subscribeNewHeads(); + +// Subscribe from a specific block +const sub2 = await channel.subscribeNewHeads({ + blockIdentifier: 'latest', // or block number/hash +}); +``` + +### `subscribeEvents(params?: SubscribeEventsParams)` + +Subscribes to contract events with optional filtering. + +```typescript +// Subscribe to all events +const sub1 = await channel.subscribeEvents(); + +// Subscribe to events with filters +const sub2 = await channel.subscribeEvents({ + fromAddress: '0x1234...', // Filter by contract address + keys: [['0xkey1', '0xkey2']], // Filter by event keys + blockIdentifier: 'latest', + finalityStatus: 'ACCEPTED_ON_L2', // Filter by finality status +}); +``` + +### `subscribeTransactionStatus(params: SubscribeTransactionStatusParams)` + +Subscribes to status updates for a specific transaction. + +```typescript +const sub = await channel.subscribeTransactionStatus({ + transactionHash: '0x1234...', // Required + blockIdentifier: 'latest', // Optional +}); +``` -- `subscribeNewHeads` -- `subscribeEvents` -- `subscribeTransactionStatus` -- `subscribePendingTransaction` +### `subscribeNewTransactionReceipts(params?: SubscribeNewTransactionReceiptsParams)` + +Subscribes to new transaction receipts (RPC 0.9+). + +```typescript +// Subscribe to all transaction receipts +const sub1 = await channel.subscribeNewTransactionReceipts(); + +// Subscribe with filters +const sub2 = await channel.subscribeNewTransactionReceipts({ + finalityStatus: ['ACCEPTED_ON_L2'], // Filter by finality status + senderAddress: ['0x1234...', '0x5678...'], // Filter by sender addresses +}); +``` + +### `subscribeNewTransactions(params?: SubscribeNewTransactionsParams)` + +Subscribes to new transactions (RPC 0.9+). + +```typescript +// Subscribe to all transactions +const sub1 = await channel.subscribeNewTransactions(); + +// Subscribe with filters +const sub2 = await channel.subscribeNewTransactions({ + finalityStatus: ['ACCEPTED_ON_L2'], // Filter by finality status + senderAddress: ['0x1234...'], // Filter by sender addresses +}); +``` + +## Migration from v7 to v8 + +The WebSocket API has been updated to use object-based parameters: + +```typescript +// v7 (positional arguments) +const sub = await channel.subscribeEvents( + '0x1234...', // fromAddress + [['0xkey1']], // keys + 'latest', // blockIdentifier + 'ACCEPTED_ON_L2' // finalityStatus +); + +// v8 (object-based parameters) +const sub = await channel.subscribeEvents({ + fromAddress: '0x1234...', + keys: [['0xkey1']], + blockIdentifier: 'latest', + finalityStatus: 'ACCEPTED_ON_L2', +}); +``` + +**Breaking Changes:** + +- `subscribePendingTransaction` has been removed (not available in RPC 0.9) +- All subscription methods now use object parameters +- New methods `subscribeNewTransactionReceipts` and `subscribeNewTransactions` added for RPC 0.9 + +## Complete Example + +Here's a comprehensive example showcasing the new object-based API and type safety: + +```typescript +import { + WebSocketChannel, + SubscriptionNewHeadsEvent, + SubscriptionStarknetEventsEvent, + SubscribeEventsParams, + TimeoutError, + WebSocketNotConnectedError, +} from 'starknet'; + +async function main() { + // Create WebSocket channel + const channel = new WebSocketChannel({ + nodeUrl: 'wss://starknet-sepolia.public.blastapi.io/rpc/v0_9', + autoReconnect: true, + reconnectOptions: { + retries: 5, + delay: 2000, + }, + requestTimeout: 30000, + maxBufferSize: 1000, + }); + + try { + // Wait for connection + await channel.waitForConnection(); + console.log('Connected to WebSocket'); + + // Subscribe to new block headers + const headsSub: SubscriptionNewHeadsEvent = await channel.subscribeNewHeads({ + blockIdentifier: 'latest', + }); + + headsSub.on((blockHeader) => { + console.log(`New block ${blockHeader.block_number}: ${blockHeader.block_hash}`); + }); + + // Subscribe to contract events with filtering + const eventParams: SubscribeEventsParams = { + fromAddress: '0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7', // ETH token + finalityStatus: 'ACCEPTED_ON_L2', + }; + + const eventsSub: SubscriptionStarknetEventsEvent = await channel.subscribeEvents(eventParams); + + eventsSub.on((eventData) => { + console.log('Contract event:', eventData.event); + }); + + // Subscribe to transaction receipts (RPC 0.9+) + const receiptsSub = await channel.subscribeNewTransactionReceipts({ + finalityStatus: ['ACCEPTED_ON_L2'], + }); + + receiptsSub.on((receipt) => { + console.log('New transaction receipt:', receipt.transaction_receipt.transaction_hash); + }); + + // Keep running for demonstration + await new Promise((resolve) => setTimeout(resolve, 60000)); + + // Clean up subscriptions + await headsSub.unsubscribe(); + await eventsSub.unsubscribe(); + await receiptsSub.unsubscribe(); + } catch (error) { + if (error instanceof TimeoutError) { + console.error('Connection timeout:', error.message); + } else if (error instanceof WebSocketNotConnectedError) { + console.error('WebSocket not connected:', error.message); + } else { + console.error('Unexpected error:', error); + } + } finally { + // Close the connection + channel.disconnect(); + await channel.waitForDisconnection(); + console.log('Disconnected from WebSocket'); + } +} + +main().catch(console.error); +``` For more details, see the complete [API documentation](/docs/next/API/classes/WebSocketChannel). From fd71b82c271f5cdb1209b74642828e8aa78a3911 Mon Sep 17 00:00:00 2001 From: Petar Penovic Date: Tue, 5 Aug 2025 16:30:12 +0200 Subject: [PATCH 5/5] ci: execute websocket tests for devnet --- .github/workflows/_test.yml | 25 ++++++++++++++++++---- .github/workflows/manual-tests-devnet.yml | 14 ++++++------ .github/workflows/manual-tests-testnet.yml | 2 +- .github/workflows/pr-push-dev.yml | 12 +++++------ 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/.github/workflows/_test.yml b/.github/workflows/_test.yml index 3ecd13ac1..80b6a89eb 100644 --- a/.github/workflows/_test.yml +++ b/.github/workflows/_test.yml @@ -31,16 +31,17 @@ jobs: test: name: Run tests runs-on: ubuntu-latest + timeout-minutes: 20 # TODO - periodically check if conditional services are supported; https://github.com/actions/runner/issues/822 services: devnet: - image: ${{ (inputs.use-devnet) && 'shardlabs/starknet-devnet-rs:0.5.0-rc.3' || '' }} + image: ${{ (inputs.use-devnet) && 'shardlabs/starknet-devnet-rs:0.5.0-rc.4' || '' }} ports: - 5050:5050 env: - PROTOCOL: ${{ inputs.protocol == 'WS' && 'wss' || 'https' }} + PROTOCOL: ${{ inputs.protocol == 'WS' && 'wss' || inputs.protocol == 'RPC' && 'https' || '' }} NODE: ${{ inputs.node == 'Juno' && 'juno' || inputs.node == 'Pathfinder' && 'pathfinder' || '' }} VERSION: ${{ inputs.version }} @@ -48,6 +49,9 @@ jobs: TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} TEST_ACCOUNT_ADDRESS: ${{ secrets.TEST_ACCOUNT_ADDRESS }} + DEVNET_RPC_URL: 'http://127.0.0.1:5050/rpc' + DEVNET_WS_URL: 'ws://127.0.0.1:5050/ws' + steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 @@ -62,8 +66,21 @@ jobs: run: | echo "::add-mask::$FORMATED_URL" echo "NODE_URL=$FORMATED_URL" >> "$GITHUB_OUTPUT" + if: ${{ !!env.FORMATED_URL }} env: FORMATED_URL: ${{ format(env.NODE_URL, env.PROTOCOL, env.NODE, env.VERSION) }} + - id: url-resolution + name: url-resolution + run: | + echo "DEVNET_RPC_URL=$DEVNET_RPC_URL" >> "$GITHUB_OUTPUT" + echo "DEVNET_WS_URL=$DEVNET_WS_URL" >> "$GITHUB_OUTPUT" + echo "REMOTE_RPC_URL=$REMOTE_RPC_URL" >> "$GITHUB_OUTPUT" + echo "REMOTE_WS_URL=$REMOTE_WS_URL" >> "$GITHUB_OUTPUT" + env: + DEVNET_RPC_URL: ${{ inputs.use-devnet && env.DEVNET_RPC_URL || null }} + DEVNET_WS_URL: ${{ inputs.use-devnet && inputs.protocol == 'WS' && env.DEVNET_WS_URL || null }} + REMOTE_RPC_URL: ${{ inputs.protocol != 'WS' && steps.env-modification.outputs.NODE_URL || null }} + REMOTE_WS_URL: ${{ inputs.protocol == 'WS' && (env.NODE == 'juno' && secrets.TEST_WS_JUNO || steps.env-modification.outputs.NODE_URL) || null }} - id: run-tests name: run tests run: | @@ -71,7 +88,7 @@ jobs: [[ "${{ inputs.protocol }}" == "WS" ]] && args+=( '__tests__/WebSocket' ) npm run test:coverage "${args[@]}" env: - TEST_RPC_URL: ${{ inputs.protocol != 'WS' && steps.env-modification.outputs.NODE_URL || null }} - TEST_WS_URL: ${{ inputs.protocol == 'WS' && (env.NODE == 'juno' && secrets.TEST_WS_JUNO || steps.env-modification.outputs.NODE_URL) || null }} + TEST_RPC_URL: ${{ steps.url-resolution.outputs.DEVNET_RPC_URL || steps.url-resolution.outputs.REMOTE_RPC_URL }} + TEST_WS_URL: ${{ steps.url-resolution.outputs.DEVNET_WS_URL || steps.url-resolution.outputs.REMOTE_WS_URL }} TEST_ACCOUNT_PRIVATE_KEY: ${{ secrets.TEST_ACCOUNT_PRIVATE_KEY }} TEST_ACCOUNT_ADDRESS: ${{ secrets.TEST_ACCOUNT_ADDRESS }} diff --git a/.github/workflows/manual-tests-devnet.yml b/.github/workflows/manual-tests-devnet.yml index 97ce18fdb..52502c65c 100644 --- a/.github/workflows/manual-tests-devnet.yml +++ b/.github/workflows/manual-tests-devnet.yml @@ -5,21 +5,19 @@ on: ignore-scripts: description: 'Ignore scripts' type: boolean - default: false + default: true jobs: tests: - name: Run test on ${{ matrix.name }} + name: Run test on Devnet ${{ matrix.protocol }} strategy: + max-parallel: 1 fail-fast: false matrix: - include: - - name: rpc-devnet - TEST_NODE_URL: http://127.0.0.1:5050/rpc + protocol: [RPC, WS] uses: ./.github/workflows/_test.yml with: - use-devnet: ${{ matrix.TEST_NODE_URL != '' }} + use-devnet: true + protocol: ${{ matrix.protocol }} ignore-scripts: ${{ inputs.ignore-scripts }} - secrets: - TEST_NODE_URL: ${{ matrix.TEST_NODE_URL }} diff --git a/.github/workflows/manual-tests-testnet.yml b/.github/workflows/manual-tests-testnet.yml index 63000d5c3..d39a09cdf 100644 --- a/.github/workflows/manual-tests-testnet.yml +++ b/.github/workflows/manual-tests-testnet.yml @@ -5,7 +5,7 @@ on: ignore-scripts: description: 'Ignore scripts' type: boolean - default: false + default: true fail-fast: description: 'Fail fast' type: boolean diff --git a/.github/workflows/pr-push-dev.yml b/.github/workflows/pr-push-dev.yml index 72c0b52c2..7ab9d520f 100644 --- a/.github/workflows/pr-push-dev.yml +++ b/.github/workflows/pr-push-dev.yml @@ -38,21 +38,19 @@ jobs: cancel_others: 'true' tests: - name: Run test on ${{ matrix.name }} + name: Run test on Devnet ${{ matrix.protocol }} needs: [skip_check] if: needs.skip_check.outputs.should_skip != 'true' strategy: + max-parallel: 1 fail-fast: false matrix: - include: - - name: rpc-devnet - TEST_NODE_URL: http://127.0.0.1:5050/rpc + protocol: [RPC, WS] uses: ./.github/workflows/_test.yml with: - use-devnet: ${{ matrix.TEST_NODE_URL != '' }} - secrets: - TEST_NODE_URL: ${{ matrix.TEST_NODE_URL }} + use-devnet: true + protocol: ${{ matrix.protocol }} release: name: Release