@0xsequence/dapp-client 3.0.0-beta.10 → 3.0.0-beta.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,5 +1,5 @@
1
1
 
2
- 
3
- > @0xsequence/dapp-client@3.0.0-beta.10 build /Users/taylan/Development/Horizon/sequence.js/packages/wallet/dapp-client
2
+
3
+ > @0xsequence/dapp-client@3.0.0-beta.12 build /home/taylan/development/sequence/sequence.js/packages/wallet/dapp-client
4
4
  > tsc
5
5
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @0xsequence/dapp-client
2
2
 
3
+ ## 3.0.0-beta.12
4
+
5
+ ### Patch Changes
6
+
7
+ - Beta release with dapp connector fixes
8
+ - Updated dependencies
9
+ - @0xsequence/guard@3.0.0-beta.12
10
+ - @0xsequence/relayer@3.0.0-beta.12
11
+ - @0xsequence/wallet-core@3.0.0-beta.12
12
+ - @0xsequence/wallet-primitives@3.0.0-beta.12
13
+
14
+ ## 3.0.0-beta.11
15
+
16
+ ### Patch Changes
17
+
18
+ - 3.0.0 beta
19
+ - Updated dependencies
20
+ - @0xsequence/guard@3.0.0-beta.11
21
+ - @0xsequence/relayer@3.0.0-beta.11
22
+ - @0xsequence/wallet-core@3.0.0-beta.11
23
+ - @0xsequence/wallet-primitives@3.0.0-beta.11
24
+
3
25
  ## 3.0.0-beta.10
4
26
 
5
27
  ### Patch Changes
@@ -31,6 +31,7 @@ export declare class ChainSessionManager {
31
31
  loginMethod: LoginMethod | null;
32
32
  userEmail: string | null;
33
33
  private guard?;
34
+ private lastSignedCallCache?;
34
35
  /**
35
36
  * @param chainId The ID of the chain this manager is responsible for.
36
37
  * @param keyMachineUrl The URL of the key management service.
@@ -206,6 +207,8 @@ export declare class ChainSessionManager {
206
207
  * @private Resets the internal state and clears all persisted session data from storage.
207
208
  */
208
209
  private _resetStateAndClearCredentials;
210
+ private _getCachedSignedCall;
211
+ private _fingerprintCalls;
209
212
  }
210
213
  export {};
211
214
  //# sourceMappingURL=ChainSessionManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChainSessionManager.d.ts","sourceRoot":"","sources":["../src/ChainSessionManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChainSessionManager.d.ts","sourceRoot":"","sources":["../src/ChainSessionManager.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,7 @@ export class ChainSessionManager {
31
31
  loginMethod = null;
32
32
  userEmail = null;
33
33
  guard;
34
+ lastSignedCallCache;
34
35
  /**
35
36
  * @param chainId The ID of the chain this manager is responsible for.
36
37
  * @param keyMachineUrl The URL of the key management service.
@@ -575,20 +576,6 @@ export class ChainSessionManager {
575
576
  return true;
576
577
  }
577
578
  catch (error) {
578
- if (error instanceof Error && error.message.includes('Signer supporting call is expired')) {
579
- // Extract the expired signer address from the message with address regex
580
- const expiredSignerAddress = error.message.match(/(0x[0-9a-fA-F]{40})/)?.[1];
581
- if (expiredSignerAddress) {
582
- // Refresh the session
583
- await this._refreshExplicitSession(Address.from(expiredSignerAddress));
584
- // Retry the permission check
585
- return this.hasPermission(transactions);
586
- }
587
- else {
588
- // Could not parse error message. Rethrow as this shouldn't happen.
589
- throw error;
590
- }
591
- }
592
579
  // An error from findSignersForCalls indicates a permission failure.
593
580
  console.warn(`Permission check failed for chain ${this.chainId}:`, error instanceof Error ? error.message : String(error));
594
581
  return false;
@@ -612,6 +599,14 @@ export class ChainSessionManager {
612
599
  }));
613
600
  try {
614
601
  const signedCall = await this._buildAndSignCalls(callsToSend);
602
+ const fingerprint = this._fingerprintCalls(callsToSend);
603
+ if (fingerprint) {
604
+ this.lastSignedCallCache = {
605
+ fingerprint,
606
+ signedCall,
607
+ createdAtMs: Date.now(),
608
+ };
609
+ }
615
610
  const feeOptions = await this.relayer.feeOptions(signedCall.to, this.chainId, callsToSend);
616
611
  return feeOptions.options;
617
612
  }
@@ -668,7 +663,7 @@ export class ChainSessionManager {
668
663
  callsToSend.unshift(transferCall);
669
664
  }
670
665
  }
671
- const signedCalls = await this._buildAndSignCalls(callsToSend);
666
+ const signedCalls = this._getCachedSignedCall(callsToSend) ?? (await this._buildAndSignCalls(callsToSend));
672
667
  const hash = await this.relayer.relay(signedCalls.to, signedCalls.data, this.chainId);
673
668
  const status = await this._waitForTransactionReceipt(hash.opHash, this.chainId);
674
669
  if (status.status === 'confirmed') {
@@ -838,4 +833,39 @@ export class ChainSessionManager {
838
833
  await this.sequenceStorage.clearExplicitSessions();
839
834
  await this.sequenceStorage.clearSessionlessConnection();
840
835
  }
836
+ _getCachedSignedCall(calls) {
837
+ if (!this.lastSignedCallCache) {
838
+ return null;
839
+ }
840
+ const ttlMs = 30_000;
841
+ if (Date.now() - this.lastSignedCallCache.createdAtMs > ttlMs) {
842
+ this.lastSignedCallCache = undefined;
843
+ return null;
844
+ }
845
+ const fingerprint = this._fingerprintCalls(calls);
846
+ if (!fingerprint) {
847
+ return null;
848
+ }
849
+ if (fingerprint !== this.lastSignedCallCache.fingerprint) {
850
+ return null;
851
+ }
852
+ return this.lastSignedCallCache.signedCall;
853
+ }
854
+ _fingerprintCalls(calls) {
855
+ try {
856
+ return JSON.stringify(calls.map((call) => ({
857
+ to: call.to,
858
+ value: call.value?.toString() ?? '0',
859
+ data: call.data ?? '0x',
860
+ gasLimit: call.gasLimit?.toString() ?? '0',
861
+ delegateCall: call.delegateCall ?? false,
862
+ onlyFallback: call.onlyFallback ?? false,
863
+ behaviorOnError: call.behaviorOnError ?? 'revert',
864
+ })));
865
+ }
866
+ catch (error) {
867
+ console.warn('ChainSessionManager._fingerprintCalls failed:', error);
868
+ return null;
869
+ }
870
+ }
841
871
  }
@@ -1 +1 @@
1
- {"version":3,"file":"DappTransport.d.ts","sourceRoot":"","sources":["../src/DappTransport.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EAEtB,aAAa,EAEd,MAAM,kBAAkB,CAAA;AAgCzB,qBAAa,aAAa;aAqBN,SAAS,EAAE,MAAM;IACjC,QAAQ,CAAC,IAAI,EAAE,aAAa;IArB9B,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,eAAe,CAAgD;IACvE,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,mBAAmB,CAAsC;IACjE,OAAO,CAAC,kBAAkB,CAAkD;IAC5E,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,oBAAoB,CAAgC;IAC5D,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAwB;IAC/D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAuB;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,SAAgB,YAAY,EAAE,MAAM,CAAA;gBAGlB,SAAS,EAAE,MAAM,EACxB,IAAI,GAAE,aAAmC,EAClD,gBAAgB,GAAE,gBAAqB,EACvC,sBAAsB,CAAC,EAAE,sBAAsB,EAC/C,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAwC/C,IAAI,YAAY,IAAI,OAAO,CAG1B;IAED,IAAI,OAAO,IAAI,OAAO,CAGrB;IAEK,WAAW,CAAC,SAAS,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,EAC/C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,QAAQ,EAClB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,SAAS,CAAC;IAoDR,qBAAqB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAuBL,mBAAmB,CAAC,SAAS,GAAG,GAAG,EAC9C,UAAU,GAAE,OAAc,EAC1B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA4EnF,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgExC,WAAW,IAAI,IAAI;IAgB1B,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,aAAa,CAuCpB;IAED,OAAO,CAAC,wBAAwB;IAiChC,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,mBAAmB;IAkD3B,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,UAAU;CAGnB"}
1
+ {"version":3,"file":"DappTransport.d.ts","sourceRoot":"","sources":["../src/DappTransport.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EAEtB,aAAa,EAEd,MAAM,kBAAkB,CAAA;AAgCzB,qBAAa,aAAa;aAqBN,SAAS,EAAE,MAAM;IACjC,QAAQ,CAAC,IAAI,EAAE,aAAa;IArB9B,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,eAAe,CAAgD;IACvE,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,mBAAmB,CAAsC;IACjE,OAAO,CAAC,kBAAkB,CAAkD;IAC5E,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,kBAAkB,CAAgC;IAC1D,OAAO,CAAC,oBAAoB,CAAgC;IAC5D,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,eAAe,CAAoC;IAC3D,OAAO,CAAC,YAAY,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IACzC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAwB;IAC/D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAuB;IAC9D,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IAEnC,SAAgB,YAAY,EAAE,MAAM,CAAA;gBAGlB,SAAS,EAAE,MAAM,EACxB,IAAI,GAAE,aAAmC,EAClD,gBAAgB,GAAE,gBAAqB,EACvC,sBAAsB,CAAC,EAAE,sBAAsB,EAC/C,qBAAqB,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI;IAwC/C,IAAI,YAAY,IAAI,OAAO,CAG1B;IAED,IAAI,OAAO,IAAI,OAAO,CAGrB;IAEK,WAAW,CAAC,SAAS,GAAG,GAAG,EAAE,QAAQ,GAAG,GAAG,EAC/C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,QAAQ,EAClB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,SAAS,CAAC;IAoDR,qBAAqB,CAChC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EACZ,WAAW,EAAE,MAAM,EACnB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAuBL,mBAAmB,CAAC,SAAS,GAAG,GAAG,EAC9C,UAAU,GAAE,OAAc,EAC1B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG;QAAE,KAAK,EAAE,GAAG,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IA4EnF,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgExC,WAAW,IAAI,IAAI;IAgB1B,OAAO,IAAI,IAAI;IAYf,OAAO,CAAC,aAAa,CAoCpB;IAED,OAAO,CAAC,wBAAwB;IAiChC,OAAO,CAAC,qBAAqB;IAc7B,OAAO,CAAC,mBAAmB;IAkD3B,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,2BAA2B;IAInC,OAAO,CAAC,sBAAsB;IAO9B,OAAO,CAAC,oBAAoB;IAY5B,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,UAAU;CAGnB"}
@@ -318,8 +318,7 @@ export class DappTransport {
318
318
  if (event.origin !== this.walletOrigin) {
319
319
  return;
320
320
  }
321
- const isPotentiallyValidSource = this.walletWindow && (event.source === this.walletWindow || !this.walletWindow.closed);
322
- if (!isPotentiallyValidSource && event.data?.type !== MessageType.WALLET_OPENED) {
321
+ if (!this.walletWindow || event.source !== this.walletWindow) {
323
322
  return;
324
323
  }
325
324
  const message = event.data;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@0xsequence/dapp-client",
3
- "version": "3.0.0-beta.10",
3
+ "version": "3.0.0-beta.12",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -25,10 +25,10 @@
25
25
  },
26
26
  "dependencies": {
27
27
  "ox": "^0.9.17",
28
- "@0xsequence/guard": "^3.0.0-beta.10",
29
- "@0xsequence/relayer": "^3.0.0-beta.10",
30
- "@0xsequence/wallet-primitives": "^3.0.0-beta.10",
31
- "@0xsequence/wallet-core": "^3.0.0-beta.10"
28
+ "@0xsequence/guard": "^3.0.0-beta.12",
29
+ "@0xsequence/relayer": "^3.0.0-beta.12",
30
+ "@0xsequence/wallet-primitives": "^3.0.0-beta.12",
31
+ "@0xsequence/wallet-core": "^3.0.0-beta.12"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "tsc",
@@ -84,6 +84,11 @@ export class ChainSessionManager {
84
84
  public loginMethod: LoginMethod | null = null
85
85
  public userEmail: string | null = null
86
86
  private guard?: GuardConfig
87
+ private lastSignedCallCache?: {
88
+ fingerprint: string
89
+ signedCall: { to: Address.Address; data: Hex.Hex }
90
+ createdAtMs: number
91
+ }
87
92
 
88
93
  /**
89
94
  * @param chainId The ID of the chain this manager is responsible for.
@@ -811,19 +816,6 @@ export class ChainSessionManager {
811
816
  await this.sessionManager.findSignersForCalls(this.wallet.address, this.chainId, calls)
812
817
  return true
813
818
  } catch (error) {
814
- if (error instanceof Error && error.message.includes('Signer supporting call is expired')) {
815
- // Extract the expired signer address from the message with address regex
816
- const expiredSignerAddress = error.message.match(/(0x[0-9a-fA-F]{40})/)?.[1]
817
- if (expiredSignerAddress) {
818
- // Refresh the session
819
- await this._refreshExplicitSession(Address.from(expiredSignerAddress))
820
- // Retry the permission check
821
- return this.hasPermission(transactions)
822
- } else {
823
- // Could not parse error message. Rethrow as this shouldn't happen.
824
- throw error
825
- }
826
- }
827
819
  // An error from findSignersForCalls indicates a permission failure.
828
820
  console.warn(
829
821
  `Permission check failed for chain ${this.chainId}:`,
@@ -851,6 +843,14 @@ export class ChainSessionManager {
851
843
  }))
852
844
  try {
853
845
  const signedCall = await this._buildAndSignCalls(callsToSend)
846
+ const fingerprint = this._fingerprintCalls(callsToSend)
847
+ if (fingerprint) {
848
+ this.lastSignedCallCache = {
849
+ fingerprint,
850
+ signedCall,
851
+ createdAtMs: Date.now(),
852
+ }
853
+ }
854
854
  const feeOptions = await this.relayer.feeOptions(signedCall.to, this.chainId, callsToSend)
855
855
  return feeOptions.options
856
856
  } catch (err) {
@@ -907,7 +907,7 @@ export class ChainSessionManager {
907
907
  callsToSend.unshift(transferCall)
908
908
  }
909
909
  }
910
- const signedCalls = await this._buildAndSignCalls(callsToSend)
910
+ const signedCalls = this._getCachedSignedCall(callsToSend) ?? (await this._buildAndSignCalls(callsToSend))
911
911
  const hash = await this.relayer.relay(signedCalls.to, signedCalls.data, this.chainId)
912
912
  const status = await this._waitForTransactionReceipt(hash.opHash, this.chainId)
913
913
  if (status.status === 'confirmed') {
@@ -1101,4 +1101,42 @@ export class ChainSessionManager {
1101
1101
  await this.sequenceStorage.clearExplicitSessions()
1102
1102
  await this.sequenceStorage.clearSessionlessConnection()
1103
1103
  }
1104
+
1105
+ private _getCachedSignedCall(calls: Payload.Call[]): { to: Address.Address; data: Hex.Hex } | null {
1106
+ if (!this.lastSignedCallCache) {
1107
+ return null
1108
+ }
1109
+ const ttlMs = 30_000
1110
+ if (Date.now() - this.lastSignedCallCache.createdAtMs > ttlMs) {
1111
+ this.lastSignedCallCache = undefined
1112
+ return null
1113
+ }
1114
+ const fingerprint = this._fingerprintCalls(calls)
1115
+ if (!fingerprint) {
1116
+ return null
1117
+ }
1118
+ if (fingerprint !== this.lastSignedCallCache.fingerprint) {
1119
+ return null
1120
+ }
1121
+ return this.lastSignedCallCache.signedCall
1122
+ }
1123
+
1124
+ private _fingerprintCalls(calls: Payload.Call[]): string | null {
1125
+ try {
1126
+ return JSON.stringify(
1127
+ calls.map((call) => ({
1128
+ to: call.to,
1129
+ value: call.value?.toString() ?? '0',
1130
+ data: call.data ?? '0x',
1131
+ gasLimit: call.gasLimit?.toString() ?? '0',
1132
+ delegateCall: call.delegateCall ?? false,
1133
+ onlyFallback: call.onlyFallback ?? false,
1134
+ behaviorOnError: call.behaviorOnError ?? 'revert',
1135
+ })),
1136
+ )
1137
+ } catch (error) {
1138
+ console.warn('ChainSessionManager._fingerprintCalls failed:', error)
1139
+ return null
1140
+ }
1141
+ }
1104
1142
  }
@@ -378,10 +378,7 @@ export class DappTransport {
378
378
  return
379
379
  }
380
380
 
381
- const isPotentiallyValidSource =
382
- this.walletWindow && (event.source === this.walletWindow || !this.walletWindow.closed)
383
-
384
- if (!isPotentiallyValidSource && event.data?.type !== MessageType.WALLET_OPENED) {
381
+ if (!this.walletWindow || event.source !== this.walletWindow) {
385
382
  return
386
383
  }
387
384