@dynamic-labs/global-wallet 4.0.0-alpha.8 → 4.0.0

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.
package/package.cjs CHANGED
@@ -3,6 +3,6 @@
3
3
 
4
4
  Object.defineProperty(exports, '__esModule', { value: true });
5
5
 
6
- var version = "4.0.0-alpha.8";
6
+ var version = "4.0.0";
7
7
 
8
8
  exports.version = version;
package/package.js CHANGED
@@ -1,4 +1,4 @@
1
1
  'use client'
2
- var version = "4.0.0-alpha.8";
2
+ var version = "4.0.0";
3
3
 
4
4
  export { version };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dynamic-labs/global-wallet",
3
- "version": "4.0.0-alpha.8",
3
+ "version": "4.0.0",
4
4
  "description": "A React SDK for implementing wallet web3 authentication and authorization to your website.",
5
5
  "author": "Dynamic Labs, Inc.",
6
6
  "license": "MIT",
@@ -22,11 +22,12 @@
22
22
  "@walletconnect/utils": "2.13.1",
23
23
  "@walletconnect/web3wallet": "1.12.1",
24
24
  "jsqr": "1.4.0",
25
- "@dynamic-labs/assert-package-version": "4.0.0-alpha.8",
26
- "@dynamic-labs/wallet-connector-core": "4.0.0-alpha.8"
25
+ "@dynamic-labs/assert-package-version": "4.0.0",
26
+ "@dynamic-labs/ethereum-core": "4.0.0",
27
+ "@dynamic-labs/wallet-connector-core": "4.0.0"
27
28
  },
28
29
  "peerDependencies": {
29
- "viem": "^2.7.6",
30
+ "viem": "^2.21.55",
30
31
  "react": "^18.0.0"
31
32
  }
32
33
  }
@@ -7,8 +7,9 @@ var _tslib = require('../_virtual/_tslib.cjs');
7
7
  var core = require('@walletconnect/core');
8
8
  var utils = require('@walletconnect/utils');
9
9
  var web3wallet = require('@walletconnect/web3wallet');
10
- var viem = require('viem');
11
10
  var jsQR = require('jsqr');
11
+ var walletConnectorCore = require('@dynamic-labs/wallet-connector-core');
12
+ var ethereumCore = require('@dynamic-labs/ethereum-core');
12
13
 
13
14
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
14
15
 
@@ -42,6 +43,7 @@ const GlobalWalletExtension = {
42
43
  let web3wallet$1;
43
44
  let WCListenersOn = false;
44
45
  let pendingSessionProposal;
46
+ let signer = (yield connector.getSigner());
45
47
  const globalWallet = {
46
48
  confirmPairing: (confirm) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
47
49
  const { params, id } = pendingSessionProposal;
@@ -108,16 +110,18 @@ const GlobalWalletExtension = {
108
110
  const { request, chainId } = params;
109
111
  // since we cant listen to chain events from the dapp, just change when a request comes in
110
112
  const [requestParamsMessage, typedDataToSign] = request.params;
111
- const signer = (yield connector.getSigner());
112
113
  const handleRequest = (handler) => _tslib.__awaiter(void 0, void 0, void 0, function* () {
114
+ let response;
113
115
  try {
116
+ // tell wallet ui utils that the transaction is coming from global connectivity
117
+ // so we can force the confirmation ui to be on
114
118
  connector.isGlobalTransaction = true;
115
119
  const result = yield handler();
116
- connector.isGlobalTransaction = false;
117
- return { id, jsonrpc: '2.0', result };
120
+ response = { id, jsonrpc: '2.0', result };
118
121
  }
119
122
  catch (e) {
120
- return {
123
+ walletConnectorCore.logger.error('Error listening to session request', e);
124
+ response = {
121
125
  error: {
122
126
  code: 5000,
123
127
  message: 'User rejected.',
@@ -126,28 +130,51 @@ const GlobalWalletExtension = {
126
130
  jsonrpc: '2.0',
127
131
  };
128
132
  }
133
+ finally {
134
+ connector.isGlobalTransaction = false;
135
+ }
136
+ return response;
129
137
  });
130
138
  let response;
131
- if (request.method === 'eth_signTypedData_v4') {
132
- response = yield handleRequest(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
139
+ const handleEthSignTypedDataV4 = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
140
+ return handleRequest(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
133
141
  return signer.signTypedData(Object.assign(Object.assign({}, JSON.parse(typedDataToSign)), { account: requestParamsMessage }));
134
142
  }));
135
- }
136
- else if (request.method === 'personal_sign') {
143
+ });
144
+ const handlePersonalSign = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
137
145
  const message = Buffer.from(requestParamsMessage.slice(2), 'hex').toString('utf8');
138
- response = yield handleRequest(() => connector.signMessage(message));
139
- }
140
- else if (request.method === 'eth_sendTransaction') {
146
+ return handleRequest(() => connector.signMessage(message));
147
+ });
148
+ const handleEthSendTransaction = () => _tslib.__awaiter(void 0, void 0, void 0, function* () {
141
149
  if (chainId) {
142
150
  yield connector.switchNetwork({
143
151
  networkChainId: chainId.split(':')[1],
144
152
  });
145
153
  }
146
- response = yield handleRequest(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
147
- return signer.sendTransaction(Object.assign(Object.assign({}, requestParamsMessage), { gas: viem.fromHex(requestParamsMessage.gas, 'bigint'), value: requestParamsMessage.value
148
- ? viem.fromHex(requestParamsMessage.value, 'bigint')
149
- : BigInt(0) }));
154
+ // sometimes the signer is undefined at initialization
155
+ if (!signer) {
156
+ signer = (yield connector.getSigner());
157
+ }
158
+ return handleRequest(() => _tslib.__awaiter(void 0, void 0, void 0, function* () {
159
+ const estimatedFeesPerGas = yield (yield connector.getPublicClient()).estimateFeesPerGas();
160
+ const type = (estimatedFeesPerGas === null || estimatedFeesPerGas === void 0 ? void 0 : estimatedFeesPerGas.maxFeePerGas)
161
+ ? 'eip1559'
162
+ : 'legacy';
163
+ return signer.sendTransaction(ethereumCore.unFormatTransaction(Object.assign(Object.assign({}, requestParamsMessage), {
164
+ // strip the gasPrice if it should be a eip1559 tx or tx will fail
165
+ gasPrice: estimatedFeesPerGas && estimatedFeesPerGas.maxFeePerGas
166
+ ? undefined
167
+ : requestParamsMessage.gasPrice, type, value: requestParamsMessage.value })));
150
168
  }));
169
+ });
170
+ if (request.method === 'eth_signTypedData_v4') {
171
+ response = yield handleEthSignTypedDataV4();
172
+ }
173
+ else if (request.method === 'personal_sign') {
174
+ response = yield handlePersonalSign();
175
+ }
176
+ else if (request.method === 'eth_sendTransaction') {
177
+ response = yield handleEthSendTransaction();
151
178
  }
152
179
  if (response) {
153
180
  yield web3wallet$1.respondSessionRequest({
@@ -3,8 +3,9 @@ import { __awaiter } from '../_virtual/_tslib.js';
3
3
  import { Core } from '@walletconnect/core';
4
4
  import { getSdkError, buildApprovedNamespaces } from '@walletconnect/utils';
5
5
  import { Web3Wallet } from '@walletconnect/web3wallet';
6
- import { fromHex } from 'viem';
7
6
  import jsQR from 'jsqr';
7
+ import { logger } from '@dynamic-labs/wallet-connector-core';
8
+ import { unFormatTransaction } from '@dynamic-labs/ethereum-core';
8
9
 
9
10
  /* eslint-disable import/no-extraneous-dependencies */
10
11
  const buildCombinedNamespaces = (params) => {
@@ -34,6 +35,7 @@ const GlobalWalletExtension = {
34
35
  let web3wallet;
35
36
  let WCListenersOn = false;
36
37
  let pendingSessionProposal;
38
+ let signer = (yield connector.getSigner());
37
39
  const globalWallet = {
38
40
  confirmPairing: (confirm) => __awaiter(void 0, void 0, void 0, function* () {
39
41
  const { params, id } = pendingSessionProposal;
@@ -100,16 +102,18 @@ const GlobalWalletExtension = {
100
102
  const { request, chainId } = params;
101
103
  // since we cant listen to chain events from the dapp, just change when a request comes in
102
104
  const [requestParamsMessage, typedDataToSign] = request.params;
103
- const signer = (yield connector.getSigner());
104
105
  const handleRequest = (handler) => __awaiter(void 0, void 0, void 0, function* () {
106
+ let response;
105
107
  try {
108
+ // tell wallet ui utils that the transaction is coming from global connectivity
109
+ // so we can force the confirmation ui to be on
106
110
  connector.isGlobalTransaction = true;
107
111
  const result = yield handler();
108
- connector.isGlobalTransaction = false;
109
- return { id, jsonrpc: '2.0', result };
112
+ response = { id, jsonrpc: '2.0', result };
110
113
  }
111
114
  catch (e) {
112
- return {
115
+ logger.error('Error listening to session request', e);
116
+ response = {
113
117
  error: {
114
118
  code: 5000,
115
119
  message: 'User rejected.',
@@ -118,28 +122,51 @@ const GlobalWalletExtension = {
118
122
  jsonrpc: '2.0',
119
123
  };
120
124
  }
125
+ finally {
126
+ connector.isGlobalTransaction = false;
127
+ }
128
+ return response;
121
129
  });
122
130
  let response;
123
- if (request.method === 'eth_signTypedData_v4') {
124
- response = yield handleRequest(() => __awaiter(void 0, void 0, void 0, function* () {
131
+ const handleEthSignTypedDataV4 = () => __awaiter(void 0, void 0, void 0, function* () {
132
+ return handleRequest(() => __awaiter(void 0, void 0, void 0, function* () {
125
133
  return signer.signTypedData(Object.assign(Object.assign({}, JSON.parse(typedDataToSign)), { account: requestParamsMessage }));
126
134
  }));
127
- }
128
- else if (request.method === 'personal_sign') {
135
+ });
136
+ const handlePersonalSign = () => __awaiter(void 0, void 0, void 0, function* () {
129
137
  const message = Buffer.from(requestParamsMessage.slice(2), 'hex').toString('utf8');
130
- response = yield handleRequest(() => connector.signMessage(message));
131
- }
132
- else if (request.method === 'eth_sendTransaction') {
138
+ return handleRequest(() => connector.signMessage(message));
139
+ });
140
+ const handleEthSendTransaction = () => __awaiter(void 0, void 0, void 0, function* () {
133
141
  if (chainId) {
134
142
  yield connector.switchNetwork({
135
143
  networkChainId: chainId.split(':')[1],
136
144
  });
137
145
  }
138
- response = yield handleRequest(() => __awaiter(void 0, void 0, void 0, function* () {
139
- return signer.sendTransaction(Object.assign(Object.assign({}, requestParamsMessage), { gas: fromHex(requestParamsMessage.gas, 'bigint'), value: requestParamsMessage.value
140
- ? fromHex(requestParamsMessage.value, 'bigint')
141
- : BigInt(0) }));
146
+ // sometimes the signer is undefined at initialization
147
+ if (!signer) {
148
+ signer = (yield connector.getSigner());
149
+ }
150
+ return handleRequest(() => __awaiter(void 0, void 0, void 0, function* () {
151
+ const estimatedFeesPerGas = yield (yield connector.getPublicClient()).estimateFeesPerGas();
152
+ const type = (estimatedFeesPerGas === null || estimatedFeesPerGas === void 0 ? void 0 : estimatedFeesPerGas.maxFeePerGas)
153
+ ? 'eip1559'
154
+ : 'legacy';
155
+ return signer.sendTransaction(unFormatTransaction(Object.assign(Object.assign({}, requestParamsMessage), {
156
+ // strip the gasPrice if it should be a eip1559 tx or tx will fail
157
+ gasPrice: estimatedFeesPerGas && estimatedFeesPerGas.maxFeePerGas
158
+ ? undefined
159
+ : requestParamsMessage.gasPrice, type, value: requestParamsMessage.value })));
142
160
  }));
161
+ });
162
+ if (request.method === 'eth_signTypedData_v4') {
163
+ response = yield handleEthSignTypedDataV4();
164
+ }
165
+ else if (request.method === 'personal_sign') {
166
+ response = yield handlePersonalSign();
167
+ }
168
+ else if (request.method === 'eth_sendTransaction') {
169
+ response = yield handleEthSendTransaction();
143
170
  }
144
171
  if (response) {
145
172
  yield web3wallet.respondSessionRequest({