From 9e8ed384beef78bec31632e4eeb22764cafa8736 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Wed, 4 Mar 2026 16:01:53 +0100 Subject: [PATCH 01/43] 3.0.0 --- .changeset/all-rings-bow.md | 18 ------- .changeset/brave-papayas-join.md | 18 ------- .changeset/bright-pots-hope.md | 18 ------- .changeset/chilly-hands-carry.md | 18 ------- .changeset/crisp-zoos-retire.md | 18 ------- .changeset/cyan-radios-relax.md | 18 ------- .changeset/four-beds-stare.md | 18 ------- .changeset/free-tips-switch.md | 18 ------- .changeset/goofy-laws-serve.md | 21 -------- .changeset/modern-views-write.md | 18 ------- .changeset/new-turkeys-double.md | 18 ------- .changeset/nice-tips-slide.md | 18 ------- .changeset/nine-areas-fall.md | 18 ------- .changeset/open-toes-marry.md | 20 -------- .changeset/plain-feet-stare.md | 17 ------- .changeset/pre.json | 46 ----------------- .changeset/smart-cups-exist.md | 18 ------- .changeset/tiny-files-chew.md | 18 ------- .changeset/wild-feet-carry.md | 17 ------- .changeset/wise-heads-buy.md | 17 ------- packages/services/api/CHANGELOG.md | 25 ++++++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 25 ++++++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 25 ++++++++++ packages/services/guard/package.json | 2 +- .../services/identity-instrument/CHANGELOG.md | 25 ++++++++++ .../services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 25 ++++++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 25 ++++++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 25 ++++++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 46 +++++++++++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 21 ++++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 25 ++++++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 48 ++++++++++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 49 ++++++++++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 25 ++++++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 50 +++++++++++++++++++ packages/wallet/wdk/package.json | 2 +- repo/eslint-config/CHANGELOG.md | 7 +++ repo/eslint-config/package.json | 2 +- repo/typescript-config/CHANGELOG.md | 7 +++ repo/typescript-config/package.json | 2 +- repo/ui/CHANGELOG.md | 7 +++ repo/ui/package.json | 2 +- 54 files changed, 477 insertions(+), 407 deletions(-) delete mode 100644 .changeset/all-rings-bow.md delete mode 100644 .changeset/brave-papayas-join.md delete mode 100644 .changeset/bright-pots-hope.md delete mode 100644 .changeset/chilly-hands-carry.md delete mode 100644 .changeset/crisp-zoos-retire.md delete mode 100644 .changeset/cyan-radios-relax.md delete mode 100644 .changeset/four-beds-stare.md delete mode 100644 .changeset/free-tips-switch.md delete mode 100644 .changeset/goofy-laws-serve.md delete mode 100644 .changeset/modern-views-write.md delete mode 100644 .changeset/new-turkeys-double.md delete mode 100644 .changeset/nice-tips-slide.md delete mode 100644 .changeset/nine-areas-fall.md delete mode 100644 .changeset/open-toes-marry.md delete mode 100644 .changeset/plain-feet-stare.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/smart-cups-exist.md delete mode 100644 .changeset/tiny-files-chew.md delete mode 100644 .changeset/wild-feet-carry.md delete mode 100644 .changeset/wise-heads-buy.md diff --git a/.changeset/all-rings-bow.md b/.changeset/all-rings-bow.md deleted file mode 100644 index 402bc8aee6..0000000000 --- a/.changeset/all-rings-bow.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -ethauth support diff --git a/.changeset/brave-papayas-join.md b/.changeset/brave-papayas-join.md deleted file mode 100644 index bd37b6ba89..0000000000 --- a/.changeset/brave-papayas-join.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -New chains, minor fixes diff --git a/.changeset/bright-pots-hope.md b/.changeset/bright-pots-hope.md deleted file mode 100644 index 6bd9a887ca..0000000000 --- a/.changeset/bright-pots-hope.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -Beta release with dapp connector fixes diff --git a/.changeset/chilly-hands-carry.md b/.changeset/chilly-hands-carry.md deleted file mode 100644 index 82086927ce..0000000000 --- a/.changeset/chilly-hands-carry.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -New chains, relayer rpc fix diff --git a/.changeset/crisp-zoos-retire.md b/.changeset/crisp-zoos-retire.md deleted file mode 100644 index 84fd2a25c6..0000000000 --- a/.changeset/crisp-zoos-retire.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -dapp-client updates diff --git a/.changeset/cyan-radios-relax.md b/.changeset/cyan-radios-relax.md deleted file mode 100644 index ec408d6cd9..0000000000 --- a/.changeset/cyan-radios-relax.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -Fix signer 404 error, minor fixes diff --git a/.changeset/four-beds-stare.md b/.changeset/four-beds-stare.md deleted file mode 100644 index 05d79c07d3..0000000000 --- a/.changeset/four-beds-stare.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -multicall3 optimization diff --git a/.changeset/free-tips-switch.md b/.changeset/free-tips-switch.md deleted file mode 100644 index 0921b6d355..0000000000 --- a/.changeset/free-tips-switch.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -3.0.0 beta diff --git a/.changeset/goofy-laws-serve.md b/.changeset/goofy-laws-serve.md deleted file mode 100644 index 690a5f76b4..0000000000 --- a/.changeset/goofy-laws-serve.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch -'@repo/eslint-config': patch -'@repo/typescript-config': patch -'@repo/ui': patch ---- - -Beta release for v3 diff --git a/.changeset/modern-views-write.md b/.changeset/modern-views-write.md deleted file mode 100644 index a70d6c1548..0000000000 --- a/.changeset/modern-views-write.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -Final RC before 3.0.0 diff --git a/.changeset/new-turkeys-double.md b/.changeset/new-turkeys-double.md deleted file mode 100644 index 72f26beb9c..0000000000 --- a/.changeset/new-turkeys-double.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -Apple auth fixes diff --git a/.changeset/nice-tips-slide.md b/.changeset/nice-tips-slide.md deleted file mode 100644 index 1595123e78..0000000000 --- a/.changeset/nice-tips-slide.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -Apple auth fix diff --git a/.changeset/nine-areas-fall.md b/.changeset/nine-areas-fall.md deleted file mode 100644 index 8495b8a5c4..0000000000 --- a/.changeset/nine-areas-fall.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -Userdata service updates diff --git a/.changeset/open-toes-marry.md b/.changeset/open-toes-marry.md deleted file mode 100644 index ec5bf32174..0000000000 --- a/.changeset/open-toes-marry.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch -'@repo/eslint-config': patch -'@repo/typescript-config': patch -'@repo/ui': patch ---- - -3.0.0-beta.3 with fixes diff --git a/.changeset/plain-feet-stare.md b/.changeset/plain-feet-stare.md deleted file mode 100644 index c99c82026b..0000000000 --- a/.changeset/plain-feet-stare.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -3.0.0-beta.2 with identity instrument updates diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index e6c3e91ee0..0000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "mode": "exit", - "tag": "beta", - "initialVersions": { - "docs": "0.1.0", - "web": "0.1.0", - "@0xsequence/api": "3.0.0-beta.18", - "@0xsequence/builder": "3.0.0-beta.18", - "@0xsequence/guard": "3.0.0-beta.18", - "@0xsequence/identity-instrument": "3.0.0-beta.18", - "@0xsequence/indexer": "3.0.0-beta.18", - "@0xsequence/marketplace": "3.0.0-beta.18", - "@0xsequence/metadata": "3.0.0-beta.18", - "@0xsequence/relayer": "3.0.0-beta.18", - "@0xsequence/userdata": "3.0.0-beta.18", - "@0xsequence/abi": "3.0.0-beta.18", - "@0xsequence/wallet-core": "3.0.0-beta.18", - "@0xsequence/dapp-client": "3.0.0-beta.18", - "@0xsequence/wallet-primitives": "3.0.0-beta.18", - "@0xsequence/wallet-wdk": "3.0.0-beta.18", - "@repo/eslint-config": "0.0.1-beta.1", - "@repo/typescript-config": "0.0.1-beta.1", - "@repo/ui": "0.0.1-beta.1" - }, - "changesets": [ - "all-rings-bow", - "brave-papayas-join", - "bright-pots-hope", - "chilly-hands-carry", - "crisp-zoos-retire", - "cyan-radios-relax", - "four-beds-stare", - "free-tips-switch", - "goofy-laws-serve", - "modern-views-write", - "new-turkeys-double", - "nice-tips-slide", - "nine-areas-fall", - "open-toes-marry", - "plain-feet-stare", - "smart-cups-exist", - "tiny-files-chew", - "wild-feet-carry", - "wise-heads-buy" - ] -} diff --git a/.changeset/smart-cups-exist.md b/.changeset/smart-cups-exist.md deleted file mode 100644 index 556adcbbd7..0000000000 --- a/.changeset/smart-cups-exist.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -Relayer fee options fix diff --git a/.changeset/tiny-files-chew.md b/.changeset/tiny-files-chew.md deleted file mode 100644 index 672546fd05..0000000000 --- a/.changeset/tiny-files-chew.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/userdata': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -dapp client updates for EOA login diff --git a/.changeset/wild-feet-carry.md b/.changeset/wild-feet-carry.md deleted file mode 100644 index 962942831c..0000000000 --- a/.changeset/wild-feet-carry.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -3.0.0-beta.1 diff --git a/.changeset/wise-heads-buy.md b/.changeset/wise-heads-buy.md deleted file mode 100644 index 1c35a4d355..0000000000 --- a/.changeset/wise-heads-buy.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'@0xsequence/api': patch -'@0xsequence/builder': patch -'@0xsequence/guard': patch -'@0xsequence/identity-instrument': patch -'@0xsequence/indexer': patch -'@0xsequence/marketplace': patch -'@0xsequence/metadata': patch -'@0xsequence/relayer': patch -'@0xsequence/abi': patch -'@0xsequence/wallet-core': patch -'@0xsequence/dapp-client': patch -'@0xsequence/wallet-primitives': patch -'@0xsequence/wallet-wdk': patch ---- - -RC5 upgrade diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 761d84cf9c..61bd11b9af 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/api +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 698af864c1..0d4b988b21 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.0-beta.19", + "version": "3.0.0", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index ee715b2368..a7a4c60d7a 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/builder +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 07eca60235..1aae80372d 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.0-beta.19", + "version": "3.0.0", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index 931bccffe1..4aa7f3b081 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/guard +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 5a9cf373df..e9e66b91ef 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.0-beta.19", + "version": "3.0.0", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index 4f193f9d27..46667619b3 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/identity-instrument +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index b695e47107..db656ed547 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.0-beta.19", + "version": "3.0.0", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index 1091b17775..17f499fa53 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/indexer +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 03dc328cd3..c8629dc36d 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.0-beta.19", + "version": "3.0.0", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 0af122d3e3..321e03b85b 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/marketplace +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index cced49f58c..39c6be2b68 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.0-beta.19", + "version": "3.0.0", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index efff94d5ba..ca7f29c5d2 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/metadata +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index 52583541af..d700c0630a 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.0-beta.19", + "version": "3.0.0", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 8f4fbbf981..c718a845d3 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,51 @@ # @0xsequence/relayer +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade +- Updated dependencies [f68be62] +- Updated dependencies [49d8a2f] +- Updated dependencies [3411232] +- Updated dependencies [23cb9e9] +- Updated dependencies [f5f6a7a] +- Updated dependencies [e7de3b1] +- Updated dependencies [493836f] +- Updated dependencies [30e1f1a] +- Updated dependencies [d5017e8] +- Updated dependencies [24a5fab] +- Updated dependencies [e5e1a03] +- Updated dependencies [0b63113] +- Updated dependencies [a89134a] +- Updated dependencies [7c6c811] +- Updated dependencies +- Updated dependencies [98ce38b] +- Updated dependencies [747e6b5] +- Updated dependencies [40c19ff] +- Updated dependencies [6d5de25] +- Updated dependencies [934acd1] + - @0xsequence/wallet-primitives@3.0.0 + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 079fe9979c..ab7f8d8cb0 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.0-beta.19", + "version": "3.0.0", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 2fad59d85d..abea2c174f 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,26 @@ # @0xsequence/userdata +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 3.0.0 release +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 60483871d5..6cef1fe591 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.0-beta.19", + "version": "3.0.0", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index d7f2586696..25e7590b46 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/abi +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index b5b00a94b1..4efa48abe8 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.0-beta.19", + "version": "3.0.0", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index 9d4dd02b21..be05bec0b5 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,53 @@ # @0xsequence/wallet-core +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade +- Updated dependencies [f68be62] +- Updated dependencies [49d8a2f] +- Updated dependencies [3411232] +- Updated dependencies [23cb9e9] +- Updated dependencies [f5f6a7a] +- Updated dependencies [e7de3b1] +- Updated dependencies [493836f] +- Updated dependencies [30e1f1a] +- Updated dependencies [d5017e8] +- Updated dependencies [24a5fab] +- Updated dependencies [e5e1a03] +- Updated dependencies [0b63113] +- Updated dependencies [a89134a] +- Updated dependencies [7c6c811] +- Updated dependencies +- Updated dependencies [98ce38b] +- Updated dependencies [747e6b5] +- Updated dependencies [40c19ff] +- Updated dependencies [6d5de25] +- Updated dependencies [934acd1] + - @0xsequence/guard@3.0.0 + - @0xsequence/relayer@3.0.0 + - @0xsequence/wallet-primitives@3.0.0 + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index fec693b90c..a5ced0086f 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.0-beta.19", + "version": "3.0.0", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index fd18e0bf49..92d9641edb 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,54 @@ # @0xsequence/dapp-client +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade +- Updated dependencies [f68be62] +- Updated dependencies [49d8a2f] +- Updated dependencies [3411232] +- Updated dependencies [23cb9e9] +- Updated dependencies [f5f6a7a] +- Updated dependencies [e7de3b1] +- Updated dependencies [493836f] +- Updated dependencies [30e1f1a] +- Updated dependencies [d5017e8] +- Updated dependencies [24a5fab] +- Updated dependencies [e5e1a03] +- Updated dependencies [0b63113] +- Updated dependencies [a89134a] +- Updated dependencies [7c6c811] +- Updated dependencies +- Updated dependencies [98ce38b] +- Updated dependencies [747e6b5] +- Updated dependencies [40c19ff] +- Updated dependencies [6d5de25] +- Updated dependencies [934acd1] + - @0xsequence/guard@3.0.0 + - @0xsequence/relayer@3.0.0 + - @0xsequence/wallet-core@3.0.0 + - @0xsequence/wallet-primitives@3.0.0 + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 9f24471020..afe59a0bc9 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.0-beta.19", + "version": "3.0.0", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index 8ecc6df9b2..200be51020 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,30 @@ # @0xsequence/wallet-primitives +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index 71fcf20cb5..df6e52100b 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.0-beta.19", + "version": "3.0.0", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 2d4d5eaa56..81522e3a47 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,55 @@ # @0xsequence/wallet-wdk +## 3.0.0 + +### Patch Changes + +- f68be62: ethauth support +- 49d8a2f: New chains, minor fixes +- 3411232: Beta release with dapp connector fixes +- 23cb9e9: New chains, relayer rpc fix +- f5f6a7a: dapp-client updates +- e7de3b1: Fix signer 404 error, minor fixes +- 493836f: multicall3 optimization +- 30e1f1a: 3.0.0 beta +- d5017e8: Beta release for v3 +- 24a5fab: Final RC before 3.0.0 +- e5e1a03: Apple auth fixes +- 0b63113: Apple auth fix +- a89134a: Userdata service updates +- 7c6c811: 3.0.0-beta.3 with fixes +- 3.0.0 release +- 98ce38b: 3.0.0-beta.2 with identity instrument updates +- 747e6b5: Relayer fee options fix +- 40c19ff: dapp client updates for EOA login +- 6d5de25: 3.0.0-beta.1 +- 934acd1: RC5 upgrade +- Updated dependencies [f68be62] +- Updated dependencies [49d8a2f] +- Updated dependencies [3411232] +- Updated dependencies [23cb9e9] +- Updated dependencies [f5f6a7a] +- Updated dependencies [e7de3b1] +- Updated dependencies [493836f] +- Updated dependencies [30e1f1a] +- Updated dependencies [d5017e8] +- Updated dependencies [24a5fab] +- Updated dependencies [e5e1a03] +- Updated dependencies [0b63113] +- Updated dependencies [a89134a] +- Updated dependencies [7c6c811] +- Updated dependencies +- Updated dependencies [98ce38b] +- Updated dependencies [747e6b5] +- Updated dependencies [40c19ff] +- Updated dependencies [6d5de25] +- Updated dependencies [934acd1] + - @0xsequence/guard@3.0.0 + - @0xsequence/identity-instrument@3.0.0 + - @0xsequence/relayer@3.0.0 + - @0xsequence/wallet-core@3.0.0 + - @0xsequence/wallet-primitives@3.0.0 + ## 3.0.0-beta.19 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 44997822ab..15a8a75cc2 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.0-beta.19", + "version": "3.0.0", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/repo/eslint-config/CHANGELOG.md b/repo/eslint-config/CHANGELOG.md index ddc6085a88..2df72f2e7a 100644 --- a/repo/eslint-config/CHANGELOG.md +++ b/repo/eslint-config/CHANGELOG.md @@ -1,5 +1,12 @@ # @repo/eslint-config +## 0.0.1 + +### Patch Changes + +- d5017e8: Beta release for v3 +- 7c6c811: 3.0.0-beta.3 with fixes + ## 0.0.1-beta.1 ### Patch Changes diff --git a/repo/eslint-config/package.json b/repo/eslint-config/package.json index 5625bc6999..9c38b69880 100644 --- a/repo/eslint-config/package.json +++ b/repo/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@repo/eslint-config", - "version": "0.0.1-beta.1", + "version": "0.0.1", "type": "module", "private": true, "exports": { diff --git a/repo/typescript-config/CHANGELOG.md b/repo/typescript-config/CHANGELOG.md index 611dc70b2d..3e5ecbabf4 100644 --- a/repo/typescript-config/CHANGELOG.md +++ b/repo/typescript-config/CHANGELOG.md @@ -1,5 +1,12 @@ # @repo/typescript-config +## 0.0.1 + +### Patch Changes + +- d5017e8: Beta release for v3 +- 7c6c811: 3.0.0-beta.3 with fixes + ## 0.0.1-beta.1 ### Patch Changes diff --git a/repo/typescript-config/package.json b/repo/typescript-config/package.json index cb34e9260e..ed931bce61 100644 --- a/repo/typescript-config/package.json +++ b/repo/typescript-config/package.json @@ -1,6 +1,6 @@ { "name": "@repo/typescript-config", - "version": "0.0.1-beta.1", + "version": "0.0.1", "private": true, "license": "MIT", "publishConfig": { diff --git a/repo/ui/CHANGELOG.md b/repo/ui/CHANGELOG.md index 8994e02948..232f9accb7 100644 --- a/repo/ui/CHANGELOG.md +++ b/repo/ui/CHANGELOG.md @@ -1,5 +1,12 @@ # @repo/ui +## 0.0.1 + +### Patch Changes + +- d5017e8: Beta release for v3 +- 7c6c811: 3.0.0-beta.3 with fixes + ## 0.0.1-beta.1 ### Patch Changes diff --git a/repo/ui/package.json b/repo/ui/package.json index 670a816352..f0045e54d0 100644 --- a/repo/ui/package.json +++ b/repo/ui/package.json @@ -1,6 +1,6 @@ { "name": "@repo/ui", - "version": "0.0.1-beta.1", + "version": "0.0.1", "private": true, "type": "module", "exports": { From 09bd0aa2184509e8157f9cc3926c51f65242daed Mon Sep 17 00:00:00 2001 From: Tolgahan Date: Thu, 5 Mar 2026 14:01:38 +0300 Subject: [PATCH 02/43] fix: Base network title --- packages/wallet/primitives/src/network.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/wallet/primitives/src/network.ts b/packages/wallet/primitives/src/network.ts index b176db084d..4f1e8a8de3 100644 --- a/packages/wallet/primitives/src/network.ts +++ b/packages/wallet/primitives/src/network.ts @@ -457,7 +457,7 @@ export const ALL: Network[] = [ chainId: ChainId.BASE, type: NetworkType.MAINNET, name: 'base', - title: 'Base (Coinbase)', + title: 'Base', rpcUrl: getRpcUrl('base'), logoUrl: getLogoUrl(ChainId.BASE), blockExplorer: { @@ -1173,7 +1173,6 @@ export const ALL: Network[] = [ decimals: 18, }, }, - ] function getRpcUrl(networkName: string): string { From 6da5f9b80874fa5ef11827cfb5dec16318873841 Mon Sep 17 00:00:00 2001 From: Michael Standen Date: Sat, 7 Mar 2026 00:20:30 +1300 Subject: [PATCH 03/43] Fix handling for multiple explicit signers (#975) * Update test names * Fix handling for multiple explicit signers --- .../core/src/signers/session-manager.ts | 107 +++++-- .../core/src/signers/session/explicit.ts | 8 +- .../core/src/signers/session/session.ts | 12 +- packages/wallet/core/test/constants.ts | 2 + .../wallet/core/test/session-manager.test.ts | 294 +++++++++++++++++- 5 files changed, 387 insertions(+), 36 deletions(-) diff --git a/packages/wallet/core/src/signers/session-manager.ts b/packages/wallet/core/src/signers/session-manager.ts index ef3d81b3a3..6b23cb7a6c 100644 --- a/packages/wallet/core/src/signers/session-manager.ts +++ b/packages/wallet/core/src/signers/session-manager.ts @@ -18,6 +18,7 @@ import { SessionSigner, SessionSignerInvalidReason, isImplicitSessionSigner, + isIncrementCall, UsageLimit, } from './session/index.js' @@ -130,21 +131,16 @@ export class SessionManager implements SapientSigner { })) } - async findSignersForCalls(wallet: Address.Address, chainId: number, calls: Payload.Call[]): Promise { - // Only use signers that match the topology - const topology = await this.topology - const identitySigners = SessionConfig.getIdentitySigners(topology) - if (identitySigners.length === 0) { - throw new Error('Identity signers not found') - } - - // Prioritize implicit signers - const availableSigners = [...this._implicitSigners, ...this._explicitSigners] - if (availableSigners.length === 0) { - throw new Error('No signers match the topology') - } - - // Find supported signers for each call + /** + * Find one signer per call from the given candidate list (first that supports each call). + */ + private async findSignersForCallsWithCandidates( + wallet: Address.Address, + chainId: number, + calls: Payload.Call[], + topology: SessionConfig.SessionsTopology, + availableSigners: SessionSigner[], + ): Promise { const signers: SessionSigner[] = [] for (const call of calls) { let supported = false @@ -173,9 +169,67 @@ export class SessionManager implements SapientSigner { if (expiredSupportedSigner) { throw new Error(`Signer supporting call is expired: ${expiredSupportedSigner.address}`) } - throw new Error( - `No signer supported for call. ` + `Call: to=${call.to}, data=${call.data}, value=${call.value}, `, - ) + throw new Error(`No signer supported for call. Call: to=${call.to}, data=${call.data}, value=${call.value}, `) + } + } + return signers + } + + async findSignersForCalls(wallet: Address.Address, chainId: number, calls: Payload.Call[]): Promise { + const topology = await this.topology + const identitySigners = SessionConfig.getIdentitySigners(topology) + if (identitySigners.length === 0) { + throw new Error('Identity signers not found') + } + + const availableSigners = [...this._implicitSigners, ...this._explicitSigners] + if (availableSigners.length === 0) { + throw new Error('No signers match the topology') + } + + const nonIncrementCalls: Payload.Call[] = [] + const incrementCalls: Payload.Call[] = [] + for (const call of calls) { + if (isIncrementCall(call, this.address)) { + incrementCalls.push(call) + } else { + nonIncrementCalls.push(call) + } + } + + // Find signers for non-increment calls + const nonIncrementSigners = + nonIncrementCalls.length > 0 + ? await this.findSignersForCallsWithCandidates(wallet, chainId, nonIncrementCalls, topology, availableSigners) + : [] + + let incrementSigners: SessionSigner[] = [] + if (incrementCalls.length > 0) { + // Find signers for increment calls, preferring signers that signed non-increment calls + const incrementCandidates = [ + ...nonIncrementSigners, + ...availableSigners.filter((s) => !nonIncrementSigners.includes(s)), + ] + incrementSigners = await this.findSignersForCallsWithCandidates( + wallet, + chainId, + incrementCalls, + topology, + incrementCandidates, + ) + } + + // Merge back in original call order + const signers: SessionSigner[] = [] + let nonIncrementIndex = 0 + let incrementIndex = 0 + for (const call of calls) { + if (isIncrementCall(call, this.address)) { + signers.push(incrementSigners[incrementIndex]!) + incrementIndex++ + } else { + signers.push(nonIncrementSigners[nonIncrementIndex]!) + nonIncrementIndex++ } } return signers @@ -191,20 +245,23 @@ export class SessionManager implements SapientSigner { } const signers = await this.findSignersForCalls(wallet, chainId, calls) - // Create a map of signers to their associated calls - const signerToCalls = new Map() + // Map each signer to only their non-increment calls + const signerToNonIncrementCalls = new Map() signers.forEach((signer, index) => { const call = calls[index]! - const existingCalls = signerToCalls.get(signer) || [] - signerToCalls.set(signer, [...existingCalls, call]) + if (isIncrementCall(call, this.address)) { + return + } + const existing = signerToNonIncrementCalls.get(signer) || [] + signerToNonIncrementCalls.set(signer, [...existing, call]) }) - // Prepare increments for each explicit signer with their associated calls + // Prepare increments for each explicit signer from their non-increment calls only const increments: UsageLimit[] = ( await Promise.all( - Array.from(signerToCalls.entries()).map(async ([signer, associatedCalls]) => { + Array.from(signerToNonIncrementCalls.entries()).map(async ([signer, nonIncrementCalls]) => { if (isExplicitSessionSigner(signer)) { - return signer.prepareIncrements(wallet, chainId, associatedCalls, this.address, this._provider!) + return signer.prepareIncrements(wallet, chainId, nonIncrementCalls, this.address, this._provider!) } return [] }), diff --git a/packages/wallet/core/src/signers/session/explicit.ts b/packages/wallet/core/src/signers/session/explicit.ts index b7ad087b4f..86395fe701 100644 --- a/packages/wallet/core/src/signers/session/explicit.ts +++ b/packages/wallet/core/src/signers/session/explicit.ts @@ -1,7 +1,7 @@ import { Constants, Payload, Permission, SessionConfig, SessionSignature } from '@0xsequence/wallet-primitives' import { AbiFunction, AbiParameters, Address, Bytes, Hash, Hex, Provider } from 'ox' import { MemoryPkStore, PkStore } from '../pk/index.js' -import { ExplicitSessionSigner, SessionSignerValidity, UsageLimit } from './session.js' +import { ExplicitSessionSigner, isIncrementCall, SessionSignerValidity, UsageLimit } from './session.js' export type ExplicitParams = Omit @@ -208,11 +208,7 @@ export class Explicit implements ExplicitSessionSigner { sessionManagerAddress: Address.Address, provider?: Provider.Provider, ): Promise { - if ( - Address.isEqual(call.to, sessionManagerAddress) && - Hex.size(call.data) > 4 && - Hex.isEqual(Hex.slice(call.data, 0, 4), AbiFunction.getSelector(Constants.INCREMENT_USAGE_LIMIT)) - ) { + if (isIncrementCall(call, sessionManagerAddress)) { // Can sign increment usage calls return true } diff --git a/packages/wallet/core/src/signers/session/session.ts b/packages/wallet/core/src/signers/session/session.ts index 4bcc5bb771..08b2ade814 100644 --- a/packages/wallet/core/src/signers/session/session.ts +++ b/packages/wallet/core/src/signers/session/session.ts @@ -1,5 +1,5 @@ -import { Payload, SessionConfig, SessionSignature } from '@0xsequence/wallet-primitives' -import { Address, Hex, Provider } from 'ox' +import { Constants, Payload, SessionConfig, SessionSignature } from '@0xsequence/wallet-primitives' +import { AbiFunction, Address, Hex, Provider } from 'ox' export type SessionSignerInvalidReason = | 'Expired' @@ -68,3 +68,11 @@ export function isExplicitSessionSigner(signer: SessionSigner): signer is Explic export function isImplicitSessionSigner(signer: SessionSigner): signer is ImplicitSessionSigner { return 'identitySigner' in signer } + +export function isIncrementCall(call: Payload.Call, sessionManagerAddress: Address.Address): boolean { + return ( + Address.isEqual(call.to, sessionManagerAddress) && + Hex.size(call.data) >= 4 && + Hex.isEqual(Hex.slice(call.data, 0, 4), AbiFunction.getSelector(Constants.INCREMENT_USAGE_LIMIT)) + ) +} diff --git a/packages/wallet/core/test/constants.ts b/packages/wallet/core/test/constants.ts index 63e862f380..42b51d49b7 100644 --- a/packages/wallet/core/test/constants.ts +++ b/packages/wallet/core/test/constants.ts @@ -5,6 +5,8 @@ import { Abi, AbiEvent, Address } from 'ox' const envFile = process.env.CI ? '.env.test' : '.env.test.local' dotenvConfig({ path: envFile }) +// Contracts are deployed on Arbitrum + // Requires https://example.com redirectUrl export const EMITTER_ADDRESS1: Address.Address = '0xad90eB52BC180Bd9f66f50981E196f3E996278D3' // Requires https://another-example.com redirectUrl diff --git a/packages/wallet/core/test/session-manager.test.ts b/packages/wallet/core/test/session-manager.test.ts index 93a69ed89d..adf36fb89a 100644 --- a/packages/wallet/core/test/session-manager.test.ts +++ b/packages/wallet/core/test/session-manager.test.ts @@ -1,4 +1,4 @@ -import { Extensions } from '@0xsequence/wallet-primitives' +import { Constants, Extensions } from '@0xsequence/wallet-primitives' import { AbiEvent, AbiFunction, Address, Bytes, Hex, Provider, RpcTransport, Secp256k1 } from 'ox' import { describe, expect, it } from 'vitest' import { Attestation, GenericTree, Payload, Permission, SessionConfig } from '../../primitives/src/index.js' @@ -731,7 +731,7 @@ for (const extension of ALL_EXTENSIONS) { ) it( - 'signs a payload using an explicit session', + 'signs a payload using an explicit session with allowAll and value limit', async () => { const provider = Provider.from(RpcTransport.fromHttp(LOCAL_RPC_URL)) const chainId = Number(await provider.request({ method: 'eth_chainId' })) @@ -804,7 +804,7 @@ for (const extension of ALL_EXTENSIONS) { ) it( - 'signs a payload using an explicit session', + 'signs using explicit session with onlyOnce, consumes usage and rejects second call', async () => { const provider = Provider.from(RpcTransport.fromHttp(LOCAL_RPC_URL)) const chainId = Number(await provider.request({ method: 'eth_chainId' })) @@ -1357,5 +1357,293 @@ for (const extension of ALL_EXTENSIONS) { }, timeout, ) + + it( + 'two explicit sessions with same value limit: exhaust first then second send uses second session (increment from non-increment calls only)', + async () => { + const provider = Provider.from(RpcTransport.fromHttp(LOCAL_RPC_URL)) + const chainId = Number(await provider.request({ method: 'eth_chainId' })) + + const identityPrivateKey = Secp256k1.randomPrivateKey() + const identityAddress = Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey: identityPrivateKey })) + const stateProvider = new State.Local.Provider() + + const targetAddress = randomAddress() + const valueLimit = 500000000000000000n // 0.5 ETH per session + + const sessionPermission: ExplicitSessionConfig = { + chainId, + valueLimit, + deadline: BigInt(Math.floor(Date.now() / 1000) + 3600), + permissions: [PermissionBuilder.for(targetAddress).allowAll().build()], + } + + const explicitPrivateKey1 = Secp256k1.randomPrivateKey() + const explicitSigner1 = new Signers.Session.Explicit(explicitPrivateKey1, { + ...sessionPermission, + }) + + const explicitPrivateKey2 = Secp256k1.randomPrivateKey() + const explicitSigner2 = new Signers.Session.Explicit(explicitPrivateKey2, { + ...sessionPermission, + }) + + let sessionTopology = SessionConfig.addExplicitSession(SessionConfig.emptySessionsTopology(identityAddress), { + ...sessionPermission, + signer: explicitSigner1.address, + }) + sessionTopology = SessionConfig.addExplicitSession(sessionTopology, { + ...sessionPermission, + signer: explicitSigner2.address, + }) + await stateProvider.saveTree(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + const imageHash = GenericTree.hash(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + + const wallet = await Wallet.fromConfiguration( + { + threshold: 1n, + checkpoint: 0n, + topology: [{ type: 'sapient-signer', address: extension.sessions, weight: 1n, imageHash }, Hex.random(32)], + }, + { stateProvider }, + ) + // Fund wallet with 2 ETH so we can send 0.5 ETH twice (each tx needs value + gas) + await provider.request({ + method: 'anvil_setBalance', + params: [wallet.address, Hex.fromNumber(2n * 1000000000000000000n)], + }) + + const sessionManager = new Signers.SessionManager(wallet, { + provider, + sessionManagerAddress: extension.sessions, + explicitSigners: [explicitSigner1, explicitSigner2], + }) + + const call: Payload.Call = { + to: targetAddress, + value: valueLimit, // one full limit + data: '0x' as Hex.Hex, + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', + } + + // First send: uses first session (exhausts it) + const increment1 = await sessionManager.prepareIncrement(wallet.address, chainId, [call]) + expect(increment1).not.toBeNull() + const calls1 = includeIncrement([call], increment1!, extension.sessions) + const tx1 = await buildAndSignCall(wallet, sessionManager, calls1, provider, chainId) + await simulateTransaction(provider, tx1) + + // Second send: same call. First session is exhausted so findSignersForCalls picks second session. + // Payload is [call, increment] (or [increment, call]). signSapient must derive expectedIncrement + // from non-increment calls only so it matches the increment we built for the second session. + const increment2 = await sessionManager.prepareIncrement(wallet.address, chainId, [call]) + expect(increment2).not.toBeNull() + const calls2 = includeIncrement([call], increment2!, extension.sessions) + const tx2 = await buildAndSignCall(wallet, sessionManager, calls2, provider, chainId) + await simulateTransaction(provider, tx2) + }, + timeout, + ) + + describe('increment built from non-increment calls only', () => { + it( + 'prepareIncrement returns null when calls contain only an increment call (no non-increment calls)', + async () => { + const provider = Provider.from(RpcTransport.fromHttp(LOCAL_RPC_URL)) + const chainId = Number(await provider.request({ method: 'eth_chainId' })) + + const identityPrivateKey = Secp256k1.randomPrivateKey() + const identityAddress = Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey: identityPrivateKey })) + const stateProvider = new State.Local.Provider() + + const sessionPermission: ExplicitSessionConfig = { + chainId, + valueLimit: 0n, + deadline: BigInt(Math.floor(Date.now() / 1000) + 3600), + permissions: [PermissionBuilder.for(EMITTER_ADDRESS1).allowAll().build()], + } + const explicitSigner = new Signers.Session.Explicit(Secp256k1.randomPrivateKey(), sessionPermission) + const sessionTopology = SessionConfig.addExplicitSession( + SessionConfig.emptySessionsTopology(identityAddress), + { + ...sessionPermission, + signer: explicitSigner.address, + }, + ) + await stateProvider.saveTree(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + const imageHash = GenericTree.hash(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + + const wallet = await Wallet.fromConfiguration( + { + threshold: 1n, + checkpoint: 0n, + topology: [ + { type: 'sapient-signer', address: extension.sessions, weight: 1n, imageHash }, + Hex.random(32), + ], + }, + { stateProvider }, + ) + const sessionManager = new Signers.SessionManager(wallet, { + provider, + sessionManagerAddress: extension.sessions, + explicitSigners: [explicitSigner], + }) + + // Only an increment call (no non-increment calls). Contract would reject payload with only self-call; we return null. + const incrementOnlyCall: Payload.Call = { + to: extension.sessions, + data: AbiFunction.encodeData(Constants.INCREMENT_USAGE_LIMIT, [[]]), + value: 0n, + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', + } + const result = await sessionManager.prepareIncrement(wallet.address, chainId, [incrementOnlyCall]) + expect(result).toBeNull() + }, + timeout, + ) + + it( + 'prepareIncrement([increment, nonIncrementCall]) produces same increment data as prepareIncrement([nonIncrementCall])', + async () => { + const provider = Provider.from(RpcTransport.fromHttp(LOCAL_RPC_URL)) + const chainId = Number(await provider.request({ method: 'eth_chainId' })) + + const identityPrivateKey = Secp256k1.randomPrivateKey() + const identityAddress = Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey: identityPrivateKey })) + const stateProvider = new State.Local.Provider() + + const sessionPermission: ExplicitSessionConfig = { + chainId, + valueLimit: 0n, + deadline: BigInt(Math.floor(Date.now() / 1000) + 3600), + permissions: [PermissionBuilder.for(EMITTER_ADDRESS1).forFunction(EMITTER_FUNCTIONS[0]).onlyOnce().build()], + } + const explicitSigner = new Signers.Session.Explicit(Secp256k1.randomPrivateKey(), sessionPermission) + const sessionTopology = SessionConfig.addExplicitSession( + SessionConfig.emptySessionsTopology(identityAddress), + { + ...sessionPermission, + signer: explicitSigner.address, + }, + ) + await stateProvider.saveTree(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + const imageHash = GenericTree.hash(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + + const wallet = await Wallet.fromConfiguration( + { + threshold: 1n, + checkpoint: 0n, + topology: [ + { type: 'sapient-signer', address: extension.sessions, weight: 1n, imageHash }, + Hex.random(32), + ], + }, + { stateProvider }, + ) + const sessionManager = new Signers.SessionManager(wallet, { + provider, + sessionManagerAddress: extension.sessions, + explicitSigners: [explicitSigner], + }) + + const nonIncrementCall: Payload.Call = { + to: EMITTER_ADDRESS1, + value: 0n, + data: AbiFunction.encodeData(EMITTER_FUNCTIONS[0]), + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', + } + + const fromNonIncrementOnly = await sessionManager.prepareIncrement(wallet.address, chainId, [ + nonIncrementCall, + ]) + expect(fromNonIncrementOnly).not.toBeNull() + + // Pass [staleIncrement, nonIncrementCall] — increment is ignored when building; result should match + const withStaleIncrement = await sessionManager.prepareIncrement(wallet.address, chainId, [ + fromNonIncrementOnly!, + nonIncrementCall, + ]) + expect(withStaleIncrement).not.toBeNull() + expect(withStaleIncrement!.data).toEqual(fromNonIncrementOnly!.data) + }, + timeout, + ) + + it( + 'payload with implicit and explicit: increment built only from explicit non-increment call', + async () => { + const provider = Provider.from(RpcTransport.fromHttp(LOCAL_RPC_URL)) + const chainId = Number(await provider.request({ method: 'eth_chainId' })) + + const identityPrivateKey = Secp256k1.randomPrivateKey() + const identityAddress = Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey: identityPrivateKey })) + const stateProvider = new State.Local.Provider() + + const redirectUrl = 'https://example.com' + const implicitSigner = await createImplicitSigner(redirectUrl, identityPrivateKey) + const sessionPermission: ExplicitSessionConfig = { + chainId, + valueLimit: 0n, + deadline: BigInt(Math.floor(Date.now() / 1000) + 3600), + permissions: [PermissionBuilder.for(EMITTER_ADDRESS1).forFunction(EMITTER_FUNCTIONS[0]).onlyOnce().build()], + } + const explicitSigner = new Signers.Session.Explicit(Secp256k1.randomPrivateKey(), sessionPermission) + + // Topology: identity + blacklist (implicit) + explicit session + let sessionTopology = SessionConfig.emptySessionsTopology(identityAddress) + sessionTopology = SessionConfig.addExplicitSession(sessionTopology, { + ...sessionPermission, + signer: explicitSigner.address, + }) + await stateProvider.saveTree(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + const imageHash = GenericTree.hash(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + + const wallet = await Wallet.fromConfiguration( + { + threshold: 1n, + checkpoint: 0n, + topology: [ + { type: 'sapient-signer', address: extension.sessions, weight: 1n, imageHash }, + Hex.random(32), + ], + }, + { stateProvider }, + ) + const sessionManager = new Signers.SessionManager(wallet, { + provider, + sessionManagerAddress: extension.sessions, + implicitSigners: [implicitSigner], + explicitSigners: [explicitSigner], + }) + + // Explicit call only (onlyOnce produces an increment; implicit does not match this target) + const call: Payload.Call = { + to: EMITTER_ADDRESS1, + value: 0n, + data: AbiFunction.encodeData(EMITTER_FUNCTIONS[0]), + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', + } + const increment = await sessionManager.prepareIncrement(wallet.address, chainId, [call]) + expect(increment).not.toBeNull() + const calls = includeIncrement([call], increment!, extension.sessions) + const transaction = await buildAndSignCall(wallet, sessionManager, calls, provider, chainId) + await simulateTransaction(provider, transaction, EMITTER_EVENT_TOPICS[0]) + }, + timeout, + ) + }) }) } From 86b75c0e33afe71237282545a665dea604b3481c Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Fri, 6 Mar 2026 12:33:53 +0100 Subject: [PATCH 04/43] Add Incentiv mainnet --- packages/wallet/primitives/src/network.ts | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/packages/wallet/primitives/src/network.ts b/packages/wallet/primitives/src/network.ts index 4f1e8a8de3..69f40ae4f4 100644 --- a/packages/wallet/primitives/src/network.ts +++ b/packages/wallet/primitives/src/network.ts @@ -128,6 +128,7 @@ export const ChainId = { SOMNIA: 5031, // INCENTIV + INCENTIV: 24101, INCENTIV_TESTNET_V2: 28802, // KATANA @@ -1036,6 +1037,27 @@ export const ALL: Network[] = [ }, }, + { + chainId: ChainId.INCENTIV, + type: NetworkType.MAINNET, + name: 'incentiv', + title: 'Incentiv', + rpcUrl: getRpcUrl('incentiv'), + logoUrl: getLogoUrl(ChainId.INCENTIV), + blockExplorer: { + name: 'Incentiv Explorer', + url: 'https://explorer.incentiv.io/', + }, + nativeCurrency: { + symbol: 'CENT', + name: 'CENT', + decimals: 18, + }, + contracts: { + multicall3: DEFAULT_MULTICALL3_ADDRESS, + }, + }, + { chainId: ChainId.INCENTIV_TESTNET_V2, type: NetworkType.TESTNET, From 948321f268d7792f88c57b805b4b21499206fec5 Mon Sep 17 00:00:00 2001 From: agusx1211 Date: Fri, 6 Mar 2026 15:44:34 +0000 Subject: [PATCH 05/43] use isIncrementCall in signCall --- .../core/src/signers/session/explicit.ts | 6 +-- .../wallet/core/test/session-manager.test.ts | 54 +++++++++++++++++++ 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/packages/wallet/core/src/signers/session/explicit.ts b/packages/wallet/core/src/signers/session/explicit.ts index 86395fe701..ef78c554a6 100644 --- a/packages/wallet/core/src/signers/session/explicit.ts +++ b/packages/wallet/core/src/signers/session/explicit.ts @@ -230,11 +230,7 @@ export class Explicit implements ExplicitSessionSigner { ): Promise { const call = payload.calls[callIdx]! let permissionIndex: number - if ( - Address.isEqual(call.to, sessionManagerAddress) && - Hex.size(call.data) > 4 && - Hex.isEqual(Hex.slice(call.data, 0, 4), AbiFunction.getSelector(Constants.INCREMENT_USAGE_LIMIT)) - ) { + if (isIncrementCall(call, sessionManagerAddress)) { // Permission check not required. Use the first permission permissionIndex = 0 } else { diff --git a/packages/wallet/core/test/session-manager.test.ts b/packages/wallet/core/test/session-manager.test.ts index adf36fb89a..7ba342ebc1 100644 --- a/packages/wallet/core/test/session-manager.test.ts +++ b/packages/wallet/core/test/session-manager.test.ts @@ -1644,6 +1644,60 @@ for (const extension of ALL_EXTENSIONS) { }, timeout, ) + + it('signSapient handles selector-only self increment call consistently', async () => { + const identityPrivateKey = Secp256k1.randomPrivateKey() + const identityAddress = Address.fromPublicKey(Secp256k1.getPublicKey({ privateKey: identityPrivateKey })) + const stateProvider = new State.Local.Provider() + + const explicitSigner = new Signers.Session.Explicit(Secp256k1.randomPrivateKey(), { + chainId: 0, + valueLimit: 0n, + deadline: BigInt(Math.floor(Date.now() / 1000) + 3600), + permissions: [PermissionBuilder.for(EMITTER_ADDRESS1).allowAll().build()], + }) + + const sessionTopology = SessionConfig.addExplicitSession(SessionConfig.emptySessionsTopology(identityAddress), { + ...explicitSigner.sessionPermissions, + signer: explicitSigner.address, + }) + await stateProvider.saveTree(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + const imageHash = GenericTree.hash(SessionConfig.sessionsTopologyToConfigurationTree(sessionTopology)) + + const wallet = await Wallet.fromConfiguration( + { + threshold: 1n, + checkpoint: 0n, + topology: [{ type: 'sapient-signer', address: extension.sessions, weight: 1n, imageHash }, Hex.random(32)], + }, + { stateProvider }, + ) + const sessionManager = new Signers.SessionManager(wallet, { + sessionManagerAddress: extension.sessions, + explicitSigners: [explicitSigner], + }) + + const payload: Payload.Parented = { + type: 'call', + nonce: 0n, + space: 0n, + calls: [ + { + to: extension.sessions, + data: AbiFunction.getSelector(Constants.INCREMENT_USAGE_LIMIT), + value: 0n, + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', + }, + ], + parentWallets: [wallet.address], + } + + const signature = await sessionManager.signSapient(wallet.address, 0, payload, imageHash) + expect(signature.type).toBe('sapient') + }) }) }) } From 5e2ad39ad5f75bb3188ddfec55cbdd5de3c9f33a Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Mon, 9 Mar 2026 14:30:13 +0100 Subject: [PATCH 06/43] 3.0.1 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 61bd11b9af..93d25b9d2c 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 0d4b988b21..08d7c67c41 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.0", + "version": "3.0.1", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index a7a4c60d7a..9a7adf5f5a 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 1aae80372d..e7bd7b8365 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.0", + "version": "3.0.1", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index 4aa7f3b081..9231c81c55 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index e9e66b91ef..e3eb538a0c 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.0", + "version": "3.0.1", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index 46667619b3..946470638f 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index db656ed547..6d951ee90c 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.0", + "version": "3.0.1", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index 17f499fa53..b188695e38 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index c8629dc36d..9410ce59e1 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.0", + "version": "3.0.1", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 321e03b85b..f9423182e1 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 39c6be2b68..910c7503da 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.0", + "version": "3.0.1", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index ca7f29c5d2..dbc9ca295d 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index d700c0630a..be283deb0a 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.0", + "version": "3.0.1", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index c718a845d3..a45a11fe9f 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.1 + +### Patch Changes + +- Network and session fixes +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.1 + ## 3.0.0 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index ab7f8d8cb0..5863a5ecaa 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.0", + "version": "3.0.1", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index abea2c174f..06b3628fb6 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 6cef1fe591..a1e3f1b6d7 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.0", + "version": "3.0.1", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index 25e7590b46..edf3ef7806 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index 4efa48abe8..2181347237 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.0", + "version": "3.0.1", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index be05bec0b5..f2ed0c4617 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.1 + +### Patch Changes + +- Network and session fixes +- Updated dependencies + - @0xsequence/guard@3.0.1 + - @0xsequence/relayer@3.0.1 + - @0xsequence/wallet-primitives@3.0.1 + ## 3.0.0 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index a5ced0086f..196b25c680 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.0", + "version": "3.0.1", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index 92d9641edb..a71394363e 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.1 + +### Patch Changes + +- Network and session fixes +- Updated dependencies + - @0xsequence/guard@3.0.1 + - @0xsequence/relayer@3.0.1 + - @0xsequence/wallet-core@3.0.1 + - @0xsequence/wallet-primitives@3.0.1 + ## 3.0.0 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index afe59a0bc9..0b0d9ce146 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.0", + "version": "3.0.1", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index 200be51020..10f46a0cd6 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.1 + +### Patch Changes + +- Network and session fixes + ## 3.0.0 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index df6e52100b..aa0581ecbd 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.0", + "version": "3.0.1", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 81522e3a47..3e6a8714f2 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.1 + +### Patch Changes + +- Network and session fixes +- Updated dependencies + - @0xsequence/guard@3.0.1 + - @0xsequence/identity-instrument@3.0.1 + - @0xsequence/relayer@3.0.1 + - @0xsequence/wallet-core@3.0.1 + - @0xsequence/wallet-primitives@3.0.1 + ## 3.0.0 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 15a8a75cc2..2160b05965 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.0", + "version": "3.0.1", "license": "Apache-2.0", "type": "module", "publishConfig": { From 43d8e0ae67bd310cd4eed3098ba7933ed9d8a53c Mon Sep 17 00:00:00 2001 From: William Hua Date: Fri, 13 Mar 2026 15:28:40 -0400 Subject: [PATCH 07/43] core: allow native self transfer (#978) --- packages/wallet/core/src/wallet.ts | 4 ++-- packages/wallet/wdk/test/transactions.test.ts | 19 +++++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/wallet/core/src/wallet.ts b/packages/wallet/core/src/wallet.ts index 0377dd336b..d89d5b2b98 100644 --- a/packages/wallet/core/src/wallet.ts +++ b/packages/wallet/core/src/wallet.ts @@ -342,7 +342,7 @@ export class Wallet { if (call.delegateCall) { throw new Error('delegate calls are not allowed in safe mode') } - if (Address.isEqual(call.to, this.address)) { + if (Address.isEqual(call.to, this.address) && call.data !== '0x') { throw new Error('calls to the wallet contract itself are not allowed in safe mode') } } @@ -455,7 +455,7 @@ export class Wallet { if (call.delegateCall) { throw new Error('delegate calls are not allowed in safe mode') } - if (Address.isEqual(call.to, this.address)) { + if (Address.isEqual(call.to, this.address) && call.data !== '0x') { throw new Error('calls to the wallet contract itself are not allowed in safe mode') } } diff --git a/packages/wallet/wdk/test/transactions.test.ts b/packages/wallet/wdk/test/transactions.test.ts index cf31c973c4..295d00d014 100644 --- a/packages/wallet/wdk/test/transactions.test.ts +++ b/packages/wallet/wdk/test/transactions.test.ts @@ -481,12 +481,31 @@ describe('Transactions', () => { const txId1 = manager.transactions.request(wallet!, Network.ChainId.ARBITRUM, [ { to: wallet!, + data: '0x1234', }, ]) await expect(txId1).rejects.toThrow() }) + it('Should allow native token transfer to self in safe mode', async () => { + const manager = newManager() + const wallet = await manager.wallets.signUp({ + mnemonic: Mnemonic.random(Mnemonic.english), + kind: 'mnemonic', + noGuard: true, + }) + + const txId1 = await manager.transactions.request(wallet!, Network.ChainId.ARBITRUM, [ + { + to: wallet!, + value: 1n, + }, + ]) + + expect(txId1).toBeDefined() + }) + it('Should allow transactions to self in unsafe mode', async () => { const manager = newManager() const wallet = await manager.wallets.signUp({ From 79bf317b4882607fd88b59b8c72cb564f00536c9 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Mon, 16 Mar 2026 09:44:13 +0100 Subject: [PATCH 08/43] 3.0.2 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 93d25b9d2c..0e8eaad7e5 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 08d7c67c41..ecb3f5ab8f 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.1", + "version": "3.0.2", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index 9a7adf5f5a..08a102605b 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index e7bd7b8365..160072e474 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.1", + "version": "3.0.2", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index 9231c81c55..b9574b5e17 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index e3eb538a0c..947a441f35 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.1", + "version": "3.0.2", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index 946470638f..bfdd435cad 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index 6d951ee90c..680c4b4349 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.1", + "version": "3.0.2", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index b188695e38..54cee73534 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 9410ce59e1..c6e4abae85 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.1", + "version": "3.0.2", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index f9423182e1..0c8767f4dd 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 910c7503da..308ba5ba4b 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.1", + "version": "3.0.2", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index dbc9ca295d..86b5873be4 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index be283deb0a..5419b31dc1 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.1", + "version": "3.0.2", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index a45a11fe9f..2574b94e8d 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.2 + +### Patch Changes + +- allow native self transfer +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.2 + ## 3.0.1 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 5863a5ecaa..3dec76338e 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.1", + "version": "3.0.2", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 06b3628fb6..7387d62989 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index a1e3f1b6d7..dbb1e4a288 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.1", + "version": "3.0.2", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index edf3ef7806..b5828b5961 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index 2181347237..a8b28ead86 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.1", + "version": "3.0.2", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index f2ed0c4617..139e7f0f20 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.2 + +### Patch Changes + +- allow native self transfer +- Updated dependencies + - @0xsequence/guard@3.0.2 + - @0xsequence/relayer@3.0.2 + - @0xsequence/wallet-primitives@3.0.2 + ## 3.0.1 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 196b25c680..771cf687d1 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.1", + "version": "3.0.2", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index a71394363e..5b96e92d69 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.2 + +### Patch Changes + +- allow native self transfer +- Updated dependencies + - @0xsequence/guard@3.0.2 + - @0xsequence/relayer@3.0.2 + - @0xsequence/wallet-core@3.0.2 + - @0xsequence/wallet-primitives@3.0.2 + ## 3.0.1 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 0b0d9ce146..2904d51ef1 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.1", + "version": "3.0.2", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index 10f46a0cd6..85c1e85ad3 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.2 + +### Patch Changes + +- allow native self transfer + ## 3.0.1 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index aa0581ecbd..fbff60f802 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.1", + "version": "3.0.2", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 3e6a8714f2..62c220728c 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.2 + +### Patch Changes + +- allow native self transfer +- Updated dependencies + - @0xsequence/guard@3.0.2 + - @0xsequence/identity-instrument@3.0.2 + - @0xsequence/relayer@3.0.2 + - @0xsequence/wallet-core@3.0.2 + - @0xsequence/wallet-primitives@3.0.2 + ## 3.0.1 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 2160b05965..277fdf7a63 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.1", + "version": "3.0.2", "license": "Apache-2.0", "type": "module", "publishConfig": { From 9685e535f911a7a1f6cbf7d9289cda31a133bc91 Mon Sep 17 00:00:00 2001 From: tolgahan-arikan Date: Mon, 16 Mar 2026 12:13:51 +0300 Subject: [PATCH 09/43] Add WDK Google ID token auth flow (#977) * Add WDK Google ID token auth flow * Unify Google WDK auth kinds * Refine WDK Google id token flow * Fix id-token auth key cleanup on signer mismatch * Restore guard error logging * Unify Google WDK signer kind * Fix WDK auth flow cleanup and implicit session metadata --- packages/services/guard/src/sequence.ts | 2 +- packages/services/guard/test/sequence.test.ts | 15 + .../wdk/src/sequence/handlers/authcode.ts | 6 + .../wdk/src/sequence/handlers/identity.ts | 4 + .../wdk/src/sequence/handlers/idtoken.ts | 140 ++++++++ .../wallet/wdk/src/sequence/handlers/index.ts | 1 + packages/wallet/wdk/src/sequence/manager.ts | 107 ++++-- packages/wallet/wdk/src/sequence/sessions.ts | 8 +- packages/wallet/wdk/src/sequence/signers.ts | 5 + .../wallet/wdk/src/sequence/types/signer.ts | 2 +- .../wallet/wdk/src/sequence/types/wallet.ts | 2 +- packages/wallet/wdk/src/sequence/wallets.ts | 97 +++++- .../wallet/wdk/test/authcode-pkce.test.ts | 2 +- packages/wallet/wdk/test/authcode.test.ts | 4 +- .../wallet/wdk/test/identity-auth-dbs.test.ts | 88 ++++- .../wallet/wdk/test/identity-signer.test.ts | 2 +- packages/wallet/wdk/test/idtoken.test.ts | 327 ++++++++++++++++++ .../wallet/wdk/test/sessions-idtoken.test.ts | 97 ++++++ .../wallet/wdk/test/signers-kindof.test.ts | 22 ++ packages/wallet/wdk/test/wallets.test.ts | 142 +++++++- 20 files changed, 1024 insertions(+), 49 deletions(-) create mode 100644 packages/wallet/wdk/src/sequence/handlers/idtoken.ts create mode 100644 packages/wallet/wdk/test/idtoken.test.ts create mode 100644 packages/wallet/wdk/test/sessions-idtoken.test.ts diff --git a/packages/services/guard/src/sequence.ts b/packages/services/guard/src/sequence.ts index 6c17b75520..b2acc812af 100644 --- a/packages/services/guard/src/sequence.ts +++ b/packages/services/guard/src/sequence.ts @@ -50,7 +50,7 @@ export class Guard implements Types.Guard { throw new Types.AuthRequiredError('PIN') } console.error(error) - throw new Error('Error signing with guard') + throw new Error('Error signing with guard', { cause: error }) } } } diff --git a/packages/services/guard/test/sequence.test.ts b/packages/services/guard/test/sequence.test.ts index 45612d609f..ebc9a47b76 100644 --- a/packages/services/guard/test/sequence.test.ts +++ b/packages/services/guard/test/sequence.test.ts @@ -116,6 +116,21 @@ describe('Sequence', () => { ).rejects.toThrow('Error signing with guard') }) + it('Should preserve the original guard failure as cause', async () => { + mockFetch.mockRejectedValueOnce(new Error('Network error')) + + try { + await guard.signPayload(testWallet, 42161, PayloadType.ConfigUpdate, testMessageDigest, testMessage) + throw new Error('Expected signPayload to throw') + } catch (error) { + expect(error).toBeInstanceOf(Error) + expect((error as Error).message).toBe('Error signing with guard') + expect((error as Error & { cause?: unknown }).cause).toBeInstanceOf(Error) + expect((error as Error & { cause?: Error }).cause?.name).toBe('WebrpcRequestFailed') + expect((error as Error & { cause?: Error }).cause?.message).toBe('request failed') + } + }) + it('Should include proper headers and signer address in request', async () => { const mockGuardAddress = '0x9876543210987654321098765432109876543210' as Address.Address const customGuard = new Guard('https://guard.sequence.app', mockGuardAddress, fetch) diff --git a/packages/wallet/wdk/src/sequence/handlers/authcode.ts b/packages/wallet/wdk/src/sequence/handlers/authcode.ts index 8e98745e87..699d72bc46 100644 --- a/packages/wallet/wdk/src/sequence/handlers/authcode.ts +++ b/packages/wallet/wdk/src/sequence/handlers/authcode.ts @@ -6,6 +6,7 @@ import * as Identity from '@0xsequence/identity-instrument' import { SignerUnavailable, SignerReady, SignerActionable, BaseSignatureRequest } from '../types/signature-request.js' import { IdentitySigner } from '../../identity/signer.js' import { IdentityHandler } from './identity.js' +import { Kinds } from '../types/signer.js' import type { NavigationLike, WdkEnv } from '../../env.js' export class AuthCodeHandler extends IdentityHandler implements Handler { @@ -26,6 +27,11 @@ export class AuthCodeHandler extends IdentityHandler implements Handler { } public get kind() { + if (this.signupKind === 'google-pkce') { + // Keep Google PKCE on the canonical kind so Google signers created before + // canonicalization still resolve as `login-google`. + return Kinds.LoginGoogle + } return 'login-' + this.signupKind } diff --git a/packages/wallet/wdk/src/sequence/handlers/identity.ts b/packages/wallet/wdk/src/sequence/handlers/identity.ts index f03876a5be..a991e88636 100644 --- a/packages/wallet/wdk/src/sequence/handlers/identity.ts +++ b/packages/wallet/wdk/src/sequence/handlers/identity.ts @@ -81,6 +81,10 @@ export class IdentityHandler { return new IdentitySigner(this.nitro, authKey, this.env.crypto) } + protected async clearAuthKeySigner(address: string): Promise { + await this.authKeys.delBySigner(address) + } + private async getAuthKey(signer: string): Promise { let authKey = await this.authKeys.getBySigner(signer) if (!signer && !authKey) { diff --git a/packages/wallet/wdk/src/sequence/handlers/idtoken.ts b/packages/wallet/wdk/src/sequence/handlers/idtoken.ts new file mode 100644 index 0000000000..5a8bcac530 --- /dev/null +++ b/packages/wallet/wdk/src/sequence/handlers/idtoken.ts @@ -0,0 +1,140 @@ +import { Address, Hex } from 'ox' +import { Signers } from '@0xsequence/wallet-core' +import { Handler } from './handler.js' +import * as Identity from '@0xsequence/identity-instrument' +import * as Db from '../../dbs/index.js' +import { Signatures } from '../signatures.js' +import { SignerActionable, SignerReady, SignerUnavailable, BaseSignatureRequest } from '../types/signature-request.js' +import { IdentitySigner } from '../../identity/signer.js' +import { IdentityHandler } from './identity.js' +import { Kinds } from '../types/signer.js' +import type { WdkEnv } from '../../env.js' + +type RespondFn = (idToken: string) => Promise + +export type PromptIdTokenHandler = (kind: 'google-id-token' | `custom-${string}`, respond: RespondFn) => Promise + +export class IdTokenHandler extends IdentityHandler implements Handler { + private onPromptIdToken: undefined | PromptIdTokenHandler + + constructor( + public readonly signupKind: 'google-id-token' | `custom-${string}`, + public readonly issuer: string, + public readonly audience: string, + nitro: Identity.IdentityInstrument, + signatures: Signatures, + authKeys: Db.AuthKeys, + env?: WdkEnv, + ) { + super(nitro, authKeys, signatures, Identity.IdentityType.OIDC, env) + } + + public get kind() { + if (this.signupKind === 'google-id-token') { + return Kinds.LoginGoogle + } + return 'login-' + this.signupKind + } + + public registerUI(onPromptIdToken: PromptIdTokenHandler) { + this.onPromptIdToken = onPromptIdToken + return () => { + this.onPromptIdToken = undefined + } + } + + public unregisterUI() { + this.onPromptIdToken = undefined + } + + public async completeAuth(idToken: string): Promise<[IdentitySigner, { [key: string]: string }]> { + const challenge = new Identity.IdTokenChallenge(this.issuer, this.audience, idToken) + await this.nitroCommitVerifier(challenge) + const { signer: identitySigner, email } = await this.nitroCompleteAuth(challenge) + + return [identitySigner, { email }] + } + + public async getSigner(): Promise<{ signer: Signers.Signer & Signers.Witnessable; email: string }> { + const onPromptIdToken = this.onPromptIdToken + if (!onPromptIdToken) { + throw new Error('id-token-handler-ui-not-registered') + } + + return await this.handleAuth(onPromptIdToken) + } + + async status( + address: Address.Address, + _imageHash: Hex.Hex | undefined, + request: BaseSignatureRequest, + ): Promise { + const signer = await this.getAuthKeySigner(address) + if (signer) { + return { + address, + handler: this, + status: 'ready', + handle: async () => { + await this.sign(signer, request) + return true + }, + } + } + + const onPromptIdToken = this.onPromptIdToken + if (!onPromptIdToken) { + return { + address, + handler: this, + reason: 'ui-not-registered', + status: 'unavailable', + } + } + + return { + address, + handler: this, + status: 'actionable', + message: 'request-id-token', + handle: async () => { + try { + const { signer } = await this.handleAuth(onPromptIdToken) + const signerAddress = (await signer.address) as Address.Address + if (!Address.isEqual(signerAddress, address)) { + // ID-token auth prompts are keyed by provider kind, not the requested signer address. + // For example, a user can pick a different Google account in the account picker and + // return a token for a different identity than this request expects. + await this.clearAuthKeySigner(signerAddress) + throw new Error('id-token-signer-mismatch') + } + return true + } catch { + return false + } + }, + } + } + + private handleAuth( + onPromptIdToken: PromptIdTokenHandler, + ): Promise<{ signer: Signers.Signer & Signers.Witnessable; email: string }> { + // eslint-disable-next-line no-async-promise-executor + return new Promise(async (resolve, reject) => { + try { + const respond: RespondFn = async (idToken) => { + try { + const [signer, metadata] = await this.completeAuth(idToken) + resolve({ signer, email: metadata.email || '' }) + } catch (error) { + reject(error) + } + } + + await onPromptIdToken(this.signupKind, respond) + } catch (error) { + reject(error) + } + }) + } +} diff --git a/packages/wallet/wdk/src/sequence/handlers/index.ts b/packages/wallet/wdk/src/sequence/handlers/index.ts index 0cac943b9e..9c1b1f0f57 100644 --- a/packages/wallet/wdk/src/sequence/handlers/index.ts +++ b/packages/wallet/wdk/src/sequence/handlers/index.ts @@ -3,4 +3,5 @@ export { DevicesHandler } from './devices.js' export { PasskeysHandler } from './passkeys.js' export { OtpHandler } from './otp.js' export { AuthCodePkceHandler } from './authcode-pkce.js' +export { IdTokenHandler } from './idtoken.js' export { MnemonicHandler } from './mnemonic.js' diff --git a/packages/wallet/wdk/src/sequence/manager.ts b/packages/wallet/wdk/src/sequence/manager.ts index 5418dd65bb..8e32c4e5e5 100644 --- a/packages/wallet/wdk/src/sequence/manager.ts +++ b/packages/wallet/wdk/src/sequence/manager.ts @@ -14,6 +14,7 @@ import { AuthCodePkceHandler, DevicesHandler, Handler, + IdTokenHandler, MnemonicHandler, OtpHandler, PasskeysHandler, @@ -31,9 +32,25 @@ import { Wallets, WalletsInterface } from './wallets.js' import { GuardHandler, PromptCodeHandler } from './handlers/guard.js' import { PasskeyCredential } from '../dbs/index.js' import { PromptMnemonicHandler } from './handlers/mnemonic.js' +import { PromptIdTokenHandler } from './handlers/idtoken.js' import { PromptOtpHandler } from './handlers/otp.js' import { defaultPasskeyProvider, type PasskeyProvider } from './passkeys-provider.js' +type CustomIdentityProvider = + | { + kind: `custom-${string}` + authMethod: 'id-token' + issuer: string + clientId: string + } + | { + kind: `custom-${string}` + authMethod: 'authcode' | 'authcode-pkce' + issuer: string + oauthUrl: string + clientId: string + } + export type ManagerOptions = { verbose?: boolean @@ -85,18 +102,13 @@ export type ManagerOptions = { google?: { enabled: boolean clientId: string + authMethod?: 'authcode-pkce' | 'id-token' } apple?: { enabled: boolean clientId: string } - customProviders?: { - kind: `custom-${string}` - authMethod: 'id-token' | 'authcode' | 'authcode-pkce' - issuer: string - oauthUrl: string - clientId: string - }[] + customProviders?: CustomIdentityProvider[] } } @@ -112,18 +124,13 @@ export type ResolvedIdentityOptions = { google: { enabled: boolean clientId: string + authMethod: 'authcode-pkce' | 'id-token' } apple: { enabled: boolean clientId: string } - customProviders?: { - kind: `custom-${string}` - authMethod: 'id-token' | 'authcode' | 'authcode-pkce' - issuer: string - oauthUrl: string - clientId: string - }[] + customProviders?: CustomIdentityProvider[] } export type ResolvedManagerOptions = { @@ -248,6 +255,7 @@ export const ManagerOptionsDefaults = { google: { enabled: false, clientId: '', + authMethod: 'authcode-pkce' as const, }, apple: { enabled: false, @@ -677,20 +685,35 @@ export class Manager { shared.handlers.set(Kinds.LoginEmailOtp, this.otpHandler) } if (ops.identity.google?.enabled) { - shared.handlers.set( - Kinds.LoginGooglePkce, - new AuthCodePkceHandler( - 'google-pkce', - 'https://accounts.google.com', - 'https://accounts.google.com/o/oauth2/v2/auth', - ops.identity.google.clientId, - identityInstrument, - modules.signatures, - shared.databases.authCommitments, - shared.databases.authKeys, - shared.env, - ), - ) + if (ops.identity.google.authMethod === 'id-token') { + shared.handlers.set( + Kinds.LoginGoogle, + new IdTokenHandler( + 'google-id-token', + 'https://accounts.google.com', + ops.identity.google.clientId, + identityInstrument, + modules.signatures, + shared.databases.authKeys, + shared.env, + ), + ) + } else { + shared.handlers.set( + Kinds.LoginGoogle, + new AuthCodePkceHandler( + 'google-pkce', + 'https://accounts.google.com', + 'https://accounts.google.com/o/oauth2/v2/auth', + ops.identity.google.clientId, + identityInstrument, + modules.signatures, + shared.databases.authCommitments, + shared.databases.authKeys, + shared.env, + ), + ) + } } if (ops.identity.apple?.enabled) { shared.handlers.set( @@ -712,7 +735,19 @@ export class Manager { for (const provider of ops.identity.customProviders) { switch (provider.authMethod) { case 'id-token': - throw new Error('id-token is not supported yet') + shared.handlers.set( + provider.kind, + new IdTokenHandler( + provider.kind, + provider.issuer, + provider.clientId, + identityInstrument, + modules.signatures, + shared.databases.authKeys, + shared.env, + ), + ) + break case 'authcode': shared.handlers.set( provider.kind, @@ -770,6 +805,20 @@ export class Manager { return this.otpHandler?.registerUI(onPromptOtp) || (() => {}) } + public registerIdTokenUI(onPromptIdToken: PromptIdTokenHandler) { + const unregisters: (() => void)[] = [] + + this.shared.handlers.forEach((handler) => { + if (handler instanceof IdTokenHandler) { + unregisters.push(handler.registerUI(onPromptIdToken)) + } + }) + + return () => { + unregisters.forEach((unregister) => unregister()) + } + } + public registerGuardUI(onPromptCode: PromptCodeHandler) { return this.guardHandler?.registerUI(onPromptCode) || (() => {}) } diff --git a/packages/wallet/wdk/src/sequence/sessions.ts b/packages/wallet/wdk/src/sequence/sessions.ts index 70c2d85ed3..198258279f 100644 --- a/packages/wallet/wdk/src/sequence/sessions.ts +++ b/packages/wallet/wdk/src/sequence/sessions.ts @@ -9,7 +9,9 @@ import { SessionConfig, } from '@0xsequence/wallet-primitives' import { Address, Bytes, Hash, Hex } from 'ox' +import { AuthCodeHandler } from './handlers/authcode.js' import { AuthCodePkceHandler } from './handlers/authcode-pkce.js' +import { IdTokenHandler } from './handlers/idtoken.js' import { IdentityHandler, identityTypeToHex } from './handlers/identity.js' import { Handler } from './handlers/index.js' import { ManagerOptionsDefaults, Shared } from './manager.js' @@ -362,7 +364,11 @@ export class Sessions implements SessionsInterface { let audienceHash: Hex.Hex = '0x' if (handler instanceof IdentityHandler) { identityType = handler.identityType - if (handler instanceof AuthCodePkceHandler) { + if ( + handler instanceof AuthCodeHandler || + handler instanceof AuthCodePkceHandler || + handler instanceof IdTokenHandler + ) { issuerHash = Hash.keccak256(Hex.fromString(handler.issuer)) audienceHash = Hash.keccak256(Hex.fromString(handler.audience)) } diff --git a/packages/wallet/wdk/src/sequence/signers.ts b/packages/wallet/wdk/src/sequence/signers.ts index 64f9ff6690..ecb43cab76 100644 --- a/packages/wallet/wdk/src/sequence/signers.ts +++ b/packages/wallet/wdk/src/sequence/signers.ts @@ -12,6 +12,11 @@ function toKnownKind(kind: string): Kind { return kind as Kind } + if (kind === 'login-google-pkce') { + // Normalize legacy Google PKCE witnesses while the canonical signer kind is `login-google`. + return Kinds.LoginGoogle + } + if (Object.values(Kinds).includes(kind as (typeof Kinds)[keyof typeof Kinds])) { return kind as Kind } diff --git a/packages/wallet/wdk/src/sequence/types/signer.ts b/packages/wallet/wdk/src/sequence/types/signer.ts index 30a2a50731..eb46db52fd 100644 --- a/packages/wallet/wdk/src/sequence/types/signer.ts +++ b/packages/wallet/wdk/src/sequence/types/signer.ts @@ -5,7 +5,7 @@ export const Kinds = { LoginPasskey: 'login-passkey', LoginMnemonic: 'login-mnemonic', // Todo: do not name it login-mnemonic, just mnemonic LoginEmailOtp: 'login-email-otp', - LoginGooglePkce: 'login-google-pkce', + LoginGoogle: 'login-google', LoginApple: 'login-apple', Recovery: 'recovery-extension', Guard: 'guard-extension', diff --git a/packages/wallet/wdk/src/sequence/types/wallet.ts b/packages/wallet/wdk/src/sequence/types/wallet.ts index dd754a05b6..c1e12a990c 100644 --- a/packages/wallet/wdk/src/sequence/types/wallet.ts +++ b/packages/wallet/wdk/src/sequence/types/wallet.ts @@ -36,7 +36,7 @@ export interface Wallet { /** * A string identifier for the authentication method used for this session. - * Examples: 'login-mnemonic', 'login-passkey', 'login-google-pkce'. + * Examples: 'login-mnemonic', 'login-passkey', 'login-google'. * @property */ loginType: string diff --git a/packages/wallet/wdk/src/sequence/wallets.ts b/packages/wallet/wdk/src/sequence/wallets.ts index 6cc4f94923..1d8f17a4b3 100644 --- a/packages/wallet/wdk/src/sequence/wallets.ts +++ b/packages/wallet/wdk/src/sequence/wallets.ts @@ -3,6 +3,7 @@ import { Config, Constants, Payload } from '@0xsequence/wallet-primitives' import { Address, Hex, Provider, RpcTransport } from 'ox' import { AuthCommitment } from '../dbs/auth-commitments.js' import { AuthCodeHandler } from './handlers/authcode.js' +import { IdTokenHandler } from './handlers/idtoken.js' import { MnemonicHandler } from './handlers/mnemonic.js' import { OtpHandler } from './handlers/otp.js' import { Shared } from './manager.js' @@ -13,6 +14,37 @@ import { Wallet, WalletSelectionUiHandler } from './types/wallet.js' import { PasskeysHandler } from './handlers/passkeys.js' import type { PasskeySigner } from './passkeys-provider.js' +function getSignupHandlerKey(kind: SignupArgs['kind'] | StartSignUpWithRedirectArgs['kind'] | AuthCommitment['kind']) { + if (kind === 'google-pkce') { + return Kinds.LoginGoogle + } + if (kind.startsWith('custom-')) { + return kind + } + return 'login-' + kind +} + +function getSignerKindForSignup(kind: SignupArgs['kind'] | AuthCommitment['kind']) { + if (kind === 'google-id-token' || kind === 'google-pkce') { + return Kinds.LoginGoogle + } + if (kind.startsWith('custom-')) { + return kind + } + return ('login-' + kind) as string +} + +function getIdTokenSignupHandler(shared: Shared, kind: typeof Kinds.LoginGoogle | `custom-${string}`): IdTokenHandler { + const handler = shared.handlers.get(kind) + if (!handler) { + throw new Error('handler-not-registered') + } + if (!(handler instanceof IdTokenHandler)) { + throw new Error('handler-does-not-support-id-token') + } + return handler +} + export type StartSignUpWithRedirectArgs = { kind: 'google-pkce' | 'apple' | `custom-${string}` target: string @@ -49,6 +81,11 @@ export type EmailOtpSignupArgs = CommonSignupArgs & { email: string } +export type IdTokenSignupArgs = CommonSignupArgs & { + kind: 'google-id-token' | `custom-${string}` + idToken: string +} + export type CompleteRedirectArgs = CommonSignupArgs & { state: string code: string @@ -62,7 +99,12 @@ export type AuthCodeSignupArgs = CommonSignupArgs & { isRedirect: boolean } -export type SignupArgs = PasskeySignupArgs | MnemonicSignupArgs | EmailOtpSignupArgs | AuthCodeSignupArgs +export type SignupArgs = + | PasskeySignupArgs + | MnemonicSignupArgs + | EmailOtpSignupArgs + | IdTokenSignupArgs + | AuthCodeSignupArgs export type LoginToWalletArgs = { wallet: Address.Address @@ -180,6 +222,7 @@ export interface WalletsInterface { * - `kind: 'mnemonic'`: Uses a mnemonic phrase as the login credential. * - `kind: 'passkey'`: Prompts the user to create a WebAuthn passkey. * - `kind: 'email-otp'`: Initiates an OTP flow to the user's email. + * - `kind: 'google-id-token'`: Completes an OIDC ID token flow when Google is configured with `authMethod: 'id-token'`. * - `kind: 'google-pkce' | 'apple'`: Completes an OAuth redirect flow. * Common options like `noGuard` or `noRecovery` can customize the wallet's security features. * @returns A promise that resolves to the address of the newly created wallet, or `undefined` if the sign-up was aborted. @@ -361,7 +404,11 @@ export function isLoginToPasskeyArgs(args: LoginArgs): args is LoginToPasskeyArg } export function isAuthCodeArgs(args: SignupArgs): args is AuthCodeSignupArgs { - return 'kind' in args && (args.kind === 'google-pkce' || args.kind === 'apple') + return 'code' in args && 'commitment' in args +} + +export function isIdTokenArgs(args: SignupArgs): args is IdTokenSignupArgs { + return 'idToken' in args } function buildCappedTree(members: { address: Address.Address; imageHash?: Hex.Hex }[]): Config.Topology { @@ -674,9 +721,24 @@ export class Wallets implements WalletsInterface { } } + case 'google-id-token': { + const handler = getIdTokenSignupHandler(this.shared, Kinds.LoginGoogle) + const [signer, metadata] = await handler.completeAuth(args.idToken) + const loginEmail = metadata.email + this.shared.modules.logger.log('Created new id token signer:', signer.address) + + return { + signer, + extra: { + signerKind: Kinds.LoginGoogle, + }, + loginEmail, + } + } + case 'google-pkce': case 'apple': { - const handler = this.shared.handlers.get('login-' + args.kind) as AuthCodeHandler + const handler = this.shared.handlers.get(getSignupHandlerKey(args.kind)) as AuthCodeHandler if (!handler) { throw new Error('handler-not-registered') } @@ -688,7 +750,7 @@ export class Wallets implements WalletsInterface { return { signer, extra: { - signerKind: 'login-' + args.kind, + signerKind: getSignerKindForSignup(args.kind), }, loginEmail, } @@ -696,7 +758,18 @@ export class Wallets implements WalletsInterface { } if (args.kind.startsWith('custom-')) { - // TODO: support other custom auth methods (e.g. id-token) + if (isIdTokenArgs(args)) { + const handler = getIdTokenSignupHandler(this.shared, args.kind) + const [signer, metadata] = await handler.completeAuth(args.idToken) + return { + signer, + extra: { + signerKind: args.kind, + }, + loginEmail: metadata.email, + } + } + const handler = this.shared.handlers.get(args.kind) as AuthCodeHandler if (!handler) { throw new Error('handler-not-registered') @@ -716,11 +789,14 @@ export class Wallets implements WalletsInterface { } async startSignUpWithRedirect(args: StartSignUpWithRedirectArgs) { - const kind = args.kind.startsWith('custom-') ? args.kind : 'login-' + args.kind - const handler = this.shared.handlers.get(kind) as AuthCodeHandler + const kind = getSignupHandlerKey(args.kind) + const handler = this.shared.handlers.get(kind) if (!handler) { throw new Error('handler-not-registered') } + if (!(handler instanceof AuthCodeHandler)) { + throw new Error('handler-does-not-support-redirect') + } return handler.commitAuth(args.target, true) } @@ -742,11 +818,14 @@ export class Wallets implements WalletsInterface { use4337: args.use4337, }) } else { - const kind = commitment.kind.startsWith('custom-') ? commitment.kind : 'login-' + commitment.kind - const handler = this.shared.handlers.get(kind) as AuthCodeHandler + const handlerKind = getSignupHandlerKey(commitment.kind) + const handler = this.shared.handlers.get(handlerKind) if (!handler) { throw new Error('handler-not-registered') } + if (!(handler instanceof AuthCodeHandler)) { + throw new Error('handler-does-not-support-redirect') + } await handler.completeAuth(commitment, args.code) } diff --git a/packages/wallet/wdk/test/authcode-pkce.test.ts b/packages/wallet/wdk/test/authcode-pkce.test.ts index 99e197c7ff..e30e8607f8 100644 --- a/packages/wallet/wdk/test/authcode-pkce.test.ts +++ b/packages/wallet/wdk/test/authcode-pkce.test.ts @@ -326,7 +326,7 @@ describe('AuthCodePkceHandler', () => { describe('Integration and Edge Cases', () => { it('Should have correct kind property', () => { - expect(handler.kind).toBe('login-google-pkce') + expect(handler.kind).toBe('login-google') }) it('Should handle redirect URI configuration', () => { diff --git a/packages/wallet/wdk/test/authcode.test.ts b/packages/wallet/wdk/test/authcode.test.ts index a1c3be0e8e..66c2eca4fa 100644 --- a/packages/wallet/wdk/test/authcode.test.ts +++ b/packages/wallet/wdk/test/authcode.test.ts @@ -188,7 +188,7 @@ describe('AuthCodeHandler', () => { // === KIND GETTER === describe('kind getter', () => { - it('Should return login-google-pkce for Google PKCE handler', () => { + it('Should return login-google for Google PKCE handler', () => { const googleHandler = new AuthCodeHandler( 'google-pkce', 'https://accounts.google.com', @@ -200,7 +200,7 @@ describe('AuthCodeHandler', () => { mockAuthKeys, ) - expect(googleHandler.kind).toBe('login-google-pkce') + expect(googleHandler.kind).toBe('login-google') }) it('Should return login-apple for Apple handler', () => { diff --git a/packages/wallet/wdk/test/identity-auth-dbs.test.ts b/packages/wallet/wdk/test/identity-auth-dbs.test.ts index eccc8b885d..ae55251200 100644 --- a/packages/wallet/wdk/test/identity-auth-dbs.test.ts +++ b/packages/wallet/wdk/test/identity-auth-dbs.test.ts @@ -351,9 +351,48 @@ describe('Identity Authentication Databases', () => { }, }) - // Verify that Google handler is registered and uses our databases + // Verify that Google is registered under the canonical signer kind while + // still using the PKCE flow by default. const handlers = (manager as any).shared.handlers - expect(handlers.has('login-google-pkce')).toBe(true) + expect(handlers.has('login-google')).toBe(true) + expect(handlers.has('login-google-pkce')).toBe(false) + }) + + it('Should register the Google ID token handler when configured explicitly', async () => { + manager = new Manager({ + stateProvider: new State.Local.Provider(new State.Local.IndexedDbStore(`manager-google-idtoken-${Date.now()}`)), + networks: [ + { + name: 'Test Network', + type: Network.NetworkType.MAINNET, + rpcUrl: LOCAL_RPC_URL, + chainId: Network.ChainId.ARBITRUM, + blockExplorer: { url: 'https://arbiscan.io' }, + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + }, + ], + relayers: [], + authCommitmentsDb, + authKeysDb, + identity: { + url: 'https://dev-identity.sequence-dev.app', + fetch: window.fetch, + google: { + enabled: true, + clientId: 'test-google-client-id', + authMethod: 'id-token', + }, + }, + }) + + const handlers = (manager as any).shared.handlers + expect(handlers.has('login-google-id-token')).toBe(false) + expect(handlers.has('login-google')).toBe(true) + expect(handlers.has('login-google-pkce')).toBe(false) }) it('Should use auth databases when email authentication is enabled', async () => { @@ -424,5 +463,50 @@ describe('Identity Authentication Databases', () => { const handlers = (manager as any).shared.handlers expect(handlers.has('login-apple')).toBe(true) }) + + it('Should register custom ID token providers without enabling redirect flow for them', async () => { + manager = new Manager({ + stateProvider: new State.Local.Provider(new State.Local.IndexedDbStore(`manager-custom-idtoken-${Date.now()}`)), + networks: [ + { + name: 'Test Network', + type: Network.NetworkType.MAINNET, + rpcUrl: LOCAL_RPC_URL, + chainId: Network.ChainId.ARBITRUM, + blockExplorer: { url: 'https://arbiscan.io' }, + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + }, + ], + relayers: [], + authCommitmentsDb, + authKeysDb, + identity: { + url: 'https://dev-identity.sequence-dev.app', + fetch: window.fetch, + customProviders: [ + { + kind: 'custom-google-native', + authMethod: 'id-token', + issuer: 'https://accounts.google.com', + clientId: 'test-google-client-id', + }, + ], + }, + }) + + const handlers = (manager as any).shared.handlers + expect(handlers.has('custom-google-native')).toBe(true) + await expect( + manager.wallets.startSignUpWithRedirect({ + kind: 'custom-google-native', + target: '/home', + metadata: {}, + }), + ).rejects.toThrow('handler-does-not-support-redirect') + }) }) }) diff --git a/packages/wallet/wdk/test/identity-signer.test.ts b/packages/wallet/wdk/test/identity-signer.test.ts index 29403b028c..526177aa8e 100644 --- a/packages/wallet/wdk/test/identity-signer.test.ts +++ b/packages/wallet/wdk/test/identity-signer.test.ts @@ -13,7 +13,7 @@ const mockCryptoSubtle = { exportKey: vi.fn(), } -Object.defineProperty(global, 'window', { +Object.defineProperty(globalThis, 'window', { value: { crypto: { subtle: mockCryptoSubtle, diff --git a/packages/wallet/wdk/test/idtoken.test.ts b/packages/wallet/wdk/test/idtoken.test.ts new file mode 100644 index 0000000000..deeff401fc --- /dev/null +++ b/packages/wallet/wdk/test/idtoken.test.ts @@ -0,0 +1,327 @@ +import { afterEach, beforeEach, describe, expect, it, Mock, vi } from 'vitest' +import { Address, Hex } from 'ox' +import { Network, Payload } from '@0xsequence/wallet-primitives' +import { IdentityInstrument, IdentityType } from '@0xsequence/identity-instrument' +import { IdTokenHandler, PromptIdTokenHandler } from '../src/sequence/handlers/idtoken.js' +import { Signatures } from '../src/sequence/signatures.js' +import * as Db from '../src/dbs/index.js' +import { IdentitySigner } from '../src/identity/signer.js' +import { BaseSignatureRequest } from '../src/sequence/types/signature-request.js' +import { Kinds } from '../src/sequence/types/signer.js' + +describe('IdTokenHandler', () => { + let idTokenHandler: IdTokenHandler + let mockNitroInstrument: IdentityInstrument + let mockSignatures: Signatures + let mockAuthKeys: Db.AuthKeys + let mockIdentitySigner: IdentitySigner + let testWallet: Address.Address + let testRequest: BaseSignatureRequest + let mockPromptIdToken: Mock + + beforeEach(() => { + vi.clearAllMocks() + + testWallet = '0x1234567890123456789012345678901234567890' as Address.Address + + mockNitroInstrument = { + commitVerifier: vi.fn(), + completeAuth: vi.fn(), + } as unknown as IdentityInstrument + + mockSignatures = { + addSignature: vi.fn(), + } as unknown as Signatures + + mockAuthKeys = { + set: vi.fn(), + get: vi.fn(), + del: vi.fn(), + delBySigner: vi.fn(), + getBySigner: vi.fn(), + addListener: vi.fn(), + } as unknown as Db.AuthKeys + + mockIdentitySigner = { + address: testWallet, + sign: vi.fn(), + } as unknown as IdentitySigner + + testRequest = { + id: 'test-request-id', + envelope: { + wallet: testWallet, + chainId: Network.ChainId.ARBITRUM, + payload: Payload.fromMessage(Hex.fromString('Test message')), + }, + } as BaseSignatureRequest + + mockPromptIdToken = vi.fn() + + idTokenHandler = new IdTokenHandler( + 'google-id-token', + 'https://accounts.google.com', + 'test-google-client-id', + mockNitroInstrument, + mockSignatures, + mockAuthKeys, + ) + + vi.spyOn(idTokenHandler as any, 'nitroCommitVerifier').mockResolvedValue({ + verifier: 'unused-verifier', + loginHint: '', + challenge: '', + }) + + vi.spyOn(idTokenHandler as any, 'nitroCompleteAuth').mockResolvedValue({ + signer: mockIdentitySigner, + email: 'user@example.com', + }) + }) + + afterEach(() => { + vi.resetAllMocks() + }) + + describe('Constructor', () => { + it('Should create IdTokenHandler with correct properties', () => { + const handler = new IdTokenHandler( + 'google-id-token', + 'https://accounts.google.com', + 'test-google-client-id', + mockNitroInstrument, + mockSignatures, + mockAuthKeys, + ) + + expect(handler.signupKind).toBe('google-id-token') + expect(handler.issuer).toBe('https://accounts.google.com') + expect(handler.audience).toBe('test-google-client-id') + expect(handler.identityType).toBe(IdentityType.OIDC) + expect(handler.kind).toBe(Kinds.LoginGoogle) + }) + + it('Should initialize without a registered UI callback', () => { + expect(idTokenHandler['onPromptIdToken']).toBeUndefined() + }) + }) + + describe('UI Registration', () => { + it('Should register ID token UI callback', () => { + const unregister = idTokenHandler.registerUI(mockPromptIdToken) + + expect(idTokenHandler['onPromptIdToken']).toBe(mockPromptIdToken) + expect(typeof unregister).toBe('function') + }) + + it('Should unregister UI callback when returned function is called', () => { + const unregister = idTokenHandler.registerUI(mockPromptIdToken) + expect(idTokenHandler['onPromptIdToken']).toBe(mockPromptIdToken) + + unregister() + + expect(idTokenHandler['onPromptIdToken']).toBeUndefined() + }) + + it('Should unregister UI callback directly', () => { + idTokenHandler.registerUI(mockPromptIdToken) + expect(idTokenHandler['onPromptIdToken']).toBe(mockPromptIdToken) + + idTokenHandler.unregisterUI() + + expect(idTokenHandler['onPromptIdToken']).toBeUndefined() + }) + + it('Should allow multiple registrations by overwriting the previous callback', () => { + const secondCallback = vi.fn() + + idTokenHandler.registerUI(mockPromptIdToken) + expect(idTokenHandler['onPromptIdToken']).toBe(mockPromptIdToken) + + idTokenHandler.registerUI(secondCallback) + + expect(idTokenHandler['onPromptIdToken']).toBe(secondCallback) + }) + }) + + describe('completeAuth()', () => { + it('Should complete auth using an OIDC ID token challenge', async () => { + const idToken = 'eyJhbGciOiJub25lIn0.eyJleHAiOjQxMDI0NDQ4MDB9.' + + const [signer, metadata] = await idTokenHandler.completeAuth(idToken) + + expect(idTokenHandler['nitroCommitVerifier']).toHaveBeenCalledWith( + expect.objectContaining({ + issuer: 'https://accounts.google.com', + audience: 'test-google-client-id', + idToken, + }), + ) + expect(idTokenHandler['nitroCompleteAuth']).toHaveBeenCalledWith( + expect.objectContaining({ + issuer: 'https://accounts.google.com', + audience: 'test-google-client-id', + idToken, + }), + ) + expect(signer).toBe(mockIdentitySigner) + expect(metadata).toEqual({ email: 'user@example.com' }) + }) + }) + + describe('getSigner()', () => { + it('Should throw when UI is not registered', async () => { + await expect(idTokenHandler.getSigner()).rejects.toThrow('id-token-handler-ui-not-registered') + }) + + it('Should acquire a signer by prompting for a fresh ID token', async () => { + const idToken = 'header.payload.signature' + const completeAuthSpy = vi + .spyOn(idTokenHandler, 'completeAuth') + .mockResolvedValue([mockIdentitySigner, { email: 'user@example.com' }]) + + mockPromptIdToken.mockImplementation(async (kind, respond) => { + expect(kind).toBe('google-id-token') + await respond(idToken) + }) + + idTokenHandler.registerUI(mockPromptIdToken) + + const result = await idTokenHandler.getSigner() + + expect(result).toEqual({ + signer: mockIdentitySigner, + email: 'user@example.com', + }) + expect(completeAuthSpy).toHaveBeenCalledWith(idToken) + expect(mockPromptIdToken).toHaveBeenCalledWith('google-id-token', expect.any(Function)) + }) + + it('Should surface authentication failures from completeAuth', async () => { + const error = new Error('Authentication failed') + vi.spyOn(idTokenHandler, 'completeAuth').mockRejectedValue(error) + + mockPromptIdToken.mockImplementation(async (_kind, respond) => { + await respond('header.payload.signature') + }) + + idTokenHandler.registerUI(mockPromptIdToken) + + await expect(idTokenHandler.getSigner()).rejects.toThrow('Authentication failed') + }) + + it('Should surface UI callback errors', async () => { + mockPromptIdToken.mockRejectedValue(new Error('UI callback failed')) + idTokenHandler.registerUI(mockPromptIdToken) + + await expect(idTokenHandler.getSigner()).rejects.toThrow('UI callback failed') + }) + }) + + describe('status()', () => { + it('Should return ready status when an auth key signer is available', async () => { + vi.spyOn(idTokenHandler as any, 'getAuthKeySigner').mockResolvedValue(mockIdentitySigner) + + const status = await idTokenHandler.status(testWallet, undefined, testRequest) + + expect(status.status).toBe('ready') + expect(status.handler).toBe(idTokenHandler) + }) + + it('Should sign the request when ready handle is invoked', async () => { + vi.spyOn(idTokenHandler as any, 'getAuthKeySigner').mockResolvedValue(mockIdentitySigner) + const signSpy = vi.spyOn(idTokenHandler as any, 'sign').mockResolvedValue(undefined) + + const status = await idTokenHandler.status(testWallet, undefined, testRequest) + const handled = await (status as any).handle() + + expect(handled).toBe(true) + expect(signSpy).toHaveBeenCalledWith(mockIdentitySigner, testRequest) + }) + + it('Should return unavailable when no auth key signer exists and UI is not registered', async () => { + vi.spyOn(idTokenHandler as any, 'getAuthKeySigner').mockResolvedValue(undefined) + + const status = await idTokenHandler.status(testWallet, undefined, testRequest) + + expect(status).toMatchObject({ + address: testWallet, + handler: idTokenHandler, + status: 'unavailable', + reason: 'ui-not-registered', + }) + }) + + it('Should return actionable when no auth key signer exists and UI is registered', async () => { + vi.spyOn(idTokenHandler as any, 'getAuthKeySigner').mockResolvedValue(undefined) + idTokenHandler.registerUI(mockPromptIdToken) + + const status = await idTokenHandler.status(testWallet, undefined, testRequest) + + expect(status.status).toBe('actionable') + expect(status.address).toBe(testWallet) + expect(status.handler).toBe(idTokenHandler) + expect((status as any).message).toBe('request-id-token') + expect(typeof (status as any).handle).toBe('function') + }) + + it('Should reacquire the signer when actionable handle is invoked', async () => { + vi.spyOn(idTokenHandler as any, 'getAuthKeySigner').mockResolvedValue(undefined) + const completeAuthSpy = vi + .spyOn(idTokenHandler, 'completeAuth') + .mockResolvedValue([mockIdentitySigner, { email: 'user@example.com' }]) + + mockPromptIdToken.mockImplementation(async (_kind, respond) => { + await respond('header.payload.signature') + }) + + idTokenHandler.registerUI(mockPromptIdToken) + + const status = await idTokenHandler.status(testWallet, undefined, testRequest) + const handled = await (status as any).handle() + + expect(handled).toBe(true) + expect(completeAuthSpy).toHaveBeenCalledWith('header.payload.signature') + }) + + it('Should return false when actionable handle authentication fails', async () => { + vi.spyOn(idTokenHandler as any, 'getAuthKeySigner').mockResolvedValue(undefined) + vi.spyOn(idTokenHandler, 'completeAuth').mockRejectedValue(new Error('Authentication failed')) + + mockPromptIdToken.mockImplementation(async (_kind, respond) => { + await respond('header.payload.signature') + }) + + idTokenHandler.registerUI(mockPromptIdToken) + + const status = await idTokenHandler.status(testWallet, undefined, testRequest) + const handled = await (status as any).handle() + + expect(handled).toBe(false) + }) + + it('Should return false when actionable handle authenticates the wrong signer', async () => { + vi.spyOn(idTokenHandler as any, 'getAuthKeySigner').mockResolvedValue(undefined) + const wrongSigner = '0x9999999999999999999999999999999999999999' as Address.Address + vi.spyOn(idTokenHandler, 'completeAuth').mockResolvedValue([ + { + ...mockIdentitySigner, + address: wrongSigner, + } as unknown as IdentitySigner, + { email: 'other-user@example.com' }, + ]) + + mockPromptIdToken.mockImplementation(async (_kind, respond) => { + await respond('header.payload.signature') + }) + + idTokenHandler.registerUI(mockPromptIdToken) + + const status = await idTokenHandler.status(testWallet, undefined, testRequest) + const handled = await (status as any).handle() + + expect(handled).toBe(false) + expect(mockAuthKeys.delBySigner).toHaveBeenCalledWith(wrongSigner) + }) + }) +}) diff --git a/packages/wallet/wdk/test/sessions-idtoken.test.ts b/packages/wallet/wdk/test/sessions-idtoken.test.ts new file mode 100644 index 0000000000..7249728b92 --- /dev/null +++ b/packages/wallet/wdk/test/sessions-idtoken.test.ts @@ -0,0 +1,97 @@ +import { afterEach, describe, expect, it, vi } from 'vitest' +import { Hash, Hex, Mnemonic, Secp256k1, Address as OxAddress } from 'ox' +import { Payload } from '@0xsequence/wallet-primitives' +import { newManager } from './constants.js' +import { Manager } from '../src/sequence/index.js' +import { Kinds } from '../src/sequence/types/signer.js' + +describe('Sessions ID token attestation', () => { + let manager: Manager | undefined + + afterEach(async () => { + await manager?.stop() + }) + + it('Should include issuer and audience hashes for google-id-token implicit session authorization', async () => { + manager = newManager({ + identity: { + google: { + enabled: true, + clientId: 'test-google-client-id', + authMethod: 'id-token', + }, + }, + }) + + const wallet = await manager.wallets.signUp({ + mnemonic: Mnemonic.random(Mnemonic.english), + kind: 'mnemonic', + noGuard: true, + }) + expect(wallet).toBeDefined() + + const signersModule = (manager as any).shared.modules.signers + vi.spyOn(signersModule, 'kindOf').mockResolvedValue(Kinds.LoginGoogle) + + const sessionAddress = OxAddress.fromPublicKey(Secp256k1.getPublicKey({ privateKey: Secp256k1.randomPrivateKey() })) + const requestId = await manager.sessions.prepareAuthorizeImplicitSession(wallet!, sessionAddress, { + target: 'https://example.com', + applicationData: '0x1234', + }) + + const request = await manager.signatures.get(requestId) + expect(request.action).toBe('session-implicit-authorize') + expect(Payload.isSessionImplicitAuthorize(request.envelope.payload)).toBe(true) + + if (!Payload.isSessionImplicitAuthorize(request.envelope.payload)) { + throw new Error('Expected session implicit authorize payload') + } + + const attestation = request.envelope.payload.attestation + expect(Hex.fromBytes(attestation.issuerHash)).toBe(Hash.keccak256(Hex.fromString('https://accounts.google.com'))) + expect(Hex.fromBytes(attestation.audienceHash)).toBe(Hash.keccak256(Hex.fromString('test-google-client-id'))) + expect(Hex.fromBytes(attestation.applicationData)).toBe('0x1234') + expect(Hex.fromBytes(attestation.identityType)).toBe('0x00000002') + }) + + it('Should include issuer and audience hashes for apple implicit session authorization', async () => { + manager = newManager({ + identity: { + apple: { + enabled: true, + clientId: 'test-apple-client-id', + }, + }, + }) + + const wallet = await manager.wallets.signUp({ + mnemonic: Mnemonic.random(Mnemonic.english), + kind: 'mnemonic', + noGuard: true, + }) + expect(wallet).toBeDefined() + + const signersModule = (manager as any).shared.modules.signers + vi.spyOn(signersModule, 'kindOf').mockResolvedValue(Kinds.LoginApple) + + const sessionAddress = OxAddress.fromPublicKey(Secp256k1.getPublicKey({ privateKey: Secp256k1.randomPrivateKey() })) + const requestId = await manager.sessions.prepareAuthorizeImplicitSession(wallet!, sessionAddress, { + target: 'https://example.com', + applicationData: '0x1234', + }) + + const request = await manager.signatures.get(requestId) + expect(request.action).toBe('session-implicit-authorize') + expect(Payload.isSessionImplicitAuthorize(request.envelope.payload)).toBe(true) + + if (!Payload.isSessionImplicitAuthorize(request.envelope.payload)) { + throw new Error('Expected session implicit authorize payload') + } + + const attestation = request.envelope.payload.attestation + expect(Hex.fromBytes(attestation.issuerHash)).toBe(Hash.keccak256(Hex.fromString('https://appleid.apple.com'))) + expect(Hex.fromBytes(attestation.audienceHash)).toBe(Hash.keccak256(Hex.fromString('test-apple-client-id'))) + expect(Hex.fromBytes(attestation.applicationData)).toBe('0x1234') + expect(Hex.fromBytes(attestation.identityType)).toBe('0x00000002') + }) +}) diff --git a/packages/wallet/wdk/test/signers-kindof.test.ts b/packages/wallet/wdk/test/signers-kindof.test.ts index 4e5f83aad5..06b01cb780 100644 --- a/packages/wallet/wdk/test/signers-kindof.test.ts +++ b/packages/wallet/wdk/test/signers-kindof.test.ts @@ -37,4 +37,26 @@ describe('Signers.kindOf', () => { await signers.kindOf(wallet, '0x2222222222222222222222222222222222222222') expect(getWitnessFor).toHaveBeenCalledTimes(1) }) + + it('normalizes legacy Google PKCE signer kind to the canonical Google signer kind', async () => { + const getWitnessFor = vi.fn().mockResolvedValue({ + payload: { + type: 'message', + message: '0x' + Buffer.from(JSON.stringify({ signerKind: 'login-google-pkce' }), 'utf8').toString('hex'), + }, + }) + + const manager = newManager({ + stateProvider: { + getWitnessFor, + getWitnessForSapient: vi.fn(), + } as any, + }) + + const signers = (manager as any).shared.modules.signers + const wallet = '0x1111111111111111111111111111111111111111' + const signer = '0x2222222222222222222222222222222222222222' + + await expect(signers.kindOf(wallet, signer)).resolves.toBe(Kinds.LoginGoogle) + }) }) diff --git a/packages/wallet/wdk/test/wallets.test.ts b/packages/wallet/wdk/test/wallets.test.ts index a5b26843c0..dc3f2728e7 100644 --- a/packages/wallet/wdk/test/wallets.test.ts +++ b/packages/wallet/wdk/test/wallets.test.ts @@ -1,8 +1,13 @@ -import { afterEach, describe, expect, it } from 'vitest' +import { afterEach, describe, expect, it, vi } from 'vitest' import { Manager, SignerActionable, SignerReady } from '../src/sequence/index.js' import { Mnemonic, Address } from 'ox' import { newManager } from './constants.js' import { Config, Constants, Network } from '@0xsequence/wallet-primitives' +import { AuthCodePkceHandler } from '../src/sequence/handlers/authcode-pkce.js' +import { IdTokenHandler } from '../src/sequence/handlers/idtoken.js' +import { IdentitySigner } from '../src/identity/signer.js' +import { MnemonicHandler } from '../src/sequence/handlers/mnemonic.js' +import { Kinds } from '../src/sequence/types/signer.js' describe('Wallets', () => { let manager: Manager | undefined @@ -24,6 +29,141 @@ describe('Wallets', () => { await expect(manager.wallets.has(wallet!)).resolves.toBeTruthy() }) + it('Should create a new wallet using google-id-token when Google ID token auth is enabled', async () => { + manager = newManager({ + identity: { + google: { + enabled: true, + clientId: 'test-google-client-id', + authMethod: 'id-token', + }, + }, + }) + + const handler = (manager as any).shared.handlers.get(Kinds.LoginGoogle) as IdTokenHandler + const loginMnemonic = Mnemonic.random(Mnemonic.english) + const loginSigner = MnemonicHandler.toSigner(loginMnemonic) + if (!loginSigner) { + throw new Error('Failed to create login signer for test') + } + + const completeAuthSpy = vi + .spyOn(handler, 'completeAuth') + .mockResolvedValue([loginSigner as unknown as IdentitySigner, { email: 'google-user@example.com' }]) + + const wallet = await manager.wallets.signUp({ + kind: 'google-id-token', + idToken: 'eyJhbGciOiJub25lIn0.eyJleHAiOjQxMDI0NDQ4MDB9.', + noGuard: true, + }) + + expect(wallet).toBeDefined() + expect(completeAuthSpy).toHaveBeenCalledWith('eyJhbGciOiJub25lIn0.eyJleHAiOjQxMDI0NDQ4MDB9.') + await expect(manager.wallets.has(wallet!)).resolves.toBeTruthy() + + const walletEntry = await manager.wallets.get(wallet!) + expect(walletEntry).toBeDefined() + expect(walletEntry!.loginType).toBe(Kinds.LoginGoogle) + expect(walletEntry!.loginEmail).toBe('google-user@example.com') + + const configuration = await manager.wallets.getConfiguration(wallet!) + expect(configuration.login).toHaveLength(1) + expect(configuration.login[0]!.kind).toBe(Kinds.LoginGoogle) + }) + + it('Should register and unregister Google ID token UI callbacks through the manager', async () => { + manager = newManager({ + identity: { + google: { + enabled: true, + clientId: 'test-google-client-id', + authMethod: 'id-token', + }, + }, + }) + + const handler = (manager as any).shared.handlers.get(Kinds.LoginGoogle) as IdTokenHandler + const promptIdToken = vi.fn() + + const unregister = manager.registerIdTokenUI(promptIdToken) + + expect(handler['onPromptIdToken']).toBe(promptIdToken) + + unregister() + + expect(handler['onPromptIdToken']).toBeUndefined() + }) + + it('Should keep Google PKCE redirect flow as the default when authMethod is not specified', async () => { + manager = newManager({ + identity: { + google: { + enabled: true, + clientId: 'test-google-client-id', + }, + }, + }) + + const handler = (manager as any).shared.handlers.get(Kinds.LoginGoogle) as AuthCodePkceHandler + expect(handler).toBeInstanceOf(AuthCodePkceHandler) + + const commitAuthSpy = vi + .spyOn(handler, 'commitAuth') + .mockResolvedValue('https://accounts.google.com/o/oauth2/v2/auth?state=test-state') + + const url = await manager.wallets.startSignUpWithRedirect({ + kind: 'google-pkce', + target: '/auth/return', + metadata: {}, + }) + + expect(url).toBe('https://accounts.google.com/o/oauth2/v2/auth?state=test-state') + expect(commitAuthSpy).toHaveBeenCalledWith('/auth/return', true) + }) + + it('Should reject google-id-token signup when Google is configured for redirect auth', async () => { + manager = newManager({ + identity: { + google: { + enabled: true, + clientId: 'test-google-client-id', + }, + }, + }) + + await expect( + manager.wallets.signUp({ + kind: 'google-id-token', + idToken: 'eyJhbGciOiJub25lIn0.eyJleHAiOjQxMDI0NDQ4MDB9.', + noGuard: true, + }), + ).rejects.toThrow('handler-does-not-support-id-token') + }) + + it('Should reject custom ID token signup when the provider uses redirect auth', async () => { + manager = newManager({ + identity: { + customProviders: [ + { + kind: 'custom-oidc', + authMethod: 'authcode', + issuer: 'https://issuer.example.com', + oauthUrl: 'https://issuer.example.com/oauth/authorize', + clientId: 'test-custom-client-id', + }, + ], + }, + }) + + await expect( + manager.wallets.signUp({ + kind: 'custom-oidc', + idToken: 'eyJhbGciOiJub25lIn0.eyJleHAiOjQxMDI0NDQ4MDB9.', + noGuard: true, + }), + ).rejects.toThrow('handler-does-not-support-id-token') + }) + it('Should get a specific wallet by address', async () => { manager = newManager() const mnemonic = Mnemonic.random(Mnemonic.english) From 695705d714a52cc487172c6e58451abffd5e83f2 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Mon, 16 Mar 2026 11:58:14 +0100 Subject: [PATCH 10/43] 3.0.3 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 0e8eaad7e5..587820fa3c 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index ecb3f5ab8f..e5efc1603a 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.2", + "version": "3.0.3", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index 08a102605b..e1b41fe2e7 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 160072e474..ef999f3cde 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.2", + "version": "3.0.3", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index b9574b5e17..ba703fb8b0 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 947a441f35..b52799f512 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.2", + "version": "3.0.3", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index bfdd435cad..798331cfd7 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index 680c4b4349..d531475f4c 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.2", + "version": "3.0.3", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index 54cee73534..a6f4539d71 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index c6e4abae85..4504f7dcce 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.2", + "version": "3.0.3", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 0c8767f4dd..abac419009 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 308ba5ba4b..5706be6b9f 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.2", + "version": "3.0.3", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index 86b5873be4..3893996799 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index 5419b31dc1..7945989f4c 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.2", + "version": "3.0.3", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 2574b94e8d..056fdca06f 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.3 + +### Patch Changes + +- 3.0.3 +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 3dec76338e..007dd8ade0 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.2", + "version": "3.0.3", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 7387d62989..30c3eb85b2 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index dbb1e4a288..90b85d932b 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.2", + "version": "3.0.3", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index b5828b5961..5fc6db3e01 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index a8b28ead86..8353ef38ee 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.2", + "version": "3.0.3", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index 139e7f0f20..613594e4e6 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.3 + +### Patch Changes + +- 3.0.3 +- Updated dependencies + - @0xsequence/guard@3.0.3 + - @0xsequence/relayer@3.0.3 + - @0xsequence/wallet-primitives@3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 771cf687d1..2fb61f4245 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.2", + "version": "3.0.3", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index 5b96e92d69..26eafb4581 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.3 + +### Patch Changes + +- 3.0.3 +- Updated dependencies + - @0xsequence/guard@3.0.3 + - @0xsequence/relayer@3.0.3 + - @0xsequence/wallet-core@3.0.3 + - @0xsequence/wallet-primitives@3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 2904d51ef1..300ab8fcd5 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.2", + "version": "3.0.3", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index 85c1e85ad3..a8c38b8f36 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.3 + +### Patch Changes + +- 3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index fbff60f802..25f07053e9 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.2", + "version": "3.0.3", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 62c220728c..e226e9321c 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.3 + +### Patch Changes + +- 3.0.3 +- Updated dependencies + - @0xsequence/guard@3.0.3 + - @0xsequence/identity-instrument@3.0.3 + - @0xsequence/relayer@3.0.3 + - @0xsequence/wallet-core@3.0.3 + - @0xsequence/wallet-primitives@3.0.3 + ## 3.0.2 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 277fdf7a63..0e46d9330a 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.2", + "version": "3.0.3", "license": "Apache-2.0", "type": "module", "publishConfig": { From 169a216bbacf9f21f776f330099484a10429286b Mon Sep 17 00:00:00 2001 From: tolgahan-arikan Date: Mon, 16 Mar 2026 18:46:16 +0300 Subject: [PATCH 11/43] Add Apple ID token support to wallet WDK (#979) --- .../wdk/src/sequence/handlers/idtoken.ts | 10 ++- packages/wallet/wdk/src/sequence/manager.ts | 46 +++++++++----- packages/wallet/wdk/src/sequence/wallets.ts | 22 +++++-- .../wallet/wdk/test/identity-auth-dbs.test.ts | 36 +++++++++++ packages/wallet/wdk/test/idtoken.test.ts | 16 +++++ .../wallet/wdk/test/sessions-idtoken.test.ts | 1 + packages/wallet/wdk/test/wallets.test.ts | 61 +++++++++++++++++++ 7 files changed, 170 insertions(+), 22 deletions(-) diff --git a/packages/wallet/wdk/src/sequence/handlers/idtoken.ts b/packages/wallet/wdk/src/sequence/handlers/idtoken.ts index 5a8bcac530..58d5b5df9f 100644 --- a/packages/wallet/wdk/src/sequence/handlers/idtoken.ts +++ b/packages/wallet/wdk/src/sequence/handlers/idtoken.ts @@ -12,13 +12,16 @@ import type { WdkEnv } from '../../env.js' type RespondFn = (idToken: string) => Promise -export type PromptIdTokenHandler = (kind: 'google-id-token' | `custom-${string}`, respond: RespondFn) => Promise +export type PromptIdTokenHandler = ( + kind: 'google-id-token' | 'apple-id-token' | `custom-${string}`, + respond: RespondFn, +) => Promise export class IdTokenHandler extends IdentityHandler implements Handler { private onPromptIdToken: undefined | PromptIdTokenHandler constructor( - public readonly signupKind: 'google-id-token' | `custom-${string}`, + public readonly signupKind: 'google-id-token' | 'apple-id-token' | `custom-${string}`, public readonly issuer: string, public readonly audience: string, nitro: Identity.IdentityInstrument, @@ -33,6 +36,9 @@ export class IdTokenHandler extends IdentityHandler implements Handler { if (this.signupKind === 'google-id-token') { return Kinds.LoginGoogle } + if (this.signupKind === 'apple-id-token') { + return Kinds.LoginApple + } return 'login-' + this.signupKind } diff --git a/packages/wallet/wdk/src/sequence/manager.ts b/packages/wallet/wdk/src/sequence/manager.ts index 8e32c4e5e5..c7eecf3294 100644 --- a/packages/wallet/wdk/src/sequence/manager.ts +++ b/packages/wallet/wdk/src/sequence/manager.ts @@ -107,6 +107,7 @@ export type ManagerOptions = { apple?: { enabled: boolean clientId: string + authMethod?: 'authcode' | 'id-token' } customProviders?: CustomIdentityProvider[] } @@ -129,6 +130,7 @@ export type ResolvedIdentityOptions = { apple: { enabled: boolean clientId: string + authMethod: 'authcode' | 'id-token' } customProviders?: CustomIdentityProvider[] } @@ -260,6 +262,7 @@ export const ManagerOptionsDefaults = { apple: { enabled: false, clientId: '', + authMethod: 'authcode' as const, }, }, } @@ -716,20 +719,35 @@ export class Manager { } } if (ops.identity.apple?.enabled) { - shared.handlers.set( - Kinds.LoginApple, - new AuthCodeHandler( - 'apple', - 'https://appleid.apple.com', - 'https://appleid.apple.com/auth/authorize', - ops.identity.apple.clientId, - identityInstrument, - modules.signatures, - shared.databases.authCommitments, - shared.databases.authKeys, - shared.env, - ), - ) + if (ops.identity.apple.authMethod === 'id-token') { + shared.handlers.set( + Kinds.LoginApple, + new IdTokenHandler( + 'apple-id-token', + 'https://appleid.apple.com', + ops.identity.apple.clientId, + identityInstrument, + modules.signatures, + shared.databases.authKeys, + shared.env, + ), + ) + } else { + shared.handlers.set( + Kinds.LoginApple, + new AuthCodeHandler( + 'apple', + 'https://appleid.apple.com', + 'https://appleid.apple.com/auth/authorize', + ops.identity.apple.clientId, + identityInstrument, + modules.signatures, + shared.databases.authCommitments, + shared.databases.authKeys, + shared.env, + ), + ) + } } if (ops.identity.customProviders?.length) { for (const provider of ops.identity.customProviders) { diff --git a/packages/wallet/wdk/src/sequence/wallets.ts b/packages/wallet/wdk/src/sequence/wallets.ts index 1d8f17a4b3..f9f65b58e9 100644 --- a/packages/wallet/wdk/src/sequence/wallets.ts +++ b/packages/wallet/wdk/src/sequence/wallets.ts @@ -28,13 +28,19 @@ function getSignerKindForSignup(kind: SignupArgs['kind'] | AuthCommitment['kind' if (kind === 'google-id-token' || kind === 'google-pkce') { return Kinds.LoginGoogle } + if (kind === 'apple-id-token' || kind === 'apple') { + return Kinds.LoginApple + } if (kind.startsWith('custom-')) { return kind } return ('login-' + kind) as string } -function getIdTokenSignupHandler(shared: Shared, kind: typeof Kinds.LoginGoogle | `custom-${string}`): IdTokenHandler { +function getIdTokenSignupHandler( + shared: Shared, + kind: typeof Kinds.LoginGoogle | typeof Kinds.LoginApple | `custom-${string}`, +): IdTokenHandler { const handler = shared.handlers.get(kind) if (!handler) { throw new Error('handler-not-registered') @@ -82,7 +88,7 @@ export type EmailOtpSignupArgs = CommonSignupArgs & { } export type IdTokenSignupArgs = CommonSignupArgs & { - kind: 'google-id-token' | `custom-${string}` + kind: 'google-id-token' | 'apple-id-token' | `custom-${string}` idToken: string } @@ -222,7 +228,7 @@ export interface WalletsInterface { * - `kind: 'mnemonic'`: Uses a mnemonic phrase as the login credential. * - `kind: 'passkey'`: Prompts the user to create a WebAuthn passkey. * - `kind: 'email-otp'`: Initiates an OTP flow to the user's email. - * - `kind: 'google-id-token'`: Completes an OIDC ID token flow when Google is configured with `authMethod: 'id-token'`. + * - `kind: 'google-id-token' | 'apple-id-token'`: Completes an OIDC ID token flow when the provider is configured with `authMethod: 'id-token'`. * - `kind: 'google-pkce' | 'apple'`: Completes an OAuth redirect flow. * Common options like `noGuard` or `noRecovery` can customize the wallet's security features. * @returns A promise that resolves to the address of the newly created wallet, or `undefined` if the sign-up was aborted. @@ -721,8 +727,12 @@ export class Wallets implements WalletsInterface { } } - case 'google-id-token': { - const handler = getIdTokenSignupHandler(this.shared, Kinds.LoginGoogle) + case 'google-id-token': + case 'apple-id-token': { + const handler = getIdTokenSignupHandler( + this.shared, + args.kind === 'google-id-token' ? Kinds.LoginGoogle : Kinds.LoginApple, + ) const [signer, metadata] = await handler.completeAuth(args.idToken) const loginEmail = metadata.email this.shared.modules.logger.log('Created new id token signer:', signer.address) @@ -730,7 +740,7 @@ export class Wallets implements WalletsInterface { return { signer, extra: { - signerKind: Kinds.LoginGoogle, + signerKind: getSignerKindForSignup(args.kind), }, loginEmail, } diff --git a/packages/wallet/wdk/test/identity-auth-dbs.test.ts b/packages/wallet/wdk/test/identity-auth-dbs.test.ts index ae55251200..4062e0c269 100644 --- a/packages/wallet/wdk/test/identity-auth-dbs.test.ts +++ b/packages/wallet/wdk/test/identity-auth-dbs.test.ts @@ -395,6 +395,42 @@ describe('Identity Authentication Databases', () => { expect(handlers.has('login-google-pkce')).toBe(false) }) + it('Should register the Apple ID token handler when configured explicitly', async () => { + manager = new Manager({ + stateProvider: new State.Local.Provider(new State.Local.IndexedDbStore(`manager-apple-idtoken-${Date.now()}`)), + networks: [ + { + name: 'Test Network', + type: Network.NetworkType.MAINNET, + rpcUrl: LOCAL_RPC_URL, + chainId: Network.ChainId.ARBITRUM, + blockExplorer: { url: 'https://arbiscan.io' }, + nativeCurrency: { + name: 'Ether', + symbol: 'ETH', + decimals: 18, + }, + }, + ], + relayers: [], + authCommitmentsDb, + authKeysDb, + identity: { + url: 'https://dev-identity.sequence-dev.app', + fetch: window.fetch, + apple: { + enabled: true, + clientId: 'test-apple-client-id', + authMethod: 'id-token', + }, + }, + }) + + const handlers = (manager as any).shared.handlers + expect(handlers.has('login-apple-id-token')).toBe(false) + expect(handlers.has('login-apple')).toBe(true) + }) + it('Should use auth databases when email authentication is enabled', async () => { manager = new Manager({ stateProvider: new State.Local.Provider(new State.Local.IndexedDbStore(`manager-email-${Date.now()}`)), diff --git a/packages/wallet/wdk/test/idtoken.test.ts b/packages/wallet/wdk/test/idtoken.test.ts index deeff401fc..7badcb89a3 100644 --- a/packages/wallet/wdk/test/idtoken.test.ts +++ b/packages/wallet/wdk/test/idtoken.test.ts @@ -101,6 +101,22 @@ describe('IdTokenHandler', () => { expect(handler.kind).toBe(Kinds.LoginGoogle) }) + it('Should normalize apple-id-token handlers to login-apple', () => { + const handler = new IdTokenHandler( + 'apple-id-token', + 'https://appleid.apple.com', + 'test-apple-client-id', + mockNitroInstrument, + mockSignatures, + mockAuthKeys, + ) + + expect(handler.signupKind).toBe('apple-id-token') + expect(handler.issuer).toBe('https://appleid.apple.com') + expect(handler.audience).toBe('test-apple-client-id') + expect(handler.kind).toBe(Kinds.LoginApple) + }) + it('Should initialize without a registered UI callback', () => { expect(idTokenHandler['onPromptIdToken']).toBeUndefined() }) diff --git a/packages/wallet/wdk/test/sessions-idtoken.test.ts b/packages/wallet/wdk/test/sessions-idtoken.test.ts index 7249728b92..7c080af5c2 100644 --- a/packages/wallet/wdk/test/sessions-idtoken.test.ts +++ b/packages/wallet/wdk/test/sessions-idtoken.test.ts @@ -60,6 +60,7 @@ describe('Sessions ID token attestation', () => { apple: { enabled: true, clientId: 'test-apple-client-id', + authMethod: 'id-token', }, }, }) diff --git a/packages/wallet/wdk/test/wallets.test.ts b/packages/wallet/wdk/test/wallets.test.ts index dc3f2728e7..f97b3bf928 100644 --- a/packages/wallet/wdk/test/wallets.test.ts +++ b/packages/wallet/wdk/test/wallets.test.ts @@ -71,6 +71,48 @@ describe('Wallets', () => { expect(configuration.login[0]!.kind).toBe(Kinds.LoginGoogle) }) + it('Should create a new wallet using apple-id-token when Apple ID token auth is enabled', async () => { + manager = newManager({ + identity: { + apple: { + enabled: true, + clientId: 'test-apple-client-id', + authMethod: 'id-token', + }, + }, + }) + + const handler = (manager as any).shared.handlers.get(Kinds.LoginApple) as IdTokenHandler + const loginMnemonic = Mnemonic.random(Mnemonic.english) + const loginSigner = MnemonicHandler.toSigner(loginMnemonic) + if (!loginSigner) { + throw new Error('Failed to create login signer for test') + } + + const completeAuthSpy = vi + .spyOn(handler, 'completeAuth') + .mockResolvedValue([loginSigner as unknown as IdentitySigner, { email: 'apple-user@example.com' }]) + + const wallet = await manager.wallets.signUp({ + kind: 'apple-id-token', + idToken: 'eyJhbGciOiJub25lIn0.eyJleHAiOjQxMDI0NDQ4MDB9.', + noGuard: true, + }) + + expect(wallet).toBeDefined() + expect(completeAuthSpy).toHaveBeenCalledWith('eyJhbGciOiJub25lIn0.eyJleHAiOjQxMDI0NDQ4MDB9.') + await expect(manager.wallets.has(wallet!)).resolves.toBeTruthy() + + const walletEntry = await manager.wallets.get(wallet!) + expect(walletEntry).toBeDefined() + expect(walletEntry!.loginType).toBe(Kinds.LoginApple) + expect(walletEntry!.loginEmail).toBe('apple-user@example.com') + + const configuration = await manager.wallets.getConfiguration(wallet!) + expect(configuration.login).toHaveLength(1) + expect(configuration.login[0]!.kind).toBe(Kinds.LoginApple) + }) + it('Should register and unregister Google ID token UI callbacks through the manager', async () => { manager = newManager({ identity: { @@ -140,6 +182,25 @@ describe('Wallets', () => { ).rejects.toThrow('handler-does-not-support-id-token') }) + it('Should reject apple-id-token signup when Apple is configured for redirect auth', async () => { + manager = newManager({ + identity: { + apple: { + enabled: true, + clientId: 'test-apple-client-id', + }, + }, + }) + + await expect( + manager.wallets.signUp({ + kind: 'apple-id-token', + idToken: 'eyJhbGciOiJub25lIn0.eyJleHAiOjQxMDI0NDQ4MDB9.', + noGuard: true, + }), + ).rejects.toThrow('handler-does-not-support-id-token') + }) + it('Should reject custom ID token signup when the provider uses redirect auth', async () => { manager = newManager({ identity: { From ac996d4100c1f3fde2960b62a971e4dfc2037c17 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Mon, 16 Mar 2026 17:42:05 +0100 Subject: [PATCH 12/43] 3.0.4 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 587820fa3c..918bad822a 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index e5efc1603a..451ef58d06 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.3", + "version": "3.0.4", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index e1b41fe2e7..2643797ce3 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index ef999f3cde..ffc88e2466 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.3", + "version": "3.0.4", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index ba703fb8b0..f1d8b7552e 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index b52799f512..84d0bc3deb 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.3", + "version": "3.0.4", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index 798331cfd7..a266bf8021 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index d531475f4c..ddb68338bd 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.3", + "version": "3.0.4", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index a6f4539d71..ac5f89be5a 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 4504f7dcce..7b2b6c2fbe 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.3", + "version": "3.0.4", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index abac419009..359c4e344e 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 5706be6b9f..213124ae89 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.3", + "version": "3.0.4", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index 3893996799..f194e094f6 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index 7945989f4c..460686f756 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.3", + "version": "3.0.4", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 056fdca06f..c781762ac5 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.4 + +### Patch Changes + +- id-token login support +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.4 + ## 3.0.3 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 007dd8ade0..6d5f306e06 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.3", + "version": "3.0.4", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 30c3eb85b2..3d914bb900 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 90b85d932b..73cee886ff 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.3", + "version": "3.0.4", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index 5fc6db3e01..4a755c767f 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index 8353ef38ee..dfb4d80c39 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.3", + "version": "3.0.4", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index 613594e4e6..d952d05be7 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.4 + +### Patch Changes + +- id-token login support +- Updated dependencies + - @0xsequence/guard@3.0.4 + - @0xsequence/relayer@3.0.4 + - @0xsequence/wallet-primitives@3.0.4 + ## 3.0.3 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 2fb61f4245..056f84a65c 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.3", + "version": "3.0.4", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index 26eafb4581..3beac386c7 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.4 + +### Patch Changes + +- id-token login support +- Updated dependencies + - @0xsequence/guard@3.0.4 + - @0xsequence/relayer@3.0.4 + - @0xsequence/wallet-core@3.0.4 + - @0xsequence/wallet-primitives@3.0.4 + ## 3.0.3 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 300ab8fcd5..2b6c069f9f 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.3", + "version": "3.0.4", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index a8c38b8f36..cc25319ad4 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.4 + +### Patch Changes + +- id-token login support + ## 3.0.3 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index 25f07053e9..2fc8c4c470 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.3", + "version": "3.0.4", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index e226e9321c..c4b6b370af 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.4 + +### Patch Changes + +- id-token login support +- Updated dependencies + - @0xsequence/guard@3.0.4 + - @0xsequence/identity-instrument@3.0.4 + - @0xsequence/relayer@3.0.4 + - @0xsequence/wallet-core@3.0.4 + - @0xsequence/wallet-primitives@3.0.4 + ## 3.0.3 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 0e46d9330a..b08a0cfc9f 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.3", + "version": "3.0.4", "license": "Apache-2.0", "type": "module", "publishConfig": { From 849566b2ef9b639a4b75e412032c6d908b3ecc7a Mon Sep 17 00:00:00 2001 From: Patryk Kalinowski Date: Thu, 19 Mar 2026 18:03:33 +0100 Subject: [PATCH 13/43] wdk: account federation (#980) * wdk: account federation * wdk: address review comments; refactor auth commitments * wdk: update tests * fix test --- .../wallet/wdk/src/dbs/auth-commitments.ts | 9 +- packages/wallet/wdk/src/dbs/index.ts | 2 +- .../src/sequence/handlers/authcode-pkce.ts | 26 +- .../wdk/src/sequence/handlers/authcode.ts | 31 +- packages/wallet/wdk/src/sequence/index.ts | 3 + .../src/sequence/types/signature-request.ts | 4 + packages/wallet/wdk/src/sequence/wallets.ts | 320 ++++++++++++++++-- .../wallet/wdk/test/authcode-pkce.test.ts | 45 ++- packages/wallet/wdk/test/authcode.test.ts | 43 +-- .../wallet/wdk/test/identity-auth-dbs.test.ts | 15 +- packages/wallet/wdk/test/wallets.test.ts | 2 +- 11 files changed, 409 insertions(+), 91 deletions(-) diff --git a/packages/wallet/wdk/src/dbs/auth-commitments.ts b/packages/wallet/wdk/src/dbs/auth-commitments.ts index 721d73619c..613d4bd574 100644 --- a/packages/wallet/wdk/src/dbs/auth-commitments.ts +++ b/packages/wallet/wdk/src/dbs/auth-commitments.ts @@ -3,6 +3,11 @@ import { IDBPDatabase, IDBPTransaction } from 'idb' const TABLE_NAME = 'auth-commitments' +export type CommitAuthArgs = + | { type: 'auth'; state?: string } + | { type: 'reauth'; state: string; signer: string } + | { type: 'add-signer'; wallet: string; state?: string } + export type AuthCommitment = { id: string kind: 'google-pkce' | 'apple' | `custom-${string}` @@ -10,9 +15,7 @@ export type AuthCommitment = { verifier?: string challenge?: string target: string - isSignUp: boolean - signer?: string -} +} & ({ type: 'auth' } | { type: 'reauth'; signer: string } | { type: 'add-signer'; wallet: string }) export class AuthCommitments extends Generic { constructor(dbName: string = 'sequence-auth-commitments') { diff --git a/packages/wallet/wdk/src/dbs/index.ts b/packages/wallet/wdk/src/dbs/index.ts index 797997b944..1cf7f30f03 100644 --- a/packages/wallet/wdk/src/dbs/index.ts +++ b/packages/wallet/wdk/src/dbs/index.ts @@ -1,4 +1,4 @@ -export type { AuthCommitment } from './auth-commitments.js' +export type { AuthCommitment, CommitAuthArgs } from './auth-commitments.js' export { AuthCommitments } from './auth-commitments.js' export type { AuthKey } from './auth-keys.js' diff --git a/packages/wallet/wdk/src/sequence/handlers/authcode-pkce.ts b/packages/wallet/wdk/src/sequence/handlers/authcode-pkce.ts index f8f86d5afc..308e2809fa 100644 --- a/packages/wallet/wdk/src/sequence/handlers/authcode-pkce.ts +++ b/packages/wallet/wdk/src/sequence/handlers/authcode-pkce.ts @@ -6,6 +6,7 @@ import * as Identity from '@0xsequence/identity-instrument' import { IdentitySigner } from '../../identity/signer.js' import { AuthCodeHandler } from './authcode.js' import type { WdkEnv } from '../../env.js' +import type { CommitAuthArgs } from '../../dbs/auth-commitments.js' export class AuthCodePkceHandler extends AuthCodeHandler implements Handler { constructor( @@ -22,25 +23,30 @@ export class AuthCodePkceHandler extends AuthCodeHandler implements Handler { super(signupKind, issuer, oauthUrl, audience, nitro, signatures, commitments, authKeys, env) } - public async commitAuth(target: string, isSignUp: boolean, state?: string, signer?: string) { + public async commitAuth(target: string, args: CommitAuthArgs) { let challenge = new Identity.AuthCodePkceChallenge(this.issuer, this.audience, this.redirectUri) - if (signer) { - challenge = challenge.withSigner({ address: signer, keyType: Identity.KeyType.Ethereum_Secp256k1 }) + if (args.type === 'reauth') { + challenge = challenge.withSigner({ address: args.signer, keyType: Identity.KeyType.Ethereum_Secp256k1 }) } const { verifier, loginHint, challenge: codeChallenge } = await this.nitroCommitVerifier(challenge) - if (!state) { - state = Hex.fromBytes(Bytes.random(32)) - } + const state = args.state ?? Hex.fromBytes(Bytes.random(32)) - await this.commitments.set({ + const base = { id: state, - kind: this.signupKind, + kind: this.signupKind as Db.AuthCommitment['kind'], verifier, challenge: codeChallenge, target, metadata: {}, - isSignUp, - }) + } + + if (args.type === 'reauth') { + await this.commitments.set({ ...base, type: 'reauth', signer: args.signer }) + } else if (args.type === 'add-signer') { + await this.commitments.set({ ...base, type: 'add-signer', wallet: args.wallet }) + } else { + await this.commitments.set({ ...base, type: 'auth' }) + } const searchParams = this.serializeQuery({ code_challenge: codeChallenge, diff --git a/packages/wallet/wdk/src/sequence/handlers/authcode.ts b/packages/wallet/wdk/src/sequence/handlers/authcode.ts index 699d72bc46..4b5d5922b5 100644 --- a/packages/wallet/wdk/src/sequence/handlers/authcode.ts +++ b/packages/wallet/wdk/src/sequence/handlers/authcode.ts @@ -8,6 +8,7 @@ import { IdentitySigner } from '../../identity/signer.js' import { IdentityHandler } from './identity.js' import { Kinds } from '../types/signer.js' import type { NavigationLike, WdkEnv } from '../../env.js' +import type { CommitAuthArgs } from '../../dbs/auth-commitments.js' export class AuthCodeHandler extends IdentityHandler implements Handler { protected redirectUri: string = '' @@ -39,19 +40,23 @@ export class AuthCodeHandler extends IdentityHandler implements Handler { this.redirectUri = redirectUri } - public async commitAuth(target: string, isSignUp: boolean, state?: string, signer?: string) { - if (!state) { - state = Hex.fromBytes(Bytes.random(32)) - } + public async commitAuth(target: string, args: CommitAuthArgs) { + const state = args.state ?? Hex.fromBytes(Bytes.random(32)) - await this.commitments.set({ + const base = { id: state, - kind: this.signupKind, - signer, + kind: this.signupKind as Db.AuthCommitment['kind'], target, metadata: {}, - isSignUp, - }) + } + + if (args.type === 'reauth') { + await this.commitments.set({ ...base, type: 'reauth', signer: args.signer }) + } else if (args.type === 'add-signer') { + await this.commitments.set({ ...base, type: 'add-signer', wallet: args.wallet }) + } else { + await this.commitments.set({ ...base, type: 'auth' }) + } const searchParams = this.serializeQuery({ client_id: this.audience, @@ -69,7 +74,7 @@ export class AuthCodeHandler extends IdentityHandler implements Handler { code: string, ): Promise<[IdentitySigner, { [key: string]: string }]> { let challenge = new Identity.AuthCodeChallenge(this.issuer, this.audience, this.redirectUri, code) - if (commitment.signer) { + if (commitment.type === 'reauth') { challenge = challenge.withSigner({ address: commitment.signer, keyType: Identity.KeyType.Ethereum_Secp256k1 }) } await this.nitroCommitVerifier(challenge) @@ -103,7 +108,11 @@ export class AuthCodeHandler extends IdentityHandler implements Handler { message: 'request-redirect', handle: async () => { const navigation = this.getNavigation() - const url = await this.commitAuth(navigation.getPathname(), false, request.id, address) + const url = await this.commitAuth(navigation.getPathname(), { + type: 'reauth', + state: request.id, + signer: address, + }) navigation.redirect(url) return true }, diff --git a/packages/wallet/wdk/src/sequence/index.ts b/packages/wallet/wdk/src/sequence/index.ts index ed2f9e440a..d2afe15a37 100644 --- a/packages/wallet/wdk/src/sequence/index.ts +++ b/packages/wallet/wdk/src/sequence/index.ts @@ -9,12 +9,15 @@ export { Sessions } from './sessions.js' export { Signatures } from './signatures.js' export type { StartSignUpWithRedirectArgs, + StartAddLoginSignerWithRedirectArgs, CommonSignupArgs, PasskeySignupArgs, MnemonicSignupArgs, EmailOtpSignupArgs, CompleteRedirectArgs, SignupArgs, + AddLoginSignerArgs, + RemoveLoginSignerArgs, LoginToWalletArgs, LoginToMnemonicArgs, LoginToPasskeyArgs, diff --git a/packages/wallet/wdk/src/sequence/types/signature-request.ts b/packages/wallet/wdk/src/sequence/types/signature-request.ts index cbce933da8..e3cb1b7875 100644 --- a/packages/wallet/wdk/src/sequence/types/signature-request.ts +++ b/packages/wallet/wdk/src/sequence/types/signature-request.ts @@ -13,6 +13,8 @@ export type ActionToPayload = { [Actions.Recovery]: Payload.Recovery [Actions.AddRecoverySigner]: Payload.ConfigUpdate [Actions.RemoveRecoverySigner]: Payload.ConfigUpdate + [Actions.AddLoginSigner]: Payload.ConfigUpdate + [Actions.RemoveLoginSigner]: Payload.ConfigUpdate [Actions.SessionImplicitAuthorize]: Payload.SessionImplicitAuthorize } @@ -26,6 +28,8 @@ export const Actions = { Recovery: 'recovery', AddRecoverySigner: 'add-recovery-signer', RemoveRecoverySigner: 'remove-recovery-signer', + AddLoginSigner: 'add-login-signer', + RemoveLoginSigner: 'remove-login-signer', SessionImplicitAuthorize: 'session-implicit-authorize', } as const diff --git a/packages/wallet/wdk/src/sequence/wallets.ts b/packages/wallet/wdk/src/sequence/wallets.ts index f9f65b58e9..5746f7a832 100644 --- a/packages/wallet/wdk/src/sequence/wallets.ts +++ b/packages/wallet/wdk/src/sequence/wallets.ts @@ -8,7 +8,7 @@ import { MnemonicHandler } from './handlers/mnemonic.js' import { OtpHandler } from './handlers/otp.js' import { Shared } from './manager.js' import { Device } from './types/device.js' -import { Action, Module } from './types/index.js' +import { Action, Actions, Module } from './types/index.js' import { Kinds, SignerWithKind, WitnessExtraSignerKind } from './types/signer.js' import { Wallet, WalletSelectionUiHandler } from './types/wallet.js' import { PasskeysHandler } from './handlers/passkeys.js' @@ -57,6 +57,12 @@ export type StartSignUpWithRedirectArgs = { metadata: { [key: string]: string } } +export type StartAddLoginSignerWithRedirectArgs = { + wallet: Address.Address + kind: 'google-pkce' | 'apple' | `custom-${string}` + target: string +} + export type SignupStatus = | { type: 'login-signer-created'; address: Address.Address } | { type: 'device-signer-created'; address: Address.Address } @@ -112,6 +118,19 @@ export type SignupArgs = | IdTokenSignupArgs | AuthCodeSignupArgs +export type AddLoginSignerArgs = { + wallet: Address.Address +} & ( + | { kind: 'mnemonic'; mnemonic: string } + | { kind: 'email-otp'; email: string } + | { kind: 'google-id-token' | 'apple-id-token' | `custom-${string}`; idToken: string } +) + +export type RemoveLoginSignerArgs = { + wallet: Address.Address + signerAddress: Address.Address +} + export type LoginToWalletArgs = { wallet: Address.Address } @@ -292,6 +311,66 @@ export interface WalletsInterface { */ completeLogin(requestId: string): Promise + /** + * Adds a new login signer to an existing wallet, enabling account federation. + * + * This allows a user to link a new login method (e.g., Google, email OTP, mnemonic) to a wallet + * that was originally created with a different credential. After federation, the wallet can be + * discovered and accessed via any of its linked login methods. + * + * @param args The arguments specifying the wallet and the new login credential to add. + * @returns A promise that resolves to a `requestId` for the configuration update signature request. + * @see {completeAddLoginSigner} + */ + addLoginSigner(args: AddLoginSignerArgs): Promise + + /** + * Completes the add-login-signer process after the configuration update has been signed. + * + * @param requestId The ID of the completed signature request returned by `addLoginSigner`. + * @returns A promise that resolves when the configuration update has been submitted. + */ + completeAddLoginSigner(requestId: string): Promise + + /** + * Initiates an add-login-signer process that involves an OAuth redirect. + * + * This is the first step for adding a social login signer (e.g., Google, Apple) to an existing wallet + * via a redirect-based OAuth flow. It validates the wallet, generates the necessary challenges and state, + * stores them locally, and returns a URL. Your application should redirect the user to this URL. + * + * After the redirect callback, call `completeRedirect` with the returned state and code. This will + * create a pending `AddLoginSigner` signature request internally. The caller can then discover + * the pending request through the signatures module and call `completeAddLoginSigner` with the requestId + * once it has been signed. + * + * @param args Arguments specifying the wallet, provider (`kind`), and the `target` URL for the redirect callback. + * @returns A promise that resolves to the full OAuth URL to which the user should be redirected. + * @see {completeRedirect} for the second step of this flow. + * @see {completeAddLoginSigner} to finalize after signing. + */ + startAddLoginSignerWithRedirect(args: StartAddLoginSignerWithRedirectArgs): Promise + + /** + * Removes a login signer from an existing wallet, enabling account defederation. + * + * This allows a user to unlink a login method from a wallet. A safety guard ensures + * at least one login signer always remains. + * + * @param args The arguments specifying the wallet and the signer address to remove. + * @returns A promise that resolves to a `requestId` for the configuration update signature request. + * @see {completeRemoveLoginSigner} + */ + removeLoginSigner(args: RemoveLoginSignerArgs): Promise + + /** + * Completes the remove-login-signer process after the configuration update has been signed. + * + * @param requestId The ID of the completed signature request returned by `removeLoginSigner`. + * @returns A promise that resolves when the configuration update has been submitted. + */ + completeRemoveLoginSigner(requestId: string): Promise + /** * Logs out from a given wallet, ending the current session. * @@ -417,6 +496,20 @@ export function isIdTokenArgs(args: SignupArgs): args is IdTokenSignupArgs { return 'idToken' in args } +function addLoginSignerToSignupArgs(args: AddLoginSignerArgs): SignupArgs { + switch (args.kind) { + case 'mnemonic': + return { kind: 'mnemonic', mnemonic: args.mnemonic } + case 'email-otp': + return { kind: 'email-otp', email: args.email } + default: { + // google-id-token, apple-id-token, custom-* + const _args = args as { kind: string; idToken: string } + return { kind: _args.kind as IdTokenSignupArgs['kind'], idToken: _args.idToken } + } + } +} + function buildCappedTree(members: { address: Address.Address; imageHash?: Hex.Hex }[]): Config.Topology { const loginMemberWeight = 1n @@ -807,7 +900,27 @@ export class Wallets implements WalletsInterface { if (!(handler instanceof AuthCodeHandler)) { throw new Error('handler-does-not-support-redirect') } - return handler.commitAuth(args.target, true) + return handler.commitAuth(args.target, { type: 'auth' }) + } + + async startAddLoginSignerWithRedirect(args: StartAddLoginSignerWithRedirectArgs) { + const walletEntry = await this.get(args.wallet) + if (!walletEntry) { + throw new Error('wallet-not-found') + } + if (walletEntry.status !== 'ready') { + throw new Error('wallet-not-ready') + } + + const kind = getSignupHandlerKey(args.kind) + const handler = this.shared.handlers.get(kind) + if (!handler) { + throw new Error('handler-not-registered') + } + if (!(handler instanceof AuthCodeHandler)) { + throw new Error('handler-does-not-support-redirect') + } + return handler.commitAuth(args.target, { type: 'add-signer', wallet: args.wallet }) } async completeRedirect(args: CompleteRedirectArgs): Promise { @@ -816,28 +929,62 @@ export class Wallets implements WalletsInterface { throw new Error('invalid-state') } - // commitment.isSignUp and signUp also mean 'signIn' from wallet's perspective - if (commitment.isSignUp) { - await this.signUp({ - kind: commitment.kind, - commitment, - code: args.code, - noGuard: args.noGuard, - target: commitment.target, - isRedirect: true, - use4337: args.use4337, - }) - } else { - const handlerKind = getSignupHandlerKey(commitment.kind) - const handler = this.shared.handlers.get(handlerKind) - if (!handler) { - throw new Error('handler-not-registered') + switch (commitment.type) { + case 'add-signer': { + const handlerKind = getSignupHandlerKey(commitment.kind) + const handler = this.shared.handlers.get(handlerKind) + if (!handler) { + throw new Error('handler-not-registered') + } + if (!(handler instanceof AuthCodeHandler)) { + throw new Error('handler-does-not-support-redirect') + } + + const walletAddress = commitment.wallet as Address.Address + const walletEntry = await this.get(walletAddress) + if (!walletEntry) { + throw new Error('wallet-not-found') + } + if (walletEntry.status !== 'ready') { + throw new Error('wallet-not-ready') + } + + const [signer] = await handler.completeAuth(commitment, args.code) + const signerKind = getSignerKindForSignup(commitment.kind) + + await this.addLoginSignerFromPrepared(walletAddress, { + signer, + extra: { signerKind }, + }) + break } - if (!(handler instanceof AuthCodeHandler)) { - throw new Error('handler-does-not-support-redirect') + + case 'auth': { + await this.signUp({ + kind: commitment.kind, + commitment, + code: args.code, + noGuard: args.noGuard, + target: commitment.target, + isRedirect: true, + use4337: args.use4337, + }) + break } - await handler.completeAuth(commitment, args.code) + case 'reauth': { + const handlerKind = getSignupHandlerKey(commitment.kind) + const handler = this.shared.handlers.get(handlerKind) + if (!handler) { + throw new Error('handler-not-registered') + } + if (!(handler instanceof AuthCodeHandler)) { + throw new Error('handler-does-not-support-redirect') + } + + await handler.completeAuth(commitment, args.code) + break + } } if (!commitment.target) { @@ -1273,6 +1420,87 @@ export class Wallets implements WalletsInterface { }) } + async addLoginSigner(args: AddLoginSignerArgs): Promise { + const walletEntry = await this.get(args.wallet) + if (!walletEntry) { + throw new Error('wallet-not-found') + } + if (walletEntry.status !== 'ready') { + throw new Error('wallet-not-ready') + } + + const signupArgs = addLoginSignerToSignupArgs(args) + const loginSigner = await this.prepareSignUp(signupArgs) + return this.addLoginSignerFromPrepared(args.wallet, loginSigner) + } + + async completeAddLoginSigner(requestId: string): Promise { + const request = await this.shared.modules.signatures.get(requestId) + if (request.action !== Actions.AddLoginSigner) { + throw new Error('invalid-request-action') + } + await this.completeConfigurationUpdate(requestId) + } + + async removeLoginSigner(args: RemoveLoginSignerArgs): Promise { + const walletEntry = await this.get(args.wallet) + if (!walletEntry) { + throw new Error('wallet-not-found') + } + if (walletEntry.status !== 'ready') { + throw new Error('wallet-not-ready') + } + + const { loginTopology, modules } = await this.getConfigurationParts(args.wallet) + + const existingSigners = Config.getSigners(loginTopology) + const allExistingAddresses = [...existingSigners.signers, ...existingSigners.sapientSigners.map((s) => s.address)] + + if (!allExistingAddresses.some((addr) => Address.isEqual(addr, args.signerAddress))) { + throw new Error('signer-not-found') + } + + const remainingMembers = [ + ...existingSigners.signers + .filter((x) => x !== Constants.ZeroAddress && !Address.isEqual(x, args.signerAddress)) + .map((x) => ({ address: x })), + ...existingSigners.sapientSigners + .filter((x) => !Address.isEqual(x.address, args.signerAddress)) + .map((x) => ({ address: x.address, imageHash: x.imageHash })), + ] + + if (remainingMembers.length < 1) { + throw new Error('cannot-remove-last-login-signer') + } + + const nextLoginTopology = buildCappedTree(remainingMembers) + + if (this.shared.modules.sessions.hasSessionModule(modules)) { + await this.shared.modules.sessions.removeIdentitySignerFromModules(modules, args.signerAddress) + } + + if (this.shared.modules.recovery.hasRecoveryModule(modules)) { + await this.shared.modules.recovery.removeRecoverySignerFromModules(modules, args.signerAddress) + } + + const requestId = await this.requestConfigurationUpdate( + args.wallet, + { loginTopology: nextLoginTopology, modules }, + Actions.RemoveLoginSigner, + 'wallet-webapp', + ) + + return requestId + } + + async completeRemoveLoginSigner(requestId: string): Promise { + const request = await this.shared.modules.signatures.get(requestId) + if (request.action !== Actions.RemoveLoginSigner) { + throw new Error('invalid-request-action') + } + await this.completeConfigurationUpdate(requestId) + } + async logout( wallet: Address.Address, options?: T, @@ -1503,4 +1731,54 @@ export class Wallets implements WalletsInterface { return requestId } + + private async addLoginSignerFromPrepared( + wallet: Address.Address, + loginSigner: { + signer: (Signers.Signer | Signers.SapientSigner) & Signers.Witnessable + extra: WitnessExtraSignerKind + }, + ): Promise { + const newSignerAddress = await loginSigner.signer.address + + const { loginTopology, modules } = await this.getConfigurationParts(wallet) + + // Check for duplicate signer + const existingSigners = Config.getSigners(loginTopology) + const allExistingAddresses = [...existingSigners.signers, ...existingSigners.sapientSigners.map((s) => s.address)] + if (allExistingAddresses.some((addr) => Address.isEqual(addr, newSignerAddress))) { + throw new Error('signer-already-exists') + } + + // Build new login topology with the additional signer + const existingMembers = [ + ...existingSigners.signers.filter((x) => x !== Constants.ZeroAddress).map((x) => ({ address: x })), + ...existingSigners.sapientSigners.map((x) => ({ address: x.address, imageHash: x.imageHash })), + ] + const newMember = { + address: newSignerAddress, + imageHash: Signers.isSapientSigner(loginSigner.signer) ? await loginSigner.signer.imageHash : undefined, + } + const nextLoginTopology = buildCappedTree([...existingMembers, newMember]) + + // Add non-sapient login signer to sessions module identity signers + if (!Signers.isSapientSigner(loginSigner.signer) && this.shared.modules.sessions.hasSessionModule(modules)) { + await this.shared.modules.sessions.addIdentitySignerToModules(modules, newSignerAddress) + } + + // Add to recovery module if present + if (this.shared.modules.recovery.hasRecoveryModule(modules)) { + await this.shared.modules.recovery.addRecoverySignerToModules(modules, newSignerAddress) + } + + // Witness so the wallet becomes discoverable via the new credential + await loginSigner.signer.witness(this.shared.sequence.stateProvider, wallet, loginSigner.extra) + + return this.requestConfigurationUpdate( + wallet, + { loginTopology: nextLoginTopology, modules }, + Actions.AddLoginSigner, + 'wallet-webapp', + ) + } } diff --git a/packages/wallet/wdk/test/authcode-pkce.test.ts b/packages/wallet/wdk/test/authcode-pkce.test.ts index e30e8607f8..d9b46bd87b 100644 --- a/packages/wallet/wdk/test/authcode-pkce.test.ts +++ b/packages/wallet/wdk/test/authcode-pkce.test.ts @@ -90,9 +90,8 @@ describe('AuthCodePkceHandler', () => { describe('commitAuth', () => { it('Should create Google PKCE auth commitment and return OAuth URL', async () => { const target = 'https://example.com/success' - const isSignUp = true - const result = await handler.commitAuth(target, isSignUp) + const result = await handler.commitAuth(target, { type: 'auth' }) // Verify nitroCommitVerifier was called with correct challenge expect(handler['nitroCommitVerifier']).toHaveBeenCalledWith( @@ -110,7 +109,7 @@ describe('AuthCodePkceHandler', () => { challenge: 'mock-challenge-hash', target, metadata: {}, - isSignUp, + type: 'auth', }) // Verify OAuth URL is constructed correctly @@ -127,10 +126,13 @@ describe('AuthCodePkceHandler', () => { it('Should use provided state instead of generating random one', async () => { const target = 'https://example.com/success' - const isSignUp = false const customState = 'custom-state-123' - const result = await handler.commitAuth(target, isSignUp, customState) + const result = await handler.commitAuth(target, { + type: 'reauth', + state: customState, + signer: '0x1234567890123456789012345678901234567890', + }) // Verify commitment was saved with custom state expect(mockCommitments.set).toHaveBeenCalledWith({ @@ -140,7 +142,8 @@ describe('AuthCodePkceHandler', () => { challenge: 'mock-challenge-hash', target, metadata: {}, - isSignUp, + type: 'reauth', + signer: '0x1234567890123456789012345678901234567890', }) // Verify URL contains custom state @@ -149,10 +152,9 @@ describe('AuthCodePkceHandler', () => { it('Should include signer in challenge when provided', async () => { const target = 'https://example.com/success' - const isSignUp = true const signer = '0x9876543210987654321098765432109876543210' - await handler.commitAuth(target, isSignUp, undefined, signer) + await handler.commitAuth(target, { type: 'reauth', state: 'test-state', signer }) // Verify nitroCommitVerifier was called with signer in challenge expect(handler['nitroCommitVerifier']).toHaveBeenCalledWith( @@ -164,9 +166,8 @@ describe('AuthCodePkceHandler', () => { it('Should generate random state when not provided', async () => { const target = 'https://example.com/success' - const isSignUp = true - const result = await handler.commitAuth(target, isSignUp) + const result = await handler.commitAuth(target, { type: 'auth' }) // Verify that a state parameter is present and looks like a hex string expect(result).toMatch(/state=0x[a-f0-9]+/) @@ -181,18 +182,22 @@ describe('AuthCodePkceHandler', () => { const target = 'https://example.com/success' // Test signup - await handler.commitAuth(target, true) + await handler.commitAuth(target, { type: 'auth' }) expect(mockCommitments.set).toHaveBeenLastCalledWith( expect.objectContaining({ - isSignUp: true, + type: 'auth', }), ) // Test login - await handler.commitAuth(target, false) + await handler.commitAuth(target, { + type: 'reauth', + state: 'test-state', + signer: '0x1234567890123456789012345678901234567890', + }) expect(mockCommitments.set).toHaveBeenLastCalledWith( expect.objectContaining({ - isSignUp: false, + type: 'reauth', }), ) }) @@ -200,13 +205,17 @@ describe('AuthCodePkceHandler', () => { it('Should handle errors from nitroCommitVerifier', async () => { vi.spyOn(handler as any, 'nitroCommitVerifier').mockRejectedValue(new Error('Nitro service unavailable')) - await expect(handler.commitAuth('https://example.com/success', true)).rejects.toThrow('Nitro service unavailable') + await expect(handler.commitAuth('https://example.com/success', { type: 'auth' })).rejects.toThrow( + 'Nitro service unavailable', + ) }) it('Should handle database errors during commitment storage', async () => { vi.mocked(mockCommitments.set).mockRejectedValue(new Error('Database write failed')) - await expect(handler.commitAuth('https://example.com/success', true)).rejects.toThrow('Database write failed') + await expect(handler.commitAuth('https://example.com/success', { type: 'auth' })).rejects.toThrow( + 'Database write failed', + ) }) }) @@ -221,7 +230,7 @@ describe('AuthCodePkceHandler', () => { challenge: 'test-challenge-hash', target: 'https://example.com/success', metadata: { scope: 'openid profile email' }, - isSignUp: true, + type: 'auth', } }) @@ -333,7 +342,7 @@ describe('AuthCodePkceHandler', () => { const newRedirectUri = 'https://newdomain.com/callback' handler.setRedirectUri(newRedirectUri) - return handler.commitAuth('https://example.com/success', true).then((result) => { + return handler.commitAuth('https://example.com/success', { type: 'auth' }).then((result) => { expect(result).toContain(`redirect_uri=${encodeURIComponent(newRedirectUri)}`) }) }) diff --git a/packages/wallet/wdk/test/authcode.test.ts b/packages/wallet/wdk/test/authcode.test.ts index 66c2eca4fa..f673f8d42e 100644 --- a/packages/wallet/wdk/test/authcode.test.ts +++ b/packages/wallet/wdk/test/authcode.test.ts @@ -113,7 +113,7 @@ describe('AuthCodeHandler', () => { kind: 'google-pkce', metadata: {}, target: '/test-target', - isSignUp: false, + type: 'reauth', signer: testWallet, } @@ -247,20 +247,17 @@ describe('AuthCodeHandler', () => { it('Should create auth commitment and return OAuth URL', async () => { const target = '/test-target' - const isSignUp = true - const signer = testWallet - const result = await authCodeHandler.commitAuth(target, isSignUp, undefined, signer) + const result = await authCodeHandler.commitAuth(target, { type: 'auth' }) // Verify commitment was saved expect(mockAuthCommitmentsSet).toHaveBeenCalledOnce() const commitmentCall = mockAuthCommitmentsSet.mock.calls[0]![0]! expect(commitmentCall.kind).toBe('google-pkce') - expect(commitmentCall.signer).toBe(signer) expect(commitmentCall.target).toBe(target) expect(commitmentCall.metadata).toEqual({}) - expect(commitmentCall.isSignUp).toBe(isSignUp) + expect(commitmentCall.type).toBe('auth') expect(commitmentCall.id).toBeDefined() expect(typeof commitmentCall.id).toBe('string') @@ -276,7 +273,11 @@ describe('AuthCodeHandler', () => { it('Should use provided state parameter', async () => { const customState = 'custom-state-123' - const result = await authCodeHandler.commitAuth('/target', false, customState) + const result = await authCodeHandler.commitAuth('/target', { + type: 'reauth', + state: customState, + signer: testWallet, + }) // Verify commitment uses custom state const commitmentCall = mockAuthCommitmentsSet.mock.calls[0]![0]! @@ -285,7 +286,7 @@ describe('AuthCodeHandler', () => { }) it('Should generate random state when not provided', async () => { - await authCodeHandler.commitAuth('/target', false) + await authCodeHandler.commitAuth('/target', { type: 'auth' }) const commitmentCall = mockAuthCommitmentsSet.mock.calls[0]![0]! expect(commitmentCall.id).toBeDefined() expect(typeof commitmentCall.id).toBe('string') @@ -306,7 +307,7 @@ describe('AuthCodeHandler', () => { ) appleHandler.setRedirectUri('https://example.com/callback') - const result = await appleHandler.commitAuth('/target', false) + const result = await appleHandler.commitAuth('/target', { type: 'auth' }) expect(result).toContain('https://appleid.apple.com/auth/authorize?') expect(result).toContain('client_id=apple-client-id') @@ -315,10 +316,10 @@ describe('AuthCodeHandler', () => { }) it('Should create commitment without signer', async () => { - await authCodeHandler.commitAuth('/target', true) + await authCodeHandler.commitAuth('/target', { type: 'auth' }) const commitmentCall = mockAuthCommitmentsSet.mock.calls[0]![0]! expect(commitmentCall.signer).toBeUndefined() - expect(commitmentCall.isSignUp).toBe(true) + expect(commitmentCall.type).toBe('auth') }) }) @@ -492,7 +493,7 @@ describe('AuthCodeHandler', () => { const commitmentCall = mockAuthCommitmentsSet.mock.calls[0]![0]! expect(commitmentCall.target).toBe(window.location.pathname) - expect(commitmentCall.isSignUp).toBe(false) + expect(commitmentCall.type).toBe('reauth') expect(commitmentCall.signer).toBe(testWallet) }) }) @@ -654,7 +655,7 @@ describe('AuthCodeHandler', () => { it('Should handle auth commitments database errors', async () => { mockAuthCommitmentsSet.mockRejectedValueOnce(new Error('Database error')) - await expect(authCodeHandler.commitAuth('/target', false)).rejects.toThrow('Database error') + await expect(authCodeHandler.commitAuth('/target', { type: 'auth' })).rejects.toThrow('Database error') }) it('Should handle auth keys database errors', async () => { @@ -671,7 +672,11 @@ describe('AuthCodeHandler', () => { authCodeHandler.setRedirectUri('https://example.com/callback') // Step 1: Commit auth - const commitUrl = await authCodeHandler.commitAuth('/test-target', false, 'test-state', testWallet) + const commitUrl = await authCodeHandler.commitAuth('/test-target', { + type: 'reauth', + state: 'test-state', + signer: testWallet, + }) expect(commitUrl).toContain('state=test-state') expect(mockAuthCommitmentsSet).toHaveBeenCalledWith( @@ -679,7 +684,7 @@ describe('AuthCodeHandler', () => { id: 'test-state', kind: 'google-pkce', target: '/test-target', - isSignUp: false, + type: 'reauth', signer: testWallet, }), ) @@ -709,17 +714,17 @@ describe('AuthCodeHandler', () => { authCodeHandler.setRedirectUri('https://example.com/callback') // Test signup flow - await authCodeHandler.commitAuth('/signup-target', true, 'signup-state') + await authCodeHandler.commitAuth('/signup-target', { type: 'auth', state: 'signup-state' }) const signupCall = mockAuthCommitmentsSet.mock.calls[0]![0]! - expect(signupCall.isSignUp).toBe(true) + expect(signupCall.type).toBe('auth') expect(signupCall.target).toBe('/signup-target') // Test login flow - await authCodeHandler.commitAuth('/login-target', false, 'login-state') + await authCodeHandler.commitAuth('/login-target', { type: 'reauth', state: 'login-state', signer: testWallet }) const loginCall = mockAuthCommitmentsSet.mock.calls[1]![0]! - expect(loginCall.isSignUp).toBe(false) + expect(loginCall.type).toBe('reauth') expect(loginCall.target).toBe('/login-target') }) }) diff --git a/packages/wallet/wdk/test/identity-auth-dbs.test.ts b/packages/wallet/wdk/test/identity-auth-dbs.test.ts index 4062e0c269..bba408ef36 100644 --- a/packages/wallet/wdk/test/identity-auth-dbs.test.ts +++ b/packages/wallet/wdk/test/identity-auth-dbs.test.ts @@ -34,7 +34,7 @@ describe('Identity Authentication Databases', () => { verifier: 'test-verifier-code', challenge: 'test-challenge-hash', target: 'test-target-url', - isSignUp: true, + type: 'reauth', signer: '0x1234567890123456789012345678901234567890', } @@ -66,7 +66,7 @@ describe('Identity Authentication Databases', () => { response_mode: 'form_post', }, target: 'apple-redirect-url', - isSignUp: false, + type: 'auth', } await authCommitmentsDb.set(appleCommitment) @@ -74,7 +74,7 @@ describe('Identity Authentication Databases', () => { expect(retrieved).toBeDefined() expect(retrieved!.kind).toBe('apple') - expect(retrieved!.isSignUp).toBe(false) + expect(retrieved!.type).toBe('auth') expect(retrieved!.metadata.response_type).toBe('code id_token') }) @@ -85,21 +85,22 @@ describe('Identity Authentication Databases', () => { kind: 'google-pkce', metadata: {}, target: 'target-1', - isSignUp: true, + type: 'auth', }, { id: 'commit-2', kind: 'apple', metadata: {}, target: 'target-2', - isSignUp: false, + type: 'reauth', + signer: '0x1234567890123456789012345678901234567890', }, { id: 'commit-3', kind: 'google-pkce', metadata: {}, target: 'target-3', - isSignUp: true, + type: 'auth', }, ] @@ -129,7 +130,7 @@ describe('Identity Authentication Databases', () => { kind: 'google-pkce', metadata: {}, target: 'init-target', - isSignUp: true, + type: 'auth', } await freshDb.set(testCommitment) diff --git a/packages/wallet/wdk/test/wallets.test.ts b/packages/wallet/wdk/test/wallets.test.ts index f97b3bf928..d686ac257d 100644 --- a/packages/wallet/wdk/test/wallets.test.ts +++ b/packages/wallet/wdk/test/wallets.test.ts @@ -160,7 +160,7 @@ describe('Wallets', () => { }) expect(url).toBe('https://accounts.google.com/o/oauth2/v2/auth?state=test-state') - expect(commitAuthSpy).toHaveBeenCalledWith('/auth/return', true) + expect(commitAuthSpy).toHaveBeenCalledWith('/auth/return', { type: 'auth' }) }) it('Should reject google-id-token signup when Google is configured for redirect auth', async () => { From a204a0a0833521963b569da2bc0cc7516eda67ae Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 19 Mar 2026 18:20:11 +0100 Subject: [PATCH 14/43] 3.0.5 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 918bad822a..de944ea36e 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 451ef58d06..8d2f87a228 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.4", + "version": "3.0.5", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index 2643797ce3..e458893450 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index ffc88e2466..1897f0ab87 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.4", + "version": "3.0.5", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index f1d8b7552e..a705f48ba3 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 84d0bc3deb..fc489cd03c 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.4", + "version": "3.0.5", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index a266bf8021..ff6cebf477 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index ddb68338bd..bb61d8e20c 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.4", + "version": "3.0.5", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index ac5f89be5a..fb104e35fb 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 7b2b6c2fbe..7ad0de895c 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.4", + "version": "3.0.5", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 359c4e344e..5a97b94e85 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 213124ae89..865e0e5b44 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.4", + "version": "3.0.5", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index f194e094f6..3362b424e0 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index 460686f756..acb19b042c 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.4", + "version": "3.0.5", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index c781762ac5..abefb99b79 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.5 + +### Patch Changes + +- Account federation support +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.5 + ## 3.0.4 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 6d5f306e06..0c1422d970 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.4", + "version": "3.0.5", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 3d914bb900..51ebad4131 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 73cee886ff..38f3c9d5a8 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.4", + "version": "3.0.5", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index 4a755c767f..8194c38b89 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index dfb4d80c39..d70d75cdc6 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.4", + "version": "3.0.5", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index d952d05be7..23fc45fe44 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.5 + +### Patch Changes + +- Account federation support +- Updated dependencies + - @0xsequence/guard@3.0.5 + - @0xsequence/relayer@3.0.5 + - @0xsequence/wallet-primitives@3.0.5 + ## 3.0.4 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 056f84a65c..4133157861 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.4", + "version": "3.0.5", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index 3beac386c7..2039d0c2d2 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.5 + +### Patch Changes + +- Account federation support +- Updated dependencies + - @0xsequence/guard@3.0.5 + - @0xsequence/relayer@3.0.5 + - @0xsequence/wallet-core@3.0.5 + - @0xsequence/wallet-primitives@3.0.5 + ## 3.0.4 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 2b6c069f9f..457e7ec283 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.4", + "version": "3.0.5", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index cc25319ad4..7e5a4cdbf7 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.5 + +### Patch Changes + +- Account federation support + ## 3.0.4 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index 2fc8c4c470..e0e283de61 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.4", + "version": "3.0.5", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index c4b6b370af..5101c28c5a 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.5 + +### Patch Changes + +- Account federation support +- Updated dependencies + - @0xsequence/guard@3.0.5 + - @0xsequence/identity-instrument@3.0.5 + - @0xsequence/relayer@3.0.5 + - @0xsequence/wallet-core@3.0.5 + - @0xsequence/wallet-primitives@3.0.5 + ## 3.0.4 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index b08a0cfc9f..772faa9aad 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.4", + "version": "3.0.5", "license": "Apache-2.0", "type": "module", "publishConfig": { From a04b263489624df69d47584064f586d3bdbeea8a Mon Sep 17 00:00:00 2001 From: Ocheretovich Date: Fri, 27 Mar 2026 15:22:32 +0200 Subject: [PATCH 15/43] chore: fixed broken link (#985) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4c663ccf86..ae41ffdbd5 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Sequence v3 core libraries and [wallet-contracts-v3](https://github.com/0xsequen - Run tests: `pnpm test` - > **Note:** Tests require [anvil](https://github.com/foundry-rs/foundry/tree/master/anvil) and [forge](https://github.com/foundry-rs/foundry) to be installed. You can run a local anvil instance using `pnpm run test:anvil`. + > **Note:** Tests require [anvil](https://github.com/foundry-rs/foundry/tree/master/crates/anvil) and [forge](https://github.com/foundry-rs/foundry) to be installed. You can run a local anvil instance using `pnpm run test:anvil`. - Linting and formatting is enforced via git hooks From 8388bca61e25134863585aff4e8dbdd9402df3e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:23:00 +0100 Subject: [PATCH 16/43] Bump happy-dom from 20.7.0 to 20.8.8 (#984) Bumps [happy-dom](https://github.com/capricorn86/happy-dom) from 20.7.0 to 20.8.8. - [Release notes](https://github.com/capricorn86/happy-dom/releases) - [Commits](https://github.com/capricorn86/happy-dom/compare/v20.7.0...v20.8.8) --- updated-dependencies: - dependency-name: happy-dom dependency-version: 20.8.8 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/wallet/dapp-client/package.json | 2 +- packages/wallet/wdk/package.json | 2 +- pnpm-lock.yaml | 129 ++++++++++++++++++----- 3 files changed, 105 insertions(+), 28 deletions(-) diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 457e7ec283..57e4a78254 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -27,7 +27,7 @@ "@vitest/coverage-v8": "^4.0.18", "dotenv": "^17.3.1", "fake-indexeddb": "^6.2.5", - "happy-dom": "^20.7.0", + "happy-dom": "^20.8.8", "typescript": "^5.9.3", "vitest": "^4.0.18" }, diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 772faa9aad..23ae11cc8b 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -30,7 +30,7 @@ "@vitest/coverage-v8": "^4.0.18", "dotenv": "^17.3.1", "fake-indexeddb": "^6.2.5", - "happy-dom": "^20.7.0", + "happy-dom": "^20.8.8", "typescript": "^5.9.3", "vitest": "^4.0.18" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f3a0e98430..961a474af8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -157,7 +157,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) packages/services/identity-instrument: dependencies: @@ -185,7 +185,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) packages/services/indexer: devDependencies: @@ -261,7 +261,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) packages/services/userdata: devDependencies: @@ -325,7 +325,7 @@ importers: version: 25.3.0 '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)) + version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8)) dotenv: specifier: ^17.3.1 version: 17.3.1 @@ -337,7 +337,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) packages/wallet/dapp-client: dependencies: @@ -368,7 +368,7 @@ importers: version: 25.3.0 '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)) + version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8)) dotenv: specifier: ^17.3.1 version: 17.3.1 @@ -376,14 +376,14 @@ importers: specifier: ^6.2.5 version: 6.2.5 happy-dom: - specifier: ^20.7.0 - version: 20.7.0 + specifier: ^20.8.8 + version: 20.8.8 typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) packages/wallet/primitives: dependencies: @@ -399,13 +399,13 @@ importers: version: link:../../../repo/typescript-config '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)) + version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8)) typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) packages/wallet/primitives-cli: dependencies: @@ -488,7 +488,7 @@ importers: version: 25.3.0 '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0)) + version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8)) dotenv: specifier: ^17.3.1 version: 17.3.1 @@ -496,14 +496,14 @@ importers: specifier: ^6.2.5 version: 6.2.5 happy-dom: - specifier: ^20.7.0 - version: 20.7.0 + specifier: ^20.8.8 + version: 20.8.8 typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) repo/eslint-config: devDependencies: @@ -530,7 +530,7 @@ importers: version: 7.0.1(eslint@9.39.2) eslint-plugin-turbo: specifier: ^2.6.3 - version: 2.6.3(eslint@9.39.2)(turbo@2.8.10) + version: 2.6.3(eslint@9.39.2)(turbo@2.8.20) globals: specifier: ^16.5.0 version: 16.5.0 @@ -1326,10 +1326,40 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + '@turbo/darwin-64@2.8.20': + resolution: {integrity: sha512-FQ9EX1xMU5nbwjxXxM3yU88AQQ6Sqc6S44exPRroMcx9XZHqqppl5ymJF0Ig/z3nvQNwDmz1Gsnvxubo+nXWjQ==} + cpu: [x64] + os: [darwin] + + '@turbo/darwin-arm64@2.8.20': + resolution: {integrity: sha512-Gpyh9ATFGThD6/s9L95YWY54cizg/VRWl2B67h0yofG8BpHf67DFAh9nuJVKG7bY0+SBJDAo5cMur+wOl9YOYw==} + cpu: [arm64] + os: [darwin] + '@turbo/gen@1.13.4': resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true + '@turbo/linux-64@2.8.20': + resolution: {integrity: sha512-p2QxWUYyYUgUFG0b0kR+pPi8t7c9uaVlRtjTTI1AbCvVqkpjUfCcReBn6DgG/Hu8xrWdKLuyQFaLYFzQskZbcA==} + cpu: [x64] + os: [linux] + + '@turbo/linux-arm64@2.8.20': + resolution: {integrity: sha512-Gn5yjlZGLRZWarLWqdQzv0wMqyBNIdq1QLi48F1oY5Lo9kiohuf7BPQWtWxeNVS2NgJ1+nb/DzK1JduYC4AWOA==} + cpu: [arm64] + os: [linux] + + '@turbo/windows-64@2.8.20': + resolution: {integrity: sha512-vyaDpYk/8T6Qz5V/X+ihKvKFEZFUoC0oxYpC1sZanK6gaESJlmV3cMRT3Qhcg4D2VxvtC2Jjs9IRkrZGL+exLw==} + cpu: [x64] + os: [win32] + + '@turbo/windows-arm64@2.8.20': + resolution: {integrity: sha512-voicVULvUV5yaGXo0Iue13BcHGYW3u0VgqSbfQwBaHbpj1zLjYV4KIe+7fYIo6DO8FVUJzxFps3ODCQG/Wy2Qw==} + cpu: [arm64] + os: [win32] + '@turbo/workspaces@1.13.4': resolution: {integrity: sha512-3uYg2b5TWCiupetbDFMbBFMHl33xQTvp5DNg0fZSYal73Z9AlFH9yWabHWMYw6ywmwM1evkYRpTVA2n7GgqT5A==} hasBin: true @@ -1645,6 +1675,7 @@ packages: basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} + deprecated: Security vulnerability fixed in 5.2.0, please upgrade better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} @@ -2255,8 +2286,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.7.0: - resolution: {integrity: sha512-hR/uLYQdngTyEfxnOoa+e6KTcfBFyc1hgFj/Cc144A5JJUuHFYqIEBDcD4FeGqUeKLRZqJ9eN9u7/GDjYEgS1g==} + happy-dom@20.8.8: + resolution: {integrity: sha512-5/F8wxkNxYtsN0bXfMwIyNLZ9WYsoOYPbmoluqVJqv8KBUbcyKZawJ7uYK4WTX8IHBLYv+VXIwfeNDPy1oKMwQ==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -3444,6 +3475,7 @@ packages: syncpack@14.0.0: resolution: {integrity: sha512-OfAa3Oip5YC9Ad1jEs92Hw08Wy4JfdpdeequIwaJGsQG0tJtb8gpQfCdLuBefsk6n8WiUdt/5qmzcW+BDXtzbQ==} engines: {node: '>=14.17.0'} + deprecated: 'pnpm users: upgrade to 14.0.2 or newer' hasBin: true term-size@2.2.1: @@ -3553,6 +3585,10 @@ packages: resolution: {integrity: sha512-OxbzDES66+x7nnKGg2MwBA1ypVsZoDTLHpeaP4giyiHSixbsiTaMyeJqbEyvBdp5Cm28fc+8GG6RdQtic0ijwQ==} hasBin: true + turbo@2.8.20: + resolution: {integrity: sha512-Rb4qk5YT8RUwwdXtkLpkVhNEe/lor6+WV7S5tTlLpxSz6MjV5Qi8jGNn4gS6NAvrYGA/rNrE6YUQM85sCZUDbQ==} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -3793,6 +3829,18 @@ packages: utf-8-validate: optional: true + ws@8.20.0: + resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -4529,6 +4577,12 @@ snapshots: '@tsconfig/node16@1.0.4': {} + '@turbo/darwin-64@2.8.20': + optional: true + + '@turbo/darwin-arm64@2.8.20': + optional: true + '@turbo/gen@1.13.4(@types/node@25.3.0)(typescript@5.9.3)': dependencies: '@turbo/workspaces': 1.13.4(@types/node@25.3.0) @@ -4549,6 +4603,18 @@ snapshots: - supports-color - typescript + '@turbo/linux-64@2.8.20': + optional: true + + '@turbo/linux-arm64@2.8.20': + optional: true + + '@turbo/windows-64@2.8.20': + optional: true + + '@turbo/windows-arm64@2.8.20': + optional: true + '@turbo/workspaces@1.13.4(@types/node@25.3.0)': dependencies: chalk: 2.4.2 @@ -4714,7 +4780,7 @@ snapshots: '@typescript-eslint/types': 8.50.0 eslint-visitor-keys: 4.2.1 - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -4726,7 +4792,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@25.3.0)(happy-dom@20.7.0) + vitest: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) '@vitest/expect@4.0.18': dependencies: @@ -5416,11 +5482,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.8.10): + eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.8.20): dependencies: dotenv: 16.0.3 eslint: 9.39.2 - turbo: 2.8.10 + turbo: 2.8.20 eslint-scope@8.4.0: dependencies: @@ -5731,14 +5797,14 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.7.0: + happy-dom@20.8.8: dependencies: '@types/node': 25.3.0 '@types/whatwg-mimetype': 3.0.2 '@types/ws': 8.18.1 entities: 7.0.1 whatwg-mimetype: 3.0.0 - ws: 8.18.3 + ws: 8.20.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -7119,6 +7185,15 @@ snapshots: turbo-windows-64: 2.8.10 turbo-windows-arm64: 2.8.10 + turbo@2.8.20: + optionalDependencies: + '@turbo/darwin-64': 2.8.20 + '@turbo/darwin-arm64': 2.8.20 + '@turbo/linux-64': 2.8.20 + '@turbo/linux-arm64': 2.8.20 + '@turbo/windows-64': 2.8.20 + '@turbo/windows-arm64': 2.8.20 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -7247,7 +7322,7 @@ snapshots: '@types/node': 25.3.0 fsevents: 2.3.3 - vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.7.0): + vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8): dependencies: '@vitest/expect': 4.0.18 '@vitest/mocker': 4.0.18(vite@7.3.0(@types/node@25.3.0)) @@ -7271,7 +7346,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.3.0 - happy-dom: 20.7.0 + happy-dom: 20.8.8 transitivePeerDependencies: - jiti - less @@ -7367,6 +7442,8 @@ snapshots: ws@8.18.3: {} + ws@8.20.0: {} + y18n@5.0.8: {} yallist@3.1.1: {} From 2bbf0d22ed62c792adedd6a0b5088ee0369f08de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:23:21 +0100 Subject: [PATCH 17/43] Bump next from 15.5.10 to 15.5.14 (#982) Bumps [next](https://github.com/vercel/next.js) from 15.5.10 to 15.5.14. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v15.5.10...v15.5.14) --- updated-dependencies: - dependency-name: next dependency-version: 15.5.14 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- extras/docs/package.json | 2 +- extras/web/package.json | 2 +- pnpm-lock.yaml | 120 +++++++++++++++++++-------------------- 3 files changed, 62 insertions(+), 62 deletions(-) diff --git a/extras/docs/package.json b/extras/docs/package.json index 9c51ce6c11..ccf8cc5bbf 100644 --- a/extras/docs/package.json +++ b/extras/docs/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@repo/ui": "workspace:^", - "next": "^15.5.10", + "next": "^15.5.14", "react": "^19.2.3", "react-dom": "^19.2.3" }, diff --git a/extras/web/package.json b/extras/web/package.json index e7fd226c08..b8fdea4997 100644 --- a/extras/web/package.json +++ b/extras/web/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@repo/ui": "workspace:^", - "next": "^15.5.10", + "next": "^15.5.14", "react": "^19.2.3", "react-dom": "^19.2.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 961a474af8..6a3864e57a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,8 +39,8 @@ importers: specifier: workspace:^ version: link:../../repo/ui next: - specifier: ^15.5.10 - version: 15.5.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^15.5.14 + version: 15.5.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -76,8 +76,8 @@ importers: specifier: workspace:^ version: link:../../repo/ui next: - specifier: ^15.5.10 - version: 15.5.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^15.5.14 + version: 15.5.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -720,8 +720,8 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/runtime@1.8.1': - resolution: {integrity: sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==} + '@emnapi/runtime@1.9.1': + resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} @@ -933,8 +933,8 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@img/colour@1.0.0': - resolution: {integrity: sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw==} + '@img/colour@1.1.0': + resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} '@img/sharp-darwin-arm64@0.34.5': @@ -1104,56 +1104,56 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@next/env@15.5.10': - resolution: {integrity: sha512-plg+9A/KoZcTS26fe15LHg+QxReTazrIOoKKUC3Uz4leGGeNPgLHdevVraAAOX0snnUs3WkRx3eUQpj9mreG6A==} + '@next/env@15.5.14': + resolution: {integrity: sha512-aXeirLYuASxEgi4X4WhfXsShCFxWDfNn/8ZeC5YXAS2BB4A8FJi1kwwGL6nvMVboE7fZCzmJPNdMvVHc8JpaiA==} '@next/eslint-plugin-next@15.5.9': resolution: {integrity: sha512-kUzXx0iFiXw27cQAViE1yKWnz/nF8JzRmwgMRTMh8qMY90crNsdXJRh2e+R0vBpFR3kk1yvAR7wev7+fCCb79Q==} - '@next/swc-darwin-arm64@15.5.7': - resolution: {integrity: sha512-IZwtxCEpI91HVU/rAUOOobWSZv4P2DeTtNaCdHqLcTJU4wdNXgAySvKa/qJCgR5m6KI8UsKDXtO2B31jcaw1Yw==} + '@next/swc-darwin-arm64@15.5.14': + resolution: {integrity: sha512-Y9K6SPzobnZvrRDPO2s0grgzC+Egf0CqfbdvYmQVaztV890zicw8Z8+4Vqw8oPck8r1TjUHxVh8299Cg4TrxXg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.7': - resolution: {integrity: sha512-UP6CaDBcqaCBuiq/gfCEJw7sPEoX1aIjZHnBWN9v9qYHQdMKvCKcAVs4OX1vIjeE+tC5EIuwDTVIoXpUes29lg==} + '@next/swc-darwin-x64@15.5.14': + resolution: {integrity: sha512-aNnkSMjSFRTOmkd7qoNI2/rETQm/vKD6c/Ac9BZGa9CtoOzy3c2njgz7LvebQJ8iPxdeTuGnAjagyis8a9ifBw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.7': - resolution: {integrity: sha512-NCslw3GrNIw7OgmRBxHtdWFQYhexoUCq+0oS2ccjyYLtcn1SzGzeM54jpTFonIMUjNbHmpKpziXnpxhSWLcmBA==} + '@next/swc-linux-arm64-gnu@15.5.14': + resolution: {integrity: sha512-tjlpia+yStPRS//6sdmlVwuO1Rioern4u2onafa5n+h2hCS9MAvMXqpVbSrjgiEOoCs0nJy7oPOmWgtRRNSM5Q==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.7': - resolution: {integrity: sha512-nfymt+SE5cvtTrG9u1wdoxBr9bVB7mtKTcj0ltRn6gkP/2Nu1zM5ei8rwP9qKQP0Y//umK+TtkKgNtfboBxRrw==} + '@next/swc-linux-arm64-musl@15.5.14': + resolution: {integrity: sha512-8B8cngBaLadl5lbDRdxGCP1Lef8ipD6KlxS3v0ElDAGil6lafrAM3B258p1KJOglInCVFUjk751IXMr2ixeQOQ==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.7': - resolution: {integrity: sha512-hvXcZvCaaEbCZcVzcY7E1uXN9xWZfFvkNHwbe/n4OkRhFWrs1J1QV+4U1BN06tXLdaS4DazEGXwgqnu/VMcmqw==} + '@next/swc-linux-x64-gnu@15.5.14': + resolution: {integrity: sha512-bAS6tIAg8u4Gn3Nz7fCPpSoKAexEt2d5vn1mzokcqdqyov6ZJ6gu6GdF9l8ORFrBuRHgv3go/RfzYz5BkZ6YSQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.7': - resolution: {integrity: sha512-4IUO539b8FmF0odY6/SqANJdgwn1xs1GkPO5doZugwZ3ETF6JUdckk7RGmsfSf7ws8Qb2YB5It33mvNL/0acqA==} + '@next/swc-linux-x64-musl@15.5.14': + resolution: {integrity: sha512-mMxv/FcrT7Gfaq4tsR22l17oKWXZmH/lVqcvjX0kfp5I0lKodHYLICKPoX1KRnnE+ci6oIUdriUhuA3rBCDiSw==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.7': - resolution: {integrity: sha512-CpJVTkYI3ZajQkC5vajM7/ApKJUOlm6uP4BknM3XKvJ7VXAvCqSjSLmM0LKdYzn6nBJVSjdclx8nYJSa3xlTgQ==} + '@next/swc-win32-arm64-msvc@15.5.14': + resolution: {integrity: sha512-OTmiBlYThppnvnsqx0rBqjDRemlmIeZ8/o4zI7veaXoeO1PVHoyj2lfTfXTiiGjCyRDhA10y4h6ZvZvBiynr2g==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.7': - resolution: {integrity: sha512-gMzgBX164I6DN+9/PGA+9dQiwmTkE4TloBNx8Kv9UiGARsr9Nba7IpcBRA1iTV9vwlYnrE3Uy6I7Aj6qLjQuqw==} + '@next/swc-win32-x64-msvc@15.5.14': + resolution: {integrity: sha512-+W7eFf3RS7m4G6tppVTOSyP9Y6FsJXfOuKzav1qKniiFm3KFByQfPEcouHdjlZmysl4zJGuGLQ/M9XyVeyeNEg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1733,8 +1733,8 @@ packages: camel-case@3.0.0: resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} - caniuse-lite@1.0.30001769: - resolution: {integrity: sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==} + caniuse-lite@1.0.30001781: + resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} cbor2@1.12.0: resolution: {integrity: sha512-3Cco8XQhi27DogSp9Ri6LYNZLi/TBY/JVnDe+mj06NkBjW/ZYOtekaEU4wZ4xcRMNrFkDv8KNtOAqHyDfz3lYg==} @@ -2833,8 +2833,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next@15.5.10: - resolution: {integrity: sha512-r0X65PNwyDDyOrWNKpQoZvOatw7BcsTPRKdwEqtc9cj3wv7mbBIk9tKed4klRaFXJdX0rugpuMTHslDrAU1bBg==} + next@15.5.14: + resolution: {integrity: sha512-M6S+4JyRjmKic2Ssm7jHUPkE6YUJ6lv4507jprsSZLulubz0ihO2E+S4zmQK3JZ2ov81JrugukKU4Tz0ivgqqQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -3058,8 +3058,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.6: - resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + postcss@8.5.8: + resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -4146,7 +4146,7 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/runtime@1.8.1': + '@emnapi/runtime@1.9.1': dependencies: tslib: 2.8.1 optional: true @@ -4286,7 +4286,7 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} - '@img/colour@1.0.0': + '@img/colour@1.1.0': optional: true '@img/sharp-darwin-arm64@0.34.5': @@ -4371,7 +4371,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.8.1 + '@emnapi/runtime': 1.9.1 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -4430,34 +4430,34 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@next/env@15.5.10': {} + '@next/env@15.5.14': {} '@next/eslint-plugin-next@15.5.9': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.7': + '@next/swc-darwin-arm64@15.5.14': optional: true - '@next/swc-darwin-x64@15.5.7': + '@next/swc-darwin-x64@15.5.14': optional: true - '@next/swc-linux-arm64-gnu@15.5.7': + '@next/swc-linux-arm64-gnu@15.5.14': optional: true - '@next/swc-linux-arm64-musl@15.5.7': + '@next/swc-linux-arm64-musl@15.5.14': optional: true - '@next/swc-linux-x64-gnu@15.5.7': + '@next/swc-linux-x64-gnu@15.5.14': optional: true - '@next/swc-linux-x64-musl@15.5.7': + '@next/swc-linux-x64-musl@15.5.14': optional: true - '@next/swc-win32-arm64-msvc@15.5.7': + '@next/swc-win32-arm64-msvc@15.5.14': optional: true - '@next/swc-win32-x64-msvc@15.5.7': + '@next/swc-win32-x64-msvc@15.5.14': optional: true '@noble/ciphers@1.3.0': {} @@ -5025,7 +5025,7 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.7 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001781 electron-to-chromium: 1.5.267 node-releases: 2.0.27 update-browserslist-db: 1.2.2(browserslist@4.28.1) @@ -5061,7 +5061,7 @@ snapshots: no-case: 2.3.2 upper-case: 1.1.3 - caniuse-lite@1.0.30001769: {} + caniuse-lite@1.0.30001781: {} cbor2@1.12.0: {} @@ -6320,24 +6320,24 @@ snapshots: netmask@2.0.2: {} - next@15.5.10(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@15.5.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - '@next/env': 15.5.10 + '@next/env': 15.5.14 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001769 + caniuse-lite: 1.0.30001781 postcss: 8.4.31 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) styled-jsx: 5.1.6(react@19.2.3) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.7 - '@next/swc-darwin-x64': 15.5.7 - '@next/swc-linux-arm64-gnu': 15.5.7 - '@next/swc-linux-arm64-musl': 15.5.7 - '@next/swc-linux-x64-gnu': 15.5.7 - '@next/swc-linux-x64-musl': 15.5.7 - '@next/swc-win32-arm64-msvc': 15.5.7 - '@next/swc-win32-x64-msvc': 15.5.7 + '@next/swc-darwin-arm64': 15.5.14 + '@next/swc-darwin-x64': 15.5.14 + '@next/swc-linux-arm64-gnu': 15.5.14 + '@next/swc-linux-arm64-musl': 15.5.14 + '@next/swc-linux-x64-gnu': 15.5.14 + '@next/swc-linux-x64-musl': 15.5.14 + '@next/swc-win32-arm64-msvc': 15.5.14 + '@next/swc-win32-x64-msvc': 15.5.14 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -6596,7 +6596,7 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.6: + postcss@8.5.8: dependencies: nanoid: 3.3.11 picocolors: 1.1.1 @@ -6841,7 +6841,7 @@ snapshots: sharp@0.34.5: dependencies: - '@img/colour': 1.0.0 + '@img/colour': 1.1.0 detect-libc: 2.1.2 semver: 7.7.4 optionalDependencies: @@ -7315,7 +7315,7 @@ snapshots: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.6 + postcss: 8.5.8 rollup: 4.53.4 tinyglobby: 0.2.15 optionalDependencies: From 9c37410a85bfbf79dfccb5248837a5d5f586dbf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 29 Mar 2026 22:03:32 +0200 Subject: [PATCH 18/43] Bump happy-dom from 20.8.8 to 20.8.9 (#987) Bumps [happy-dom](https://github.com/capricorn86/happy-dom) from 20.8.8 to 20.8.9. - [Release notes](https://github.com/capricorn86/happy-dom/releases) - [Commits](https://github.com/capricorn86/happy-dom/compare/v20.8.8...v20.8.9) --- updated-dependencies: - dependency-name: happy-dom dependency-version: 20.8.9 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- packages/wallet/dapp-client/package.json | 2 +- packages/wallet/wdk/package.json | 2 +- pnpm-lock.yaml | 104 +++++++++++------------ 3 files changed, 54 insertions(+), 54 deletions(-) diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 57e4a78254..7ed1867e74 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -27,7 +27,7 @@ "@vitest/coverage-v8": "^4.0.18", "dotenv": "^17.3.1", "fake-indexeddb": "^6.2.5", - "happy-dom": "^20.8.8", + "happy-dom": "^20.8.9", "typescript": "^5.9.3", "vitest": "^4.0.18" }, diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 23ae11cc8b..2d62c27953 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -30,7 +30,7 @@ "@vitest/coverage-v8": "^4.0.18", "dotenv": "^17.3.1", "fake-indexeddb": "^6.2.5", - "happy-dom": "^20.8.8", + "happy-dom": "^20.8.9", "typescript": "^5.9.3", "vitest": "^4.0.18" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6a3864e57a..54ad63e327 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -157,7 +157,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) packages/services/identity-instrument: dependencies: @@ -185,7 +185,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) packages/services/indexer: devDependencies: @@ -261,7 +261,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) packages/services/userdata: devDependencies: @@ -325,7 +325,7 @@ importers: version: 25.3.0 '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8)) + version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.9)) dotenv: specifier: ^17.3.1 version: 17.3.1 @@ -337,7 +337,7 @@ importers: version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) packages/wallet/dapp-client: dependencies: @@ -368,7 +368,7 @@ importers: version: 25.3.0 '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8)) + version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.9)) dotenv: specifier: ^17.3.1 version: 17.3.1 @@ -376,14 +376,14 @@ importers: specifier: ^6.2.5 version: 6.2.5 happy-dom: - specifier: ^20.8.8 - version: 20.8.8 + specifier: ^20.8.9 + version: 20.8.9 typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) packages/wallet/primitives: dependencies: @@ -399,13 +399,13 @@ importers: version: link:../../../repo/typescript-config '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8)) + version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.9)) typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) packages/wallet/primitives-cli: dependencies: @@ -488,7 +488,7 @@ importers: version: 25.3.0 '@vitest/coverage-v8': specifier: ^4.0.18 - version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8)) + version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.9)) dotenv: specifier: ^17.3.1 version: 17.3.1 @@ -496,14 +496,14 @@ importers: specifier: ^6.2.5 version: 6.2.5 happy-dom: - specifier: ^20.8.8 - version: 20.8.8 + specifier: ^20.8.9 + version: 20.8.9 typescript: specifier: ^5.9.3 version: 5.9.3 vitest: specifier: ^4.0.18 - version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) + version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) repo/eslint-config: devDependencies: @@ -530,7 +530,7 @@ importers: version: 7.0.1(eslint@9.39.2) eslint-plugin-turbo: specifier: ^2.6.3 - version: 2.6.3(eslint@9.39.2)(turbo@2.8.20) + version: 2.6.3(eslint@9.39.2)(turbo@2.8.21) globals: specifier: ^16.5.0 version: 16.5.0 @@ -1326,13 +1326,13 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@turbo/darwin-64@2.8.20': - resolution: {integrity: sha512-FQ9EX1xMU5nbwjxXxM3yU88AQQ6Sqc6S44exPRroMcx9XZHqqppl5ymJF0Ig/z3nvQNwDmz1Gsnvxubo+nXWjQ==} + '@turbo/darwin-64@2.8.21': + resolution: {integrity: sha512-kfGoM0Iw8ZNZpbds+4IzOe0hjvHldqJwUPRAjXJi3KBxg/QOZL95N893SRoMtf2aJ+jJ3dk32yPkp8rvcIjP9g==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.8.20': - resolution: {integrity: sha512-Gpyh9ATFGThD6/s9L95YWY54cizg/VRWl2B67h0yofG8BpHf67DFAh9nuJVKG7bY0+SBJDAo5cMur+wOl9YOYw==} + '@turbo/darwin-arm64@2.8.21': + resolution: {integrity: sha512-o9HEflxUEyr987x0cTUzZBhDOyL6u95JmdmlkH2VyxAw7zq2sdtM5e72y9ufv2N5SIoOBw1fVn9UES5VY5H6vQ==} cpu: [arm64] os: [darwin] @@ -1340,23 +1340,23 @@ packages: resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true - '@turbo/linux-64@2.8.20': - resolution: {integrity: sha512-p2QxWUYyYUgUFG0b0kR+pPi8t7c9uaVlRtjTTI1AbCvVqkpjUfCcReBn6DgG/Hu8xrWdKLuyQFaLYFzQskZbcA==} + '@turbo/linux-64@2.8.21': + resolution: {integrity: sha512-uTxlCcXWy5h1fSSymP8XSJ+AudzEHMDV3IDfKX7+DGB8kgJ+SLoTUAH7z4OFA7I/l2sznz0upPdbNNZs91YMag==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.8.20': - resolution: {integrity: sha512-Gn5yjlZGLRZWarLWqdQzv0wMqyBNIdq1QLi48F1oY5Lo9kiohuf7BPQWtWxeNVS2NgJ1+nb/DzK1JduYC4AWOA==} + '@turbo/linux-arm64@2.8.21': + resolution: {integrity: sha512-cdHIcxNcihHHkCHp0Y4Zb60K4Qz+CK4xw1gb6s/t/9o4SMeMj+hTBCtoW6QpPnl9xPYmxuTou8Zw6+cylTnREg==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.8.20': - resolution: {integrity: sha512-vyaDpYk/8T6Qz5V/X+ihKvKFEZFUoC0oxYpC1sZanK6gaESJlmV3cMRT3Qhcg4D2VxvtC2Jjs9IRkrZGL+exLw==} + '@turbo/windows-64@2.8.21': + resolution: {integrity: sha512-/iBj4OzbqEY8CX+eaeKbBTMZv2CLXNrt0692F7HnK7LcyYwyDecaAiSET6ZzL4opT7sbwkKvzAC/fhqT3Quu1A==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.8.20': - resolution: {integrity: sha512-voicVULvUV5yaGXo0Iue13BcHGYW3u0VgqSbfQwBaHbpj1zLjYV4KIe+7fYIo6DO8FVUJzxFps3ODCQG/Wy2Qw==} + '@turbo/windows-arm64@2.8.21': + resolution: {integrity: sha512-95tMA/ZbIidJFUUtkmqioQ1gf3n3I1YbRP3ZgVdWTVn2qVbkodcIdGXBKRHHrIbRsLRl99SiHi/L7IxhpZDagQ==} cpu: [arm64] os: [win32] @@ -2286,8 +2286,8 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - happy-dom@20.8.8: - resolution: {integrity: sha512-5/F8wxkNxYtsN0bXfMwIyNLZ9WYsoOYPbmoluqVJqv8KBUbcyKZawJ7uYK4WTX8IHBLYv+VXIwfeNDPy1oKMwQ==} + happy-dom@20.8.9: + resolution: {integrity: sha512-Tz23LR9T9jOGVZm2x1EPdXqwA37G/owYMxRwU0E4miurAtFsPMQ1d2Jc2okUaSjZqAFz2oEn3FLXC5a0a+siyA==} engines: {node: '>=20.0.0'} has-bigints@1.1.0: @@ -3585,8 +3585,8 @@ packages: resolution: {integrity: sha512-OxbzDES66+x7nnKGg2MwBA1ypVsZoDTLHpeaP4giyiHSixbsiTaMyeJqbEyvBdp5Cm28fc+8GG6RdQtic0ijwQ==} hasBin: true - turbo@2.8.20: - resolution: {integrity: sha512-Rb4qk5YT8RUwwdXtkLpkVhNEe/lor6+WV7S5tTlLpxSz6MjV5Qi8jGNn4gS6NAvrYGA/rNrE6YUQM85sCZUDbQ==} + turbo@2.8.21: + resolution: {integrity: sha512-FlJ8OD5Qcp0jTAM7E4a/RhUzRNds2GzKlyxHKA6N247VLy628rrxAGlMpIXSz6VB430+TiQDJ/SMl6PL1lu6wQ==} hasBin: true type-check@0.4.0: @@ -4577,10 +4577,10 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@turbo/darwin-64@2.8.20': + '@turbo/darwin-64@2.8.21': optional: true - '@turbo/darwin-arm64@2.8.20': + '@turbo/darwin-arm64@2.8.21': optional: true '@turbo/gen@1.13.4(@types/node@25.3.0)(typescript@5.9.3)': @@ -4603,16 +4603,16 @@ snapshots: - supports-color - typescript - '@turbo/linux-64@2.8.20': + '@turbo/linux-64@2.8.21': optional: true - '@turbo/linux-arm64@2.8.20': + '@turbo/linux-arm64@2.8.21': optional: true - '@turbo/windows-64@2.8.20': + '@turbo/windows-64@2.8.21': optional: true - '@turbo/windows-arm64@2.8.20': + '@turbo/windows-arm64@2.8.21': optional: true '@turbo/workspaces@1.13.4(@types/node@25.3.0)': @@ -4780,7 +4780,7 @@ snapshots: '@typescript-eslint/types': 8.50.0 eslint-visitor-keys: 4.2.1 - '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8))': + '@vitest/coverage-v8@4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.9))': dependencies: '@bcoe/v8-coverage': 1.0.2 '@vitest/utils': 4.0.18 @@ -4792,7 +4792,7 @@ snapshots: obug: 2.1.1 std-env: 3.10.0 tinyrainbow: 3.0.3 - vitest: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.8) + vitest: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) '@vitest/expect@4.0.18': dependencies: @@ -5482,11 +5482,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.8.20): + eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.8.21): dependencies: dotenv: 16.0.3 eslint: 9.39.2 - turbo: 2.8.20 + turbo: 2.8.21 eslint-scope@8.4.0: dependencies: @@ -5797,7 +5797,7 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - happy-dom@20.8.8: + happy-dom@20.8.9: dependencies: '@types/node': 25.3.0 '@types/whatwg-mimetype': 3.0.2 @@ -7185,14 +7185,14 @@ snapshots: turbo-windows-64: 2.8.10 turbo-windows-arm64: 2.8.10 - turbo@2.8.20: + turbo@2.8.21: optionalDependencies: - '@turbo/darwin-64': 2.8.20 - '@turbo/darwin-arm64': 2.8.20 - '@turbo/linux-64': 2.8.20 - '@turbo/linux-arm64': 2.8.20 - '@turbo/windows-64': 2.8.20 - '@turbo/windows-arm64': 2.8.20 + '@turbo/darwin-64': 2.8.21 + '@turbo/darwin-arm64': 2.8.21 + '@turbo/linux-64': 2.8.21 + '@turbo/linux-arm64': 2.8.21 + '@turbo/windows-64': 2.8.21 + '@turbo/windows-arm64': 2.8.21 type-check@0.4.0: dependencies: @@ -7322,7 +7322,7 @@ snapshots: '@types/node': 25.3.0 fsevents: 2.3.3 - vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.8): + vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.9): dependencies: '@vitest/expect': 4.0.18 '@vitest/mocker': 4.0.18(vite@7.3.0(@types/node@25.3.0)) @@ -7346,7 +7346,7 @@ snapshots: why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 25.3.0 - happy-dom: 20.8.8 + happy-dom: 20.8.9 transitivePeerDependencies: - jiti - less From dd6d0a232bb9f91fe076e9a64618fa124be44cbc Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Sun, 29 Mar 2026 23:30:04 +0200 Subject: [PATCH 19/43] Add latest relayer.gen.ts (#988) --- .../src/relayer/rpc-relayer/relayer.gen.ts | 652 ++++++++++++------ 1 file changed, 442 insertions(+), 210 deletions(-) diff --git a/packages/services/relayer/src/relayer/rpc-relayer/relayer.gen.ts b/packages/services/relayer/src/relayer/rpc-relayer/relayer.gen.ts index ca5dbe9c82..8a9ff4a7b4 100644 --- a/packages/services/relayer/src/relayer/rpc-relayer/relayer.gen.ts +++ b/packages/services/relayer/src/relayer/rpc-relayer/relayer.gen.ts @@ -1,7 +1,7 @@ /* eslint-disable */ -// sequence-relayer v0.4.1 7f8a4b83b00e0b6849c76c2ff0e23931e26b3d9f +// sequence-relayer v0.4.1 0a2503bc893179ba968b0015d7580aabf6a88dd4 // -- -// Code generated by Webrpc-gen@v0.30.2 with typescript generator. DO NOT EDIT. +// Code generated by Webrpc-gen@v0.32.2 with typescript generator. DO NOT EDIT. // // webrpc-gen -schema=relayer.ridl -target=typescript -client -out=./clients/relayer.gen.ts -compat @@ -12,7 +12,7 @@ export const WebrpcVersion = 'v1' export const WebrpcSchemaVersion = 'v0.4.1' // Schema hash generated from your RIDL schema -export const WebrpcSchemaHash = '7f8a4b83b00e0b6849c76c2ff0e23931e26b3d9f' +export const WebrpcSchemaHash = '0a2503bc893179ba968b0015d7580aabf6a88dd4' // // Client interface @@ -72,6 +72,23 @@ export interface RelayerClient { feeOptions(req: FeeOptionsArgs, headers?: object, signal?: AbortSignal): Promise + /** + * Bridge gas endpoints for S2S calls + * Used for bridge fees (e.g., LayerZero messaging fees) that require msg.value to be fronted at runtime. + * bridgeGas will be included in fee calculation so the relayer gets reimbursed. + */ + sendMetaTxnWithBridgeGas( + req: SendMetaTxnWithBridgeGasArgs, + headers?: object, + signal?: AbortSignal, + ): Promise + + feeOptionsWithBridgeGas( + req: FeeOptionsWithBridgeGasArgs, + headers?: object, + signal?: AbortSignal, + ): Promise + /** * TODO: deprecated, to be removed by https://github.com/0xsequence/stack/pull/356 at a later date */ @@ -81,6 +98,17 @@ export interface RelayerClient { signal?: AbortSignal, ): Promise + /** + * + * Sender administration + * + */ + startSender(req: StartSenderArgs, headers?: object, signal?: AbortSignal): Promise + + stopSender(req: StopSenderArgs, headers?: object, signal?: AbortSignal): Promise + + repairSender(req: RepairSenderArgs, headers?: object, signal?: AbortSignal): Promise + getMetaTransactions( req: GetMetaTransactionsArgs, headers?: object, @@ -93,21 +121,6 @@ export interface RelayerClient { signal?: AbortSignal, ): Promise - /** - * Sent transactions from an account. If filter is omitted then it will return all transactions. - */ - sentTransactions(req: SentTransactionsArgs, headers?: object, signal?: AbortSignal): Promise - - /** - * Pending transactions waiting to be mined for an account. This endpoint is just a sugar of `SentTransactions` - * with the filter set to pending: true. - */ - pendingTransactions( - req: PendingTransactionsArgs, - headers?: object, - signal?: AbortSignal, - ): Promise - /** * Legacy Gas Tank */ @@ -145,7 +158,7 @@ export interface RelayerClient { ): Promise /** - * Gas Sponsorship + * Project-Level Gas Sponsorship */ listGasSponsors(req: ListGasSponsorsArgs, headers?: object, signal?: AbortSignal): Promise @@ -157,6 +170,39 @@ export interface RelayerClient { removeGasSponsor(req: RemoveGasSponsorArgs, headers?: object, signal?: AbortSignal): Promise + /** + * Ecosystem-level Gas Sponsorship + */ + listEcosystemGasSponsors( + req: ListEcosystemGasSponsorsArgs, + headers?: object, + signal?: AbortSignal, + ): Promise + + getEcosystemGasSponsor( + req: GetEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal, + ): Promise + + addEcosystemGasSponsor( + req: AddEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal, + ): Promise + + updateEcosystemGasSponsor( + req: UpdateEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal, + ): Promise + + removeEcosystemGasSponsor( + req: RemoveEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal, + ): Promise + /** * Gas Sponsor Lookup */ @@ -186,6 +232,12 @@ export interface RelayerClient { // Schema types // +export enum RepairOperation { + SKIP = 'SKIP', + REQUEUE = 'REQUEUE', + DROP = 'DROP', +} + export enum ETHTxnStatus { UNKNOWN = 'UNKNOWN', DROPPED = 'DROPPED', @@ -195,6 +247,7 @@ export enum ETHTxnStatus { PARTIALLY_FAILED = 'PARTIALLY_FAILED', FAILED = 'FAILED', PENDING_PRECONDITION = 'PENDING_PRECONDITION', + MINED = 'MINED', } export enum TransferType { @@ -221,7 +274,7 @@ export enum FeeTokenType { ERC1155_TOKEN = 'ERC1155_TOKEN', } -export enum SortOrder { +export enum Order { DESC = 'DESC', ASC = 'ASC', } @@ -250,7 +303,31 @@ export interface SenderStatus { index: number address: string etherBalance: number + enabled: boolean active: boolean + nonce?: NonceStatus + current?: CurrentStatus +} + +export interface NonceStatus { + chain: number + mempool: number +} + +export interface CurrentStatus { + transaction: string + first: TransactionStatus + latest?: TransactionStatus +} + +export interface TransactionStatus { + transaction: string + gas: number + gasPrice: string + priorityFee: string + time: string + age: string + error?: string } export interface RuntimeChecks {} @@ -287,6 +364,7 @@ export interface GasSponsor { id: number gasTankId: number projectId: number + ecosystemId: number chainId: number address: string name: string @@ -329,6 +407,7 @@ export interface MetaTxnLog { minedAt: string target: string input: string + bridgeGas?: string txnArgs: { [key: string]: any } txnReceipt?: { [key: string]: any } walletAddress: string @@ -402,11 +481,6 @@ export interface TxnLogTransfer { amounts: Array } -export interface SentTransactionsFilter { - pending?: boolean - failed?: boolean -} - export interface SimulateResult { executed: boolean succeeded: boolean @@ -443,19 +517,16 @@ export interface FeeToken { } export interface Page { - pageSize?: number - page?: number - more?: boolean - totalRecords?: number - column?: string - before?: any - after?: any - sort?: Array + pageSize: number + page: number + more: boolean + column: string + sort: Array } -export interface SortBy { +export interface Sort { column: string - order: SortOrder + order: Order } export interface PingArgs {} @@ -566,6 +637,33 @@ export interface FeeOptionsReturn { quote?: string } +export interface SendMetaTxnWithBridgeGasArgs { + call: MetaTxn + quote?: string + projectID?: number + bridgeGas: string + preconditions?: Array +} + +export interface SendMetaTxnWithBridgeGasReturn { + status: boolean + txnHash: string +} + +export interface FeeOptionsWithBridgeGasArgs { + wallet: string + to: string + data: string + simulate?: boolean + bridgeGas: string +} + +export interface FeeOptionsWithBridgeGasReturn { + options: Array + sponsored: boolean + quote?: string +} + export interface GetMetaTxnNetworkFeeOptionsArgs { walletConfig: any payload: string @@ -575,6 +673,26 @@ export interface GetMetaTxnNetworkFeeOptionsReturn { options: Array } +export interface StartSenderArgs { + sender: number +} + +export interface StartSenderReturn {} + +export interface StopSenderArgs { + sender: number +} + +export interface StopSenderReturn {} + +export interface RepairSenderArgs { + sender: number + nonce: number + operation: RepairOperation +} + +export interface RepairSenderReturn {} + export interface GetMetaTransactionsArgs { projectId: number page?: Page @@ -595,25 +713,6 @@ export interface GetTransactionCostReturn { cost: number } -export interface SentTransactionsArgs { - filter?: SentTransactionsFilter - page?: Page -} - -export interface SentTransactionsReturn { - page: Page - transactions: Array -} - -export interface PendingTransactionsArgs { - page?: Page -} - -export interface PendingTransactionsReturn { - page: Page - transactions: Array -} - export interface GetGasTankArgs { id: number } @@ -735,6 +834,58 @@ export interface RemoveGasSponsorReturn { status: boolean } +export interface ListEcosystemGasSponsorsArgs { + ecosystemId: number + page?: Page +} + +export interface ListEcosystemGasSponsorsReturn { + page: Page + gasSponsors: Array +} + +export interface GetEcosystemGasSponsorArgs { + ecosystemId: number + id: number +} + +export interface GetEcosystemGasSponsorReturn { + gasSponsor: GasSponsor +} + +export interface AddEcosystemGasSponsorArgs { + ecosystemId: number + address: string + name?: string + active?: boolean +} + +export interface AddEcosystemGasSponsorReturn { + status: boolean + gasSponsor: GasSponsor +} + +export interface UpdateEcosystemGasSponsorArgs { + ecosystemId: number + id: number + name?: string + active?: boolean +} + +export interface UpdateEcosystemGasSponsorReturn { + status: boolean + gasSponsor: GasSponsor +} + +export interface RemoveEcosystemGasSponsorArgs { + ecosystemId: number + id: number +} + +export interface RemoveEcosystemGasSponsorReturn { + status: boolean +} + export interface AddressGasSponsorsArgs { address: string page?: Page @@ -795,12 +946,16 @@ export class Relayer implements RelayerClient { updateMetaTxnGasLimits: (req: UpdateMetaTxnGasLimitsArgs) => ['Relayer', 'updateMetaTxnGasLimits', req] as const, feeTokens: () => ['Relayer', 'feeTokens'] as const, feeOptions: (req: FeeOptionsArgs) => ['Relayer', 'feeOptions', req] as const, + sendMetaTxnWithBridgeGas: (req: SendMetaTxnWithBridgeGasArgs) => + ['Relayer', 'sendMetaTxnWithBridgeGas', req] as const, + feeOptionsWithBridgeGas: (req: FeeOptionsWithBridgeGasArgs) => ['Relayer', 'feeOptionsWithBridgeGas', req] as const, getMetaTxnNetworkFeeOptions: (req: GetMetaTxnNetworkFeeOptionsArgs) => ['Relayer', 'getMetaTxnNetworkFeeOptions', req] as const, + startSender: (req: StartSenderArgs) => ['Relayer', 'startSender', req] as const, + stopSender: (req: StopSenderArgs) => ['Relayer', 'stopSender', req] as const, + repairSender: (req: RepairSenderArgs) => ['Relayer', 'repairSender', req] as const, getMetaTransactions: (req: GetMetaTransactionsArgs) => ['Relayer', 'getMetaTransactions', req] as const, getTransactionCost: (req: GetTransactionCostArgs) => ['Relayer', 'getTransactionCost', req] as const, - sentTransactions: (req: SentTransactionsArgs) => ['Relayer', 'sentTransactions', req] as const, - pendingTransactions: (req: PendingTransactionsArgs) => ['Relayer', 'pendingTransactions', req] as const, getGasTank: (req: GetGasTankArgs) => ['Relayer', 'getGasTank', req] as const, addGasTank: (req: AddGasTankArgs) => ['Relayer', 'addGasTank', req] as const, updateGasTank: (req: UpdateGasTankArgs) => ['Relayer', 'updateGasTank', req] as const, @@ -816,6 +971,14 @@ export class Relayer implements RelayerClient { addGasSponsor: (req: AddGasSponsorArgs) => ['Relayer', 'addGasSponsor', req] as const, updateGasSponsor: (req: UpdateGasSponsorArgs) => ['Relayer', 'updateGasSponsor', req] as const, removeGasSponsor: (req: RemoveGasSponsorArgs) => ['Relayer', 'removeGasSponsor', req] as const, + listEcosystemGasSponsors: (req: ListEcosystemGasSponsorsArgs) => + ['Relayer', 'listEcosystemGasSponsors', req] as const, + getEcosystemGasSponsor: (req: GetEcosystemGasSponsorArgs) => ['Relayer', 'getEcosystemGasSponsor', req] as const, + addEcosystemGasSponsor: (req: AddEcosystemGasSponsorArgs) => ['Relayer', 'addEcosystemGasSponsor', req] as const, + updateEcosystemGasSponsor: (req: UpdateEcosystemGasSponsorArgs) => + ['Relayer', 'updateEcosystemGasSponsor', req] as const, + removeEcosystemGasSponsor: (req: RemoveEcosystemGasSponsorArgs) => + ['Relayer', 'removeEcosystemGasSponsor', req] as const, addressGasSponsors: (req: AddressGasSponsorsArgs) => ['Relayer', 'addressGasSponsors', req] as const, getProjectBalance: (req: GetProjectBalanceArgs) => ['Relayer', 'getProjectBalance', req] as const, adjustProjectBalance: (req: AdjustProjectBalanceArgs) => ['Relayer', 'adjustProjectBalance', req] as const, @@ -897,10 +1060,7 @@ export class Relayer implements RelayerClient { } sendMetaTxn = (req: SendMetaTxnArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch( - this.url('SendMetaTxn'), - createHttpRequest(JsonEncode(req, 'SendMetaTxnArgs'), headers, signal), - ).then( + return this.fetch(this.url('SendMetaTxn'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'SendMetaTxnReturn') @@ -919,10 +1079,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('GetMetaTxnNonce'), - createHttpRequest(JsonEncode(req, 'GetMetaTxnNonceArgs'), headers, signal), - ).then( + return this.fetch(this.url('GetMetaTxnNonce'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetMetaTxnNonceReturn') @@ -941,10 +1098,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('GetMetaTxnReceipt'), - createHttpRequest(JsonEncode(req, 'GetMetaTxnReceiptArgs'), headers, signal), - ).then( + return this.fetch(this.url('GetMetaTxnReceipt'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetMetaTxnReceiptReturn') @@ -959,7 +1113,7 @@ export class Relayer implements RelayerClient { } simulate = (req: SimulateArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('Simulate'), createHttpRequest(JsonEncode(req, 'SimulateArgs'), headers, signal)).then( + return this.fetch(this.url('Simulate'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'SimulateReturn') @@ -974,10 +1128,7 @@ export class Relayer implements RelayerClient { } simulateV3 = (req: SimulateV3Args, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch( - this.url('SimulateV3'), - createHttpRequest(JsonEncode(req, 'SimulateV3Args'), headers, signal), - ).then( + return this.fetch(this.url('SimulateV3'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'SimulateV3Return') @@ -996,10 +1147,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('UpdateMetaTxnGasLimits'), - createHttpRequest(JsonEncode(req, 'UpdateMetaTxnGasLimitsArgs'), headers, signal), - ).then( + return this.fetch(this.url('UpdateMetaTxnGasLimits'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UpdateMetaTxnGasLimitsReturn') @@ -1029,10 +1177,7 @@ export class Relayer implements RelayerClient { } feeOptions = (req: FeeOptionsArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch( - this.url('FeeOptions'), - createHttpRequest(JsonEncode(req, 'FeeOptionsArgs'), headers, signal), - ).then( + return this.fetch(this.url('FeeOptions'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'FeeOptionsReturn') @@ -1046,6 +1191,44 @@ export class Relayer implements RelayerClient { ) } + sendMetaTxnWithBridgeGas = ( + req: SendMetaTxnWithBridgeGasArgs, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch(this.url('SendMetaTxnWithBridgeGas'), createHttpRequest(JsonEncode(req), headers, signal)).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'SendMetaTxnWithBridgeGasReturn') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + + feeOptionsWithBridgeGas = ( + req: FeeOptionsWithBridgeGasArgs, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch(this.url('FeeOptionsWithBridgeGas'), createHttpRequest(JsonEncode(req), headers, signal)).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'FeeOptionsWithBridgeGasReturn') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + getMetaTxnNetworkFeeOptions = ( req: GetMetaTxnNetworkFeeOptionsArgs, headers?: object, @@ -1053,7 +1236,7 @@ export class Relayer implements RelayerClient { ): Promise => { return this.fetch( this.url('GetMetaTxnNetworkFeeOptions'), - createHttpRequest(JsonEncode(req, 'GetMetaTxnNetworkFeeOptionsArgs'), headers, signal), + createHttpRequest(JsonEncode(req), headers, signal), ).then( (res) => { return buildResponse(res).then((_data) => { @@ -1068,18 +1251,11 @@ export class Relayer implements RelayerClient { ) } - getMetaTransactions = ( - req: GetMetaTransactionsArgs, - headers?: object, - signal?: AbortSignal, - ): Promise => { - return this.fetch( - this.url('GetMetaTransactions'), - createHttpRequest(JsonEncode(req, 'GetMetaTransactionsArgs'), headers, signal), - ).then( + startSender = (req: StartSenderArgs, headers?: object, signal?: AbortSignal): Promise => { + return this.fetch(this.url('StartSender'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { - return JsonDecode(_data, 'GetMetaTransactionsReturn') + return JsonDecode(_data, 'StartSenderReturn') }) }, (error) => { @@ -1090,18 +1266,26 @@ export class Relayer implements RelayerClient { ) } - getTransactionCost = ( - req: GetTransactionCostArgs, - headers?: object, - signal?: AbortSignal, - ): Promise => { - return this.fetch( - this.url('GetTransactionCost'), - createHttpRequest(JsonEncode(req, 'GetTransactionCostArgs'), headers, signal), - ).then( + stopSender = (req: StopSenderArgs, headers?: object, signal?: AbortSignal): Promise => { + return this.fetch(this.url('StopSender'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { - return JsonDecode(_data, 'GetTransactionCostReturn') + return JsonDecode(_data, 'StopSenderReturn') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + + repairSender = (req: RepairSenderArgs, headers?: object, signal?: AbortSignal): Promise => { + return this.fetch(this.url('RepairSender'), createHttpRequest(JsonEncode(req), headers, signal)).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'RepairSenderReturn') }) }, (error) => { @@ -1112,18 +1296,15 @@ export class Relayer implements RelayerClient { ) } - sentTransactions = ( - req: SentTransactionsArgs, + getMetaTransactions = ( + req: GetMetaTransactionsArgs, headers?: object, signal?: AbortSignal, - ): Promise => { - return this.fetch( - this.url('SentTransactions'), - createHttpRequest(JsonEncode(req, 'SentTransactionsArgs'), headers, signal), - ).then( + ): Promise => { + return this.fetch(this.url('GetMetaTransactions'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { - return JsonDecode(_data, 'SentTransactionsReturn') + return JsonDecode(_data, 'GetMetaTransactionsReturn') }) }, (error) => { @@ -1134,18 +1315,15 @@ export class Relayer implements RelayerClient { ) } - pendingTransactions = ( - req: PendingTransactionsArgs, + getTransactionCost = ( + req: GetTransactionCostArgs, headers?: object, signal?: AbortSignal, - ): Promise => { - return this.fetch( - this.url('PendingTransactions'), - createHttpRequest(JsonEncode(req, 'PendingTransactionsArgs'), headers, signal), - ).then( + ): Promise => { + return this.fetch(this.url('GetTransactionCost'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { - return JsonDecode(_data, 'PendingTransactionsReturn') + return JsonDecode(_data, 'GetTransactionCostReturn') }) }, (error) => { @@ -1157,10 +1335,7 @@ export class Relayer implements RelayerClient { } getGasTank = (req: GetGasTankArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch( - this.url('GetGasTank'), - createHttpRequest(JsonEncode(req, 'GetGasTankArgs'), headers, signal), - ).then( + return this.fetch(this.url('GetGasTank'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetGasTankReturn') @@ -1175,10 +1350,7 @@ export class Relayer implements RelayerClient { } addGasTank = (req: AddGasTankArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch( - this.url('AddGasTank'), - createHttpRequest(JsonEncode(req, 'AddGasTankArgs'), headers, signal), - ).then( + return this.fetch(this.url('AddGasTank'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'AddGasTankReturn') @@ -1193,10 +1365,7 @@ export class Relayer implements RelayerClient { } updateGasTank = (req: UpdateGasTankArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch( - this.url('UpdateGasTank'), - createHttpRequest(JsonEncode(req, 'UpdateGasTankArgs'), headers, signal), - ).then( + return this.fetch(this.url('UpdateGasTank'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UpdateGasTankReturn') @@ -1217,7 +1386,7 @@ export class Relayer implements RelayerClient { ): Promise => { return this.fetch( this.url('NextGasTankBalanceAdjustmentNonce'), - createHttpRequest(JsonEncode(req, 'NextGasTankBalanceAdjustmentNonceArgs'), headers, signal), + createHttpRequest(JsonEncode(req), headers, signal), ).then( (res) => { return buildResponse(res).then((_data) => { @@ -1237,10 +1406,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('AdjustGasTankBalance'), - createHttpRequest(JsonEncode(req, 'AdjustGasTankBalanceArgs'), headers, signal), - ).then( + return this.fetch(this.url('AdjustGasTankBalance'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'AdjustGasTankBalanceReturn') @@ -1261,7 +1427,7 @@ export class Relayer implements RelayerClient { ): Promise => { return this.fetch( this.url('GetGasTankBalanceAdjustment'), - createHttpRequest(JsonEncode(req, 'GetGasTankBalanceAdjustmentArgs'), headers, signal), + createHttpRequest(JsonEncode(req), headers, signal), ).then( (res) => { return buildResponse(res).then((_data) => { @@ -1283,7 +1449,7 @@ export class Relayer implements RelayerClient { ): Promise => { return this.fetch( this.url('ListGasTankBalanceAdjustments'), - createHttpRequest(JsonEncode(req, 'ListGasTankBalanceAdjustmentsArgs'), headers, signal), + createHttpRequest(JsonEncode(req), headers, signal), ).then( (res) => { return buildResponse(res).then((_data) => { @@ -1303,10 +1469,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('ListGasSponsors'), - createHttpRequest(JsonEncode(req, 'ListGasSponsorsArgs'), headers, signal), - ).then( + return this.fetch(this.url('ListGasSponsors'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ListGasSponsorsReturn') @@ -1321,10 +1484,7 @@ export class Relayer implements RelayerClient { } getGasSponsor = (req: GetGasSponsorArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch( - this.url('GetGasSponsor'), - createHttpRequest(JsonEncode(req, 'GetGasSponsorArgs'), headers, signal), - ).then( + return this.fetch(this.url('GetGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetGasSponsorReturn') @@ -1339,10 +1499,7 @@ export class Relayer implements RelayerClient { } addGasSponsor = (req: AddGasSponsorArgs, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch( - this.url('AddGasSponsor'), - createHttpRequest(JsonEncode(req, 'AddGasSponsorArgs'), headers, signal), - ).then( + return this.fetch(this.url('AddGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'AddGasSponsorReturn') @@ -1361,10 +1518,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('UpdateGasSponsor'), - createHttpRequest(JsonEncode(req, 'UpdateGasSponsorArgs'), headers, signal), - ).then( + return this.fetch(this.url('UpdateGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UpdateGasSponsorReturn') @@ -1383,10 +1537,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('RemoveGasSponsor'), - createHttpRequest(JsonEncode(req, 'RemoveGasSponsorArgs'), headers, signal), - ).then( + return this.fetch(this.url('RemoveGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RemoveGasSponsorReturn') @@ -1400,15 +1551,107 @@ export class Relayer implements RelayerClient { ) } + listEcosystemGasSponsors = ( + req: ListEcosystemGasSponsorsArgs, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch(this.url('ListEcosystemGasSponsors'), createHttpRequest(JsonEncode(req), headers, signal)).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'ListEcosystemGasSponsorsReturn') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + + getEcosystemGasSponsor = ( + req: GetEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch(this.url('GetEcosystemGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'GetEcosystemGasSponsorReturn') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + + addEcosystemGasSponsor = ( + req: AddEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch(this.url('AddEcosystemGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'AddEcosystemGasSponsorReturn') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + + updateEcosystemGasSponsor = ( + req: UpdateEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch(this.url('UpdateEcosystemGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'UpdateEcosystemGasSponsorReturn') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + + removeEcosystemGasSponsor = ( + req: RemoveEcosystemGasSponsorArgs, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch(this.url('RemoveEcosystemGasSponsor'), createHttpRequest(JsonEncode(req), headers, signal)).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'RemoveEcosystemGasSponsorReturn') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + addressGasSponsors = ( req: AddressGasSponsorsArgs, headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('AddressGasSponsors'), - createHttpRequest(JsonEncode(req, 'AddressGasSponsorsArgs'), headers, signal), - ).then( + return this.fetch(this.url('AddressGasSponsors'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'AddressGasSponsorsReturn') @@ -1427,10 +1670,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('GetProjectBalance'), - createHttpRequest(JsonEncode(req, 'GetProjectBalanceArgs'), headers, signal), - ).then( + return this.fetch(this.url('GetProjectBalance'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetProjectBalanceReturn') @@ -1449,10 +1689,7 @@ export class Relayer implements RelayerClient { headers?: object, signal?: AbortSignal, ): Promise => { - return this.fetch( - this.url('AdjustProjectBalance'), - createHttpRequest(JsonEncode(req, 'AdjustProjectBalanceArgs'), headers, signal), - ).then( + return this.fetch(this.url('AdjustProjectBalance'), createHttpRequest(JsonEncode(req), headers, signal)).then( (res) => { return buildResponse(res).then((_data) => { return JsonDecode(_data, 'AdjustProjectBalanceReturn') @@ -1468,7 +1705,11 @@ export class Relayer implements RelayerClient { } const createHttpRequest = (body: string = '{}', headers: object = {}, signal: AbortSignal | null = null): object => { - const reqHeaders: { [key: string]: string } = { ...headers, 'Content-Type': 'application/json' } + const reqHeaders: { [key: string]: string } = { + ...headers, + 'Content-Type': 'application/json', + [WebrpcHeader]: WebrpcHeaderValue, + } return { method: 'POST', headers: reqHeaders, body, signal } } @@ -1499,44 +1740,11 @@ export type Fetch = (input: RequestInfo, init?: RequestInit) => Promise(obj: T, typ: string = ''): string => { - return JSON.stringify(encodeType(typ, obj)) +// Encode object to JSON with BigInts converted to decimal strings. +export const JsonEncode = (obj: T): string => { + return JSON.stringify(obj, (key, value) => (typeof value === 'bigint' ? value.toString() : value)) } // Decode data (JSON string or already-parsed object) and convert declared BigInt string fields back to BigInt. @@ -1890,7 +2107,7 @@ export class AccessKeyMismatchError extends WebrpcError { this.name = error.name || 'AccessKeyMismatch' this.code = typeof error.code === 'number' ? error.code : 1102 this.message = error.message || `Access key mismatch` - this.status = typeof error.status === 'number' ? error.status : 409 + this.status = typeof error.status === 'number' ? error.status : 403 if (error.cause !== undefined) this.cause = error.cause Object.setPrototypeOf(this, AccessKeyMismatchError.prototype) } @@ -1932,6 +2149,18 @@ export class UnauthorizedUserError extends WebrpcError { } } +export class InvalidChainError extends WebrpcError { + constructor(error: WebrpcErrorParams = {}) { + super(error) + this.name = error.name || 'InvalidChain' + this.code = typeof error.code === 'number' ? error.code : 1106 + this.message = error.message || `Network not enabled for Access key` + this.status = typeof error.status === 'number' ? error.status : 403 + if (error.cause !== undefined) this.cause = error.cause + Object.setPrototypeOf(this, InvalidChainError.prototype) + } +} + export class QuotaExceededError extends WebrpcError { constructor(error: WebrpcErrorParams = {}) { super(error) @@ -2114,6 +2343,7 @@ export enum errors { InvalidOrigin = 'InvalidOrigin', InvalidService = 'InvalidService', UnauthorizedUser = 'UnauthorizedUser', + InvalidChain = 'InvalidChain', QuotaExceeded = 'QuotaExceeded', QuotaRateLimit = 'QuotaRateLimit', NoDefaultKey = 'NoDefaultKey', @@ -2155,6 +2385,7 @@ export enum WebrpcErrorCodes { InvalidOrigin = 1103, InvalidService = 1104, UnauthorizedUser = 1105, + InvalidChain = 1106, QuotaExceeded = 1200, QuotaRateLimit = 1201, NoDefaultKey = 1300, @@ -2196,6 +2427,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { [1103]: InvalidOriginError, [1104]: InvalidServiceError, [1105]: UnauthorizedUserError, + [1106]: InvalidChainError, [1200]: QuotaExceededError, [1201]: QuotaRateLimitError, [1300]: NoDefaultKeyError, @@ -2217,7 +2449,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { export const WebrpcHeader = 'Webrpc' -export const WebrpcHeaderValue = 'webrpc@v0.30.2;gen-typescript@v0.22.2;sequence-relayer@v0.4.1' +export const WebrpcHeaderValue = 'webrpc@v0.32.2;gen-typescript@v0.23.1;sequence-relayer@v0.4.1' type WebrpcGenVersions = { WebrpcGenVersion: string From e3541f24a95a3fb23d0fa4d188ec31651576f3bd Mon Sep 17 00:00:00 2001 From: William Hua Date: Tue, 14 Apr 2026 10:17:17 -0400 Subject: [PATCH 20/43] pnpm format --- packages/services/api/src/api.gen.ts | 1423 ++++++++++------- packages/services/indexer/src/indexer.gen.ts | 680 ++++---- .../services/indexer/src/indexergw.gen.ts | 260 +-- .../test/preconditions/preconditions.test.ts | 8 +- .../test/preconditions/selectors.test.ts | 38 +- 5 files changed, 1444 insertions(+), 965 deletions(-) diff --git a/packages/services/api/src/api.gen.ts b/packages/services/api/src/api.gen.ts index b9d2e58703..139fa541ae 100644 --- a/packages/services/api/src/api.gen.ts +++ b/packages/services/api/src/api.gen.ts @@ -47,10 +47,14 @@ export interface APIClient { sendPasswordlessLink( req: SendPasswordlessLinkRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise - registerPublicKey(req: RegisterPublicKeyRequest, headers?: object, signal?: AbortSignal): Promise + registerPublicKey( + req: RegisterPublicKeyRequest, + headers?: object, + signal?: AbortSignal, + ): Promise getPublicKey(req: GetPublicKeyRequest, headers?: object, signal?: AbortSignal): Promise @@ -61,7 +65,11 @@ export interface APIClient { */ friendList(req: FriendListRequest, headers?: object, signal?: AbortSignal): Promise - getFriendByAddress(req: GetFriendByAddressRequest, headers?: object, signal?: AbortSignal): Promise + getFriendByAddress( + req: GetFriendByAddressRequest, + headers?: object, + signal?: AbortSignal, + ): Promise searchFriends(req: SearchFriendsRequest, headers?: object, signal?: AbortSignal): Promise @@ -70,7 +78,7 @@ export interface APIClient { updateFriendNickname( req: UpdateFriendNicknameRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise removeFriend(req: RemoveFriendRequest, headers?: object, signal?: AbortSignal): Promise @@ -82,12 +90,16 @@ export interface APIClient { */ contractCall(req: ContractCallRequest, headers?: object, signal?: AbortSignal): Promise - decodeContractCall(req: DecodeContractCallRequest, headers?: object, signal?: AbortSignal): Promise + decodeContractCall( + req: DecodeContractCallRequest, + headers?: object, + signal?: AbortSignal, + ): Promise lookupContractCallSelectors( req: LookupContractCallSelectorsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -95,16 +107,24 @@ export interface APIClient { * User Storage * */ - userStorageFetch(req: UserStorageFetchRequest, headers?: object, signal?: AbortSignal): Promise + userStorageFetch( + req: UserStorageFetchRequest, + headers?: object, + signal?: AbortSignal, + ): Promise userStorageSave(req: UserStorageSaveRequest, headers?: object, signal?: AbortSignal): Promise - userStorageDelete(req: UserStorageDeleteRequest, headers?: object, signal?: AbortSignal): Promise + userStorageDelete( + req: UserStorageDeleteRequest, + headers?: object, + signal?: AbortSignal, + ): Promise userStorageFetchAll( req: UserStorageFetchAllRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -117,30 +137,38 @@ export interface APIClient { /** * - IsUsingGoogleMail(domain: string) => (yes: bool) */ - resolveENSAddress(req: ResolveENSAddressRequest, headers?: object, signal?: AbortSignal): Promise + resolveENSAddress( + req: ResolveENSAddressRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * TODO: we can add walletContext optional in the future when we need it * NOTE: chainId can be either a number or canonical name */ - isValidSignature(req: IsValidSignatureRequest, headers?: object, signal?: AbortSignal): Promise + isValidSignature( + req: IsValidSignatureRequest, + headers?: object, + signal?: AbortSignal, + ): Promise isValidMessageSignature( req: IsValidMessageSignatureRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise isValidTypedDataSignature( req: IsValidTypedDataSignatureRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise isValidETHAuthProof( req: IsValidETHAuthProofRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise getOnRampURL(req: GetOnRampURLRequest, headers?: object, signal?: AbortSignal): Promise @@ -155,13 +183,13 @@ export interface APIClient { transakGetSupportedNFTCheckoutChains( headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise transakGetWidgetURL( req: TransakGetWidgetURLRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -174,7 +202,7 @@ export interface APIClient { getCollectiblePrices( req: GetCollectiblePricesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -203,18 +231,26 @@ export interface APIClient { /** * NOTE: we're still using this from SW-API to Sequence-API to claim invite code */ - isValidAccessCode(req: IsValidAccessCodeRequest, headers?: object, signal?: AbortSignal): Promise + isValidAccessCode( + req: IsValidAccessCodeRequest, + headers?: object, + signal?: AbortSignal, + ): Promise internalClaimAccessCode( req: InternalClaimAccessCodeRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** * Utils */ - blockNumberAtTime(req: BlockNumberAtTimeRequest, headers?: object, signal?: AbortSignal): Promise + blockNumberAtTime( + req: BlockNumberAtTimeRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * @@ -222,12 +258,16 @@ export interface APIClient { * TODO: deprecate in the future * */ - paperSessionSecret(req: PaperSessionSecretRequest, headers?: object, signal?: AbortSignal): Promise + paperSessionSecret( + req: PaperSessionSecretRequest, + headers?: object, + signal?: AbortSignal, + ): Promise paperSessionSecret2( req: PaperSessionSecret2Request, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -237,9 +277,17 @@ export interface APIClient { */ linkWallet(req: LinkWalletRequest, headers?: object, signal?: AbortSignal): Promise - getLinkedWallets(req: GetLinkedWalletsRequest, headers?: object, signal?: AbortSignal): Promise + getLinkedWallets( + req: GetLinkedWalletsRequest, + headers?: object, + signal?: AbortSignal, + ): Promise - removeLinkedWallet(req: RemoveLinkedWalletRequest, headers?: object, signal?: AbortSignal): Promise + removeLinkedWallet( + req: RemoveLinkedWalletRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * NOTE: these methods are deprecated, please do not use them. We may resurface them in the future, but just wanted @@ -248,13 +296,13 @@ export interface APIClient { generateWaaSVerificationURL( req: GenerateWaaSVerificationURLRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise validateWaaSVerificationNonce( req: ValidateWaaSVerificationNonceRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -263,7 +311,11 @@ export interface APIClient { * WaaS child wallet adoption * */ - listAdoptedWallets(req: ListAdoptedWalletsRequest, headers?: object, signal?: AbortSignal): Promise + listAdoptedWallets( + req: ListAdoptedWalletsRequest, + headers?: object, + signal?: AbortSignal, + ): Promise getLifiChains(headers?: object, signal?: AbortSignal): Promise @@ -273,9 +325,17 @@ export interface APIClient { * All parameters except `params` are deprecated. * Use only the `params` object to pass values. */ - getLifiSwapRoutes(req: GetLifiSwapRoutesRequest, headers?: object, signal?: AbortSignal): Promise + getLifiSwapRoutes( + req: GetLifiSwapRoutesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise - getLifiSwapQuote(req: GetLifiSwapQuoteRequest, headers?: object, signal?: AbortSignal): Promise + getLifiSwapQuote( + req: GetLifiSwapQuoteRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * @@ -287,43 +347,43 @@ export interface APIClient { addOffchainInventory( req: AddOffchainInventoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise getOffchainInventory( req: GetOffchainInventoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise listOffchainInventories( req: ListOffchainInventoriesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise updateOffchainInventory( req: UpdateOffchainInventoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise deleteOffchainInventory( req: DeleteOffchainInventoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise requestOffchainPayment( req: RequestOffchainPaymentRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise listOffchainPayments( req: ListOffchainPaymentsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -339,38 +399,42 @@ export interface APIClient { deletePack(req: DeletePackRequest, headers?: object, signal?: AbortSignal): Promise - updatePackContent(req: UpdatePackContentRequest, headers?: object, signal?: AbortSignal): Promise + updatePackContent( + req: UpdatePackContentRequest, + headers?: object, + signal?: AbortSignal, + ): Promise getRevealTxData(req: GetRevealTxDataRequest, headers?: object, signal?: AbortSignal): Promise checkoutOptionsPrimary( req: CheckoutOptionsPrimaryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise checkoutOptionsSecondary( req: CheckoutOptionsSecondaryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise checkoutOptionsGetTransakContractID( req: CheckoutOptionsGetTransakContractIDRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise fortePayCreateIntent( req: FortePayCreateIntentRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise fortePayGetPaymentStatuses( req: FortePayGetPaymentStatusesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise } @@ -380,50 +444,50 @@ export interface APIClient { export enum SortOrder { DESC = 'DESC', - ASC = 'ASC' + ASC = 'ASC', } export enum GetLifiSwapRouteDirection { to = 'to', - from = 'from' + from = 'from', } export enum TokenType { ERC20 = 'ERC20', ERC721 = 'ERC721', - ERC1155 = 'ERC1155' + ERC1155 = 'ERC1155', } export enum TransakBuySell { UNKNOWN = 'UNKNOWN', BUY = 'BUY', - SELL = 'SELL' + SELL = 'SELL', } export enum TradeType { EXACT_INPUT = 'EXACT_INPUT', - EXACT_OUTPUT = 'EXACT_OUTPUT' + EXACT_OUTPUT = 'EXACT_OUTPUT', } export enum CheckoutOptionCrypto { none = 'none', partially = 'partially', - all = 'all' + all = 'all', } export enum CheckoutOptionNFTCheckoutProvider { unknown = 'unknown', - transak = 'transak' + transak = 'transak', } export enum CheckoutOptionOnRampProvider { unknown = 'unknown', - transak = 'transak' + transak = 'transak', } export enum CheckoutOptionSwapProvider { unknown = 'unknown', - lifi = 'lifi' + lifi = 'lifi', } export interface Version { @@ -1747,7 +1811,8 @@ export class API implements APIClient { resolveENSAddress: (req: ResolveENSAddressRequest) => ['API', 'resolveENSAddress', req] as const, isValidSignature: (req: IsValidSignatureRequest) => ['API', 'isValidSignature', req] as const, isValidMessageSignature: (req: IsValidMessageSignatureRequest) => ['API', 'isValidMessageSignature', req] as const, - isValidTypedDataSignature: (req: IsValidTypedDataSignatureRequest) => ['API', 'isValidTypedDataSignature', req] as const, + isValidTypedDataSignature: (req: IsValidTypedDataSignatureRequest) => + ['API', 'isValidTypedDataSignature', req] as const, isValidETHAuthProof: (req: IsValidETHAuthProofRequest) => ['API', 'isValidETHAuthProof', req] as const, getOnRampURL: (req: GetOnRampURLRequest) => ['API', 'getOnRampURL', req] as const, transakGetCountries: () => ['API', 'transakGetCountries'] as const, @@ -1794,1315 +1859,1553 @@ export class API implements APIClient { updatePackContent: (req: UpdatePackContentRequest) => ['API', 'updatePackContent', req] as const, getRevealTxData: (req: GetRevealTxDataRequest) => ['API', 'getRevealTxData', req] as const, checkoutOptionsPrimary: (req: CheckoutOptionsPrimaryRequest) => ['API', 'checkoutOptionsPrimary', req] as const, - checkoutOptionsSecondary: (req: CheckoutOptionsSecondaryRequest) => ['API', 'checkoutOptionsSecondary', req] as const, + checkoutOptionsSecondary: (req: CheckoutOptionsSecondaryRequest) => + ['API', 'checkoutOptionsSecondary', req] as const, checkoutOptionsGetTransakContractID: (req: CheckoutOptionsGetTransakContractIDRequest) => ['API', 'checkoutOptionsGetTransakContractID', req] as const, fortePayCreateIntent: (req: FortePayCreateIntentRequest) => ['API', 'fortePayCreateIntent', req] as const, - fortePayGetPaymentStatuses: (req: FortePayGetPaymentStatusesRequest) => ['API', 'fortePayGetPaymentStatuses', req] as const + fortePayGetPaymentStatuses: (req: FortePayGetPaymentStatusesRequest) => + ['API', 'fortePayGetPaymentStatuses', req] as const, } ping = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('Ping'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'PingResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } version = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('Version'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'VersionResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } runtimeStatus = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('RuntimeStatus'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RuntimeStatusResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } clock = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('Clock'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ClockResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getSequenceContext = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('GetSequenceContext'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetSequenceContextResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getAuthToken = (req: GetAuthTokenRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('GetAuthToken'), createHttpRequest(JsonEncode(req, 'GetAuthTokenRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('GetAuthToken'), + createHttpRequest(JsonEncode(req, 'GetAuthTokenRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetAuthTokenResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getAuthToken2 = (req: GetAuthToken2Request, headers?: object, signal?: AbortSignal): Promise => { + getAuthToken2 = ( + req: GetAuthToken2Request, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('GetAuthToken2'), - createHttpRequest(JsonEncode(req, 'GetAuthToken2Request'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetAuthToken2Request'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetAuthToken2Response') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } sendPasswordlessLink = ( req: SendPasswordlessLinkRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('SendPasswordlessLink'), - createHttpRequest(JsonEncode(req, 'SendPasswordlessLinkRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'SendPasswordlessLinkRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'SendPasswordlessLinkResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } registerPublicKey = ( req: RegisterPublicKeyRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('RegisterPublicKey'), - createHttpRequest(JsonEncode(req, 'RegisterPublicKeyRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'RegisterPublicKeyRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RegisterPublicKeyResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getPublicKey = (req: GetPublicKeyRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('GetPublicKey'), createHttpRequest(JsonEncode(req, 'GetPublicKeyRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('GetPublicKey'), + createHttpRequest(JsonEncode(req, 'GetPublicKeyRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetPublicKeyResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } friendList = (req: FriendListRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('FriendList'), createHttpRequest(JsonEncode(req, 'FriendListRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('FriendList'), + createHttpRequest(JsonEncode(req, 'FriendListRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'FriendListResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getFriendByAddress = ( req: GetFriendByAddressRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('GetFriendByAddress'), - createHttpRequest(JsonEncode(req, 'GetFriendByAddressRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetFriendByAddressRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetFriendByAddressResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - searchFriends = (req: SearchFriendsRequest, headers?: object, signal?: AbortSignal): Promise => { + searchFriends = ( + req: SearchFriendsRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('SearchFriends'), - createHttpRequest(JsonEncode(req, 'SearchFriendsRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'SearchFriendsRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'SearchFriendsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } addFriend = (req: AddFriendRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('AddFriend'), createHttpRequest(JsonEncode(req, 'AddFriendRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('AddFriend'), + createHttpRequest(JsonEncode(req, 'AddFriendRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'AddFriendResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } updateFriendNickname = ( req: UpdateFriendNicknameRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('UpdateFriendNickname'), - createHttpRequest(JsonEncode(req, 'UpdateFriendNicknameRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'UpdateFriendNicknameRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UpdateFriendNicknameResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } removeFriend = (req: RemoveFriendRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('RemoveFriend'), createHttpRequest(JsonEncode(req, 'RemoveFriendRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('RemoveFriend'), + createHttpRequest(JsonEncode(req, 'RemoveFriendRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RemoveFriendResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } contractCall = (req: ContractCallRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('ContractCall'), createHttpRequest(JsonEncode(req, 'ContractCallRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('ContractCall'), + createHttpRequest(JsonEncode(req, 'ContractCallRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ContractCallResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } decodeContractCall = ( req: DecodeContractCallRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('DecodeContractCall'), - createHttpRequest(JsonEncode(req, 'DecodeContractCallRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'DecodeContractCallRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'DecodeContractCallResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } lookupContractCallSelectors = ( req: LookupContractCallSelectorsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('LookupContractCallSelectors'), - createHttpRequest(JsonEncode(req, 'LookupContractCallSelectorsRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'LookupContractCallSelectorsRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'LookupContractCallSelectorsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } userStorageFetch = ( req: UserStorageFetchRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('UserStorageFetch'), - createHttpRequest(JsonEncode(req, 'UserStorageFetchRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'UserStorageFetchRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UserStorageFetchResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - userStorageSave = (req: UserStorageSaveRequest, headers?: object, signal?: AbortSignal): Promise => { + userStorageSave = ( + req: UserStorageSaveRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('UserStorageSave'), - createHttpRequest(JsonEncode(req, 'UserStorageSaveRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'UserStorageSaveRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UserStorageSaveResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } userStorageDelete = ( req: UserStorageDeleteRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('UserStorageDelete'), - createHttpRequest(JsonEncode(req, 'UserStorageDeleteRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'UserStorageDeleteRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UserStorageDeleteResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } userStorageFetchAll = ( req: UserStorageFetchAllRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('UserStorageFetchAll'), - createHttpRequest(JsonEncode(req, 'UserStorageFetchAllRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'UserStorageFetchAllRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UserStorageFetchAllResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getMoonpayLink = (req: GetMoonpayLinkRequest, headers?: object, signal?: AbortSignal): Promise => { + getMoonpayLink = ( + req: GetMoonpayLinkRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('GetMoonpayLink'), - createHttpRequest(JsonEncode(req, 'GetMoonpayLinkRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetMoonpayLinkRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetMoonpayLinkResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } resolveENSAddress = ( req: ResolveENSAddressRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('ResolveENSAddress'), - createHttpRequest(JsonEncode(req, 'ResolveENSAddressRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'ResolveENSAddressRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ResolveENSAddressResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } isValidSignature = ( req: IsValidSignatureRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('IsValidSignature'), - createHttpRequest(JsonEncode(req, 'IsValidSignatureRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'IsValidSignatureRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'IsValidSignatureResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } isValidMessageSignature = ( req: IsValidMessageSignatureRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('IsValidMessageSignature'), - createHttpRequest(JsonEncode(req, 'IsValidMessageSignatureRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'IsValidMessageSignatureRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'IsValidMessageSignatureResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } isValidTypedDataSignature = ( req: IsValidTypedDataSignatureRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('IsValidTypedDataSignature'), - createHttpRequest(JsonEncode(req, 'IsValidTypedDataSignatureRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'IsValidTypedDataSignatureRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'IsValidTypedDataSignatureResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } isValidETHAuthProof = ( req: IsValidETHAuthProofRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('IsValidETHAuthProof'), - createHttpRequest(JsonEncode(req, 'IsValidETHAuthProofRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'IsValidETHAuthProofRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'IsValidETHAuthProofResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getOnRampURL = (req: GetOnRampURLRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('GetOnRampURL'), createHttpRequest(JsonEncode(req, 'GetOnRampURLRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('GetOnRampURL'), + createHttpRequest(JsonEncode(req, 'GetOnRampURLRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetOnRampURLResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } transakGetCountries = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('TransakGetCountries'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'TransakGetCountriesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - transakGetCryptoCurrencies = (headers?: object, signal?: AbortSignal): Promise => { + transakGetCryptoCurrencies = ( + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch(this.url('TransakGetCryptoCurrencies'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'TransakGetCryptoCurrenciesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } transakGetFiatCurrencies = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('TransakGetFiatCurrencies'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'TransakGetFiatCurrenciesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - transakGetPrice = (req: TransakGetPriceRequest, headers?: object, signal?: AbortSignal): Promise => { + transakGetPrice = ( + req: TransakGetPriceRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('TransakGetPrice'), - createHttpRequest(JsonEncode(req, 'TransakGetPriceRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'TransakGetPriceRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'TransakGetPriceResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } transakGetSupportedNFTCheckoutChains = ( headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('TransakGetSupportedNFTCheckoutChains'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { - return JsonDecode(_data, 'TransakGetSupportedNFTCheckoutChainsResponse') + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode( + _data, + 'TransakGetSupportedNFTCheckoutChainsResponse', + ) + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } ) } transakGetWidgetURL = ( req: TransakGetWidgetURLRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('TransakGetWidgetURL'), - createHttpRequest(JsonEncode(req, 'TransakGetWidgetURLRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'TransakGetWidgetURLRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'TransakGetWidgetURLResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getCoinPrices = (req: GetCoinPricesRequest, headers?: object, signal?: AbortSignal): Promise => { + getCoinPrices = ( + req: GetCoinPricesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('GetCoinPrices'), - createHttpRequest(JsonEncode(req, 'GetCoinPricesRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetCoinPricesRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetCoinPricesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getCollectiblePrices = ( req: GetCollectiblePricesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('GetCollectiblePrices'), - createHttpRequest(JsonEncode(req, 'GetCollectiblePricesRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetCollectiblePricesRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetCollectiblePricesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getExchangeRate = (req: GetExchangeRateRequest, headers?: object, signal?: AbortSignal): Promise => { + getExchangeRate = ( + req: GetExchangeRateRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('GetExchangeRate'), - createHttpRequest(JsonEncode(req, 'GetExchangeRateRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetExchangeRateRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetExchangeRateResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } memoryStore = (req: MemoryStoreRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('MemoryStore'), createHttpRequest(JsonEncode(req, 'MemoryStoreRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('MemoryStore'), + createHttpRequest(JsonEncode(req, 'MemoryStoreRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'MemoryStoreResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } memoryLoad = (req: MemoryLoadRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('MemoryLoad'), createHttpRequest(JsonEncode(req, 'MemoryLoadRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('MemoryLoad'), + createHttpRequest(JsonEncode(req, 'MemoryLoadRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'MemoryLoadResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getInviteInfo = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('GetInviteInfo'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetInviteInfoResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } isValidAccessCode = ( req: IsValidAccessCodeRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('IsValidAccessCode'), - createHttpRequest(JsonEncode(req, 'IsValidAccessCodeRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'IsValidAccessCodeRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'IsValidAccessCodeResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } internalClaimAccessCode = ( req: InternalClaimAccessCodeRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('InternalClaimAccessCode'), - createHttpRequest(JsonEncode(req, 'InternalClaimAccessCodeRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'InternalClaimAccessCodeRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'InternalClaimAccessCodeResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } blockNumberAtTime = ( req: BlockNumberAtTimeRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('BlockNumberAtTime'), - createHttpRequest(JsonEncode(req, 'BlockNumberAtTimeRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'BlockNumberAtTimeRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'BlockNumberAtTimeResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } paperSessionSecret = ( req: PaperSessionSecretRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('PaperSessionSecret'), - createHttpRequest(JsonEncode(req, 'PaperSessionSecretRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'PaperSessionSecretRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'PaperSessionSecretResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } paperSessionSecret2 = ( req: PaperSessionSecret2Request, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('PaperSessionSecret2'), - createHttpRequest(JsonEncode(req, 'PaperSessionSecret2Request'), headers, signal) + createHttpRequest(JsonEncode(req, 'PaperSessionSecret2Request'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'PaperSessionSecret2Response') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } linkWallet = (req: LinkWalletRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('LinkWallet'), createHttpRequest(JsonEncode(req, 'LinkWalletRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('LinkWallet'), + createHttpRequest(JsonEncode(req, 'LinkWalletRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'LinkWalletResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getLinkedWallets = ( req: GetLinkedWalletsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('GetLinkedWallets'), - createHttpRequest(JsonEncode(req, 'GetLinkedWalletsRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetLinkedWalletsRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetLinkedWalletsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } removeLinkedWallet = ( req: RemoveLinkedWalletRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('RemoveLinkedWallet'), - createHttpRequest(JsonEncode(req, 'RemoveLinkedWalletRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'RemoveLinkedWalletRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RemoveLinkedWalletResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } generateWaaSVerificationURL = ( req: GenerateWaaSVerificationURLRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('GenerateWaaSVerificationURL'), - createHttpRequest(JsonEncode(req, 'GenerateWaaSVerificationURLRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GenerateWaaSVerificationURLRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GenerateWaaSVerificationURLResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } validateWaaSVerificationNonce = ( req: ValidateWaaSVerificationNonceRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('ValidateWaaSVerificationNonce'), - createHttpRequest(JsonEncode(req, 'ValidateWaaSVerificationNonceRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'ValidateWaaSVerificationNonceRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ValidateWaaSVerificationNonceResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } listAdoptedWallets = ( req: ListAdoptedWalletsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('ListAdoptedWallets'), - createHttpRequest(JsonEncode(req, 'ListAdoptedWalletsRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'ListAdoptedWalletsRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ListAdoptedWalletsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getLifiChains = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('GetLifiChains'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetLifiChainsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getLifiTokens = (req: GetLifiTokensRequest, headers?: object, signal?: AbortSignal): Promise => { + getLifiTokens = ( + req: GetLifiTokensRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('GetLifiTokens'), - createHttpRequest(JsonEncode(req, 'GetLifiTokensRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetLifiTokensRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetLifiTokensResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getLifiSwapRoutes = ( req: GetLifiSwapRoutesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('GetLifiSwapRoutes'), - createHttpRequest(JsonEncode(req, 'GetLifiSwapRoutesRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetLifiSwapRoutesRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetLifiSwapRoutesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getLifiSwapQuote = ( req: GetLifiSwapQuoteRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('GetLifiSwapQuote'), - createHttpRequest(JsonEncode(req, 'GetLifiSwapQuoteRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetLifiSwapQuoteRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetLifiSwapQuoteResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } listCurrencyGroups = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('ListCurrencyGroups'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ListCurrencyGroupsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } addOffchainInventory = ( req: AddOffchainInventoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('AddOffchainInventory'), - createHttpRequest(JsonEncode(req, 'AddOffchainInventoryRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'AddOffchainInventoryRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'AddOffchainInventoryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getOffchainInventory = ( req: GetOffchainInventoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('GetOffchainInventory'), - createHttpRequest(JsonEncode(req, 'GetOffchainInventoryRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetOffchainInventoryRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetOffchainInventoryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } listOffchainInventories = ( req: ListOffchainInventoriesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('ListOffchainInventories'), - createHttpRequest(JsonEncode(req, 'ListOffchainInventoriesRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'ListOffchainInventoriesRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ListOffchainInventoriesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } updateOffchainInventory = ( req: UpdateOffchainInventoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('UpdateOffchainInventory'), - createHttpRequest(JsonEncode(req, 'UpdateOffchainInventoryRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'UpdateOffchainInventoryRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UpdateOffchainInventoryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } deleteOffchainInventory = ( req: DeleteOffchainInventoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('DeleteOffchainInventory'), - createHttpRequest(JsonEncode(req, 'DeleteOffchainInventoryRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'DeleteOffchainInventoryRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'DeleteOffchainInventoryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } requestOffchainPayment = ( req: RequestOffchainPaymentRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('RequestOffchainPayment'), - createHttpRequest(JsonEncode(req, 'RequestOffchainPaymentRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'RequestOffchainPaymentRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RequestOffchainPaymentResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } listOffchainPayments = ( req: ListOffchainPaymentsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('ListOffchainPayments'), - createHttpRequest(JsonEncode(req, 'ListOffchainPaymentsRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'ListOffchainPaymentsRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ListOffchainPaymentsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } savePack = (req: SavePackRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('SavePack'), createHttpRequest(JsonEncode(req, 'SavePackRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('SavePack'), + createHttpRequest(JsonEncode(req, 'SavePackRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'SavePackResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getPack = (req: GetPackRequest, headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('GetPack'), createHttpRequest(JsonEncode(req, 'GetPackRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetPackResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getPackIds = (req: GetPackIdsRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('GetPackIds'), createHttpRequest(JsonEncode(req, 'GetPackIdsRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('GetPackIds'), + createHttpRequest(JsonEncode(req, 'GetPackIdsRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetPackIdsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } deletePack = (req: DeletePackRequest, headers?: object, signal?: AbortSignal): Promise => { - return this.fetch(this.url('DeletePack'), createHttpRequest(JsonEncode(req, 'DeletePackRequest'), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + return this.fetch( + this.url('DeletePack'), + createHttpRequest(JsonEncode(req, 'DeletePackRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'DeletePackResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } updatePackContent = ( req: UpdatePackContentRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('UpdatePackContent'), - createHttpRequest(JsonEncode(req, 'UpdatePackContentRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'UpdatePackContentRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UpdatePackContentResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getRevealTxData = (req: GetRevealTxDataRequest, headers?: object, signal?: AbortSignal): Promise => { + getRevealTxData = ( + req: GetRevealTxDataRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch( this.url('GetRevealTxData'), - createHttpRequest(JsonEncode(req, 'GetRevealTxDataRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'GetRevealTxDataRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetRevealTxDataResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } checkoutOptionsPrimary = ( req: CheckoutOptionsPrimaryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('CheckoutOptionsPrimary'), - createHttpRequest(JsonEncode(req, 'CheckoutOptionsPrimaryRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'CheckoutOptionsPrimaryRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'CheckoutOptionsPrimaryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } checkoutOptionsSecondary = ( req: CheckoutOptionsSecondaryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('CheckoutOptionsSecondary'), - createHttpRequest(JsonEncode(req, 'CheckoutOptionsSecondaryRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'CheckoutOptionsSecondaryRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'CheckoutOptionsSecondaryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } checkoutOptionsGetTransakContractID = ( req: CheckoutOptionsGetTransakContractIDRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('CheckoutOptionsGetTransakContractID'), - createHttpRequest(JsonEncode(req, 'CheckoutOptionsGetTransakContractIDRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'CheckoutOptionsGetTransakContractIDRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { - return JsonDecode(_data, 'CheckoutOptionsGetTransakContractIDResponse') + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode( + _data, + 'CheckoutOptionsGetTransakContractIDResponse', + ) + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } ) } fortePayCreateIntent = ( req: FortePayCreateIntentRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('FortePayCreateIntent'), - createHttpRequest(JsonEncode(req, 'FortePayCreateIntentRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'FortePayCreateIntentRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'FortePayCreateIntentResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } fortePayGetPaymentStatuses = ( req: FortePayGetPaymentStatusesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch( this.url('FortePayGetPaymentStatuses'), - createHttpRequest(JsonEncode(req, 'FortePayGetPaymentStatusesRequest'), headers, signal) + createHttpRequest(JsonEncode(req, 'FortePayGetPaymentStatusesRequest'), headers, signal), ).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'FortePayGetPaymentStatusesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } } @@ -3111,20 +3414,20 @@ const createHttpRequest = (body: string = '{}', headers: object = {}, signal: Ab const reqHeaders: { [key: string]: string } = { ...headers, 'Content-Type': 'application/json', - [WebrpcHeader]: WebrpcHeaderValue + [WebrpcHeader]: WebrpcHeaderValue, } return { method: 'POST', headers: reqHeaders, body, signal } } const buildResponse = (res: Response): Promise => { - return res.text().then(text => { + return res.text().then((text) => { let data try { data = JSON.parse(text) } catch (error) { throw WebrpcBadResponseError.new({ status: res.status, - cause: `JSON.parse(): ${error instanceof Error ? error.message : String(error)}: response text: ${text}` + cause: `JSON.parse(): ${error instanceof Error ? error.message : String(error)}: response text: ${text}`, }) } if (!res.ok) { @@ -3650,7 +3953,7 @@ export enum errors { Unavailable = 'Unavailable', QueryFailed = 'QueryFailed', NotFound = 'NotFound', - UnsupportedNetwork = 'UnsupportedNetwork' + UnsupportedNetwork = 'UnsupportedNetwork', } export enum WebrpcErrorCodes { @@ -3689,7 +3992,7 @@ export enum WebrpcErrorCodes { Unavailable = 2002, QueryFailed = 2003, NotFound = 3000, - UnsupportedNetwork = 3008 + UnsupportedNetwork = 3008, } export const webrpcErrorByCode: { [code: number]: any } = { @@ -3728,7 +4031,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { [2002]: UnavailableError, [2003]: QueryFailedError, [3000]: NotFoundError, - [3008]: UnsupportedNetworkError + [3008]: UnsupportedNetworkError, } // @@ -3755,7 +4058,7 @@ export function VersionFromHeader(headers: Headers): WebrpcGenVersions { codeGenName: '', codeGenVersion: '', schemaName: '', - schemaVersion: '' + schemaVersion: '', } } @@ -3770,7 +4073,7 @@ function parseWebrpcGenVersions(header: string): WebrpcGenVersions { codeGenName: '', codeGenVersion: '', schemaName: '', - schemaVersion: '' + schemaVersion: '', } } @@ -3783,6 +4086,6 @@ function parseWebrpcGenVersions(header: string): WebrpcGenVersions { codeGenName: codeGenName ?? '', codeGenVersion: codeGenVersion ?? '', schemaName: schemaName ?? '', - schemaVersion: schemaVersion ?? '' + schemaVersion: schemaVersion ?? '', } } diff --git a/packages/services/indexer/src/indexer.gen.ts b/packages/services/indexer/src/indexer.gen.ts index 354ce47e26..8dba62d16d 100644 --- a/packages/services/indexer/src/indexer.gen.ts +++ b/packages/services/indexer/src/indexer.gen.ts @@ -19,7 +19,11 @@ export const WebrpcSchemaHash = '2bca559c4c590bce7d70c33df115a58399efec82' // export interface IndexerClient { - addWebhookListener(req: AddWebhookListenerRequest, headers?: object, signal?: AbortSignal): Promise + addWebhookListener( + req: AddWebhookListenerRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * Fetches a single receipt and then will stop the subscription @@ -27,7 +31,7 @@ export interface IndexerClient { fetchTransactionReceipt( req: FetchTransactionReceiptRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -36,7 +40,7 @@ export interface IndexerClient { fetchTransactionReceiptWithFilter( req: FetchTransactionReceiptWithFilterRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -45,14 +49,18 @@ export interface IndexerClient { getAllWebhookListeners( req: GetAllWebhookListenersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** * Get balance update aggregate values -- useful for syncing balance details of a contract, ie. from Skyweaver. * Also consider using SubscribeBalanceUpdates or SubscribeEvents as other alternatives. */ - getBalanceUpdates(req: GetBalanceUpdatesRequest, headers?: object, signal?: AbortSignal): Promise + getBalanceUpdates( + req: GetBalanceUpdatesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * Get the chain ID of the indexer @@ -94,7 +102,7 @@ export interface IndexerClient { getMarketplaceOrders( req: GetMarketplaceOrdersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -118,7 +126,7 @@ export interface IndexerClient { getMarketplaceTopOrders( req: GetMarketplaceTopOrdersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -129,7 +137,7 @@ export interface IndexerClient { getNativeTokenBalance( req: GetNativeTokenBalanceRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -144,7 +152,11 @@ export interface IndexerClient { * * @deprecated GetTokenBalancesSummary */ - getTokenBalances(req: GetTokenBalancesRequest, headers?: object, signal?: AbortSignal): Promise + getTokenBalances( + req: GetTokenBalancesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * GetTokenBalancesByContract returns a balances for a specific accounts and @@ -160,7 +172,7 @@ export interface IndexerClient { getTokenBalancesByContract( req: GetTokenBalancesByContractRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -177,7 +189,7 @@ export interface IndexerClient { getTokenBalancesDetails( req: GetTokenBalancesDetailsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -194,7 +206,7 @@ export interface IndexerClient { getTokenBalancesSummary( req: GetTokenBalancesSummaryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -212,7 +224,11 @@ export interface IndexerClient { * will return just a single range from [1,100_000], but if there are gaps between the sequence, then * those will be broken into separate range entries. */ - getTokenIDRanges(req: GetTokenIDRangesRequest, headers?: object, signal?: AbortSignal): Promise + getTokenIDRanges( + req: GetTokenIDRangesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * GetTokenIDs returns the list of each individual token id for a token collection contract. @@ -228,7 +244,11 @@ export interface IndexerClient { * GetTokenSupplies returns the set of tokenIDs used by a contract address, supporting ERC-20, ERC-721, and ERC-1155 * contracts, and their respective supply as well. */ - getTokenSupplies(req: GetTokenSuppliesRequest, headers?: object, signal?: AbortSignal): Promise + getTokenSupplies( + req: GetTokenSuppliesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * GetTokenSuppliesMap returns the token supplies of ERC-20 and ERC-1155 tokens as requested in the `tokenMap` @@ -240,7 +260,7 @@ export interface IndexerClient { getTokenSuppliesMap( req: GetTokenSuppliesMapRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -250,17 +270,21 @@ export interface IndexerClient { getTransactionHistory( req: GetTransactionHistoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise - getWebhookListener(req: GetWebhookListenerRequest, headers?: object, signal?: AbortSignal): Promise + getWebhookListener( + req: GetWebhookListenerRequest, + headers?: object, + signal?: AbortSignal, + ): Promise listTokenPrices(req: ListTokenPricesRequest, headers?: object, signal?: AbortSignal): Promise pauseAllWebhookListeners( req: PauseAllWebhookListenersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -271,19 +295,19 @@ export interface IndexerClient { removeAllWebhookListeners( req: RemoveAllWebhookListenersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise removeWebhookListener( req: RemoveWebhookListenerRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise resumeAllWebhookListeners( req: ResumeAllWebhookListenersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -296,7 +320,7 @@ export interface IndexerClient { */ subscribeBalanceUpdates( req: SubscribeBalanceUpdatesRequest, - options: WebrpcStreamOptions + options: WebrpcStreamOptions, ): WebrpcStreamController /** @@ -305,14 +329,17 @@ export interface IndexerClient { * TODO: some additional options can be passed such as block, reorg true, etc. * or stay behind, etc. */ - subscribeEvents(req: SubscribeEventsRequest, options: WebrpcStreamOptions): WebrpcStreamController + subscribeEvents( + req: SubscribeEventsRequest, + options: WebrpcStreamOptions, + ): WebrpcStreamController /** * Listen to transaction receipts on-chain based on the filter criteria */ subscribeReceipts( req: SubscribeReceiptsRequest, - options: WebrpcStreamOptions + options: WebrpcStreamOptions, ): WebrpcStreamController /** @@ -326,13 +353,13 @@ export interface IndexerClient { toggleWebhookListener( req: ToggleWebhookListenerRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise updateWebhookListener( req: UpdateWebhookListenerRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -361,7 +388,7 @@ export interface Asset { export enum BackupMode { INCREMENTAL = 'INCREMENTAL', - COMPLETE = 'COMPLETE' + COMPLETE = 'COMPLETE', } export interface BloomStats { @@ -443,13 +470,13 @@ export enum ContractType { ERC721_BRIDGE = 'ERC721_BRIDGE', ERC1155_BRIDGE = 'ERC1155_BRIDGE', SEQ_MARKETPLACE = 'SEQ_MARKETPLACE', - ERC6909 = 'ERC6909' + ERC6909 = 'ERC6909', } export enum ContractVerificationStatus { VERIFIED = 'VERIFIED', UNVERIFIED = 'UNVERIFIED', - ALL = 'ALL' + ALL = 'ALL', } export interface DiskUsage { @@ -503,13 +530,13 @@ export enum EventLogDataType { EVENT = 'EVENT', TOKEN_TRANSFER = 'TOKEN_TRANSFER', NATIVE_TOKEN_TRANSFER = 'NATIVE_TOKEN_TRANSFER', - SEQUENCE_TXN = 'SEQUENCE_TXN' + SEQUENCE_TXN = 'SEQUENCE_TXN', } export enum EventLogType { UNKNOWN = 'UNKNOWN', BLOCK_ADDED = 'BLOCK_ADDED', - BLOCK_REMOVED = 'BLOCK_REMOVED' + BLOCK_REMOVED = 'BLOCK_REMOVED', } export interface GatewayBackendResponseTime { @@ -649,13 +676,13 @@ export interface NativeTokenBalance { export enum NetworkType { MAINNETS = 'MAINNETS', TESTNETS = 'TESTNETS', - ALL = 'ALL' + ALL = 'ALL', } export enum OrderStatus { OPEN = 'OPEN', CLOSED = 'CLOSED', - CANCELLED = 'CANCELLED' + CANCELLED = 'CANCELLED', } export interface Page { @@ -686,7 +713,7 @@ export interface Price { export enum ResourceStatus { NOT_AVAILABLE = 'NOT_AVAILABLE', REFRESHING = 'REFRESHING', - AVAILABLE = 'AVAILABLE' + AVAILABLE = 'AVAILABLE', } export interface RuntimeChecks { @@ -723,7 +750,7 @@ export interface SortBy { export enum SortOrder { DESC = 'DESC', - ASC = 'ASC' + ASC = 'ASC', } export interface TokenBalance { @@ -880,13 +907,13 @@ export interface TransactionReceipt { export enum TransactionStatus { FAILED = 'FAILED', - SUCCESSFUL = 'SUCCESSFUL' + SUCCESSFUL = 'SUCCESSFUL', } export enum TransactionType { LegacyTxnType = 'LegacyTxnType', AccessListTxnType = 'AccessListTxnType', - DynamicFeeTxnType = 'DynamicFeeTxnType' + DynamicFeeTxnType = 'DynamicFeeTxnType', } export interface TxnInfo { @@ -913,7 +940,7 @@ export interface TxnTransfer { export enum TxnTransferType { UNKNOWN = 'UNKNOWN', SEND = 'SEND', - RECEIVE = 'RECEIVE' + RECEIVE = 'RECEIVE', } export interface Version { @@ -1298,7 +1325,8 @@ export class Indexer implements IndexerClient { queryKey = { addWebhookListener: (req: AddWebhookListenerRequest) => ['Indexer', 'addWebhookListener', req] as const, - fetchTransactionReceipt: (req: FetchTransactionReceiptRequest) => ['Indexer', 'fetchTransactionReceipt', req] as const, + fetchTransactionReceipt: (req: FetchTransactionReceiptRequest) => + ['Indexer', 'fetchTransactionReceipt', req] as const, fetchTransactionReceiptWithFilter: (req: FetchTransactionReceiptWithFilterRequest) => ['Indexer', 'fetchTransactionReceiptWithFilter', req] as const, getAllWebhookListeners: (req: GetAllWebhookListenersRequest) => ['Indexer', 'getAllWebhookListeners', req] as const, @@ -1306,13 +1334,16 @@ export class Indexer implements IndexerClient { getChainID: () => ['Indexer', 'getChainID'] as const, getEtherBalance: (req: GetEtherBalanceRequest) => ['Indexer', 'getEtherBalance', req] as const, getMarketplaceOrders: (req: GetMarketplaceOrdersRequest) => ['Indexer', 'getMarketplaceOrders', req] as const, - getMarketplaceTopOrders: (req: GetMarketplaceTopOrdersRequest) => ['Indexer', 'getMarketplaceTopOrders', req] as const, + getMarketplaceTopOrders: (req: GetMarketplaceTopOrdersRequest) => + ['Indexer', 'getMarketplaceTopOrders', req] as const, getNativeTokenBalance: (req: GetNativeTokenBalanceRequest) => ['Indexer', 'getNativeTokenBalance', req] as const, getTokenBalances: (req: GetTokenBalancesRequest) => ['Indexer', 'getTokenBalances', req] as const, getTokenBalancesByContract: (req: GetTokenBalancesByContractRequest) => ['Indexer', 'getTokenBalancesByContract', req] as const, - getTokenBalancesDetails: (req: GetTokenBalancesDetailsRequest) => ['Indexer', 'getTokenBalancesDetails', req] as const, - getTokenBalancesSummary: (req: GetTokenBalancesSummaryRequest) => ['Indexer', 'getTokenBalancesSummary', req] as const, + getTokenBalancesDetails: (req: GetTokenBalancesDetailsRequest) => + ['Indexer', 'getTokenBalancesDetails', req] as const, + getTokenBalancesSummary: (req: GetTokenBalancesSummaryRequest) => + ['Indexer', 'getTokenBalancesSummary', req] as const, getTokenIDRanges: (req: GetTokenIDRangesRequest) => ['Indexer', 'getTokenIDRanges', req] as const, getTokenIDs: (req: GetTokenIDsRequest) => ['Indexer', 'getTokenIDs', req] as const, getTokenPrice: (req: GetTokenPriceRequest) => ['Indexer', 'getTokenPrice', req] as const, @@ -1322,626 +1353,721 @@ export class Indexer implements IndexerClient { getTransactionHistory: (req: GetTransactionHistoryRequest) => ['Indexer', 'getTransactionHistory', req] as const, getWebhookListener: (req: GetWebhookListenerRequest) => ['Indexer', 'getWebhookListener', req] as const, listTokenPrices: (req: ListTokenPricesRequest) => ['Indexer', 'listTokenPrices', req] as const, - pauseAllWebhookListeners: (req: PauseAllWebhookListenersRequest) => ['Indexer', 'pauseAllWebhookListeners', req] as const, + pauseAllWebhookListeners: (req: PauseAllWebhookListenersRequest) => + ['Indexer', 'pauseAllWebhookListeners', req] as const, ping: () => ['Indexer', 'ping'] as const, - removeAllWebhookListeners: (req: RemoveAllWebhookListenersRequest) => ['Indexer', 'removeAllWebhookListeners', req] as const, + removeAllWebhookListeners: (req: RemoveAllWebhookListenersRequest) => + ['Indexer', 'removeAllWebhookListeners', req] as const, removeWebhookListener: (req: RemoveWebhookListenerRequest) => ['Indexer', 'removeWebhookListener', req] as const, - resumeAllWebhookListeners: (req: ResumeAllWebhookListenersRequest) => ['Indexer', 'resumeAllWebhookListeners', req] as const, + resumeAllWebhookListeners: (req: ResumeAllWebhookListenersRequest) => + ['Indexer', 'resumeAllWebhookListeners', req] as const, runtimeStatus: () => ['Indexer', 'runtimeStatus'] as const, - subscribeBalanceUpdates: (req: SubscribeBalanceUpdatesRequest) => ['Indexer', 'subscribeBalanceUpdates', req] as const, + subscribeBalanceUpdates: (req: SubscribeBalanceUpdatesRequest) => + ['Indexer', 'subscribeBalanceUpdates', req] as const, subscribeEvents: (req: SubscribeEventsRequest) => ['Indexer', 'subscribeEvents', req] as const, subscribeReceipts: (req: SubscribeReceiptsRequest) => ['Indexer', 'subscribeReceipts', req] as const, syncBalance: (req: SyncBalanceRequest) => ['Indexer', 'syncBalance', req] as const, toggleWebhookListener: (req: ToggleWebhookListenerRequest) => ['Indexer', 'toggleWebhookListener', req] as const, updateWebhookListener: (req: UpdateWebhookListenerRequest) => ['Indexer', 'updateWebhookListener', req] as const, - version: () => ['Indexer', 'version'] as const + version: () => ['Indexer', 'version'] as const, } addWebhookListener = ( req: AddWebhookListenerRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('AddWebhookListener'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'AddWebhookListenerResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } fetchTransactionReceipt = ( req: FetchTransactionReceiptRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('FetchTransactionReceipt'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'FetchTransactionReceiptResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } fetchTransactionReceiptWithFilter = ( req: FetchTransactionReceiptWithFilterRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { - return this.fetch(this.url('FetchTransactionReceiptWithFilter'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { - return JsonDecode(_data, 'FetchTransactionReceiptWithFilterResponse') + return this.fetch( + this.url('FetchTransactionReceiptWithFilter'), + createHttpRequest(JsonEncode(req), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode( + _data, + 'FetchTransactionReceiptWithFilterResponse', + ) + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } ) } getAllWebhookListeners = ( req: GetAllWebhookListenersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetAllWebhookListeners'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetAllWebhookListenersResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getBalanceUpdates = ( req: GetBalanceUpdatesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetBalanceUpdates'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetBalanceUpdatesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getChainID = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('GetChainID'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetChainIDResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getEtherBalance = (req: GetEtherBalanceRequest, headers?: object, signal?: AbortSignal): Promise => { + getEtherBalance = ( + req: GetEtherBalanceRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch(this.url('GetEtherBalance'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetEtherBalanceResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getMarketplaceOrders = ( req: GetMarketplaceOrdersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetMarketplaceOrders'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetMarketplaceOrdersResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getMarketplaceTopOrders = ( req: GetMarketplaceTopOrdersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetMarketplaceTopOrders'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetMarketplaceTopOrdersResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getNativeTokenBalance = ( req: GetNativeTokenBalanceRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetNativeTokenBalance'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetNativeTokenBalanceResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenBalances = ( req: GetTokenBalancesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenBalances'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenBalancesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenBalancesByContract = ( req: GetTokenBalancesByContractRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenBalancesByContract'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenBalancesByContractResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenBalancesDetails = ( req: GetTokenBalancesDetailsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenBalancesDetails'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenBalancesDetailsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenBalancesSummary = ( req: GetTokenBalancesSummaryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenBalancesSummary'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenBalancesSummaryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenIDRanges = ( req: GetTokenIDRangesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenIDRanges'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenIDRangesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenIDs = (req: GetTokenIDsRequest, headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('GetTokenIDs'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenIDsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getTokenPrice = (req: GetTokenPriceRequest, headers?: object, signal?: AbortSignal): Promise => { + getTokenPrice = ( + req: GetTokenPriceRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch(this.url('GetTokenPrice'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenPriceResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getTokenPrices = (req: GetTokenPricesRequest, headers?: object, signal?: AbortSignal): Promise => { + getTokenPrices = ( + req: GetTokenPricesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch(this.url('GetTokenPrices'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenPricesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenSupplies = ( req: GetTokenSuppliesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenSupplies'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenSuppliesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenSuppliesMap = ( req: GetTokenSuppliesMapRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenSuppliesMap'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenSuppliesMapResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTransactionHistory = ( req: GetTransactionHistoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTransactionHistory'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTransactionHistoryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getWebhookListener = ( req: GetWebhookListenerRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetWebhookListener'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetWebhookListenerResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - listTokenPrices = (req: ListTokenPricesRequest, headers?: object, signal?: AbortSignal): Promise => { + listTokenPrices = ( + req: ListTokenPricesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch(this.url('ListTokenPrices'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ListTokenPricesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } pauseAllWebhookListeners = ( req: PauseAllWebhookListenersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('PauseAllWebhookListeners'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'PauseAllWebhookListenersResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } ping = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('Ping'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'PingResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } removeAllWebhookListeners = ( req: RemoveAllWebhookListenersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('RemoveAllWebhookListeners'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RemoveAllWebhookListenersResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } removeWebhookListener = ( req: RemoveWebhookListenerRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('RemoveWebhookListener'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RemoveWebhookListenerResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } resumeAllWebhookListeners = ( req: ResumeAllWebhookListenersRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('ResumeAllWebhookListeners'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ResumeAllWebhookListenersResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } runtimeStatus = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('RuntimeStatus'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RuntimeStatusResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } subscribeBalanceUpdates = ( req: SubscribeBalanceUpdatesRequest, - options: WebrpcStreamOptions + options: WebrpcStreamOptions, ): WebrpcStreamController => { const abortController = new AbortController() const abortSignal = abortController.signal if (options.signal) { abortSignal.addEventListener('abort', () => abortController.abort(options.signal?.reason), { - signal: options.signal + signal: options.signal, }) } const _fetch = () => - this.fetch(this.url('SubscribeBalanceUpdates'), createHttpRequest(JsonEncode(req), options.headers, abortSignal)).then( - async res => { + this.fetch( + this.url('SubscribeBalanceUpdates'), + createHttpRequest(JsonEncode(req), options.headers, abortSignal), + ).then( + async (res) => { await sseResponse(res, options, _fetch) }, - error => { + (error) => { options.onError(error, _fetch) - } + }, ) const resp = _fetch() return { abort: abortController.abort.bind(abortController), - closed: resp + closed: resp, } } subscribeEvents = ( req: SubscribeEventsRequest, - options: WebrpcStreamOptions + options: WebrpcStreamOptions, ): WebrpcStreamController => { const abortController = new AbortController() const abortSignal = abortController.signal if (options.signal) { abortSignal.addEventListener('abort', () => abortController.abort(options.signal?.reason), { - signal: options.signal + signal: options.signal, }) } const _fetch = () => this.fetch(this.url('SubscribeEvents'), createHttpRequest(JsonEncode(req), options.headers, abortSignal)).then( - async res => { + async (res) => { await sseResponse(res, options, _fetch) }, - error => { + (error) => { options.onError(error, _fetch) - } + }, ) const resp = _fetch() return { abort: abortController.abort.bind(abortController), - closed: resp + closed: resp, } } subscribeReceipts = ( req: SubscribeReceiptsRequest, - options: WebrpcStreamOptions + options: WebrpcStreamOptions, ): WebrpcStreamController => { const abortController = new AbortController() const abortSignal = abortController.signal if (options.signal) { abortSignal.addEventListener('abort', () => abortController.abort(options.signal?.reason), { - signal: options.signal + signal: options.signal, }) } const _fetch = () => this.fetch(this.url('SubscribeReceipts'), createHttpRequest(JsonEncode(req), options.headers, abortSignal)).then( - async res => { + async (res) => { await sseResponse(res, options, _fetch) }, - error => { + (error) => { options.onError(error, _fetch) - } + }, ) const resp = _fetch() return { abort: abortController.abort.bind(abortController), - closed: resp + closed: resp, } } syncBalance = (req: SyncBalanceRequest, headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('SyncBalance'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'SyncBalanceResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } toggleWebhookListener = ( req: ToggleWebhookListenerRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('ToggleWebhookListener'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'ToggleWebhookListenerResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } updateWebhookListener = ( req: UpdateWebhookListenerRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('UpdateWebhookListener'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'UpdateWebhookListenerResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } version = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('Version'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'VersionResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } } @@ -1963,9 +2089,9 @@ const sseResponse = async (res: Response, options: WebrpcStreamOptions, ret onError( WebrpcBadResponseError.new({ status: res.status, - cause: 'Invalid response, missing body' + cause: 'Invalid response, missing body', }), - retryFetch + retryFetch, ) return } @@ -1999,18 +2125,18 @@ const sseResponse = async (res: Response, options: WebrpcStreamOptions, ret onError( WebrpcClientAbortedError.new({ message: 'AbortError', - cause: `AbortError: ${error instanceof Error ? error.message : String(error)}` + cause: `AbortError: ${error instanceof Error ? error.message : String(error)}`, }), () => { throw new Error('Abort signal cannot be used to reconnect') - } + }, ) } else { onError( WebrpcStreamLostError.new({ - cause: `reader.read(): ${error instanceof Error ? error.message : String(error)}` + cause: `reader.read(): ${error instanceof Error ? error.message : String(error)}`, }), - retryFetch + retryFetch, ) } return @@ -2038,9 +2164,9 @@ const sseResponse = async (res: Response, options: WebrpcStreamOptions, ret onError( WebrpcBadResponseError.new({ status: res.status, - cause: `JSON.parse(): ${error instanceof Error ? error.message : String(error)}` + cause: `JSON.parse(): ${error instanceof Error ? error.message : String(error)}`, }), - retryFetch + retryFetch, ) } onMessage(data) @@ -2061,20 +2187,20 @@ const createHttpRequest = (body: string = '{}', headers: object = {}, signal: Ab const reqHeaders: { [key: string]: string } = { ...headers, 'Content-Type': 'application/json', - [WebrpcHeader]: WebrpcHeaderValue + [WebrpcHeader]: WebrpcHeaderValue, } return { method: 'POST', headers: reqHeaders, body, signal } } const buildResponse = (res: Response): Promise => { - return res.text().then(text => { + return res.text().then((text) => { let data try { data = JSON.parse(text) } catch (error) { throw WebrpcBadResponseError.new({ status: res.status, - cause: `JSON.parse(): ${error instanceof Error ? error.message : String(error)}: response text: ${text}` + cause: `JSON.parse(): ${error instanceof Error ? error.message : String(error)}: response text: ${text}`, }) } if (!res.ok) { @@ -2630,7 +2756,7 @@ export enum errors { Timeout = 'Timeout', Unauthorized = 'Unauthorized', UnauthorizedUser = 'UnauthorizedUser', - Unavailable = 'Unavailable' + Unavailable = 'Unavailable', } export enum WebrpcErrorCodes { @@ -2670,7 +2796,7 @@ export enum WebrpcErrorCodes { Timeout = 1900, Unauthorized = 1000, UnauthorizedUser = 1105, - Unavailable = 2002 + Unavailable = 2002, } export const webrpcErrorByCode: { [code: number]: any } = { @@ -2710,7 +2836,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { [1900]: TimeoutError, [1000]: UnauthorizedError, [1105]: UnauthorizedUserError, - [2002]: UnavailableError + [2002]: UnavailableError, } // @@ -2737,7 +2863,7 @@ export function VersionFromHeader(headers: Headers): WebrpcGenVersions { codeGenName: '', codeGenVersion: '', schemaName: '', - schemaVersion: '' + schemaVersion: '', } } @@ -2752,7 +2878,7 @@ function parseWebrpcGenVersions(header: string): WebrpcGenVersions { codeGenName: '', codeGenVersion: '', schemaName: '', - schemaVersion: '' + schemaVersion: '', } } @@ -2765,6 +2891,6 @@ function parseWebrpcGenVersions(header: string): WebrpcGenVersions { codeGenName: codeGenName ?? '', codeGenVersion: codeGenVersion ?? '', schemaName: schemaName ?? '', - schemaVersion: schemaVersion ?? '' + schemaVersion: schemaVersion ?? '', } } diff --git a/packages/services/indexer/src/indexergw.gen.ts b/packages/services/indexer/src/indexergw.gen.ts index 618a50217c..d22bc5b565 100644 --- a/packages/services/indexer/src/indexergw.gen.ts +++ b/packages/services/indexer/src/indexergw.gen.ts @@ -24,7 +24,11 @@ export interface IndexerGatewayClient { * on all indexer nodes. By default if accountAddress is left empty, it will * use the account from the jwt session. */ - getBalanceUpdates(req: GetBalanceUpdatesRequest, headers?: object, signal?: AbortSignal): Promise + getBalanceUpdates( + req: GetBalanceUpdatesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * GetChains returns a list of chains with their ID and name @@ -38,7 +42,7 @@ export interface IndexerGatewayClient { getNativeTokenBalance( req: GetNativeTokenBalanceRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -48,7 +52,11 @@ export interface IndexerGatewayClient { * * @deprecated Use GetTokenBalancesSummary or GetTokenBalancesDetails instead. */ - getTokenBalances(req: GetTokenBalancesRequest, headers?: object, signal?: AbortSignal): Promise + getTokenBalances( + req: GetTokenBalancesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise /** * GetTokenBalancesByContract returns a balances for specific accounts and @@ -58,7 +66,7 @@ export interface IndexerGatewayClient { getTokenBalancesByContract( req: GetTokenBalancesByContractRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -69,7 +77,7 @@ export interface IndexerGatewayClient { getTokenBalancesDetails( req: GetTokenBalancesDetailsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -80,7 +88,7 @@ export interface IndexerGatewayClient { getTokenBalancesSummary( req: GetTokenBalancesSummaryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise getTokenPrice(req: GetTokenPriceRequest, headers?: object, signal?: AbortSignal): Promise @@ -95,7 +103,7 @@ export interface IndexerGatewayClient { getTransactionHistory( req: GetTransactionHistoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise /** @@ -134,7 +142,7 @@ export interface Asset { export enum BackupMode { INCREMENTAL = 'INCREMENTAL', - COMPLETE = 'COMPLETE' + COMPLETE = 'COMPLETE', } export interface BloomStats { @@ -216,13 +224,13 @@ export enum ContractType { ERC721_BRIDGE = 'ERC721_BRIDGE', ERC1155_BRIDGE = 'ERC1155_BRIDGE', SEQ_MARKETPLACE = 'SEQ_MARKETPLACE', - ERC6909 = 'ERC6909' + ERC6909 = 'ERC6909', } export enum ContractVerificationStatus { VERIFIED = 'VERIFIED', UNVERIFIED = 'UNVERIFIED', - ALL = 'ALL' + ALL = 'ALL', } export interface DiskUsage { @@ -276,13 +284,13 @@ export enum EventLogDataType { EVENT = 'EVENT', TOKEN_TRANSFER = 'TOKEN_TRANSFER', NATIVE_TOKEN_TRANSFER = 'NATIVE_TOKEN_TRANSFER', - SEQUENCE_TXN = 'SEQUENCE_TXN' + SEQUENCE_TXN = 'SEQUENCE_TXN', } export enum EventLogType { UNKNOWN = 'UNKNOWN', BLOCK_ADDED = 'BLOCK_ADDED', - BLOCK_REMOVED = 'BLOCK_REMOVED' + BLOCK_REMOVED = 'BLOCK_REMOVED', } export interface GatewayBackendResponseTime { @@ -422,13 +430,13 @@ export interface NativeTokenBalance { export enum NetworkType { MAINNETS = 'MAINNETS', TESTNETS = 'TESTNETS', - ALL = 'ALL' + ALL = 'ALL', } export enum OrderStatus { OPEN = 'OPEN', CLOSED = 'CLOSED', - CANCELLED = 'CANCELLED' + CANCELLED = 'CANCELLED', } export interface Page { @@ -459,7 +467,7 @@ export interface Price { export enum ResourceStatus { NOT_AVAILABLE = 'NOT_AVAILABLE', REFRESHING = 'REFRESHING', - AVAILABLE = 'AVAILABLE' + AVAILABLE = 'AVAILABLE', } export interface RuntimeChecks { @@ -496,7 +504,7 @@ export interface SortBy { export enum SortOrder { DESC = 'DESC', - ASC = 'ASC' + ASC = 'ASC', } export interface TokenBalance { @@ -653,13 +661,13 @@ export interface TransactionReceipt { export enum TransactionStatus { FAILED = 'FAILED', - SUCCESSFUL = 'SUCCESSFUL' + SUCCESSFUL = 'SUCCESSFUL', } export enum TransactionType { LegacyTxnType = 'LegacyTxnType', AccessListTxnType = 'AccessListTxnType', - DynamicFeeTxnType = 'DynamicFeeTxnType' + DynamicFeeTxnType = 'DynamicFeeTxnType', } export interface TxnInfo { @@ -686,7 +694,7 @@ export interface TxnTransfer { export enum TxnTransferType { UNKNOWN = 'UNKNOWN', SEND = 'SEND', - RECEIVE = 'RECEIVE' + RECEIVE = 'RECEIVE', } export interface Version { @@ -884,214 +892,252 @@ export class IndexerGateway implements IndexerGatewayClient { queryKey = { getBalanceUpdates: (req: GetBalanceUpdatesRequest) => ['IndexerGateway', 'getBalanceUpdates', req] as const, getChains: (req: GetChainsRequest) => ['IndexerGateway', 'getChains', req] as const, - getNativeTokenBalance: (req: GetNativeTokenBalanceRequest) => ['IndexerGateway', 'getNativeTokenBalance', req] as const, + getNativeTokenBalance: (req: GetNativeTokenBalanceRequest) => + ['IndexerGateway', 'getNativeTokenBalance', req] as const, getTokenBalances: (req: GetTokenBalancesRequest) => ['IndexerGateway', 'getTokenBalances', req] as const, getTokenBalancesByContract: (req: GetTokenBalancesByContractRequest) => ['IndexerGateway', 'getTokenBalancesByContract', req] as const, - getTokenBalancesDetails: (req: GetTokenBalancesDetailsRequest) => ['IndexerGateway', 'getTokenBalancesDetails', req] as const, - getTokenBalancesSummary: (req: GetTokenBalancesSummaryRequest) => ['IndexerGateway', 'getTokenBalancesSummary', req] as const, + getTokenBalancesDetails: (req: GetTokenBalancesDetailsRequest) => + ['IndexerGateway', 'getTokenBalancesDetails', req] as const, + getTokenBalancesSummary: (req: GetTokenBalancesSummaryRequest) => + ['IndexerGateway', 'getTokenBalancesSummary', req] as const, getTokenPrice: (req: GetTokenPriceRequest) => ['IndexerGateway', 'getTokenPrice', req] as const, getTokenPrices: (req: GetTokenPricesRequest) => ['IndexerGateway', 'getTokenPrices', req] as const, - getTransactionHistory: (req: GetTransactionHistoryRequest) => ['IndexerGateway', 'getTransactionHistory', req] as const, + getTransactionHistory: (req: GetTransactionHistoryRequest) => + ['IndexerGateway', 'getTransactionHistory', req] as const, ping: () => ['IndexerGateway', 'ping'] as const, runtimeStatus: () => ['IndexerGateway', 'runtimeStatus'] as const, - version: () => ['IndexerGateway', 'version'] as const + version: () => ['IndexerGateway', 'version'] as const, } getBalanceUpdates = ( req: GetBalanceUpdatesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetBalanceUpdates'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetBalanceUpdatesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getChains = (req: GetChainsRequest, headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('GetChains'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetChainsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getNativeTokenBalance = ( req: GetNativeTokenBalanceRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetNativeTokenBalance'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetNativeTokenBalanceResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenBalances = ( req: GetTokenBalancesRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenBalances'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenBalancesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenBalancesByContract = ( req: GetTokenBalancesByContractRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenBalancesByContract'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenBalancesByContractResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenBalancesDetails = ( req: GetTokenBalancesDetailsRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenBalancesDetails'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenBalancesDetailsResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTokenBalancesSummary = ( req: GetTokenBalancesSummaryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTokenBalancesSummary'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenBalancesSummaryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getTokenPrice = (req: GetTokenPriceRequest, headers?: object, signal?: AbortSignal): Promise => { + getTokenPrice = ( + req: GetTokenPriceRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch(this.url('GetTokenPrice'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenPriceResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } - getTokenPrices = (req: GetTokenPricesRequest, headers?: object, signal?: AbortSignal): Promise => { + getTokenPrices = ( + req: GetTokenPricesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { return this.fetch(this.url('GetTokenPrices'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTokenPricesResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } getTransactionHistory = ( req: GetTransactionHistoryRequest, headers?: object, - signal?: AbortSignal + signal?: AbortSignal, ): Promise => { return this.fetch(this.url('GetTransactionHistory'), createHttpRequest(JsonEncode(req), headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'GetTransactionHistoryResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } ping = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('Ping'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'PingResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } runtimeStatus = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('RuntimeStatus'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'RuntimeStatusResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } version = (headers?: object, signal?: AbortSignal): Promise => { return this.fetch(this.url('Version'), createHttpRequest('{}', headers, signal)).then( - res => { - return buildResponse(res).then(_data => { + (res) => { + return buildResponse(res).then((_data) => { return JsonDecode(_data, 'VersionResponse') }) }, - error => { - throw WebrpcRequestFailedError.new({ cause: `fetch(): ${error instanceof Error ? error.message : String(error)}` }) - } + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, ) } } @@ -1100,20 +1146,20 @@ const createHttpRequest = (body: string = '{}', headers: object = {}, signal: Ab const reqHeaders: { [key: string]: string } = { ...headers, 'Content-Type': 'application/json', - [WebrpcHeader]: WebrpcHeaderValue + [WebrpcHeader]: WebrpcHeaderValue, } return { method: 'POST', headers: reqHeaders, body, signal } } const buildResponse = (res: Response): Promise => { - return res.text().then(text => { + return res.text().then((text) => { let data try { data = JSON.parse(text) } catch (error) { throw WebrpcBadResponseError.new({ status: res.status, - cause: `JSON.parse(): ${error instanceof Error ? error.message : String(error)}: response text: ${text}` + cause: `JSON.parse(): ${error instanceof Error ? error.message : String(error)}: response text: ${text}`, }) } if (!res.ok) { @@ -1652,7 +1698,7 @@ export enum errors { Timeout = 'Timeout', Unauthorized = 'Unauthorized', UnauthorizedUser = 'UnauthorizedUser', - Unavailable = 'Unavailable' + Unavailable = 'Unavailable', } export enum WebrpcErrorCodes { @@ -1692,7 +1738,7 @@ export enum WebrpcErrorCodes { Timeout = 1900, Unauthorized = 1000, UnauthorizedUser = 1105, - Unavailable = 2002 + Unavailable = 2002, } export const webrpcErrorByCode: { [code: number]: any } = { @@ -1732,7 +1778,7 @@ export const webrpcErrorByCode: { [code: number]: any } = { [1900]: TimeoutError, [1000]: UnauthorizedError, [1105]: UnauthorizedUserError, - [2002]: UnavailableError + [2002]: UnavailableError, } // @@ -1759,7 +1805,7 @@ export function VersionFromHeader(headers: Headers): WebrpcGenVersions { codeGenName: '', codeGenVersion: '', schemaName: '', - schemaVersion: '' + schemaVersion: '', } } @@ -1774,7 +1820,7 @@ function parseWebrpcGenVersions(header: string): WebrpcGenVersions { codeGenName: '', codeGenVersion: '', schemaName: '', - schemaVersion: '' + schemaVersion: '', } } @@ -1787,6 +1833,6 @@ function parseWebrpcGenVersions(header: string): WebrpcGenVersions { codeGenName: codeGenName ?? '', codeGenVersion: codeGenVersion ?? '', schemaName: schemaName ?? '', - schemaVersion: schemaVersion ?? '' + schemaVersion: schemaVersion ?? '', } } diff --git a/packages/services/relayer/test/preconditions/preconditions.test.ts b/packages/services/relayer/test/preconditions/preconditions.test.ts index 0fd12b7f77..2eee47cbad 100644 --- a/packages/services/relayer/test/preconditions/preconditions.test.ts +++ b/packages/services/relayer/test/preconditions/preconditions.test.ts @@ -9,10 +9,7 @@ import { Erc721OwnershipPrecondition, NativeBalancePrecondition, } from '../../src/preconditions/types.js' -import { - LocalRelayer, - type GenericProvider, -} from '../../src/relayer/standard/local.js' +import { LocalRelayer, type GenericProvider } from '../../src/relayer/standard/local.js' import { Network } from '@0xsequence/wallet-primitives' const CAN_RUN_LIVE = false @@ -177,8 +174,7 @@ describe('Preconditions', () => { } // getApproved returns 32-byte word: 12 zero bytes + 20-byte address. Codec uses ownerAddress as operator. - const approvedHex = - '0x' + '0'.repeat(24) + testWalletAddress.toString().slice(2).toLowerCase() + const approvedHex = '0x' + '0'.repeat(24) + testWalletAddress.toString().slice(2).toLowerCase() vi.mocked(provider.call).mockResolvedValue(approvedHex as Hex.Hex) const isValid = await relayer.checkPrecondition(transactionPrecondition) diff --git a/packages/services/relayer/test/preconditions/selectors.test.ts b/packages/services/relayer/test/preconditions/selectors.test.ts index 0cacc0e285..706642c23e 100644 --- a/packages/services/relayer/test/preconditions/selectors.test.ts +++ b/packages/services/relayer/test/preconditions/selectors.test.ts @@ -68,7 +68,12 @@ describe('Preconditions Selectors', () => { }) it('should return undefined when chainID is not present', () => { - const precondition = { type: 'native-balance', ownerAddress: TEST_ADDRESS, tokenAddress: ZERO_ADDRESS, minAmount: 1n } as TransactionPrecondition + const precondition = { + type: 'native-balance', + ownerAddress: TEST_ADDRESS, + tokenAddress: ZERO_ADDRESS, + minAmount: 1n, + } as TransactionPrecondition const chainId = extractChainID(precondition) expect(chainId).toBeUndefined() }) @@ -87,10 +92,7 @@ describe('Preconditions Selectors', () => { describe('extractSupportedPreconditions', () => { it('should extract valid preconditions', () => { - const intents: TransactionPrecondition[] = [ - nativePrecondition(), - erc20Precondition(), - ] + const intents: TransactionPrecondition[] = [nativePrecondition(), erc20Precondition()] const results = extractSupportedPreconditions(intents) expect(results).toHaveLength(2) @@ -101,7 +103,13 @@ describe('Preconditions Selectors', () => { it('should filter out invalid preconditions', () => { const intents: TransactionPrecondition[] = [ nativePrecondition(), - { type: 'unknown-type', chainId: 1, ownerAddress: TEST_ADDRESS, tokenAddress: ZERO_ADDRESS, minAmount: 0n } as TransactionPrecondition, + { + type: 'unknown-type', + chainId: 1, + ownerAddress: TEST_ADDRESS, + tokenAddress: ZERO_ADDRESS, + minAmount: 0n, + } as TransactionPrecondition, nativePrecondition({ ownerAddress: '' }), ] @@ -124,7 +132,13 @@ describe('Preconditions Selectors', () => { const intents: TransactionPrecondition[] = [ nativePrecondition(), erc721OwnershipPrecondition(), - { type: 'invalid-type', chainId: 1, ownerAddress: TEST_ADDRESS, tokenAddress: ZERO_ADDRESS, minAmount: 0n } as TransactionPrecondition, + { + type: 'invalid-type', + chainId: 1, + ownerAddress: TEST_ADDRESS, + tokenAddress: ZERO_ADDRESS, + minAmount: 0n, + } as TransactionPrecondition, ] const results = extractSupportedPreconditions(intents) @@ -151,10 +165,7 @@ describe('Preconditions Selectors', () => { }) it('should return empty array when no native balance preconditions exist', () => { - const intents: TransactionPrecondition[] = [ - erc20Precondition(), - erc721OwnershipPrecondition(), - ] + const intents: TransactionPrecondition[] = [erc20Precondition(), erc721OwnershipPrecondition()] const results = extractNativeBalancePreconditions(intents) expect(results).toEqual([]) @@ -202,10 +213,7 @@ describe('Preconditions Selectors', () => { }) it('should return empty array when no ERC20 balance preconditions exist', () => { - const intents: TransactionPrecondition[] = [ - nativePrecondition(), - erc721OwnershipPrecondition(), - ] + const intents: TransactionPrecondition[] = [nativePrecondition(), erc721OwnershipPrecondition()] const results = extractERC20BalancePreconditions(intents) expect(results).toEqual([]) From 92f48c91fbbc96a28f6828621a5fbf6d59dcb9d4 Mon Sep 17 00:00:00 2001 From: William Hua Date: Wed, 15 Apr 2026 12:29:55 -0400 Subject: [PATCH 21/43] core: arweave state reader (#991) --- .../wallet/core/src/state/arweave/arweave.ts | 115 ++ .../wallet/core/src/state/arweave/index.ts | 1006 +++++++++++++++++ .../wallet/core/src/state/arweave/schema.ts | 369 ++++++ packages/wallet/core/src/state/index.ts | 7 +- .../core/test/state/arweave/arweave.test.ts | 120 ++ 5 files changed, 1614 insertions(+), 3 deletions(-) create mode 100644 packages/wallet/core/src/state/arweave/arweave.ts create mode 100644 packages/wallet/core/src/state/arweave/index.ts create mode 100644 packages/wallet/core/src/state/arweave/schema.ts create mode 100644 packages/wallet/core/test/state/arweave/arweave.test.ts diff --git a/packages/wallet/core/src/state/arweave/arweave.ts b/packages/wallet/core/src/state/arweave/arweave.ts new file mode 100644 index 0000000000..b3cadb7340 --- /dev/null +++ b/packages/wallet/core/src/state/arweave/arweave.ts @@ -0,0 +1,115 @@ +export interface Options { + readonly namespace?: string + readonly owners?: string[] + readonly arweaveUrl?: string + readonly graphqlUrl?: string + readonly rateLimitRetryDelayMs?: number +} + +export const defaults = { + namespace: 'Sequence-Sessions', + owners: ['AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM'], + arweaveUrl: 'https://arweave.net', + graphqlUrl: 'https://arweave.net/graphql', + rateLimitRetryDelayMs: 5 * 60 * 1000, +} + +export async function findItems( + filter: { [name: string]: undefined | string | string[] }, + options?: Options & { pageSize?: number; maxResults?: number }, +): Promise<{ [id: string]: { [tag: string]: string } }> { + const namespace = options?.namespace ?? defaults.namespace + const owners = options?.owners ?? defaults.owners + const graphqlUrl = options?.graphqlUrl ?? defaults.graphqlUrl + const rateLimitRetryDelayMs = options?.rateLimitRetryDelayMs ?? defaults.rateLimitRetryDelayMs + const pageSize = options?.pageSize ?? 100 + const maxResults = options?.maxResults + + const tags = Object.entries(filter).flatMap(([name, values]) => + values === undefined + ? [] + : [ + `{ name: "${namespace ? `${namespace}-${name}` : name}", values: [${typeof values === 'string' ? `"${values}"` : values.map((value) => `"${value}"`).join(', ')}] }`, + ], + ) + + const edges: Array<{ cursor: string; node: { id: string; tags: Array<{ name: string; value: string }> } }> = [] + + for (let hasNextPage = true; hasNextPage && (maxResults === undefined || edges.length < maxResults); ) { + const results = maxResults === undefined ? pageSize : Math.min(pageSize, maxResults - edges.length) + + const query = ` + query { + transactions(sort: HEIGHT_DESC, ${edges.length ? `first: ${results}, after: "${edges[edges.length - 1]!.cursor}"` : `first: ${results}`}, tags: [${tags.join(', ')}]${owners.length ? `, owners: [${owners.map((owner) => `"${owner}"`).join(', ')}]` : ''}) { + pageInfo { + hasNextPage + } + edges { + cursor + node { + id + tags { + name + value + } + } + } + } + } + ` + + let response: Response + while (true) { + response = await fetch(graphqlUrl, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ query }), + redirect: 'follow', + }) + if (response.status !== 429) { + break + } + console.warn( + `rate limited by ${graphqlUrl}, trying again in ${rateLimitRetryDelayMs / 1000} seconds at ${new Date(Date.now() + rateLimitRetryDelayMs).toLocaleTimeString()}`, + ) + await new Promise((resolve) => setTimeout(resolve, rateLimitRetryDelayMs)) + } + + const { + data: { transactions }, + } = await response.json() + + edges.push(...transactions.edges.slice(0, results)) + + hasNextPage = transactions.pageInfo.hasNextPage + } + + return Object.fromEntries( + edges.map(({ node: { id, tags } }) => [ + id, + Object.fromEntries( + tags.map(({ name, value }) => [ + namespace && name.startsWith(`${namespace}-`) ? name.slice(namespace.length + 1) : name, + value, + ]), + ), + ]), + ) +} + +export async function fetchItem( + id: string, + rateLimitRetryDelayMs = defaults.rateLimitRetryDelayMs, + arweaveUrl = defaults.arweaveUrl, +): Promise { + while (true) { + const response = await fetch(`${arweaveUrl}/${id}`, { redirect: 'follow' }) + if (response.status !== 429) { + return response + } + console.warn( + `rate limited by ${arweaveUrl}, trying again in ${rateLimitRetryDelayMs / 1000} seconds at ${new Date(Date.now() + rateLimitRetryDelayMs).toLocaleTimeString()}`, + ) + await new Promise((resolve) => setTimeout(resolve, rateLimitRetryDelayMs)) + } +} diff --git a/packages/wallet/core/src/state/arweave/index.ts b/packages/wallet/core/src/state/arweave/index.ts new file mode 100644 index 0000000000..e0d05412d9 --- /dev/null +++ b/packages/wallet/core/src/state/arweave/index.ts @@ -0,0 +1,1006 @@ +import { + Address as SequenceAddress, + Config, + Context, + GenericTree, + Payload, + Signature, +} from '@0xsequence/wallet-primitives' +import { Address, Bytes, Hex, Signature as OxSignature } from 'ox' +import { Reader as ReaderInterface, normalizeAddressKeys } from '../index.js' +import { defaults, fetchItem, findItems, Options } from './arweave.js' +import type { + ArweaveConfigRecord, + ArweaveObject, + ArweavePayloadRecord, + ArweaveSapientSignatureRecord, + ArweaveSignatureRecord, + ArweaveTreeRecord, + ArweaveV1ConfigUpdatePayloadRecord, + ArweaveV2ConfigUpdatePayloadRecord, + ArweaveV3ConfigUpdatePayloadRecord, + ArweaveWalletRecord, + CallData, + ConfigData, + SignatureType, + TreeData, + V1ConfigData, + V2ConfigTreeData, + V2ConfigData, + V3ConfigTreeData, + V3ConfigData, +} from './schema.js' + +type ArweaveConfigUpdatePayloadRecord = + | ArweaveV1ConfigUpdatePayloadRecord + | ArweaveV2ConfigUpdatePayloadRecord + | ArweaveV3ConfigUpdatePayloadRecord + +type ItemTags = { [tag: string]: string } +type ItemEntry = { id: string; tags: ItemTags } + +type Witness = { + chainId: number + payload: Payload.Parented + signature: TSignature +} + +type WitnessMap = { + [wallet: Address.Address]: Witness +} + +type Candidate = { + nextImageHash: Hex.Hex + checkpoint: bigint + noChainId: boolean + signatureEntries: Map +} + +type TopologyChoice = { + topology: Config.Topology + weight: bigint + signatures: number + size: number + signatureMask: string +} + +type TopologyChoiceSet = { + slotCount: number + choices: Map +} + +const PLAIN_SIGNATURE_TYPES = ['eip-712', 'eth_sign', 'erc-1271'] satisfies SignatureType[] +const SAPIENT_SIGNATURE_TYPES = ['sapient', 'sapient-compact'] satisfies SignatureType[] +const PAYLOAD_VERSION_FILTER = { + 'Major-Version': '1', + 'Minor-Version': '2', +} as const + +function isSapientSignatureType(type: SignatureType): type is (typeof SAPIENT_SIGNATURE_TYPES)[number] { + return (SAPIENT_SIGNATURE_TYPES as readonly SignatureType[]).includes(type) +} + +function normalizeHex(value: Hex.Hex): Hex.Hex { + return Hex.fromBytes(Hex.toBytes(value)) +} + +function normalizeAddress(value: Address.Address): Address.Address { + return Address.checksum(value) +} + +function signerKey(address: Address.Address): string { + return normalizeAddress(address).toLowerCase() +} + +function sapientSignerKey(address: Address.Address, imageHash: Hex.Hex): string { + return `${signerKey(address)}:${normalizeHex(imageHash).toLowerCase()}` +} + +function sameAddress(left: Address.Address | undefined, right: Address.Address | undefined): boolean { + return left === undefined && right === undefined + ? true + : left !== undefined && right !== undefined && Address.isEqual(left, right) +} + +function mergeConfigurations(base: Config.Config | undefined, next: Config.Config): Config.Config { + if (!base) { + return next + } + + if ( + base.threshold !== next.threshold || + base.checkpoint !== next.checkpoint || + !sameAddress(base.checkpointer, next.checkpointer) + ) { + throw new Error('conflicting configuration metadata for the same image hash') + } + + return { + ...base, + topology: Config.mergeTopology(base.topology, next.topology), + } +} + +function fromCallData(call: CallData): Payload.Call { + return { + to: normalizeAddress(call.to), + value: BigInt(call.value), + data: normalizeHex(call.data), + gasLimit: BigInt(call.gasLimit), + delegateCall: call.delegateCall, + onlyFallback: call.onlyFallback, + behaviorOnError: call.behaviorOnError, + } +} + +function fromPayloadRecord(record: ArweavePayloadRecord): Payload.Parented { + switch (record['Payload-Type']) { + case 'calls': + return { + type: 'call', + space: BigInt(record.Space), + nonce: BigInt(record.Nonce), + calls: record.data.map(fromCallData), + } + + case 'message': + return { + type: 'message', + message: normalizeHex(record.data), + } + + case 'config update': + return { + type: 'config-update', + imageHash: normalizeHex(record['To-Config']), + } + + case 'digest': + return { + type: 'digest', + digest: normalizeHex(record.Digest), + } + } +} + +function fromTreeData(tree: TreeData): GenericTree.Tree { + if (typeof tree === 'string') { + return normalizeHex(tree) + } + + if (Array.isArray(tree)) { + return tree.map(fromTreeData) as GenericTree.Branch + } + + return { + type: 'leaf', + value: Bytes.fromHex(tree.data), + } +} + +function fromV2ConfigTree(tree: V2ConfigTreeData): Config.Topology { + if (typeof tree === 'string') { + return normalizeHex(tree) + } + + if (Array.isArray(tree)) { + return [fromV2ConfigTree(tree[0]), fromV2ConfigTree(tree[1])] + } + + if ('address' in tree) { + return { + type: 'signer', + address: normalizeAddress(tree.address), + weight: BigInt(tree.weight), + } + } + + if ('tree' in tree) { + return { + type: 'nested', + weight: BigInt(tree.weight), + threshold: BigInt(tree.threshold), + tree: fromV2ConfigTree(tree.tree), + } + } + + return { + type: 'subdigest', + digest: normalizeHex(tree.subdigest), + } +} + +function fromV3ConfigTree(tree: V3ConfigTreeData): Config.Topology { + if (typeof tree === 'string') { + return normalizeHex(tree) + } + + if (Array.isArray(tree)) { + return [fromV3ConfigTree(tree[0]), fromV3ConfigTree(tree[1])] + } + + if ('address' in tree) { + if ('imageHash' in tree) { + return { + type: 'sapient-signer', + address: normalizeAddress(tree.address), + weight: BigInt(tree.weight), + imageHash: normalizeHex(tree.imageHash), + } + } + + return { + type: 'signer', + address: normalizeAddress(tree.address), + weight: BigInt(tree.weight), + } + } + + if ('tree' in tree) { + return { + type: 'nested', + weight: BigInt(tree.weight), + threshold: BigInt(tree.threshold), + tree: fromV3ConfigTree(tree.tree), + } + } + + return { + type: 'isAnyAddress' in tree && tree.isAnyAddress ? 'any-address-subdigest' : 'subdigest', + digest: normalizeHex(tree.subdigest), + } +} + +function fromConfigData(version: '1' | '2' | '3', data: ConfigData): Config.Config { + switch (version) { + case '1': { + const v1Data = data as V1ConfigData + if (v1Data.signers.length === 0) { + throw new Error('legacy configuration cannot be empty') + } + + return { + threshold: BigInt(v1Data.threshold), + checkpoint: 0n, + topology: Config.flatLeavesToTopology( + v1Data.signers.map((signer) => ({ + type: 'signer' as const, + address: normalizeAddress(signer.address), + weight: BigInt(signer.weight), + })), + ), + } + } + + case '2': { + const v2Data = data as V2ConfigData + return { + threshold: BigInt(v2Data.threshold), + checkpoint: BigInt(v2Data.checkpoint), + topology: fromV2ConfigTree(v2Data.tree), + } + } + + case '3': { + const v3Data = data as V3ConfigData + return { + threshold: BigInt(v3Data.threshold), + checkpoint: BigInt(v3Data.checkpoint), + checkpointer: v3Data.checkpointer ? normalizeAddress(v3Data.checkpointer) : undefined, + topology: fromV3ConfigTree(v3Data.tree), + } + } + } +} + +function fromConfigCarrier( + record: + | ArweaveConfigRecord + | ArweaveConfigUpdatePayloadRecord + | Extract, +): Config.Config { + switch (record.Type) { + case 'config': + return fromConfigData(record.Version, record.data) + + case 'payload': + return fromConfigData(record['To-Version'], record.data) + + case 'wallet': + return fromConfigData(record['Deploy-Version'], record.data) + } +} + +function fromSignatureRecord(record: ArweaveSignatureRecord): Signature.SignatureOfSignerLeaf { + switch (record['Signature-Type']) { + case 'eip-712': + return { type: 'hash', ...OxSignature.from(record.data) } + + case 'eth_sign': + return { type: 'eth_sign', ...OxSignature.from(record.data) } + + case 'erc-1271': + return { + type: 'erc1271', + address: normalizeAddress(record.Signer), + data: normalizeHex(record.data), + } + + case 'sapient': + case 'sapient-compact': + throw new Error(`unexpected sapient signature type ${record['Signature-Type']}`) + } +} + +function fromSapientSignatureRecord(record: ArweaveSapientSignatureRecord): Signature.SignatureOfSapientSignerLeaf { + switch (record['Signature-Type']) { + case 'sapient': + return { + type: 'sapient', + address: normalizeAddress(record.Signer), + data: normalizeHex(record.data), + } + + case 'sapient-compact': + return { + type: 'sapient_compact', + address: normalizeAddress(record.Signer), + data: normalizeHex(record.data), + } + + case 'eip-712': + case 'eth_sign': + case 'erc-1271': + throw new Error(`unexpected plain signature type ${record['Signature-Type']}`) + } +} + +function inferContext(record: ArweaveWalletRecord): Context.Context | undefined { + if ('Context-Factory' in record) { + return { + factory: normalizeAddress(record['Context-Factory']), + stage1: normalizeAddress(record['Context-Stage-1']), + stage2: normalizeAddress(record['Context-Stage-2']), + creationCode: normalizeHex(record['Context-Creation-Code']), + } + } + + const wallet = normalizeAddress(record.Wallet) + const imageHashBytes = Bytes.fromHex(normalizeHex(record['Deploy-Config'])) + + const knownContext = Context.KnownContexts.find((context) => + Address.isEqual(SequenceAddress.from(imageHashBytes, context), wallet), + ) + + if (!knownContext) { + return undefined + } + + return { + factory: knownContext.factory, + stage1: knownContext.stage1, + stage2: knownContext.stage2, + creationCode: knownContext.creationCode, + } +} + +function toRecoveredLikeTopology(topology: Config.Topology): Config.Topology { + if (Config.isNode(topology)) { + return [toRecoveredLikeTopology(topology[0]), toRecoveredLikeTopology(topology[1])] + } + + if (Config.isSignerLeaf(topology)) { + return topology.signature ? { ...topology, signed: true } : topology + } + + if (Config.isSapientSignerLeaf(topology)) { + if (topology.signature) { + return { ...topology, signed: true } + } + + return Hex.fromBytes(Config.hashConfiguration(topology)) + } + + if (Config.isNestedLeaf(topology)) { + return { + ...topology, + tree: toRecoveredLikeTopology(topology.tree), + } + } + + return topology +} + +function fillTopologyWithSignatures( + configuration: Config.Config, + signatures: Map, +): Config.Topology { + return Signature.fillLeaves(configuration.topology, (leaf) => { + if (Config.isSapientSignerLeaf(leaf)) { + const signature = signatures.get(sapientSignerKey(leaf.address, leaf.imageHash)) + return signature && Signature.isSignatureOfSapientSignerLeaf(signature) ? signature : undefined + } + + const signature = signatures.get(signerKey(leaf.address)) + return signature && !Signature.isSignatureOfSapientSignerLeaf(signature) ? signature : undefined + }) +} + +function clampWeight(weight: bigint, cap: bigint): bigint { + return weight > cap ? cap : weight +} + +function zeroMask(length: number): string { + return '0'.repeat(length) +} + +function compareChoices(left: TopologyChoice, right: TopologyChoice): number { + if (left.signatures !== right.signatures) { + return left.signatures - right.signatures + } + + if (left.size !== right.size) { + return left.size - right.size + } + + if (left.signatureMask !== right.signatureMask) { + return left.signatureMask > right.signatureMask ? -1 : 1 + } + + return 0 +} + +function dominatesChoice(left: TopologyChoice, right: TopologyChoice): boolean { + return ( + left.weight >= right.weight && + left.signatures <= right.signatures && + left.size <= right.size && + left.signatureMask >= right.signatureMask + ) +} + +function makeChoice( + topology: Config.Topology, + weight: bigint, + signatures: number, + signatureMask: string, +): TopologyChoice { + return { + topology, + weight, + signatures, + size: Signature.encodeTopology(topology).length, + signatureMask, + } +} + +function addChoice(choiceSet: TopologyChoiceSet, choice: TopologyChoice): void { + const key = choice.weight.toString() + const existing = choiceSet.choices.get(key) + + if (!existing || compareChoices(choice, existing) < 0) { + choiceSet.choices.set(key, choice) + } +} + +function pruneChoiceSet(choiceSet: TopologyChoiceSet): TopologyChoiceSet { + const choices = [...choiceSet.choices.values()] + const pruned = new Map() + + for (const candidate of choices) { + const dominated = choices.some((other) => other !== candidate && dominatesChoice(other, candidate)) + if (!dominated) { + pruned.set(candidate.weight.toString(), candidate) + } + } + + return { ...choiceSet, choices: pruned } +} + +function buildTopologyChoiceSet(topology: Config.Topology, cap: bigint): TopologyChoiceSet { + if (Signature.isSignedSignerLeaf(topology)) { + const choices: TopologyChoiceSet = { slotCount: 1, choices: new Map() } + addChoice( + choices, + makeChoice({ type: 'signer', address: topology.address, weight: topology.weight }, 0n, 0, '0'), + ) + + if (topology.weight > 0n) { + addChoice(choices, makeChoice(topology, clampWeight(topology.weight, cap), 1, '1')) + } + + return choices + } + + if (Signature.isSignedSapientSignerLeaf(topology)) { + const choices: TopologyChoiceSet = { slotCount: 1, choices: new Map() } + addChoice(choices, makeChoice(Hex.fromBytes(Config.hashConfiguration(topology)), 0n, 0, '0')) + + if (topology.weight > 0n) { + addChoice(choices, makeChoice(topology, clampWeight(topology.weight, cap), 1, '1')) + } + + return choices + } + + if (Config.isSignerLeaf(topology)) { + return { + slotCount: 0, + choices: new Map([[0n.toString(), makeChoice(topology, 0n, 0, '')]]), + } + } + + if (Config.isSapientSignerLeaf(topology)) { + return { + slotCount: 0, + choices: new Map([[0n.toString(), makeChoice(Hex.fromBytes(Config.hashConfiguration(topology)), 0n, 0, '')]]), + } + } + + if (Config.isSubdigestLeaf(topology) || Config.isAnyAddressSubdigestLeaf(topology) || Config.isNodeLeaf(topology)) { + return { + slotCount: 0, + choices: new Map([[0n.toString(), makeChoice(topology, 0n, 0, '')]]), + } + } + + if (Config.isNestedLeaf(topology)) { + const treeChoices = buildTopologyChoiceSet(topology.tree, topology.threshold) + const choices: TopologyChoiceSet = { slotCount: treeChoices.slotCount, choices: new Map() } + addChoice(choices, makeChoice(Hex.fromBytes(Config.hashConfiguration(topology)), 0n, 0, zeroMask(treeChoices.slotCount))) + + const satisfied = treeChoices.choices.get(topology.threshold.toString()) + if (satisfied && topology.weight > 0n) { + addChoice( + choices, + makeChoice( + { ...topology, tree: satisfied.topology }, + clampWeight(topology.weight, cap), + satisfied.signatures, + satisfied.signatureMask, + ), + ) + } + + return pruneChoiceSet(choices) + } + + const leftChoices = buildTopologyChoiceSet(topology[0], cap) + const rightChoices = buildTopologyChoiceSet(topology[1], cap) + const choices: TopologyChoiceSet = { + slotCount: leftChoices.slotCount + rightChoices.slotCount, + choices: new Map(), + } + + addChoice(choices, makeChoice(Hex.fromBytes(Config.hashConfiguration(topology)), 0n, 0, zeroMask(choices.slotCount))) + + for (const leftChoice of leftChoices.choices.values()) { + for (const rightChoice of rightChoices.choices.values()) { + addChoice( + choices, + makeChoice( + [leftChoice.topology, rightChoice.topology], + clampWeight(leftChoice.weight + rightChoice.weight, cap), + leftChoice.signatures + rightChoice.signatures, + `${leftChoice.signatureMask}${rightChoice.signatureMask}`, + ), + ) + } + } + + return pruneChoiceSet(choices) +} + +function minimizeTopologyForThreshold(topology: Config.Topology, threshold: bigint): Config.Topology | undefined { + return buildTopologyChoiceSet(topology, threshold).choices.get(threshold.toString())?.topology +} + +export class Reader implements ReaderInterface { + constructor(private readonly options: Options = defaults) {} + + private async findEntries( + filter: { [name: string]: undefined | string | string[] }, + options?: { maxResults?: number }, + ): Promise { + const items = await findItems(filter, { ...this.options, maxResults: options?.maxResults }) + return Object.entries(items).map(([id, tags]) => ({ id, tags })) + } + + private async loadRecord(entry: ItemEntry): Promise { + const response = await fetchItem(entry.id, this.options.rateLimitRetryDelayMs, this.options.arweaveUrl) + if (!response.ok) { + throw new Error(`failed to fetch arweave item ${entry.id}: ${response.status}`) + } + + const data = + entry.tags['Content-Type'] === 'application/json' ? await response.json() : (await response.text()).trim() + return { ...entry.tags, data } as T + } + + private async findFirstRecord(filter: { + [name: string]: undefined | string | string[] + }): Promise { + const [entry] = await this.findEntries(filter, { maxResults: 1 }) + return entry ? this.loadRecord(entry) : undefined + } + + async getConfiguration(imageHash: Hex.Hex): Promise { + const normalizedImageHash = normalizeHex(imageHash) + const configEntries = await this.findEntries({ Type: 'config', Config: normalizedImageHash }) + + let configuration: Config.Config | undefined + + for (const record of await Promise.all(configEntries.map((entry) => this.loadRecord(entry)))) { + configuration = mergeConfigurations(configuration, fromConfigCarrier(record)) + } + + if (configuration) { + return configuration + } + + const [walletEntries, payloadEntries] = await Promise.all([ + this.findEntries({ + Type: 'wallet', + 'Deploy-Config': normalizedImageHash, + 'Deploy-Config-Attached': 'true', + }), + this.findEntries({ + Type: 'payload', + ...PAYLOAD_VERSION_FILTER, + 'Payload-Type': 'config update', + 'To-Config': normalizedImageHash, + }), + ]) + + for (const record of await Promise.all(walletEntries.map((entry) => this.loadRecord(entry)))) { + if (record['Deploy-Config-Attached'] === 'true') { + configuration = mergeConfigurations(configuration, fromConfigCarrier(record)) + } + } + + for (const record of await Promise.all( + payloadEntries.map((entry) => this.loadRecord(entry)), + )) { + configuration = mergeConfigurations(configuration, fromConfigCarrier(record)) + } + + return configuration + } + + async getDeploy(wallet: Address.Address): Promise<{ imageHash: Hex.Hex; context: Context.Context } | undefined> { + const record = await this.findFirstRecord({ + Type: 'wallet', + Wallet: normalizeAddress(wallet), + }) + + if (!record) { + return undefined + } + + const context = inferContext(record) + if (!context) { + return undefined + } + + return { + imageHash: normalizeHex(record['Deploy-Config']), + context, + } + } + + private async getWalletsGeneric( + filter: { [name: string]: undefined | string | string[] }, + signatureFrom: (record: TRecord) => TSignature, + ): Promise> { + const payloads = new Map< + Hex.Hex, + Promise<{ chainId: number; payload: Payload.Parented; wallet: Address.Address } | undefined> + >() + const response: WitnessMap = {} + + for (const entry of await this.findEntries(filter)) { + const wallet = normalizeAddress(entry.tags.Wallet as Address.Address) + if (response[wallet]) { + continue + } + + const record = await this.loadRecord(entry) + const subdigest = normalizeHex(record.Subdigest) + const payloadPromise = payloads.get(subdigest) ?? this.getPayload(subdigest) + payloads.set(subdigest, payloadPromise) + const payload = await payloadPromise + + if (!payload) { + continue + } + + response[wallet] = { + chainId: payload.chainId, + payload: payload.payload, + signature: signatureFrom(record), + } + } + + return normalizeAddressKeys(response) + } + + async getWallets(signer: Address.Address): Promise<{ + [wallet: Address.Address]: { + chainId: number + payload: Payload.Parented + signature: Signature.SignatureOfSignerLeaf + } + }> { + return this.getWalletsGeneric( + { + Type: 'signature', + Signer: normalizeAddress(signer), + Witness: 'true', + 'Signature-Type': [...PLAIN_SIGNATURE_TYPES], + }, + fromSignatureRecord, + ) + } + + async getWalletsForSapient( + signer: Address.Address, + imageHash: Hex.Hex, + ): Promise<{ + [wallet: Address.Address]: { + chainId: number + payload: Payload.Parented + signature: Signature.SignatureOfSapientSignerLeaf + } + }> { + return this.getWalletsGeneric( + { + Type: 'signature', + Signer: normalizeAddress(signer), + 'Image-Hash': normalizeHex(imageHash), + Witness: 'true', + 'Signature-Type': [...SAPIENT_SIGNATURE_TYPES], + }, + fromSapientSignatureRecord, + ) + } + + private async getWitnessGeneric( + filter: { [name: string]: undefined | string | string[] }, + signatureFrom: (record: TRecord) => TSignature, + ): Promise | undefined> { + const entries = await this.findEntries(filter) + + for (const entry of entries) { + const record = await this.loadRecord(entry) + const payload = await this.getPayload(record.Subdigest) + if (!payload) { + continue + } + + return { + chainId: payload.chainId, + payload: payload.payload, + signature: signatureFrom(record), + } + } + } + + getWitnessFor( + wallet: Address.Address, + signer: Address.Address, + ): Promise<{ chainId: number; payload: Payload.Parented; signature: Signature.SignatureOfSignerLeaf } | undefined> { + return this.getWitnessGeneric( + { + Type: 'signature', + Wallet: normalizeAddress(wallet), + Signer: normalizeAddress(signer), + Witness: 'true', + 'Signature-Type': [...PLAIN_SIGNATURE_TYPES], + }, + fromSignatureRecord, + ) + } + + getWitnessForSapient( + wallet: Address.Address, + signer: Address.Address, + imageHash: Hex.Hex, + ): Promise< + { chainId: number; payload: Payload.Parented; signature: Signature.SignatureOfSapientSignerLeaf } | undefined + > { + return this.getWitnessGeneric( + { + Type: 'signature', + Wallet: normalizeAddress(wallet), + Signer: normalizeAddress(signer), + 'Image-Hash': normalizeHex(imageHash), + Witness: 'true', + 'Signature-Type': [...SAPIENT_SIGNATURE_TYPES], + }, + fromSapientSignatureRecord, + ) + } + + async getConfigurationUpdates( + wallet: Address.Address, + fromImageHash: Hex.Hex, + options?: { allUpdates?: boolean }, + ): Promise> { + const normalizedWallet = normalizeAddress(wallet) + const signatureRecords = new Map>() + const loadSignatureRecord = (entry: ItemEntry): Promise => { + const cached = signatureRecords.get(entry.id) + if (cached) { + return cached + } + + const promise = isSapientSignatureType(entry.tags['Signature-Type'] as SignatureType) + ? this.loadRecord(entry) + : this.loadRecord(entry) + + signatureRecords.set(entry.id, promise) + return promise + } + + const updates: Array<{ imageHash: Hex.Hex; signature: Signature.RawSignature }> = [] + let currentImageHash = normalizeHex(fromImageHash) + + top: while (true) { + const currentConfig = await this.getConfiguration(currentImageHash) + if (!currentConfig) { + return updates + } + + const { signers, sapientSigners } = Config.getSigners(currentConfig) + const [plainEntries, sapientEntries] = await Promise.all([ + signers.length + ? this.findEntries({ + Type: 'config update', + Wallet: normalizedWallet, + Signer: signers.map(normalizeAddress), + 'Signature-Type': [...PLAIN_SIGNATURE_TYPES], + }) + : Promise.resolve([]), + Promise.all( + sapientSigners.map(({ address, imageHash }) => + this.findEntries({ + Type: 'config update', + Wallet: normalizedWallet, + Signer: normalizeAddress(address), + 'Image-Hash': normalizeHex(imageHash), + 'Signature-Type': [...SAPIENT_SIGNATURE_TYPES], + }), + ), + ), + ]) + + const candidates = new Map() + const addCandidate = (entry: ItemEntry, key: string) => { + const checkpoint = BigInt(entry.tags['To-Checkpoint']!) + if (checkpoint <= currentConfig.checkpoint) { + return + } + + const nextImageHash = normalizeHex(entry.tags['To-Config'] as Hex.Hex) + const candidateKey = `${checkpoint}:${nextImageHash.toLowerCase()}` + const candidate = candidates.get(candidateKey) + + if (candidate) { + if (!candidate.signatureEntries.has(key)) { + candidate.signatureEntries.set(key, entry) + } + + return + } + + candidates.set(candidateKey, { + nextImageHash, + checkpoint, + noChainId: entry.tags['Major-Version'] !== '1', + signatureEntries: new Map([[key, entry]]), + }) + } + + for (const entry of plainEntries) { + addCandidate(entry, signerKey(entry.tags.Signer as Address.Address)) + } + + for (const entries of sapientEntries) { + for (const entry of entries) { + addCandidate( + entry, + sapientSignerKey(entry.tags.Signer as Address.Address, entry.tags['Image-Hash'] as Hex.Hex), + ) + } + } + + const sortedCandidates = [...candidates.values()].sort((left, right) => { + if (left.checkpoint === right.checkpoint) { + return 0 + } + + if (options?.allUpdates) { + return left.checkpoint < right.checkpoint ? -1 : 1 + } + + return left.checkpoint > right.checkpoint ? -1 : 1 + }) + + for (const candidate of sortedCandidates) { + const signatures = new Map() + const records = await Promise.all([...candidate.signatureEntries.values()].map(loadSignatureRecord)) + + for (const record of records) { + if (isSapientSignatureType(record['Signature-Type'])) { + const sapientRecord = record as ArweaveSapientSignatureRecord + signatures.set( + sapientSignerKey(sapientRecord.Signer, sapientRecord['Image-Hash']), + fromSapientSignatureRecord(sapientRecord), + ) + } else { + signatures.set(signerKey(record.Signer), fromSignatureRecord(record as ArweaveSignatureRecord)) + } + } + + const filledTopology = fillTopologyWithSignatures(currentConfig, signatures) + const minimalTopology = minimizeTopologyForThreshold(filledTopology, currentConfig.threshold) + if (!minimalTopology) { + continue + } + + const topology = toRecoveredLikeTopology(minimalTopology) + const { weight } = Config.getWeight(topology, () => false) + if (weight < currentConfig.threshold) { + continue + } + + updates.push({ + imageHash: candidate.nextImageHash, + signature: { + noChainId: candidate.noChainId, + configuration: { + threshold: currentConfig.threshold, + checkpoint: currentConfig.checkpoint, + checkpointer: currentConfig.checkpointer, + topology, + }, + }, + }) + + currentImageHash = candidate.nextImageHash + continue top + } + + return updates + } + } + + async getTree(imageHash: Hex.Hex): Promise { + const record = await this.findFirstRecord({ + Type: 'tree', + Tree: normalizeHex(imageHash), + }) + + return record ? fromTreeData(record.data) : undefined + } + + async getPayload( + digest: Hex.Hex, + ): Promise<{ chainId: number; payload: Payload.Parented; wallet: Address.Address } | undefined> { + const record = await this.findFirstRecord({ + Type: 'payload', + ...PAYLOAD_VERSION_FILTER, + Payload: normalizeHex(digest), + }) + + if (!record) { + return undefined + } + + return { + chainId: Number(record['Chain-ID']), + payload: fromPayloadRecord(record), + wallet: normalizeAddress(record.Address), + } + } +} diff --git a/packages/wallet/core/src/state/arweave/schema.ts b/packages/wallet/core/src/state/arweave/schema.ts new file mode 100644 index 0000000000..059579cb08 --- /dev/null +++ b/packages/wallet/core/src/state/arweave/schema.ts @@ -0,0 +1,369 @@ +import { Address, Hex } from 'ox' + +export type BooleanString = 'true' | 'false' +export type IntegerString = `${number}` +export type ConfigVersion = '1' | '2' | '3' +export type WalletMajorVersion = '1' | '2' +export type PayloadType = 'calls' | 'message' | 'config update' | 'digest' +export type SignatureType = 'eip-712' | 'eth_sign' | 'erc-1271' | 'sapient' | 'sapient-compact' +export type BehaviorOnError = 'ignore' | 'revert' | 'abort' + +export interface V1ConfigSignerData { + weight: number + address: Address.Address +} + +export interface V1ConfigData { + threshold: number + signers: Array +} + +export interface V2ConfigAddressLeafData { + weight: number + address: Address.Address +} + +export interface V2ConfigNestedLeafData { + weight: number + threshold: number + tree: V2ConfigTreeData +} + +export interface V2ConfigSubdigestLeafData { + subdigest: Hex.Hex +} + +export type V2ConfigTreeData = + | Hex.Hex + | [V2ConfigTreeData, V2ConfigTreeData] + | V2ConfigAddressLeafData + | V2ConfigNestedLeafData + | V2ConfigSubdigestLeafData + +export interface V2ConfigData { + threshold: number + checkpoint: number + tree: V2ConfigTreeData +} + +export interface V3ConfigAddressLeafData { + weight: number + address: Address.Address +} + +export interface V3ConfigSapientSignerLeafData { + weight: number + address: Address.Address + imageHash: Hex.Hex +} + +export interface V3ConfigNestedLeafData { + weight: number + threshold: number + tree: V3ConfigTreeData +} + +export interface V3ConfigSubdigestLeafData { + subdigest: Hex.Hex +} + +export interface V3ConfigAnyAddressSubdigestLeafData { + subdigest: Hex.Hex + isAnyAddress: true +} + +export type V3ConfigTreeData = + | Hex.Hex + | [V3ConfigTreeData, V3ConfigTreeData] + | V3ConfigAddressLeafData + | V3ConfigSapientSignerLeafData + | V3ConfigNestedLeafData + | V3ConfigSubdigestLeafData + | V3ConfigAnyAddressSubdigestLeafData + +export interface V3ConfigData { + threshold: number + checkpoint: IntegerString + tree: V3ConfigTreeData + checkpointer?: Address.Address +} + +export type ConfigData = V1ConfigData | V2ConfigData | V3ConfigData + +export interface TreeLeafData { + data: Hex.Hex +} + +export type TreeData = Hex.Hex | TreeLeafData | Array + +export interface CallData { + to: Address.Address + value: IntegerString + data: Hex.Hex + gasLimit: IntegerString + delegateCall: boolean + onlyFallback: boolean + behaviorOnError: BehaviorOnError +} + +export interface ArweaveRecordBase< + TType extends string, + TMajorVersion extends string, + TMinorVersion extends string, + TContentType extends string, +> { + Type: TType + 'Major-Version': TMajorVersion + 'Minor-Version': TMinorVersion + 'Content-Type': TContentType +} + +export interface ArweaveConfigRecordBase extends ArweaveRecordBase<'config', '1', '0', 'application/json'> { + Config: Hex.Hex + Complete: BooleanString + 'Signers-Count': IntegerString + 'Signers-Bloom': Hex.Hex +} + +export interface ArweaveV1ConfigRecord extends ArweaveConfigRecordBase { + Version: '1' + data: V1ConfigData +} + +export interface ArweaveV2ConfigRecord extends ArweaveConfigRecordBase { + Version: '2' + data: V2ConfigData +} + +export interface ArweaveV3ConfigRecord extends ArweaveConfigRecordBase { + Version: '3' + data: V3ConfigData +} + +export type ArweaveConfigRecord = ArweaveV1ConfigRecord | ArweaveV2ConfigRecord | ArweaveV3ConfigRecord + +export interface ArweaveTreeRecord extends ArweaveRecordBase<'tree', '1', '0', 'application/json'> { + Tree: Hex.Hex + Complete: BooleanString + data: TreeData +} + +export interface ArweaveWalletRecordBase extends ArweaveRecordBase< + 'wallet', + WalletMajorVersion, + '0', + 'application/json' +> { + Wallet: Address.Address + 'Deploy-Config': Hex.Hex + 'Deploy-Version': ConfigVersion + 'Deploy-Config-Attached': BooleanString + 'Deploy-Config-Complete': BooleanString + 'Deploy-Signers-Count': IntegerString + 'Deploy-Signers-Bloom': Hex.Hex +} + +export interface ArweaveWalletDefaultContext { + 'Major-Version': '1' +} + +export interface ArweaveWalletCustomContext { + 'Major-Version': '2' + 'Context-Factory': Address.Address + 'Context-Stage-1': Address.Address + 'Context-Stage-2': Address.Address + 'Context-Guest': Address.Address + 'Context-Creation-Code': Hex.Hex +} + +export interface ArweaveWalletDetachedData { + 'Deploy-Config-Attached': 'false' + 'Deploy-Config-Complete': 'false' + data: null +} + +export interface ArweaveWalletWithV1DeployConfig { + 'Deploy-Config-Attached': 'true' + 'Deploy-Version': '1' + data: V1ConfigData +} + +export interface ArweaveWalletWithV2DeployConfig { + 'Deploy-Config-Attached': 'true' + 'Deploy-Version': '2' + data: V2ConfigData +} + +export interface ArweaveWalletWithV3DeployConfig { + 'Deploy-Config-Attached': 'true' + 'Deploy-Version': '3' + data: V3ConfigData +} + +export type ArweaveWalletRecord = ArweaveWalletRecordBase & + (ArweaveWalletDefaultContext | ArweaveWalletCustomContext) & + ( + | ArweaveWalletDetachedData + | ArweaveWalletWithV1DeployConfig + | ArweaveWalletWithV2DeployConfig + | ArweaveWalletWithV3DeployConfig + ) + +export interface ArweavePayloadRecordBase extends ArweaveRecordBase<'payload', '1', '2', 'application/json'> { + Payload: Hex.Hex + Address: Address.Address + 'Chain-ID': IntegerString + 'Payload-Type': PayloadType +} + +export interface ArweaveCallsPayloadRecord extends ArweavePayloadRecordBase { + 'Payload-Type': 'calls' + Space: IntegerString + Nonce: IntegerString + data: Array +} + +export interface ArweaveMessagePayloadRecord extends ArweavePayloadRecordBase { + 'Payload-Type': 'message' + data: Hex.Hex +} + +export interface ArweaveConfigUpdatePayloadRecordBase extends ArweavePayloadRecordBase { + 'Payload-Type': 'config update' + 'To-Config': Hex.Hex + 'To-Checkpoint': IntegerString + 'To-Config-Complete': BooleanString + 'To-Signers-Count': IntegerString + 'To-Signers-Bloom': Hex.Hex +} + +export interface ArweaveV1ConfigUpdatePayloadRecord extends ArweaveConfigUpdatePayloadRecordBase { + 'To-Version': '1' + data: V1ConfigData +} + +export interface ArweaveV2ConfigUpdatePayloadRecord extends ArweaveConfigUpdatePayloadRecordBase { + 'To-Version': '2' + data: V2ConfigData +} + +export interface ArweaveV3ConfigUpdatePayloadRecord extends ArweaveConfigUpdatePayloadRecordBase { + 'To-Version': '3' + data: V3ConfigData +} + +export interface ArweaveDigestPayloadRecord extends ArweavePayloadRecordBase { + 'Payload-Type': 'digest' + Digest: Hex.Hex + data: null +} + +export type ArweavePayloadRecord = + | ArweaveCallsPayloadRecord + | ArweaveMessagePayloadRecord + | ArweaveV1ConfigUpdatePayloadRecord + | ArweaveV2ConfigUpdatePayloadRecord + | ArweaveV3ConfigUpdatePayloadRecord + | ArweaveDigestPayloadRecord + +export interface ArweaveConfigUpdateTags { + Type: 'config update' + 'To-Config': Hex.Hex + 'To-Checkpoint': IntegerString + 'To-Config-Complete': BooleanString + 'To-Signers-Count': IntegerString + 'To-Signers-Bloom': Hex.Hex +} + +export interface ArweavePlainSignatureTags { + Type: 'signature' +} + +export interface ArweaveSignatureDigestTags { + 'Major-Version': '1' + Digest: Hex.Hex +} + +export interface ArweaveSignatureSubdigestTags { + 'Major-Version': '2' +} + +export interface ArweaveSignatureBlockTags { + 'Block-Number': IntegerString + 'Block-Hash': Hex.Hex +} + +export interface ArweaveSignatureRecordBase extends ArweaveRecordBase< + 'signature' | 'config update', + '1' | '2', + '0', + 'text/plain' +> { + 'Signature-Type': SignatureType + Signer: Address.Address + Subdigest: Hex.Hex + Wallet: Address.Address + 'Chain-ID': IntegerString + Witness: BooleanString + data: Hex.Hex +} + +export type ArweaveSignatureRecord = + | (ArweaveSignatureRecordBase & ArweavePlainSignatureTags & ArweaveSignatureDigestTags) + | (ArweaveSignatureRecordBase & ArweavePlainSignatureTags & ArweaveSignatureSubdigestTags) + | (ArweaveSignatureRecordBase & ArweavePlainSignatureTags & ArweaveSignatureDigestTags & ArweaveSignatureBlockTags) + | (ArweaveSignatureRecordBase & ArweavePlainSignatureTags & ArweaveSignatureSubdigestTags & ArweaveSignatureBlockTags) + | (ArweaveSignatureRecordBase & ArweaveConfigUpdateTags & ArweaveSignatureDigestTags) + | (ArweaveSignatureRecordBase & ArweaveConfigUpdateTags & ArweaveSignatureSubdigestTags) + | (ArweaveSignatureRecordBase & ArweaveConfigUpdateTags & ArweaveSignatureDigestTags & ArweaveSignatureBlockTags) + | (ArweaveSignatureRecordBase & ArweaveConfigUpdateTags & ArweaveSignatureSubdigestTags & ArweaveSignatureBlockTags) + +export interface ArweaveSapientSignatureRecordBase extends ArweaveRecordBase< + 'signature' | 'config update', + '2', + '0', + 'text/plain' +> { + 'Signature-Type': SignatureType + Signer: Address.Address + 'Image-Hash': Hex.Hex + Subdigest: Hex.Hex + Wallet: Address.Address + 'Chain-ID': IntegerString + 'Block-Number': IntegerString + 'Block-Hash': Hex.Hex + Witness: BooleanString + data: Hex.Hex +} + +export type ArweaveSapientSignatureRecord = + | (ArweaveSapientSignatureRecordBase & ArweavePlainSignatureTags) + | (ArweaveSapientSignatureRecordBase & ArweaveConfigUpdateTags) + +export interface ArweaveMigrationRecord extends ArweaveRecordBase<'migration', '1', '0', 'text/plain'> { + Migration: Address.Address + 'Chain-ID': IntegerString + 'From-Version': ConfigVersion + 'From-Config': Hex.Hex + 'From-Config-Complete': BooleanString + 'From-Signers-Count': IntegerString + 'From-Signers-Bloom': Hex.Hex + 'To-Version': ConfigVersion + 'To-Config': Hex.Hex + 'To-Config-Complete': BooleanString + 'To-Signers-Count': IntegerString + 'To-Signers-Bloom': Hex.Hex + Executor: Address.Address + data: Hex.Hex +} + +export type ArweaveRecord = + | ArweaveConfigRecord + | ArweaveTreeRecord + | ArweaveWalletRecord + | ArweavePayloadRecord + | ArweaveSignatureRecord + | ArweaveSapientSignatureRecord + | ArweaveMigrationRecord + +export type ArweaveObject = ArweaveRecord diff --git a/packages/wallet/core/src/state/index.ts b/packages/wallet/core/src/state/index.ts index 53e1699087..94faee061b 100644 --- a/packages/wallet/core/src/state/index.ts +++ b/packages/wallet/core/src/state/index.ts @@ -79,9 +79,10 @@ export interface Writer { export type MaybePromise = T | Promise -export * as Local from './local/index.js' +export * from './cached.js' +export * from './debug.js' export * from './utils.js' +export * as Arweave from './arweave/index.js' +export * as Local from './local/index.js' export * as Remote from './remote/index.js' -export * from './cached.js' export * as Sequence from './sequence/index.js' -export * from './debug.js' diff --git a/packages/wallet/core/test/state/arweave/arweave.test.ts b/packages/wallet/core/test/state/arweave/arweave.test.ts new file mode 100644 index 0000000000..3c7931e3e1 --- /dev/null +++ b/packages/wallet/core/test/state/arweave/arweave.test.ts @@ -0,0 +1,120 @@ +import { Address } from 'ox' +import { describe, expect, it } from 'vitest' + +import { Arweave, Reader, Sequence } from '../../../src/state/index' + +const TEST_TIMEOUT_MS = 20_000 + +const tests: { [method in keyof Reader]: { [description: string]: Parameters } } = { + getConfiguration: { + 'image hash: 0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78': [ + '0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78', + ], + }, + getDeploy: { + 'wallet: 0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE': ['0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE'], + }, + getWallets: { + 'signer: 0x94835215CaA1aD3E304F9A7E2148623fe661dEB7': ['0x94835215CaA1aD3E304F9A7E2148623fe661dEB7'], + }, + getWalletsForSapient: { + 'signer: 0x000000000000AB36D17eB1150116371520565205, image hash: 0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3': + [ + '0x000000000000AB36D17eB1150116371520565205', + '0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3', + ], + }, + getWitnessFor: { + 'wallet: 0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE, signer: 0x94835215CaA1aD3E304F9A7E2148623fe661dEB7': [ + '0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE', + '0x94835215CaA1aD3E304F9A7E2148623fe661dEB7', + ], + }, + getWitnessForSapient: { + 'wallet: 0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE, signer: 0x000000000000AB36D17eB1150116371520565205, image hash: 0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3': + [ + '0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE', + '0x000000000000AB36D17eB1150116371520565205', + '0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3', + ], + }, + getConfigurationUpdates: { + 'wallet: 0x135769a58639b4Fa7d779a9df9B57A706FBCa816, from: 0xaa14aff91091e94d7521625ab1c713273e86a8c21a0afb6cee35be28af47738a': + [ + '0x135769a58639b4Fa7d779a9df9B57A706FBCa816', + '0xaa14aff91091e94d7521625ab1c713273e86a8c21a0afb6cee35be28af47738a', + ], + }, + getTree: { + 'image hash: 0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3': [ + '0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3', + ], + }, + getPayload: { + 'calls payload: 0xc78f3951686b7f16f39e25aea1fd5acc0e2177083c170b4c962be6cd45630576': [ + '0xc78f3951686b7f16f39e25aea1fd5acc0e2177083c170b4c962be6cd45630576', + ], + 'message payload: 0x3a841ba3163a7a19cd168373df1144d38130b2f46b8d6eac956127f06fffe4f4': [ + '0x3a841ba3163a7a19cd168373df1144d38130b2f46b8d6eac956127f06fffe4f4', + ], + 'config update payload: 0xcae631660ffa90bddc5e9b4fa9c11692a53062a61640fb958f3f2959d22fe54b': [ + '0xcae631660ffa90bddc5e9b4fa9c11692a53062a61640fb958f3f2959d22fe54b', + ], + 'digest payload: 0xcd3c291e0939f029aaa4b4f292d5d2b2ce43baf98046d9abc2a3e8284b253432': [ + '0xcd3c291e0939f029aaa4b4f292d5d2b2ce43baf98046d9abc2a3e8284b253432', + ], + }, +} + +function normalize(value: any): any { + switch (typeof value) { + case 'string': + if (Address.validate(value)) { + return Address.checksum(value) + } + + break + + case 'object': + if (value === null) { + return value + } + + if (Array.isArray(value)) { + return value.map(normalize) + } + + return Object.fromEntries( + Object.entries(value) + .filter(([, value]) => value !== undefined) + .map(([key, value]) => [Address.validate(key) ? Address.checksum(key) : key, normalize(value)]), + ) + } + + return value +} + +describe('Arweave state reader', () => { + const arweave = new Arweave.Reader() + const sequence = new Sequence.Provider() + + const methods = Object.entries(tests).filter(([, methodTests]) => Object.keys(methodTests).length > 0) + if (methods.length === 0) { + it.skip('no configured test cases', () => {}) + } + + for (const [method, methodTests] of methods) { + describe(method, () => { + for (const [description, args] of Object.entries(methodTests)) { + it( + description, + async () => { + const [actual, expected] = await Promise.all([arweave[method](...args), sequence[method](...args)]) + expect(normalize(actual)).toEqual(normalize(expected)) + }, + TEST_TIMEOUT_MS, + ) + } + }) + } +}) From d3e810fd895f3177bdd82693fc61fa6fc11804d2 Mon Sep 17 00:00:00 2001 From: William Hua Date: Wed, 15 Apr 2026 12:32:33 -0400 Subject: [PATCH 22/43] pnpm format --- packages/wallet/core/src/state/arweave/index.ts | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/wallet/core/src/state/arweave/index.ts b/packages/wallet/core/src/state/arweave/index.ts index e0d05412d9..b5f3400e68 100644 --- a/packages/wallet/core/src/state/arweave/index.ts +++ b/packages/wallet/core/src/state/arweave/index.ts @@ -500,10 +500,7 @@ function pruneChoiceSet(choiceSet: TopologyChoiceSet): TopologyChoiceSet { function buildTopologyChoiceSet(topology: Config.Topology, cap: bigint): TopologyChoiceSet { if (Signature.isSignedSignerLeaf(topology)) { const choices: TopologyChoiceSet = { slotCount: 1, choices: new Map() } - addChoice( - choices, - makeChoice({ type: 'signer', address: topology.address, weight: topology.weight }, 0n, 0, '0'), - ) + addChoice(choices, makeChoice({ type: 'signer', address: topology.address, weight: topology.weight }, 0n, 0, '0')) if (topology.weight > 0n) { addChoice(choices, makeChoice(topology, clampWeight(topology.weight, cap), 1, '1')) @@ -547,7 +544,10 @@ function buildTopologyChoiceSet(topology: Config.Topology, cap: bigint): Topolog if (Config.isNestedLeaf(topology)) { const treeChoices = buildTopologyChoiceSet(topology.tree, topology.threshold) const choices: TopologyChoiceSet = { slotCount: treeChoices.slotCount, choices: new Map() } - addChoice(choices, makeChoice(Hex.fromBytes(Config.hashConfiguration(topology)), 0n, 0, zeroMask(treeChoices.slotCount))) + addChoice( + choices, + makeChoice(Hex.fromBytes(Config.hashConfiguration(topology)), 0n, 0, zeroMask(treeChoices.slotCount)), + ) const satisfied = treeChoices.choices.get(topology.threshold.toString()) if (satisfied && topology.weight > 0n) { From beca13ed7e9729fa0411fe8e149b22f2666d07bc Mon Sep 17 00:00:00 2001 From: William Hua Date: Wed, 15 Apr 2026 14:26:26 -0400 Subject: [PATCH 23/43] core: mock arweave tests --- .../core/test/state/arweave/arweave.test.ts | 116 +- .../wallet/core/test/state/arweave/recording | 2455 +++++++++++++++++ 2 files changed, 2568 insertions(+), 3 deletions(-) create mode 100644 packages/wallet/core/test/state/arweave/recording diff --git a/packages/wallet/core/test/state/arweave/arweave.test.ts b/packages/wallet/core/test/state/arweave/arweave.test.ts index 3c7931e3e1..8c7aa5cd20 100644 --- a/packages/wallet/core/test/state/arweave/arweave.test.ts +++ b/packages/wallet/core/test/state/arweave/arweave.test.ts @@ -1,9 +1,30 @@ +import { existsSync, readFileSync, writeFileSync } from 'node:fs' import { Address } from 'ox' -import { describe, expect, it } from 'vitest' +import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest' import { Arweave, Reader, Sequence } from '../../../src/state/index' const TEST_TIMEOUT_MS = 20_000 +const RECORDING_FILE = new URL('./recording', import.meta.url) + +type RecordedRequest = { + method: string + url: string + headers: Record + body: string +} + +type RecordedResponse = { + status: number + statusText: string + headers: Record + body: string +} + +type RecordingEntry = { + request: RecordedRequest + response: RecordedResponse +} const tests: { [method in keyof Reader]: { [description: string]: Parameters } } = { getConfiguration: { @@ -94,9 +115,98 @@ function normalize(value: any): any { return value } +function normalizeHeaders(headers: Headers): Record { + return Object.fromEntries([...headers.entries()].sort(([left], [right]) => left.localeCompare(right))) +} + +async function serializeRequest(input: RequestInfo | URL, init?: RequestInit): Promise { + const request = new Request(input, init) + + return { + method: request.method.toUpperCase(), + url: request.url, + headers: normalizeHeaders(request.headers), + body: request.method === 'GET' || request.method === 'HEAD' ? '' : await request.clone().text(), + } +} + +function serializeResponse(response: Response, body: string): RecordedResponse { + return { + status: response.status, + statusText: response.statusText, + headers: normalizeHeaders(response.headers), + body, + } +} + +function requestKey(request: RecordedRequest): string { + return JSON.stringify(request) +} + describe('Arweave state reader', () => { - const arweave = new Arweave.Reader() - const sequence = new Sequence.Provider() + let arweave: Arweave.Reader + let sequence: Sequence.Provider + let originalFetch: typeof globalThis.fetch | undefined + + beforeAll(() => { + originalFetch = globalThis.fetch + if (!originalFetch) { + throw new Error('fetch is not available') + } + + if (existsSync(RECORDING_FILE)) { + const entries = JSON.parse(readFileSync(RECORDING_FILE, 'utf8')) as RecordingEntry[] + const responsesByRequest = new Map() + + for (const entry of entries) { + const key = requestKey(entry.request) + const responses = responsesByRequest.get(key) + + if (responses) { + responses.push(entry.response) + } else { + responsesByRequest.set(key, [entry.response]) + } + } + + globalThis.fetch = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => { + const request = await serializeRequest(input, init) + const response = responsesByRequest.get(requestKey(request))?.shift() + + if (!response) { + throw new Error(`no recorded response for request ${JSON.stringify(request, null, 2)}`) + } + + return new Response(response.body, { + status: response.status, + statusText: response.statusText, + headers: response.headers, + }) + }) as typeof fetch + } else { + const entries: RecordingEntry[] = [] + + globalThis.fetch = vi.fn(async (input: RequestInfo | URL, init?: RequestInit) => { + const request = await serializeRequest(input, init) + const response = await originalFetch!(input, init) + const body = await response.clone().text() + + entries.push({ request, response: serializeResponse(response, body) }) + writeFileSync(RECORDING_FILE, JSON.stringify(entries, null, 2)) + + return response + }) as typeof fetch + } + + arweave = new Arweave.Reader() + sequence = new Sequence.Provider() + }) + + afterAll(() => { + if (originalFetch) { + globalThis.fetch = originalFetch + } + }) const methods = Object.entries(tests).filter(([, methodTests]) => Object.keys(methodTests).length > 0) if (methods.length === 0) { diff --git a/packages/wallet/core/test/state/arweave/recording b/packages/wallet/core/test/state/arweave/recording new file mode 100644 index 0000000000..f40e18f2e3 --- /dev/null +++ b/packages/wallet/core/test/state/arweave/recording @@ -0,0 +1,2455 @@ +[ + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Config", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"imageHash\":\"0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb2e8831a2cf-YUL", + "connection": "keep-alive", + "content-length": "888", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:24 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"version\":3,\"config\":{\"checkpoint\":\"0\",\"threshold\":2,\"tree\":[[[{\"address\":\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\",\"weight\":1},{\"address\":\"0xCD8B2b62B2EBE631C54ED0CC6F366794da6fF921\",\"weight\":1}],{\"threshold\":1,\"tree\":[{\"address\":\"0x26f3D30F41FA897309Ae804A2AFf15CEb1dA5742\",\"weight\":1},{\"address\":\"0x007a47e6BF40C1e0ed5c01aE42fDC75879140bc4\",\"weight\":1}],\"weight\":1}],[{\"threshold\":2,\"tree\":[{\"address\":\"0x00000000000030Bcc832F7d657f50D6Be35C92b3\",\"imageHash\":\"0x812f1270473f4e1def6b6a6a8c63a029f7daa9813665c9987b91d5f495e8cd87\",\"weight\":1},{\"threshold\":1,\"tree\":[{\"address\":\"0xF6Bc87F5F2edAdb66737E32D37b46423901dfEF1\",\"weight\":1},{\"address\":\"0x007a47e6BF40C1e0ed5c01aE42fDC75879140bc4\",\"weight\":1}],\"weight\":1}],\"weight\":255},{\"address\":\"0x000000000000AB36D17eB1150116371520565205\",\"imageHash\":\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\",\"weight\":255}]]}}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config\\\"] }, { name: \\\"Sequence-Sessions-Config\\\", values: [\\\"0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb2ef8f75a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:24 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=5,cfOrigin;dur=450", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kpbR2IS45A+6Ufh8O1Qh02tddaebPFaIhBE+3wUVbVfW", + "x-77-nzt-ray": "331b5e0fe1a2ac959bd7df69036d5039", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk0NTk3LCJ3VE1XLVpndWhxQzgyZGNpek5jM0ctNWF0anlOMjJ4UkxfOW8waTNHX2swIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"wTMW-ZguhqC82dcizNc3G-5atjyN22xRL_9o0i3G_k0\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Config\",\"value\":\"0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78\"},{\"name\":\"Sequence-Sessions-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Signers-Count\",\"value\":\"7\"},{\"name\":\"Sequence-Sessions-Signers-Bloom\",\"value\":\"0x0000008008000000802084048200000180000021400280141002000500020421\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/wTMW-ZguhqC82dcizNc3G-5atjyN22xRL_9o0i3G_k0", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:SnWk69XgOgnlTPEDUhZ6TNgWTJCmBUiMvvNY/xaSOxQ=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:24 GMT", + "sequence-sessions-complete": "true", + "sequence-sessions-config": "0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signers-bloom": "0x0000008008000000802084048200000180000021400280141002000500020421", + "sequence-sessions-signers-count": "7", + "sequence-sessions-type": "config", + "sequence-sessions-version": "3", + "server": "CDN77-Turbo", + "signature": "comm-d6gtbzsyiobir2md4otysq5na7mzvhkjbgdadaxlgww=:/bnk/h4oAlnZ9L4ktaWXBfj7HuyUMt6ShWgm14KRw54=:, comm-wtmw-zguhqc82dciznc3g-5atjyn22xrl_9o0i3g_k0=:0nVpmzPqHnqRks1pepdX3cbGNhqiPS6Ol/kEVmluwqYFSdXi03u6JM/dsj+O7z45yu1mJoZqr0xAdi15BEE3Exw=:", + "signature-input": "comm-d6gtbzsyiobir2md4otysq5na7mzvhkjbgdadaxlgww=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-wtmw-zguhqc82dciznc3g-5atjyn22xrl_9o0i3g_k0=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmln, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:MA, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Config:MHhmZDMyZTAxZDdlODE0MjkyZjQ5ZjU3ZTc5NzIyY2E2NjQyMzgzM2FjZjhmMjVlYmE3NzBmYWYzNDgzZmYzZTc4, 6:Sequence-Sessions-Version:Mw, 7:Sequence-Sessions-Complete:dHJ1ZQ, 8:Sequence-Sessions-Signers-Count:Nw, 9:Sequence-Sessions-Signers-Bloom:MHgwMDAwMDA4MDA4MDAwMDAwODAyMDg0MDQ4MjAwMDAwMTgwMDAwMDIxNDAwMjgwMTQxMDAyMDAwNTAwMDIwNDIx\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "knpw3SVX5Mh6YEaxRsshOVYzMudH3if+g0tVslJtIwUt8A24pg", + "x-77-nzt-ray": "8705ec3425f5520e9cd7df696bdc2d25", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"0\",\"threshold\":2,\"tree\":[[[{\"address\":\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\",\"weight\":1},{\"address\":\"0xCD8B2b62B2EBE631C54ED0CC6F366794da6fF921\",\"weight\":1}],{\"threshold\":1,\"tree\":[{\"address\":\"0x26f3D30F41FA897309Ae804A2AFf15CEb1dA5742\",\"weight\":1},{\"address\":\"0x007a47e6BF40C1e0ed5c01aE42fDC75879140bc4\",\"weight\":1}],\"weight\":1}],[{\"threshold\":2,\"tree\":[{\"address\":\"0x00000000000030Bcc832F7d657f50D6Be35C92b3\",\"imageHash\":\"0x812f1270473f4e1def6b6a6a8c63a029f7daa9813665c9987b91d5f495e8cd87\",\"weight\":1},{\"threshold\":1,\"tree\":[{\"address\":\"0xF6Bc87F5F2edAdb66737E32D37b46423901dfEF1\",\"weight\":1},{\"address\":\"0x007a47e6BF40C1e0ed5c01aE42fDC75879140bc4\",\"weight\":1}],\"weight\":1}],\"weight\":255},{\"address\":\"0x000000000000AB36D17eB1150116371520565205\",\"imageHash\":\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\",\"weight\":255}]]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/DeployHash", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"wallet\":\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb3378b3a2cf-YUL", + "connection": "keep-alive", + "content-length": "467", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:24 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"deployHash\":\"0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78\",\"context\":{\"factory\":\"0x00000000000018A77519fcCCa060c2537c9D6d3F\",\"guestModule\":\"0x0000000000006Ac72ed1d192fa28f0058D3F8806\",\"mainModule\":\"0x0000000000001f3C39d61698ab21131a12134454\",\"mainModuleUpgradable\":\"0xD0ae8eF93b7DA4eabb32Ec4d81b7a501DCa04D4C\",\"version\":3,\"walletCreationCode\":\"0x6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d30545af43d82803e903d91601f57fd5bf3\"}}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 1, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"wallet\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb339c615a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:25 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=8,cfOrigin;dur=348", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kt/gjX4CVlM2ee69NnlYVC8osIhfZGiPqYCvAJSX1XIV", + "x-77-nzt-ray": "331b5e0fe1a2ac959cd7df69011f0f2b", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":true},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk0NjE3LCItVGVjZW5JSUNIclN5ckJPMXd2VDlReTk4bXFTWms4VnZ0NkN0X0tJYlhNIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"-TecenIICHrSyrBO1wvT9Qy98mqSZk8Vvt6Ct_KIbXM\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"wallet\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\"},{\"name\":\"Sequence-Sessions-Deploy-Config\",\"value\":\"0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78\"},{\"name\":\"Sequence-Sessions-Deploy-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Deploy-Config-Attached\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Deploy-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Deploy-Signers-Count\",\"value\":\"7\"},{\"name\":\"Sequence-Sessions-Deploy-Signers-Bloom\",\"value\":\"0x0000008008000000802084048200000180000021400280141002000500020421\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-Context-Factory\",\"value\":\"0x00000000000018A77519fcCCa060c2537c9D6d3F\"},{\"name\":\"Sequence-Sessions-Context-Stage-1\",\"value\":\"0x0000000000001f3C39d61698ab21131a12134454\"},{\"name\":\"Sequence-Sessions-Context-Stage-2\",\"value\":\"0xD0ae8eF93b7DA4eabb32Ec4d81b7a501DCa04D4C\"},{\"name\":\"Sequence-Sessions-Context-Guest\",\"value\":\"0x0000000000006Ac72ed1d192fa28f0058D3F8806\"},{\"name\":\"Sequence-Sessions-Context-Creation-Code\",\"value\":\"0x6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d30545af43d82803e903d91601f57fd5bf3\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/-TecenIICHrSyrBO1wvT9Qy98mqSZk8Vvt6Ct_KIbXM", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:SnWk69XgOgnlTPEDUhZ6TNgWTJCmBUiMvvNY/xaSOxQ=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:25 GMT", + "sequence-sessions-context-creation-code": "0x6041600e3d396021805130553df33d3d36153402601f57363d3d373d363d30545af43d82803e903d91601f57fd5bf3", + "sequence-sessions-context-factory": "0x00000000000018A77519fcCCa060c2537c9D6d3F", + "sequence-sessions-context-guest": "0x0000000000006Ac72ed1d192fa28f0058D3F8806", + "sequence-sessions-context-stage-1": "0x0000000000001f3C39d61698ab21131a12134454", + "sequence-sessions-context-stage-2": "0xD0ae8eF93b7DA4eabb32Ec4d81b7a501DCa04D4C", + "sequence-sessions-deploy-config": "0xfd32e01d7e814292f49f57e79722ca66423833acf8f25eba770faf3483ff3e78", + "sequence-sessions-deploy-config-attached": "true", + "sequence-sessions-deploy-config-complete": "true", + "sequence-sessions-deploy-signers-bloom": "0x0000008008000000802084048200000180000021400280141002000500020421", + "sequence-sessions-deploy-signers-count": "7", + "sequence-sessions-deploy-version": "3", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-type": "wallet", + "sequence-sessions-wallet": "0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE", + "server": "CDN77-Turbo", + "signature": "comm--teceniichrsyrbo1wvt9qy98mqszk8vvt6ct_kibxm=:pxoQyhQGtlTMj25OLPFlmoFQD6+qgXzw9Mn/hhq2LUoqwg0JXwvxnnPPnZKa+ftI12jcxWydJUK0G6qYmqNqWxs=:, comm-qxsthx4mhrdeoltmaxgbf66wpeqlm_i5t_3mo9bfuau=:ZwH97MHIMAuwUTjyRuTtrkUiomCQM5+fS3Fj5B4XUZs=:", + "signature-input": "comm--teceniichrsyrbo1wvt9qy98mqszk8vvt6ct_kibxm=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-context-creation-code\" \"sequence-sessions-context-factory\" \"sequence-sessions-context-guest\" \"sequence-sessions-context-stage-1\" \"sequence-sessions-context-stage-2\" \"sequence-sessions-deploy-config\" \"sequence-sessions-deploy-config-attached\" \"sequence-sessions-deploy-config-complete\" \"sequence-sessions-deploy-signers-bloom\" \"sequence-sessions-deploy-signers-count\" \"sequence-sessions-deploy-version\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-type\" \"sequence-sessions-wallet\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:d2FsbGV0, 10:Sequence-Sessions-Deploy-Signers-Bloom:MHgwMDAwMDA4MDA4MDAwMDAwODAyMDg0MDQ4MjAwMDAwMTgwMDAwMDIxNDAwMjgwMTQxMDAyMDAwNTAwMDIwNDIx, 11:Sequence-Sessions-Major-Version:Mg, 12:Sequence-Sessions-Context-Factory:MHgwMDAwMDAwMDAwMDAxOEE3NzUxOWZjQ0NhMDYwYzI1MzdjOUQ2ZDNG, 13:Sequence-Sessions-Context-Stage-1:MHgwMDAwMDAwMDAwMDAxZjNDMzlkNjE2OThhYjIxMTMxYTEyMTM0NDU0, 14:Sequence-Sessions-Context-Stage-2:MHhEMGFlOGVGOTNiN0RBNGVhYmIzMkVjNGQ4MWI3YTUwMURDYTA0RDRD, 15:Sequence-Sessions-Context-Guest:MHgwMDAwMDAwMDAwMDA2QWM3MmVkMWQxOTJmYTI4ZjAwNThEM0Y4ODA2, 16:Sequence-Sessions-Context-Creation-Code:MHg2MDQxNjAwZTNkMzk2MDIxODA1MTMwNTUzZGYzM2QzZDM2MTUzNDAyNjAxZjU3MzYzZDNkMzczZDM2M2QzMDU0NWFmNDNkODI4MDNlOTAzZDkxNjAxZjU3ZmQ1YmYz, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:YXBwbGljYXRpb24vanNvbg, 4:Sequence-Sessions-Wallet:MHg0N0UwZTQ0REU2NDlCMzVDZjc4NjM5OThCZTZDNWE3RDVkOGM2M2JF, 5:Sequence-Sessions-Deploy-Config:MHhmZDMyZTAxZDdlODE0MjkyZjQ5ZjU3ZTc5NzIyY2E2NjQyMzgzM2FjZjhmMjVlYmE3NzBmYWYzNDgzZmYzZTc4, 6:Sequence-Sessions-Deploy-Version:Mw, 7:Sequence-Sessions-Deploy-Config-Attached:dHJ1ZQ, 8:Sequence-Sessions-Deploy-Config-Complete:dHJ1ZQ, 9:Sequence-Sessions-Deploy-Signers-Count:Nw\", comm-qxsthx4mhrdeoltmaxgbf66wpeqlm_i5t_3mo9bfuau=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-context-creation-code\" \"sequence-sessions-context-factory\" \"sequence-sessions-context-guest\" \"sequence-sessions-context-stage-1\" \"sequence-sessions-context-stage-2\" \"sequence-sessions-deploy-config\" \"sequence-sessions-deploy-config-attached\" \"sequence-sessions-deploy-config-complete\" \"sequence-sessions-deploy-signers-bloom\" \"sequence-sessions-deploy-signers-count\" \"sequence-sessions-deploy-version\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-type\" \"sequence-sessions-wallet\");alg=\"hmac-sha256\";keyid=\"constant:ao\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kkAzyuQWwUzYj0WpINtvDJmekDtWJOum72Ty4sJb/fWjilgW3w", + "x-77-nzt-ray": "3f9f132567ed7bbc9dd7df69cbb53410", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"0\",\"threshold\":2,\"tree\":[[[{\"address\":\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\",\"weight\":1},{\"address\":\"0xCD8B2b62B2EBE631C54ED0CC6F366794da6fF921\",\"weight\":1}],{\"threshold\":1,\"tree\":[{\"address\":\"0x26f3D30F41FA897309Ae804A2AFf15CEb1dA5742\",\"weight\":1},{\"address\":\"0x007a47e6BF40C1e0ed5c01aE42fDC75879140bc4\",\"weight\":1}],\"weight\":1}],[{\"threshold\":2,\"tree\":[{\"address\":\"0x00000000000030Bcc832F7d657f50D6Be35C92b3\",\"imageHash\":\"0x812f1270473f4e1def6b6a6a8c63a029f7daa9813665c9987b91d5f495e8cd87\",\"weight\":1},{\"threshold\":1,\"tree\":[{\"address\":\"0xF6Bc87F5F2edAdb66737E32D37b46423901dfEF1\",\"weight\":1},{\"address\":\"0x007a47e6BF40C1e0ed5c01aE42fDC75879140bc4\",\"weight\":1}],\"weight\":1}],\"weight\":255},{\"address\":\"0x000000000000AB36D17eB1150116371520565205\",\"imageHash\":\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\",\"weight\":255}]]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Wallets", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"signer\":\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb37c830a2cf-YUL", + "connection": "keep-alive", + "content-length": "772", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:25 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"wallets\":{\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\":{\"digest\":\"\",\"payload\":{\"message\":\"0x7b22616374696f6e223a22636f6e73656e742d746f2d62652d706172742d6f662d77616c6c6574222c2277616c6c6574223a22307834376530653434646536343962333563663738363339393862653663356137643564386336336265222c227369676e6572223a22307839343833353231354361413161443345333034463941374532313438363233666536363164454237222c2274696d657374616d70223a313737353539333838393336372c227369676e65724b696e64223a226c6f67696e2d676f6f676c65227d\",\"type\":\"message\"},\"toImageHash\":\"\",\"chainID\":\"0\",\"type\":\"EIP712\",\"signature\":\"0x8af459fb08d4e7c7b9189ec61aaa74f1b08664e1f415dae09e5ca026bcab63e96c7d2faad656a8c713856857243f3acb4427bf8e20b13b18d6f3474f5de9a0db1c\",\"sapientHash\":\"\",\"validOnBlockHash\":\"\"}},\"cursor\":4309735}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"signature\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\\\"] }, { name: \\\"Sequence-Sessions-Witness\\\", values: [\\\"true\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"eip-712\\\", \\\"eth_sign\\\", \\\"erc-1271\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb37ef8d5a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:25 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=9,cfOrigin;dur=251", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kn3s8DIJvjUDlJ3OTuNzNuSM4/bbBuAW3a93q34v+ryr", + "x-77-nzt-ray": "331b5e0fe1a2ac959dd7df698b4b2418", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk0NjM1LCJVZ3hGMno4MUlzZDA0b3JWVTRtS1FqSjR1R2hXaWpnSmN3SXd2R0ljUEdNIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"UgxF2z81Isd04orVU4mKQjJ4uGhWijgJcwIwvGIcPGM\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"signature\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eip-712\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/UgxF2z81Isd04orVU4mKQjJ4uGhWijgJcwIwvGIcPGM", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:DQMtV30uXskqMMCu16zNMvZyWfa6yEsZvfOQURm4xFU=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:26 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eip-712", + "sequence-sessions-signer": "0x94835215CaA1aD3E304F9A7E2148623fe661dEB7", + "sequence-sessions-subdigest": "0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107", + "sequence-sessions-type": "signature", + "sequence-sessions-wallet": "0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE", + "sequence-sessions-witness": "true", + "server": "CDN77-Turbo", + "signature": "comm-mjddmuaq1suixwpqp6yzqijq0jnz-sxkj26f3u3tipw=:TP9EhccyKY5tLhKceOrZYXdXXyqjT3DfJwn6iBwTAVk=:, comm-ugxf2z81isd04orvu4mkqjj4ughwijgjcwiwvgicpgm=:sR5lQIrliBqj6gDxCHx+VOOKwmvqSnQyKpOgtmI2bfV3ROL1TODu9BYbIgtRCXabSSfY8JufjbK/kIMaFxgG1Rw=:", + "signature-input": "comm-mjddmuaq1suixwpqp6yzqijq0jnz-sxkj26f3u3tipw=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-ugxf2z81isd04orvu4mkqjj4ughwijgjcwiwvgicpgm=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:c2lnbmF0dXJl, 10:Sequence-Sessions-Major-Version:Mg, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZWlwLTcxMg, 5:Sequence-Sessions-Signer:MHg5NDgzNTIxNUNhQTFhRDNFMzA0RjlBN0UyMTQ4NjIzZmU2NjFkRUI3, 6:Sequence-Sessions-Subdigest:MHgxZmQyYzJhZmVjZmQwMGMyOGNmZjAyZDA2MDg0ODllNDZmNzIyMjg5MTE2OTc3NGMyNGUyYjU2OGUzZTIyMTA3, 7:Sequence-Sessions-Wallet:MHg0N0UwZTQ0REU2NDlCMzVDZjc4NjM5OThCZTZDNWE3RDVkOGM2M2JF, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:dHJ1ZQ\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kkQcVZpruA8xMS3x0uudlfeLetOaOl1vUtIgg4zT7+y7NtcUQw", + "x-77-nzt-ray": "f03d0613ac3d59c59dd7df69ba83d131", + "x-77-pop": "newyorkUSNY" + }, + "body": "0x8af459fb08d4e7c7b9189ec61aaa74f1b08664e1f415dae09e5ca026bcab63e96c7d2faad656a8c713856857243f3acb4427bf8e20b13b18d6f3474f5de9a0db1c" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 1, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"payload\\\"] }, { name: \\\"Sequence-Sessions-Major-Version\\\", values: [\\\"1\\\"] }, { name: \\\"Sequence-Sessions-Minor-Version\\\", values: [\\\"2\\\"] }, { name: \\\"Sequence-Sessions-Payload\\\", values: [\\\"0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb3bdad15a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:26 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=8,cfOrigin;dur=374", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "klJ2qtcwZnoH8Z2gpSNApegfi+abKtYFw8FFk2M1CpNk", + "x-77-nzt-ray": "331b5e0fe1a2ac959ed7df693deb5502", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":true},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk2ODczLCJacEMxWDZQM2ttTUo2ZVBLRzhyZjVicEN4bjVzSlVnU2FqRGpTYlJ3ZjQ4Il0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"ZpC1X6P3kmMJ6ePKG8rf5bpCxn5sJUgSajDjSbRwf48\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"payload\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"2\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Payload\",\"value\":\"0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107\"},{\"name\":\"Sequence-Sessions-Address\",\"value\":\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Payload-Type\",\"value\":\"message\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/ZpC1X6P3kmMJ6ePKG8rf5bpCxn5sJUgSajDjSbRwf48", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:WrFeEzEBLlRPhslU5kXRAZENf+CRW4DvMJbK+3q4fBw=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:26 GMT", + "sequence-sessions-address": "0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "2", + "sequence-sessions-payload": "0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107", + "sequence-sessions-payload-type": "message", + "sequence-sessions-type": "payload", + "server": "CDN77-Turbo", + "signature": "comm-z6psoyqzpxcxfsjacq6u2tw2zwr5am0z-qxanycxlxk=:/XWIuXs2TLz6Uq6WLXmvwx3R0MrP0B8Hg/vL2cSg0tw=:, comm-zpc1x6p3kmmj6epkg8rf5bpcxn5sjugsajdjsbrwf48=:FFC2OB/9mHTDSiPM2jaM/W9DndWBvsNcKZGT81tluPk13ODkpIf8XYLaJ90yscVPami5RQscKmBY9OmxfzL3gBs=:", + "signature-input": "comm-z6psoyqzpxcxfsjacq6u2tw2zwr5am0z-qxanycxlxk=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-type\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-zpc1x6p3kmmj6epkg8rf5bpcxn5sjugsajdjsbrwf48=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-type\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:cGF5bG9hZA, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:Mg, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Payload:MHgxZmQyYzJhZmVjZmQwMGMyOGNmZjAyZDA2MDg0ODllNDZmNzIyMjg5MTE2OTc3NGMyNGUyYjU2OGUzZTIyMTA3, 6:Sequence-Sessions-Address:MHg0N0UwZTQ0REU2NDlCMzVDZjc4NjM5OThCZTZDNWE3RDVkOGM2M2JF, 7:Sequence-Sessions-Chain-ID:MA, 8:Sequence-Sessions-Payload-Type:bWVzc2FnZQ\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "klRRFUM66/ntQEiXsPNtmx1THYfl0HFEcIiLg9YiTZPnpccl+Q", + "x-77-nzt-ray": "f03d06133b5c02e39ed7df69da818923", + "x-77-pop": "newyorkUSNY" + }, + "body": "\"0x7b22616374696f6e223a22636f6e73656e742d746f2d62652d706172742d6f662d77616c6c6574222c2277616c6c6574223a22307834376530653434646536343962333563663738363339393862653663356137643564386336336265222c227369676e6572223a22307839343833353231354361413161443345333034463941374532313438363233666536363164454237222c2274696d657374616d70223a313737353539333838393336372c227369676e65724b696e64223a226c6f67696e2d676f6f676c65227d\"" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Wallets", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"signer\":\"0x000000000000AB36D17eB1150116371520565205\",\"sapientHash\":\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb3fad85a2cf-YUL", + "connection": "keep-alive", + "content-length": "25", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:26 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"wallets\":{},\"cursor\":0}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"signature\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x000000000000AB36D17eB1150116371520565205\\\"] }, { name: \\\"Sequence-Sessions-Image-Hash\\\", values: [\\\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\\\"] }, { name: \\\"Sequence-Sessions-Witness\\\", values: [\\\"true\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"sapient\\\", \\\"sapient-compact\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb3fce2c5a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:26 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=11,cfOrigin;dur=213", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "khmh6JDIHNcpGLJnUaMbETHny2ujNPAg4nL2VQbfpRJU", + "x-77-nzt-ray": "331b5e0fe1a2ac959ed7df697da8d827", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[]}}}\n" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Witness", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"signer\":\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\",\"wallet\":\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb41885ea2cf-YUL", + "connection": "keep-alive", + "content-length": "708", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:27 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"witness\":{\"digest\":\"\",\"payload\":{\"message\":\"0x7b22616374696f6e223a22636f6e73656e742d746f2d62652d706172742d6f662d77616c6c6574222c2277616c6c6574223a22307834376530653434646536343962333563663738363339393862653663356137643564386336336265222c227369676e6572223a22307839343833353231354361413161443345333034463941374532313438363233666536363164454237222c2274696d657374616d70223a313737353539333838393336372c227369676e65724b696e64223a226c6f67696e2d676f6f676c65227d\",\"type\":\"message\"},\"toImageHash\":\"\",\"chainID\":\"0\",\"type\":\"EIP712\",\"signature\":\"0x8af459fb08d4e7c7b9189ec61aaa74f1b08664e1f415dae09e5ca026bcab63e96c7d2faad656a8c713856857243f3acb4427bf8e20b13b18d6f3474f5de9a0db1c\",\"sapientHash\":\"\",\"validOnBlockHash\":\"\"}}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"signature\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\\\"] }, { name: \\\"Sequence-Sessions-Witness\\\", values: [\\\"true\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"eip-712\\\", \\\"eth_sign\\\", \\\"erc-1271\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb41af855a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:27 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=9,cfOrigin;dur=244", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kmdP+2wrt6KTzTa7i5NS39F0SWlUh55mmkJYE0vTU5j7", + "x-77-nzt-ray": "331b5e0fe1a2ac959ed7df692d4c8d39", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk0NjM1LCJVZ3hGMno4MUlzZDA0b3JWVTRtS1FqSjR1R2hXaWpnSmN3SXd2R0ljUEdNIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"UgxF2z81Isd04orVU4mKQjJ4uGhWijgJcwIwvGIcPGM\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"signature\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eip-712\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x94835215CaA1aD3E304F9A7E2148623fe661dEB7\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/UgxF2z81Isd04orVU4mKQjJ4uGhWijgJcwIwvGIcPGM", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:DQMtV30uXskqMMCu16zNMvZyWfa6yEsZvfOQURm4xFU=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:27 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eip-712", + "sequence-sessions-signer": "0x94835215CaA1aD3E304F9A7E2148623fe661dEB7", + "sequence-sessions-subdigest": "0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107", + "sequence-sessions-type": "signature", + "sequence-sessions-wallet": "0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE", + "sequence-sessions-witness": "true", + "server": "CDN77-Turbo", + "signature": "comm-mjddmuaq1suixwpqp6yzqijq0jnz-sxkj26f3u3tipw=:TP9EhccyKY5tLhKceOrZYXdXXyqjT3DfJwn6iBwTAVk=:, comm-ugxf2z81isd04orvu4mkqjj4ughwijgjcwiwvgicpgm=:sR5lQIrliBqj6gDxCHx+VOOKwmvqSnQyKpOgtmI2bfV3ROL1TODu9BYbIgtRCXabSSfY8JufjbK/kIMaFxgG1Rw=:", + "signature-input": "comm-mjddmuaq1suixwpqp6yzqijq0jnz-sxkj26f3u3tipw=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-ugxf2z81isd04orvu4mkqjj4ughwijgjcwiwvgicpgm=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:c2lnbmF0dXJl, 10:Sequence-Sessions-Major-Version:Mg, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZWlwLTcxMg, 5:Sequence-Sessions-Signer:MHg5NDgzNTIxNUNhQTFhRDNFMzA0RjlBN0UyMTQ4NjIzZmU2NjFkRUI3, 6:Sequence-Sessions-Subdigest:MHgxZmQyYzJhZmVjZmQwMGMyOGNmZjAyZDA2MDg0ODllNDZmNzIyMjg5MTE2OTc3NGMyNGUyYjU2OGUzZTIyMTA3, 7:Sequence-Sessions-Wallet:MHg0N0UwZTQ0REU2NDlCMzVDZjc4NjM5OThCZTZDNWE3RDVkOGM2M2JF, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:dHJ1ZQ\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-age": "1", + "x-77-cache": "HIT", + "x-77-nzt": "ktcsB2vBzPXSPSGPD1IQ68FPpsz0JveQuLOk4aaBYBoRC7gHow", + "x-77-nzt-ray": "f03d0613ac3d59c59fd7df692252fe12", + "x-77-pop": "newyorkUSNY" + }, + "body": "0x8af459fb08d4e7c7b9189ec61aaa74f1b08664e1f415dae09e5ca026bcab63e96c7d2faad656a8c713856857243f3acb4427bf8e20b13b18d6f3474f5de9a0db1c" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 1, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"payload\\\"] }, { name: \\\"Sequence-Sessions-Major-Version\\\", values: [\\\"1\\\"] }, { name: \\\"Sequence-Sessions-Minor-Version\\\", values: [\\\"2\\\"] }, { name: \\\"Sequence-Sessions-Payload\\\", values: [\\\"0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb3bdad15a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:27 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=8,cfOrigin;dur=374", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kmDFEymCjaCQYBxiS+RUbDG8nDrbjToz2fktrzleS5uG", + "x-77-nzt-ray": "331b5e0fe1a2ac959fd7df691b96cd15", + "x-77-pop": "montrealCAQC" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":true},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk2ODczLCJacEMxWDZQM2ttTUo2ZVBLRzhyZjVicEN4bjVzSlVnU2FqRGpTYlJ3ZjQ4Il0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"ZpC1X6P3kmMJ6ePKG8rf5bpCxn5sJUgSajDjSbRwf48\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"payload\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"2\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Payload\",\"value\":\"0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107\"},{\"name\":\"Sequence-Sessions-Address\",\"value\":\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Payload-Type\",\"value\":\"message\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/ZpC1X6P3kmMJ6ePKG8rf5bpCxn5sJUgSajDjSbRwf48", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:WrFeEzEBLlRPhslU5kXRAZENf+CRW4DvMJbK+3q4fBw=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:27 GMT", + "sequence-sessions-address": "0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "2", + "sequence-sessions-payload": "0x1fd2c2afecfd00c28cff02d0608489e46f7222891169774c24e2b568e3e22107", + "sequence-sessions-payload-type": "message", + "sequence-sessions-type": "payload", + "server": "CDN77-Turbo", + "signature": "comm-z6psoyqzpxcxfsjacq6u2tw2zwr5am0z-qxanycxlxk=:/XWIuXs2TLz6Uq6WLXmvwx3R0MrP0B8Hg/vL2cSg0tw=:, comm-zpc1x6p3kmmj6epkg8rf5bpcxn5sjugsajdjsbrwf48=:FFC2OB/9mHTDSiPM2jaM/W9DndWBvsNcKZGT81tluPk13ODkpIf8XYLaJ90yscVPami5RQscKmBY9OmxfzL3gBs=:", + "signature-input": "comm-z6psoyqzpxcxfsjacq6u2tw2zwr5am0z-qxanycxlxk=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-type\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-zpc1x6p3kmmj6epkg8rf5bpcxn5sjugsajdjsbrwf48=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-type\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:cGF5bG9hZA, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:Mg, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Payload:MHgxZmQyYzJhZmVjZmQwMGMyOGNmZjAyZDA2MDg0ODllNDZmNzIyMjg5MTE2OTc3NGMyNGUyYjU2OGUzZTIyMTA3, 6:Sequence-Sessions-Address:MHg0N0UwZTQ0REU2NDlCMzVDZjc4NjM5OThCZTZDNWE3RDVkOGM2M2JF, 7:Sequence-Sessions-Chain-ID:MA, 8:Sequence-Sessions-Payload-Type:bWVzc2FnZQ\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-age": "1", + "x-77-cache": "HIT", + "x-77-nzt": "kto/Tx3txZyfUHYUjDdHYYatpm/yIhRWCo6zu8XkeGRdMPcm8g", + "x-77-nzt-ray": "f03d06133b5c02e39fd7df691d7c821b", + "x-77-pop": "newyorkUSNY" + }, + "body": "\"0x7b22616374696f6e223a22636f6e73656e742d746f2d62652d706172742d6f662d77616c6c6574222c2277616c6c6574223a22307834376530653434646536343962333563663738363339393862653663356137643564386336336265222c227369676e6572223a22307839343833353231354361413161443345333034463941374532313438363233666536363164454237222c2274696d657374616d70223a313737353539333838393336372c227369676e65724b696e64223a226c6f67696e2d676f6f676c65227d\"" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Witness", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"signer\":\"0x000000000000AB36D17eB1150116371520565205\",\"wallet\":\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\",\"sapientHash\":\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\"}" + }, + "response": { + "status": 404, + "statusText": "Not Found", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb44cde6a2cf-YUL", + "connection": "keep-alive", + "content-length": "527", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:27 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"error\":\"NotFound\",\"code\":2,\"msg\":\"not found\",\"cause\":\"unable to find witness for sapient signer 0x000000000000ab36d17eb1150116371520565205 image hash 0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3 wallet 0x47e0e44de649b35cf7863998be6c5a7d5d8c63be: unable to find witness for sapient signer 0x000000000000ab36d17eb1150116371520565205 image hash 0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3 wallet 0x47e0e44de649b35cf7863998be6c5a7d5d8c63be: pgkit: no rows in result set\",\"status\":404}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"signature\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x47E0e44DE649B35Cf7863998Be6C5a7D5d8c63bE\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x000000000000AB36D17eB1150116371520565205\\\"] }, { name: \\\"Sequence-Sessions-Image-Hash\\\", values: [\\\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\\\"] }, { name: \\\"Sequence-Sessions-Witness\\\", values: [\\\"true\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"sapient\\\", \\\"sapient-compact\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb44fa375a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:27 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=8,cfOrigin;dur=193", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "krTnhHzpB0qpko17WyAtyDvAyvrzk2wWisOQst+mtd9e", + "x-77-nzt-ray": "331b5e0fe1a2ac959fd7df69277a2f1d", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[]}}}\n" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/ConfigUpdates", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"wallet\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\",\"fromImageHash\":\"0xaa14aff91091e94d7521625ab1c713273e86a8c21a0afb6cee35be28af47738a\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb4688b6a2cf-YUL", + "connection": "keep-alive", + "content-length": "1715", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:27 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"updates\":[{\"toImageHash\":\"0xa411f8bf05839071761a3cfece2ac3ece2a59a257d989d915068d5f7ddaab294\",\"signature\":\"0x0600017126c7b33eb2463c323d6c12e14b128c935a28d41abfa9a200c12a2c622992ee81e16f14850f8ff490fc850c4740543eb0b96ab785eec461f669fe1261001df1b1\"},{\"toImageHash\":\"0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930\",\"signature\":\"0x0601027172830470d9a9a8f28d3f7554dae9806e14f34f75ffdc8cdff62f691566ff3bb3884ff61967f0180f0c7cb56c860a97cad1c810894becfae50768e1425486d3f371116bea5f536c7745117315baef9743ed6e9bd0bb4d6b0e0dcba7fffdab393a2a50ae10f526151f937cdf8fe67f6b2199e6127e4637017bc056dd7f08d959e0981188a25af00c5590a0583c7f4d994ec87e5cde0ba2\"},{\"toImageHash\":\"0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487\",\"signature\":\"0x060502113114b2ede71533c3100842b62e3773e930989a1e71d74d840a07de51b5012bc94fcf3a7715bfa1b7845b2674874a71bef4a7f3cd269eb75136e3eadfe33931302452d1cccca8819e3f0615fb36ba71aaeb8465b70571ecd8bcb73872ad91461bba93b42b363b7048d61bc29c813ef890ae5904cb5a0bbad5796934d1c54bac5ee162dbe9acf2ad16cb34e656b4e6c3cc1880c151cf1b\"},{\"toImageHash\":\"0xd430d9d056a14a874c22b86246902a60f4b25573fbe998f1148a7e193edf69ae\",\"signature\":\"0x06060171e375fd12b814b897838f13daf9e36bd9d66c78d606580b7822c1364ae2c56ca2b87ca29afec44adba341c80b4a0b45c072087043cd123ad084c7d57ba6b4d0721107a87dc7616f121951e81a997d32ed03c38566071149fca172d48f43f8e8e45685c1581d9ab14f9fae\"},{\"toImageHash\":\"0x19b94a7bd3dfbd5af528650ff492802bfdb909aff70608684feace24f3e08a01\",\"signature\":\"0x0608011143dc62e7f055b75948ba6d0288e233027f08f4df71af1656da7ca89e388d1c500826c5d7dd0ee670f68b83615b7e1aac78b0cae4c19cdab9e9c4af8fe5564aa49b0c50fad1218023dc6e3fa87307e29b23952a757011004702aad30e9fcb3af53a635f86c4a4f0dff2ef\"}]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config\\\"] }, { name: \\\"Sequence-Sessions-Config\\\", values: [\\\"0xaa14aff91091e94d7521625ab1c713273e86a8c21a0afb6cee35be28af47738a\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb46ab715a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:28 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=8,cfOrigin;dur=281", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kof1ezmpOdlXDn9T8faYG8D1IuPZzf6IiLyidLSfg7Kc", + "x-77-nzt-ray": "331b5e0fe1a2ac959fd7df69317af82d", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJTOVNHYmpmbVdKVmxRSmxqbjZXOXBWZmthSTR4R2pkdmJaX2NzVmo1ZWlnIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"S9SGbjfmWJVlQJljn6W9pVfkaI4xGjdvbZ_csVj5eig\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Config\",\"value\":\"0xaa14aff91091e94d7521625ab1c713273e86a8c21a0afb6cee35be28af47738a\"},{\"name\":\"Sequence-Sessions-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Signers-Count\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Signers-Bloom\",\"value\":\"0x0000000000000000020001000000000000000000000408000000000000000000\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/S9SGbjfmWJVlQJljn6W9pVfkaI4xGjdvbZ_csVj5eig", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:Gv6Njbd+6bmZJQS19Kpl/N2I/J9u5zxx0RWSNateHh8=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:28 GMT", + "sequence-sessions-complete": "true", + "sequence-sessions-config": "0xaa14aff91091e94d7521625ab1c713273e86a8c21a0afb6cee35be28af47738a", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signers-bloom": "0x0000000000000000020001000000000000000000000408000000000000000000", + "sequence-sessions-signers-count": "1", + "sequence-sessions-type": "config", + "sequence-sessions-version": "3", + "server": "CDN77-Turbo", + "signature": "comm-5q2kghl8cf8zhsqsfgox1fau_q0tyzru55pwlfnbi0c=:FDu+idLtiySYuW38oIhAvf6uLQ2fMB96MlBgdXz4mtc=:, comm-s9sgbjfmwjvlqjljn6w9pvfkai4xgjdvbz_csvj5eig=:n/6B3uOAtJhxMyQAtcAGLUtoFUen3JQ8JdOYJ5z+CKBw3k3rqZJFt5KUzi53pCISKhx1I5zmYNNRyhHhSYBfAxs=:", + "signature-input": "comm-5q2kghl8cf8zhsqsfgox1fau_q0tyzru55pwlfnbi0c=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-s9sgbjfmwjvlqjljn6w9pvfkai4xgjdvbz_csvj5eig=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmln, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:MA, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Config:MHhhYTE0YWZmOTEwOTFlOTRkNzUyMTYyNWFiMWM3MTMyNzNlODZhOGMyMWEwYWZiNmNlZTM1YmUyOGFmNDc3Mzhh, 6:Sequence-Sessions-Version:Mw, 7:Sequence-Sessions-Complete:dHJ1ZQ, 8:Sequence-Sessions-Signers-Count:MQ, 9:Sequence-Sessions-Signers-Bloom:MHgwMDAwMDAwMDAwMDAwMDAwMDIwMDAxMDAwMDAwMDAwMDAwMDAwMDAwMDAwNDA4MDAwMDAwMDAwMDAwMDAwMDAw\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kiDzhOXXjZ+sIg4zjsnuzEoNTgPhUMI3GY9/WQVHZTb/t3PYgA", + "x-77-nzt-ray": "f03d0613653cfd25a0d7df69fbb68c0d", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"0\",\"threshold\":1,\"tree\":{\"address\":\"0x1494927eC78E099321151C2b9d06c5bB98a21191\",\"weight\":1}}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config update\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x1494927eC78E099321151C2b9d06c5bB98a21191\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"eip-712\\\", \\\"eth_sign\\\", \\\"erc-1271\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb4a6e725a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:28 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=175", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "knD6rYB3F2GDXZE2xiF+pjLj1xwpUGaRJTOITX3anJAL", + "x-77-nzt-ray": "331b5e0fe1a2ac95a0d7df6920e69515", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJpenQ4V3lWNDF0SkZiS1Yzdlo3cUxFLW54M05lMXVER0gycUF2SUxiUjhRIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"izt8WyV41tJFbKV3vZ7qLE-nx3Ne1uDGH2qAvILbR8Q\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x1494927eC78E099321151C2b9d06c5bB98a21191\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0xc68f343dd513b86c83a47c20218eb39d5dc7f2cfadd435c4253e268f7b7f4016\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xa411f8bf05839071761a3cfece2ac3ece2a59a257d989d915068d5f7ddaab294\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000000100000004500400000000800100000000000001080000000\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/izt8WyV41tJFbKV3vZ7qLE-nx3Ne1uDGH2qAvILbR8Q", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:5V17yO++KQTYC6pt/sLS3ygLP6/h0QJnF+9e2FHFQPY=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:28 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eth_sign", + "sequence-sessions-signer": "0x1494927eC78E099321151C2b9d06c5bB98a21191", + "sequence-sessions-subdigest": "0xc68f343dd513b86c83a47c20218eb39d5dc7f2cfadd435c4253e268f7b7f4016", + "sequence-sessions-to-checkpoint": "1", + "sequence-sessions-to-config": "0xa411f8bf05839071761a3cfece2ac3ece2a59a257d989d915068d5f7ddaab294", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0000000502000000100000004500400000000800100000000000001080000000", + "sequence-sessions-to-signers-count": "3", + "sequence-sessions-type": "config update", + "sequence-sessions-wallet": "0x135769a58639b4Fa7d779a9df9B57A706FBCa816", + "sequence-sessions-witness": "true", + "server": "CDN77-Turbo", + "signature": "comm-izt8wyv41tjfbkv3vz7qle-nx3ne1udgh2qavilbr8q=:Rtry+88OHbpQW31vhv2P+YQaydNrVPtgldw2BJqd8qsDwDsjM7vcO4Yj54LiPMkuVn9nOGv4lqfQ5ODsfhROnRs=:, comm-l89rjriyuff5qj8_r92qjquo7xjqgirvu0_lu1b29xq=:KhFweURuUOR33tKJjhlPjpOO9f8kl7fPjyLMabPjwOE=:", + "signature-input": "comm-izt8wyv41tjfbkv3vz7qle-nx3ne1udgh2qavilbr8q=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmlnIHVwZGF0ZQ, 10:Sequence-Sessions-Major-Version:Mg, 11:Sequence-Sessions-To-Config:MHhhNDExZjhiZjA1ODM5MDcxNzYxYTNjZmVjZTJhYzNlY2UyYTU5YTI1N2Q5ODlkOTE1MDY4ZDVmN2RkYWFiMjk0, 12:Sequence-Sessions-To-Checkpoint:MQ, 13:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 14:Sequence-Sessions-To-Signers-Count:Mw, 15:Sequence-Sessions-To-Signers-Bloom:MHgwMDAwMDAwNTAyMDAwMDAwMTAwMDAwMDA0NTAwNDAwMDAwMDAwODAwMTAwMDAwMDAwMDAwMDAxMDgwMDAwMDAw, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZXRoX3NpZ24, 5:Sequence-Sessions-Signer:MHgxNDk0OTI3ZUM3OEUwOTkzMjExNTFDMmI5ZDA2YzViQjk4YTIxMTkx, 6:Sequence-Sessions-Subdigest:MHhjNjhmMzQzZGQ1MTNiODZjODNhNDdjMjAyMThlYjM5ZDVkYzdmMmNmYWRkNDM1YzQyNTNlMjY4ZjdiN2Y0MDE2, 7:Sequence-Sessions-Wallet:MHgxMzU3NjlhNTg2MzliNEZhN2Q3NzlhOWRmOUI1N0E3MDZGQkNhODE2, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:dHJ1ZQ\", comm-l89rjriyuff5qj8_r92qjquo7xjqgirvu0_lu1b29xq=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kmaEcGv4HK6lYliBsjNRILzxFuSArvL/LGTD71iIv9gLs+oxXQ", + "x-77-nzt-ray": "f03d0613bf5c6c3ba0d7df69f68c742b", + "x-77-pop": "newyorkUSNY" + }, + "body": "0x26c7b33eb2463c323d6c12e14b128c935a28d41abfa9a200c12a2c622992ee81616f14850f8ff490fc850c4740543eb0b96ab785eec461f669fe1261001df1b11c" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config\\\"] }, { name: \\\"Sequence-Sessions-Config\\\", values: [\\\"0xa411f8bf05839071761a3cfece2ac3ece2a59a257d989d915068d5f7ddaab294\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb4d18905a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:29 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=8,cfOrigin;dur=185", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kjlqZaVBXeQLSEYmXiAVLejJodr3HMepIYXYP3x9MM84", + "x-77-nzt-ray": "331b5e0fe1a2ac95a0d7df69c9e72d2f", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJOWjJIWWNGZDAtOThVZExudWJLc2N1S09valJ1dGlnX1RwcC1sMkgtSWtFIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"NZ2HYcFd0-98UdLnubKscuKOojRutig_Tpp-l2H-IkE\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Config\",\"value\":\"0xa411f8bf05839071761a3cfece2ac3ece2a59a257d989d915068d5f7ddaab294\"},{\"name\":\"Sequence-Sessions-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Signers-Bloom\",\"value\":\"0x0000000502000000100000004500400000000800100000000000001080000000\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/NZ2HYcFd0-98UdLnubKscuKOojRutig_Tpp-l2H-IkE", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:SV08eWGigUB+aigp46hMh2a0MgdrwYXYXNl1hV8xqBc=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:29 GMT", + "sequence-sessions-complete": "true", + "sequence-sessions-config": "0xa411f8bf05839071761a3cfece2ac3ece2a59a257d989d915068d5f7ddaab294", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signers-bloom": "0x0000000502000000100000004500400000000800100000000000001080000000", + "sequence-sessions-signers-count": "3", + "sequence-sessions-type": "config", + "sequence-sessions-version": "3", + "server": "CDN77-Turbo", + "signature": "comm-hkjz12krcwpdpscafdqy2i1mtx_crmzwrygba7ev28i=:F016DF5NiP4rsrw3xFweRK7a6ufEShE27XbmIZ0mM0U=:, comm-nz2hycfd0-98udlnubkscukoojrutig_tpp-l2h-ike=:0szAi+qf/tbBpzdEDAb6YmZaWpdGZxgz8EwfVWItkCMqC1OCCco2um+SGlxB4upmVWuhuqvmPrd3n/r3FbIMqxs=:", + "signature-input": "comm-hkjz12krcwpdpscafdqy2i1mtx_crmzwrygba7ev28i=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-nz2hycfd0-98udlnubkscukoojrutig_tpp-l2h-ike=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmln, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:MA, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Config:MHhhNDExZjhiZjA1ODM5MDcxNzYxYTNjZmVjZTJhYzNlY2UyYTU5YTI1N2Q5ODlkOTE1MDY4ZDVmN2RkYWFiMjk0, 6:Sequence-Sessions-Version:Mw, 7:Sequence-Sessions-Complete:dHJ1ZQ, 8:Sequence-Sessions-Signers-Count:Mw, 9:Sequence-Sessions-Signers-Bloom:MHgwMDAwMDAwNTAyMDAwMDAwMTAwMDAwMDA0NTAwNDAwMDAwMDAwODAwMTAwMDAwMDAwMDAwMDAxMDgwMDAwMDAw\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "khsoikltqnrtzOqDWKW2HYe5dYh3rJZRF4vNeKiJmIIu4/HoPA", + "x-77-nzt-ray": "3f9f1325610a726ea1d7df69ec8dcd08", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"1\",\"threshold\":2,\"tree\":[[{\"address\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\",\"weight\":1},{\"address\":\"0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548\",\"weight\":1}],{\"address\":\"0x88A25Af00C5590a0583c7F4d994Ec87E5Cde0bA2\",\"weight\":1}]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config update\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x3114b2Ede71533C3100842B62e3773e930989A1E\\\", \\\"0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548\\\", \\\"0x88A25Af00C5590a0583c7F4d994Ec87E5Cde0bA2\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"eip-712\\\", \\\"eth_sign\\\", \\\"erc-1271\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb4fbaa55a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:29 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=220", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "koCOMWdJBLCcnc0fzZurVvjw4i3Nn0rg5nRirg2TFixh", + "x-77-nzt-ray": "331b5e0fe1a2ac95a1d7df6936d7fc0c", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCI0VjZoTjI4M29XWW9WTFhwRGE5MGxIeTUtNEN0VmZFTlMzMjB4eXJobWxjIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"4V6hN283oWYoVLXpDa90lHy5-4CtVfENS320xyrhmlc\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x88A25Af00C5590a0583c7F4d994Ec87E5Cde0bA2\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x58d9ed51710c4e5de31ea3e486cbb6e45f204e9dd9a97ce49e354c19f12cf716\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xaa0482c0c3f36dc41941c9fde395fe7f77775353d7ace363df4f6a924cde404d\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000000100000004000400000000800100000000000100000002014\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJEX0huLUZETFJIeThORjFWN1BGOTI1dFlEZ3paSTVYWng2NFdDckhUd1ZzIl0sImluZGV4IjoxfQ==\",\"node\":{\"id\":\"D_Hn-FDLRHy8NF1V7PF925tYDgzZI5XZx64WCrHTwVs\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x58d9ed51710c4e5de31ea3e486cbb6e45f204e9dd9a97ce49e354c19f12cf716\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xaa0482c0c3f36dc41941c9fde395fe7f77775353d7ace363df4f6a924cde404d\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000000100000004000400000000800100000000000100000002014\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJGejRFQmo3V0xmVXEyVlZzRzJ0emxWb0ttODZLbU9YRGJVRi1qNm1kOWpzIl0sImluZGV4IjoyfQ==\",\"node\":{\"id\":\"Fz4EBj7WLfUq2VVsG2tzlVoKm86KmOXDbUF-j6md9js\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x7bab5d0f4f3f4087736b9dc8500202e73ece7eeb645abdd4ee3252fd2db6f6c3\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"6\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0008000180000400020000000000000000000109200008010000400000000000\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJfRWNTa3dxT3BSQTdRWjlGUndfSjRHVlQxVDdIYmVvelJ1RVU1UnRTTnlJIl0sImluZGV4IjozfQ==\",\"node\":{\"id\":\"_EcSkwqOpRA7QZ9FRw_J4GVT1T7HbeozRuEU5RtSNyI\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0xe842d9fea808a29c77e53e06e5cc78e122374ab5b0c2494e8a0baacd1b48b6a0\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"5\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000100100000005000400000000800100002000000000020000000\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJlMXhjRE1scnJMNTVBZ2ZVWDZ1MkdzNGRlcm1KeDZ0SnQtTjhWdnNmQ2ZNIl0sImluZGV4Ijo0fQ==\",\"node\":{\"id\":\"e1xcDMlrrL55AgfUX6u2Gs4dermJx6tJt-N8VvsfCfM\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x406a8fb3dee0ed7a025cc2bab7e1ac829b489b2e8692fea8f694bd3719b88eb5\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xd0dedc8b8e2407f4ca09d86b381a8da08e7e8fb551d5699f56a4daa6273bf13d\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x1000000502000000100000004000400000042800100000000000000000020000\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJsN1ZwTWJ3MV9nNEpNOU9XWHZYcHFneDlseVhlbGdVUldMVEQ0YVhKSmxvIl0sImluZGV4Ijo1fQ==\",\"node\":{\"id\":\"l7VpMbw1_g4JM9OWXvXpqgx9lyXelgURWLTD4aXJJlo\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x568723a41b651b52c87c0a9769243e76e02a6ebdfcf4ff89d551429deac205c2\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xe0d9a803e3dbd676c10cea040e6501b80d011a7acf3c6312d0aad291326862c5\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"4\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000000100000004000400080000800100000000000020000000100\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJ3NU54RFJ2a0VCaTJWeG5KZ2p6NS02d2RXUEF2X3ZDUjRoWkwtV0RIaHNNIl0sImluZGV4Ijo2fQ==\",\"node\":{\"id\":\"w5NxDRvkEBi2VxnJgjz5-6wdWPAv_vCR4hZL-WDHhsM\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0xe842d9fea808a29c77e53e06e5cc78e122374ab5b0c2494e8a0baacd1b48b6a0\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"5\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000100100000005000400000000800100002000000000020000000\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/Fz4EBj7WLfUq2VVsG2tzlVoKm86KmOXDbUF-j6md9js", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:gl4mTPi1DdVGbow10VFIzL14OgN2Y35fOYI2KgBElAU=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:29 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eth_sign", + "sequence-sessions-signer": "0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548", + "sequence-sessions-subdigest": "0x7bab5d0f4f3f4087736b9dc8500202e73ece7eeb645abdd4ee3252fd2db6f6c3", + "sequence-sessions-to-checkpoint": "6", + "sequence-sessions-to-config": "0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0008000180000400020000000000000000000109200008010000400000000000", + "sequence-sessions-to-signers-count": "3", + "sequence-sessions-type": "config update", + "sequence-sessions-wallet": "0x135769a58639b4Fa7d779a9df9B57A706FBCa816", + "sequence-sessions-witness": "false", + "server": "CDN77-Turbo", + "signature": "comm-dkuigffhmyx2wop753phvp2o56fbn2efe-i-orzwsre=:NRXf0YANg7WO0IyBzvdHidfMGeMiGG1dCE2VWRMnn2U=:, comm-fz4ebj7wlfuq2vvsg2tzlvokm86kmoxdbuf-j6md9js=:PIRkvIK56BiA3gNYpQ3Y6Iqqh7iwqYFutzjp5RF8sy1nr+/VlYKTI5npT/LFyyBv13laNRFXgAV2mCc9uzrH9Rw=:", + "signature-input": "comm-dkuigffhmyx2wop753phvp2o56fbn2efe-i-orzwsre=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-fz4ebj7wlfuq2vvsg2tzlvokm86kmoxdbuf-j6md9js=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmlnIHVwZGF0ZQ, 10:Sequence-Sessions-Major-Version:Mg, 11:Sequence-Sessions-To-Config:MHhlNjBhMmRmNzMxYzNlYjhlMjM3Yjg4YjhiN2MxM2ZkNmQ0YjU2YjQ4NDk2ZDFhZGNlOGNmMjlhNTcyY2U2NDg3, 12:Sequence-Sessions-To-Checkpoint:Ng, 13:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 14:Sequence-Sessions-To-Signers-Count:Mw, 15:Sequence-Sessions-To-Signers-Bloom:MHgwMDA4MDAwMTgwMDAwNDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MjAwMDA4MDEwMDAwNDAwMDAwMDAwMDAw, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZXRoX3NpZ24, 5:Sequence-Sessions-Signer:MHhiMjBFOWZmMzFBNzUxOTBCNUFhMjVmRmZhZTY0NkFGNzgyMUQ0NTQ4, 6:Sequence-Sessions-Subdigest:MHg3YmFiNWQwZjRmM2Y0MDg3NzM2YjlkYzg1MDAyMDJlNzNlY2U3ZWViNjQ1YWJkZDRlZTMyNTJmZDJkYjZmNmMz, 7:Sequence-Sessions-Wallet:MHgxMzU3NjlhNTg2MzliNEZhN2Q3NzlhOWRmOUI1N0E3MDZGQkNhODE2, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:ZmFsc2U\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "ktuYrhp0DCHMjpvuQl6ghF489ixAO0MeTI6HIQ6uRTrrdrCatQ", + "x-77-nzt-ray": "8705ec34b6d394d7a1d7df693595b823", + "x-77-pop": "newyorkUSNY" + }, + "body": "0xd74d840a07de51b5012bc94fcf3a7715bfa1b7845b2674874a71bef4a7f3cd261eb75136e3eadfe33931302452d1cccca8819e3f0615fb36ba71aaeb8465b7051c" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/_EcSkwqOpRA7QZ9FRw_J4GVT1T7HbeozRuEU5RtSNyI", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:VBsXK1M8uZVlxPKBBimHHRZfzcKY+OP9ht9pd1e8OYY=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:29 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eth_sign", + "sequence-sessions-signer": "0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548", + "sequence-sessions-subdigest": "0xe842d9fea808a29c77e53e06e5cc78e122374ab5b0c2494e8a0baacd1b48b6a0", + "sequence-sessions-to-checkpoint": "5", + "sequence-sessions-to-config": "0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0000000502000100100000005000400000000800100002000000000020000000", + "sequence-sessions-to-signers-count": "3", + "sequence-sessions-type": "config update", + "sequence-sessions-wallet": "0x135769a58639b4Fa7d779a9df9B57A706FBCa816", + "sequence-sessions-witness": "true", + "server": "CDN77-Turbo", + "signature": "comm-_ecskwqopra7qz9frw_j4gvt1t7hbeozrueu5rtsnyi=:mSJ7Wfbo2CDWKJ4Tc2PdmncNyLqy1ejvND6aZGdduvsmhVqizKMuM4rAWyFb38VxYD5NmaBz584iSsTvEzsHZRs=:, comm-sqp56wurfwh57gj_yhzmnwcwrflfaznkcus5vu0is28=:iX5RbPW4qPV3vnOamVp087pHbC3RE4Ux1daDnGuT6W0=:", + "signature-input": "comm-_ecskwqopra7qz9frw_j4gvt1t7hbeozrueu5rtsnyi=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmlnIHVwZGF0ZQ, 10:Sequence-Sessions-Major-Version:Mg, 11:Sequence-Sessions-To-Config:MHhhN2I0YzgxZjhjZTVkMjlkZDFiYjgzZTE4OGUwMzlkYjA4ZTM5YTNjNGRlNzA2ZjEwODI3NTU2ZmI0NGE2OTMw, 12:Sequence-Sessions-To-Checkpoint:NQ, 13:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 14:Sequence-Sessions-To-Signers-Count:Mw, 15:Sequence-Sessions-To-Signers-Bloom:MHgwMDAwMDAwNTAyMDAwMTAwMTAwMDAwMDA1MDAwNDAwMDAwMDAwODAwMTAwMDAyMDAwMDAwMDAwMDIwMDAwMDAw, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZXRoX3NpZ24, 5:Sequence-Sessions-Signer:MHhiMjBFOWZmMzFBNzUxOTBCNUFhMjVmRmZhZTY0NkFGNzgyMUQ0NTQ4, 6:Sequence-Sessions-Subdigest:MHhlODQyZDlmZWE4MDhhMjljNzdlNTNlMDZlNWNjNzhlMTIyMzc0YWI1YjBjMjQ5NGU4YTBiYWFjZDFiNDhiNmEw, 7:Sequence-Sessions-Wallet:MHgxMzU3NjlhNTg2MzliNEZhN2Q3NzlhOWRmOUI1N0E3MDZGQkNhODE2, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:dHJ1ZQ\", comm-sqp56wurfwh57gj_yhzmnwcwrflfaznkcus5vu0is28=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kjf1MaCVro4tzO8Y+rtRj2DW+I0WgSG8mxMPrsRr+jU5xYziGg", + "x-77-nzt-ray": "3f9f13256fea358aa1d7df69c155482d", + "x-77-pop": "newyorkUSNY" + }, + "body": "0x116bea5f536c7745117315baef9743ed6e9bd0bb4d6b0e0dcba7fffdab393a2a50ae10f526151f937cdf8fe67f6b2199e6127e4637017bc056dd7f08d959e0981b" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/w5NxDRvkEBi2VxnJgjz5-6wdWPAv_vCR4hZL-WDHhsM", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:2ZuMVXKr8u5m20NWLWAyvvaN1rrF5LETVZPHv5u2sIw=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:29 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eth_sign", + "sequence-sessions-signer": "0x3114b2Ede71533C3100842B62e3773e930989A1E", + "sequence-sessions-subdigest": "0xe842d9fea808a29c77e53e06e5cc78e122374ab5b0c2494e8a0baacd1b48b6a0", + "sequence-sessions-to-checkpoint": "5", + "sequence-sessions-to-config": "0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0000000502000100100000005000400000000800100002000000000020000000", + "sequence-sessions-to-signers-count": "3", + "sequence-sessions-type": "config update", + "sequence-sessions-wallet": "0x135769a58639b4Fa7d779a9df9B57A706FBCa816", + "sequence-sessions-witness": "false", + "server": "CDN77-Turbo", + "signature": "comm-1lo1olkgrwhm3l5m_kzswkx4op49pdu_cddhrgaemdk=:DkOaOPc1X07fP3Pm80/Ic3FVqDNdqR6GoLK8eO0zwqA=:, comm-w5nxdrvkebi2vxnjgjz5-6wdwpav_vcr4hzl-wdhhsm=:lP/eLayDbnw09wD2+CDqLmugY5DxoBNt5A64ljWv+wAKZNuM6Qy9UJCE4OdLW58tpetZenD2nUBdfl3duCs0oRs=:", + "signature-input": "comm-1lo1olkgrwhm3l5m_kzswkx4op49pdu_cddhrgaemdk=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-w5nxdrvkebi2vxnjgjz5-6wdwpav_vcr4hzl-wdhhsm=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmlnIHVwZGF0ZQ, 10:Sequence-Sessions-Major-Version:Mg, 11:Sequence-Sessions-To-Config:MHhhN2I0YzgxZjhjZTVkMjlkZDFiYjgzZTE4OGUwMzlkYjA4ZTM5YTNjNGRlNzA2ZjEwODI3NTU2ZmI0NGE2OTMw, 12:Sequence-Sessions-To-Checkpoint:NQ, 13:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 14:Sequence-Sessions-To-Signers-Count:Mw, 15:Sequence-Sessions-To-Signers-Bloom:MHgwMDAwMDAwNTAyMDAwMTAwMTAwMDAwMDA1MDAwNDAwMDAwMDAwODAwMTAwMDAyMDAwMDAwMDAwMDIwMDAwMDAw, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZXRoX3NpZ24, 5:Sequence-Sessions-Signer:MHgzMTE0YjJFZGU3MTUzM0MzMTAwODQyQjYyZTM3NzNlOTMwOTg5QTFF, 6:Sequence-Sessions-Subdigest:MHhlODQyZDlmZWE4MDhhMjljNzdlNTNlMDZlNWNjNzhlMTIyMzc0YWI1YjBjMjQ5NGU4YTBiYWFjZDFiNDhiNmEw, 7:Sequence-Sessions-Wallet:MHgxMzU3NjlhNTg2MzliNEZhN2Q3NzlhOWRmOUI1N0E3MDZGQkNhODE2, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:ZmFsc2U\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kvh3BkK8TrK1nTICmKayfCCRR1hM+1BYVjHoi6xwQVy0WElnJA", + "x-77-nzt-ray": "8705ec341a2987e1a1d7df69ca29e131", + "x-77-pop": "newyorkUSNY" + }, + "body": "0x72830470d9a9a8f28d3f7554dae9806e14f34f75ffdc8cdff62f691566ff3bb3084ff61967f0180f0c7cb56c860a97cad1c810894becfae50768e1425486d3f31c" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config\\\"] }, { name: \\\"Sequence-Sessions-Config\\\", values: [\\\"0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb542e345a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:30 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=8,cfOrigin;dur=207", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "khIGCL18wor0fRfALbLVb+Dna3rNs5tWWmLEe9up1Eoj", + "x-77-nzt-ray": "331b5e0fe1a2ac95a1d7df6975d36337", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJPNlFyTWV3VDhhWkpNQ0djNjBCSjlxQ3d1QTI5ME5RaUYwTnBreEhDNVk4Il0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"O6QrMewT8aZJMCGc60BJ9qCwuA290NQiF0NpkxHC5Y8\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Config\",\"value\":\"0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930\"},{\"name\":\"Sequence-Sessions-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Signers-Bloom\",\"value\":\"0x0000000502000100100000005000400000000800100002000000000020000000\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/O6QrMewT8aZJMCGc60BJ9qCwuA290NQiF0NpkxHC5Y8", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:lOaTY4n1aPuJ6aIVdvkExjh8xxlEMMzle3itHhyVcqQ=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:30 GMT", + "sequence-sessions-complete": "true", + "sequence-sessions-config": "0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signers-bloom": "0x0000000502000100100000005000400000000800100002000000000020000000", + "sequence-sessions-signers-count": "3", + "sequence-sessions-type": "config", + "sequence-sessions-version": "3", + "server": "CDN77-Turbo", + "signature": "comm-eq9xeugrr-8aivbdkcqvhhnrput45awkg5fu2w7n2bs=:bf/sXvC3hyBe+2Svwtz166VEvDFznyNqUtUiphysPzI=:, comm-o6qrmewt8azjmcgc60bj9qcwua290nqif0npkxhc5y8=:76kyiO7vdyBjhrDD7pMGU8GLU6xxEWc7E0sTjzPPVbZJWnDBWvIZs84oaBEjgl+WU2EkL41oyLGiM2f2QfFEDBw=:", + "signature-input": "comm-eq9xeugrr-8aivbdkcqvhhnrput45awkg5fu2w7n2bs=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-o6qrmewt8azjmcgc60bj9qcwua290nqif0npkxhc5y8=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmln, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:MA, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Config:MHhhN2I0YzgxZjhjZTVkMjlkZDFiYjgzZTE4OGUwMzlkYjA4ZTM5YTNjNGRlNzA2ZjEwODI3NTU2ZmI0NGE2OTMw, 6:Sequence-Sessions-Version:Mw, 7:Sequence-Sessions-Complete:dHJ1ZQ, 8:Sequence-Sessions-Signers-Count:Mw, 9:Sequence-Sessions-Signers-Bloom:MHgwMDAwMDAwNTAyMDAwMTAwMTAwMDAwMDA1MDAwNDAwMDAwMDAwODAwMTAwMDAyMDAwMDAwMDAwMDIwMDAwMDAw\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "ks4H+fRU5lxCmKBu64MCm0ROK5j1onKuklVRaCW11n86PbgNyg", + "x-77-nzt-ray": "f03d06130872167ba2d7df6903120c12", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"5\",\"threshold\":2,\"tree\":[[{\"address\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\",\"weight\":1},{\"address\":\"0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548\",\"weight\":1}],{\"address\":\"0xDbbF0590A29c203D15dbc462CE2ceF43C8210fB4\",\"weight\":1}]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config update\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x3114b2Ede71533C3100842B62e3773e930989A1E\\\", \\\"0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548\\\", \\\"0xDbbF0590A29c203D15dbc462CE2ceF43C8210fB4\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"eip-712\\\", \\\"eth_sign\\\", \\\"erc-1271\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb5708f35a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:30 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=226", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kjXn2kmQkyX8246oMcLumt2q+Ue5i54AU4j/EPpLph+d", + "x-77-nzt-ray": "331b5e0fe1a2ac95a2d7df6903837317", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJEX0huLUZETFJIeThORjFWN1BGOTI1dFlEZ3paSTVYWng2NFdDckhUd1ZzIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"D_Hn-FDLRHy8NF1V7PF925tYDgzZI5XZx64WCrHTwVs\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x58d9ed51710c4e5de31ea3e486cbb6e45f204e9dd9a97ce49e354c19f12cf716\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xaa0482c0c3f36dc41941c9fde395fe7f77775353d7ace363df4f6a924cde404d\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000000100000004000400000000800100000000000100000002014\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJGejRFQmo3V0xmVXEyVlZzRzJ0emxWb0ttODZLbU9YRGJVRi1qNm1kOWpzIl0sImluZGV4IjoxfQ==\",\"node\":{\"id\":\"Fz4EBj7WLfUq2VVsG2tzlVoKm86KmOXDbUF-j6md9js\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x7bab5d0f4f3f4087736b9dc8500202e73ece7eeb645abdd4ee3252fd2db6f6c3\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"6\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0008000180000400020000000000000000000109200008010000400000000000\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJSSnlvbnFmZGtfeDU2a0JZVjhvdDNxYWRFa1BQcE5JSlBjVDNJcTR0U3lFIl0sImluZGV4IjoyfQ==\",\"node\":{\"id\":\"RJyonqfdk_x56kBYV8ot3qadEkPPpNIJPcT3Iq4tSyE\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xDbbF0590A29c203D15dbc462CE2ceF43C8210fB4\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x7bab5d0f4f3f4087736b9dc8500202e73ece7eeb645abdd4ee3252fd2db6f6c3\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"6\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0008000180000400020000000000000000000109200008010000400000000000\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJfRWNTa3dxT3BSQTdRWjlGUndfSjRHVlQxVDdIYmVvelJ1RVU1UnRTTnlJIl0sImluZGV4IjozfQ==\",\"node\":{\"id\":\"_EcSkwqOpRA7QZ9FRw_J4GVT1T7HbeozRuEU5RtSNyI\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xb20E9ff31A75190B5Aa25fFfae646AF7821D4548\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0xe842d9fea808a29c77e53e06e5cc78e122374ab5b0c2494e8a0baacd1b48b6a0\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"5\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000100100000005000400000000800100002000000000020000000\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJlMXhjRE1scnJMNTVBZ2ZVWDZ1MkdzNGRlcm1KeDZ0SnQtTjhWdnNmQ2ZNIl0sImluZGV4Ijo0fQ==\",\"node\":{\"id\":\"e1xcDMlrrL55AgfUX6u2Gs4dermJx6tJt-N8VvsfCfM\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x406a8fb3dee0ed7a025cc2bab7e1ac829b489b2e8692fea8f694bd3719b88eb5\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xd0dedc8b8e2407f4ca09d86b381a8da08e7e8fb551d5699f56a4daa6273bf13d\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x1000000502000000100000004000400000042800100000000000000000020000\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJsN1ZwTWJ3MV9nNEpNOU9XWHZYcHFneDlseVhlbGdVUldMVEQ0YVhKSmxvIl0sImluZGV4Ijo1fQ==\",\"node\":{\"id\":\"l7VpMbw1_g4JM9OWXvXpqgx9lyXelgURWLTD4aXJJlo\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x568723a41b651b52c87c0a9769243e76e02a6ebdfcf4ff89d551429deac205c2\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xe0d9a803e3dbd676c10cea040e6501b80d011a7acf3c6312d0aad291326862c5\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"4\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000000100000004000400080000800100000000000020000000100\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJ3NU54RFJ2a0VCaTJWeG5KZ2p6NS02d2RXUEF2X3ZDUjRoWkwtV0RIaHNNIl0sImluZGV4Ijo2fQ==\",\"node\":{\"id\":\"w5NxDRvkEBi2VxnJgjz5-6wdWPAv_vCR4hZL-WDHhsM\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x3114b2Ede71533C3100842B62e3773e930989A1E\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0xe842d9fea808a29c77e53e06e5cc78e122374ab5b0c2494e8a0baacd1b48b6a0\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xa7b4c81f8ce5d29dd1bb83e188e039db08e39a3c4de706f10827556fb44a6930\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"5\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000502000100100000005000400000000800100002000000000020000000\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/RJyonqfdk_x56kBYV8ot3qadEkPPpNIJPcT3Iq4tSyE", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:PEukna0+GD2hJOvo/DIg/ImTk2ZUTgAFkHUxpkl/mMk=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:30 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eth_sign", + "sequence-sessions-signer": "0xDbbF0590A29c203D15dbc462CE2ceF43C8210fB4", + "sequence-sessions-subdigest": "0x7bab5d0f4f3f4087736b9dc8500202e73ece7eeb645abdd4ee3252fd2db6f6c3", + "sequence-sessions-to-checkpoint": "6", + "sequence-sessions-to-config": "0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0008000180000400020000000000000000000109200008010000400000000000", + "sequence-sessions-to-signers-count": "3", + "sequence-sessions-type": "config update", + "sequence-sessions-wallet": "0x135769a58639b4Fa7d779a9df9B57A706FBCa816", + "sequence-sessions-witness": "true", + "server": "CDN77-Turbo", + "signature": "comm-fsvleswb_4wzsytpfbpcqjcck-uidvwsfoyzyhistd8=:4fue3tEjvSRint0i8SzqRVqnTcIuPVaFvXmjdXoAp/E=:, comm-rjyonqfdk_x56kbyv8ot3qadekpppnijpct3iq4tsye=:xybXj2uxTejbwNwuYv6CMlz07SZCHDc8v5Vo6zhGgm8bckzYbIdpas31XHDzBB7w4tjo9cyzUzt3ez3JFLBQQRs=:", + "signature-input": "comm-fsvleswb_4wzsytpfbpcqjcck-uidvwsfoyzyhistd8=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-rjyonqfdk_x56kbyv8ot3qadekpppnijpct3iq4tsye=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmlnIHVwZGF0ZQ, 10:Sequence-Sessions-Major-Version:Mg, 11:Sequence-Sessions-To-Config:MHhlNjBhMmRmNzMxYzNlYjhlMjM3Yjg4YjhiN2MxM2ZkNmQ0YjU2YjQ4NDk2ZDFhZGNlOGNmMjlhNTcyY2U2NDg3, 12:Sequence-Sessions-To-Checkpoint:Ng, 13:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 14:Sequence-Sessions-To-Signers-Count:Mw, 15:Sequence-Sessions-To-Signers-Bloom:MHgwMDA4MDAwMTgwMDAwNDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MjAwMDA4MDEwMDAwNDAwMDAwMDAwMDAw, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZXRoX3NpZ24, 5:Sequence-Sessions-Signer:MHhEYmJGMDU5MEEyOWMyMDNEMTVkYmM0NjJDRTJjZUY0M0M4MjEwZkI0, 6:Sequence-Sessions-Subdigest:MHg3YmFiNWQwZjRmM2Y0MDg3NzM2YjlkYzg1MDAyMDJlNzNlY2U3ZWViNjQ1YWJkZDRlZTMyNTJmZDJkYjZmNmMz, 7:Sequence-Sessions-Wallet:MHgxMzU3NjlhNTg2MzliNEZhN2Q3NzlhOWRmOUI1N0E3MDZGQkNhODE2, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:dHJ1ZQ\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kspqVXqy0lxAq0Exzh68cxy5isFudoM5KH6a2vuaSHHeX+netw", + "x-77-nzt-ray": "8705ec347811ca07a2d7df691ca6912f", + "x-77-pop": "newyorkUSNY" + }, + "body": "0xecd8bcb73872ad91461bba93b42b363b7048d61bc29c813ef890ae5904cb5a0b3ad5796934d1c54bac5ee162dbe9acf2ad16cb34e656b4e6c3cc1880c151cf1b1c" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config\\\"] }, { name: \\\"Sequence-Sessions-Config\\\", values: [\\\"0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb5a2bb75a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:31 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=5,cfOrigin;dur=185", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "ko5mQ8om74otrj47od4kQf7P4MGlI39VvitW/gEGOscM", + "x-77-nzt-ray": "331b5e0fe1a2ac95a2d7df690ddf0835", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCItQjRuenQ5blBYOGYtUVFGSlZVVXkzNlctamxrcjFSR1F3S3UxcjZ3WFowIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"-B4nzt9nPX8f-QQFJVUUy36W-jlkr1RGQwKu1r6wXZ0\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Config\",\"value\":\"0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487\"},{\"name\":\"Sequence-Sessions-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Signers-Bloom\",\"value\":\"0x0008000180000400020000000000000000000109200008010000400000000000\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/-B4nzt9nPX8f-QQFJVUUy36W-jlkr1RGQwKu1r6wXZ0", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:ksByouZ0PZUghZHHFzg2DenqCafpnya2RRPuydP3cGk=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:31 GMT", + "sequence-sessions-complete": "true", + "sequence-sessions-config": "0xe60a2df731c3eb8e237b88b8b7c13fd6d4b56b48496d1adce8cf29a572ce6487", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signers-bloom": "0x0008000180000400020000000000000000000109200008010000400000000000", + "sequence-sessions-signers-count": "3", + "sequence-sessions-type": "config", + "sequence-sessions-version": "3", + "server": "CDN77-Turbo", + "signature": "comm--b4nzt9npx8f-qqfjvuuy36w-jlkr1rgqwku1r6wxz0=:tzZO2MoXIqZXnZvr1LXRRtCxCUQrFr5WWrl1Cnek9EM1owGM3nJ2cFoNDwamyCuLRCuyb3PbuMtadAARRgwvZxw=:, comm-7u-kon49dtsoauudnzs8fdrc6yo-vilu7sanv6dwqp4=:kYXPoiF9pt7xSqMyHiBPnetFHt4iwZJR9edbkLvVhtM=:", + "signature-input": "comm--b4nzt9npx8f-qqfjvuuy36w-jlkr1rgqwku1r6wxz0=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmln, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:MA, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Config:MHhlNjBhMmRmNzMxYzNlYjhlMjM3Yjg4YjhiN2MxM2ZkNmQ0YjU2YjQ4NDk2ZDFhZGNlOGNmMjlhNTcyY2U2NDg3, 6:Sequence-Sessions-Version:Mw, 7:Sequence-Sessions-Complete:dHJ1ZQ, 8:Sequence-Sessions-Signers-Count:Mw, 9:Sequence-Sessions-Signers-Bloom:MHgwMDA4MDAwMTgwMDAwNDAwMDIwMDAwMDAwMDAwMDAwMDAwMDAwMTA5MjAwMDA4MDEwMDAwNDAwMDAwMDAwMDAw\", comm-7u-kon49dtsoauudnzs8fdrc6yo-vilu7sanv6dwqp4=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"hmac-sha256\";keyid=\"constant:ao\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "ksmw8yXPXCv/QiVuFuJA0fM39DGJpQOz6gS2rTgGTcOlG2IHSw", + "x-77-nzt-ray": "3f9f13251bfbd5cea3d7df69ce140a0f", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"6\",\"threshold\":1,\"tree\":[[{\"address\":\"0x8534Cb5487E769e510c5F71b790B2ca02D1819a0\",\"weight\":1},{\"address\":\"0x07a87DC7616F121951e81A997D32eD03c3856607\",\"weight\":1}],{\"address\":\"0x49FcA172d48f43f8e8E45685C1581D9aB14F9FAE\",\"weight\":1}]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config update\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x8534Cb5487E769e510c5F71b790B2ca02D1819a0\\\", \\\"0x07a87DC7616F121951e81A997D32eD03c3856607\\\", \\\"0x49FcA172d48f43f8e8E45685C1581D9aB14F9FAE\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"eip-712\\\", \\\"eth_sign\\\", \\\"erc-1271\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb5cddd05a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:31 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=206", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kqPYwNmgDa7sX+6+d24x+6w0D4GaaBcyrq2OrEckWBl/", + "x-77-nzt-ray": "331b5e0fe1a2ac95a3d7df6939d52113", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJLYzd0MGNBWVZUc0o5b0FiZHF4aXlPaTV1MFpaLUF2TGZ4WXJkZUdKVUJRIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"Kc7t0cAYVTsJ9oAbdqxiyOi5u0ZZ-AvLfxYrdeGJUBQ\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x8534Cb5487E769e510c5F71b790B2ca02D1819a0\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x1debc90c68f232310b434b7fc8a672fb7aebe95422ad426707ec1d1e03fe0b89\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xd430d9d056a14a874c22b86246902a60f4b25573fbe998f1148a7e193edf69ae\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"8\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000000000000000000000020000004600100008100000000003000002010\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJzM1BWUVpZV2dDN2VJNHJNTTNRN2RaZEEzUWtzYURrV0JiSU5mU21EV0tZIl0sImluZGV4IjoxfQ==\",\"node\":{\"id\":\"s3PVQZYWgC7eI4rMM3Q7dZdA3QksaDkWBbINfSmDWKY\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x49FcA172d48f43f8e8E45685C1581D9aB14F9FAE\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0xbe193096e90de1cbeea21495f3c246168a715f7d34a3bcecc7852019e0784856\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0x6a484f49f59ea0d5d9134ac92bf36ccf0f06a15030e07624f576b4294a5fdd7c\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"7\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x000800019000000002000002000000000000010020000c010000000001000000\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJ4TTdfN1hQbUNWVUxHNElMYWk0dUZmcEFoU2VQcEN1cjJWQS1hNVNDYmVvIl0sImluZGV4IjoyfQ==\",\"node\":{\"id\":\"xM7_7XPmCVULG4ILai4uFfpAhSePpCur2VA-a5SCbeo\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x07a87DC7616F121951e81A997D32eD03c3856607\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x1debc90c68f232310b434b7fc8a672fb7aebe95422ad426707ec1d1e03fe0b89\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xd430d9d056a14a874c22b86246902a60f4b25573fbe998f1148a7e193edf69ae\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"8\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000000000000000000000020000004600100008100000000003000002010\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/xM7_7XPmCVULG4ILai4uFfpAhSePpCur2VA-a5SCbeo", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:3CJOMRYcb9BRY+qlR4qHnRoD+o7cCstWySxk6xTFYes=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:31 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eth_sign", + "sequence-sessions-signer": "0x07a87DC7616F121951e81A997D32eD03c3856607", + "sequence-sessions-subdigest": "0x1debc90c68f232310b434b7fc8a672fb7aebe95422ad426707ec1d1e03fe0b89", + "sequence-sessions-to-checkpoint": "8", + "sequence-sessions-to-config": "0xd430d9d056a14a874c22b86246902a60f4b25573fbe998f1148a7e193edf69ae", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0000000000000000000000000020000004600100008100000000003000002010", + "sequence-sessions-to-signers-count": "3", + "sequence-sessions-type": "config update", + "sequence-sessions-wallet": "0x135769a58639b4Fa7d779a9df9B57A706FBCa816", + "sequence-sessions-witness": "true", + "server": "CDN77-Turbo", + "signature": "comm-f7rp8sdytpirgwvoy_bpvzninwx3fe32tw36amj0jxc=:5LC5m46+2oi/xeTp/QMdclEzludnK+ISrSmWazfO6kA=:, comm-xm7_7xpmcvulg4ilai4uffpahseppcur2va-a5scbeo=:BArCNITJliJDJrORialbgBAEjuKKGCM8y1NIJY3EoGY5uo00kzl0BohEUiN0znskgXjuQsm3Cd/msMtsOWsfrRw=:", + "signature-input": "comm-f7rp8sdytpirgwvoy_bpvzninwx3fe32tw36amj0jxc=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-xm7_7xpmcvulg4ilai4uffpahseppcur2va-a5scbeo=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmlnIHVwZGF0ZQ, 10:Sequence-Sessions-Major-Version:Mg, 11:Sequence-Sessions-To-Config:MHhkNDMwZDlkMDU2YTE0YTg3NGMyMmI4NjI0NjkwMmE2MGY0YjI1NTczZmJlOTk4ZjExNDhhN2UxOTNlZGY2OWFl, 12:Sequence-Sessions-To-Checkpoint:OA, 13:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 14:Sequence-Sessions-To-Signers-Count:Mw, 15:Sequence-Sessions-To-Signers-Bloom:MHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDA0NjAwMTAwMDA4MTAwMDAwMDAwMDAzMDAwMDAyMDEw, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZXRoX3NpZ24, 5:Sequence-Sessions-Signer:MHgwN2E4N0RDNzYxNkYxMjE5NTFlODFBOTk3RDMyZUQwM2MzODU2NjA3, 6:Sequence-Sessions-Subdigest:MHgxZGViYzkwYzY4ZjIzMjMxMGI0MzRiN2ZjOGE2NzJmYjdhZWJlOTU0MjJhZDQyNjcwN2VjMWQxZTAzZmUwYjg5, 7:Sequence-Sessions-Wallet:MHgxMzU3NjlhNTg2MzliNEZhN2Q3NzlhOWRmOUI1N0E3MDZGQkNhODE2, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:dHJ1ZQ\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kqNwqjfqmGocmde0Peb+pShGFRd1tnyeV8b+67b+/1QX0h+s7Q", + "x-77-nzt-ray": "3f9f1325f7fba7e2a3d7df698817de28", + "x-77-pop": "newyorkUSNY" + }, + "body": "0x5937db592a0799449fb2442eed3932ce32f2cef81ce8c359cbda05f8288da27f2fc09a0f17005e8c1fbd27ac58b47046c4feebf1278783c12f64fa0ab9ae12441c" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/Kc7t0cAYVTsJ9oAbdqxiyOi5u0ZZ-AvLfxYrdeGJUBQ", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:9d4wu0YAdl5mfAKuEkIXHdXO6uCAQkxgneeV3Zr9+9s=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:31 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eth_sign", + "sequence-sessions-signer": "0x8534Cb5487E769e510c5F71b790B2ca02D1819a0", + "sequence-sessions-subdigest": "0x1debc90c68f232310b434b7fc8a672fb7aebe95422ad426707ec1d1e03fe0b89", + "sequence-sessions-to-checkpoint": "8", + "sequence-sessions-to-config": "0xd430d9d056a14a874c22b86246902a60f4b25573fbe998f1148a7e193edf69ae", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0000000000000000000000000020000004600100008100000000003000002010", + "sequence-sessions-to-signers-count": "3", + "sequence-sessions-type": "config update", + "sequence-sessions-wallet": "0x135769a58639b4Fa7d779a9df9B57A706FBCa816", + "sequence-sessions-witness": "true", + "server": "CDN77-Turbo", + "signature": "comm-2vhls37zqgon56ymq8tdapyh9dstpdixgd4yj-ittvu=:7VBwLsBh2Nn/42bwA0auDaeX6MwAD69evUz2q/00XPA=:, comm-kc7t0cayvtsj9oabdqxiyoi5u0zz-avlfxyrdegjubq=:4hG3iejxTU/Pph3BhyXkYkIT+WdnA2+ew9pW/8gFD6ZRK+/cieu2hIpQYFY0nmFneJqNkpK5a7yvEjsbXzMdQBw=:", + "signature-input": "comm-2vhls37zqgon56ymq8tdapyh9dstpdixgd4yj-ittvu=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-kc7t0cayvtsj9oabdqxiyoi5u0zz-avlfxyrdegjubq=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmlnIHVwZGF0ZQ, 10:Sequence-Sessions-Major-Version:Mg, 11:Sequence-Sessions-To-Config:MHhkNDMwZDlkMDU2YTE0YTg3NGMyMmI4NjI0NjkwMmE2MGY0YjI1NTczZmJlOTk4ZjExNDhhN2UxOTNlZGY2OWFl, 12:Sequence-Sessions-To-Checkpoint:OA, 13:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 14:Sequence-Sessions-To-Signers-Count:Mw, 15:Sequence-Sessions-To-Signers-Bloom:MHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDA0NjAwMTAwMDA4MTAwMDAwMDAwMDAzMDAwMDAyMDEw, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZXRoX3NpZ24, 5:Sequence-Sessions-Signer:MHg4NTM0Q2I1NDg3RTc2OWU1MTBjNUY3MWI3OTBCMmNhMDJEMTgxOWEw, 6:Sequence-Sessions-Subdigest:MHgxZGViYzkwYzY4ZjIzMjMxMGI0MzRiN2ZjOGE2NzJmYjdhZWJlOTU0MjJhZDQyNjcwN2VjMWQxZTAzZmUwYjg5, 7:Sequence-Sessions-Wallet:MHgxMzU3NjlhNTg2MzliNEZhN2Q3NzlhOWRmOUI1N0E3MDZGQkNhODE2, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:dHJ1ZQ\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "knuK0dh8qHZJ1pa87ng+NmZAC5z178BwWKJB6obyHUru32Zq6A", + "x-77-nzt-ray": "3f9f1325f7fb6de3a3d7df69a61c8a2a", + "x-77-pop": "newyorkUSNY" + }, + "body": "0xe375fd12b814b897838f13daf9e36bd9d66c78d606580b7822c1364ae2c56ca2387ca29afec44adba341c80b4a0b45c072087043cd123ad084c7d57ba6b4d0721c" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config\\\"] }, { name: \\\"Sequence-Sessions-Config\\\", values: [\\\"0xd430d9d056a14a874c22b86246902a60f4b25573fbe998f1148a7e193edf69ae\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb5fd84a5a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:31 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=150", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kuNvMAojgQ/yrO7l7csjoJWNJKVsJ2PuiCBCpJs68no5", + "x-77-nzt-ray": "331b5e0fe1a2ac95a3d7df69c404cc2f", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCIwMzNDeFAxLXplTmRMeTJ4X2dzbGlmRjZ1U2I5SS1EVng5b2RXcGFOYzljIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"033CxP1-zeNdLy2x_gslifF6uSb9I-DVx9odWpaNc9c\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Config\",\"value\":\"0xd430d9d056a14a874c22b86246902a60f4b25573fbe998f1148a7e193edf69ae\"},{\"name\":\"Sequence-Sessions-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Signers-Bloom\",\"value\":\"0x0000000000000000000000000020000004600100008100000000003000002010\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/033CxP1-zeNdLy2x_gslifF6uSb9I-DVx9odWpaNc9c", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:pR1drysB449OQBdWWWfOfHQnU3tlTDtrhl+v9ns8yGk=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:32 GMT", + "sequence-sessions-complete": "true", + "sequence-sessions-config": "0xd430d9d056a14a874c22b86246902a60f4b25573fbe998f1148a7e193edf69ae", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signers-bloom": "0x0000000000000000000000000020000004600100008100000000003000002010", + "sequence-sessions-signers-count": "3", + "sequence-sessions-type": "config", + "sequence-sessions-version": "3", + "server": "CDN77-Turbo", + "signature": "comm-033cxp1-zendly2x_gsliff6usb9i-dvx9odwpanc9c=:jlvjFuDF312zUk/2peb5tOw5rrK43A3JH+LhrpiakgZa4uY4Q/Wlea3PUolzDLIMgCfIywbxyUlmpcAHX8tmLRs=:, comm-4kmu9zanvxaovs_arucd0j5fseiwphsln5kdzm_mpba=:il2HPBkL+GNyvIbm9yeo5XLbdLLCFjcxJEEhEntxLCg=:", + "signature-input": "comm-033cxp1-zendly2x_gsliff6usb9i-dvx9odwpanc9c=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmln, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:MA, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Config:MHhkNDMwZDlkMDU2YTE0YTg3NGMyMmI4NjI0NjkwMmE2MGY0YjI1NTczZmJlOTk4ZjExNDhhN2UxOTNlZGY2OWFl, 6:Sequence-Sessions-Version:Mw, 7:Sequence-Sessions-Complete:dHJ1ZQ, 8:Sequence-Sessions-Signers-Count:Mw, 9:Sequence-Sessions-Signers-Bloom:MHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIwMDAwMDA0NjAwMTAwMDA4MTAwMDAwMDAwMDAzMDAwMDAyMDEw\", comm-4kmu9zanvxaovs_arucd0j5fseiwphsln5kdzm_mpba=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"hmac-sha256\";keyid=\"constant:ao\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kqNEoZW5LBBaGsB+Te/VCXhiu7aHH5fEZ+97fC45ic8Ps8iMWA", + "x-77-nzt-ray": "3f9f1325cfd22cf6a4d7df694e8f1f07", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"8\",\"threshold\":1,\"tree\":[[{\"address\":\"0x43dC62e7F055b75948BA6D0288e233027F08F4df\",\"weight\":1},{\"address\":\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\",\"weight\":1}],{\"address\":\"0x004702AAD30e9fCb3Af53a635f86C4a4F0Dff2eF\",\"weight\":1}]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config update\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0x43dC62e7F055b75948BA6D0288e233027F08F4df\\\", \\\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\\\", \\\"0x004702AAD30e9fCb3Af53a635f86C4a4F0Dff2eF\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"eip-712\\\", \\\"eth_sign\\\", \\\"erc-1271\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb626a5f5a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:32 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=159", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kpKBhuw0SzPTeV5TrX7UCPHXJhbUgZPL5A6okZgvuZX5", + "x-77-nzt-ray": "331b5e0fe1a2ac95a4d7df69fa19af0c", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCIxSmZCQ0w3bnpaSzlxcmZ6OHFPQTRZVjEtR1JmLU1FLWIwenVxY3J3NmRFIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"1JfBCL7nzZK9qrfz8qOA4YV1-GRf-ME-b0zuqcrw6dE\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x512485d4e46a9758b98e84105d4d54755ce6645bd3ddbab0e850c968a8ef25ba\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0x7178a76bb537253e8f37c2c6a400af1a85b7f5314ae9f06bfeb1a93df275fca3\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"11\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0040000000000000000000000000000000411100008100000000003000002010\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCI0OGdNdUE5V0NlUlB6RW9FNnFSSWE4RUs4Y3piZHBicENaNGdIRDNUQVhBIl0sImluZGV4IjoxfQ==\",\"node\":{\"id\":\"48gMuA9WCeRPzEoE6qRIa8EK8czbdpbpCZ4gHD3TAXA\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0x43dC62e7F055b75948BA6D0288e233027F08F4df\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x00d52df963e55d1be9b37ca9af01fc1529e76aa9e4adfc8258b9bfa96883d2cb\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xcde2e7ec78ebea962db5fc8c5bd1124b37b699131db4ccd99653f10e6b463b8c\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"9\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000000000000000000040000000000410100008100000000003004002090\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJHMHo4V29aYm85allnbzFsa01GbHRLcm9uc2c3em16WmVuUFRiVkZNaldjIl0sImluZGV4IjoyfQ==\",\"node\":{\"id\":\"G0z8WoZbo9jYgo1lkMFltKronsg7zmzZenPTbVFMjWc\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0xa3c45186be4593770ea3414abbd86c5e10f5791b093372b2f8a9a25482e9f826\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0x2bafea1dbc6381b39848d226dccb906f23171edf7661149da26ab609d15a1339\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"10\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000000000000000000000000000400400100408100000001003000082010\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJnZGdUclNoR09vUjBzYlFXSVI0M1hEUE5JTmI3THExUFVMUEY4SU9RNy1ZIl0sImluZGV4IjozfQ==\",\"node\":{\"id\":\"gdgTrShGOoR0sbQWIR43XDPNINb7Lq1PULPF8IOQ7-Y\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x64825b014c15f38a1464da1a4fc9694584a59f052ae2065dac457935f488059b\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0x19b94a7bd3dfbd5af528650ff492802bfdb909aff70608684feace24f3e08a01\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"12\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000120000404000000040000000000000100000000000000312000002010\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/gdgTrShGOoR0sbQWIR43XDPNINb7Lq1PULPF8IOQ7-Y", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:YvO0UJsvKhf3KcMrD0ijPMAIjZCYoeXF1YboroG7GFo=:", + "content-encoding": "gzip", + "content-type": "text/plain", + "date": "Wed, 15 Apr 2026 18:23:32 GMT", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "2", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signature-type": "eth_sign", + "sequence-sessions-signer": "0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07", + "sequence-sessions-subdigest": "0x64825b014c15f38a1464da1a4fc9694584a59f052ae2065dac457935f488059b", + "sequence-sessions-to-checkpoint": "12", + "sequence-sessions-to-config": "0x19b94a7bd3dfbd5af528650ff492802bfdb909aff70608684feace24f3e08a01", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0000000120000404000000040000000000000100000000000000312000002010", + "sequence-sessions-to-signers-count": "3", + "sequence-sessions-type": "config update", + "sequence-sessions-wallet": "0x135769a58639b4Fa7d779a9df9B57A706FBCa816", + "sequence-sessions-witness": "false", + "server": "CDN77-Turbo", + "signature": "comm-egncy3liqfquug_n0abtquya6qvhh071cvmvptlqg-4=:Dio++Bk3uNbWk+jRSV7664zTj16HKxvid9ULuWTD3tE=:, comm-gdgtrshgoor0sbqwir43xdpninb7lq1pulpf8ioq7-y=:C2XS2s2WWfgKn4IvalZanI1Mc1WCSGalLXxYwblW+45MEQYb6JCo/2s3b8rWFWuxCGbSKOAOl0wPjocnBDXfJBs=:", + "signature-input": "comm-egncy3liqfquug_n0abtquya6qvhh071cvmvptlqg-4=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-gdgtrshgoor0sbqwir43xdpninb7lq1pulpf8ioq7-y=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signature-type\" \"sequence-sessions-signer\" \"sequence-sessions-subdigest\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-wallet\" \"sequence-sessions-witness\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmlnIHVwZGF0ZQ, 10:Sequence-Sessions-Major-Version:Mg, 11:Sequence-Sessions-To-Config:MHgxOWI5NGE3YmQzZGZiZDVhZjUyODY1MGZmNDkyODAyYmZkYjkwOWFmZjcwNjA4Njg0ZmVhY2UyNGYzZTA4YTAx, 12:Sequence-Sessions-To-Checkpoint:MTI, 13:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 14:Sequence-Sessions-To-Signers-Count:Mw, 15:Sequence-Sessions-To-Signers-Bloom:MHgwMDAwMDAwMTIwMDAwNDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMzEyMDAwMDAyMDEw, 2:Sequence-Sessions-Minor-Version:MA, 3:Content-Type:dGV4dC9wbGFpbg, 4:Sequence-Sessions-Signature-Type:ZXRoX3NpZ24, 5:Sequence-Sessions-Signer:MHhBZGE1MmU3NThkNmU2ZGZmNWU5Q2Y1RTk0NGNGNkQzZjIxMzg3RjA3, 6:Sequence-Sessions-Subdigest:MHg2NDgyNWIwMTRjMTVmMzhhMTQ2NGRhMWE0ZmM5Njk0NTg0YTU5ZjA1MmFlMjA2NWRhYzQ1NzkzNWY0ODgwNTli, 7:Sequence-Sessions-Wallet:MHgxMzU3NjlhNTg2MzliNEZhN2Q3NzlhOWRmOUI1N0E3MDZGQkNhODE2, 8:Sequence-Sessions-Chain-ID:MA, 9:Sequence-Sessions-Witness:ZmFsc2U\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kvVh9MCLFtrHa/I5Tw0vQ/XufyHHGKaudXFCXE9xxdzG326htQ", + "x-77-nzt-ray": "8705ec3425fb5c4fa4d7df697537cf1f", + "x-77-pop": "newyorkUSNY" + }, + "body": "0xaf1656da7ca89e388d1c500826c5d7dd0ee670f68b83615b7e1aac78b0cae4c11cdab9e9c4af8fe5564aa49b0c50fad1218023dc6e3fa87307e29b23952a75701c" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config\\\"] }, { name: \\\"Sequence-Sessions-Config\\\", values: [\\\"0x19b94a7bd3dfbd5af528650ff492802bfdb909aff70608684feace24f3e08a01\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb64ec385a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:33 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=13,cfOrigin;dur=391", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kkdNispgdvnwMIBxRgVePYUfIN5f7YWmXuDUaQLkUQCd", + "x-77-nzt-ray": "331b5e0fe1a2ac95a4d7df697f837524", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJiMzhSTG1QbktvdEU3cEo2SVhZRjgyT19PaEo5WGdRRk96RXB4ZDdHOWE4Il0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"b38RLmPnKotE7pJ6IXYF82O_OhJ9XgQFOzEpxd7G9a8\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Config\",\"value\":\"0x19b94a7bd3dfbd5af528650ff492802bfdb909aff70608684feace24f3e08a01\"},{\"name\":\"Sequence-Sessions-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-Signers-Bloom\",\"value\":\"0x0000000120000404000000040000000000000100000000000000312000002010\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/b38RLmPnKotE7pJ6IXYF82O_OhJ9XgQFOzEpxd7G9a8", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:SiVzr20W80RCGWy7sZQeosNKLYQT9bClI+k7XXY7tZ8=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:33 GMT", + "sequence-sessions-complete": "true", + "sequence-sessions-config": "0x19b94a7bd3dfbd5af528650ff492802bfdb909aff70608684feace24f3e08a01", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "0", + "sequence-sessions-signers-bloom": "0x0000000120000404000000040000000000000100000000000000312000002010", + "sequence-sessions-signers-count": "3", + "sequence-sessions-type": "config", + "sequence-sessions-version": "3", + "server": "CDN77-Turbo", + "signature": "comm-b38rlmpnkote7pj6ixyf82o_ohj9xgqfozepxd7g9a8=:VwZrTQ5NGtQYAghYnlBLUUWlY+4VH7Kv77zIbzHYkl4hnHj7BctL/+cwv6sum7MwR3gI8kDF/4N6mX7gZ7Pj9Bw=:, comm-il29hgsyyy8ti2jdr8t-9zseofap4epv1ew-_yjtrxq=:St6HmXse1t1+v1iZWEVNOTyg2CknotAMcf3FJ5B+ebI=:", + "signature-input": "comm-b38rlmpnkote7pj6ixyf82o_ohj9xgqfozepxd7g9a8=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:Y29uZmln, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:MA, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Config:MHgxOWI5NGE3YmQzZGZiZDVhZjUyODY1MGZmNDkyODAyYmZkYjkwOWFmZjcwNjA4Njg0ZmVhY2UyNGYzZTA4YTAx, 6:Sequence-Sessions-Version:Mw, 7:Sequence-Sessions-Complete:dHJ1ZQ, 8:Sequence-Sessions-Signers-Count:Mw, 9:Sequence-Sessions-Signers-Bloom:MHgwMDAwMDAwMTIwMDAwNDA0MDAwMDAwMDQwMDAwMDAwMDAwMDAwMTAwMDAwMDAwMDAwMDAwMzEyMDAwMDAyMDEw\", comm-il29hgsyyy8ti2jdr8t-9zseofap4epv1ew-_yjtrxq=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-config\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-signers-bloom\" \"sequence-sessions-signers-count\" \"sequence-sessions-type\" \"sequence-sessions-version\");alg=\"hmac-sha256\";keyid=\"constant:ao\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kgitQmrvR9rzg6zMlMxn7wKABUI/mFKkvgQifxHMnmtqmyzTxg", + "x-77-nzt-ray": "3f9f132583faaf24a5d7df69caa95d0a", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"12\",\"threshold\":2,\"tree\":[[{\"address\":\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\",\"weight\":1},{\"address\":\"0x4eEa115852357FC87Ad9E1AD4A4554fECE1e7ff7\",\"weight\":1}],{\"address\":\"0xEb80E4dF62074285675DD0b2Bc360272847444cb\",\"weight\":1}]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 100, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"config update\\\"] }, { name: \\\"Sequence-Sessions-Wallet\\\", values: [\\\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\\\"] }, { name: \\\"Sequence-Sessions-Signer\\\", values: [\\\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\\\", \\\"0x4eEa115852357FC87Ad9E1AD4A4554fECE1e7ff7\\\", \\\"0xEb80E4dF62074285675DD0b2Bc360272847444cb\\\"] }, { name: \\\"Sequence-Sessions-Signature-Type\\\", values: [\\\"eip-712\\\", \\\"eth_sign\\\", \\\"erc-1271\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb691f205a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:33 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=604", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kgw/4qBeSg1P1uuTNx/Hcxi0jSn8niL83kSvawnOBygh", + "x-77-nzt-ray": "331b5e0fe1a2ac95a5d7df699e05d310", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":false},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCIxSmZCQ0w3bnpaSzlxcmZ6OHFPQTRZVjEtR1JmLU1FLWIwenVxY3J3NmRFIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"1JfBCL7nzZK9qrfz8qOA4YV1-GRf-ME-b0zuqcrw6dE\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x512485d4e46a9758b98e84105d4d54755ce6645bd3ddbab0e850c968a8ef25ba\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0x7178a76bb537253e8f37c2c6a400af1a85b7f5314ae9f06bfeb1a93df275fca3\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"11\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0040000000000000000000000000000000411100008100000000003000002010\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJHMHo4V29aYm85allnbzFsa01GbHRLcm9uc2c3em16WmVuUFRiVkZNaldjIl0sImluZGV4IjoxfQ==\",\"node\":{\"id\":\"G0z8WoZbo9jYgo1lkMFltKronsg7zmzZenPTbVFMjWc\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0xa3c45186be4593770ea3414abbd86c5e10f5791b093372b2f8a9a25482e9f826\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0x2bafea1dbc6381b39848d226dccb906f23171edf7661149da26ab609d15a1339\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"10\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000000000000000000000000000400400100408100000001003000082010\"}]}},{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk3NDg3LCJnZGdUclNoR09vUjBzYlFXSVI0M1hEUE5JTmI3THExUFVMUEY4SU9RNy1ZIl0sImluZGV4IjoyfQ==\",\"node\":{\"id\":\"gdgTrShGOoR0sbQWIR43XDPNINb7Lq1PULPF8IOQ7-Y\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"text/plain\"},{\"name\":\"Sequence-Sessions-Signature-Type\",\"value\":\"eth_sign\"},{\"name\":\"Sequence-Sessions-Signer\",\"value\":\"0xAda52e758d6e6dff5e9Cf5E944cF6D3f21387F07\"},{\"name\":\"Sequence-Sessions-Subdigest\",\"value\":\"0x64825b014c15f38a1464da1a4fc9694584a59f052ae2065dac457935f488059b\"},{\"name\":\"Sequence-Sessions-Wallet\",\"value\":\"0x135769a58639b4Fa7d779a9df9B57A706FBCa816\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Witness\",\"value\":\"false\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"2\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0x19b94a7bd3dfbd5af528650ff492802bfdb909aff70608684feace24f3e08a01\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"12\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000000120000404000000040000000000000100000000000000312000002010\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Tree", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"imageHash\":\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb6d89d7c45b-YYZ", + "connection": "keep-alive", + "content-length": "250", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:34 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"version\":3,\"tree\":{\"data\":\"0x53657175656e6365207265636f76657279206c6561663a0acd8b2b62b2ebe631c54ed0cc6f366794da6ff9210000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000000000000\"}}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 1, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"tree\\\"] }, { name: \\\"Sequence-Sessions-Tree\\\", values: [\\\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb6d6abe5a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:34 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=10,cfOrigin;dur=860", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "ktvGusekN26TEaTojilG7xgDP1HgCOxZxFZos1oIuzfe", + "x-77-nzt-ray": "331b5e0fe1a2ac95a5d7df69b184a939", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":true},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk0NjAwLCJEWDNTWFZQM2JRMHVJdUszemdFRG01bGhOcVdobFZ5b1FSMVBCTlg1RVZRIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"DX3SXVP3bQ0uIuK3zgEDm5lhNqWhlVyoQR1PBNX5EVQ\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"tree\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"0\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Tree\",\"value\":\"0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3\"},{\"name\":\"Sequence-Sessions-Complete\",\"value\":\"true\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/DX3SXVP3bQ0uIuK3zgEDm5lhNqWhlVyoQR1PBNX5EVQ", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:qM7Bkyg+mTuQK5e9pXMhkxjPMYMlBs9jzrZPiEyacok=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:35 GMT", + "sequence-sessions-complete": "true", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "0", + "sequence-sessions-tree": "0xeef69774e1cb488a71f6d235c858fa564134ee7c3acda9ff116b6c9d42b3cee3", + "sequence-sessions-type": "tree", + "server": "CDN77-Turbo", + "signature": "comm-a11d_hsfetaqh-a7f91x_ponikv_nsvqfihjthrz-py=:L1yxUCmwZ4/xlamH02g3fxhZ07XoyZN+lDpJ7qqeCkU=:, comm-dx3sxvp3bq0uiuk3zgedm5lhnqwhlvyoqr1pbnx5evq=:X3r/xo7yfg6fvD9WoIqEpBJ+lQwDyPjyYEGnb27OcidyahZZuAdsX1OlKKmrrqRsWKcOoY7oMrCG7mPPKpNfexw=:", + "signature-input": "comm-a11d_hsfetaqh-a7f91x_ponikv_nsvqfihjthrz-py=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-tree\" \"sequence-sessions-type\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-dx3sxvp3bq0uiuk3zgedm5lhnqwhlvyoqr1pbnx5evq=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-complete\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-tree\" \"sequence-sessions-type\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:dHJlZQ, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:MA, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Tree:MHhlZWY2OTc3NGUxY2I0ODhhNzFmNmQyMzVjODU4ZmE1NjQxMzRlZTdjM2FjZGE5ZmYxMTZiNmM5ZDQyYjNjZWUz, 6:Sequence-Sessions-Complete:dHJ1ZQ\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kuPrk/ujs35DBlekVTvr5jJ5pCrbdv4t5IEOkG3tG5DDuN1X9A", + "x-77-nzt-ray": "f03d06137f7e9036a6d7df697c5d623b", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"data\":\"0x53657175656e6365207265636f76657279206c6561663a0acd8b2b62b2ebe631c54ed0cc6f366794da6ff9210000000000000000000000000000000000000000000000000000000000278d000000000000000000000000000000000000000000000000000000000000000000\"}" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Payload", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"digest\":\"0xc78f3951686b7f16f39e25aea1fd5acc0e2177083c170b4c962be6cd45630576\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb743cf0c45b-YYZ", + "connection": "keep-alive", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:35 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "transfer-encoding": "chunked", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"version\":3,\"payload\":{\"calls\":[{\"behaviorOnError\":\"revert\",\"data\":\"0xe2a53ed00000000000000000000000003c499c542cef5e3811e1192ce70d8cc03d5c3359000000000000000000000000000000000000000000000000000000000007d1f4\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0x4B3eC67c5812543924C12a07140369C29077071e\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0x095ea7b3000000000000000000000000fdb42a198a932c8d3b506ffa5e855bc4b348a712ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0xe6bd720e0000000000000000000000000000000000000000000000000000000000002337000000000000000000000000000000000000000000000000000000000000000100000000000000000000000068104a4e8a0da125cfcbe4918dc44c157da5cf5600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000858db1cbf6d09d447c96a11603189b49b2d1c219\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0xfdb42A198a932C8D3B506Ffa5e855bC4b348a712\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0xb8dc491b0000000000000000000000003c499c542cef5e3811e1192ce70d8cc03d5c335900000000000000000000000068104a4e8a0da125cfcbe4918dc44c157da5cf56\",\"delegateCall\":true,\"gasLimit\":\"0\",\"onlyFallback\":true,\"to\":\"0xBaE357CBAA04a68cbfD5a560Ab06C4E9A3328A90\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0x095ea7b3000000000000000000000000fdb42a198a932c8d3b506ffa5e855bc4b348a7120000000000000000000000000000000000000000000000000000000000000000\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0xd86930726aa24a63\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0x0000000000000000000000000000000000000004\",\"value\":\"0\"}],\"nonce\":\"0\",\"space\":\"0\",\"type\":\"call\"},\"wallet\":\"0x2D733fB8F1fB7669B0AFA980C11F1A6dd4F630F5\",\"chainID\":\"137\"}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 1, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"payload\\\"] }, { name: \\\"Sequence-Sessions-Major-Version\\\", values: [\\\"1\\\"] }, { name: \\\"Sequence-Sessions-Minor-Version\\\", values: [\\\"2\\\"] }, { name: \\\"Sequence-Sessions-Payload\\\", values: [\\\"0xc78f3951686b7f16f39e25aea1fd5acc0e2177083c170b4c962be6cd45630576\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb7458815a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:35 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=6,cfOrigin;dur=160", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kky/ENH9JInPTEZqn2ndbNgN0+M4+SAb9s4G6PCc3KZq", + "x-77-nzt-ray": "331b5e0fe1a2ac95a7d7df69514c8a04", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":true},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk2ODY0LCIyUUdGMXBQVThxVjlpSnRMWkFDdXN5akRRak9NX1pQOVA1aXBXSmZNWnZZIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"2QGF1pPU8qV9iJtLZACusyjDQjOM_ZP9P5ipWJfMZvY\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"payload\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"2\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Payload\",\"value\":\"0xc78f3951686b7f16f39e25aea1fd5acc0e2177083c170b4c962be6cd45630576\"},{\"name\":\"Sequence-Sessions-Address\",\"value\":\"0x2D733fB8F1fB7669B0AFA980C11F1A6dd4F630F5\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"137\"},{\"name\":\"Sequence-Sessions-Payload-Type\",\"value\":\"calls\"},{\"name\":\"Sequence-Sessions-Space\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Nonce\",\"value\":\"0\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/2QGF1pPU8qV9iJtLZACusyjDQjOM_ZP9P5ipWJfMZvY", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:y73VlX9cN7fjXboylCRs43zrkkidSnrYBsg/a62Xmxo=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:35 GMT", + "sequence-sessions-address": "0x2D733fB8F1fB7669B0AFA980C11F1A6dd4F630F5", + "sequence-sessions-chain-id": "137", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "2", + "sequence-sessions-nonce": "0", + "sequence-sessions-payload": "0xc78f3951686b7f16f39e25aea1fd5acc0e2177083c170b4c962be6cd45630576", + "sequence-sessions-payload-type": "calls", + "sequence-sessions-space": "0", + "sequence-sessions-type": "payload", + "server": "CDN77-Turbo", + "signature": "comm-2qgf1ppu8qv9ijtlzacusyjdqjom_zp9p5ipwjfmzvy=:EprEWA/QS88utcQNaUU9Mm9m7CxrUBn65vOfEq8sqBAJ4v4GO9UAm+0SOkeF2uN3GwKLbavIAK1QPIPKONw58hw=:, comm-q_y3jmjfuj2dbzu0ixgerlile_uk1vh_fwegfphj-kg=:2VqYVrvsUIA5dRuJeyHv4D8jGMtRVpkfB29bRQaoOv8=:", + "signature-input": "comm-2qgf1ppu8qv9ijtlzacusyjdqjom_zp9p5ipwjfmzvy=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-nonce\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-space\" \"sequence-sessions-type\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:cGF5bG9hZA, 10:Sequence-Sessions-Nonce:MA, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:Mg, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Payload:MHhjNzhmMzk1MTY4NmI3ZjE2ZjM5ZTI1YWVhMWZkNWFjYzBlMjE3NzA4M2MxNzBiNGM5NjJiZTZjZDQ1NjMwNTc2, 6:Sequence-Sessions-Address:MHgyRDczM2ZCOEYxZkI3NjY5QjBBRkE5ODBDMTFGMUE2ZGQ0RjYzMEY1, 7:Sequence-Sessions-Chain-ID:MTM3, 8:Sequence-Sessions-Payload-Type:Y2FsbHM, 9:Sequence-Sessions-Space:MA\", comm-q_y3jmjfuj2dbzu0ixgerlile_uk1vh_fwegfphj-kg=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-nonce\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-space\" \"sequence-sessions-type\");alg=\"hmac-sha256\";keyid=\"constant:ao\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kvXz0wEERDnzpE02FEx7DASf9Vn8KQ1OK/HUGQ/AKAKRl8ru1A", + "x-77-nzt-ray": "3f9f132582d25d8aa7d7df696573b718", + "x-77-pop": "newyorkUSNY" + }, + "body": "[{\"behaviorOnError\":\"revert\",\"data\":\"0xe2a53ed00000000000000000000000003c499c542cef5e3811e1192ce70d8cc03d5c3359000000000000000000000000000000000000000000000000000000000007d1f4\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0x4B3eC67c5812543924C12a07140369C29077071e\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0x095ea7b3000000000000000000000000fdb42a198a932c8d3b506ffa5e855bc4b348a712ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0xe6bd720e0000000000000000000000000000000000000000000000000000000000002337000000000000000000000000000000000000000000000000000000000000000100000000000000000000000068104a4e8a0da125cfcbe4918dc44c157da5cf5600000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000030d40000000000000000000000000000000000000000000000000000000000000001000000000000000000000000858db1cbf6d09d447c96a11603189b49b2d1c219\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0xfdb42A198a932C8D3B506Ffa5e855bC4b348a712\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0xb8dc491b0000000000000000000000003c499c542cef5e3811e1192ce70d8cc03d5c335900000000000000000000000068104a4e8a0da125cfcbe4918dc44c157da5cf56\",\"delegateCall\":true,\"gasLimit\":\"0\",\"onlyFallback\":true,\"to\":\"0xBaE357CBAA04a68cbfD5a560Ab06C4E9A3328A90\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0x095ea7b3000000000000000000000000fdb42a198a932c8d3b506ffa5e855bc4b348a7120000000000000000000000000000000000000000000000000000000000000000\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0x3c499c542cEF5E3811e1192ce70d8cC03d5c3359\",\"value\":\"0\"},{\"behaviorOnError\":\"ignore\",\"data\":\"0xd86930726aa24a63\",\"delegateCall\":false,\"gasLimit\":\"0\",\"onlyFallback\":false,\"to\":\"0x0000000000000000000000000000000000000004\",\"value\":\"0\"}]" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Payload", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"digest\":\"0x3a841ba3163a7a19cd168373df1144d38130b2f46b8d6eac956127f06fffe4f4\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb76eccec45b-YYZ", + "connection": "keep-alive", + "content-length": "531", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:35 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"version\":3,\"payload\":{\"message\":\"0x7b22616374696f6e223a22636f6e73656e742d746f2d62652d706172742d6f662d77616c6c6574222c2277616c6c6574223a22307844323437443562313932353732393438634365643444624131633634386262366662666539306543222c227369676e6572223a22307830643662303266623238306533353336303364356538613462646136623432366135633762343138222c2274696d657374616d70223a313736363038333632303439382c227369676e65724b696e64223a226c6f63616c2d646576696365227d\",\"type\":\"message\"},\"wallet\":\"0xD247D5b192572948cCed4DbA1c648bb6fbfe90eC\",\"chainID\":\"0\"}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 1, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"payload\\\"] }, { name: \\\"Sequence-Sessions-Major-Version\\\", values: [\\\"1\\\"] }, { name: \\\"Sequence-Sessions-Minor-Version\\\", values: [\\\"2\\\"] }, { name: \\\"Sequence-Sessions-Payload\\\", values: [\\\"0x3a841ba3163a7a19cd168373df1144d38130b2f46b8d6eac956127f06fffe4f4\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb770ab35a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:35 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=8,cfOrigin;dur=374", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kqX6v+4iErm5YUpn1+BYcdVbqzpv/72vAxv/CecuStWy", + "x-77-nzt-ray": "331b5e0fe1a2ac95a7d7df691e56231e", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":true},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk2ODY0LCIzSGYxUFdGaF9ZdzRhdTBDWjhBYU14NldCX0ZWQ1Q5UkJIMy1OOW1wVlJnIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"3Hf1PWFh_Yw4au0CZ8AaMx6WB_FVCT9RBH3-N9mpVRg\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"payload\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"2\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Payload\",\"value\":\"0x3a841ba3163a7a19cd168373df1144d38130b2f46b8d6eac956127f06fffe4f4\"},{\"name\":\"Sequence-Sessions-Address\",\"value\":\"0xD247D5b192572948cCed4DbA1c648bb6fbfe90eC\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Payload-Type\",\"value\":\"message\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/3Hf1PWFh_Yw4au0CZ8AaMx6WB_FVCT9RBH3-N9mpVRg", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:A1YMLxj1j3HT9nFpONVt2VC77V87xprIq9H/yLXq9j8=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:36 GMT", + "sequence-sessions-address": "0xD247D5b192572948cCed4DbA1c648bb6fbfe90eC", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "2", + "sequence-sessions-payload": "0x3a841ba3163a7a19cd168373df1144d38130b2f46b8d6eac956127f06fffe4f4", + "sequence-sessions-payload-type": "message", + "sequence-sessions-type": "payload", + "server": "CDN77-Turbo", + "signature": "comm-3hf1pwfh_yw4au0cz8aamx6wb_fvct9rbh3-n9mpvrg=:790rl5TXvVj20BC8LJ98yNjsx4ejtsrgBSFEZm/obn9h5lK8UPI5ztHX+WA5psYNPhxi1XvTNfEhwZmyz9pG5xs=:, comm-fdqefal8-0i-shhtdty8o5mtdosf0h_yvt9gipd4ziu=:UoLz2MjgY7q35/CBTDrfiRRMA8ieQKTi5ATCLXg4YF0=:", + "signature-input": "comm-3hf1pwfh_yw4au0cz8aamx6wb_fvct9rbh3-n9mpvrg=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-type\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:cGF5bG9hZA, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:Mg, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Payload:MHgzYTg0MWJhMzE2M2E3YTE5Y2QxNjgzNzNkZjExNDRkMzgxMzBiMmY0NmI4ZDZlYWM5NTYxMjdmMDZmZmZlNGY0, 6:Sequence-Sessions-Address:MHhEMjQ3RDViMTkyNTcyOTQ4Y0NlZDREYkExYzY0OGJiNmZiZmU5MGVD, 7:Sequence-Sessions-Chain-ID:MA, 8:Sequence-Sessions-Payload-Type:bWVzc2FnZQ\", comm-fdqefal8-0i-shhtdty8o5mtdosf0h_yvt9gipd4ziu=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-type\");alg=\"hmac-sha256\";keyid=\"constant:ao\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kon1rwdQeQ1znuXHKI8UDqFy/lgo04k2GpXNPxF/7tZEmWehhw", + "x-77-nzt-ray": "8705ec34712958dfa8d7df69d7f8d003", + "x-77-pop": "newyorkUSNY" + }, + "body": "\"0x7b22616374696f6e223a22636f6e73656e742d746f2d62652d706172742d6f662d77616c6c6574222c2277616c6c6574223a22307844323437443562313932353732393438634365643444624131633634386262366662666539306543222c227369676e6572223a22307830643662303266623238306533353336303364356538613462646136623432366135633762343138222c2274696d657374616d70223a313736363038333632303439382c227369676e65724b696e64223a226c6f63616c2d646576696365227d\"" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Payload", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"digest\":\"0xcae631660ffa90bddc5e9b4fa9c11692a53062a61640fb958f3f2959d22fe54b\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb7b6a0cc45b-YYZ", + "connection": "keep-alive", + "content-length": "197", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:36 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"version\":3,\"payload\":{\"imageHash\":\"0xe25d51d076cbb34dd4f68b26421724e2f6f7be49dfd913dae3d0c0fa05e86d53\",\"type\":\"config-update\"},\"wallet\":\"0xC018D4EB963bDe912f3a440554Af070c7C0BF313\",\"chainID\":\"0\"}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 1, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"payload\\\"] }, { name: \\\"Sequence-Sessions-Major-Version\\\", values: [\\\"1\\\"] }, { name: \\\"Sequence-Sessions-Minor-Version\\\", values: [\\\"2\\\"] }, { name: \\\"Sequence-Sessions-Payload\\\", values: [\\\"0xcae631660ffa90bddc5e9b4fa9c11692a53062a61640fb958f3f2959d22fe54b\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb7b8e245a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:36 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=7,cfOrigin;dur=171", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "kvQQ+5s8UFxvEgTO6p+xw8zMfYsSlUhNC3eI+QhmYpqk", + "x-77-nzt-ray": "331b5e0fe1a2ac95a8d7df69c0c4840d", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":true},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk2ODc3LCJUd20zU3NzTzlITTJSOG9CSkp0V1JwSUFaeThHemFjcFE5dnBFWUdLWnVFIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"Twm3SssO9HM2R8oBJJtWRpIAZy8GzacpQ9vpEYGKZuE\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"payload\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"2\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Payload\",\"value\":\"0xcae631660ffa90bddc5e9b4fa9c11692a53062a61640fb958f3f2959d22fe54b\"},{\"name\":\"Sequence-Sessions-Address\",\"value\":\"0xC018D4EB963bDe912f3a440554Af070c7C0BF313\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"0\"},{\"name\":\"Sequence-Sessions-Payload-Type\",\"value\":\"config update\"},{\"name\":\"Sequence-Sessions-To-Config\",\"value\":\"0xe25d51d076cbb34dd4f68b26421724e2f6f7be49dfd913dae3d0c0fa05e86d53\"},{\"name\":\"Sequence-Sessions-To-Version\",\"value\":\"3\"},{\"name\":\"Sequence-Sessions-To-Checkpoint\",\"value\":\"4\"},{\"name\":\"Sequence-Sessions-To-Config-Complete\",\"value\":\"true\"},{\"name\":\"Sequence-Sessions-To-Signers-Count\",\"value\":\"7\"},{\"name\":\"Sequence-Sessions-To-Signers-Bloom\",\"value\":\"0x0000008008000100802082840208090100000023400000140002000500020409\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/Twm3SssO9HM2R8oBJJtWRpIAZy8GzacpQ9vpEYGKZuE", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:sDSB/zhiOWptyMrGP5eMgYGCSjAG+AEX5ek1NCPhKTI=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:36 GMT", + "sequence-sessions-address": "0xC018D4EB963bDe912f3a440554Af070c7C0BF313", + "sequence-sessions-chain-id": "0", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "2", + "sequence-sessions-payload": "0xcae631660ffa90bddc5e9b4fa9c11692a53062a61640fb958f3f2959d22fe54b", + "sequence-sessions-payload-type": "config update", + "sequence-sessions-to-checkpoint": "4", + "sequence-sessions-to-config": "0xe25d51d076cbb34dd4f68b26421724e2f6f7be49dfd913dae3d0c0fa05e86d53", + "sequence-sessions-to-config-complete": "true", + "sequence-sessions-to-signers-bloom": "0x0000008008000100802082840208090100000023400000140002000500020409", + "sequence-sessions-to-signers-count": "7", + "sequence-sessions-to-version": "3", + "sequence-sessions-type": "payload", + "server": "CDN77-Turbo", + "signature": "comm-5pnsazaxuuh8mktavldjkji_92nknngtzzri_wuxhia=:+TfdPyPtERmEfeW5geLa7tkcJ7ZcdKsRkDNgBG3oJos=:, comm-twm3ssso9hm2r8objjtwrpiazy8gzacpq9vpeygkzue=:UrFROJgchVKSsHYlhqdsLasc82cIbkqkHd7Ia9u+h5kCiuVuSHn/DGt7Dp4+fTxAYJlgr3uDy8yEK6FDPP0FVRs=:", + "signature-input": "comm-5pnsazaxuuh8mktavldjkji_92nknngtzzri_wuxhia=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-to-version\" \"sequence-sessions-type\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-twm3ssso9hm2r8objjtwrpiazy8gzacpq9vpeygkzue=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-to-checkpoint\" \"sequence-sessions-to-config\" \"sequence-sessions-to-config-complete\" \"sequence-sessions-to-signers-bloom\" \"sequence-sessions-to-signers-count\" \"sequence-sessions-to-version\" \"sequence-sessions-type\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:cGF5bG9hZA, 10:Sequence-Sessions-To-Version:Mw, 11:Sequence-Sessions-To-Checkpoint:NA, 12:Sequence-Sessions-To-Config-Complete:dHJ1ZQ, 13:Sequence-Sessions-To-Signers-Count:Nw, 14:Sequence-Sessions-To-Signers-Bloom:MHgwMDAwMDA4MDA4MDAwMTAwODAyMDgyODQwMjA4MDkwMTAwMDAwMDIzNDAwMDAwMTQwMDAyMDAwNTAwMDIwNDA5, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:Mg, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Payload:MHhjYWU2MzE2NjBmZmE5MGJkZGM1ZTliNGZhOWMxMTY5MmE1MzA2MmE2MTY0MGZiOTU4ZjNmMjk1OWQyMmZlNTRi, 6:Sequence-Sessions-Address:MHhDMDE4RDRFQjk2M2JEZTkxMmYzYTQ0MDU1NEFmMDcwYzdDMEJGMzEz, 7:Sequence-Sessions-Chain-ID:MA, 8:Sequence-Sessions-Payload-Type:Y29uZmlnIHVwZGF0ZQ, 9:Sequence-Sessions-To-Config:MHhlMjVkNTFkMDc2Y2JiMzRkZDRmNjhiMjY0MjE3MjRlMmY2ZjdiZTQ5ZGZkOTEzZGFlM2QwYzBmYTA1ZTg2ZDUz\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "kgtQOfxtm1ATCfanlgWwAEqGnZLSUhWuvzXjo6pK4TdefM3aSw", + "x-77-nzt-ray": "3f9f132578e09bbba8d7df6948a99d21", + "x-77-pop": "newyorkUSNY" + }, + "body": "{\"checkpoint\":\"4\",\"threshold\":2,\"tree\":[[[{\"address\":\"0xF223a6E051B743BfEC993e17555d31cee5ac9fE9\",\"weight\":1},{\"address\":\"0xB34EFD7629C431d2caDf69d9aFDEA984Ff6EC86b\",\"weight\":1}],{\"threshold\":1,\"tree\":[{\"address\":\"0x26f3D30F41FA897309Ae804A2AFf15CEb1dA5742\",\"weight\":1},{\"address\":\"0x007a47e6BF40C1e0ed5c01aE42fDC75879140bc4\",\"weight\":1}],\"weight\":1}],[{\"threshold\":2,\"tree\":[{\"address\":\"0x00000000000030Bcc832F7d657f50D6Be35C92b3\",\"imageHash\":\"0x507c907dd7fbb034d69ea4287e7a52c9d689d9795ac4d8ef38231bb87e38feec\",\"weight\":1},{\"threshold\":1,\"tree\":[{\"address\":\"0xF6Bc87F5F2edAdb66737E32D37b46423901dfEF1\",\"weight\":1},{\"address\":\"0x007a47e6BF40C1e0ed5c01aE42fDC75879140bc4\",\"weight\":1}],\"weight\":1}],\"weight\":255},{\"address\":\"0x000000000000AB36D17eB1150116371520565205\",\"imageHash\":\"0x5b59a76df21cc0aebe78bafe7d705f9dffb21d5ccf633d0f53a8cc7dd35730b7\",\"weight\":255}]]}" + } + }, + { + "request": { + "method": "POST", + "url": "https://keymachine.sequence.app/rpc/Sessions/Payload", + "headers": { + "content-type": "application/json", + "webrpc": "webrpc@v0.22.1;gen-typescript@v0.16.2;sessions@v0.0.1" + }, + "body": "{\"digest\":\"0xcd3c291e0939f029aaa4b4f292d5d2b2ce43baf98046d9abc2a3e8284b253432\"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "alt-svc": "h3=\":443\"; ma=86400", + "cache-control": "no-cache, no-store, no-transform, must-revalidate, private, max-age=0", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb7e3a5cc45b-YYZ", + "connection": "keep-alive", + "content-length": "187", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:36 GMT", + "expires": "Thu, 01 Jan 1970 00:00:00 GMT", + "pragma": "no-cache", + "server": "cloudflare", + "strict-transport-security": "max-age=2592000; includeSubDomains", + "vary": "Origin", + "via": "1.1 google", + "webrpc": "webrpc@v0.22.1;gen-golang@v0.17.0;key-machine@v0.0.1" + }, + "body": "{\"version\":3,\"payload\":{\"digest\":\"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\",\"type\":\"digest\"},\"wallet\":\"0x1111111111111111111111111111111111111111\",\"chainID\":\"1\"}" + } + }, + { + "request": { + "method": "POST", + "url": "https://arweave.net/graphql", + "headers": { + "content-type": "application/json" + }, + "body": "{\"query\":\"\\n query {\\n transactions(sort: HEIGHT_DESC, first: 1, tags: [{ name: \\\"Sequence-Sessions-Type\\\", values: [\\\"payload\\\"] }, { name: \\\"Sequence-Sessions-Major-Version\\\", values: [\\\"1\\\"] }, { name: \\\"Sequence-Sessions-Minor-Version\\\", values: [\\\"2\\\"] }, { name: \\\"Sequence-Sessions-Payload\\\", values: [\\\"0xcd3c291e0939f029aaa4b4f292d5d2b2ce43baf98046d9abc2a3e8284b253432\\\"] }], owners: [\\\"AZ6R2mG8zxW9q7--iZXGrBknjegHoPzmG5IG-nxvMaM\\\"]) {\\n pageInfo {\\n hasNextPage\\n }\\n edges {\\n cursor\\n node {\\n id\\n tags {\\n name\\n value\\n }\\n }\\n }\\n }\\n }\\n \"}" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "cache-control": "no-store", + "cf-cache-status": "DYNAMIC", + "cf-ray": "9eccfb7e48075a46-IAD", + "connection": "keep-alive", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:36 GMT", + "server": "CDN77-Turbo", + "server-timing": "cfCacheStatus;desc=\"DYNAMIC\", cfEdge;dur=4,cfOrigin;dur=188", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding, Origin", + "x-77-cache": "MISS", + "x-77-nzt": "khTWKji6AMQLths5NYi/adhHHOlYkr5Pbz13CeYGRmzp", + "x-77-nzt-ray": "331b5e0fe1a2ac95a8d7df69e27a3228", + "x-77-pop": "montrealCAQC", + "x-upstream-url": "https://arweave-search.goldsky.com/graphql" + }, + "body": "{\"data\":{\"transactions\":{\"pageInfo\":{\"hasNextPage\":true},\"edges\":[{\"cursor\":\"eyJzZWFyY2hfYWZ0ZXIiOlsxODk2ODY3LCJsVmgyQUxiTTNrTHlKcDdtb0pBNUk4d1Y1Y1VsY25LeUI1bnJGSVNPdkVvIl0sImluZGV4IjowfQ==\",\"node\":{\"id\":\"lVh2ALbM3kLyJp7moJA5I8wV5cUlcnKyB5nrFISOvEo\",\"tags\":[{\"name\":\"Sequence-Sessions-Type\",\"value\":\"payload\"},{\"name\":\"Sequence-Sessions-Major-Version\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Minor-Version\",\"value\":\"2\"},{\"name\":\"Content-Type\",\"value\":\"application/json\"},{\"name\":\"Sequence-Sessions-Payload\",\"value\":\"0xcd3c291e0939f029aaa4b4f292d5d2b2ce43baf98046d9abc2a3e8284b253432\"},{\"name\":\"Sequence-Sessions-Address\",\"value\":\"0x1111111111111111111111111111111111111111\"},{\"name\":\"Sequence-Sessions-Chain-ID\",\"value\":\"1\"},{\"name\":\"Sequence-Sessions-Payload-Type\",\"value\":\"digest\"},{\"name\":\"Sequence-Sessions-Digest\",\"value\":\"0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef\"}]}}]}}}\n" + } + }, + { + "request": { + "method": "GET", + "url": "https://arweave.net/lVh2ALbM3kLyJp7moJA5I8wV5cUlcnKyB5nrFISOvEo", + "headers": {}, + "body": "" + }, + "response": { + "status": 200, + "statusText": "OK", + "headers": { + "access-control-allow-headers": "*", + "access-control-allow-methods": "GET, POST, HEAD, OPTIONS", + "access-control-allow-origin": "*", + "access-control-expose-headers": "X-ArNS-Resolved-Id, X-ArNS-TTL-Seconds, X-ArNS-Process-Id, X-ArNS-Undername-Limit, X-ArNS-Record-Index", + "ao-body-key": "data", + "ao-types": "status=\"integer\"", + "connection": "keep-alive", + "content-digest": "sha-256=:dCNOmK/nSY+12vHzasLXiswzlGT5UHA7jAGYkvmCuQs=:", + "content-encoding": "gzip", + "content-type": "application/json", + "date": "Wed, 15 Apr 2026 18:23:37 GMT", + "sequence-sessions-address": "0x1111111111111111111111111111111111111111", + "sequence-sessions-chain-id": "1", + "sequence-sessions-digest": "0xdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef", + "sequence-sessions-major-version": "1", + "sequence-sessions-minor-version": "2", + "sequence-sessions-payload": "0xcd3c291e0939f029aaa4b4f292d5d2b2ce43baf98046d9abc2a3e8284b253432", + "sequence-sessions-payload-type": "digest", + "sequence-sessions-type": "payload", + "server": "CDN77-Turbo", + "signature": "comm-_jzqikhymam_lprvj7ycaaktslaa0sbqc7czeyhvbhg=:2nut0qs1ieXwfVSjm9pppo+WVEbavBKS+FfI0s0auYI=:, comm-lvh2albm3klyjp7moja5i8wv5culcnkyb5nrfisoveo=:ZINUHXdgCdrtP9TmAanj/BS4HaadRFWWaferNtdEEKtriq3gi/My1CCCpPc5MI7FwVsOHpYmIrTP3ZRIAhG+xBs=:", + "signature-input": "comm-_jzqikhymam_lprvj7ycaaktslaa0sbqc7czeyhvbhg=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-digest\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-type\");alg=\"hmac-sha256\";keyid=\"constant:ao\", comm-lvh2albm3klyjp7moja5i8wv5culcnkyb5nrfisoveo=(\"ao-body-key\" \"content-digest\" \"content-type\" \"sequence-sessions-address\" \"sequence-sessions-chain-id\" \"sequence-sessions-digest\" \"sequence-sessions-major-version\" \"sequence-sessions-minor-version\" \"sequence-sessions-payload\" \"sequence-sessions-payload-type\" \"sequence-sessions-type\");alg=\"ans104@1.0/ethereum\";keyid=\"publickey:BCwPuj81bBSAUGJtslnOolGAOVnjkrC-I2cb6NcN_LafVFnmIz_BbUxSWkYflq6AyqWMD2xcLZkWrgMij33mDD0\";bundle=\"false\";original-tags=\"1:Sequence-Sessions-Type:cGF5bG9hZA, 2:Sequence-Sessions-Major-Version:MQ, 3:Sequence-Sessions-Minor-Version:Mg, 4:Content-Type:YXBwbGljYXRpb24vanNvbg, 5:Sequence-Sessions-Payload:MHhjZDNjMjkxZTA5MzlmMDI5YWFhNGI0ZjI5MmQ1ZDJiMmNlNDNiYWY5ODA0NmQ5YWJjMmEzZTgyODRiMjUzNDMy, 6:Sequence-Sessions-Address:MHgxMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEx, 7:Sequence-Sessions-Chain-ID:MQ, 8:Sequence-Sessions-Payload-Type:ZGlnZXN0, 9:Sequence-Sessions-Digest:MHhkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVmZGVhZGJlZWZkZWFkYmVlZmRlYWRiZWVm\"", + "status": "200", + "transfer-encoding": "chunked", + "vary": "Accept-Encoding", + "x-77-cache": "MISS", + "x-77-nzt": "knv9xlzlzyl+8BAqY6Rzi6OmidE58jsyXeJYUQRAB8zDDWWidQ", + "x-77-nzt-ray": "f03d061342437487a9d7df69cd5e1901", + "x-77-pop": "newyorkUSNY" + }, + "body": "null" + } + } +] \ No newline at end of file From ae123719ed5e7eaa9829222791ba843873fd7070 Mon Sep 17 00:00:00 2001 From: Corban Riley Date: Mon, 4 May 2026 08:14:45 -0400 Subject: [PATCH 24/43] Upgrade uuid from v13 to v14 (#996) --- packages/wallet/wdk/package.json | 2 +- pnpm-lock.yaml | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 2d62c27953..1934c2e600 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -44,6 +44,6 @@ "idb": "^8.0.3", "jwt-decode": "^4.0.0", "ox": "^0.9.17", - "uuid": "^13.0.0" + "uuid": "^14.0.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 54ad63e327..a9f2f2560e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -474,8 +474,8 @@ importers: specifier: ^0.9.17 version: 0.9.17(typescript@5.9.3)(zod@4.2.0) uuid: - specifier: ^13.0.0 - version: 13.0.0 + specifier: ^14.0.0 + version: 14.0.0 devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -3669,8 +3669,8 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@13.0.0: - resolution: {integrity: sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w==} + uuid@14.0.0: + resolution: {integrity: sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==} hasBin: true v8-compile-cache-lib@3.0.1: @@ -7287,7 +7287,7 @@ snapshots: util-deprecate@1.0.2: {} - uuid@13.0.0: {} + uuid@14.0.0: {} v8-compile-cache-lib@3.0.1: {} From 957f74d8c7cd3415788e74cdba554d89d46dd7e0 Mon Sep 17 00:00:00 2001 From: Corban Riley Date: Mon, 4 May 2026 17:19:55 -0400 Subject: [PATCH 25/43] Upgrading workspace root deps (#997) --- extras/docs/package.json | 2 +- extras/docs/tsconfig.json | 9 +- extras/web/package.json | 2 +- extras/web/tsconfig.json | 9 +- package.json | 10 +- packages/services/api/package.json | 2 +- packages/services/builder/package.json | 2 +- packages/services/guard/package.json | 2 +- .../services/identity-instrument/package.json | 2 +- packages/services/indexer/package.json | 2 +- packages/services/marketplace/package.json | 2 +- packages/services/metadata/package.json | 2 +- packages/services/relayer/package.json | 2 +- packages/services/userdata/package.json | 2 +- packages/utils/abi/package.json | 2 +- packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives-cli/package.json | 2 +- packages/wallet/primitives-cli/tsconfig.json | 3 +- packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/package.json | 2 +- pnpm-lock.yaml | 518 ++++++++---------- repo/eslint-config/package.json | 2 +- .../next-css-side-effect.d.ts | 2 + repo/ui/package.json | 2 +- 25 files changed, 272 insertions(+), 317 deletions(-) create mode 100644 repo/typescript-config/next-css-side-effect.d.ts diff --git a/extras/docs/package.json b/extras/docs/package.json index ccf8cc5bbf..d48a68d1e2 100644 --- a/extras/docs/package.json +++ b/extras/docs/package.json @@ -24,6 +24,6 @@ "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "eslint": "^9.39.2", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/extras/docs/tsconfig.json b/extras/docs/tsconfig.json index c2fa4ee5de..7b98032678 100644 --- a/extras/docs/tsconfig.json +++ b/extras/docs/tsconfig.json @@ -7,6 +7,13 @@ } ] }, - "include": ["**/*.ts", "**/*.tsx", "next-env.d.ts", "next.config.js", ".next/types/**/*.ts"], + "include": [ + "**/*.ts", + "**/*.tsx", + "../../repo/typescript-config/next-css-side-effect.d.ts", + "next-env.d.ts", + "next.config.js", + ".next/types/**/*.ts" + ], "exclude": ["node_modules"] } diff --git a/extras/web/package.json b/extras/web/package.json index b8fdea4997..3f2920e881 100644 --- a/extras/web/package.json +++ b/extras/web/package.json @@ -24,6 +24,6 @@ "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", "eslint": "^9.39.2", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/extras/web/tsconfig.json b/extras/web/tsconfig.json index c2fa4ee5de..7b98032678 100644 --- a/extras/web/tsconfig.json +++ b/extras/web/tsconfig.json @@ -7,6 +7,13 @@ } ] }, - "include": ["**/*.ts", "**/*.tsx", "next-env.d.ts", "next.config.js", ".next/types/**/*.ts"], + "include": [ + "**/*.ts", + "**/*.tsx", + "../../repo/typescript-config/next-css-side-effect.d.ts", + "next-env.d.ts", + "next.config.js", + ".next/types/**/*.ts" + ], "exclude": ["node_modules"] } diff --git a/package.json b/package.json index 92559c5103..512f8a44cb 100644 --- a/package.json +++ b/package.json @@ -21,12 +21,12 @@ }, "devDependencies": { "@changesets/cli": "^2.29.8", - "lefthook": "^2.1.1", - "prettier": "^3.8.1", + "lefthook": "^2.1.6", + "prettier": "^3.8.3", "rimraf": "^6.1.3", - "syncpack": "^14.0.0", - "turbo": "^2.8.10", - "typescript": "^5.9.3" + "syncpack": "^14.3.1", + "turbo": "^2.9.8", + "typescript": "^6.0.3" }, "pnpm": { "overrides": { diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 8d2f87a228..29e0fd74c6 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -26,6 +26,6 @@ "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", "@repo/eslint-config": "workspace:^", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 1897f0ab87..d7b89a694a 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -26,6 +26,6 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index fc489cd03c..57dc6b4e2f 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -28,7 +28,7 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "vitest": "^4.0.18" }, "dependencies": { diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index bb61d8e20c..ea2abd6403 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -24,7 +24,7 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "vitest": "^4.0.18" }, "dependencies": { diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 7ad0de895c..c7c6e6db76 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -26,6 +26,6 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 865e0e5b44..c2b372d073 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -26,6 +26,6 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index acb19b042c..f6b1f39dd1 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -26,6 +26,6 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 0c1422d970..43e3a79d91 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -30,7 +30,7 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "vitest": "^4.0.18" }, "dependencies": { diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 38f3c9d5a8..2d96904775 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -26,6 +26,6 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index d70d75cdc6..909e1226dd 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -26,6 +26,6 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@types/node": "^25.3.0", - "typescript": "^5.9.3" + "typescript": "^6.0.3" } } diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 4133157861..05b3cc7da5 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -29,7 +29,7 @@ "@vitest/coverage-v8": "^4.0.18", "dotenv": "^17.3.1", "fake-indexeddb": "^6.2.5", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "vitest": "^4.0.18" }, "dependencies": { diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 7ed1867e74..71022d182d 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -28,7 +28,7 @@ "dotenv": "^17.3.1", "fake-indexeddb": "^6.2.5", "happy-dom": "^20.8.9", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "vitest": "^4.0.18" }, "dependencies": { diff --git a/packages/wallet/primitives-cli/package.json b/packages/wallet/primitives-cli/package.json index ec35fc66e7..b91c0a8852 100644 --- a/packages/wallet/primitives-cli/package.json +++ b/packages/wallet/primitives-cli/package.json @@ -28,7 +28,7 @@ "concurrently": "^9.2.1", "esbuild": "^0.27.3", "nodemon": "^3.1.14", - "typescript": "^5.9.3" + "typescript": "^6.0.3" }, "dependencies": { "@0xsequence/wallet-primitives": "workspace:^", diff --git a/packages/wallet/primitives-cli/tsconfig.json b/packages/wallet/primitives-cli/tsconfig.json index 1e325a596c..39eeeb0941 100644 --- a/packages/wallet/primitives-cli/tsconfig.json +++ b/packages/wallet/primitives-cli/tsconfig.json @@ -3,7 +3,8 @@ "compilerOptions": { "rootDir": "src", "outDir": "dist", - "sourceMap": true + "sourceMap": true, + "types": ["node"] }, "include": ["src"], "exclude": ["node_modules", "dist"] diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index e0e283de61..0cd4d93dfa 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -26,7 +26,7 @@ "@repo/eslint-config": "workspace:^", "@repo/typescript-config": "workspace:^", "@vitest/coverage-v8": "^4.0.18", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "vitest": "^4.0.18" }, "dependencies": { diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 1934c2e600..681c70c8e9 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -31,7 +31,7 @@ "dotenv": "^17.3.1", "fake-indexeddb": "^6.2.5", "happy-dom": "^20.8.9", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "vitest": "^4.0.18" }, "dependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9f2f2560e..a729099c46 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,23 +15,23 @@ importers: specifier: ^2.29.8 version: 2.29.8(@types/node@25.3.0) lefthook: - specifier: ^2.1.1 - version: 2.1.1 + specifier: ^2.1.6 + version: 2.1.6 prettier: - specifier: ^3.8.1 - version: 3.8.1 + specifier: ^3.8.3 + version: 3.8.3 rimraf: specifier: ^6.1.3 version: 6.1.3 syncpack: - specifier: ^14.0.0 - version: 14.0.0 + specifier: ^14.3.1 + version: 14.3.1 turbo: - specifier: ^2.8.10 - version: 2.8.10 + specifier: ^2.9.8 + version: 2.9.8 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 extras/docs: dependencies: @@ -67,8 +67,8 @@ importers: specifier: ^9.39.2 version: 9.39.2 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 extras/web: dependencies: @@ -104,8 +104,8 @@ importers: specifier: ^9.39.2 version: 9.39.2 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/services/api: devDependencies: @@ -119,8 +119,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/services/builder: devDependencies: @@ -134,14 +134,14 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/services/guard: dependencies: ox: specifier: ^0.9.17 - version: 0.9.17(typescript@5.9.3)(zod@4.2.0) + version: 0.9.17(typescript@6.0.3)(zod@4.2.0) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -153,8 +153,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vitest: specifier: ^4.0.18 version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) @@ -169,7 +169,7 @@ importers: version: 4.0.0 ox: specifier: ^0.9.17 - version: 0.9.17(typescript@5.9.3)(zod@4.2.0) + version: 0.9.17(typescript@6.0.3)(zod@4.2.0) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -181,8 +181,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vitest: specifier: ^4.0.18 version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) @@ -199,8 +199,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/services/marketplace: devDependencies: @@ -214,8 +214,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/services/metadata: devDependencies: @@ -229,8 +229,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/services/relayer: dependencies: @@ -239,13 +239,13 @@ importers: version: link:../../wallet/primitives mipd: specifier: ^0.0.7 - version: 0.0.7(typescript@5.9.3) + version: 0.0.7(typescript@6.0.3) ox: specifier: ^0.9.17 - version: 0.9.17(typescript@5.9.3)(zod@4.2.0) + version: 0.9.17(typescript@6.0.3)(zod@4.2.0) viem: specifier: ^2.40.3 - version: 2.42.1(typescript@5.9.3)(zod@4.2.0) + version: 2.42.1(typescript@6.0.3)(zod@4.2.0) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -257,8 +257,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vitest: specifier: ^4.0.18 version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) @@ -275,8 +275,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/utils/abi: devDependencies: @@ -290,8 +290,8 @@ importers: specifier: ^25.3.0 version: 25.3.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/wallet/core: dependencies: @@ -306,13 +306,13 @@ importers: version: link:../primitives mipd: specifier: ^0.0.7 - version: 0.0.7(typescript@5.9.3) + version: 0.0.7(typescript@6.0.3) ox: specifier: ^0.9.17 - version: 0.9.17(typescript@5.9.3)(zod@4.2.0) + version: 0.9.17(typescript@6.0.3)(zod@4.2.0) viem: specifier: ^2.40.3 - version: 2.42.1(typescript@5.9.3)(zod@4.2.0) + version: 2.42.1(typescript@6.0.3)(zod@4.2.0) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -333,8 +333,8 @@ importers: specifier: ^6.2.5 version: 6.2.5 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vitest: specifier: ^4.0.18 version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) @@ -355,7 +355,7 @@ importers: version: link:../primitives ox: specifier: ^0.9.17 - version: 0.9.17(typescript@5.9.3)(zod@4.2.0) + version: 0.9.17(typescript@6.0.3)(zod@4.2.0) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -379,8 +379,8 @@ importers: specifier: ^20.8.9 version: 20.8.9 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vitest: specifier: ^4.0.18 version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) @@ -389,7 +389,7 @@ importers: dependencies: ox: specifier: ^0.9.17 - version: 0.9.17(typescript@5.9.3)(zod@4.2.0) + version: 0.9.17(typescript@6.0.3)(zod@4.2.0) devDependencies: '@repo/eslint-config': specifier: workspace:^ @@ -401,8 +401,8 @@ importers: specifier: ^4.0.18 version: 4.0.18(vitest@4.0.18(@types/node@25.3.0)(happy-dom@20.8.9)) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vitest: specifier: ^4.0.18 version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) @@ -414,7 +414,7 @@ importers: version: link:../primitives ox: specifier: ^0.9.17 - version: 0.9.17(typescript@5.9.3)(zod@4.2.0) + version: 0.9.17(typescript@6.0.3)(zod@4.2.0) yargs: specifier: ^18.0.0 version: 18.0.0 @@ -441,8 +441,8 @@ importers: specifier: ^3.1.14 version: 3.1.14 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages/wallet/wdk: dependencies: @@ -472,7 +472,7 @@ importers: version: 4.0.0 ox: specifier: ^0.9.17 - version: 0.9.17(typescript@5.9.3)(zod@4.2.0) + version: 0.9.17(typescript@6.0.3)(zod@4.2.0) uuid: specifier: ^14.0.0 version: 14.0.0 @@ -499,8 +499,8 @@ importers: specifier: ^20.8.9 version: 20.8.9 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 vitest: specifier: ^4.0.18 version: 4.0.18(@types/node@25.3.0)(happy-dom@20.8.9) @@ -530,16 +530,16 @@ importers: version: 7.0.1(eslint@9.39.2) eslint-plugin-turbo: specifier: ^2.6.3 - version: 2.6.3(eslint@9.39.2)(turbo@2.8.21) + version: 2.6.3(eslint@9.39.2)(turbo@2.9.8) globals: specifier: ^16.5.0 version: 16.5.0 typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 typescript-eslint: specifier: ^8.49.0 - version: 8.50.0(eslint@9.39.2)(typescript@5.9.3) + version: 8.50.0(eslint@9.39.2)(typescript@6.0.3) repo/typescript-config: {} @@ -560,7 +560,7 @@ importers: version: link:../typescript-config '@turbo/gen': specifier: ^1.13.4 - version: 1.13.4(@types/node@25.3.0)(typescript@5.9.3) + version: 1.13.4(@types/node@25.3.0)(typescript@6.0.3) '@types/node': specifier: ^25.3.0 version: 25.3.0 @@ -571,8 +571,8 @@ importers: specifier: ^19.2.3 version: 19.2.3(@types/react@19.2.7) typescript: - specifier: ^5.9.3 - version: 5.9.3 + specifier: ^6.0.3 + version: 6.0.3 packages: @@ -1326,13 +1326,13 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@turbo/darwin-64@2.8.21': - resolution: {integrity: sha512-kfGoM0Iw8ZNZpbds+4IzOe0hjvHldqJwUPRAjXJi3KBxg/QOZL95N893SRoMtf2aJ+jJ3dk32yPkp8rvcIjP9g==} + '@turbo/darwin-64@2.9.8': + resolution: {integrity: sha512-zU1P95ygDpsQ+2QHh7CVTqvYwi9UBlhKWzoIyUnP3vUoge7H9SQEzrd8dj+XcTrslAp9Db3vIBcXtMVoTEYDnA==} cpu: [x64] os: [darwin] - '@turbo/darwin-arm64@2.8.21': - resolution: {integrity: sha512-o9HEflxUEyr987x0cTUzZBhDOyL6u95JmdmlkH2VyxAw7zq2sdtM5e72y9ufv2N5SIoOBw1fVn9UES5VY5H6vQ==} + '@turbo/darwin-arm64@2.9.8': + resolution: {integrity: sha512-nKRFI5ZhCGUi4eXNlrojzWcT/CehMj0raot1WE4lw5qf66ZxZHbRbBqcwNEy+ZLY7RkJJRY+TaU89fuj3BcgGg==} cpu: [arm64] os: [darwin] @@ -1340,23 +1340,23 @@ packages: resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true - '@turbo/linux-64@2.8.21': - resolution: {integrity: sha512-uTxlCcXWy5h1fSSymP8XSJ+AudzEHMDV3IDfKX7+DGB8kgJ+SLoTUAH7z4OFA7I/l2sznz0upPdbNNZs91YMag==} + '@turbo/linux-64@2.9.8': + resolution: {integrity: sha512-Wf/kQpVDCaWM3P5d6lKvJnqjYn/ofUBGbT4h4vRFrdC4N6B/nsun03S2kQNJJMXpXg39woeS4CI367RMU3/OAg==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.8.21': - resolution: {integrity: sha512-cdHIcxNcihHHkCHp0Y4Zb60K4Qz+CK4xw1gb6s/t/9o4SMeMj+hTBCtoW6QpPnl9xPYmxuTou8Zw6+cylTnREg==} + '@turbo/linux-arm64@2.9.8': + resolution: {integrity: sha512-v6S3HuKVoa9CEx16IxKj1i/+crxXx22A9O80zW1350zyUlcX0T/zLOxVf1k+ruK/7ssXnDJVg8uSYOxlYRedlA==} cpu: [arm64] os: [linux] - '@turbo/windows-64@2.8.21': - resolution: {integrity: sha512-/iBj4OzbqEY8CX+eaeKbBTMZv2CLXNrt0692F7HnK7LcyYwyDecaAiSET6ZzL4opT7sbwkKvzAC/fhqT3Quu1A==} + '@turbo/windows-64@2.9.8': + resolution: {integrity: sha512-JaefWOJNBazDylAn3f+lLB34XMNu8nEBbgPRP/Ewysg81cBubGfcyyyzpQOGVuMwfaqdNAE/kitG7w3AbJn9/g==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.8.21': - resolution: {integrity: sha512-95tMA/ZbIidJFUUtkmqioQ1gf3n3I1YbRP3ZgVdWTVn2qVbkodcIdGXBKRHHrIbRsLRl99SiHi/L7IxhpZDagQ==} + '@turbo/windows-arm64@2.9.8': + resolution: {integrity: sha512-Or6ljjB4TiiwCdVKDYWew0SokQ9kep5zruL8P3nbum9WdkH5XA41rQID4Ulc215Z+R3DrB+qXSHPsJjU3/n2ng==} cpu: [arm64] os: [win32] @@ -2638,58 +2638,58 @@ packages: keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - lefthook-darwin-arm64@2.1.1: - resolution: {integrity: sha512-O/RS1j03/Fnq5zCzEb2r7UOBsqPeBuf1C5pMkIJcO4TSE6hf3rhLUkcorKc2M5ni/n5zLGtzQUXHV08/fSAT3Q==} + lefthook-darwin-arm64@2.1.6: + resolution: {integrity: sha512-hyB7eeiX78BS66f70byTJacDLC/xV1vgMv9n+idFUsrM7J3Udd/ag9Ag5NP3t0eN0EqQqAtrNnt35EH01lxnRQ==} cpu: [arm64] os: [darwin] - lefthook-darwin-x64@2.1.1: - resolution: {integrity: sha512-mm/kdKl81ROPoYnj9XYk5JDqj+/6Al8w/SSPDfhItkLJyl4pqS+hWUOP6gDGrnuRk8S0DvJ2+hzhnDsQnZohWQ==} + lefthook-darwin-x64@2.1.6: + resolution: {integrity: sha512-5Ka6cFxiH83krt+OMRQtmS6zqoZR5SLXSudLjTbZA1c3ZqF0+dqkeb4XcB6plx6WR0GFizabuc6Bi3iXPIe1eQ==} cpu: [x64] os: [darwin] - lefthook-freebsd-arm64@2.1.1: - resolution: {integrity: sha512-F7JXlKmjxGqGbCWPLND0bVB4DMQezIe48pEwTlUQZbxh450c2gP5Q8FdttMZKOT163kBGGTqJAJSEC6zW+QSxA==} + lefthook-freebsd-arm64@2.1.6: + resolution: {integrity: sha512-VswyOg5CVN3rMaOJ2HtnkltiMKgFHW/wouWxXsV8RxSa4tgWOKxM0EmSXi8qc2jX+LRga6B0uOY6toXS01zWxA==} cpu: [arm64] os: [freebsd] - lefthook-freebsd-x64@2.1.1: - resolution: {integrity: sha512-Po8/lJMqNzKSZPuEI46dLuWoBoXtAxCuRpeOh6DAV/M4RhBynaCu8rLMZ9BqF7cVbZEWoplOmYo6HdOuiYpCkQ==} + lefthook-freebsd-x64@2.1.6: + resolution: {integrity: sha512-vXsCUFYuVwrVWwcypB7Zt2Hf+5pl1V1la7ZfvGYZaTRURu0zF/XUnMF/nOz/PebGv0f4x/iOWXWwP7E42xRWsg==} cpu: [x64] os: [freebsd] - lefthook-linux-arm64@2.1.1: - resolution: {integrity: sha512-mI2ljFgPEqHxI8vrN9nKgnVu63Rz1KisDbPwlvs7BTYNwq3sncdK5ukpGR4zzWdh6saNJ5tCtHEtep5GQI11nw==} + lefthook-linux-arm64@2.1.6: + resolution: {integrity: sha512-WDJiQhJdZOvKORZd+kF/ms2l6NSsXzdA9ahflyr65V90AC4jES223W8VtEMbGPUtHuGWMEZ/v/XvwlWv0Ioz9g==} cpu: [arm64] os: [linux] - lefthook-linux-x64@2.1.1: - resolution: {integrity: sha512-m3G/FaxC+crxeg9XeaUuHfEoL+i9gbkg2Hp2KD2IcVVIxprqlyqf0Hb8zbLV2NMXuo5RSGokJu44oAoTO3Ou2g==} + lefthook-linux-x64@2.1.6: + resolution: {integrity: sha512-C18nCd7nTX1AVL4TcvwMmLAO1VI1OuGluIOTjiPkBQ746Ls1HhL5rl//jMPACmT28YmxIQJ2ZcLPNmhvEVBZvw==} cpu: [x64] os: [linux] - lefthook-openbsd-arm64@2.1.1: - resolution: {integrity: sha512-gz/8FJPvhjOdOFt1GmFvuvDOe+W+BBRjoeAT1/mTgkN7HCXMXgqNjjvakQKQeGz1I1v08wXG1ZNf5y+T9XBCDQ==} + lefthook-openbsd-arm64@2.1.6: + resolution: {integrity: sha512-mZOMxM8HiPxVFXDO3PtCUbH4GB8rkveXhsgXF27oAZTYVzQ3gO9vT6r/pxit6msqRXz3fvcwimLVJgb8eRsa8A==} cpu: [arm64] os: [openbsd] - lefthook-openbsd-x64@2.1.1: - resolution: {integrity: sha512-ch3lyMUtbmtWUufaQVn4IoEs/2hjK51XqaCdY1mh5ca//VctR1peknIwQ5feHu+vATCDviWQ7HsdNDewm3HMPg==} + lefthook-openbsd-x64@2.1.6: + resolution: {integrity: sha512-sG9ALLZSnnMOfXu+B7SmxFhJhuoAh4bqi5En5aaHJET48TqrLOcWWZuH+7ArFM6gr/U5KfSUvdmHFmY8WqCcIg==} cpu: [x64] os: [openbsd] - lefthook-windows-arm64@2.1.1: - resolution: {integrity: sha512-mm3PZhKDs9FE/jQDimkfWxtoj9xQ2k8uw2MdhtC825bhvIh+MEi0WFj/MOW+ug0RBg0I55tGYzZ5aVuozAWpTQ==} + lefthook-windows-arm64@2.1.6: + resolution: {integrity: sha512-lD8yFWY4Csuljd0Rqs7EQaySC0VvDf7V3rN1FhRMUISTRDHutebIom1Loc8ckQPvKYGC6mftT9k0GvipsS+Brw==} cpu: [arm64] os: [win32] - lefthook-windows-x64@2.1.1: - resolution: {integrity: sha512-1L2oGIzmhfOTxfwbe5mpSQ+m3ilpvGNymwIhn4UHq6hwHsUL6HEhODqx02GfBn6OXpVIr56bvdBAusjL/SVYGQ==} + lefthook-windows-x64@2.1.6: + resolution: {integrity: sha512-q4z2n3xucLscoWiyMwFViEj3N8MDSkPulMwcJYuCYFHoPhP1h+icqNu7QRLGYj6AnVrCQweiUJY3Tb2X+GbD/A==} cpu: [x64] os: [win32] - lefthook@2.1.1: - resolution: {integrity: sha512-Tl9h9c+sG3ShzTHKuR3LAIblnnh+Mgxnm2Ul7yu9cu260Z27LEbO3V6Zw4YZFP59/2rlD42pt/llYsQCkkCFzw==} + lefthook@2.1.6: + resolution: {integrity: sha512-w9sBoR0mdN+kJc3SB85VzpiAAl451/rxdCRcZlwW71QLjkeH3EBQFgc4VMj5apePychYDHAlqEWTB8J8JK/j1Q==} hasBin: true levn@0.4.1: @@ -3071,8 +3071,8 @@ packages: engines: {node: '>=10.13.0'} hasBin: true - prettier@3.8.1: - resolution: {integrity: sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==} + prettier@3.8.3: + resolution: {integrity: sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw==} engines: {node: '>=14'} hasBin: true @@ -3432,50 +3432,49 @@ packages: swap-case@1.1.2: resolution: {integrity: sha512-BAmWG6/bx8syfc6qXPprof3Mn5vQgf5dwdUNJhsNqU9WdPt5P+ES/wQ5bxfijy8zwZgZZHslC3iAsxsuQMCzJQ==} - syncpack-darwin-arm64@14.0.0: - resolution: {integrity: sha512-mEcku9YkOHfM6JOxhq9McgeLvd4djsJvRwNONZXHeoJ6+yqC96DdxZwFjkw3e8Vn95wsxsrwY5ZjMExs5Gbacw==} + syncpack-darwin-arm64@14.3.1: + resolution: {integrity: sha512-WtHbqXCEDSRzdqTIroYqYSMW/0yQ8dYvpucQ6SKsbVE86K5wjFd37TOIDFM5NLudCYASJpy4FXv7G/HxHAyRLw==} cpu: [arm64] os: [darwin] - syncpack-darwin-x64@14.0.0: - resolution: {integrity: sha512-qSj3bT3SIZA5NLM5PNVeExapyOrdmptlGSMu0SLVHj9hata/Vqh3xWgwq7wB9uajmlrHljeJ84R/NKAHyzFewA==} + syncpack-darwin-x64@14.3.1: + resolution: {integrity: sha512-K+Zx1TN67vllDLrouc6YISOhhWm7RxrRE7087ea36T85WNq4JvI+M3UBJoxRjaJ+0v3wBA2YmBzEHzJg8skAww==} cpu: [x64] os: [darwin] - syncpack-linux-arm64-musl@14.0.0: - resolution: {integrity: sha512-i57Chz0tHP7ybKElPLhoygl6Cab1fxyUKS9xRgezX5NDrNxKUgrvqBfYd7288/QKB4C8+IcYHugFPjZjoFlAIA==} + syncpack-linux-arm64-musl@14.3.1: + resolution: {integrity: sha512-gZTLgIS0irmZx2HjZqco9YsbYe6sz/5Lce/yKmTBdCaHCpurb+TZA97nu5FxXSAA0HKs3Nzi8CDjNzv+yAQUXw==} cpu: [arm64] os: [linux] - syncpack-linux-arm64@14.0.0: - resolution: {integrity: sha512-votlkb4P/0Bxd9yhBWCSUOjZwaii+LfFn1tZZVN5dfs8qcjcLeqfdG5zbnlJSzZhS3T+BfzejFW+Z95OxZag0A==} + syncpack-linux-arm64@14.3.1: + resolution: {integrity: sha512-+5fXNoKz2ZqQszplZGp6J9ZKL6JW1hr3BMjEkklYz+jufX9rH/MWY0hcRCfHJSuvcTUrsYo/koqU/UnBiANjGg==} cpu: [arm64] os: [linux] - syncpack-linux-x64-musl@14.0.0: - resolution: {integrity: sha512-RKyp+29UlLGE8oYkd3UfwgjWUHN4dLHDyarv0dS6gWVpWM6qHtHS339KBc9JcIS7FD1vNGnQ3GmSaAodxDlkMA==} + syncpack-linux-x64-musl@14.3.1: + resolution: {integrity: sha512-NK+1Qm762bbXDYqAz2+++NlJ9jONX+3Hrulp4XpytFEIGABiy8wIzouBpxZkppf30+1mxt4o8LMtZ8P54/ObNA==} cpu: [x64] os: [linux] - syncpack-linux-x64@14.0.0: - resolution: {integrity: sha512-sZGy4+uL+P/+nI0yc9jwW/R22u9lw0+NXDYC/9ts9eYiWFyO4+luOeosvVKbED1OavUp/GQJqNV+9KHjMwq0Fw==} + syncpack-linux-x64@14.3.1: + resolution: {integrity: sha512-v1Y4D0oB2uIx+Npy1eD384adOSKvrjtu3VodjcQ/2aK4rTjVZl3k4eOA5py4I4Qdt6+zC6n+t5KrGuiaiBlbWQ==} cpu: [x64] os: [linux] - syncpack-windows-arm64@14.0.0: - resolution: {integrity: sha512-aNtr0F6HkA7M0azDuDkt//DlPWlplFa4kmvHXirwDmJQ9u3SAvN3ZItW4ZYS96ZbiV1DgO15jIKBI7rDkzcwrQ==} + syncpack-windows-arm64@14.3.1: + resolution: {integrity: sha512-xf+i8B5dDc3AIG8ZFF215gLQF0PKXQC6I8skmEfGy36oFh3VTAJKBjgEg6P8R3FC9/kRzkWFcDZmNLkbKN6YmA==} cpu: [arm64] os: [win32] - syncpack-windows-x64@14.0.0: - resolution: {integrity: sha512-usMH61wlonssfh2Q8SJDiiAcsXVzuPzRl8XdHqdavR3XeCSGBIW9ieJpPfiKvDPWslekufWD+GhLNoH+8vV0Cg==} + syncpack-windows-x64@14.3.1: + resolution: {integrity: sha512-gjbWwc05RcekcrLHOi5gq0JKvhoIMNqbUnAvPZLu46/+HrYuuJiUqruoj6y/GbCuvoQ880E820GF1pQFW9xNXA==} cpu: [x64] os: [win32] - syncpack@14.0.0: - resolution: {integrity: sha512-OfAa3Oip5YC9Ad1jEs92Hw08Wy4JfdpdeequIwaJGsQG0tJtb8gpQfCdLuBefsk6n8WiUdt/5qmzcW+BDXtzbQ==} + syncpack@14.3.1: + resolution: {integrity: sha512-TCqOY6Z7TH5yHV3saI6sHb5XRsZ8m2DaI4FQMonKT7UoCKL2WBiI54PLEFDSv1F2sL1BZA5e1opprf190ohirg==} engines: {node: '>=14.17.0'} - deprecated: 'pnpm users: upgrade to 14.0.2 or newer' hasBin: true term-size@2.2.1: @@ -3551,42 +3550,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - turbo-darwin-64@2.8.10: - resolution: {integrity: sha512-A03fXh+B7S8mL3PbdhTd+0UsaGrhfyPkODvzBDpKRY7bbeac4MDFpJ7I+Slf2oSkCEeSvHKR7Z4U71uKRUfX7g==} - cpu: [x64] - os: [darwin] - - turbo-darwin-arm64@2.8.10: - resolution: {integrity: sha512-sidzowgWL3s5xCHLeqwC9M3s9M0i16W1nuQF3Mc7fPHpZ+YPohvcbVFBB2uoRRHYZg6yBnwD4gyUHKTeXfwtXA==} - cpu: [arm64] - os: [darwin] - - turbo-linux-64@2.8.10: - resolution: {integrity: sha512-YK9vcpL3TVtqonB021XwgaQhY9hJJbKKUhLv16osxV0HkcQASQWUqR56yMge7puh6nxU67rQlTq1b7ksR1T3KA==} - cpu: [x64] - os: [linux] - - turbo-linux-arm64@2.8.10: - resolution: {integrity: sha512-3+j2tL0sG95iBJTm+6J8/45JsETQABPqtFyYjVjBbi6eVGdtNTiBmHNKrbvXRlQ3ZbUG75bKLaSSDHSEEN+btQ==} - cpu: [arm64] - os: [linux] - - turbo-windows-64@2.8.10: - resolution: {integrity: sha512-hdeF5qmVY/NFgiucf8FW0CWJWtyT2QPm5mIsX0W1DXAVzqKVXGq+Zf+dg4EUngAFKjDzoBeN6ec2Fhajwfztkw==} - cpu: [x64] - os: [win32] - - turbo-windows-arm64@2.8.10: - resolution: {integrity: sha512-QGdr/Q8LWmj+ITMkSvfiz2glf0d7JG0oXVzGL3jxkGqiBI1zXFj20oqVY0qWi+112LO9SVrYdpHS0E/oGFrMbQ==} - cpu: [arm64] - os: [win32] - - turbo@2.8.10: - resolution: {integrity: sha512-OxbzDES66+x7nnKGg2MwBA1ypVsZoDTLHpeaP4giyiHSixbsiTaMyeJqbEyvBdp5Cm28fc+8GG6RdQtic0ijwQ==} - hasBin: true - - turbo@2.8.21: - resolution: {integrity: sha512-FlJ8OD5Qcp0jTAM7E4a/RhUzRNds2GzKlyxHKA6N247VLy628rrxAGlMpIXSz6VB430+TiQDJ/SMl6PL1lu6wQ==} + turbo@2.9.8: + resolution: {integrity: sha512-REEB2rVTVDTf4hav1gJ5dIsGylWZrNonvjXFtk1dCi8gND3PhZtnYkyry1bra/Fo+iP6ctTEZbg6vWfdfHq/1A==} hasBin: true type-check@0.4.0: @@ -3620,8 +3585,8 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - typescript@5.9.3: - resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} + typescript@6.0.3: + resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==} engines: {node: '>=14.17'} hasBin: true @@ -4577,13 +4542,13 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@turbo/darwin-64@2.8.21': + '@turbo/darwin-64@2.9.8': optional: true - '@turbo/darwin-arm64@2.8.21': + '@turbo/darwin-arm64@2.9.8': optional: true - '@turbo/gen@1.13.4(@types/node@25.3.0)(typescript@5.9.3)': + '@turbo/gen@1.13.4(@types/node@25.3.0)(typescript@6.0.3)': dependencies: '@turbo/workspaces': 1.13.4(@types/node@25.3.0) chalk: 2.4.2 @@ -4593,7 +4558,7 @@ snapshots: minimatch: 9.0.5 node-plop: 0.26.3 proxy-agent: 6.5.0 - ts-node: 10.9.2(@types/node@25.3.0)(typescript@5.9.3) + ts-node: 10.9.2(@types/node@25.3.0)(typescript@6.0.3) update-check: 1.5.4 validate-npm-package-name: 5.0.1 transitivePeerDependencies: @@ -4603,16 +4568,16 @@ snapshots: - supports-color - typescript - '@turbo/linux-64@2.8.21': + '@turbo/linux-64@2.9.8': optional: true - '@turbo/linux-arm64@2.8.21': + '@turbo/linux-arm64@2.9.8': optional: true - '@turbo/windows-64@2.8.21': + '@turbo/windows-64@2.9.8': optional: true - '@turbo/windows-arm64@2.8.21': + '@turbo/windows-arm64@2.9.8': optional: true '@turbo/workspaces@1.13.4(@types/node@25.3.0)': @@ -4689,40 +4654,40 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@6.0.3))(eslint@9.39.2)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@6.0.3) '@typescript-eslint/scope-manager': 8.50.0 - '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2)(typescript@6.0.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.50.0 eslint: 9.39.2 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.1.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@6.0.3)': dependencies: '@typescript-eslint/scope-manager': 8.50.0 '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@6.0.3) '@typescript-eslint/visitor-keys': 8.50.0 debug: 4.4.3(supports-color@5.5.0) eslint: 9.39.2 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.50.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.50.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@6.0.3) '@typescript-eslint/types': 8.50.0 debug: 4.4.3(supports-color@5.5.0) - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -4731,47 +4696,47 @@ snapshots: '@typescript-eslint/types': 8.50.0 '@typescript-eslint/visitor-keys': 8.50.0 - '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.50.0(typescript@6.0.3)': dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2)(typescript@6.0.3)': dependencies: '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@6.0.3) debug: 4.4.3(supports-color@5.5.0) eslint: 9.39.2 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.1.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@8.50.0': {} - '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.50.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.50.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) + '@typescript-eslint/project-service': 8.50.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@6.0.3) '@typescript-eslint/types': 8.50.0 '@typescript-eslint/visitor-keys': 8.50.0 debug: 4.4.3(supports-color@5.5.0) minimatch: 9.0.5 semver: 7.7.3 tinyglobby: 0.2.15 - ts-api-utils: 2.1.0(typescript@5.9.3) - typescript: 5.9.3 + ts-api-utils: 2.1.0(typescript@6.0.3) + typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.50.0(eslint@9.39.2)(typescript@5.9.3)': + '@typescript-eslint/utils@8.50.0(eslint@9.39.2)(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2) '@typescript-eslint/scope-manager': 8.50.0 '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@6.0.3) eslint: 9.39.2 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color @@ -4833,14 +4798,14 @@ snapshots: '@vitest/pretty-format': 4.0.18 tinyrainbow: 3.0.3 - abitype@1.1.0(typescript@5.9.3)(zod@4.2.0): + abitype@1.1.0(typescript@6.0.3)(zod@4.2.0): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 zod: 4.2.0 - abitype@1.2.2(typescript@5.9.3)(zod@4.2.0): + abitype@1.2.2(typescript@6.0.3)(zod@4.2.0): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 zod: 4.2.0 acorn-jsx@5.3.2(acorn@8.15.0): @@ -5482,11 +5447,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.8.21): + eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.9.8): dependencies: dotenv: 16.0.3 eslint: 9.39.2 - turbo: 2.8.21 + turbo: 2.9.8 eslint-scope@8.4.0: dependencies: @@ -6162,48 +6127,48 @@ snapshots: dependencies: json-buffer: 3.0.1 - lefthook-darwin-arm64@2.1.1: + lefthook-darwin-arm64@2.1.6: optional: true - lefthook-darwin-x64@2.1.1: + lefthook-darwin-x64@2.1.6: optional: true - lefthook-freebsd-arm64@2.1.1: + lefthook-freebsd-arm64@2.1.6: optional: true - lefthook-freebsd-x64@2.1.1: + lefthook-freebsd-x64@2.1.6: optional: true - lefthook-linux-arm64@2.1.1: + lefthook-linux-arm64@2.1.6: optional: true - lefthook-linux-x64@2.1.1: + lefthook-linux-x64@2.1.6: optional: true - lefthook-openbsd-arm64@2.1.1: + lefthook-openbsd-arm64@2.1.6: optional: true - lefthook-openbsd-x64@2.1.1: + lefthook-openbsd-x64@2.1.6: optional: true - lefthook-windows-arm64@2.1.1: + lefthook-windows-arm64@2.1.6: optional: true - lefthook-windows-x64@2.1.1: + lefthook-windows-x64@2.1.6: optional: true - lefthook@2.1.1: + lefthook@2.1.6: optionalDependencies: - lefthook-darwin-arm64: 2.1.1 - lefthook-darwin-x64: 2.1.1 - lefthook-freebsd-arm64: 2.1.1 - lefthook-freebsd-x64: 2.1.1 - lefthook-linux-arm64: 2.1.1 - lefthook-linux-x64: 2.1.1 - lefthook-openbsd-arm64: 2.1.1 - lefthook-openbsd-x64: 2.1.1 - lefthook-windows-arm64: 2.1.1 - lefthook-windows-x64: 2.1.1 + lefthook-darwin-arm64: 2.1.6 + lefthook-darwin-x64: 2.1.6 + lefthook-freebsd-arm64: 2.1.6 + lefthook-freebsd-x64: 2.1.6 + lefthook-linux-arm64: 2.1.6 + lefthook-linux-x64: 2.1.6 + lefthook-openbsd-arm64: 2.1.6 + lefthook-openbsd-x64: 2.1.6 + lefthook-windows-arm64: 2.1.6 + lefthook-windows-x64: 2.1.6 levn@0.4.1: dependencies: @@ -6298,9 +6263,9 @@ snapshots: minipass@7.1.3: {} - mipd@0.0.7(typescript@5.9.3): + mipd@0.0.7(typescript@6.0.3): optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 mkdirp@0.5.6: dependencies: @@ -6470,7 +6435,7 @@ snapshots: object-keys: 1.1.1 safe-push-apply: 1.0.0 - ox@0.9.17(typescript@5.9.3)(zod@4.2.0): + ox@0.9.17(typescript@6.0.3)(zod@4.2.0): dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -6478,10 +6443,10 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.2(typescript@5.9.3)(zod@4.2.0) + abitype: 1.2.2(typescript@6.0.3)(zod@4.2.0) eventemitter3: 5.0.1 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - zod @@ -6606,7 +6571,7 @@ snapshots: prettier@2.8.8: {} - prettier@3.8.1: {} + prettier@3.8.3: {} prop-types@15.8.1: dependencies: @@ -7058,40 +7023,40 @@ snapshots: lower-case: 1.1.4 upper-case: 1.1.3 - syncpack-darwin-arm64@14.0.0: + syncpack-darwin-arm64@14.3.1: optional: true - syncpack-darwin-x64@14.0.0: + syncpack-darwin-x64@14.3.1: optional: true - syncpack-linux-arm64-musl@14.0.0: + syncpack-linux-arm64-musl@14.3.1: optional: true - syncpack-linux-arm64@14.0.0: + syncpack-linux-arm64@14.3.1: optional: true - syncpack-linux-x64-musl@14.0.0: + syncpack-linux-x64-musl@14.3.1: optional: true - syncpack-linux-x64@14.0.0: + syncpack-linux-x64@14.3.1: optional: true - syncpack-windows-arm64@14.0.0: + syncpack-windows-arm64@14.3.1: optional: true - syncpack-windows-x64@14.0.0: + syncpack-windows-x64@14.3.1: optional: true - syncpack@14.0.0: + syncpack@14.3.1: optionalDependencies: - syncpack-darwin-arm64: 14.0.0 - syncpack-darwin-x64: 14.0.0 - syncpack-linux-arm64: 14.0.0 - syncpack-linux-arm64-musl: 14.0.0 - syncpack-linux-x64: 14.0.0 - syncpack-linux-x64-musl: 14.0.0 - syncpack-windows-arm64: 14.0.0 - syncpack-windows-x64: 14.0.0 + syncpack-darwin-arm64: 14.3.1 + syncpack-darwin-x64: 14.3.1 + syncpack-linux-arm64: 14.3.1 + syncpack-linux-arm64-musl: 14.3.1 + syncpack-linux-x64: 14.3.1 + syncpack-linux-x64-musl: 14.3.1 + syncpack-windows-arm64: 14.3.1 + syncpack-windows-x64: 14.3.1 term-size@2.2.1: {} @@ -7132,11 +7097,11 @@ snapshots: tree-kill@1.2.2: {} - ts-api-utils@2.1.0(typescript@5.9.3): + ts-api-utils@2.1.0(typescript@6.0.3): dependencies: - typescript: 5.9.3 + typescript: 6.0.3 - ts-node@10.9.2(@types/node@25.3.0)(typescript@5.9.3): + ts-node@10.9.2(@types/node@25.3.0)(typescript@6.0.3): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.12 @@ -7150,7 +7115,7 @@ snapshots: create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.9.3 + typescript: 6.0.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 @@ -7158,41 +7123,14 @@ snapshots: tslib@2.8.1: {} - turbo-darwin-64@2.8.10: - optional: true - - turbo-darwin-arm64@2.8.10: - optional: true - - turbo-linux-64@2.8.10: - optional: true - - turbo-linux-arm64@2.8.10: - optional: true - - turbo-windows-64@2.8.10: - optional: true - - turbo-windows-arm64@2.8.10: - optional: true - - turbo@2.8.10: - optionalDependencies: - turbo-darwin-64: 2.8.10 - turbo-darwin-arm64: 2.8.10 - turbo-linux-64: 2.8.10 - turbo-linux-arm64: 2.8.10 - turbo-windows-64: 2.8.10 - turbo-windows-arm64: 2.8.10 - - turbo@2.8.21: + turbo@2.9.8: optionalDependencies: - '@turbo/darwin-64': 2.8.21 - '@turbo/darwin-arm64': 2.8.21 - '@turbo/linux-64': 2.8.21 - '@turbo/linux-arm64': 2.8.21 - '@turbo/windows-64': 2.8.21 - '@turbo/windows-arm64': 2.8.21 + '@turbo/darwin-64': 2.9.8 + '@turbo/darwin-arm64': 2.9.8 + '@turbo/linux-64': 2.9.8 + '@turbo/linux-arm64': 2.9.8 + '@turbo/windows-64': 2.9.8 + '@turbo/windows-arm64': 2.9.8 type-check@0.4.0: dependencies: @@ -7233,18 +7171,18 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.50.0(eslint@9.39.2)(typescript@5.9.3): + typescript-eslint@8.50.0(eslint@9.39.2)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@5.9.3))(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2)(typescript@6.0.3))(eslint@9.39.2)(typescript@6.0.3) + '@typescript-eslint/parser': 8.50.0(eslint@9.39.2)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.50.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.50.0(eslint@9.39.2)(typescript@6.0.3) eslint: 9.39.2 - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - supports-color - typescript@5.9.3: {} + typescript@6.0.3: {} uglify-js@3.19.3: optional: true @@ -7293,18 +7231,18 @@ snapshots: validate-npm-package-name@5.0.1: {} - viem@2.42.1(typescript@5.9.3)(zod@4.2.0): + viem@2.42.1(typescript@6.0.3)(zod@4.2.0): dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.1.0(typescript@5.9.3)(zod@4.2.0) + abitype: 1.1.0(typescript@6.0.3)(zod@4.2.0) isows: 1.0.7(ws@8.18.3) - ox: 0.9.17(typescript@5.9.3)(zod@4.2.0) + ox: 0.9.17(typescript@6.0.3)(zod@4.2.0) ws: 8.18.3 optionalDependencies: - typescript: 5.9.3 + typescript: 6.0.3 transitivePeerDependencies: - bufferutil - utf-8-validate diff --git a/repo/eslint-config/package.json b/repo/eslint-config/package.json index 9c38b69880..4b4d2db7f4 100644 --- a/repo/eslint-config/package.json +++ b/repo/eslint-config/package.json @@ -18,7 +18,7 @@ "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-turbo": "^2.6.3", "globals": "^16.5.0", - "typescript": "^5.9.3", + "typescript": "^6.0.3", "typescript-eslint": "^8.49.0" } } diff --git a/repo/typescript-config/next-css-side-effect.d.ts b/repo/typescript-config/next-css-side-effect.d.ts new file mode 100644 index 0000000000..6a748979a1 --- /dev/null +++ b/repo/typescript-config/next-css-side-effect.d.ts @@ -0,0 +1,2 @@ +/** Plain `.css` side-effect imports (e.g. `app/globals.css`). `*.module.css` is covered by Next. */ +declare module '*.css' {} diff --git a/repo/ui/package.json b/repo/ui/package.json index f0045e54d0..4c36344444 100644 --- a/repo/ui/package.json +++ b/repo/ui/package.json @@ -20,7 +20,7 @@ "@types/node": "^25.3.0", "@types/react": "^19.2.7", "@types/react-dom": "^19.2.3", - "typescript": "^5.9.3" + "typescript": "^6.0.3" }, "dependencies": { "react": "^19.2.3", From 68f6d2978290d702e417002843f0f932f9529513 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 16 Apr 2026 14:30:14 +0200 Subject: [PATCH 26/43] New userdata.gen.ts --- .../services/userdata/src/userdata.gen.ts | 137 +++++++++++++++++- 1 file changed, 135 insertions(+), 2 deletions(-) diff --git a/packages/services/userdata/src/userdata.gen.ts b/packages/services/userdata/src/userdata.gen.ts index d671010bed..5a48822501 100644 --- a/packages/services/userdata/src/userdata.gen.ts +++ b/packages/services/userdata/src/userdata.gen.ts @@ -1,5 +1,5 @@ /* eslint-disable */ -// userdata v0.1.0 88764bb5f99353e11d849a1aa8f8a998501ffedb +// userdata v0.1.0 1c37d1866dada9f3770a8ca37e790c7bcdb6424a // -- // Code generated by Webrpc-gen@v0.30.2 with typescript generator. DO NOT EDIT. // @@ -12,7 +12,7 @@ export const WebrpcVersion = 'v1' export const WebrpcSchemaVersion = 'v0.1.0' // Schema hash generated from your RIDL schema -export const WebrpcSchemaHash = '88764bb5f99353e11d849a1aa8f8a998501ffedb' +export const WebrpcSchemaHash = '1c37d1866dada9f3770a8ca37e790c7bcdb6424a' // // Client interface @@ -152,6 +152,20 @@ export interface UserDataClient { headers?: object, signal?: AbortSignal, ): Promise + + listActiveDevices( + req: ListActiveDevicesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise + + putActiveDevice(req: PutActiveDeviceRequest, headers?: object, signal?: AbortSignal): Promise + + deleteActiveDevice( + req: DeleteActiveDeviceRequest, + headers?: object, + signal?: AbortSignal, + ): Promise } // @@ -294,6 +308,29 @@ export interface WatchedWalletProps { nickname?: string } +export interface ActiveDevice { + walletAddress: string + address: string + nickname?: string + userAgent: string + platform: string + mobile: boolean + location?: string + firstSeen: string + lastSeen: string + createdAt: string + updatedAt: string +} + +export interface ActiveDeviceProps { + address: string + nickname?: string + userAgent: string + platform: string + mobile: boolean + location?: string +} + export interface GetCapabilitiesRequest {} export interface GetCapabilitiesResponse { @@ -550,6 +587,33 @@ export interface DeleteHiddenTokenRequest { export interface DeleteHiddenTokenResponse {} +export interface ListActiveDevicesRequest { + wallet: string + pageSize: number + cursor: string +} + +export interface ListActiveDevicesResponse { + devices: Array + nextCursor: string +} + +export interface PutActiveDeviceRequest { + wallet: string + device: ActiveDeviceProps +} + +export interface PutActiveDeviceResponse { + device: ActiveDevice +} + +export interface DeleteActiveDeviceRequest { + wallet: string + address: string +} + +export interface DeleteActiveDeviceResponse {} + // // Client // @@ -599,6 +663,9 @@ export class UserData implements UserDataClient { listHiddenTokens: (req: ListHiddenTokensRequest) => ['UserData', 'listHiddenTokens', req] as const, putHiddenToken: (req: PutHiddenTokenRequest) => ['UserData', 'putHiddenToken', req] as const, deleteHiddenToken: (req: DeleteHiddenTokenRequest) => ['UserData', 'deleteHiddenToken', req] as const, + listActiveDevices: (req: ListActiveDevicesRequest) => ['UserData', 'listActiveDevices', req] as const, + putActiveDevice: (req: PutActiveDeviceRequest) => ['UserData', 'putActiveDevice', req] as const, + deleteActiveDevice: (req: DeleteActiveDeviceRequest) => ['UserData', 'deleteActiveDevice', req] as const, } getCapabilities = (headers?: object, signal?: AbortSignal): Promise => { @@ -1215,6 +1282,72 @@ export class UserData implements UserDataClient { }, ) } + + listActiveDevices = ( + req: ListActiveDevicesRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch( + this.url('ListActiveDevices'), + createHttpRequest(JsonEncode(req, 'ListActiveDevicesRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'ListActiveDevicesResponse') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + + putActiveDevice = ( + req: PutActiveDeviceRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch( + this.url('PutActiveDevice'), + createHttpRequest(JsonEncode(req, 'PutActiveDeviceRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'PutActiveDeviceResponse') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } + + deleteActiveDevice = ( + req: DeleteActiveDeviceRequest, + headers?: object, + signal?: AbortSignal, + ): Promise => { + return this.fetch( + this.url('DeleteActiveDevice'), + createHttpRequest(JsonEncode(req, 'DeleteActiveDeviceRequest'), headers, signal), + ).then( + (res) => { + return buildResponse(res).then((_data) => { + return JsonDecode(_data, 'DeleteActiveDeviceResponse') + }) + }, + (error) => { + throw WebrpcRequestFailedError.new({ + cause: `fetch(): ${error instanceof Error ? error.message : String(error)}`, + }) + }, + ) + } } const createHttpRequest = (body: string = '{}', headers: object = {}, signal: AbortSignal | null = null): object => { From e804f032f94e4fdf83a8c747c97c1198543bcdaa Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 16 Apr 2026 16:20:35 +0200 Subject: [PATCH 27/43] 3.0.6 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index de944ea36e..6996a41186 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 29e0fd74c6..2b051e0c2d 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.5", + "version": "3.0.6", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index e458893450..0ae3d64187 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index d7b89a694a..9f23e13e09 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.5", + "version": "3.0.6", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index a705f48ba3..822b2cdec0 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 57dc6b4e2f..8ae80c4631 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.5", + "version": "3.0.6", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index ff6cebf477..dba4f6963a 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index ea2abd6403..5a9262aceb 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.5", + "version": "3.0.6", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index fb104e35fb..5d042a5b0c 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index c7c6e6db76..74a4186efe 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.5", + "version": "3.0.6", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 5a97b94e85..6c1e3c8d35 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index c2b372d073..53dd3805bb 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.5", + "version": "3.0.6", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index 3362b424e0..9024c99545 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index f6b1f39dd1..1f6bcab2db 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.5", + "version": "3.0.6", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index abefb99b79..7a4d1a061a 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.6 + ## 3.0.5 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 43e3a79d91..fc0f0b195f 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.5", + "version": "3.0.6", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 51ebad4131..d0d38f935c 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 2d96904775..13f3eb2fc3 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.5", + "version": "3.0.6", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index 8194c38b89..ca22c1d981 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index 909e1226dd..63fe81dc13 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.5", + "version": "3.0.6", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index 23fc45fe44..1c4b5ad79d 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support +- Updated dependencies + - @0xsequence/guard@3.0.6 + - @0xsequence/relayer@3.0.6 + - @0xsequence/wallet-primitives@3.0.6 + ## 3.0.5 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 05b3cc7da5..68381fdf82 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.5", + "version": "3.0.6", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index 2039d0c2d2..b836fbc6ac 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support +- Updated dependencies + - @0xsequence/guard@3.0.6 + - @0xsequence/relayer@3.0.6 + - @0xsequence/wallet-core@3.0.6 + - @0xsequence/wallet-primitives@3.0.6 + ## 3.0.5 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 71022d182d..2f87aee79c 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.5", + "version": "3.0.6", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index 7e5a4cdbf7..29c297a293 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support + ## 3.0.5 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index 0cd4d93dfa..a6397edc33 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.5", + "version": "3.0.6", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 5101c28c5a..369b60d4f9 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.6 + +### Patch Changes + +- userdata upgrade, arweave support +- Updated dependencies + - @0xsequence/guard@3.0.6 + - @0xsequence/identity-instrument@3.0.6 + - @0xsequence/relayer@3.0.6 + - @0xsequence/wallet-core@3.0.6 + - @0xsequence/wallet-primitives@3.0.6 + ## 3.0.5 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 681c70c8e9..11447749c9 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.5", + "version": "3.0.6", "license": "Apache-2.0", "type": "module", "publishConfig": { From 021207e8323304f0824f56d34f9662355f59a373 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Tue, 5 May 2026 11:27:34 +0200 Subject: [PATCH 28/43] 3.0.7 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 6996a41186..41da58802e 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 2b051e0c2d..af9d878268 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.6", + "version": "3.0.7", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index 0ae3d64187..fa0194ad89 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 9f23e13e09..fa6e742206 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.6", + "version": "3.0.7", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index 822b2cdec0..01ea62e91f 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 8ae80c4631..23e20abd22 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.6", + "version": "3.0.7", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index dba4f6963a..332a1da08d 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index 5a9262aceb..52e9dd3e99 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.6", + "version": "3.0.7", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index 5d042a5b0c..60ba432376 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 74a4186efe..34866a0a47 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.6", + "version": "3.0.7", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 6c1e3c8d35..279631525f 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 53dd3805bb..b170e7e965 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.6", + "version": "3.0.7", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index 9024c99545..3aba7ff752 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index 1f6bcab2db..60e74e9455 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.6", + "version": "3.0.7", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 7a4d1a061a..8bacc6a223 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.7 + +### Patch Changes + +- Minor bug fixes +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.7 + ## 3.0.6 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index fc0f0b195f..86caff6b9a 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.6", + "version": "3.0.7", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index d0d38f935c..d77aa6ae66 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 13f3eb2fc3..736a1d2fc8 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.6", + "version": "3.0.7", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index ca22c1d981..7703a169bd 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index 63fe81dc13..a5ab2a7e03 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.6", + "version": "3.0.7", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index 1c4b5ad79d..95389b1796 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.7 + +### Patch Changes + +- Minor bug fixes +- Updated dependencies + - @0xsequence/guard@3.0.7 + - @0xsequence/relayer@3.0.7 + - @0xsequence/wallet-primitives@3.0.7 + ## 3.0.6 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 68381fdf82..981013a46f 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.6", + "version": "3.0.7", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index b836fbc6ac..8b3ad2e3bd 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.7 + +### Patch Changes + +- Minor bug fixes +- Updated dependencies + - @0xsequence/guard@3.0.7 + - @0xsequence/relayer@3.0.7 + - @0xsequence/wallet-core@3.0.7 + - @0xsequence/wallet-primitives@3.0.7 + ## 3.0.6 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 2f87aee79c..160196a453 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.6", + "version": "3.0.7", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index 29c297a293..dbb469e9f5 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.7 + +### Patch Changes + +- Minor bug fixes + ## 3.0.6 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index a6397edc33..d1e94ce9d9 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.6", + "version": "3.0.7", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 369b60d4f9..5c3a487750 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.7 + +### Patch Changes + +- Minor bug fixes +- Updated dependencies + - @0xsequence/guard@3.0.7 + - @0xsequence/identity-instrument@3.0.7 + - @0xsequence/relayer@3.0.7 + - @0xsequence/wallet-core@3.0.7 + - @0xsequence/wallet-primitives@3.0.7 + ## 3.0.6 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 11447749c9..593a4c699d 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.6", + "version": "3.0.7", "license": "Apache-2.0", "type": "module", "publishConfig": { From 1c23094b8b2e50fc1db1c43a4d6786133f55f2be Mon Sep 17 00:00:00 2001 From: Corban Riley Date: Wed, 6 May 2026 12:44:18 -0400 Subject: [PATCH 29/43] Fix fee options for undeployed wallets (#998) --- .../services/relayer/src/relayer/relayer.ts | 1 + .../relayer/src/relayer/rpc-relayer/index.ts | 14 +-- .../relayer/src/relayer/standard/sequence.ts | 3 +- .../relayer/test/relayer/relayer.test.ts | 67 ++++++++++-- packages/wallet/core/src/wallet.ts | 50 +++++++++ .../core/test/wallet-fee-options.test.ts | 101 ++++++++++++++++++ .../dapp-client/src/ChainSessionManager.ts | 8 +- .../wallet/wdk/src/sequence/transactions.ts | 31 ++++-- 8 files changed, 249 insertions(+), 26 deletions(-) create mode 100644 packages/wallet/core/test/wallet-fee-options.test.ts diff --git a/packages/services/relayer/src/relayer/relayer.ts b/packages/services/relayer/src/relayer/relayer.ts index f685368200..9f648004af 100644 --- a/packages/services/relayer/src/relayer/relayer.ts +++ b/packages/services/relayer/src/relayer/relayer.ts @@ -18,6 +18,7 @@ export interface Relayer { chainId: number, to: Address.Address, calls: Payload.Call[], + data?: Hex.Hex, ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> relay(to: Address.Address, data: Hex.Hex, chainId: number, quote?: FeeQuote): Promise<{ opHash: Hex.Hex }> diff --git a/packages/services/relayer/src/relayer/rpc-relayer/index.ts b/packages/services/relayer/src/relayer/rpc-relayer/index.ts index e045b996e0..814d25bbd3 100644 --- a/packages/services/relayer/src/relayer/rpc-relayer/index.ts +++ b/packages/services/relayer/src/relayer/rpc-relayer/index.ts @@ -149,22 +149,24 @@ export class RpcRelayer implements Relayer { chainId: number, to: Address.Address, calls: Payload.Call[], + data?: Hex.Hex, ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> { // IMPORTANT: // The relayer FeeOptions endpoint simulates `eth_call(to, data)`. - // wallet-webapp-v3 requests FeeOptions with `to = wallet` and `data = Payload.encode(calls, self=wallet)`. - // This works for undeployed wallets and avoids guest-module simulation pitfalls. - const callsStruct: Payload.Calls = { type: 'call', space: 0n, nonce: 0n, calls: calls } + // Callers that already built a wallet transaction should pass its `to` and `data`. + // This is required for undeployed wallets because the transaction must target the + // guest module and include the deploy call before executing from the wallet. + const callsStruct: Payload.Calls = { type: 'call', space: 0n, nonce: 0n, calls } - const feeOptionsTo = wallet - const data = Payload.encode(callsStruct, wallet) + const feeOptionsTo = to + const feeOptionsData = data ?? Hex.fromBytes(Payload.encode(callsStruct, to)) try { const result = await this.client.feeOptions( { wallet, to: feeOptionsTo, - data: Hex.fromBytes(data), + data: feeOptionsData, }, { ...(this.projectAccessKey ? { 'X-Access-Key': this.projectAccessKey } : undefined) }, ) diff --git a/packages/services/relayer/src/relayer/standard/sequence.ts b/packages/services/relayer/src/relayer/standard/sequence.ts index bb55a97262..1ae5ec69bd 100644 --- a/packages/services/relayer/src/relayer/standard/sequence.ts +++ b/packages/services/relayer/src/relayer/standard/sequence.ts @@ -38,11 +38,12 @@ export class SequenceRelayer implements Relayer { _chainId: number, to: Address.Address, calls: Payload.Call[], + transactionData?: Hex.Hex, ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> { const execute = AbiFunction.from('function execute(bytes calldata _payload, bytes calldata _signature)') const payload = Payload.encode({ type: 'call', space: 0n, nonce: 0n, calls }, to) const signature = '0x0001' // TODO: use a stub signature - const data = AbiFunction.encodeData(execute, [Bytes.toHex(payload), signature]) + const data = transactionData ?? AbiFunction.encodeData(execute, [Bytes.toHex(payload), signature]) const { options, quote } = await this.service.feeOptions({ wallet, to, data }) diff --git a/packages/services/relayer/test/relayer/relayer.test.ts b/packages/services/relayer/test/relayer/relayer.test.ts index 716cd11d65..028ccf32f0 100644 --- a/packages/services/relayer/test/relayer/relayer.test.ts +++ b/packages/services/relayer/test/relayer/relayer.test.ts @@ -91,13 +91,11 @@ describe('Relayer', () => { }) it('should return false for non-objects', () => { - // These will throw due to the 'in' operator, so we need to test the actual behavior - expect(() => Relayer.isRelayer(null)).toThrow() - expect(() => Relayer.isRelayer(undefined)).toThrow() - expect(() => Relayer.isRelayer('string')).toThrow() - expect(() => Relayer.isRelayer(123)).toThrow() - expect(() => Relayer.isRelayer(true)).toThrow() - // Arrays and objects should not throw, but should return false + expect(Relayer.isRelayer(null)).toBe(false) + expect(Relayer.isRelayer(undefined)).toBe(false) + expect(Relayer.isRelayer('string')).toBe(false) + expect(Relayer.isRelayer(123)).toBe(false) + expect(Relayer.isRelayer(true)).toBe(false) expect(Relayer.isRelayer([])).toBe(false) }) @@ -324,6 +322,61 @@ describe('Relayer', () => { }) }) + describe('RpcRelayer.feeOptions', () => { + const mockCall: Payload.Call = { + to: TEST_TO_ADDRESS, + value: 0n, + data: TEST_DATA, + gasLimit: 21000n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', + } + + const makeRelayer = () => { + const requests: Array<{ input: RequestInfo; init?: RequestInit }> = [] + const fetchImpl = vi.fn(async (input: RequestInfo, init?: RequestInit) => { + requests.push({ input, init }) + return new Response(JSON.stringify({ options: [], sponsored: false }), { status: 200 }) + }) + + return { + relayer: new Relayer.RpcRelayer('https://relayer.test', TEST_CHAIN_ID, 'https://rpc.test', fetchImpl), + requests, + } + } + + it('should send provided transaction target and data when available', async () => { + const { relayer, requests } = makeRelayer() + + await relayer.feeOptions(TEST_WALLET_ADDRESS, TEST_CHAIN_ID, TEST_TO_ADDRESS, [mockCall], TEST_DATA) + + expect(requests).toHaveLength(1) + expect(requests[0]!.input).toBe('https://relayer.test/rpc/Relayer/FeeOptions') + expect(JSON.parse(requests[0]!.init!.body as string)).toEqual({ + wallet: TEST_WALLET_ADDRESS, + to: TEST_TO_ADDRESS, + data: TEST_DATA, + }) + }) + + it('should encode calls for the provided target when transaction data is not provided', async () => { + const { relayer, requests } = makeRelayer() + + await relayer.feeOptions(TEST_WALLET_ADDRESS, TEST_CHAIN_ID, TEST_TO_ADDRESS, [mockCall]) + + const expectedData = Hex.fromBytes( + Payload.encode({ type: 'call', space: 0n, nonce: 0n, calls: [mockCall] }, TEST_TO_ADDRESS), + ) + + expect(JSON.parse(requests[0]!.init!.body as string)).toEqual({ + wallet: TEST_WALLET_ADDRESS, + to: TEST_TO_ADDRESS, + data: expectedData, + }) + }) + }) + describe('Type compatibility', () => { it('should work with Address and Hex types from ox', () => { // Test that the interfaces work correctly with ox types diff --git a/packages/wallet/core/src/wallet.ts b/packages/wallet/core/src/wallet.ts index d89d5b2b98..cdfdf66c27 100644 --- a/packages/wallet/core/src/wallet.ts +++ b/packages/wallet/core/src/wallet.ts @@ -494,6 +494,56 @@ export class Wallet { } } + async buildFeeOptionsTransaction( + provider: Provider.Provider, + payload: Payload.Calls, + ): Promise<{ to: Address.Address; data: Hex.Hex }> { + const status = await this.getStatus(provider) + const signature = '0x0001' as Hex.Hex + + const executeData = AbiFunction.encodeData(Constants.EXECUTE, [Bytes.toHex(Payload.encode(payload)), signature]) + + if (status.isDeployed) { + return { + to: this.address, + data: executeData, + } + } + + const deploy = await this.buildDeployTransaction() + + return { + to: this.guest, + data: Bytes.toHex( + Payload.encode({ + type: 'call', + space: 0n, + nonce: 0n, + calls: [ + { + to: deploy.to, + value: 0n, + data: deploy.data, + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', + }, + { + to: this.address, + value: 0n, + data: executeData, + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', + }, + ], + }), + ), + } + } + async buildTransaction(provider: Provider.Provider, envelope: Envelope.Signed) { const status = await this.getStatus(provider) diff --git a/packages/wallet/core/test/wallet-fee-options.test.ts b/packages/wallet/core/test/wallet-fee-options.test.ts new file mode 100644 index 0000000000..d3e4ef30f5 --- /dev/null +++ b/packages/wallet/core/test/wallet-fee-options.test.ts @@ -0,0 +1,101 @@ +import { describe, expect, it, vi } from 'vitest' +import { AbiFunction, Address, Bytes, Hex, Provider } from 'ox' + +import { Constants, Config, Context, Payload } from '../../primitives/src/index.js' +import { State, Wallet } from '../src/index.js' + +const SIGNER = '0x1234567890123456789012345678901234567890' as Address.Address +const TARGET = '0xabcdefabcdefabcdefabcdefabcdefabcdefabcd' as Address.Address + +const configuration: Config.Config = { + threshold: 1n, + checkpoint: 0n, + topology: { type: 'signer', address: SIGNER, weight: 1n }, +} + +const call: Payload.Call = { + to: TARGET, + value: 0n, + data: '0x', + gasLimit: 0n, + delegateCall: false, + onlyFallback: false, + behaviorOnError: 'revert', +} + +const payload: Payload.Calls = { + type: 'call', + space: 0n, + nonce: 0n, + calls: [call], +} + +function providerFor(options: { deployed: boolean; imageHash: Hex.Hex }): Provider.Provider { + return { + request: vi.fn(async (request: { method: string; params?: unknown[] }) => { + switch (request.method) { + case 'eth_chainId': + return '0x1' + + case 'eth_getCode': + return options.deployed ? '0x1234' : '0x' + + case 'eth_call': { + const rpcCall = request.params?.[0] as { data?: Hex.Hex } | undefined + + if (rpcCall?.data === AbiFunction.encodeData(Constants.GET_IMPLEMENTATION)) { + return options.deployed ? Hex.padLeft(Context.Dev2.stage2, 32) : '0x' + } + + if (rpcCall?.data === AbiFunction.encodeData(Constants.IMAGE_HASH)) { + return options.imageHash + } + + return '0x' + } + + default: + throw new Error(`Unexpected RPC method: ${request.method}`) + } + }), + } as unknown as Provider.Provider +} + +async function createWallet() { + const stateProvider = new State.Local.Provider() + const wallet = await Wallet.fromConfiguration(configuration, { stateProvider, context: Context.Dev2 }) + const imageHash = Hex.from(Config.hashConfiguration(configuration)) + + return { wallet, imageHash } +} + +describe('Wallet.buildFeeOptionsTransaction', () => { + it('targets the wallet execute method when the wallet is deployed', async () => { + const { wallet, imageHash } = await createWallet() + const transaction = await wallet.buildFeeOptionsTransaction(providerFor({ deployed: true, imageHash }), payload) + + const expectedData = AbiFunction.encodeData(Constants.EXECUTE, [Bytes.toHex(Payload.encode(payload)), '0x0001']) + + expect(Address.isEqual(transaction.to, wallet.address)).toBe(true) + expect(transaction.data).toBe(expectedData) + }) + + it('targets the guest module and prefixes deployment when the wallet is undeployed', async () => { + const { wallet, imageHash } = await createWallet() + const deploy = await wallet.buildDeployTransaction() + const transaction = await wallet.buildFeeOptionsTransaction(providerFor({ deployed: false, imageHash }), payload) + const decoded = Payload.decode(Bytes.fromHex(transaction.data)) + + const expectedExecuteData = AbiFunction.encodeData(Constants.EXECUTE, [ + Bytes.toHex(Payload.encode(payload)), + '0x0001', + ]) + + expect(Address.isEqual(transaction.to, Constants.DefaultGuestAddress)).toBe(true) + expect(decoded.calls).toHaveLength(2) + expect(Address.isEqual(decoded.calls[0]!.to, deploy.to)).toBe(true) + expect(decoded.calls[0]!.data).toBe(deploy.data) + expect(Address.isEqual(decoded.calls[1]!.to, wallet.address)).toBe(true) + expect(decoded.calls[1]!.data).toBe(expectedExecuteData) + }) +}) diff --git a/packages/wallet/dapp-client/src/ChainSessionManager.ts b/packages/wallet/dapp-client/src/ChainSessionManager.ts index a57e2c2324..dc1f30e239 100644 --- a/packages/wallet/dapp-client/src/ChainSessionManager.ts +++ b/packages/wallet/dapp-client/src/ChainSessionManager.ts @@ -865,7 +865,13 @@ export class ChainSessionManager { } const walletAddress = this.walletAddress if (!walletAddress) throw new InitializationError('Wallet is not initialized.') - const feeOptions = await this.relayer.feeOptions(walletAddress, this.chainId, signedCall.to, callsToSend) + const feeOptions = await this.relayer.feeOptions( + walletAddress, + this.chainId, + signedCall.to, + callsToSend, + signedCall.data, + ) return feeOptions.options } catch (err) { throw new FeeOptionError(`Failed to get fee options: ${err instanceof Error ? err.message : String(err)}`) diff --git a/packages/wallet/wdk/src/sequence/transactions.ts b/packages/wallet/wdk/src/sequence/transactions.ts index 26bf21d34c..146d669998 100644 --- a/packages/wallet/wdk/src/sequence/transactions.ts +++ b/packages/wallet/wdk/src/sequence/transactions.ts @@ -310,22 +310,28 @@ export class Transactions implements TransactionsInterface { throw new Error(`Transaction ${transactionId} is not in the requested state`) } + if (!Payload.isCalls(tx.envelope.payload)) { + throw new Error(`Transaction ${transactionId} is not a calls payload`) + } + + const payload = tx.envelope.payload + // Modify the envelope with the changes if (changes?.nonce) { - tx.envelope.payload.nonce = changes.nonce + payload.nonce = changes.nonce } if (changes?.space) { - tx.envelope.payload.space = changes.space + payload.space = changes.space } if (changes?.calls) { - if (changes.calls.length !== tx.envelope.payload.calls.length) { + if (changes.calls.length !== payload.calls.length) { throw new Error(`Invalid number of calls for transaction ${transactionId}`) } for (let i = 0; i < changes.calls.length; i++) { - tx.envelope.payload.calls[i]!.gasLimit = changes.calls[i]!.gasLimit + payload.calls[i]!.gasLimit = changes.calls[i]!.gasLimit } } @@ -335,6 +341,7 @@ export class Transactions implements TransactionsInterface { throw new Error(`Network not found for ${tx.envelope.chainId}`) } const provider = Provider.from(RpcTransport.fromHttp(network.rpcUrl)) + const feeOptionsTransaction = await wallet.buildFeeOptionsTransaction(provider, payload) // Get relayer and relayer options const [allRelayerOptions, allBundlerOptions] = await Promise.all([ @@ -347,11 +354,13 @@ export class Transactions implements TransactionsInterface { return [] } - // Determine the to address for the built transaction - const walletStatus = await wallet.getStatus(provider) - const to = walletStatus.isDeployed ? wallet.address : wallet.guest - - const feeOptions = await relayer.feeOptions(tx.wallet, tx.envelope.chainId, to, tx.envelope.payload.calls) + const feeOptions = await relayer.feeOptions( + tx.wallet, + tx.envelope.chainId, + feeOptionsTransaction.to, + payload.calls, + feeOptionsTransaction.data, + ) if (feeOptions.options.length === 0) { const { name, icon } = relayer instanceof Relayer.EIP6963.EIP6963Relayer ? relayer.info : {} @@ -392,8 +401,8 @@ export class Transactions implements TransactionsInterface { } try { - const erc4337Op = await wallet.prepare4337Transaction(provider, tx.envelope.payload.calls, { - space: tx.envelope.payload.space, + const erc4337Op = await wallet.prepare4337Transaction(provider, payload.calls, { + space: payload.space, }) const erc4337OpsWithEstimatedLimits = await bundler.estimateLimits(tx.wallet, erc4337Op.payload) From 34fc30ae1f545c629c3a03b48ac5d6cd453d11ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 May 2026 12:06:09 +0200 Subject: [PATCH 30/43] Bump next from 15.5.14 to 15.5.15 (#989) Bumps [next](https://github.com/vercel/next.js) from 15.5.14 to 15.5.15. - [Release notes](https://github.com/vercel/next.js/releases) - [Changelog](https://github.com/vercel/next.js/blob/canary/release.js) - [Commits](https://github.com/vercel/next.js/compare/v15.5.14...v15.5.15) --- updated-dependencies: - dependency-name: next dependency-version: 15.5.15 dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- extras/docs/package.json | 2 +- extras/web/package.json | 2 +- pnpm-lock.yaml | 191 ++++++++++++++++++++++++++------------- 3 files changed, 128 insertions(+), 67 deletions(-) diff --git a/extras/docs/package.json b/extras/docs/package.json index d48a68d1e2..eb5768ed0c 100644 --- a/extras/docs/package.json +++ b/extras/docs/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@repo/ui": "workspace:^", - "next": "^15.5.14", + "next": "^15.5.15", "react": "^19.2.3", "react-dom": "^19.2.3" }, diff --git a/extras/web/package.json b/extras/web/package.json index 3f2920e881..a4c4edaa72 100644 --- a/extras/web/package.json +++ b/extras/web/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@repo/ui": "workspace:^", - "next": "^15.5.14", + "next": "^15.5.15", "react": "^19.2.3", "react-dom": "^19.2.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a729099c46..1306fd11f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,8 +39,8 @@ importers: specifier: workspace:^ version: link:../../repo/ui next: - specifier: ^15.5.14 - version: 15.5.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^15.5.15 + version: 15.5.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -76,8 +76,8 @@ importers: specifier: workspace:^ version: link:../../repo/ui next: - specifier: ^15.5.14 - version: 15.5.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^15.5.15 + version: 15.5.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -530,7 +530,7 @@ importers: version: 7.0.1(eslint@9.39.2) eslint-plugin-turbo: specifier: ^2.6.3 - version: 2.6.3(eslint@9.39.2)(turbo@2.9.8) + version: 2.6.3(eslint@9.39.2)(turbo@2.9.9) globals: specifier: ^16.5.0 version: 16.5.0 @@ -720,8 +720,8 @@ packages: resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} engines: {node: '>=12'} - '@emnapi/runtime@1.9.1': - resolution: {integrity: sha512-VYi5+ZVLhpgK4hQ0TAjiQiZ6ol0oe4mBx7mVv7IflsiEp0OWoVsp/+f9Vc1hOhE0TtkORVrI1GvzyreqpgWtkA==} + '@emnapi/runtime@1.10.0': + resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} '@esbuild/aix-ppc64@0.27.3': resolution: {integrity: sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==} @@ -1104,56 +1104,56 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@next/env@15.5.14': - resolution: {integrity: sha512-aXeirLYuASxEgi4X4WhfXsShCFxWDfNn/8ZeC5YXAS2BB4A8FJi1kwwGL6nvMVboE7fZCzmJPNdMvVHc8JpaiA==} + '@next/env@15.5.15': + resolution: {integrity: sha512-vcmyu5/MyFzN7CdqRHO3uHO44p/QPCZkuTUXroeUmhNP8bL5PHFEhik22JUazt+CDDoD6EpBYRCaS2pISL+/hg==} '@next/eslint-plugin-next@15.5.9': resolution: {integrity: sha512-kUzXx0iFiXw27cQAViE1yKWnz/nF8JzRmwgMRTMh8qMY90crNsdXJRh2e+R0vBpFR3kk1yvAR7wev7+fCCb79Q==} - '@next/swc-darwin-arm64@15.5.14': - resolution: {integrity: sha512-Y9K6SPzobnZvrRDPO2s0grgzC+Egf0CqfbdvYmQVaztV890zicw8Z8+4Vqw8oPck8r1TjUHxVh8299Cg4TrxXg==} + '@next/swc-darwin-arm64@15.5.15': + resolution: {integrity: sha512-6PvFO2Tzt10GFK2Ro9tAVEtacMqRmTarYMFKAnV2vYMdwWc73xzmDQyAV7SwEdMhzmiRoo7+m88DuiXlJlGeaw==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.14': - resolution: {integrity: sha512-aNnkSMjSFRTOmkd7qoNI2/rETQm/vKD6c/Ac9BZGa9CtoOzy3c2njgz7LvebQJ8iPxdeTuGnAjagyis8a9ifBw==} + '@next/swc-darwin-x64@15.5.15': + resolution: {integrity: sha512-G+YNV+z6FDZTp/+IdGyIMFqalBTaQSnvAA+X/hrt+eaTRFSznRMz9K7rTmzvM6tDmKegNtyzgufZW0HwVzEqaQ==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.14': - resolution: {integrity: sha512-tjlpia+yStPRS//6sdmlVwuO1Rioern4u2onafa5n+h2hCS9MAvMXqpVbSrjgiEOoCs0nJy7oPOmWgtRRNSM5Q==} + '@next/swc-linux-arm64-gnu@15.5.15': + resolution: {integrity: sha512-eVkrMcVIBqGfXB+QUC7jjZ94Z6uX/dNStbQFabewAnk13Uy18Igd1YZ/GtPRzdhtm7QwC0e6o7zOQecul4iC1w==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.5.14': - resolution: {integrity: sha512-8B8cngBaLadl5lbDRdxGCP1Lef8ipD6KlxS3v0ElDAGil6lafrAM3B258p1KJOglInCVFUjk751IXMr2ixeQOQ==} + '@next/swc-linux-arm64-musl@15.5.15': + resolution: {integrity: sha512-RwSHKMQ7InLy5GfkY2/n5PcFycKA08qI1VST78n09nN36nUPqCvGSMiLXlfUmzmpQpF6XeBYP2KRWHi0UW3uNg==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@next/swc-linux-x64-gnu@15.5.14': - resolution: {integrity: sha512-bAS6tIAg8u4Gn3Nz7fCPpSoKAexEt2d5vn1mzokcqdqyov6ZJ6gu6GdF9l8ORFrBuRHgv3go/RfzYz5BkZ6YSQ==} + '@next/swc-linux-x64-gnu@15.5.15': + resolution: {integrity: sha512-nplqvY86LakS+eeiuWsNWvfmK8pFcOEW7ZtVRt4QH70lL+0x6LG/m1OpJ/tvrbwjmR8HH9/fH2jzW1GlL03TIg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.5.14': - resolution: {integrity: sha512-mMxv/FcrT7Gfaq4tsR22l17oKWXZmH/lVqcvjX0kfp5I0lKodHYLICKPoX1KRnnE+ci6oIUdriUhuA3rBCDiSw==} + '@next/swc-linux-x64-musl@15.5.15': + resolution: {integrity: sha512-eAgl9NKQ84/sww0v81DQINl/vL2IBxD7sMybd0cWRw6wqgouVI53brVRBrggqBRP/NWeIAE1dm5cbKYoiMlqDQ==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@next/swc-win32-arm64-msvc@15.5.14': - resolution: {integrity: sha512-OTmiBlYThppnvnsqx0rBqjDRemlmIeZ8/o4zI7veaXoeO1PVHoyj2lfTfXTiiGjCyRDhA10y4h6ZvZvBiynr2g==} + '@next/swc-win32-arm64-msvc@15.5.15': + resolution: {integrity: sha512-GJVZC86lzSquh0MtvZT+L7G8+jMnJcldloOjA8Kf3wXvBrvb6OGe2MzPuALxFshSm/IpwUtD2mIoof39ymf52A==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.14': - resolution: {integrity: sha512-+W7eFf3RS7m4G6tppVTOSyP9Y6FsJXfOuKzav1qKniiFm3KFByQfPEcouHdjlZmysl4zJGuGLQ/M9XyVeyeNEg==} + '@next/swc-win32-x64-msvc@15.5.15': + resolution: {integrity: sha512-nFucjVdwlFqxh/JG3hWSJ4p8+YJV7Ii8aPDuBQULB6DzUF4UNZETXLfEUk+oI2zEznWWULPt7MeuTE6xtK1HSA==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1331,11 +1331,21 @@ packages: cpu: [x64] os: [darwin] + '@turbo/darwin-64@2.9.9': + resolution: {integrity: sha512-hTEiNu2ABZZOO1qbjnKASI8eF3BdOOzU6iKv5w5uGOK65DDMc10cS40N1kqM99YT0uSAGUwNu6GdFctRPeEeVA==} + cpu: [x64] + os: [darwin] + '@turbo/darwin-arm64@2.9.8': resolution: {integrity: sha512-nKRFI5ZhCGUi4eXNlrojzWcT/CehMj0raot1WE4lw5qf66ZxZHbRbBqcwNEy+ZLY7RkJJRY+TaU89fuj3BcgGg==} cpu: [arm64] os: [darwin] + '@turbo/darwin-arm64@2.9.9': + resolution: {integrity: sha512-MinO40EEcP5mJiTVpfjtEulsEBhVeryfq21QhYtJZ8hQJLHGgy459rcmDVAY8/JERe4dkVU4KW+zoLF22o01EA==} + cpu: [arm64] + os: [darwin] + '@turbo/gen@1.13.4': resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true @@ -1345,21 +1355,41 @@ packages: cpu: [x64] os: [linux] + '@turbo/linux-64@2.9.9': + resolution: {integrity: sha512-7JNLw88Isk+gMlbsC8pulLDkrqe2B827ZsKFEHilb17AC6Xn/62pzH7afjY7fEU6Ayp4XP/vGhlRWOzqBvBvIQ==} + cpu: [x64] + os: [linux] + '@turbo/linux-arm64@2.9.8': resolution: {integrity: sha512-v6S3HuKVoa9CEx16IxKj1i/+crxXx22A9O80zW1350zyUlcX0T/zLOxVf1k+ruK/7ssXnDJVg8uSYOxlYRedlA==} cpu: [arm64] os: [linux] + '@turbo/linux-arm64@2.9.9': + resolution: {integrity: sha512-0pnXDwPw1rHii98JZPRg7SvsjIzy7jrhkwGU9Jy5fVYoMdYd3P2vbtLfII+OJ0Mm4Ar5yykdHDTz3RWiRI1o9g==} + cpu: [arm64] + os: [linux] + '@turbo/windows-64@2.9.8': resolution: {integrity: sha512-JaefWOJNBazDylAn3f+lLB34XMNu8nEBbgPRP/Ewysg81cBubGfcyyyzpQOGVuMwfaqdNAE/kitG7w3AbJn9/g==} cpu: [x64] os: [win32] + '@turbo/windows-64@2.9.9': + resolution: {integrity: sha512-vjDQycz4gQVvIq4n2rPtiiIESwJlAc406qtkiZlqyL+fHZEd9SxYNlBIFYtc5cuMuwrk+sIKrhN7XvwjmvS9YQ==} + cpu: [x64] + os: [win32] + '@turbo/windows-arm64@2.9.8': resolution: {integrity: sha512-Or6ljjB4TiiwCdVKDYWew0SokQ9kep5zruL8P3nbum9WdkH5XA41rQID4Ulc215Z+R3DrB+qXSHPsJjU3/n2ng==} cpu: [arm64] os: [win32] + '@turbo/windows-arm64@2.9.9': + resolution: {integrity: sha512-V6NiH43oCctepbOdQFp7UjqLyK8p6Tt824QA+G4TE+B1BBHu80A0W8OCL+H7uBJ3XZjAj/hvPDw3k3l65DoDGw==} + cpu: [arm64] + os: [win32] + '@turbo/workspaces@1.13.4': resolution: {integrity: sha512-3uYg2b5TWCiupetbDFMbBFMHl33xQTvp5DNg0fZSYal73Z9AlFH9yWabHWMYw6ywmwM1evkYRpTVA2n7GgqT5A==} hasBin: true @@ -1675,7 +1705,7 @@ packages: basic-ftp@5.0.5: resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} engines: {node: '>=10.0.0'} - deprecated: Security vulnerability fixed in 5.2.0, please upgrade + deprecated: Security vulnerability fixed in 5.2.1, please upgrade better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} @@ -1733,8 +1763,8 @@ packages: camel-case@3.0.0: resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} - caniuse-lite@1.0.30001781: - resolution: {integrity: sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==} + caniuse-lite@1.0.30001791: + resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==} cbor2@1.12.0: resolution: {integrity: sha512-3Cco8XQhi27DogSp9Ri6LYNZLi/TBY/JVnDe+mj06NkBjW/ZYOtekaEU4wZ4xcRMNrFkDv8KNtOAqHyDfz3lYg==} @@ -2818,8 +2848,8 @@ packages: mute-stream@0.0.8: resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2833,8 +2863,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next@15.5.14: - resolution: {integrity: sha512-M6S+4JyRjmKic2Ssm7jHUPkE6YUJ6lv4507jprsSZLulubz0ihO2E+S4zmQK3JZ2ov81JrugukKU4Tz0ivgqqQ==} + next@15.5.15: + resolution: {integrity: sha512-VSqCrJwtLVGwAVE0Sb/yikrQfkwkZW9p+lL/J4+xe+G3ZA+QnWPqgcfH1tDUEuk9y+pthzzVFp4L/U8JerMfMQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -3058,8 +3088,8 @@ packages: resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} + postcss@8.5.14: + resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -3554,6 +3584,10 @@ packages: resolution: {integrity: sha512-REEB2rVTVDTf4hav1gJ5dIsGylWZrNonvjXFtk1dCi8gND3PhZtnYkyry1bra/Fo+iP6ctTEZbg6vWfdfHq/1A==} hasBin: true + turbo@2.9.9: + resolution: {integrity: sha512-3xfzXE/yTjhh0S5dIWlE+3E+J9A09REpLI1ZqVh2+HrNZoVzZn0pkvjiRgVK/Ev3PF9XnaTwCntTx+CADWXcyA==} + hasBin: true + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -4111,7 +4145,7 @@ snapshots: dependencies: '@jridgewell/trace-mapping': 0.3.9 - '@emnapi/runtime@1.9.1': + '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true @@ -4336,7 +4370,7 @@ snapshots: '@img/sharp-wasm32@0.34.5': dependencies: - '@emnapi/runtime': 1.9.1 + '@emnapi/runtime': 1.10.0 optional: true '@img/sharp-win32-arm64@0.34.5': @@ -4395,34 +4429,34 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@next/env@15.5.14': {} + '@next/env@15.5.15': {} '@next/eslint-plugin-next@15.5.9': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.14': + '@next/swc-darwin-arm64@15.5.15': optional: true - '@next/swc-darwin-x64@15.5.14': + '@next/swc-darwin-x64@15.5.15': optional: true - '@next/swc-linux-arm64-gnu@15.5.14': + '@next/swc-linux-arm64-gnu@15.5.15': optional: true - '@next/swc-linux-arm64-musl@15.5.14': + '@next/swc-linux-arm64-musl@15.5.15': optional: true - '@next/swc-linux-x64-gnu@15.5.14': + '@next/swc-linux-x64-gnu@15.5.15': optional: true - '@next/swc-linux-x64-musl@15.5.14': + '@next/swc-linux-x64-musl@15.5.15': optional: true - '@next/swc-win32-arm64-msvc@15.5.14': + '@next/swc-win32-arm64-msvc@15.5.15': optional: true - '@next/swc-win32-x64-msvc@15.5.14': + '@next/swc-win32-x64-msvc@15.5.15': optional: true '@noble/ciphers@1.3.0': {} @@ -4545,9 +4579,15 @@ snapshots: '@turbo/darwin-64@2.9.8': optional: true + '@turbo/darwin-64@2.9.9': + optional: true + '@turbo/darwin-arm64@2.9.8': optional: true + '@turbo/darwin-arm64@2.9.9': + optional: true + '@turbo/gen@1.13.4(@types/node@25.3.0)(typescript@6.0.3)': dependencies: '@turbo/workspaces': 1.13.4(@types/node@25.3.0) @@ -4571,15 +4611,27 @@ snapshots: '@turbo/linux-64@2.9.8': optional: true + '@turbo/linux-64@2.9.9': + optional: true + '@turbo/linux-arm64@2.9.8': optional: true + '@turbo/linux-arm64@2.9.9': + optional: true + '@turbo/windows-64@2.9.8': optional: true + '@turbo/windows-64@2.9.9': + optional: true + '@turbo/windows-arm64@2.9.8': optional: true + '@turbo/windows-arm64@2.9.9': + optional: true + '@turbo/workspaces@1.13.4(@types/node@25.3.0)': dependencies: chalk: 2.4.2 @@ -4990,7 +5042,7 @@ snapshots: browserslist@4.28.1: dependencies: baseline-browser-mapping: 2.9.7 - caniuse-lite: 1.0.30001781 + caniuse-lite: 1.0.30001791 electron-to-chromium: 1.5.267 node-releases: 2.0.27 update-browserslist-db: 1.2.2(browserslist@4.28.1) @@ -5026,7 +5078,7 @@ snapshots: no-case: 2.3.2 upper-case: 1.1.3 - caniuse-lite@1.0.30001781: {} + caniuse-lite@1.0.30001791: {} cbor2@1.12.0: {} @@ -5447,11 +5499,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.9.8): + eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.9.9): dependencies: dotenv: 16.0.3 eslint: 9.39.2 - turbo: 2.9.8 + turbo: 2.9.9 eslint-scope@8.4.0: dependencies: @@ -6277,7 +6329,7 @@ snapshots: mute-stream@0.0.8: {} - nanoid@3.3.11: {} + nanoid@3.3.12: {} natural-compare@1.4.0: {} @@ -6285,24 +6337,24 @@ snapshots: netmask@2.0.2: {} - next@15.5.14(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@15.5.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - '@next/env': 15.5.14 + '@next/env': 15.5.15 '@swc/helpers': 0.5.15 - caniuse-lite: 1.0.30001781 + caniuse-lite: 1.0.30001791 postcss: 8.4.31 react: 19.2.3 react-dom: 19.2.3(react@19.2.3) styled-jsx: 5.1.6(react@19.2.3) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.14 - '@next/swc-darwin-x64': 15.5.14 - '@next/swc-linux-arm64-gnu': 15.5.14 - '@next/swc-linux-arm64-musl': 15.5.14 - '@next/swc-linux-x64-gnu': 15.5.14 - '@next/swc-linux-x64-musl': 15.5.14 - '@next/swc-win32-arm64-msvc': 15.5.14 - '@next/swc-win32-x64-msvc': 15.5.14 + '@next/swc-darwin-arm64': 15.5.15 + '@next/swc-darwin-x64': 15.5.15 + '@next/swc-linux-arm64-gnu': 15.5.15 + '@next/swc-linux-arm64-musl': 15.5.15 + '@next/swc-linux-x64-gnu': 15.5.15 + '@next/swc-linux-x64-musl': 15.5.15 + '@next/swc-win32-arm64-msvc': 15.5.15 + '@next/swc-win32-x64-msvc': 15.5.15 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' @@ -6557,13 +6609,13 @@ snapshots: postcss@8.4.31: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.8: + postcss@8.5.14: dependencies: - nanoid: 3.3.11 + nanoid: 3.3.12 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -7132,6 +7184,15 @@ snapshots: '@turbo/windows-64': 2.9.8 '@turbo/windows-arm64': 2.9.8 + turbo@2.9.9: + optionalDependencies: + '@turbo/darwin-64': 2.9.9 + '@turbo/darwin-arm64': 2.9.9 + '@turbo/linux-64': 2.9.9 + '@turbo/linux-arm64': 2.9.9 + '@turbo/windows-64': 2.9.9 + '@turbo/windows-arm64': 2.9.9 + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -7253,7 +7314,7 @@ snapshots: esbuild: 0.27.3 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - postcss: 8.5.8 + postcss: 8.5.14 rollup: 4.53.4 tinyglobby: 0.2.15 optionalDependencies: From f221969048099b0bb082cb21c7a0d45940ffbd4c Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 7 May 2026 12:14:00 +0200 Subject: [PATCH 31/43] Update to latest pnpm --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 512f8a44cb..38bc33117e 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "ox": "^0.9.17" } }, - "packageManager": "pnpm@10.24.0", + "packageManager": "pnpm@10.33.4", "engines": { "node": ">=18" }, From 1bbade9efd9855783b646ef412ce3a1b70714785 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 7 May 2026 12:15:22 +0200 Subject: [PATCH 32/43] 3.0.8 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 41da58802e..7942b730cc 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index af9d878268..359c12969c 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.7", + "version": "3.0.8", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index fa0194ad89..a27170830d 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index fa6e742206..5fccc7a082 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.7", + "version": "3.0.8", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index 01ea62e91f..f12fb465ef 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 23e20abd22..0853fc65fe 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.7", + "version": "3.0.8", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index 332a1da08d..78ec5497b9 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index 52e9dd3e99..daa031f06d 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.7", + "version": "3.0.8", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index 60ba432376..e43fe0583f 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 34866a0a47..a6d8be0f96 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.7", + "version": "3.0.8", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 279631525f..7f30ad8504 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index b170e7e965..eb0744fbfe 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.7", + "version": "3.0.8", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index 3aba7ff752..81061de89e 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index 60e74e9455..5e584f1387 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.7", + "version": "3.0.8", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 8bacc6a223..77712a024c 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.8 + ## 3.0.7 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 86caff6b9a..26cc339c40 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.7", + "version": "3.0.8", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index d77aa6ae66..0b2755f3cc 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 736a1d2fc8..9bb7719497 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.7", + "version": "3.0.8", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index 7703a169bd..99e7d94c1a 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index a5ab2a7e03..82a4ff06e3 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.7", + "version": "3.0.8", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index 95389b1796..cb76e13757 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling +- Updated dependencies + - @0xsequence/guard@3.0.8 + - @0xsequence/relayer@3.0.8 + - @0xsequence/wallet-primitives@3.0.8 + ## 3.0.7 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 981013a46f..06663fb0b8 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.7", + "version": "3.0.8", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index 8b3ad2e3bd..a8bb103ef6 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling +- Updated dependencies + - @0xsequence/guard@3.0.8 + - @0xsequence/relayer@3.0.8 + - @0xsequence/wallet-core@3.0.8 + - @0xsequence/wallet-primitives@3.0.8 + ## 3.0.7 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 160196a453..ab25225cf5 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.7", + "version": "3.0.8", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index dbb469e9f5..f396de96b5 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling + ## 3.0.7 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index d1e94ce9d9..8503cd9a2e 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.7", + "version": "3.0.8", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 5c3a487750..3eb4a58776 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.8 + +### Patch Changes + +- Bug fix for relayer fee options handling +- Updated dependencies + - @0xsequence/guard@3.0.8 + - @0xsequence/identity-instrument@3.0.8 + - @0xsequence/relayer@3.0.8 + - @0xsequence/wallet-core@3.0.8 + - @0xsequence/wallet-primitives@3.0.8 + ## 3.0.7 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 593a4c699d..50758011d0 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.7", + "version": "3.0.8", "license": "Apache-2.0", "type": "module", "publishConfig": { From 7ff5d5135af3362fd105732096a19d6351dc9b1f Mon Sep 17 00:00:00 2001 From: tolgahan-arikan Date: Thu, 7 May 2026 16:06:06 +0300 Subject: [PATCH 33/43] Fix fee options stub signature (#999) --- packages/wallet/core/src/wallet.ts | 47 ++++++++++++++++++- .../core/test/wallet-fee-options.test.ts | 9 +++- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/packages/wallet/core/src/wallet.ts b/packages/wallet/core/src/wallet.ts index cdfdf66c27..66b0eb52b5 100644 --- a/packages/wallet/core/src/wallet.ts +++ b/packages/wallet/core/src/wallet.ts @@ -25,6 +25,51 @@ export const DefaultWalletOptions: WalletOptions = { guest: Constants.DefaultGuestAddress, } +const FeeOptionsStubSignature: SequenceSignature.SignatureOfSignerLeaf = { + type: 'eth_sign', + r: 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffn, + s: 0x7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0n, + yParity: 0, +} + +function stubFeeOptionsTopology(topology: Config.Topology): SequenceSignature.RawTopology { + if (Array.isArray(topology)) { + return [stubFeeOptionsTopology(topology[0]), stubFeeOptionsTopology(topology[1])] + } + + if (Config.isSignerLeaf(topology)) { + return { + type: 'unrecovered-signer', + weight: topology.weight, + signature: FeeOptionsStubSignature, + } + } + + if (Config.isNestedLeaf(topology)) { + return { + type: 'nested', + weight: topology.weight, + threshold: topology.threshold, + tree: stubFeeOptionsTopology(topology.tree), + } + } + + return topology +} + +function buildFeeOptionsStubSignature(status: WalletStatusWithOnchain): Hex.Hex { + return Bytes.toHex( + SequenceSignature.encodeSignature({ + noChainId: status.chainId === 0, + configuration: { + ...status.configuration, + topology: stubFeeOptionsTopology(status.configuration.topology), + }, + suffix: status.pendingUpdates.map(({ signature }) => signature), + }), + ) +} + export type WalletStatus = { address: Address.Address isDeployed: boolean @@ -499,7 +544,7 @@ export class Wallet { payload: Payload.Calls, ): Promise<{ to: Address.Address; data: Hex.Hex }> { const status = await this.getStatus(provider) - const signature = '0x0001' as Hex.Hex + const signature = buildFeeOptionsStubSignature(status) const executeData = AbiFunction.encodeData(Constants.EXECUTE, [Bytes.toHex(Payload.encode(payload)), signature]) diff --git a/packages/wallet/core/test/wallet-fee-options.test.ts b/packages/wallet/core/test/wallet-fee-options.test.ts index d3e4ef30f5..633f476727 100644 --- a/packages/wallet/core/test/wallet-fee-options.test.ts +++ b/packages/wallet/core/test/wallet-fee-options.test.ts @@ -6,6 +6,8 @@ import { State, Wallet } from '../src/index.js' const SIGNER = '0x1234567890123456789012345678901234567890' as Address.Address const TARGET = '0xabcdefabcdefabcdefabcdefabcdefabcdefabcd' as Address.Address +const FEE_OPTIONS_STUB_SIGNATURE = + '0x040001711fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0' as Hex.Hex const configuration: Config.Config = { threshold: 1n, @@ -74,7 +76,10 @@ describe('Wallet.buildFeeOptionsTransaction', () => { const { wallet, imageHash } = await createWallet() const transaction = await wallet.buildFeeOptionsTransaction(providerFor({ deployed: true, imageHash }), payload) - const expectedData = AbiFunction.encodeData(Constants.EXECUTE, [Bytes.toHex(Payload.encode(payload)), '0x0001']) + const expectedData = AbiFunction.encodeData(Constants.EXECUTE, [ + Bytes.toHex(Payload.encode(payload)), + FEE_OPTIONS_STUB_SIGNATURE, + ]) expect(Address.isEqual(transaction.to, wallet.address)).toBe(true) expect(transaction.data).toBe(expectedData) @@ -88,7 +93,7 @@ describe('Wallet.buildFeeOptionsTransaction', () => { const expectedExecuteData = AbiFunction.encodeData(Constants.EXECUTE, [ Bytes.toHex(Payload.encode(payload)), - '0x0001', + FEE_OPTIONS_STUB_SIGNATURE, ]) expect(Address.isEqual(transaction.to, Constants.DefaultGuestAddress)).toBe(true) From 87cf349fe3859770d06ab74152f1ec9957c6bba4 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 7 May 2026 15:09:40 +0200 Subject: [PATCH 34/43] 3.0.9 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 7942b730cc..8d7c5dc551 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index 359c12969c..c0fe2135e0 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.8", + "version": "3.0.9", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index a27170830d..98b2661e72 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 5fccc7a082..058fda6a51 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.8", + "version": "3.0.9", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index f12fb465ef..b3c436416c 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 0853fc65fe..35857bea69 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.8", + "version": "3.0.9", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index 78ec5497b9..5575cda0b9 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index daa031f06d..856d7e3292 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.8", + "version": "3.0.9", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index e43fe0583f..b3233d5c69 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index a6d8be0f96..1b0d32023b 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.8", + "version": "3.0.9", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 7f30ad8504..4365abb88f 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index eb0744fbfe..f2aed5ef25 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.8", + "version": "3.0.9", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index 81061de89e..19d5943a1a 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index 5e584f1387..a4ea57696f 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.8", + "version": "3.0.9", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 77712a024c..5e5312a893 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.9 + +### Patch Changes + +- Fee options fixes +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.9 + ## 3.0.8 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 26cc339c40..1ba9e2c527 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.8", + "version": "3.0.9", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 0b2755f3cc..9b41afaa04 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index 9bb7719497..bf0e184583 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.8", + "version": "3.0.9", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index 99e7d94c1a..b66fe1270a 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index 82a4ff06e3..a226d70fb4 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.8", + "version": "3.0.9", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index cb76e13757..9f44040a1f 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.9 + +### Patch Changes + +- Fee options fixes +- Updated dependencies + - @0xsequence/guard@3.0.9 + - @0xsequence/relayer@3.0.9 + - @0xsequence/wallet-primitives@3.0.9 + ## 3.0.8 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 06663fb0b8..8cbb4eacd4 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.8", + "version": "3.0.9", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index a8bb103ef6..d037d56365 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.9 + +### Patch Changes + +- Fee options fixes +- Updated dependencies + - @0xsequence/guard@3.0.9 + - @0xsequence/relayer@3.0.9 + - @0xsequence/wallet-core@3.0.9 + - @0xsequence/wallet-primitives@3.0.9 + ## 3.0.8 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index ab25225cf5..82a3c95a22 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.8", + "version": "3.0.9", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index f396de96b5..9b0a19d851 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.9 + +### Patch Changes + +- Fee options fixes + ## 3.0.8 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index 8503cd9a2e..4648ce66a3 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.8", + "version": "3.0.9", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 3eb4a58776..795eb18aea 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.9 + +### Patch Changes + +- Fee options fixes +- Updated dependencies + - @0xsequence/guard@3.0.9 + - @0xsequence/identity-instrument@3.0.9 + - @0xsequence/relayer@3.0.9 + - @0xsequence/wallet-core@3.0.9 + - @0xsequence/wallet-primitives@3.0.9 + ## 3.0.8 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 50758011d0..547bc15c31 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.8", + "version": "3.0.9", "license": "Apache-2.0", "type": "module", "publishConfig": { From b574739a38bf7a75d8032a1943db518183514c8e Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Fri, 8 May 2026 14:51:43 +0200 Subject: [PATCH 35/43] Enforce minimum age limitation for packages --- pnpm-workspace.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 59a78ba9a9..8b50aefa01 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,7 @@ +minimumReleaseAge: 20160 # 60 * 24 * 7 * 2 = do not install package releases that are not at least 2 weeks old +# DO NOT REMOVE OR MODIFY minimumReleaseAge without approval +# list packages to be excluded from minimum release limitation + packages: - extras/* - packages/* From 1897d93b602d9e5b74ae4d4f169112bc5655b061 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Fri, 15 May 2026 12:50:20 +0200 Subject: [PATCH 36/43] Bump next.js deps to resolve security issue (#1000) --- extras/docs/package.json | 2 +- extras/web/package.json | 2 +- pnpm-lock.yaml | 117 +++++++++++++++++++++++++-------------- pnpm-workspace.yaml | 2 +- 4 files changed, 77 insertions(+), 46 deletions(-) diff --git a/extras/docs/package.json b/extras/docs/package.json index eb5768ed0c..5b275db5ba 100644 --- a/extras/docs/package.json +++ b/extras/docs/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@repo/ui": "workspace:^", - "next": "^15.5.15", + "next": "^15.5.16", "react": "^19.2.3", "react-dom": "^19.2.3" }, diff --git a/extras/web/package.json b/extras/web/package.json index a4c4edaa72..e042bc8e64 100644 --- a/extras/web/package.json +++ b/extras/web/package.json @@ -13,7 +13,7 @@ }, "dependencies": { "@repo/ui": "workspace:^", - "next": "^15.5.15", + "next": "^15.5.16", "react": "^19.2.3", "react-dom": "^19.2.3" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1306fd11f7..7a369a88a6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -39,8 +39,8 @@ importers: specifier: workspace:^ version: link:../../repo/ui next: - specifier: ^15.5.15 - version: 15.5.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^15.5.16 + version: 15.5.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -76,8 +76,8 @@ importers: specifier: workspace:^ version: link:../../repo/ui next: - specifier: ^15.5.15 - version: 15.5.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + specifier: ^15.5.16 + version: 15.5.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3) react: specifier: ^19.2.3 version: 19.2.3 @@ -963,89 +963,105 @@ packages: resolution: {integrity: sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-arm@1.2.4': resolution: {integrity: sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-ppc64@1.2.4': resolution: {integrity: sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-riscv64@1.2.4': resolution: {integrity: sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-s390x@1.2.4': resolution: {integrity: sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-libvips-linux-x64@1.2.4': resolution: {integrity: sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-libvips-linuxmusl-arm64@1.2.4': resolution: {integrity: sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-libvips-linuxmusl-x64@1.2.4': resolution: {integrity: sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-linux-arm64@0.34.5': resolution: {integrity: sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [glibc] '@img/sharp-linux-arm@0.34.5': resolution: {integrity: sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm] os: [linux] + libc: [glibc] '@img/sharp-linux-ppc64@0.34.5': resolution: {integrity: sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [ppc64] os: [linux] + libc: [glibc] '@img/sharp-linux-riscv64@0.34.5': resolution: {integrity: sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [riscv64] os: [linux] + libc: [glibc] '@img/sharp-linux-s390x@0.34.5': resolution: {integrity: sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [s390x] os: [linux] + libc: [glibc] '@img/sharp-linux-x64@0.34.5': resolution: {integrity: sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [glibc] '@img/sharp-linuxmusl-arm64@0.34.5': resolution: {integrity: sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [arm64] os: [linux] + libc: [musl] '@img/sharp-linuxmusl-x64@0.34.5': resolution: {integrity: sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==} engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} cpu: [x64] os: [linux] + libc: [musl] '@img/sharp-wasm32@0.34.5': resolution: {integrity: sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==} @@ -1104,56 +1120,60 @@ packages: '@manypkg/get-packages@1.1.3': resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==} - '@next/env@15.5.15': - resolution: {integrity: sha512-vcmyu5/MyFzN7CdqRHO3uHO44p/QPCZkuTUXroeUmhNP8bL5PHFEhik22JUazt+CDDoD6EpBYRCaS2pISL+/hg==} + '@next/env@15.5.18': + resolution: {integrity: sha512-hAV85Ckd9QR6RvH04MEKwsfLTksvFpO47j9xwtoIuvuPnlwecpSi+uZTtm8HirVbtlI2Fnz//xpcSTjFdyJk+g==} '@next/eslint-plugin-next@15.5.9': resolution: {integrity: sha512-kUzXx0iFiXw27cQAViE1yKWnz/nF8JzRmwgMRTMh8qMY90crNsdXJRh2e+R0vBpFR3kk1yvAR7wev7+fCCb79Q==} - '@next/swc-darwin-arm64@15.5.15': - resolution: {integrity: sha512-6PvFO2Tzt10GFK2Ro9tAVEtacMqRmTarYMFKAnV2vYMdwWc73xzmDQyAV7SwEdMhzmiRoo7+m88DuiXlJlGeaw==} + '@next/swc-darwin-arm64@15.5.18': + resolution: {integrity: sha512-w0WvQf1n+txiwns/9pwIQteCJpZTbxzO2SE0FLcwuD4v0WEh1JPOjdyxWL21XwJsdpx8cFRjyzxzCS/siP7HcQ==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@next/swc-darwin-x64@15.5.15': - resolution: {integrity: sha512-G+YNV+z6FDZTp/+IdGyIMFqalBTaQSnvAA+X/hrt+eaTRFSznRMz9K7rTmzvM6tDmKegNtyzgufZW0HwVzEqaQ==} + '@next/swc-darwin-x64@15.5.18': + resolution: {integrity: sha512-znn71QmDuxm+BOaglihMZfvyySMnNljkVIY5Z2TCssBmm+WqL6c19VhtH5ktFkHa8EZ2bnTUpcNcmNSQsg67og==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@next/swc-linux-arm64-gnu@15.5.15': - resolution: {integrity: sha512-eVkrMcVIBqGfXB+QUC7jjZ94Z6uX/dNStbQFabewAnk13Uy18Igd1YZ/GtPRzdhtm7QwC0e6o7zOQecul4iC1w==} + '@next/swc-linux-arm64-gnu@15.5.18': + resolution: {integrity: sha512-yPPe5MNL+igZUa+OsqQJisqSfh6oarIuA1Q0BDxljGJhRQyZeP+WRHh7rs/jZUGMh5aY0YdIjXZG0VohkKkUdw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [glibc] - '@next/swc-linux-arm64-musl@15.5.15': - resolution: {integrity: sha512-RwSHKMQ7InLy5GfkY2/n5PcFycKA08qI1VST78n09nN36nUPqCvGSMiLXlfUmzmpQpF6XeBYP2KRWHi0UW3uNg==} + '@next/swc-linux-arm64-musl@15.5.18': + resolution: {integrity: sha512-glaCczEWIrHsokFZ3pP08U4BpKxwIdnT+txdOM32OBgpL9Yw4aqx8NejmgtZQZOdstQ5f0L3CasIZudzCuD+nw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] + libc: [musl] - '@next/swc-linux-x64-gnu@15.5.15': - resolution: {integrity: sha512-nplqvY86LakS+eeiuWsNWvfmK8pFcOEW7ZtVRt4QH70lL+0x6LG/m1OpJ/tvrbwjmR8HH9/fH2jzW1GlL03TIg==} + '@next/swc-linux-x64-gnu@15.5.18': + resolution: {integrity: sha512-oUfg2EgJmU3R0OCOWiokGFUTvZiPfXtriXiuF3YNxRoROCdgvTedHIzYoeKH34gsZxS/V7mHbfq2hpAHwhH1/A==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [glibc] - '@next/swc-linux-x64-musl@15.5.15': - resolution: {integrity: sha512-eAgl9NKQ84/sww0v81DQINl/vL2IBxD7sMybd0cWRw6wqgouVI53brVRBrggqBRP/NWeIAE1dm5cbKYoiMlqDQ==} + '@next/swc-linux-x64-musl@15.5.18': + resolution: {integrity: sha512-JLxSP3KTd9iu/bvUMQxH7RJo9xKSHf55/6RPE4a6FTSZygGn7uvZbCej0AHXydwkggQGSD9UddSjwv6Xz5ESfA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] + libc: [musl] - '@next/swc-win32-arm64-msvc@15.5.15': - resolution: {integrity: sha512-GJVZC86lzSquh0MtvZT+L7G8+jMnJcldloOjA8Kf3wXvBrvb6OGe2MzPuALxFshSm/IpwUtD2mIoof39ymf52A==} + '@next/swc-win32-arm64-msvc@15.5.18': + resolution: {integrity: sha512-ir1v7enP52K2HNz3tQQvwF+x7VNxBk1ciiZ18WBPvxf4C59IqdfmHPJYK3vH7rSxpuCVw/8C712wTXNAtEp+NA==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@next/swc-win32-x64-msvc@15.5.15': - resolution: {integrity: sha512-nFucjVdwlFqxh/JG3hWSJ4p8+YJV7Ii8aPDuBQULB6DzUF4UNZETXLfEUk+oI2zEznWWULPt7MeuTE6xtK1HSA==} + '@next/swc-win32-x64-msvc@15.5.18': + resolution: {integrity: sha512-LIu5me6QTANCd25E7I5uIEfvgQ06RK7tvHAbYo3zCb3VpxQEPvMcSpd87NwUABDT6MbGPdEGR5VRiK4PPTJhQg==} engines: {node: '>= 10'} cpu: [x64] os: [win32] @@ -1220,56 +1240,67 @@ packages: resolution: {integrity: sha512-UPMMNeC4LXW7ZSHxeP3Edv09aLsFUMaD1TSVW6n1CWMECnUIJMFFB7+XC2lZTdPtvB36tYC0cJWc86mzSsaviw==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.53.4': resolution: {integrity: sha512-H8uwlV0otHs5Q7WAMSoyvjV9DJPiy5nJ/xnHolY0QptLPjaSsuX7tw+SPIfiYH6cnVx3fe4EWFafo6gH6ekZKA==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.53.4': resolution: {integrity: sha512-BLRwSRwICXz0TXkbIbqJ1ibK+/dSBpTJqDClF61GWIrxTXZWQE78ROeIhgl5MjVs4B4gSLPCFeD4xML9vbzvCQ==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.53.4': resolution: {integrity: sha512-6bySEjOTbmVcPJAywjpGLckK793A0TJWSbIa0sVwtVGfe/Nz6gOWHOwkshUIAp9j7wg2WKcA4Snu7Y1nUZyQew==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.53.4': resolution: {integrity: sha512-U0ow3bXYJZ5MIbchVusxEycBw7bO6C2u5UvD31i5IMTrnt2p4Fh4ZbHSdc/31TScIJQYHwxbj05BpevB3201ug==} cpu: [loong64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-ppc64-gnu@4.53.4': resolution: {integrity: sha512-iujDk07ZNwGLVn0YIWM80SFN039bHZHCdCCuX9nyx3Jsa2d9V/0Y32F+YadzwbvDxhSeVo9zefkoPnXEImnM5w==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.53.4': resolution: {integrity: sha512-MUtAktiOUSu+AXBpx1fkuG/Bi5rhlorGs3lw5QeJ2X3ziEGAq7vFNdWVde6XGaVqi0LGSvugwjoxSNJfHFTC0g==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.53.4': resolution: {integrity: sha512-btm35eAbDfPtcFEgaXCI5l3c2WXyzwiE8pArhd66SDtoLWmgK5/M7CUxmUglkwtniPzwvWioBKKl6IXLbPf2sQ==} cpu: [riscv64] os: [linux] + libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.53.4': resolution: {integrity: sha512-uJlhKE9ccUTCUlK+HUz/80cVtx2RayadC5ldDrrDUFaJK0SNb8/cCmC9RhBhIWuZ71Nqj4Uoa9+xljKWRogdhA==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.53.4': resolution: {integrity: sha512-jjEMkzvASQBbzzlzf4os7nzSBd/cvPrpqXCUOqoeCh1dQ4BP3RZCJk8XBeik4MUln3m+8LeTJcY54C/u8wb3DQ==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.53.4': resolution: {integrity: sha512-lu90KG06NNH19shC5rBPkrh6mrTpq5kviFylPBXQVpdEu0yzb0mDgyxLr6XdcGdBIQTH/UAhDJnL+APZTBu1aQ==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-openharmony-arm64@4.53.4': resolution: {integrity: sha512-dFDcmLwsUzhAm/dn0+dMOQZoONVYBtgik0VuY/d5IJUUb787L3Ko/ibvTvddqhb3RaB7vFEozYevHN4ox22R/w==} @@ -2863,8 +2894,8 @@ packages: resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} engines: {node: '>= 0.4.0'} - next@15.5.15: - resolution: {integrity: sha512-VSqCrJwtLVGwAVE0Sb/yikrQfkwkZW9p+lL/J4+xe+G3ZA+QnWPqgcfH1tDUEuk9y+pthzzVFp4L/U8JerMfMQ==} + next@15.5.18: + resolution: {integrity: sha512-eKL8zUJkX9Y5lE+RX/2YJoItVdGlIscyVyboeD9wSpp0PaGqjoA4tTpT2qPqz9ax+5IzGESyLSeZ/RCwbSZ2uQ==} engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} hasBin: true peerDependencies: @@ -4429,34 +4460,34 @@ snapshots: globby: 11.1.0 read-yaml-file: 1.1.0 - '@next/env@15.5.15': {} + '@next/env@15.5.18': {} '@next/eslint-plugin-next@15.5.9': dependencies: fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.5.15': + '@next/swc-darwin-arm64@15.5.18': optional: true - '@next/swc-darwin-x64@15.5.15': + '@next/swc-darwin-x64@15.5.18': optional: true - '@next/swc-linux-arm64-gnu@15.5.15': + '@next/swc-linux-arm64-gnu@15.5.18': optional: true - '@next/swc-linux-arm64-musl@15.5.15': + '@next/swc-linux-arm64-musl@15.5.18': optional: true - '@next/swc-linux-x64-gnu@15.5.15': + '@next/swc-linux-x64-gnu@15.5.18': optional: true - '@next/swc-linux-x64-musl@15.5.15': + '@next/swc-linux-x64-musl@15.5.18': optional: true - '@next/swc-win32-arm64-msvc@15.5.15': + '@next/swc-win32-arm64-msvc@15.5.18': optional: true - '@next/swc-win32-x64-msvc@15.5.15': + '@next/swc-win32-x64-msvc@15.5.18': optional: true '@noble/ciphers@1.3.0': {} @@ -6337,9 +6368,9 @@ snapshots: netmask@2.0.2: {} - next@15.5.15(react-dom@19.2.3(react@19.2.3))(react@19.2.3): + next@15.5.18(react-dom@19.2.3(react@19.2.3))(react@19.2.3): dependencies: - '@next/env': 15.5.15 + '@next/env': 15.5.18 '@swc/helpers': 0.5.15 caniuse-lite: 1.0.30001791 postcss: 8.4.31 @@ -6347,14 +6378,14 @@ snapshots: react-dom: 19.2.3(react@19.2.3) styled-jsx: 5.1.6(react@19.2.3) optionalDependencies: - '@next/swc-darwin-arm64': 15.5.15 - '@next/swc-darwin-x64': 15.5.15 - '@next/swc-linux-arm64-gnu': 15.5.15 - '@next/swc-linux-arm64-musl': 15.5.15 - '@next/swc-linux-x64-gnu': 15.5.15 - '@next/swc-linux-x64-musl': 15.5.15 - '@next/swc-win32-arm64-msvc': 15.5.15 - '@next/swc-win32-x64-msvc': 15.5.15 + '@next/swc-darwin-arm64': 15.5.18 + '@next/swc-darwin-x64': 15.5.18 + '@next/swc-linux-arm64-gnu': 15.5.18 + '@next/swc-linux-arm64-musl': 15.5.18 + '@next/swc-linux-x64-gnu': 15.5.18 + '@next/swc-linux-x64-musl': 15.5.18 + '@next/swc-win32-arm64-msvc': 15.5.18 + '@next/swc-win32-x64-msvc': 15.5.18 sharp: 0.34.5 transitivePeerDependencies: - '@babel/core' diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 8b50aefa01..bd308b0209 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,4 @@ -minimumReleaseAge: 20160 # 60 * 24 * 7 * 2 = do not install package releases that are not at least 2 weeks old +minimumReleaseAge: 10080 # 60 * 24 * 7 = do not install package releases that are not at least 1 week old # DO NOT REMOVE OR MODIFY minimumReleaseAge without approval # list packages to be excluded from minimum release limitation From fe1d1e5b8b023a87a6cbaed7ddb844c50b507a43 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Fri, 15 May 2026 13:41:35 +0200 Subject: [PATCH 37/43] Add Claude review workflow (#1001) --- .github/workflows/claude.yml | 49 ++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 .github/workflows/claude.yml diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml new file mode 100644 index 0000000000..5f540c1309 --- /dev/null +++ b/.github/workflows/claude.yml @@ -0,0 +1,49 @@ +name: Claude Code + +on: + issue_comment: + types: [created] + pull_request_review_comment: + types: [created] + issues: + types: [opened, assigned] + pull_request_review: + types: [submitted] + +jobs: + claude: + if: | + (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) || + (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) || + (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) || + (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude'))) + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: read + issues: read + id-token: write + actions: read # Required for Claude to read CI results on PRs + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Run Claude Code + id: claude + uses: anthropics/claude-code-action@v1 + with: + anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY_GITHUB_ACTIONS }} + + # This is an optional setting that allows Claude to read CI results on PRs + additional_permissions: | + actions: read + + # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it. + # prompt: 'Update the pull request description to include a summary of changes.' + + # Optional: Add claude_args to customize behavior and configuration + # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md + # or https://code.claude.com/docs/en/cli-reference for available options + # claude_args: '--allowed-tools Bash(gh pr:*)' From e8f62e53f1fc0bad9dc0c43a2c86a9c7b350cdcd Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 21 May 2026 11:51:26 +0200 Subject: [PATCH 38/43] Remove inactive networks (#1003) --- packages/wallet/primitives/src/network.ts | 225 ---------------------- 1 file changed, 225 deletions(-) diff --git a/packages/wallet/primitives/src/network.ts b/packages/wallet/primitives/src/network.ts index 69f40ae4f4..498c7a7937 100644 --- a/packages/wallet/primitives/src/network.ts +++ b/packages/wallet/primitives/src/network.ts @@ -42,7 +42,6 @@ export const ChainId = { // Polygon POLYGON: 137, - POLYGON_ZKEVM: 1101, POLYGON_AMOY: 80002, // BSC @@ -75,10 +74,6 @@ export const ChainId = { HOMEVERSE_TESTNET: 40875, HOMEVERSE: 19011, - // Xai - XAI: 660279, - XAI_SEPOLIA: 37714555429, - // TELOS TELOS: 40, TELOS_TESTNET: 41, @@ -91,10 +86,6 @@ export const ChainId = { APECHAIN: 33139, APECHAIN_TESTNET: 33111, - // Blast - BLAST: 81457, - BLAST_SEPOLIA: 168587773, - // SKALE Nebula SKALE_NEBULA: 1482601649, SKALE_NEBULA_TESTNET: 37084624, @@ -103,16 +94,12 @@ export const ChainId = { SONEIUM_MINATO: 1946, SONEIUM: 1868, - // TOY Testnet - TOY_TESTNET: 21000000, - // Immutable zkEVM IMMUTABLE_ZKEVM: 13371, IMMUTABLE_ZKEVM_TESTNET: 13473, // ETHERLINK ETHERLINK: 42793, - ETHERLINK_TESTNET: 128123, ETHERLINK_SHADOWNET_TESTNET: 127823, // MOONBEAM @@ -121,22 +108,14 @@ export const ChainId = { // MONAD MONAD: 143, - MONAD_TESTNET: 10143, // SOMNIA SOMNIA_TESTNET: 50312, SOMNIA: 5031, - // INCENTIV - INCENTIV: 24101, - INCENTIV_TESTNET_V2: 28802, - // KATANA KATANA: 747474, - // SANDBOX - SANDBOX_TESTNET: 6252, - // ARC ARC_TESTNET: 5042002, @@ -234,26 +213,6 @@ export const ALL: Network[] = [ multicall3: DEFAULT_MULTICALL3_ADDRESS, }, }, - { - chainId: ChainId.POLYGON_ZKEVM, - type: NetworkType.MAINNET, - name: 'polygon-zkevm', - title: 'Polygon zkEVM', - rpcUrl: getRpcUrl('polygon-zkevm'), - logoUrl: getLogoUrl(ChainId.POLYGON_ZKEVM), - blockExplorer: { - name: 'Polygonscan (zkEVM)', - url: 'https://zkevm.polygonscan.com/', - }, - nativeCurrency: { - symbol: 'ETH', - name: 'Ether', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, { chainId: ChainId.BSC, type: NetworkType.MAINNET, @@ -534,46 +493,6 @@ export const ALL: Network[] = [ multicall3: SEQUENCE_MULTICALL3_ADDRESS, }, }, - { - chainId: ChainId.XAI, - type: NetworkType.MAINNET, - name: 'xai', - title: 'Xai', - rpcUrl: getRpcUrl('xai'), - logoUrl: getLogoUrl(ChainId.XAI), - blockExplorer: { - name: 'Xai Explorer', - url: 'https://explorer.xai-chain.net/', - }, - nativeCurrency: { - symbol: 'XAI', - name: 'XAI', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, - { - chainId: ChainId.XAI_SEPOLIA, - type: NetworkType.TESTNET, - name: 'xai-sepolia', - title: 'Xai Sepolia', - rpcUrl: getRpcUrl('xai-sepolia'), - logoUrl: getLogoUrl(ChainId.XAI_SEPOLIA), - blockExplorer: { - name: 'Xai Sepolia Explorer', - url: 'https://testnet-explorer-v2.xai-chain.net/', - }, - nativeCurrency: { - symbol: 'sXAI', - name: 'Sepolia XAI', - decimals: 18, - }, - contracts: { - multicall3: SEQUENCE_MULTICALL3_ADDRESS, - }, - }, { chainId: ChainId.B3, type: NetworkType.MAINNET, @@ -654,46 +573,6 @@ export const ALL: Network[] = [ multicall3: DEFAULT_MULTICALL3_ADDRESS, }, }, - { - chainId: ChainId.BLAST, - type: NetworkType.MAINNET, - name: 'blast', - title: 'Blast', - rpcUrl: getRpcUrl('blast'), - logoUrl: getLogoUrl(ChainId.BLAST), - blockExplorer: { - name: 'Blast Explorer', - url: 'https://blastscan.io/', - }, - nativeCurrency: { - symbol: 'ETH', - name: 'Ether', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, - { - chainId: ChainId.BLAST_SEPOLIA, - type: NetworkType.TESTNET, - name: 'blast-sepolia', - title: 'Blast Sepolia', - rpcUrl: getRpcUrl('blast-sepolia'), - logoUrl: getLogoUrl(ChainId.BLAST_SEPOLIA), - blockExplorer: { - name: 'Blast Sepolia Explorer', - url: 'https://sepolia.blastexplorer.io/', - }, - nativeCurrency: { - symbol: 'ETH', - name: 'Ether', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, { chainId: ChainId.TELOS, type: NetworkType.MAINNET, @@ -814,26 +693,6 @@ export const ALL: Network[] = [ multicall3: DEFAULT_MULTICALL3_ADDRESS, }, }, - { - chainId: ChainId.TOY_TESTNET, - type: NetworkType.TESTNET, - name: 'toy-testnet', - title: 'TOY (Testnet)', - rpcUrl: getRpcUrl('toy-testnet'), - logoUrl: getLogoUrl(ChainId.TOY_TESTNET), - blockExplorer: { - name: 'TOY Testnet Explorer', - url: 'https://toy-chain-testnet.explorer.caldera.xyz/', - }, - nativeCurrency: { - symbol: 'TOY', - name: 'TOY', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, { chainId: ChainId.IMMUTABLE_ZKEVM, type: NetworkType.MAINNET, @@ -974,27 +833,6 @@ export const ALL: Network[] = [ multicall3: DEFAULT_MULTICALL3_ADDRESS, }, }, - { - chainId: ChainId.MONAD_TESTNET, - type: NetworkType.TESTNET, - name: 'monad-testnet', - title: 'Monad Testnet', - rpcUrl: getRpcUrl('monad-testnet'), - logoUrl: getLogoUrl(ChainId.MONAD_TESTNET), - blockExplorer: { - name: 'Monad Testnet Explorer', - url: 'https://testnet.monadexplorer.com/', - }, - nativeCurrency: { - symbol: 'MON', - name: 'MON', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, - { chainId: ChainId.SOMNIA, type: NetworkType.MAINNET, @@ -1037,48 +875,6 @@ export const ALL: Network[] = [ }, }, - { - chainId: ChainId.INCENTIV, - type: NetworkType.MAINNET, - name: 'incentiv', - title: 'Incentiv', - rpcUrl: getRpcUrl('incentiv'), - logoUrl: getLogoUrl(ChainId.INCENTIV), - blockExplorer: { - name: 'Incentiv Explorer', - url: 'https://explorer.incentiv.io/', - }, - nativeCurrency: { - symbol: 'CENT', - name: 'CENT', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, - - { - chainId: ChainId.INCENTIV_TESTNET_V2, - type: NetworkType.TESTNET, - name: 'incentiv-testnet-v2', - title: 'Incentiv Testnet', - rpcUrl: getRpcUrl('incentiv-testnet-v2'), - logoUrl: getLogoUrl(ChainId.INCENTIV_TESTNET_V2), - blockExplorer: { - name: 'Incentiv Testnet Explorer', - url: 'https://explorer.testnet.incentiv.net/', - }, - nativeCurrency: { - symbol: 'TCENT', - name: 'TCENT', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, - { chainId: ChainId.KATANA, type: NetworkType.MAINNET, @@ -1100,27 +896,6 @@ export const ALL: Network[] = [ }, }, - { - chainId: ChainId.SANDBOX_TESTNET, - type: NetworkType.TESTNET, - name: 'sandbox-testnet', - title: 'Sandbox Testnet', - rpcUrl: getRpcUrl('sandbox-testnet'), - logoUrl: getLogoUrl(ChainId.SANDBOX_TESTNET), - blockExplorer: { - name: 'Sandbox Testnet Explorer', - url: 'https://sandbox-testnet.explorer.caldera.xyz/', - }, - nativeCurrency: { - symbol: 'SAND', - name: 'SAND', - decimals: 18, - }, - contracts: { - multicall3: DEFAULT_MULTICALL3_ADDRESS, - }, - }, - { chainId: ChainId.ARC_TESTNET, type: NetworkType.TESTNET, From a62cf4b64a3d96a018ad19c6bf39830bada1c7b1 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 21 May 2026 11:51:35 +0200 Subject: [PATCH 39/43] Add latest relayer.gen.ts (#1004) --- .../src/relayer/rpc-relayer/relayer.gen.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/services/relayer/src/relayer/rpc-relayer/relayer.gen.ts b/packages/services/relayer/src/relayer/rpc-relayer/relayer.gen.ts index 8a9ff4a7b4..dd36300697 100644 --- a/packages/services/relayer/src/relayer/rpc-relayer/relayer.gen.ts +++ b/packages/services/relayer/src/relayer/rpc-relayer/relayer.gen.ts @@ -1,5 +1,5 @@ /* eslint-disable */ -// sequence-relayer v0.4.1 0a2503bc893179ba968b0015d7580aabf6a88dd4 +// sequence-relayer v0.4.1 43ed1a26ed167b22a0b0827a8725a0df6fbe6ab4 // -- // Code generated by Webrpc-gen@v0.32.2 with typescript generator. DO NOT EDIT. // @@ -12,7 +12,7 @@ export const WebrpcVersion = 'v1' export const WebrpcSchemaVersion = 'v0.4.1' // Schema hash generated from your RIDL schema -export const WebrpcSchemaHash = '0a2503bc893179ba968b0015d7580aabf6a88dd4' +export const WebrpcSchemaHash = '43ed1a26ed167b22a0b0827a8725a0df6fbe6ab4' // // Client interface @@ -390,6 +390,14 @@ export interface MetaTxn { walletAddress: string contract: string input: string + authorization?: EIP7702Authorization +} + +export interface EIP7702Authorization { + chainId: number + implementation: string + nonce: number + signature: string } export interface MetaTxnLog { @@ -586,6 +594,7 @@ export interface GetMetaTxnReceiptArgs { export interface GetMetaTxnReceiptReturn { receipt: MetaTxnReceipt + metaTxnEnqueued: boolean } export interface SimulateArgs { @@ -629,6 +638,7 @@ export interface FeeOptionsArgs { to: string data: string simulate?: boolean + authorization?: EIP7702Authorization } export interface FeeOptionsReturn { @@ -656,6 +666,7 @@ export interface FeeOptionsWithBridgeGasArgs { data: string simulate?: boolean bridgeGas: string + authorization?: EIP7702Authorization } export interface FeeOptionsWithBridgeGasReturn { @@ -696,6 +707,7 @@ export interface RepairSenderReturn {} export interface GetMetaTransactionsArgs { projectId: number page?: Page + includeNonSponsored?: boolean } export interface GetMetaTransactionsReturn { From f806807820377bdb720e8d17f9ba4c96449089a0 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Thu, 21 May 2026 11:56:33 +0200 Subject: [PATCH 40/43] 3.0.10 --- packages/services/api/CHANGELOG.md | 6 ++++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++++ packages/services/guard/package.json | 2 +- packages/services/identity-instrument/CHANGELOG.md | 6 ++++++ packages/services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 8 ++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 10 ++++++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 11 +++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 12 ++++++++++++ packages/wallet/wdk/package.json | 2 +- 28 files changed, 115 insertions(+), 14 deletions(-) diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 8d7c5dc551..37b4ea3326 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index c0fe2135e0..d05f1ddbe4 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.9", + "version": "3.0.10", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index 98b2661e72..1e76b7c904 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 058fda6a51..56f014585a 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.9", + "version": "3.0.10", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index b3c436416c..d0d37458db 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 35857bea69..3bc3e0f667 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.9", + "version": "3.0.10", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index 5575cda0b9..845912fe80 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index 856d7e3292..7c37bbcc31 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.9", + "version": "3.0.10", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index b3233d5c69..693670b22c 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 1b0d32023b..9833ffaa95 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.9", + "version": "3.0.10", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index 4365abb88f..b99659fe6f 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index f2aed5ef25..1ac1889a4e 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.9", + "version": "3.0.10", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index 19d5943a1a..c284615b66 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index a4ea57696f..db4ec068a1 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.9", + "version": "3.0.10", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 5e5312a893..507428d5bb 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,13 @@ # @0xsequence/relayer +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.10 + ## 3.0.9 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index 1ba9e2c527..ec2a8dcd9b 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.9", + "version": "3.0.10", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 9b41afaa04..139297551a 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index bf0e184583..e546d8f223 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.9", + "version": "3.0.10", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index b66fe1270a..66866e4e33 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index a226d70fb4..34b211947d 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.9", + "version": "3.0.10", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index 9f44040a1f..03d06db617 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,15 @@ # @0xsequence/wallet-core +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface +- Updated dependencies + - @0xsequence/guard@3.0.10 + - @0xsequence/relayer@3.0.10 + - @0xsequence/wallet-primitives@3.0.10 + ## 3.0.9 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 8cbb4eacd4..95457a5787 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.9", + "version": "3.0.10", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index d037d56365..492c1ec2e4 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/dapp-client +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface +- Updated dependencies + - @0xsequence/guard@3.0.10 + - @0xsequence/relayer@3.0.10 + - @0xsequence/wallet-core@3.0.10 + - @0xsequence/wallet-primitives@3.0.10 + ## 3.0.9 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 82a3c95a22..74b4beeabf 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.9", + "version": "3.0.10", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index 9b0a19d851..b2f04d8d59 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface + ## 3.0.9 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index 4648ce66a3..a34f382e68 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.9", + "version": "3.0.10", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 795eb18aea..47bc13af2c 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,17 @@ # @0xsequence/wallet-wdk +## 3.0.10 + +### Patch Changes + +- Minor network updates, relayer interface +- Updated dependencies + - @0xsequence/guard@3.0.10 + - @0xsequence/identity-instrument@3.0.10 + - @0xsequence/relayer@3.0.10 + - @0xsequence/wallet-core@3.0.10 + - @0xsequence/wallet-primitives@3.0.10 + ## 3.0.9 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 547bc15c31..65a237c553 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.9", + "version": "3.0.10", "license": "Apache-2.0", "type": "module", "publishConfig": { From 55121afceb45da84019ef565f84b2682cf6c5d44 Mon Sep 17 00:00:00 2001 From: Matt Rintoul Date: Fri, 29 May 2026 03:50:43 -0400 Subject: [PATCH 41/43] Surface relayer sponsorship signal end-to-end (additive, non-breaking) (#1007) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(relayer): propagate sponsored signal and mark swallowed errors `RpcRelayer.feeOptions` now forwards the server's `sponsored: boolean` to callers, and both `feeOptions` and `feeTokens` mark their swallowed-error returns with `failed: true`. The `Relayer` interface and all bundled implementations (Rpc, Sequence, Local, EIP6963, Pk) are widened to match. Additive change: existing consumers ignoring the new fields are unaffected. Downstream sponsorship classifiers should switch from `!feeOption` inference to `sponsored === true` so a real subsidy is no longer indistinguishable from a swallowed `/FeeOptions` error. Co-Authored-By: Claude Opus 4.7 * feat(wallet-wdk): carry sponsored/failed on StandardRelayerOption `StandardRelayerOption` gains optional `sponsored` and `failed` fields, populated on both construction branches in `transactions.ts` from the relayer SDK's new `feeOptions` return. `isStandardRelayerOption` / `isERC4337RelayerOption` are re-exported so consumers can narrow before reading the new fields. UI consumers that classified sponsorship by "no fee option attached" should switch to `sponsored === true` to distinguish a real subsidy from a swallowed `/FeeOptions` error. Co-Authored-By: Claude Opus 4.7 * feat(dapp-client): add isSponsored for explicit sponsorship checks `DappClient.isSponsored(chainId, transactions)` and `ChainSessionManager.isSponsored(calls)` return true only when the relayer's `/FeeOptions` endpoint explicitly reports sponsorship; any error, network failure, or absence of sponsorship returns false. A true result is always safe to surface as "free gas" in UI. Prefer this over inferring sponsorship from an empty `getFeeOptions` array — a swallowed `/FeeOptions` error produces the same empty shape as a real subsidy. `getFeeOptions` is unchanged. Co-Authored-By: Claude Opus 4.7 --------- Co-authored-by: Claude Opus 4.7 --- .changeset/dapp-client-is-sponsored.md | 19 +++++++ .changeset/relayer-sponsored-signal.md | 20 +++++++ .changeset/wdk-sponsored-signal.md | 23 ++++++++ .../services/relayer/src/relayer/relayer.ts | 9 ++- .../relayer/src/relayer/rpc-relayer/index.ts | 15 +++-- .../relayer/src/relayer/standard/eip6963.ts | 9 ++- .../relayer/src/relayer/standard/local.ts | 11 +++- .../src/relayer/standard/pk-relayer.ts | 9 ++- .../relayer/src/relayer/standard/sequence.ts | 12 +++- .../relayer/test/relayer/relayer.test.ts | 55 +++++++++++++++++++ .../dapp-client/src/ChainSessionManager.ts | 48 ++++++++++++++++ packages/wallet/dapp-client/src/DappClient.ts | 24 ++++++++ .../wallet/wdk/src/sequence/transactions.ts | 4 ++ .../wallet/wdk/src/sequence/types/index.ts | 1 + .../src/sequence/types/transaction-request.ts | 2 + packages/wallet/wdk/test/transactions.test.ts | 17 ++++++ 16 files changed, 261 insertions(+), 17 deletions(-) create mode 100644 .changeset/dapp-client-is-sponsored.md create mode 100644 .changeset/relayer-sponsored-signal.md create mode 100644 .changeset/wdk-sponsored-signal.md diff --git a/.changeset/dapp-client-is-sponsored.md b/.changeset/dapp-client-is-sponsored.md new file mode 100644 index 0000000000..731c28d3bd --- /dev/null +++ b/.changeset/dapp-client-is-sponsored.md @@ -0,0 +1,19 @@ +--- +'@0xsequence/dapp-client': minor +--- + +Add `isSponsored` for explicit sponsorship checks. + +`DappClient.isSponsored(chainId, transactions)` and +`ChainSessionManager.isSponsored(calls)` return `true` only when the relayer's +`/FeeOptions` endpoint explicitly reports sponsorship. Any error, network +failure, or absence of sponsorship returns `false`, so a `true` result is +always safe to surface as "free gas" in UI. + +Prefer this over inferring sponsorship from an empty `getFeeOptions` array — a +swallowed `/FeeOptions` error also produces an empty array, so the inference +can misclassify a failed quote as a real subsidy. The new method uses the +positive `sponsored: boolean` signal from `@0xsequence/relayer`'s widened +`feeOptions` return. + +`getFeeOptions` is unchanged. diff --git a/.changeset/relayer-sponsored-signal.md b/.changeset/relayer-sponsored-signal.md new file mode 100644 index 0000000000..f922932ed4 --- /dev/null +++ b/.changeset/relayer-sponsored-signal.md @@ -0,0 +1,20 @@ +--- +'@0xsequence/relayer': minor +--- + +Surface explicit sponsorship signal on `feeOptions` and an error marker on +`feeOptions` / `feeTokens`. + +- `RpcRelayer.feeOptions` now returns `sponsored: boolean`, forwarded from the + server's `FeeOptionsReturn.sponsored`. The `Relayer` interface and all + bundled implementations (`RpcRelayer`, `SequenceRelayer`, `LocalRelayer`, + `EIP6963Relayer`, `PkRelayer`) carry the new field. +- When `feeOptions` swallows a transport / server error it now returns + `{ options: [], sponsored: false, failed: true }` (was `{ options: [] }`). +- When `feeTokens` swallows an error it now returns + `{ isFeeRequired: false, failed: true }` (was `{ isFeeRequired: false }`). + +These changes are additive — existing consumers that ignore the new fields are +unaffected. Consumers that classified sponsorship by "no fee option attached" +should migrate to `sponsored === true` to distinguish a real subsidy from a +swallowed `/FeeOptions` error. diff --git a/.changeset/wdk-sponsored-signal.md b/.changeset/wdk-sponsored-signal.md new file mode 100644 index 0000000000..14d94ddce8 --- /dev/null +++ b/.changeset/wdk-sponsored-signal.md @@ -0,0 +1,23 @@ +--- +'@0xsequence/wallet-wdk': minor +--- + +Carry `sponsored` / `failed` through `StandardRelayerOption`. + +`StandardRelayerOption` now exposes two optional fields: + +- `sponsored?: boolean` — populated from the relayer SDK's new `feeOptions` + return field. `true` means the server confirmed an active sponsorship policy + match; `false` means it did not (or the quote failed). +- `failed?: boolean` — `true` when the relayer's `feeOptions` call was swallowed + due to a transport or server error. + +Both fields are populated on the empty-options construction branch and the +per-option mapping branch in `transactions.ts`. The new `isStandardRelayerOption` +and `isERC4337RelayerOption` runtime helpers are now re-exported from the +package root for consumers that need to narrow `RelayerOption` before reading +the new fields. + +UI / wallet consumers that previously classified sponsorship by "no `feeOption` +attached" should switch to `sponsored === true` so a real subsidy is no longer +indistinguishable from a swallowed `/FeeOptions` error. diff --git a/packages/services/relayer/src/relayer/relayer.ts b/packages/services/relayer/src/relayer/relayer.ts index 9f648004af..d0c5580822 100644 --- a/packages/services/relayer/src/relayer/relayer.ts +++ b/packages/services/relayer/src/relayer/relayer.ts @@ -11,7 +11,12 @@ export interface Relayer { isAvailable(wallet: Address.Address, chainId: number): Promise - feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> + feeTokens(): Promise<{ + isFeeRequired: boolean + tokens?: FeeToken[] + paymentAddress?: Address.Address + failed?: boolean + }> feeOptions( wallet: Address.Address, @@ -19,7 +24,7 @@ export interface Relayer { to: Address.Address, calls: Payload.Call[], data?: Hex.Hex, - ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> + ): Promise<{ options: FeeOption[]; quote?: FeeQuote; sponsored: boolean; failed?: boolean }> relay(to: Address.Address, data: Hex.Hex, chainId: number, quote?: FeeQuote): Promise<{ opHash: Hex.Hex }> diff --git a/packages/services/relayer/src/relayer/rpc-relayer/index.ts b/packages/services/relayer/src/relayer/rpc-relayer/index.ts index 814d25bbd3..05ba8be762 100644 --- a/packages/services/relayer/src/relayer/rpc-relayer/index.ts +++ b/packages/services/relayer/src/relayer/rpc-relayer/index.ts @@ -123,7 +123,12 @@ export class RpcRelayer implements Relayer { return Promise.resolve(this.chainId === chainId) } - async feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: RpcFeeToken[]; paymentAddress?: Address.Address }> { + async feeTokens(): Promise<{ + isFeeRequired: boolean + tokens?: RpcFeeToken[] + paymentAddress?: Address.Address + failed?: boolean + }> { try { const { isFeeRequired, tokens, paymentAddress } = await this.client.feeTokens() if (isFeeRequired) { @@ -140,7 +145,7 @@ export class RpcRelayer implements Relayer { } } catch (e) { console.warn('RpcRelayer.feeTokens failed:', e) - return { isFeeRequired: false } + return { isFeeRequired: false, failed: true } } } @@ -150,7 +155,7 @@ export class RpcRelayer implements Relayer { to: Address.Address, calls: Payload.Call[], data?: Hex.Hex, - ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> { + ): Promise<{ options: FeeOption[]; quote?: FeeQuote; sponsored: boolean; failed?: boolean }> { // IMPORTANT: // The relayer FeeOptions endpoint simulates `eth_call(to, data)`. // Callers that already built a wallet transaction should pass its `to` and `data`. @@ -182,10 +187,10 @@ export class RpcRelayer implements Relayer { gasLimit: option.gasLimit, })) - return { options, quote } + return { options, quote, sponsored: result.sponsored } } catch (e) { console.warn('RpcRelayer.feeOptions failed:', e) - return { options: [] } + return { options: [], sponsored: false, failed: true } } } diff --git a/packages/services/relayer/src/relayer/standard/eip6963.ts b/packages/services/relayer/src/relayer/standard/eip6963.ts index a290b2c6f9..957b13c443 100644 --- a/packages/services/relayer/src/relayer/standard/eip6963.ts +++ b/packages/services/relayer/src/relayer/standard/eip6963.ts @@ -23,7 +23,12 @@ export class EIP6963Relayer implements Relayer { return this.relayer.isAvailable(wallet, chainId) } - feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> { + feeTokens(): Promise<{ + isFeeRequired: boolean + tokens?: FeeToken[] + paymentAddress?: Address.Address + failed?: boolean + }> { return this.relayer.feeTokens() } @@ -32,7 +37,7 @@ export class EIP6963Relayer implements Relayer { chainId: number, to: Address.Address, calls: Payload.Call[], - ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> { + ): Promise<{ options: FeeOption[]; quote?: FeeQuote; sponsored: boolean; failed?: boolean }> { return this.relayer.feeOptions(wallet, chainId, to, calls) } diff --git a/packages/services/relayer/src/relayer/standard/local.ts b/packages/services/relayer/src/relayer/standard/local.ts index 4135af3b30..e8066674c8 100644 --- a/packages/services/relayer/src/relayer/standard/local.ts +++ b/packages/services/relayer/src/relayer/standard/local.ts @@ -56,7 +56,12 @@ export class LocalRelayer implements Relayer { return new LocalRelayer(new EIP1193ProviderAdapter(provider)) } - feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> { + feeTokens(): Promise<{ + isFeeRequired: boolean + tokens?: FeeToken[] + paymentAddress?: Address.Address + failed?: boolean + }> { return Promise.resolve({ isFeeRequired: false, }) @@ -67,8 +72,8 @@ export class LocalRelayer implements Relayer { _chainId: number, _to: Address.Address, _calls: Payload.Call[], - ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> { - return Promise.resolve({ options: [] }) + ): Promise<{ options: FeeOption[]; quote?: FeeQuote; sponsored: boolean; failed?: boolean }> { + return Promise.resolve({ options: [], sponsored: false }) } async relay( diff --git a/packages/services/relayer/src/relayer/standard/pk-relayer.ts b/packages/services/relayer/src/relayer/standard/pk-relayer.ts index b1d420a586..28ea0850a4 100644 --- a/packages/services/relayer/src/relayer/standard/pk-relayer.ts +++ b/packages/services/relayer/src/relayer/standard/pk-relayer.ts @@ -107,7 +107,12 @@ export class PkRelayer implements Relayer { return providerChainId === chainId } - feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> { + feeTokens(): Promise<{ + isFeeRequired: boolean + tokens?: FeeToken[] + paymentAddress?: Address.Address + failed?: boolean + }> { return this.relayer.feeTokens() } @@ -116,7 +121,7 @@ export class PkRelayer implements Relayer { chainId: number, to: Address.Address, calls: Payload.Call[], - ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> { + ): Promise<{ options: FeeOption[]; quote?: FeeQuote; sponsored: boolean; failed?: boolean }> { return this.relayer.feeOptions(wallet, chainId, to, calls) } diff --git a/packages/services/relayer/src/relayer/standard/sequence.ts b/packages/services/relayer/src/relayer/standard/sequence.ts index 1ae5ec69bd..8519c618a0 100644 --- a/packages/services/relayer/src/relayer/standard/sequence.ts +++ b/packages/services/relayer/src/relayer/standard/sequence.ts @@ -17,7 +17,12 @@ export class SequenceRelayer implements Relayer { return true } - async feeTokens(): Promise<{ isFeeRequired: boolean; tokens?: FeeToken[]; paymentAddress?: Address.Address }> { + async feeTokens(): Promise<{ + isFeeRequired: boolean + tokens?: FeeToken[] + paymentAddress?: Address.Address + failed?: boolean + }> { const { isFeeRequired, tokens, paymentAddress } = await this.service.feeTokens() if (isFeeRequired) { Address.assert(paymentAddress) @@ -39,17 +44,18 @@ export class SequenceRelayer implements Relayer { to: Address.Address, calls: Payload.Call[], transactionData?: Hex.Hex, - ): Promise<{ options: FeeOption[]; quote?: FeeQuote }> { + ): Promise<{ options: FeeOption[]; quote?: FeeQuote; sponsored: boolean; failed?: boolean }> { const execute = AbiFunction.from('function execute(bytes calldata _payload, bytes calldata _signature)') const payload = Payload.encode({ type: 'call', space: 0n, nonce: 0n, calls }, to) const signature = '0x0001' // TODO: use a stub signature const data = transactionData ?? AbiFunction.encodeData(execute, [Bytes.toHex(payload), signature]) - const { options, quote } = await this.service.feeOptions({ wallet, to, data }) + const { options, quote, sponsored } = await this.service.feeOptions({ wallet, to, data }) return { options, quote: quote ? { _tag: 'FeeQuote', _quote: quote } : undefined, + sponsored, } } diff --git a/packages/services/relayer/test/relayer/relayer.test.ts b/packages/services/relayer/test/relayer/relayer.test.ts index 028ccf32f0..cd8c096a3e 100644 --- a/packages/services/relayer/test/relayer/relayer.test.ts +++ b/packages/services/relayer/test/relayer/relayer.test.ts @@ -294,6 +294,7 @@ describe('Relayer', () => { vi.mocked(mockRelayer.feeOptions).mockResolvedValue({ options: [], quote: undefined, + sponsored: false, }) vi.mocked(mockRelayer.relay).mockResolvedValue({ opHash: TEST_OP_HASH, @@ -375,6 +376,60 @@ describe('Relayer', () => { data: expectedData, }) }) + + it('should propagate sponsored:true from the server', async () => { + const fetchImpl = vi.fn( + async () => new Response(JSON.stringify({ options: [], sponsored: true }), { status: 200 }), + ) + const relayer = new Relayer.RpcRelayer('https://relayer.test', TEST_CHAIN_ID, 'https://rpc.test', fetchImpl) + + const result = await relayer.feeOptions(TEST_WALLET_ADDRESS, TEST_CHAIN_ID, TEST_TO_ADDRESS, [mockCall]) + + expect(result.sponsored).toBe(true) + expect(result.options).toEqual([]) + expect(result.failed).toBeUndefined() + }) + + it('should propagate sponsored:false from the server', async () => { + const fetchImpl = vi.fn( + async () => new Response(JSON.stringify({ options: [], sponsored: false }), { status: 200 }), + ) + const relayer = new Relayer.RpcRelayer('https://relayer.test', TEST_CHAIN_ID, 'https://rpc.test', fetchImpl) + + const result = await relayer.feeOptions(TEST_WALLET_ADDRESS, TEST_CHAIN_ID, TEST_TO_ADDRESS, [mockCall]) + + expect(result.sponsored).toBe(false) + expect(result.failed).toBeUndefined() + }) + + it('should return sponsored:false and failed:true when the server errors', async () => { + const warn = vi.spyOn(console, 'warn').mockImplementation(() => {}) + const fetchImpl = vi.fn( + async () => + new Response(JSON.stringify({ error: 'Aborted', code: 1005, msg: 'simulation failed' }), { status: 400 }), + ) + const relayer = new Relayer.RpcRelayer('https://relayer.test', TEST_CHAIN_ID, 'https://rpc.test', fetchImpl) + + const result = await relayer.feeOptions(TEST_WALLET_ADDRESS, TEST_CHAIN_ID, TEST_TO_ADDRESS, [mockCall]) + + expect(result).toEqual({ options: [], sponsored: false, failed: true }) + expect(warn).toHaveBeenCalled() + warn.mockRestore() + }) + }) + + describe('RpcRelayer.feeTokens', () => { + it('should return failed:true when the server errors', async () => { + const warn = vi.spyOn(console, 'warn').mockImplementation(() => {}) + const fetchImpl = vi.fn(async () => new Response('boom', { status: 500 })) + const relayer = new Relayer.RpcRelayer('https://relayer.test', TEST_CHAIN_ID, 'https://rpc.test', fetchImpl) + + const result = await relayer.feeTokens() + + expect(result).toEqual({ isFeeRequired: false, failed: true }) + expect(warn).toHaveBeenCalled() + warn.mockRestore() + }) }) describe('Type compatibility', () => { diff --git a/packages/wallet/dapp-client/src/ChainSessionManager.ts b/packages/wallet/dapp-client/src/ChainSessionManager.ts index dc1f30e239..d2ebd1a8e5 100644 --- a/packages/wallet/dapp-client/src/ChainSessionManager.ts +++ b/packages/wallet/dapp-client/src/ChainSessionManager.ts @@ -878,6 +878,54 @@ export class ChainSessionManager { } } + /** + * Checks whether the given transactions would be sponsored by an active + * relayer policy on this chain. + * + * Returns `true` only when the relayer's `/FeeOptions` endpoint explicitly + * reports sponsorship. A failed quote, network error, or absence of + * sponsorship all return `false`, so a `true` result is always safe to + * surface as "free gas" in UI. + */ + async isSponsored(calls: Transaction[]): Promise { + const callsToSend = calls.map((tx) => ({ + to: tx.to, + value: tx.value, + data: tx.data, + gasLimit: tx.gasLimit ?? BigInt(0), + delegateCall: tx.delegateCall ?? false, + onlyFallback: tx.onlyFallback ?? false, + behaviorOnError: tx.behaviorOnError ?? ('revert' as const), + })) + try { + const signedCall = await this._buildAndSignCalls(callsToSend) + const fingerprint = this._fingerprintCalls(callsToSend) + if (fingerprint) { + this.lastSignedCallCache = { + fingerprint, + signedCall, + createdAtMs: Date.now(), + } + } + const walletAddress = this.walletAddress + if (!walletAddress) throw new InitializationError('Wallet is not initialized.') + const feeOptions = await this.relayer.feeOptions( + walletAddress, + this.chainId, + signedCall.to, + callsToSend, + signedCall.data, + ) + return feeOptions.sponsored === true && !feeOptions.failed + } catch (err) { + console.warn( + `isSponsored check failed for chain ${this.chainId}:`, + err instanceof Error ? err.message : String(err), + ) + return false + } + } + /** * Builds, signs, and sends a batch of transactions. * @param transactions The transactions to be sent. diff --git a/packages/wallet/dapp-client/src/DappClient.ts b/packages/wallet/dapp-client/src/DappClient.ts index e580bd9127..cc6bcba4df 100644 --- a/packages/wallet/dapp-client/src/DappClient.ts +++ b/packages/wallet/dapp-client/src/DappClient.ts @@ -806,6 +806,30 @@ export class DappClient { return await chainSessionManager.getFeeOptions(transactions) } + /** + * Checks whether the given transactions would be sponsored on `chainId`. + * + * Returns `true` only when the relayer's `/FeeOptions` endpoint explicitly + * reports sponsorship. A failed quote, network error, or absence of + * sponsorship all return `false`, so a `true` result is always safe to + * surface as "free gas" in UI. + * + * Prefer this over inferring sponsorship from an empty `getFeeOptions` + * array — a swallowed `/FeeOptions` error also produces an empty array. + * + * @example + * if (await dappClient.isSponsored(1, transactions)) { + * // safe to show "Free gas, sponsored by app" + * } else { + * const feeOptions = await dappClient.getFeeOptions(1, transactions) + * // present feeOptions[0..n] to the user as payment choices + * } + */ + async isSponsored(chainId: number, transactions: Transaction[]): Promise { + const chainSessionManager = await this.getOrInitializeChainManager(chainId) + return await chainSessionManager.isSponsored(transactions) + } + /** * Fetches fee tokens for a chain. * @returns A promise that resolves with the fee tokens response. {@link GetFeeTokensResponse} diff --git a/packages/wallet/wdk/src/sequence/transactions.ts b/packages/wallet/wdk/src/sequence/transactions.ts index 146d669998..c5549f28d2 100644 --- a/packages/wallet/wdk/src/sequence/transactions.ts +++ b/packages/wallet/wdk/src/sequence/transactions.ts @@ -371,6 +371,8 @@ export class Transactions implements TransactionsInterface { id: uuidv7(), relayerType: relayer.type, relayerId: relayer.id, + sponsored: feeOptions.sponsored, + failed: feeOptions.failed, name, icon, } as StandardRelayerOption, @@ -383,6 +385,8 @@ export class Transactions implements TransactionsInterface { feeOption, relayerType: relayer.type, relayerId: relayer.id, + sponsored: feeOptions.sponsored, + failed: feeOptions.failed, quote: feeOptions.quote, })) }), diff --git a/packages/wallet/wdk/src/sequence/types/index.ts b/packages/wallet/wdk/src/sequence/types/index.ts index 066e8a071e..946ee9bf35 100644 --- a/packages/wallet/wdk/src/sequence/types/index.ts +++ b/packages/wallet/wdk/src/sequence/types/index.ts @@ -27,5 +27,6 @@ export type { TransactionRequest, TransactionRequested, } from './transaction-request.js' +export { isERC4337RelayerOption, isStandardRelayerOption } from './transaction-request.js' export type { Wallet } from './wallet.js' export type { Module } from './module.js' diff --git a/packages/wallet/wdk/src/sequence/types/transaction-request.ts b/packages/wallet/wdk/src/sequence/types/transaction-request.ts index 51160a0499..5511bc61bd 100644 --- a/packages/wallet/wdk/src/sequence/types/transaction-request.ts +++ b/packages/wallet/wdk/src/sequence/types/transaction-request.ts @@ -21,6 +21,8 @@ export type StandardRelayerOption = BaseRelayerOption & { kind: 'standard' feeOption?: Relayer.FeeOption quote?: Relayer.FeeQuote + sponsored?: boolean + failed?: boolean name?: string icon?: string } diff --git a/packages/wallet/wdk/test/transactions.test.ts b/packages/wallet/wdk/test/transactions.test.ts index 295d00d014..8d494347d7 100644 --- a/packages/wallet/wdk/test/transactions.test.ts +++ b/packages/wallet/wdk/test/transactions.test.ts @@ -1,5 +1,6 @@ import { afterEach, describe, expect, it } from 'vitest' import { + isStandardRelayerOption, Manager, SignerActionable, Transaction, @@ -56,6 +57,14 @@ describe('Transactions', () => { expect(tx.relayerOptions.length).toBe(1) expect(tx.relayerOptions[0]!.id).toBeDefined() + // PkRelayer/LocalRelayer never report sponsorship, so sponsored should be + // explicitly false (not undefined) and failed should remain undefined. + const firstOption = tx.relayerOptions[0]! + if (isStandardRelayerOption(firstOption)) { + expect(firstOption.sponsored).toBe(false) + expect(firstOption.failed).toBeUndefined() + } + const sigId = await manager.transactions.selectRelayer(txId!, tx.relayerOptions[0]!.id) expect(sigId).toBeDefined() @@ -169,6 +178,14 @@ describe('Transactions', () => { expect(tx.relayerOptions.length).toBe(1) expect(tx.relayerOptions[0]!.id).toBeDefined() + // PkRelayer/LocalRelayer never report sponsorship, so sponsored should be + // explicitly false (not undefined) and failed should remain undefined. + const firstOption = tx.relayerOptions[0]! + if (isStandardRelayerOption(firstOption)) { + expect(firstOption.sponsored).toBe(false) + expect(firstOption.failed).toBeUndefined() + } + const sigId = await manager.transactions.selectRelayer(txId!, tx.relayerOptions[0]!.id) expect(sigId).toBeDefined() From db978bd670bb759eb02169bdeee17a2d624e90c1 Mon Sep 17 00:00:00 2001 From: Taylan Pince Date: Fri, 29 May 2026 12:48:21 +0200 Subject: [PATCH 42/43] 3.0.11 --- .changeset/dapp-client-is-sponsored.md | 19 ----------- .changeset/relayer-sponsored-signal.md | 20 ----------- .changeset/wdk-sponsored-signal.md | 23 ------------- packages/services/api/CHANGELOG.md | 6 ++++ packages/services/api/package.json | 2 +- packages/services/builder/CHANGELOG.md | 6 ++++ packages/services/builder/package.json | 2 +- packages/services/guard/CHANGELOG.md | 6 ++++ packages/services/guard/package.json | 2 +- .../services/identity-instrument/CHANGELOG.md | 6 ++++ .../services/identity-instrument/package.json | 2 +- packages/services/indexer/CHANGELOG.md | 6 ++++ packages/services/indexer/package.json | 2 +- packages/services/marketplace/CHANGELOG.md | 6 ++++ packages/services/marketplace/package.json | 2 +- packages/services/metadata/CHANGELOG.md | 6 ++++ packages/services/metadata/package.json | 2 +- packages/services/relayer/CHANGELOG.md | 26 ++++++++++++++ packages/services/relayer/package.json | 2 +- packages/services/userdata/CHANGELOG.md | 6 ++++ packages/services/userdata/package.json | 2 +- packages/utils/abi/CHANGELOG.md | 6 ++++ packages/utils/abi/package.json | 2 +- packages/wallet/core/CHANGELOG.md | 11 ++++++ packages/wallet/core/package.json | 2 +- packages/wallet/dapp-client/CHANGELOG.md | 30 ++++++++++++++++ packages/wallet/dapp-client/package.json | 2 +- packages/wallet/primitives/CHANGELOG.md | 6 ++++ packages/wallet/primitives/package.json | 2 +- packages/wallet/wdk/CHANGELOG.md | 34 +++++++++++++++++++ packages/wallet/wdk/package.json | 2 +- 31 files changed, 175 insertions(+), 76 deletions(-) delete mode 100644 .changeset/dapp-client-is-sponsored.md delete mode 100644 .changeset/relayer-sponsored-signal.md delete mode 100644 .changeset/wdk-sponsored-signal.md diff --git a/.changeset/dapp-client-is-sponsored.md b/.changeset/dapp-client-is-sponsored.md deleted file mode 100644 index 731c28d3bd..0000000000 --- a/.changeset/dapp-client-is-sponsored.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -'@0xsequence/dapp-client': minor ---- - -Add `isSponsored` for explicit sponsorship checks. - -`DappClient.isSponsored(chainId, transactions)` and -`ChainSessionManager.isSponsored(calls)` return `true` only when the relayer's -`/FeeOptions` endpoint explicitly reports sponsorship. Any error, network -failure, or absence of sponsorship returns `false`, so a `true` result is -always safe to surface as "free gas" in UI. - -Prefer this over inferring sponsorship from an empty `getFeeOptions` array — a -swallowed `/FeeOptions` error also produces an empty array, so the inference -can misclassify a failed quote as a real subsidy. The new method uses the -positive `sponsored: boolean` signal from `@0xsequence/relayer`'s widened -`feeOptions` return. - -`getFeeOptions` is unchanged. diff --git a/.changeset/relayer-sponsored-signal.md b/.changeset/relayer-sponsored-signal.md deleted file mode 100644 index f922932ed4..0000000000 --- a/.changeset/relayer-sponsored-signal.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -'@0xsequence/relayer': minor ---- - -Surface explicit sponsorship signal on `feeOptions` and an error marker on -`feeOptions` / `feeTokens`. - -- `RpcRelayer.feeOptions` now returns `sponsored: boolean`, forwarded from the - server's `FeeOptionsReturn.sponsored`. The `Relayer` interface and all - bundled implementations (`RpcRelayer`, `SequenceRelayer`, `LocalRelayer`, - `EIP6963Relayer`, `PkRelayer`) carry the new field. -- When `feeOptions` swallows a transport / server error it now returns - `{ options: [], sponsored: false, failed: true }` (was `{ options: [] }`). -- When `feeTokens` swallows an error it now returns - `{ isFeeRequired: false, failed: true }` (was `{ isFeeRequired: false }`). - -These changes are additive — existing consumers that ignore the new fields are -unaffected. Consumers that classified sponsorship by "no fee option attached" -should migrate to `sponsored === true` to distinguish a real subsidy from a -swallowed `/FeeOptions` error. diff --git a/.changeset/wdk-sponsored-signal.md b/.changeset/wdk-sponsored-signal.md deleted file mode 100644 index 14d94ddce8..0000000000 --- a/.changeset/wdk-sponsored-signal.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -'@0xsequence/wallet-wdk': minor ---- - -Carry `sponsored` / `failed` through `StandardRelayerOption`. - -`StandardRelayerOption` now exposes two optional fields: - -- `sponsored?: boolean` — populated from the relayer SDK's new `feeOptions` - return field. `true` means the server confirmed an active sponsorship policy - match; `false` means it did not (or the quote failed). -- `failed?: boolean` — `true` when the relayer's `feeOptions` call was swallowed - due to a transport or server error. - -Both fields are populated on the empty-options construction branch and the -per-option mapping branch in `transactions.ts`. The new `isStandardRelayerOption` -and `isERC4337RelayerOption` runtime helpers are now re-exported from the -package root for consumers that need to narrow `RelayerOption` before reading -the new fields. - -UI / wallet consumers that previously classified sponsorship by "no `feeOption` -attached" should switch to `sponsored === true` so a real subsidy is no longer -indistinguishable from a swallowed `/FeeOptions` error. diff --git a/packages/services/api/CHANGELOG.md b/packages/services/api/CHANGELOG.md index 37b4ea3326..abf1bac7ac 100644 --- a/packages/services/api/CHANGELOG.md +++ b/packages/services/api/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/api +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/services/api/package.json b/packages/services/api/package.json index d05f1ddbe4..f172925797 100644 --- a/packages/services/api/package.json +++ b/packages/services/api/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/api", - "version": "3.0.10", + "version": "3.0.11", "description": "api sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/api", "author": "Sequence Platforms ULC", diff --git a/packages/services/builder/CHANGELOG.md b/packages/services/builder/CHANGELOG.md index 1e76b7c904..5012884642 100644 --- a/packages/services/builder/CHANGELOG.md +++ b/packages/services/builder/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/builder +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/services/builder/package.json b/packages/services/builder/package.json index 56f014585a..84cf23976b 100644 --- a/packages/services/builder/package.json +++ b/packages/services/builder/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/builder", - "version": "3.0.10", + "version": "3.0.11", "description": "builder sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/builder", "author": "Sequence Platforms ULC", diff --git a/packages/services/guard/CHANGELOG.md b/packages/services/guard/CHANGELOG.md index d0d37458db..f9125f1bee 100644 --- a/packages/services/guard/CHANGELOG.md +++ b/packages/services/guard/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/guard +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/services/guard/package.json b/packages/services/guard/package.json index 3bc3e0f667..e4c7c1f053 100644 --- a/packages/services/guard/package.json +++ b/packages/services/guard/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/guard", - "version": "3.0.10", + "version": "3.0.11", "description": "guard sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/guard", "author": "Sequence Platforms ULC", diff --git a/packages/services/identity-instrument/CHANGELOG.md b/packages/services/identity-instrument/CHANGELOG.md index 845912fe80..7a3f203888 100644 --- a/packages/services/identity-instrument/CHANGELOG.md +++ b/packages/services/identity-instrument/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/identity-instrument +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/services/identity-instrument/package.json b/packages/services/identity-instrument/package.json index 7c37bbcc31..2dffdd4885 100644 --- a/packages/services/identity-instrument/package.json +++ b/packages/services/identity-instrument/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/identity-instrument", - "version": "3.0.10", + "version": "3.0.11", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/services/indexer/CHANGELOG.md b/packages/services/indexer/CHANGELOG.md index 693670b22c..34389ffed2 100644 --- a/packages/services/indexer/CHANGELOG.md +++ b/packages/services/indexer/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/indexer +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/services/indexer/package.json b/packages/services/indexer/package.json index 9833ffaa95..f8b17dac87 100644 --- a/packages/services/indexer/package.json +++ b/packages/services/indexer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/indexer", - "version": "3.0.10", + "version": "3.0.11", "description": "indexer sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/indexer", "author": "Sequence Platforms ULC", diff --git a/packages/services/marketplace/CHANGELOG.md b/packages/services/marketplace/CHANGELOG.md index b99659fe6f..56b3ea4a64 100644 --- a/packages/services/marketplace/CHANGELOG.md +++ b/packages/services/marketplace/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/marketplace +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/services/marketplace/package.json b/packages/services/marketplace/package.json index 1ac1889a4e..23a7866f80 100644 --- a/packages/services/marketplace/package.json +++ b/packages/services/marketplace/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/marketplace", - "version": "3.0.10", + "version": "3.0.11", "description": "marketplace sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/marketplace", "author": "Sequence Platforms ULC", diff --git a/packages/services/metadata/CHANGELOG.md b/packages/services/metadata/CHANGELOG.md index c284615b66..74d47b401b 100644 --- a/packages/services/metadata/CHANGELOG.md +++ b/packages/services/metadata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/metadata +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/services/metadata/package.json b/packages/services/metadata/package.json index db4ec068a1..234b7ea9c5 100644 --- a/packages/services/metadata/package.json +++ b/packages/services/metadata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/metadata", - "version": "3.0.10", + "version": "3.0.11", "publishConfig": { "access": "public" }, diff --git a/packages/services/relayer/CHANGELOG.md b/packages/services/relayer/CHANGELOG.md index 507428d5bb..951a31f261 100644 --- a/packages/services/relayer/CHANGELOG.md +++ b/packages/services/relayer/CHANGELOG.md @@ -1,5 +1,31 @@ # @0xsequence/relayer +## 3.1.0 + +### Minor Changes + +- 55121af: Surface explicit sponsorship signal on `feeOptions` and an error marker on + `feeOptions` / `feeTokens`. + - `RpcRelayer.feeOptions` now returns `sponsored: boolean`, forwarded from the + server's `FeeOptionsReturn.sponsored`. The `Relayer` interface and all + bundled implementations (`RpcRelayer`, `SequenceRelayer`, `LocalRelayer`, + `EIP6963Relayer`, `PkRelayer`) carry the new field. + - When `feeOptions` swallows a transport / server error it now returns + `{ options: [], sponsored: false, failed: true }` (was `{ options: [] }`). + - When `feeTokens` swallows an error it now returns + `{ isFeeRequired: false, failed: true }` (was `{ isFeeRequired: false }`). + + These changes are additive — existing consumers that ignore the new fields are + unaffected. Consumers that classified sponsorship by "no fee option attached" + should migrate to `sponsored === true` to distinguish a real subsidy from a + swallowed `/FeeOptions` error. + +### Patch Changes + +- Fix for relayer sponsored fees +- Updated dependencies + - @0xsequence/wallet-primitives@3.0.11 + ## 3.0.10 ### Patch Changes diff --git a/packages/services/relayer/package.json b/packages/services/relayer/package.json index ec2a8dcd9b..284ceae37e 100644 --- a/packages/services/relayer/package.json +++ b/packages/services/relayer/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/relayer", - "version": "3.0.10", + "version": "3.1.0", "type": "module", "publishConfig": { "access": "public" diff --git a/packages/services/userdata/CHANGELOG.md b/packages/services/userdata/CHANGELOG.md index 139297551a..ebf00e9ebe 100644 --- a/packages/services/userdata/CHANGELOG.md +++ b/packages/services/userdata/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/userdata +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/services/userdata/package.json b/packages/services/userdata/package.json index e546d8f223..0483c76a3d 100644 --- a/packages/services/userdata/package.json +++ b/packages/services/userdata/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/userdata", - "version": "3.0.10", + "version": "3.0.11", "description": "userdata sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/services/userdata", "author": "Sequence Platforms ULC", diff --git a/packages/utils/abi/CHANGELOG.md b/packages/utils/abi/CHANGELOG.md index 66866e4e33..fca1d35a4c 100644 --- a/packages/utils/abi/CHANGELOG.md +++ b/packages/utils/abi/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/abi +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/utils/abi/package.json b/packages/utils/abi/package.json index 34b211947d..6b6023abd8 100644 --- a/packages/utils/abi/package.json +++ b/packages/utils/abi/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/abi", - "version": "3.0.10", + "version": "3.0.11", "description": "abi sub-package for Sequence", "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/utils/abi", "author": "Sequence Platforms ULC", diff --git a/packages/wallet/core/CHANGELOG.md b/packages/wallet/core/CHANGELOG.md index 03d06db617..8c79704d74 100644 --- a/packages/wallet/core/CHANGELOG.md +++ b/packages/wallet/core/CHANGELOG.md @@ -1,5 +1,16 @@ # @0xsequence/wallet-core +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees +- Updated dependencies +- Updated dependencies [55121af] + - @0xsequence/guard@3.0.11 + - @0xsequence/relayer@3.1.0 + - @0xsequence/wallet-primitives@3.0.11 + ## 3.0.10 ### Patch Changes diff --git a/packages/wallet/core/package.json b/packages/wallet/core/package.json index 95457a5787..0c9ca7535b 100644 --- a/packages/wallet/core/package.json +++ b/packages/wallet/core/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-core", - "version": "3.0.10", + "version": "3.0.11", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/dapp-client/CHANGELOG.md b/packages/wallet/dapp-client/CHANGELOG.md index 492c1ec2e4..03750f575e 100644 --- a/packages/wallet/dapp-client/CHANGELOG.md +++ b/packages/wallet/dapp-client/CHANGELOG.md @@ -1,5 +1,35 @@ # @0xsequence/dapp-client +## 3.1.0 + +### Minor Changes + +- 55121af: Add `isSponsored` for explicit sponsorship checks. + + `DappClient.isSponsored(chainId, transactions)` and + `ChainSessionManager.isSponsored(calls)` return `true` only when the relayer's + `/FeeOptions` endpoint explicitly reports sponsorship. Any error, network + failure, or absence of sponsorship returns `false`, so a `true` result is + always safe to surface as "free gas" in UI. + + Prefer this over inferring sponsorship from an empty `getFeeOptions` array — a + swallowed `/FeeOptions` error also produces an empty array, so the inference + can misclassify a failed quote as a real subsidy. The new method uses the + positive `sponsored: boolean` signal from `@0xsequence/relayer`'s widened + `feeOptions` return. + + `getFeeOptions` is unchanged. + +### Patch Changes + +- Fix for relayer sponsored fees +- Updated dependencies +- Updated dependencies [55121af] + - @0xsequence/guard@3.0.11 + - @0xsequence/relayer@3.1.0 + - @0xsequence/wallet-core@3.0.11 + - @0xsequence/wallet-primitives@3.0.11 + ## 3.0.10 ### Patch Changes diff --git a/packages/wallet/dapp-client/package.json b/packages/wallet/dapp-client/package.json index 74b4beeabf..6d42b0a89e 100644 --- a/packages/wallet/dapp-client/package.json +++ b/packages/wallet/dapp-client/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/dapp-client", - "version": "3.0.10", + "version": "3.1.0", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/primitives/CHANGELOG.md b/packages/wallet/primitives/CHANGELOG.md index b2f04d8d59..c3ffa3d195 100644 --- a/packages/wallet/primitives/CHANGELOG.md +++ b/packages/wallet/primitives/CHANGELOG.md @@ -1,5 +1,11 @@ # @0xsequence/wallet-primitives +## 3.0.11 + +### Patch Changes + +- Fix for relayer sponsored fees + ## 3.0.10 ### Patch Changes diff --git a/packages/wallet/primitives/package.json b/packages/wallet/primitives/package.json index a34f382e68..4bd610f9ed 100644 --- a/packages/wallet/primitives/package.json +++ b/packages/wallet/primitives/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-primitives", - "version": "3.0.10", + "version": "3.0.11", "license": "Apache-2.0", "type": "module", "publishConfig": { diff --git a/packages/wallet/wdk/CHANGELOG.md b/packages/wallet/wdk/CHANGELOG.md index 47bc13af2c..8913970049 100644 --- a/packages/wallet/wdk/CHANGELOG.md +++ b/packages/wallet/wdk/CHANGELOG.md @@ -1,5 +1,39 @@ # @0xsequence/wallet-wdk +## 3.1.0 + +### Minor Changes + +- 55121af: Carry `sponsored` / `failed` through `StandardRelayerOption`. + + `StandardRelayerOption` now exposes two optional fields: + - `sponsored?: boolean` — populated from the relayer SDK's new `feeOptions` + return field. `true` means the server confirmed an active sponsorship policy + match; `false` means it did not (or the quote failed). + - `failed?: boolean` — `true` when the relayer's `feeOptions` call was swallowed + due to a transport or server error. + + Both fields are populated on the empty-options construction branch and the + per-option mapping branch in `transactions.ts`. The new `isStandardRelayerOption` + and `isERC4337RelayerOption` runtime helpers are now re-exported from the + package root for consumers that need to narrow `RelayerOption` before reading + the new fields. + + UI / wallet consumers that previously classified sponsorship by "no `feeOption` + attached" should switch to `sponsored === true` so a real subsidy is no longer + indistinguishable from a swallowed `/FeeOptions` error. + +### Patch Changes + +- Fix for relayer sponsored fees +- Updated dependencies +- Updated dependencies [55121af] + - @0xsequence/guard@3.0.11 + - @0xsequence/identity-instrument@3.0.11 + - @0xsequence/relayer@3.1.0 + - @0xsequence/wallet-core@3.0.11 + - @0xsequence/wallet-primitives@3.0.11 + ## 3.0.10 ### Patch Changes diff --git a/packages/wallet/wdk/package.json b/packages/wallet/wdk/package.json index 65a237c553..12e5d6dd83 100644 --- a/packages/wallet/wdk/package.json +++ b/packages/wallet/wdk/package.json @@ -1,6 +1,6 @@ { "name": "@0xsequence/wallet-wdk", - "version": "3.0.10", + "version": "3.1.0", "license": "Apache-2.0", "type": "module", "publishConfig": { From fce05da60d54804b55b2dc7aeac8291ad4d7465e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 29 May 2026 13:03:56 +0200 Subject: [PATCH 43/43] Bump turbo from 2.9.8 to 2.9.14 (#1008) Bumps [turbo](https://github.com/vercel/turborepo) from 2.9.8 to 2.9.14. - [Release notes](https://github.com/vercel/turborepo/releases) - [Changelog](https://github.com/vercel/turborepo/blob/main/RELEASE.md) - [Commits](https://github.com/vercel/turborepo/compare/v2.9.8...v2.9.14) --- updated-dependencies: - dependency-name: turbo dependency-version: 2.9.14 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package.json | 2 +- pnpm-lock.yaml | 125 +++++++++++++------------------------------------ 2 files changed, 33 insertions(+), 94 deletions(-) diff --git a/package.json b/package.json index 38bc33117e..af9b64c380 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "prettier": "^3.8.3", "rimraf": "^6.1.3", "syncpack": "^14.3.1", - "turbo": "^2.9.8", + "turbo": "^2.9.14", "typescript": "^6.0.3" }, "pnpm": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7a369a88a6..406d256af6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,8 +27,8 @@ importers: specifier: ^14.3.1 version: 14.3.1 turbo: - specifier: ^2.9.8 - version: 2.9.8 + specifier: ^2.9.14 + version: 2.9.14 typescript: specifier: ^6.0.3 version: 6.0.3 @@ -530,7 +530,7 @@ importers: version: 7.0.1(eslint@9.39.2) eslint-plugin-turbo: specifier: ^2.6.3 - version: 2.6.3(eslint@9.39.2)(turbo@2.9.9) + version: 2.6.3(eslint@9.39.2)(turbo@2.9.14) globals: specifier: ^16.5.0 version: 16.5.0 @@ -1357,23 +1357,13 @@ packages: '@tsconfig/node16@1.0.4': resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - '@turbo/darwin-64@2.9.8': - resolution: {integrity: sha512-zU1P95ygDpsQ+2QHh7CVTqvYwi9UBlhKWzoIyUnP3vUoge7H9SQEzrd8dj+XcTrslAp9Db3vIBcXtMVoTEYDnA==} + '@turbo/darwin-64@2.9.14': + resolution: {integrity: sha512-t7QiPflaEyBE4oayeZtSmu4mEfjgIrcNlNNl1z1dmIVPqEdtA7+CfTf8d7KXsOGPh6aNgWjKxyvQg9uGfDQF+A==} cpu: [x64] os: [darwin] - '@turbo/darwin-64@2.9.9': - resolution: {integrity: sha512-hTEiNu2ABZZOO1qbjnKASI8eF3BdOOzU6iKv5w5uGOK65DDMc10cS40N1kqM99YT0uSAGUwNu6GdFctRPeEeVA==} - cpu: [x64] - os: [darwin] - - '@turbo/darwin-arm64@2.9.8': - resolution: {integrity: sha512-nKRFI5ZhCGUi4eXNlrojzWcT/CehMj0raot1WE4lw5qf66ZxZHbRbBqcwNEy+ZLY7RkJJRY+TaU89fuj3BcgGg==} - cpu: [arm64] - os: [darwin] - - '@turbo/darwin-arm64@2.9.9': - resolution: {integrity: sha512-MinO40EEcP5mJiTVpfjtEulsEBhVeryfq21QhYtJZ8hQJLHGgy459rcmDVAY8/JERe4dkVU4KW+zoLF22o01EA==} + '@turbo/darwin-arm64@2.9.14': + resolution: {integrity: sha512-d23147mC9BsCPA9mJ0h/ubcpbRgcJBXbcG3+Vq7YLhjz3IXuvQsJ1UXH8f4MD76ZjJ4m/E4aRdJV+MW88CDfbw==} cpu: [arm64] os: [darwin] @@ -1381,43 +1371,23 @@ packages: resolution: {integrity: sha512-PK38N1fHhDUyjLi0mUjv0RbX0xXGwDLQeRSGsIlLcVpP1B5fwodSIwIYXc9vJok26Yne94BX5AGjueYsUT3uUw==} hasBin: true - '@turbo/linux-64@2.9.8': - resolution: {integrity: sha512-Wf/kQpVDCaWM3P5d6lKvJnqjYn/ofUBGbT4h4vRFrdC4N6B/nsun03S2kQNJJMXpXg39woeS4CI367RMU3/OAg==} - cpu: [x64] - os: [linux] - - '@turbo/linux-64@2.9.9': - resolution: {integrity: sha512-7JNLw88Isk+gMlbsC8pulLDkrqe2B827ZsKFEHilb17AC6Xn/62pzH7afjY7fEU6Ayp4XP/vGhlRWOzqBvBvIQ==} + '@turbo/linux-64@2.9.14': + resolution: {integrity: sha512-P3ZKB5tuUDdDQWuAsACGUR1qv9W7BNWxdxqVJ0kZNuNNPRaVYTPPikLcp79+GiEcW3npsR+KyP38lnQiBc5aSA==} cpu: [x64] os: [linux] - '@turbo/linux-arm64@2.9.8': - resolution: {integrity: sha512-v6S3HuKVoa9CEx16IxKj1i/+crxXx22A9O80zW1350zyUlcX0T/zLOxVf1k+ruK/7ssXnDJVg8uSYOxlYRedlA==} + '@turbo/linux-arm64@2.9.14': + resolution: {integrity: sha512-ZRTlzcUMrrPv9ZuDzRF9n60Ym13bKeG9jDB8WjxyLhWNzV+AJQN+zdpIk3NJYf2zQsGUm1mNar2P0elRzLw25g==} cpu: [arm64] os: [linux] - '@turbo/linux-arm64@2.9.9': - resolution: {integrity: sha512-0pnXDwPw1rHii98JZPRg7SvsjIzy7jrhkwGU9Jy5fVYoMdYd3P2vbtLfII+OJ0Mm4Ar5yykdHDTz3RWiRI1o9g==} - cpu: [arm64] - os: [linux] - - '@turbo/windows-64@2.9.8': - resolution: {integrity: sha512-JaefWOJNBazDylAn3f+lLB34XMNu8nEBbgPRP/Ewysg81cBubGfcyyyzpQOGVuMwfaqdNAE/kitG7w3AbJn9/g==} - cpu: [x64] - os: [win32] - - '@turbo/windows-64@2.9.9': - resolution: {integrity: sha512-vjDQycz4gQVvIq4n2rPtiiIESwJlAc406qtkiZlqyL+fHZEd9SxYNlBIFYtc5cuMuwrk+sIKrhN7XvwjmvS9YQ==} + '@turbo/windows-64@2.9.14': + resolution: {integrity: sha512-exanwN6sIduZwykYeiTQj8kCmOhazP5WOz3bvXMcYtjhL6Z3iRWLewKrXCBq0bqwSP3iBMb/AerRCnHI4lx46A==} cpu: [x64] os: [win32] - '@turbo/windows-arm64@2.9.8': - resolution: {integrity: sha512-Or6ljjB4TiiwCdVKDYWew0SokQ9kep5zruL8P3nbum9WdkH5XA41rQID4Ulc215Z+R3DrB+qXSHPsJjU3/n2ng==} - cpu: [arm64] - os: [win32] - - '@turbo/windows-arm64@2.9.9': - resolution: {integrity: sha512-V6NiH43oCctepbOdQFp7UjqLyK8p6Tt824QA+G4TE+B1BBHu80A0W8OCL+H7uBJ3XZjAj/hvPDw3k3l65DoDGw==} + '@turbo/windows-arm64@2.9.14': + resolution: {integrity: sha512-fVdCsnmYoKICsycbWuuGp6Jvi51/3G/UluFWuAUCvR8PIW5IJkAk5BM9UF8PSm0Q2IphWHFZjYEgjHsh3B9y/g==} cpu: [arm64] os: [win32] @@ -3611,12 +3581,8 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - turbo@2.9.8: - resolution: {integrity: sha512-REEB2rVTVDTf4hav1gJ5dIsGylWZrNonvjXFtk1dCi8gND3PhZtnYkyry1bra/Fo+iP6ctTEZbg6vWfdfHq/1A==} - hasBin: true - - turbo@2.9.9: - resolution: {integrity: sha512-3xfzXE/yTjhh0S5dIWlE+3E+J9A09REpLI1ZqVh2+HrNZoVzZn0pkvjiRgVK/Ev3PF9XnaTwCntTx+CADWXcyA==} + turbo@2.9.14: + resolution: {integrity: sha512-BQqXRr4UoWI3UPFrtznCLykYHxwxWh53iCB57x092jPMjIlW1wnm3N895g5irpiXmnxUhREBB0n6+y8BHhs4nw==} hasBin: true type-check@0.4.0: @@ -4607,16 +4573,10 @@ snapshots: '@tsconfig/node16@1.0.4': {} - '@turbo/darwin-64@2.9.8': - optional: true - - '@turbo/darwin-64@2.9.9': - optional: true - - '@turbo/darwin-arm64@2.9.8': + '@turbo/darwin-64@2.9.14': optional: true - '@turbo/darwin-arm64@2.9.9': + '@turbo/darwin-arm64@2.9.14': optional: true '@turbo/gen@1.13.4(@types/node@25.3.0)(typescript@6.0.3)': @@ -4639,28 +4599,16 @@ snapshots: - supports-color - typescript - '@turbo/linux-64@2.9.8': - optional: true - - '@turbo/linux-64@2.9.9': - optional: true - - '@turbo/linux-arm64@2.9.8': - optional: true - - '@turbo/linux-arm64@2.9.9': - optional: true - - '@turbo/windows-64@2.9.8': + '@turbo/linux-64@2.9.14': optional: true - '@turbo/windows-64@2.9.9': + '@turbo/linux-arm64@2.9.14': optional: true - '@turbo/windows-arm64@2.9.8': + '@turbo/windows-64@2.9.14': optional: true - '@turbo/windows-arm64@2.9.9': + '@turbo/windows-arm64@2.9.14': optional: true '@turbo/workspaces@1.13.4(@types/node@25.3.0)': @@ -5530,11 +5478,11 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.9.9): + eslint-plugin-turbo@2.6.3(eslint@9.39.2)(turbo@2.9.14): dependencies: dotenv: 16.0.3 eslint: 9.39.2 - turbo: 2.9.9 + turbo: 2.9.14 eslint-scope@8.4.0: dependencies: @@ -7206,23 +7154,14 @@ snapshots: tslib@2.8.1: {} - turbo@2.9.8: - optionalDependencies: - '@turbo/darwin-64': 2.9.8 - '@turbo/darwin-arm64': 2.9.8 - '@turbo/linux-64': 2.9.8 - '@turbo/linux-arm64': 2.9.8 - '@turbo/windows-64': 2.9.8 - '@turbo/windows-arm64': 2.9.8 - - turbo@2.9.9: + turbo@2.9.14: optionalDependencies: - '@turbo/darwin-64': 2.9.9 - '@turbo/darwin-arm64': 2.9.9 - '@turbo/linux-64': 2.9.9 - '@turbo/linux-arm64': 2.9.9 - '@turbo/windows-64': 2.9.9 - '@turbo/windows-arm64': 2.9.9 + '@turbo/darwin-64': 2.9.14 + '@turbo/darwin-arm64': 2.9.14 + '@turbo/linux-64': 2.9.14 + '@turbo/linux-arm64': 2.9.14 + '@turbo/windows-64': 2.9.14 + '@turbo/windows-arm64': 2.9.14 type-check@0.4.0: dependencies: