@0xsequence/provider
Advanced tools
Comparing version 0.9.1 to 0.9.3
# @0xsequence/provider | ||
## 0.9.3 | ||
### Patch Changes | ||
- - minor improvements | ||
- Updated dependencies [undefined] | ||
- @0xsequence/abi@0.9.3 | ||
- @0xsequence/auth@0.9.3 | ||
- @0xsequence/config@0.9.3 | ||
- @0xsequence/network@0.9.3 | ||
- @0xsequence/transactions@0.9.3 | ||
- @0xsequence/utils@0.9.3 | ||
- @0xsequence/wallet@0.9.3 | ||
## 0.9.1 | ||
@@ -4,0 +18,0 @@ |
import EventEmitter from 'eventemitter3'; | ||
import { ProviderTransport, ProviderMessage, ProviderMessageRequest, ProviderMessageEvent, ProviderMessageResponse, ProviderMessageResponseCallback, WalletSession, ConnectionState } from '../types'; | ||
import { NetworkConfig, JsonRpcRequest, JsonRpcResponseCallback } from '@0xsequence/network'; | ||
import { NetworkConfig, WalletContext, JsonRpcRequest, JsonRpcResponseCallback } from '@0xsequence/network'; | ||
export declare const PROVIDER_CONNECT_TIMEOUT = 8000; | ||
@@ -15,4 +15,6 @@ export declare const nextMessageIdx: () => number; | ||
protected networksPayload: NetworkConfig[]; | ||
protected registered: boolean; | ||
protected walletContextPayload: WalletContext; | ||
protected _registered: boolean; | ||
constructor(); | ||
get registered(): boolean; | ||
register(): void; | ||
@@ -19,0 +21,0 @@ unregister(): void; |
import { WalletTransport, ProviderMessage, ProviderMessageRequest, ProviderMessageResponse } from '../types'; | ||
import { WalletRequestHandler } from './wallet-request-handler'; | ||
import { NetworkConfig, JsonRpcRequest, JsonRpcResponseCallback } from '@0xsequence/network'; | ||
import { NetworkConfig, WalletContext, JsonRpcRequest, JsonRpcResponseCallback } from '@0xsequence/network'; | ||
export declare abstract class BaseWalletTransport implements WalletTransport { | ||
protected walletRequestHandler: WalletRequestHandler; | ||
protected _sessionId: string; | ||
protected registered: boolean; | ||
protected _registered: boolean; | ||
constructor(walletRequestHandler: WalletRequestHandler); | ||
get registered(): boolean; | ||
register(): void; | ||
@@ -23,2 +24,3 @@ unregister(): void; | ||
notifyNetworks(networks: NetworkConfig[]): void; | ||
notifyWalletContext(walletContext: WalletContext): void; | ||
} |
@@ -11,3 +11,3 @@ import { ProviderMessageRequest, ProviderMessageResponse, WalletMessageEvent, ProviderMessageRequestHandler, MessageToSign } from '../types'; | ||
private testnetNetworks; | ||
private defaultNetworkId?; | ||
private _defaultNetworkId?; | ||
private events; | ||
@@ -22,3 +22,4 @@ constructor(signer: Signer | null, prompter: WalletUserPrompter | null, mainnetNetworks: Networks, testnetNetworks?: Networks); | ||
getChainId(): Promise<number>; | ||
setDefaultChain(chainId: string | number): Promise<boolean>; | ||
setDefaultNetwork(chainId: string | number): Promise<boolean>; | ||
get defaultNetworkId(): string | number | undefined; | ||
getNetworks(jsonRpcResponse?: boolean): Promise<NetworkConfig[]>; | ||
@@ -28,2 +29,3 @@ notifyLogin(accountAddress: string): void; | ||
notifyNetworks(networks?: NetworkConfig[]): Promise<void>; | ||
notifyWalletContext(): Promise<void>; | ||
getSigner(): Signer | null; | ||
@@ -30,0 +32,0 @@ setSigner(signer: Signer | null): void; |
@@ -1,4 +0,5 @@ | ||
import { NetworkConfig, JsonRpcRequest, JsonRpcResponse, JsonRpcHandler } from '@0xsequence/network'; | ||
import { NetworkConfig, WalletContext, JsonRpcRequest, JsonRpcResponse, JsonRpcHandler } from '@0xsequence/network'; | ||
import { TypedData } from '@0xsequence/utils'; | ||
export interface WalletSession { | ||
walletContext?: WalletContext; | ||
accountAddress?: string; | ||
@@ -54,4 +55,4 @@ networks?: NetworkConfig[]; | ||
} | ||
export declare type WalletMessageEvent = 'chainChanged' | 'accountsChanged' | 'login' | 'logout' | 'networks' | 'debug'; | ||
export declare type ProviderMessageEvent = 'message' | 'connect' | 'disconnect' | 'debug' | WalletMessageEvent; | ||
export declare type WalletMessageEvent = 'chainChanged' | 'accountsChanged' | 'login' | 'logout' | 'networks' | 'walletContext' | '_debug'; | ||
export declare type ProviderMessageEvent = 'message' | 'connect' | 'disconnect' | '_debug' | WalletMessageEvent; | ||
export declare enum ProviderMessageType { | ||
@@ -64,2 +65,3 @@ MESSAGE = "message", | ||
NETWORKS = "networks", | ||
WALLET_CONTEXT = "walletContext", | ||
DEBUG = "_debug" | ||
@@ -66,0 +68,0 @@ } |
@@ -74,3 +74,2 @@ import { NetworkConfig, WalletContext, ChainId } from '@0xsequence/network'; | ||
walletAppURL: string; | ||
walletContext?: WalletContext; | ||
networks?: Partial<NetworkConfig>[]; | ||
@@ -88,3 +87,4 @@ networkRpcUrl?: string; | ||
}; | ||
walletContext?: WalletContext; | ||
} | ||
export declare const DefaultProviderConfig: ProviderConfig; |
{ | ||
"name": "@0xsequence/provider", | ||
"version": "0.9.1", | ||
"version": "0.9.3", | ||
"description": "provider sub-package for Sequence", | ||
@@ -16,9 +16,9 @@ "repository": "https://github.com/0xsequence/sequence.js/tree/master/packages/provider", | ||
"dependencies": { | ||
"@0xsequence/abi": "^0.9.1", | ||
"@0xsequence/auth": "^0.9.1", | ||
"@0xsequence/config": "^0.9.1", | ||
"@0xsequence/network": "^0.9.1", | ||
"@0xsequence/transactions": "^0.9.1", | ||
"@0xsequence/utils": "^0.9.1", | ||
"@0xsequence/wallet": "^0.9.1", | ||
"@0xsequence/abi": "^0.9.3", | ||
"@0xsequence/auth": "^0.9.3", | ||
"@0xsequence/config": "^0.9.3", | ||
"@0xsequence/network": "^0.9.3", | ||
"@0xsequence/transactions": "^0.9.3", | ||
"@0xsequence/utils": "^0.9.3", | ||
"@0xsequence/wallet": "^0.9.3", | ||
"@ethersproject/abstract-signer": "5.0.12", | ||
@@ -29,4 +29,3 @@ "@ethersproject/hash": "^5.0.11", | ||
"ethers": "^5.0.27", | ||
"eventemitter3": "^4.0.7", | ||
"platform": "^1.3.6" | ||
"eventemitter3": "^4.0.7" | ||
}, | ||
@@ -33,0 +32,0 @@ "peerDependencies": {}, |
@@ -10,3 +10,3 @@ import EventEmitter from 'eventemitter3' | ||
import { NetworkConfig, JsonRpcRequest, JsonRpcResponseCallback, JsonRpcResponse } from '@0xsequence/network' | ||
import { NetworkConfig, WalletContext, JsonRpcRequest, JsonRpcResponseCallback, JsonRpcResponse } from '@0xsequence/network' | ||
@@ -31,10 +31,15 @@ export const PROVIDER_CONNECT_TIMEOUT = 8000 // in ms | ||
protected networksPayload: NetworkConfig[] | ||
protected walletContextPayload: WalletContext | ||
protected registered: boolean | ||
protected _registered: boolean | ||
constructor() { | ||
this.connection = ConnectionState.DISCONNECTED | ||
this.registered = false | ||
this._registered = false | ||
} | ||
get registered(): boolean { | ||
return this._registered | ||
} | ||
register() { | ||
@@ -187,2 +192,10 @@ throw new Error('abstract method') | ||
} | ||
// NOTIFY WALLET_CONTEXT -- when a user connects or logs in | ||
if (message.type === ProviderMessageType.WALLET_CONTEXT) { | ||
this.walletContextPayload = message.data | ||
this.events.emit('walletContext', this.walletContextPayload) | ||
return | ||
} | ||
} | ||
@@ -285,6 +298,16 @@ | ||
}) | ||
}), | ||
new Promise<WalletContext>(resolve => { | ||
if (this.walletContextPayload) { | ||
resolve(this.walletContextPayload) | ||
return | ||
} | ||
this.events.once('walletContext', (walletContext) => { | ||
resolve(walletContext) | ||
}) | ||
}) | ||
]).then(values => { | ||
const [ accountAddress, networks ] = values | ||
return { accountAddress, networks } | ||
const [ accountAddress, networks, walletContext ] = values | ||
return { accountAddress, networks, walletContext } | ||
}) | ||
@@ -354,2 +377,3 @@ | ||
this.networksPayload = undefined | ||
this.walletContextPayload = undefined | ||
@@ -356,0 +380,0 @@ this.events.emit('disconnect') |
@@ -9,3 +9,3 @@ import { ethers } from 'ethers' | ||
import { NetworkConfig, JsonRpcRequest, JsonRpcResponseCallback } from '@0xsequence/network' | ||
import { NetworkConfig, WalletContext, JsonRpcRequest, JsonRpcResponseCallback } from '@0xsequence/network' | ||
@@ -16,3 +16,3 @@ export abstract class BaseWalletTransport implements WalletTransport { | ||
protected _sessionId: string | ||
protected registered: boolean | ||
protected _registered: boolean | ||
@@ -39,4 +39,13 @@ constructor(walletRequestHandler: WalletRequestHandler) { | ||
this.walletRequestHandler.on('walletContext', (walletContext: WalletContext) => { | ||
if (!this.registered || !walletContext) return | ||
this.notifyWalletContext(walletContext) | ||
}) | ||
} | ||
get registered(): boolean { | ||
return this._registered | ||
} | ||
register() { | ||
@@ -64,2 +73,5 @@ throw new Error('abstract method') | ||
// notify wallet context | ||
await this.walletRequestHandler.notifyWalletContext() | ||
// notify account and network details depending on state | ||
@@ -79,3 +91,8 @@ const accountAddress = await this.walletRequestHandler.getAddress() | ||
if (defaultNetworkId) { | ||
await this.walletRequestHandler.setDefaultChain(defaultNetworkId) | ||
// sets dapp network on the remote wallet, which will then notify | ||
// the dapp with its networks list | ||
await this.walletRequestHandler.setDefaultNetwork(defaultNetworkId) | ||
} else { | ||
// notify networks list | ||
await this.walletRequestHandler.notifyNetworks() | ||
} | ||
@@ -147,2 +164,10 @@ | ||
notifyWalletContext(walletContext: WalletContext) { | ||
this.sendMessage({ | ||
idx: -1, | ||
type: ProviderMessageType.WALLET_CONTEXT, | ||
data: walletContext | ||
}) | ||
} | ||
} |
@@ -19,3 +19,3 @@ import { BaseWalletTransport } from '../base-wallet-transport' | ||
} | ||
this.registered = true | ||
this._registered = true | ||
} | ||
@@ -25,3 +25,3 @@ | ||
this.port.handleMessage = undefined | ||
this.registered = false | ||
this._registered = false | ||
} | ||
@@ -28,0 +28,0 @@ |
@@ -36,7 +36,7 @@ import { BaseProviderTransport, nextMessageIdx } from '../base-provider-transport' | ||
this.registered = true | ||
this._registered = true | ||
} | ||
unregister = () => { | ||
this.registered = false | ||
this._registered = false | ||
this.closeWallet() | ||
@@ -43,0 +43,0 @@ this.events.removeAllListeners() |
@@ -25,3 +25,3 @@ import EventEmitter from 'eventemitter3' | ||
private defaultNetworkId?: string | number | ||
private _defaultNetworkId?: string | number | ||
@@ -49,5 +49,5 @@ private events: EventEmitter<WalletMessageEvent, any> = new EventEmitter() | ||
} | ||
if (this.defaultNetworkId) { | ||
if (!(await this.setDefaultChain(this.defaultNetworkId))) { | ||
throw new Error(`WalletRequestHandler setup unable to set defaulNetworkId ${this.defaultNetworkId}`) | ||
if (this._defaultNetworkId) { | ||
if (!(await this.setDefaultNetwork(this._defaultNetworkId))) { | ||
throw new Error(`WalletRequestHandler setup unable to set defaulNetworkId ${this._defaultNetworkId}`) | ||
} | ||
@@ -89,3 +89,3 @@ } | ||
// only allow public json rpc method to the provider when user is not logged in, aka signer is not set | ||
if ((!this.signer || this.signer === null) && !publicJsonRpcMethods.includes(request.method)) { | ||
if ((!this.signer || this.signer === null) && !permittedJsonRpcMethods.includes(request.method)) { | ||
throw new Error(`not logged in. ${request.method} is unavailable`) | ||
@@ -382,3 +382,3 @@ } | ||
// set default network of wallet | ||
case 'sequence_setDefaultChain': { | ||
case 'sequence_setDefaultNetwork': { | ||
const [defaultNetworkId] = request.params | ||
@@ -389,3 +389,3 @@ | ||
} | ||
const ok = await this.setDefaultChain(defaultNetworkId) | ||
const ok = await this.setDefaultNetwork(defaultNetworkId) | ||
if (!ok) { | ||
@@ -445,5 +445,5 @@ throw new Error(`unable to set default network ${defaultNetworkId}`) | ||
async setDefaultChain(chainId: string | number): Promise<boolean> { | ||
async setDefaultNetwork(chainId: string | number): Promise<boolean> { | ||
if (!chainId) return | ||
this.defaultNetworkId = chainId | ||
this._defaultNetworkId = chainId | ||
if (this.signer && (<any>this.signer).setNetworks) { | ||
@@ -458,2 +458,6 @@ (<any>this.signer).setNetworks(this.mainnetNetworks, this.testnetNetworks, chainId) | ||
get defaultNetworkId(): string | number | undefined { | ||
return this._defaultNetworkId | ||
} | ||
async getNetworks(jsonRpcResponse?: boolean): Promise<NetworkConfig[]> { | ||
@@ -504,2 +508,11 @@ if (!this.signer) { | ||
async notifyWalletContext() { | ||
if (!this.signer) { | ||
console.warn('signer is not set, skipping to notify wallet context') | ||
return | ||
} | ||
const walletContext = await this.signer.getWalletContext() | ||
this.events.emit('walletContext', walletContext) | ||
} | ||
getSigner(): Signer | null { | ||
@@ -522,3 +535,3 @@ return this.signer | ||
const publicJsonRpcMethods = [ | ||
const permittedJsonRpcMethods = [ | ||
'net_version', 'eth_chainId', 'eth_getBalance', 'eth_getTransactionCount', | ||
@@ -528,3 +541,3 @@ 'eth_blockNumber', 'eth_getBlockByNumber', 'eth_getBlockByHash', 'eth_getTransactionByHash', | ||
'sequence_getWalletContext', 'sequence_getNetworks', 'sequence_setDefaultChain' | ||
'sequence_getWalletContext', 'sequence_getNetworks', 'sequence_setDefaultNetwork' | ||
] |
@@ -34,3 +34,3 @@ import { ProviderMessageRequest, ProviderMessage, ProviderMessageType, ProviderMessageResponse } from '../../types' | ||
window.addEventListener('message', this.onWindowEvent, false) | ||
this.registered = true | ||
this._registered = true | ||
} | ||
@@ -40,3 +40,3 @@ | ||
window.removeEventListener('message', this.onWindowEvent) | ||
this.registered = false | ||
this._registered = false | ||
} | ||
@@ -43,0 +43,0 @@ |
@@ -33,7 +33,7 @@ import { ProviderMessage } from '../../types' | ||
this.registered = true | ||
this._registered = true | ||
} | ||
unregister = () => { | ||
this.registered = false | ||
this._registered = false | ||
this.closeWallet() | ||
@@ -40,0 +40,0 @@ |
@@ -1,2 +0,2 @@ | ||
import { NetworkConfig, JsonRpcRequest, JsonRpcResponse, JsonRpcHandler } from '@0xsequence/network' | ||
import { NetworkConfig, WalletContext, JsonRpcRequest, JsonRpcResponse, JsonRpcHandler } from '@0xsequence/network' | ||
import { TypedData } from '@0xsequence/utils' | ||
@@ -7,2 +7,5 @@ | ||
export interface WalletSession { | ||
// Wallet context | ||
walletContext?: WalletContext | ||
// Account address of the wallet | ||
@@ -76,5 +79,5 @@ accountAddress?: string | ||
export type WalletMessageEvent = 'chainChanged' | 'accountsChanged' | 'login' | 'logout' | 'networks' | 'debug' | ||
export type WalletMessageEvent = 'chainChanged' | 'accountsChanged' | 'login' | 'logout' | 'networks' | 'walletContext' | '_debug' | ||
export type ProviderMessageEvent = 'message' | 'connect' | 'disconnect' | 'debug' | WalletMessageEvent | ||
export type ProviderMessageEvent = 'message' | 'connect' | 'disconnect' | '_debug' | WalletMessageEvent | ||
@@ -88,2 +91,3 @@ export enum ProviderMessageType { | ||
NETWORKS = 'networks', | ||
WALLET_CONTEXT = 'walletContext', | ||
@@ -90,0 +94,0 @@ DEBUG = '_debug' |
@@ -113,3 +113,3 @@ import { Networks, NetworkConfig, WalletContext, sequenceContext, ChainId, getNetworkId, JsonRpcSender, | ||
this.transport.allowProvider = allowProviderMiddleware((request: JsonRpcRequest): boolean => { | ||
if (request.method === 'sequence_setDefaultChain') return true | ||
if (request.method === 'sequence_setDefaultNetwork') return true | ||
@@ -166,2 +166,7 @@ const isLoggedIn = this.isLoggedIn() | ||
// below will update the wallet context automatically | ||
this.transport.messageProvider.on('walletContext', (walletContext: WalletContext) => { | ||
this.useSession({ walletContext: walletContext }, true) | ||
}) | ||
// Load existing session from localStorage | ||
@@ -316,3 +321,3 @@ const session = this.loadSession() | ||
exceptionProviderMiddleware, | ||
new EagerProvider(this.session.accountAddress), | ||
new EagerProvider({ accountAddress: this.session.accountAddress, walletContext: this.session.walletContext }), | ||
new SigningProvider(this.transport.provider), | ||
@@ -330,3 +335,3 @@ this.transport.cachedProvider, | ||
exceptionProviderMiddleware, | ||
new EagerProvider(this.session.accountAddress, network.chainId), | ||
new EagerProvider({ accountAddress: this.session.accountAddress, walletContext: this.session.walletContext, chainId: network.chainId }), | ||
new SigningProvider(this.transport.provider), | ||
@@ -409,2 +414,9 @@ new CachedProvider(network.chainId), | ||
// setup wallet context | ||
if (this.config.walletContext) { | ||
this.session.walletContext = this.config.walletContext | ||
} else { | ||
this.session.walletContext = session.walletContext | ||
} | ||
// setup account | ||
@@ -441,5 +453,5 @@ if (session.accountAddress) { | ||
// confirm default network is set correctly | ||
if (this.config.defaultNetworkId) { | ||
if (this.config.defaultNetworkId && networks && networks.length > 0) { | ||
if (!checkNetworkConfig(networks[0], this.config.defaultNetworkId)) { | ||
throw new Error(`expecting defaultNetworkId ${this.config.defaultNetworkId} but is set to ${networks[0]}`) | ||
throw new Error(`expecting defaultNetworkId '${this.config.defaultNetworkId}' but is set to '${networks[0].name}'`) | ||
} | ||
@@ -451,2 +463,7 @@ } | ||
// short-circuit if setting empty network list (aka logged out state) | ||
if (!this.session.networks || this.session.networks.length === 0) { | ||
return | ||
} | ||
// check if any custom network settings, otherwise return early | ||
@@ -488,6 +505,2 @@ if (!this.config.networks && !this.config.networkRpcUrl) { | ||
// Sequence Wallet Modules Context override. By default (and recommended), the | ||
// WalletContext is returned by the wallet app upon login. | ||
walletContext?: WalletContext | ||
// networks is a configuration list of networks used by the wallet. This list | ||
@@ -521,2 +534,9 @@ // is combined with the network list supplied from the wallet upon login, | ||
} | ||
// Sequence Wallet Modules Context override. By default (and recommended), the | ||
// WalletContext used the one returned by the wallet app upon login. | ||
// | ||
// NOTE: do not use this option unless you know what you're doing | ||
walletContext?: WalletContext | ||
} | ||
@@ -523,0 +543,0 @@ |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
365888
13
9002
- Removedplatform@^1.3.6
- Removedplatform@1.3.6(transitive)
Updated@0xsequence/abi@^0.9.3
Updated@0xsequence/auth@^0.9.3
Updated@0xsequence/config@^0.9.3
Updated@0xsequence/network@^0.9.3
Updated@0xsequence/utils@^0.9.3
Updated@0xsequence/wallet@^0.9.3