@0xsequence/provider 0.40.2 → 0.40.5
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 +262 -4
- package/dist/0xsequence-provider.cjs.prod.js +262 -4
- package/dist/0xsequence-provider.esm.js +261 -5
- package/dist/declarations/src/transports/index.d.ts +1 -0
- package/dist/declarations/src/transports/unreal-transport/index.d.ts +2 -0
- package/dist/declarations/src/transports/unreal-transport/overridelogs.d.ts +4 -0
- package/dist/declarations/src/transports/unreal-transport/unreal-message-handler.d.ts +14 -0
- package/dist/declarations/src/transports/unreal-transport/unreal-message-provider.d.ts +15 -0
- package/dist/declarations/src/types.d.ts +1 -1
- package/dist/declarations/src/wallet.d.ts +3 -0
- package/package.json +8 -8
- package/src/transports/index.ts +1 -0
- package/src/transports/unreal-transport/index.ts +2 -0
- package/src/transports/unreal-transport/overridelogs.ts +36 -0
- package/src/transports/unreal-transport/unreal-message-handler.ts +121 -0
- package/src/transports/unreal-transport/unreal-message-provider.ts +121 -0
- package/src/transports/wallet-request-handler.ts +3 -3
- package/src/types.ts +1 -1
- package/src/wallet.ts +20 -4
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { OpenWalletIntent, ProviderMessage, InitState, WindowSessionParams } from '../../types'
|
|
2
|
+
import { BaseProviderTransport } from '../base-provider-transport'
|
|
3
|
+
import { base64EncodeObject } from '@0xsequence/utils'
|
|
4
|
+
import { overrideLogs } from './overridelogs'
|
|
5
|
+
|
|
6
|
+
let registeredUnrealMessageProvider: UnrealMessageProvider | undefined
|
|
7
|
+
|
|
8
|
+
// all lowercase is an annoying limitation of Unreal CEF BindUObject
|
|
9
|
+
interface UnrealInjectedSequenceJSWindow {
|
|
10
|
+
ue?: {
|
|
11
|
+
sequencewallettransport?: {
|
|
12
|
+
onmessagefromwallet?: (message: ProviderMessage<any>) => void
|
|
13
|
+
sendmessagetowallet: (message: string) => void
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
declare const window: Window & typeof globalThis & UnrealInjectedSequenceJSWindow
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Initialized on dApp side
|
|
22
|
+
*/
|
|
23
|
+
export class UnrealMessageProvider extends BaseProviderTransport {
|
|
24
|
+
private walletURL: URL
|
|
25
|
+
|
|
26
|
+
constructor(walletAppURL: string) {
|
|
27
|
+
super()
|
|
28
|
+
this.walletURL = new URL(walletAppURL)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
register = () => {
|
|
32
|
+
overrideLogs('dapp')
|
|
33
|
+
if (registeredUnrealMessageProvider) {
|
|
34
|
+
// overriding the registered message provider
|
|
35
|
+
registeredUnrealMessageProvider.unregister()
|
|
36
|
+
registeredUnrealMessageProvider = this
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// listen for incoming messages from wallet
|
|
40
|
+
if (window.ue?.sequencewallettransport) {
|
|
41
|
+
window.ue.sequencewallettransport.onmessagefromwallet = this.onUnrealCallback
|
|
42
|
+
}
|
|
43
|
+
registeredUnrealMessageProvider = this
|
|
44
|
+
|
|
45
|
+
this._registered = true
|
|
46
|
+
console.log('registering transport!')
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
unregister = () => {
|
|
50
|
+
this._registered = false
|
|
51
|
+
this.closeWallet()
|
|
52
|
+
|
|
53
|
+
// disable message listener
|
|
54
|
+
if (registeredUnrealMessageProvider === this) {
|
|
55
|
+
registeredUnrealMessageProvider = undefined
|
|
56
|
+
}
|
|
57
|
+
if (window.ue?.sequencewallettransport?.onmessagefromwallet === this.onUnrealCallback) {
|
|
58
|
+
delete window.ue.sequencewallettransport.onmessagefromwallet
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// clear event listeners
|
|
62
|
+
this.events.removeAllListeners()
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
openWallet = (path?: string, intent?: OpenWalletIntent, networkId?: string | number): void => {
|
|
66
|
+
if (this.isOpened()) {
|
|
67
|
+
// TODO focus wallet
|
|
68
|
+
console.log('wallet already open!')
|
|
69
|
+
return
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
console.log('opening wallet!')
|
|
73
|
+
// Instantiate new walletURL for this call
|
|
74
|
+
const walletURL = new URL(this.walletURL.href)
|
|
75
|
+
const windowSessionParams = new WindowSessionParams()
|
|
76
|
+
|
|
77
|
+
if (path) {
|
|
78
|
+
walletURL.pathname = path.toLowerCase()
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Set session, intent and network id on walletURL
|
|
82
|
+
this._init = InitState.NIL
|
|
83
|
+
this._sessionId = `${performance.now()}`
|
|
84
|
+
windowSessionParams.set('sid', this._sessionId)
|
|
85
|
+
|
|
86
|
+
if (intent) {
|
|
87
|
+
// encode intent as base64 url-encoded param
|
|
88
|
+
windowSessionParams.set('intent', base64EncodeObject(intent))
|
|
89
|
+
}
|
|
90
|
+
if (networkId) {
|
|
91
|
+
windowSessionParams.set('net', `${networkId}`)
|
|
92
|
+
}
|
|
93
|
+
// serialize params
|
|
94
|
+
walletURL.search = windowSessionParams.toString()
|
|
95
|
+
|
|
96
|
+
console.log('opening wallet to', walletURL.href)
|
|
97
|
+
|
|
98
|
+
window.open(walletURL.href)
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
closeWallet() {
|
|
102
|
+
this.close()
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// onmessage, receives ProviderMessageResponse from the wallet unreal transport
|
|
106
|
+
private onUnrealCallback = (message: ProviderMessage<any>) => {
|
|
107
|
+
if (!message) {
|
|
108
|
+
throw new Error('ProviderMessage object is empty')
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
// handle message with base message provider
|
|
112
|
+
this.handleMessage(message)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// all lowercase is an annoying limitation of Unreal CEF BindUObject
|
|
116
|
+
sendMessage(message: ProviderMessage<unknown>) {
|
|
117
|
+
const postedMessage = typeof message !== 'string' ? JSON.stringify(message) : message
|
|
118
|
+
console.log('Sending message to wallet:', postedMessage)
|
|
119
|
+
window.ue?.sequencewallettransport?.sendmessagetowallet(postedMessage)
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -300,17 +300,17 @@ export class WalletRequestHandler implements ExternalProvider, JsonRpcHandler, P
|
|
|
300
300
|
|
|
301
301
|
// Message must be prefixed with "\x19Ethereum Signed Message:\n"
|
|
302
302
|
// as defined by EIP-191
|
|
303
|
-
|
|
303
|
+
const prefixedMessage = prefixEIP191Message(message)
|
|
304
304
|
|
|
305
305
|
// TODO:
|
|
306
306
|
// if (process.env.TEST_MODE === 'true' && this.prompter === null) {
|
|
307
307
|
if (this.prompter === null) {
|
|
308
308
|
// prompter is null, so we'll sign from here
|
|
309
|
-
sig = await signer.signMessage(
|
|
309
|
+
sig = await signer.signMessage(prefixedMessage, chainId)
|
|
310
310
|
} else {
|
|
311
311
|
const promptResultForDeployment = await this.handleConfirmWalletDeployPrompt(this.prompter, signer, chainId)
|
|
312
312
|
if (promptResultForDeployment) {
|
|
313
|
-
sig = await this.prompter.promptSignMessage({ chainId: chainId, message }, this.connectOptions)
|
|
313
|
+
sig = await this.prompter.promptSignMessage({ chainId: chainId, message: prefixedMessage }, this.connectOptions)
|
|
314
314
|
}
|
|
315
315
|
}
|
|
316
316
|
|
package/src/types.ts
CHANGED
package/src/wallet.ts
CHANGED
|
@@ -19,9 +19,15 @@ import {
|
|
|
19
19
|
} from '@0xsequence/network'
|
|
20
20
|
import { WalletConfig, WalletState } from '@0xsequence/config'
|
|
21
21
|
import { logger } from '@0xsequence/utils'
|
|
22
|
-
import { JsonRpcProvider
|
|
22
|
+
import { JsonRpcProvider } from '@ethersproject/providers'
|
|
23
23
|
import { Web3Provider, Web3Signer } from './provider'
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
MuxMessageProvider,
|
|
26
|
+
WindowMessageProvider,
|
|
27
|
+
ProxyMessageProvider,
|
|
28
|
+
ProxyMessageChannelPort,
|
|
29
|
+
UnrealMessageProvider
|
|
30
|
+
} from './transports'
|
|
25
31
|
import { WalletSession, ProviderEventTypes, ConnectOptions, OpenWalletIntent, ConnectDetails } from './types'
|
|
26
32
|
import { ethers } from 'ethers'
|
|
27
33
|
import { ExtensionMessageProvider } from './transports/extension-transport/extension-message-provider'
|
|
@@ -36,12 +42,12 @@ export interface WalletProvider {
|
|
|
36
42
|
|
|
37
43
|
isConnected(): boolean
|
|
38
44
|
getSession(): WalletSession | undefined
|
|
39
|
-
|
|
45
|
+
|
|
40
46
|
getAddress(): Promise<string>
|
|
41
47
|
getNetworks(chainId?: ChainIdLike): Promise<NetworkConfig[]>
|
|
42
48
|
getChainId(): Promise<number>
|
|
43
49
|
getAuthChainId(): Promise<number>
|
|
44
|
-
|
|
50
|
+
|
|
45
51
|
isOpened(): boolean
|
|
46
52
|
openWallet(path?: string, intent?: OpenWalletIntent, networkId?: string | number): Promise<boolean>
|
|
47
53
|
closeWallet(): void
|
|
@@ -85,6 +91,7 @@ export class Wallet implements WalletProvider {
|
|
|
85
91
|
windowMessageProvider?: WindowMessageProvider
|
|
86
92
|
proxyMessageProvider?: ProxyMessageProvider
|
|
87
93
|
extensionMessageProvider?: ExtensionMessageProvider
|
|
94
|
+
unrealMessageProvider?: UnrealMessageProvider
|
|
88
95
|
}
|
|
89
96
|
|
|
90
97
|
private networks: NetworkConfig[]
|
|
@@ -147,6 +154,10 @@ export class Wallet implements WalletProvider {
|
|
|
147
154
|
//
|
|
148
155
|
// this.transport.messageProvider.add(this.transport.extensionMessageProvider)
|
|
149
156
|
}
|
|
157
|
+
if (this.config.transports?.unrealTransport?.enabled) {
|
|
158
|
+
this.transport.unrealMessageProvider = new UnrealMessageProvider(this.config.walletAppURL)
|
|
159
|
+
this.transport.messageProvider.add(this.transport.unrealMessageProvider)
|
|
160
|
+
}
|
|
150
161
|
this.transport.messageProvider.register()
|
|
151
162
|
|
|
152
163
|
// .....
|
|
@@ -692,6 +703,11 @@ export interface ProviderConfig {
|
|
|
692
703
|
enabled: boolean
|
|
693
704
|
runtime: Runtime.Static
|
|
694
705
|
}
|
|
706
|
+
|
|
707
|
+
// Unreal Engine transport (optional)
|
|
708
|
+
unrealTransport?: {
|
|
709
|
+
enabled: boolean
|
|
710
|
+
}
|
|
695
711
|
}
|
|
696
712
|
|
|
697
713
|
// Sequence Wallet Modules Context override. By default (and recommended), the
|