@0xsequence/provider 1.0.1 → 1.0.3
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/dist/0xsequence-provider.cjs.dev.js +16 -49
- package/dist/0xsequence-provider.cjs.prod.js +16 -49
- package/dist/0xsequence-provider.esm.js +16 -51
- package/dist/declarations/src/utils.d.ts +4 -6
- package/package.json +10 -10
- package/src/utils/index.ts +2 -2
- package/src/utils.ts +25 -49
|
@@ -586,57 +586,22 @@ const trimEIP191Prefix = prefixedMessage => {
|
|
|
586
586
|
const prefixRevertedMessage = ethereumSignedMessagePartSlicedArray.slice(prefixCharLenght);
|
|
587
587
|
return prefixRevertedMessage;
|
|
588
588
|
};
|
|
589
|
-
const isValidSignature = async (address, digest, sig, provider
|
|
590
|
-
const reader = new core.commons.reader.OnChainReader(provider
|
|
589
|
+
const isValidSignature = async (address, digest, sig, provider) => {
|
|
590
|
+
const reader = new core.commons.reader.OnChainReader(provider);
|
|
591
591
|
return reader.isValidSignature(address, digest, sig);
|
|
592
592
|
};
|
|
593
593
|
|
|
594
|
-
//
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
// walletContext?: WalletContext
|
|
601
|
-
// ): Promise<boolean> => {
|
|
602
|
-
// const prefixed = prefixEIP191Message(message)
|
|
603
|
-
// const digest = encodeMessageDigest(prefixed)
|
|
604
|
-
// return isValidSignature(address, digest, signature, provider, chainId, walletContext)
|
|
605
|
-
// }
|
|
606
|
-
|
|
607
|
-
// export const isValidTypedDataSignature = (
|
|
608
|
-
// address: string,
|
|
609
|
-
// typedData: TypedData,
|
|
610
|
-
// signature: string,
|
|
611
|
-
// provider: Web3Provider | ethers.providers.Web3Provider,
|
|
612
|
-
// chainId?: number,
|
|
613
|
-
// walletContext?: WalletContext
|
|
614
|
-
// ): Promise<boolean> => {
|
|
615
|
-
// return isValidSignature(address, encodeTypedDataDigest(typedData), signature, provider, chainId, walletContext)
|
|
616
|
-
// }
|
|
617
|
-
|
|
618
|
-
// export const recoverWalletConfig = async (
|
|
619
|
-
// address: string,
|
|
620
|
-
// digest: BytesLike,
|
|
621
|
-
// signature: string | commons.signature.UnrecoveredSignature | commons.signature.Signature<commons.config.Config>,
|
|
622
|
-
// chainId: BigNumberish,
|
|
623
|
-
// walletContext?: WalletContext
|
|
624
|
-
// ): Promise<commons.config.Config> => {
|
|
625
|
-
// const subDigest = packMessageData(address, chainId, digest)
|
|
626
|
-
// const config = await recoverConfig(subDigest, signature)
|
|
627
|
-
|
|
628
|
-
// if (walletContext) {
|
|
629
|
-
// const recoveredWalletAddress = addressOf(config, walletContext)
|
|
630
|
-
// if (config.address && config.address !== recoveredWalletAddress) {
|
|
631
|
-
// throw new Error('recovered address does not match the WalletConfig address, check the WalletContext')
|
|
632
|
-
// } else {
|
|
633
|
-
// config.address = recoveredWalletAddress
|
|
634
|
-
// }
|
|
635
|
-
// }
|
|
636
|
-
|
|
637
|
-
// return config
|
|
638
|
-
// }
|
|
594
|
+
// Verify message signature
|
|
595
|
+
const isValidMessageSignature = async (address, message, signature, provider) => {
|
|
596
|
+
const prefixed = prefixEIP191Message(message);
|
|
597
|
+
const digest = utils.encodeMessageDigest(prefixed);
|
|
598
|
+
return isValidSignature(address, digest, signature, provider);
|
|
599
|
+
};
|
|
639
600
|
|
|
601
|
+
// Verify typedData signature
|
|
602
|
+
const isValidTypedDataSignature = (address, typedData, signature, provider) => {
|
|
603
|
+
return isValidSignature(address, utils.encodeTypedDataDigest(typedData), signature, provider);
|
|
604
|
+
};
|
|
640
605
|
const isBrowserExtension = () => window.location.protocol === 'chrome-extension:' || window.location.protocol === 'moz-extension:';
|
|
641
606
|
const isUnityPlugin = () => !!navigator.userAgent.match(/UnitySequence/i);
|
|
642
607
|
|
|
@@ -3270,7 +3235,7 @@ class WalletUtils {
|
|
|
3270
3235
|
async isValidSignature(address, digest, signature, chainId) {
|
|
3271
3236
|
const provider = this.wallet.getProvider(chainId);
|
|
3272
3237
|
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`);
|
|
3273
|
-
return isValidSignature(address, digest, signature, provider
|
|
3238
|
+
return isValidSignature(address, digest, signature, provider);
|
|
3274
3239
|
}
|
|
3275
3240
|
|
|
3276
3241
|
// Verify message signature
|
|
@@ -3279,7 +3244,7 @@ class WalletUtils {
|
|
|
3279
3244
|
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`);
|
|
3280
3245
|
const prefixed = prefixEIP191Message(message);
|
|
3281
3246
|
const digest = utils.encodeMessageDigest(prefixed);
|
|
3282
|
-
return isValidSignature(address, digest, signature, provider
|
|
3247
|
+
return isValidSignature(address, digest, signature, provider);
|
|
3283
3248
|
}
|
|
3284
3249
|
|
|
3285
3250
|
// Verify typedData signature
|
|
@@ -3924,7 +3889,9 @@ exports.initWallet = initWallet;
|
|
|
3924
3889
|
exports.isBrowserExtension = isBrowserExtension;
|
|
3925
3890
|
exports.isSequenceProvider = isSequenceProvider;
|
|
3926
3891
|
exports.isUnityPlugin = isUnityPlugin;
|
|
3892
|
+
exports.isValidMessageSignature = isValidMessageSignature;
|
|
3927
3893
|
exports.isValidSignature = isValidSignature;
|
|
3894
|
+
exports.isValidTypedDataSignature = isValidTypedDataSignature;
|
|
3928
3895
|
exports.isWalletUpToDate = isWalletUpToDate;
|
|
3929
3896
|
exports.messageToBytes = messageToBytes;
|
|
3930
3897
|
exports.nextMessageIdx = nextMessageIdx;
|
|
@@ -586,57 +586,22 @@ const trimEIP191Prefix = prefixedMessage => {
|
|
|
586
586
|
const prefixRevertedMessage = ethereumSignedMessagePartSlicedArray.slice(prefixCharLenght);
|
|
587
587
|
return prefixRevertedMessage;
|
|
588
588
|
};
|
|
589
|
-
const isValidSignature = async (address, digest, sig, provider
|
|
590
|
-
const reader = new core.commons.reader.OnChainReader(provider
|
|
589
|
+
const isValidSignature = async (address, digest, sig, provider) => {
|
|
590
|
+
const reader = new core.commons.reader.OnChainReader(provider);
|
|
591
591
|
return reader.isValidSignature(address, digest, sig);
|
|
592
592
|
};
|
|
593
593
|
|
|
594
|
-
//
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
// walletContext?: WalletContext
|
|
601
|
-
// ): Promise<boolean> => {
|
|
602
|
-
// const prefixed = prefixEIP191Message(message)
|
|
603
|
-
// const digest = encodeMessageDigest(prefixed)
|
|
604
|
-
// return isValidSignature(address, digest, signature, provider, chainId, walletContext)
|
|
605
|
-
// }
|
|
606
|
-
|
|
607
|
-
// export const isValidTypedDataSignature = (
|
|
608
|
-
// address: string,
|
|
609
|
-
// typedData: TypedData,
|
|
610
|
-
// signature: string,
|
|
611
|
-
// provider: Web3Provider | ethers.providers.Web3Provider,
|
|
612
|
-
// chainId?: number,
|
|
613
|
-
// walletContext?: WalletContext
|
|
614
|
-
// ): Promise<boolean> => {
|
|
615
|
-
// return isValidSignature(address, encodeTypedDataDigest(typedData), signature, provider, chainId, walletContext)
|
|
616
|
-
// }
|
|
617
|
-
|
|
618
|
-
// export const recoverWalletConfig = async (
|
|
619
|
-
// address: string,
|
|
620
|
-
// digest: BytesLike,
|
|
621
|
-
// signature: string | commons.signature.UnrecoveredSignature | commons.signature.Signature<commons.config.Config>,
|
|
622
|
-
// chainId: BigNumberish,
|
|
623
|
-
// walletContext?: WalletContext
|
|
624
|
-
// ): Promise<commons.config.Config> => {
|
|
625
|
-
// const subDigest = packMessageData(address, chainId, digest)
|
|
626
|
-
// const config = await recoverConfig(subDigest, signature)
|
|
627
|
-
|
|
628
|
-
// if (walletContext) {
|
|
629
|
-
// const recoveredWalletAddress = addressOf(config, walletContext)
|
|
630
|
-
// if (config.address && config.address !== recoveredWalletAddress) {
|
|
631
|
-
// throw new Error('recovered address does not match the WalletConfig address, check the WalletContext')
|
|
632
|
-
// } else {
|
|
633
|
-
// config.address = recoveredWalletAddress
|
|
634
|
-
// }
|
|
635
|
-
// }
|
|
636
|
-
|
|
637
|
-
// return config
|
|
638
|
-
// }
|
|
594
|
+
// Verify message signature
|
|
595
|
+
const isValidMessageSignature = async (address, message, signature, provider) => {
|
|
596
|
+
const prefixed = prefixEIP191Message(message);
|
|
597
|
+
const digest = utils.encodeMessageDigest(prefixed);
|
|
598
|
+
return isValidSignature(address, digest, signature, provider);
|
|
599
|
+
};
|
|
639
600
|
|
|
601
|
+
// Verify typedData signature
|
|
602
|
+
const isValidTypedDataSignature = (address, typedData, signature, provider) => {
|
|
603
|
+
return isValidSignature(address, utils.encodeTypedDataDigest(typedData), signature, provider);
|
|
604
|
+
};
|
|
640
605
|
const isBrowserExtension = () => window.location.protocol === 'chrome-extension:' || window.location.protocol === 'moz-extension:';
|
|
641
606
|
const isUnityPlugin = () => !!navigator.userAgent.match(/UnitySequence/i);
|
|
642
607
|
|
|
@@ -3270,7 +3235,7 @@ class WalletUtils {
|
|
|
3270
3235
|
async isValidSignature(address, digest, signature, chainId) {
|
|
3271
3236
|
const provider = this.wallet.getProvider(chainId);
|
|
3272
3237
|
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`);
|
|
3273
|
-
return isValidSignature(address, digest, signature, provider
|
|
3238
|
+
return isValidSignature(address, digest, signature, provider);
|
|
3274
3239
|
}
|
|
3275
3240
|
|
|
3276
3241
|
// Verify message signature
|
|
@@ -3279,7 +3244,7 @@ class WalletUtils {
|
|
|
3279
3244
|
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`);
|
|
3280
3245
|
const prefixed = prefixEIP191Message(message);
|
|
3281
3246
|
const digest = utils.encodeMessageDigest(prefixed);
|
|
3282
|
-
return isValidSignature(address, digest, signature, provider
|
|
3247
|
+
return isValidSignature(address, digest, signature, provider);
|
|
3283
3248
|
}
|
|
3284
3249
|
|
|
3285
3250
|
// Verify typedData signature
|
|
@@ -3924,7 +3889,9 @@ exports.initWallet = initWallet;
|
|
|
3924
3889
|
exports.isBrowserExtension = isBrowserExtension;
|
|
3925
3890
|
exports.isSequenceProvider = isSequenceProvider;
|
|
3926
3891
|
exports.isUnityPlugin = isUnityPlugin;
|
|
3892
|
+
exports.isValidMessageSignature = isValidMessageSignature;
|
|
3927
3893
|
exports.isValidSignature = isValidSignature;
|
|
3894
|
+
exports.isValidTypedDataSignature = isValidTypedDataSignature;
|
|
3928
3895
|
exports.isWalletUpToDate = isWalletUpToDate;
|
|
3929
3896
|
exports.messageToBytes = messageToBytes;
|
|
3930
3897
|
exports.nextMessageIdx = nextMessageIdx;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EventEmitter2 } from 'eventemitter2';
|
|
2
|
-
import { logger, sanitizeNumberString, sanitizeHost, sanitizeAlphanumeric, base64EncodeObject, base64DecodeObject, shallowCopy, resolveProperties,
|
|
2
|
+
import { logger, encodeMessageDigest, encodeTypedDataDigest, sanitizeNumberString, sanitizeHost, sanitizeAlphanumeric, base64EncodeObject, base64DecodeObject, shallowCopy, resolveProperties, getDefaultConnectionInfo } from '@0xsequence/utils';
|
|
3
3
|
import { ethers, BigNumber, providers } from 'ethers';
|
|
4
4
|
import { commons, universal } from '@0xsequence/core';
|
|
5
5
|
import { signAuthorization } from '@0xsequence/auth';
|
|
@@ -582,57 +582,22 @@ const trimEIP191Prefix = prefixedMessage => {
|
|
|
582
582
|
const prefixRevertedMessage = ethereumSignedMessagePartSlicedArray.slice(prefixCharLenght);
|
|
583
583
|
return prefixRevertedMessage;
|
|
584
584
|
};
|
|
585
|
-
const isValidSignature = async (address, digest, sig, provider
|
|
586
|
-
const reader = new commons.reader.OnChainReader(provider
|
|
585
|
+
const isValidSignature = async (address, digest, sig, provider) => {
|
|
586
|
+
const reader = new commons.reader.OnChainReader(provider);
|
|
587
587
|
return reader.isValidSignature(address, digest, sig);
|
|
588
588
|
};
|
|
589
589
|
|
|
590
|
-
//
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
// walletContext?: WalletContext
|
|
597
|
-
// ): Promise<boolean> => {
|
|
598
|
-
// const prefixed = prefixEIP191Message(message)
|
|
599
|
-
// const digest = encodeMessageDigest(prefixed)
|
|
600
|
-
// return isValidSignature(address, digest, signature, provider, chainId, walletContext)
|
|
601
|
-
// }
|
|
602
|
-
|
|
603
|
-
// export const isValidTypedDataSignature = (
|
|
604
|
-
// address: string,
|
|
605
|
-
// typedData: TypedData,
|
|
606
|
-
// signature: string,
|
|
607
|
-
// provider: Web3Provider | ethers.providers.Web3Provider,
|
|
608
|
-
// chainId?: number,
|
|
609
|
-
// walletContext?: WalletContext
|
|
610
|
-
// ): Promise<boolean> => {
|
|
611
|
-
// return isValidSignature(address, encodeTypedDataDigest(typedData), signature, provider, chainId, walletContext)
|
|
612
|
-
// }
|
|
613
|
-
|
|
614
|
-
// export const recoverWalletConfig = async (
|
|
615
|
-
// address: string,
|
|
616
|
-
// digest: BytesLike,
|
|
617
|
-
// signature: string | commons.signature.UnrecoveredSignature | commons.signature.Signature<commons.config.Config>,
|
|
618
|
-
// chainId: BigNumberish,
|
|
619
|
-
// walletContext?: WalletContext
|
|
620
|
-
// ): Promise<commons.config.Config> => {
|
|
621
|
-
// const subDigest = packMessageData(address, chainId, digest)
|
|
622
|
-
// const config = await recoverConfig(subDigest, signature)
|
|
623
|
-
|
|
624
|
-
// if (walletContext) {
|
|
625
|
-
// const recoveredWalletAddress = addressOf(config, walletContext)
|
|
626
|
-
// if (config.address && config.address !== recoveredWalletAddress) {
|
|
627
|
-
// throw new Error('recovered address does not match the WalletConfig address, check the WalletContext')
|
|
628
|
-
// } else {
|
|
629
|
-
// config.address = recoveredWalletAddress
|
|
630
|
-
// }
|
|
631
|
-
// }
|
|
632
|
-
|
|
633
|
-
// return config
|
|
634
|
-
// }
|
|
590
|
+
// Verify message signature
|
|
591
|
+
const isValidMessageSignature = async (address, message, signature, provider) => {
|
|
592
|
+
const prefixed = prefixEIP191Message(message);
|
|
593
|
+
const digest = encodeMessageDigest(prefixed);
|
|
594
|
+
return isValidSignature(address, digest, signature, provider);
|
|
595
|
+
};
|
|
635
596
|
|
|
597
|
+
// Verify typedData signature
|
|
598
|
+
const isValidTypedDataSignature = (address, typedData, signature, provider) => {
|
|
599
|
+
return isValidSignature(address, encodeTypedDataDigest(typedData), signature, provider);
|
|
600
|
+
};
|
|
636
601
|
const isBrowserExtension = () => window.location.protocol === 'chrome-extension:' || window.location.protocol === 'moz-extension:';
|
|
637
602
|
const isUnityPlugin = () => !!navigator.userAgent.match(/UnitySequence/i);
|
|
638
603
|
|
|
@@ -3266,7 +3231,7 @@ class WalletUtils {
|
|
|
3266
3231
|
async isValidSignature(address, digest, signature, chainId) {
|
|
3267
3232
|
const provider = this.wallet.getProvider(chainId);
|
|
3268
3233
|
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`);
|
|
3269
|
-
return isValidSignature(address, digest, signature, provider
|
|
3234
|
+
return isValidSignature(address, digest, signature, provider);
|
|
3270
3235
|
}
|
|
3271
3236
|
|
|
3272
3237
|
// Verify message signature
|
|
@@ -3275,7 +3240,7 @@ class WalletUtils {
|
|
|
3275
3240
|
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`);
|
|
3276
3241
|
const prefixed = prefixEIP191Message(message);
|
|
3277
3242
|
const digest = encodeMessageDigest(prefixed);
|
|
3278
|
-
return isValidSignature(address, digest, signature, provider
|
|
3243
|
+
return isValidSignature(address, digest, signature, provider);
|
|
3279
3244
|
}
|
|
3280
3245
|
|
|
3281
3246
|
// Verify typedData signature
|
|
@@ -3884,4 +3849,4 @@ const getWallet = () => {
|
|
|
3884
3849
|
return walletInstance;
|
|
3885
3850
|
};
|
|
3886
3851
|
|
|
3887
|
-
export { BaseInjectedTransport, BaseProviderTransport, BaseWalletTransport, CHANNEL_ID, DefaultProviderConfig, ErrSignedInRequired, EventType, ExtensionMessageHandler, ExtensionMessageProvider, InitState, LocalStorage, LocalStore, LocalWeb3Provider, MuxMessageProvider, OpenState, PROVIDER_OPEN_TIMEOUT, ProviderError, ProxyMessageChannel, ProxyMessageChannelPort, ProxyMessageHandler, ProxyMessageProvider, SESSION_LOCALSTORE_KEY, UnrealMessageHandler, UnrealMessageProvider, Wallet, WalletRequestHandler, Web3Provider, Web3Signer, WindowMessageHandler, WindowMessageProvider, WindowSessionParams, getWallet, initWallet, isBrowserExtension, isSequenceProvider, isUnityPlugin, isValidSignature, isWalletUpToDate, messageToBytes, nextMessageIdx, prefixEIP191Message, trimEIP191Prefix, unregisterWallet };
|
|
3852
|
+
export { BaseInjectedTransport, BaseProviderTransport, BaseWalletTransport, CHANNEL_ID, DefaultProviderConfig, ErrSignedInRequired, EventType, ExtensionMessageHandler, ExtensionMessageProvider, InitState, LocalStorage, LocalStore, LocalWeb3Provider, MuxMessageProvider, OpenState, PROVIDER_OPEN_TIMEOUT, ProviderError, ProxyMessageChannel, ProxyMessageChannelPort, ProxyMessageHandler, ProxyMessageProvider, SESSION_LOCALSTORE_KEY, UnrealMessageHandler, UnrealMessageProvider, Wallet, WalletRequestHandler, Web3Provider, Web3Signer, WindowMessageHandler, WindowMessageProvider, WindowSessionParams, getWallet, initWallet, isBrowserExtension, isSequenceProvider, isUnityPlugin, isValidMessageSignature, isValidSignature, isValidTypedDataSignature, isWalletUpToDate, messageToBytes, nextMessageIdx, prefixEIP191Message, trimEIP191Prefix, unregisterWallet };
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
|
|
2
1
|
import { ethers, BytesLike } from 'ethers';
|
|
3
|
-
import { Web3Provider } from './provider';
|
|
4
2
|
import { AccountStatus } from '@0xsequence/account';
|
|
5
|
-
import {
|
|
3
|
+
import { TypedData } from '@0xsequence/utils';
|
|
6
4
|
export declare const messageToBytes: (message: BytesLike) => Uint8Array;
|
|
7
5
|
export declare const prefixEIP191Message: (message: BytesLike) => Uint8Array;
|
|
8
6
|
export declare const trimEIP191Prefix: (prefixedMessage: Uint8Array) => Uint8Array;
|
|
9
|
-
export declare const isValidSignature: (address: string, digest: Uint8Array, sig: string, provider:
|
|
10
|
-
|
|
11
|
-
|
|
7
|
+
export declare const isValidSignature: (address: string, digest: Uint8Array, sig: string, provider: ethers.providers.Provider) => Promise<boolean>;
|
|
8
|
+
export declare const isValidMessageSignature: (address: string, message: string | Uint8Array, signature: string, provider: ethers.providers.Provider) => Promise<boolean>;
|
|
9
|
+
export declare const isValidTypedDataSignature: (address: string, typedData: TypedData, signature: string, provider: ethers.providers.Provider) => Promise<boolean>;
|
|
12
10
|
export declare const isBrowserExtension: () => boolean;
|
|
13
11
|
export declare const isUnityPlugin: () => boolean;
|
|
14
12
|
export declare const isWalletUpToDate: (status: AccountStatus) => boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@0xsequence/provider",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "provider sub-package for Sequence",
|
|
5
5
|
"repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/provider",
|
|
6
6
|
"source": "src/index.ts",
|
|
@@ -11,15 +11,15 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"eventemitter2": "^6.4.5",
|
|
13
13
|
"webextension-polyfill": "^0.10.0",
|
|
14
|
-
"@0xsequence/abi": "1.0.
|
|
15
|
-
"@0xsequence/
|
|
16
|
-
"@0xsequence/
|
|
17
|
-
"@0xsequence/
|
|
18
|
-
"@0xsequence/
|
|
19
|
-
"@0xsequence/
|
|
20
|
-
"@0xsequence/
|
|
21
|
-
"@0xsequence/utils": "1.0.
|
|
22
|
-
"@0xsequence/wallet": "1.0.
|
|
14
|
+
"@0xsequence/abi": "1.0.3",
|
|
15
|
+
"@0xsequence/auth": "1.0.3",
|
|
16
|
+
"@0xsequence/migration": "1.0.3",
|
|
17
|
+
"@0xsequence/network": "1.0.3",
|
|
18
|
+
"@0xsequence/account": "1.0.3",
|
|
19
|
+
"@0xsequence/relayer": "1.0.3",
|
|
20
|
+
"@0xsequence/core": "1.0.3",
|
|
21
|
+
"@0xsequence/utils": "1.0.3",
|
|
22
|
+
"@0xsequence/wallet": "1.0.3"
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"ethers": ">=5.5 < 6"
|
package/src/utils/index.ts
CHANGED
|
@@ -59,7 +59,7 @@ export class WalletUtils {
|
|
|
59
59
|
): Promise<boolean> {
|
|
60
60
|
const provider = this.wallet.getProvider(chainId)
|
|
61
61
|
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`)
|
|
62
|
-
return isValidSignature(address, digest, signature, provider
|
|
62
|
+
return isValidSignature(address, digest, signature, provider)
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
// Verify message signature
|
|
@@ -73,7 +73,7 @@ export class WalletUtils {
|
|
|
73
73
|
if (!provider) throw new Error(`unable to get provider for chainId ${chainId}`)
|
|
74
74
|
const prefixed = prefixEIP191Message(message)
|
|
75
75
|
const digest = encodeMessageDigest(prefixed)
|
|
76
|
-
return isValidSignature(address, digest, signature, provider
|
|
76
|
+
return isValidSignature(address, digest, signature, provider)
|
|
77
77
|
}
|
|
78
78
|
|
|
79
79
|
// Verify typedData signature
|
package/src/utils.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { ethers, BytesLike } from 'ethers'
|
|
2
|
-
import { Web3Provider } from './provider'
|
|
3
2
|
import { messageIsExemptFromEIP191Prefix } from './eip191exceptions'
|
|
4
3
|
import { AccountStatus } from '@0xsequence/account'
|
|
5
4
|
import { commons } from '@0xsequence/core'
|
|
5
|
+
import { encodeMessageDigest, TypedData, encodeTypedDataDigest } from '@0xsequence/utils'
|
|
6
6
|
|
|
7
7
|
const eip191prefix = ethers.utils.toUtf8Bytes('\x19Ethereum Signed Message:\n')
|
|
8
8
|
|
|
@@ -67,58 +67,34 @@ export const isValidSignature = async (
|
|
|
67
67
|
address: string,
|
|
68
68
|
digest: Uint8Array,
|
|
69
69
|
sig: string,
|
|
70
|
-
provider:
|
|
71
|
-
contexts: { [key: number]: commons.context.WalletContext }
|
|
70
|
+
provider: ethers.providers.Provider
|
|
72
71
|
): Promise<boolean> => {
|
|
73
|
-
const reader = new commons.reader.OnChainReader(provider
|
|
72
|
+
const reader = new commons.reader.OnChainReader(provider)
|
|
74
73
|
return reader.isValidSignature(address, digest, sig)
|
|
75
74
|
}
|
|
76
75
|
|
|
77
|
-
//
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
// }
|
|
100
|
-
|
|
101
|
-
// export const recoverWalletConfig = async (
|
|
102
|
-
// address: string,
|
|
103
|
-
// digest: BytesLike,
|
|
104
|
-
// signature: string | commons.signature.UnrecoveredSignature | commons.signature.Signature<commons.config.Config>,
|
|
105
|
-
// chainId: BigNumberish,
|
|
106
|
-
// walletContext?: WalletContext
|
|
107
|
-
// ): Promise<commons.config.Config> => {
|
|
108
|
-
// const subDigest = packMessageData(address, chainId, digest)
|
|
109
|
-
// const config = await recoverConfig(subDigest, signature)
|
|
110
|
-
|
|
111
|
-
// if (walletContext) {
|
|
112
|
-
// const recoveredWalletAddress = addressOf(config, walletContext)
|
|
113
|
-
// if (config.address && config.address !== recoveredWalletAddress) {
|
|
114
|
-
// throw new Error('recovered address does not match the WalletConfig address, check the WalletContext')
|
|
115
|
-
// } else {
|
|
116
|
-
// config.address = recoveredWalletAddress
|
|
117
|
-
// }
|
|
118
|
-
// }
|
|
119
|
-
|
|
120
|
-
// return config
|
|
121
|
-
// }
|
|
76
|
+
// Verify message signature
|
|
77
|
+
export const isValidMessageSignature = async (
|
|
78
|
+
address: string,
|
|
79
|
+
message: string | Uint8Array,
|
|
80
|
+
signature: string,
|
|
81
|
+
provider: ethers.providers.Provider
|
|
82
|
+
): Promise<boolean> => {
|
|
83
|
+
const prefixed = prefixEIP191Message(message)
|
|
84
|
+
const digest = encodeMessageDigest(prefixed)
|
|
85
|
+
return isValidSignature(address, digest, signature, provider)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Verify typedData signature
|
|
89
|
+
export const isValidTypedDataSignature = (
|
|
90
|
+
address: string,
|
|
91
|
+
typedData: TypedData,
|
|
92
|
+
signature: string,
|
|
93
|
+
provider: ethers.providers.Provider
|
|
94
|
+
): Promise<boolean> => {
|
|
95
|
+
return isValidSignature(address, encodeTypedDataDigest(typedData), signature, provider)
|
|
96
|
+
}
|
|
97
|
+
|
|
122
98
|
|
|
123
99
|
export const isBrowserExtension = (): boolean =>
|
|
124
100
|
window.location.protocol === 'chrome-extension:' || window.location.protocol === 'moz-extension:'
|