@binance/w3w-multichain-connector 1.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/README.md +44 -0
- package/dist/index.d.ts +96 -0
- package/dist/index.mjs +2 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +16 -0
- package/src/enum.ts +25 -0
- package/src/getMultichainWallet.ts +33 -0
- package/src/index.ts +3 -0
- package/src/type.ts +77 -0
- package/tsconfig.json +3 -0
package/README.md
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# @binance/w3w-multichain-connector
|
|
2
|
+
|
|
3
|
+
The `@binance/w3w-multichain-connector` package provides a wrapper for the `Binance Wallet` extension multichain connector
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @binance/w3w-multichain-connector
|
|
9
|
+
# or
|
|
10
|
+
npm install @binance/w3w-multichain-connector
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
### Importing
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { getMultichainWallet } from '@binance/w3w-multichain-connector'
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### Call methods
|
|
22
|
+
|
|
23
|
+
```ts
|
|
24
|
+
const wallet = getMultichainWallet()
|
|
25
|
+
const connectedWallets = await wallet.requestConnect(['56', 'CT_501'])
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Handle events
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
const wallet = getMultichainWallet()
|
|
32
|
+
wallet.on('walletLockedChanged', (isLocked) => {
|
|
33
|
+
console.log('Wallet is locked', isLocked)
|
|
34
|
+
})
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Check extension support features
|
|
38
|
+
|
|
39
|
+
```ts
|
|
40
|
+
import { checkExtensionSupported, Features } from '@binance/w3w-multichain-connector'
|
|
41
|
+
|
|
42
|
+
const isSupported = checkExtensionSupported(Features.requestConnect)
|
|
43
|
+
|
|
44
|
+
```
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import EventEmitter from 'eventemitter3';
|
|
2
|
+
|
|
3
|
+
declare const enum ChainType {
|
|
4
|
+
EVM = "EVM",
|
|
5
|
+
SOL = "SOL"
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* privateKey:私钥钱包
|
|
9
|
+
* hd: 助记词钱包
|
|
10
|
+
*/
|
|
11
|
+
declare const enum WalletType {
|
|
12
|
+
privateKey = "privateKey",
|
|
13
|
+
seedPhrase = "hd"
|
|
14
|
+
}
|
|
15
|
+
declare const enum Features {
|
|
16
|
+
requestConnect = "requestConnect",
|
|
17
|
+
checkConnectedWallet = "checkConnectedWallet",
|
|
18
|
+
disconnect = "disconnect",
|
|
19
|
+
switchChain = "switchChain",
|
|
20
|
+
requestAutoSign = "requestAutoSign",
|
|
21
|
+
eventWalletLockedChanged = "eventWalletLockedChanged",
|
|
22
|
+
eventAutoSignEnabledChanged = "eventAutoSignEnabledChanged",
|
|
23
|
+
eventConnectedWalletsChanged = "eventConnectedWalletsChanged",
|
|
24
|
+
eventConnectedChainIdChanged = "eventConnectedChainIdChanged"
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* 链接的钱包
|
|
29
|
+
*/
|
|
30
|
+
interface IConnectedWallet {
|
|
31
|
+
/**
|
|
32
|
+
* base64编码的钱包图标
|
|
33
|
+
*/
|
|
34
|
+
walletIcon: string;
|
|
35
|
+
walletName: string;
|
|
36
|
+
walletId: string;
|
|
37
|
+
walletType: WalletType;
|
|
38
|
+
addressList: {
|
|
39
|
+
address: string;
|
|
40
|
+
chainType: ChainType;
|
|
41
|
+
}[];
|
|
42
|
+
}
|
|
43
|
+
interface WalletEvents {
|
|
44
|
+
walletLockedChanged: (isLocked: boolean) => void;
|
|
45
|
+
autoSignEnabledChanged: (isEnabled: boolean) => void;
|
|
46
|
+
connectedWalletsChanged: (connectedWallets: IConnectedWallet[]) => void;
|
|
47
|
+
connectedChainIdChanged: (binanceChainId: string) => void;
|
|
48
|
+
}
|
|
49
|
+
interface IWallet extends EventEmitter<WalletEvents> {
|
|
50
|
+
/**
|
|
51
|
+
* 弹出连接请求
|
|
52
|
+
* 若已链接,则直接返回已连接的钱包
|
|
53
|
+
* 用户的当前活跃钱包会出现在数组的第一个
|
|
54
|
+
* 若用户拒绝,会报4001用户拒绝
|
|
55
|
+
* @param binanceChainIds 请求链接网络的binanceChainId
|
|
56
|
+
*/
|
|
57
|
+
requestConnect(binanceChainIds: string[]): Promise<IConnectedWallet[]>;
|
|
58
|
+
/**
|
|
59
|
+
* 检查当前连接的钱包
|
|
60
|
+
* 用户的当前活跃钱包会出现在数组的第一个
|
|
61
|
+
*/
|
|
62
|
+
checkConnectedWallet(): Promise<IConnectedWallet[]>;
|
|
63
|
+
/**
|
|
64
|
+
* 断开所有连接的钱包
|
|
65
|
+
*/
|
|
66
|
+
disconnect(): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* 切换网络,若当前活跃钱包不支持该网络,会报4001用户拒绝
|
|
69
|
+
* @param binanceChainId 请求网络的binanceChainId
|
|
70
|
+
*/
|
|
71
|
+
switchChain(binanceChainId: string): Promise<void>;
|
|
72
|
+
/**
|
|
73
|
+
* 弹出自动签名的请求弹窗
|
|
74
|
+
* 若已链接,则直接返回
|
|
75
|
+
*/
|
|
76
|
+
requestAutoSign(): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* 插件当前版本
|
|
79
|
+
*/
|
|
80
|
+
version: string;
|
|
81
|
+
/**
|
|
82
|
+
* 是否启用自动签名
|
|
83
|
+
*/
|
|
84
|
+
autoSignEnabled: boolean;
|
|
85
|
+
walletLocked: boolean;
|
|
86
|
+
extensionId: string;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
declare const checkExtensionInstalled: () => boolean;
|
|
90
|
+
/**
|
|
91
|
+
* 检查当前用户安装的插件是否支持
|
|
92
|
+
*/
|
|
93
|
+
declare const checkExtensionSupported: (feature: Features) => any;
|
|
94
|
+
declare const getMultichainWallet: () => IWallet;
|
|
95
|
+
|
|
96
|
+
export { ChainType, Features, IConnectedWallet, IWallet, WalletEvents, WalletType, checkExtensionInstalled, checkExtensionSupported, getMultichainWallet };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var r=(n=>(n.EVM="EVM",n.SOL="SOL",n))(r||{}),l=(n=>(n.privateKey="privateKey",n.seedPhrase="hd",n))(l||{}),a=(e=>(e.requestConnect="requestConnect",e.checkConnectedWallet="checkConnectedWallet",e.disconnect="disconnect",e.switchChain="switchChain",e.requestAutoSign="requestAutoSign",e.eventWalletLockedChanged="eventWalletLockedChanged",e.eventAutoSignEnabledChanged="eventAutoSignEnabledChanged",e.eventConnectedWalletsChanged="eventConnectedWalletsChanged",e.eventConnectedChainIdChanged="eventConnectedChainIdChanged",e))(a||{});var d=()=>{try{return!!window?.binancew3w?.isExtension}catch{return!1}},s=t=>{let o=c();return o?o.checkSupportFeature(t):!1},c=()=>d()?window.binancew3w?.wallet:null,h=()=>c();export{r as ChainType,a as Features,l as WalletType,d as checkExtensionInstalled,s as checkExtensionSupported,h as getMultichainWallet};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/enum.ts","../src/getMultichainWallet.ts"],"sourcesContent":["export const enum ChainType {\n EVM = 'EVM',\n SOL = 'SOL',\n}\n\n/**\n * privateKey:私钥钱包\n * hd: 助记词钱包\n */\nexport const enum WalletType {\n privateKey = 'privateKey',\n seedPhrase = 'hd',\n}\n\nexport const enum Features {\n requestConnect = 'requestConnect',\n checkConnectedWallet = 'checkConnectedWallet',\n disconnect = 'disconnect',\n switchChain = 'switchChain',\n requestAutoSign = 'requestAutoSign',\n eventWalletLockedChanged = 'eventWalletLockedChanged',\n eventAutoSignEnabledChanged = 'eventAutoSignEnabledChanged',\n eventConnectedWalletsChanged = 'eventConnectedWalletsChanged',\n eventConnectedChainIdChanged = 'eventConnectedChainIdChanged',\n}\n","import { Features } from './enum'\nimport type { IWallet } from './type'\n\nexport const checkExtensionInstalled = () => {\n try {\n return !!(window as any)?.binancew3w?.isExtension\n } catch (error) {\n return false\n }\n}\n\n/**\n * 检查当前用户安装的插件是否支持\n */\nexport const checkExtensionSupported = (feature: Features) => {\n const wallet = getInjectedWallet()\n if (!wallet) {\n return false\n }\n return wallet.checkSupportFeature(feature)\n}\n\nconst getInjectedWallet = () => {\n const isInstalled = checkExtensionInstalled()\n if (!isInstalled) {\n return null\n }\n return (window as any).binancew3w?.wallet\n}\n\nexport const getMultichainWallet = (): IWallet => {\n return getInjectedWallet()\n}\n"],"mappings":"AAAO,IAAWA,OAChBA,EAAA,IAAM,MACNA,EAAA,IAAM,MAFUA,OAAA,IASAC,OAChBA,EAAA,WAAa,aACbA,EAAA,WAAa,KAFGA,OAAA,IAKAC,OAChBA,EAAA,eAAiB,iBACjBA,EAAA,qBAAuB,uBACvBA,EAAA,WAAa,aACbA,EAAA,YAAc,cACdA,EAAA,gBAAkB,kBAClBA,EAAA,yBAA2B,2BAC3BA,EAAA,4BAA8B,8BAC9BA,EAAA,6BAA+B,+BAC/BA,EAAA,6BAA+B,+BATfA,OAAA,ICXX,IAAMC,EAA0B,IAAM,CAC3C,GAAI,CACF,MAAO,CAAC,CAAE,QAAgB,YAAY,WACxC,MAAE,CACA,MAAO,EACT,CACF,EAKaC,EAA2BC,GAAsB,CAC5D,IAAMC,EAASC,EAAkB,EACjC,OAAKD,EAGEA,EAAO,oBAAoBD,CAAO,EAFhC,EAGX,EAEME,EAAoB,IACJJ,EAAwB,EAIpC,OAAe,YAAY,OAF1B,KAKEK,EAAsB,IAC1BD,EAAkB","names":["ChainType","WalletType","Features","checkExtensionInstalled","checkExtensionSupported","feature","wallet","getInjectedWallet","getMultichainWallet"]}
|
package/package.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@binance/w3w-multichain-connector",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A multichain connector for Binance Wallet",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"keywords": [],
|
|
8
|
+
"author": "Binance",
|
|
9
|
+
"license": "ISC",
|
|
10
|
+
"dependencies": {
|
|
11
|
+
"eventemitter3": "^5.0.1"
|
|
12
|
+
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsup ./src/index.ts --dts"
|
|
15
|
+
}
|
|
16
|
+
}
|
package/src/enum.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export const enum ChainType {
|
|
2
|
+
EVM = 'EVM',
|
|
3
|
+
SOL = 'SOL',
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* privateKey:私钥钱包
|
|
8
|
+
* hd: 助记词钱包
|
|
9
|
+
*/
|
|
10
|
+
export const enum WalletType {
|
|
11
|
+
privateKey = 'privateKey',
|
|
12
|
+
seedPhrase = 'hd',
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const enum Features {
|
|
16
|
+
requestConnect = 'requestConnect',
|
|
17
|
+
checkConnectedWallet = 'checkConnectedWallet',
|
|
18
|
+
disconnect = 'disconnect',
|
|
19
|
+
switchChain = 'switchChain',
|
|
20
|
+
requestAutoSign = 'requestAutoSign',
|
|
21
|
+
eventWalletLockedChanged = 'eventWalletLockedChanged',
|
|
22
|
+
eventAutoSignEnabledChanged = 'eventAutoSignEnabledChanged',
|
|
23
|
+
eventConnectedWalletsChanged = 'eventConnectedWalletsChanged',
|
|
24
|
+
eventConnectedChainIdChanged = 'eventConnectedChainIdChanged',
|
|
25
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Features } from './enum'
|
|
2
|
+
import type { IWallet } from './type'
|
|
3
|
+
|
|
4
|
+
export const checkExtensionInstalled = () => {
|
|
5
|
+
try {
|
|
6
|
+
return !!(window as any)?.binancew3w?.isExtension
|
|
7
|
+
} catch (error) {
|
|
8
|
+
return false
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* 检查当前用户安装的插件是否支持
|
|
14
|
+
*/
|
|
15
|
+
export const checkExtensionSupported = (feature: Features) => {
|
|
16
|
+
const wallet = getInjectedWallet()
|
|
17
|
+
if (!wallet) {
|
|
18
|
+
return false
|
|
19
|
+
}
|
|
20
|
+
return wallet.checkSupportFeature(feature)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const getInjectedWallet = () => {
|
|
24
|
+
const isInstalled = checkExtensionInstalled()
|
|
25
|
+
if (!isInstalled) {
|
|
26
|
+
return null
|
|
27
|
+
}
|
|
28
|
+
return (window as any).binancew3w?.wallet
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const getMultichainWallet = (): IWallet => {
|
|
32
|
+
return getInjectedWallet()
|
|
33
|
+
}
|
package/src/index.ts
ADDED
package/src/type.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import type EventEmitter from 'eventemitter3'
|
|
2
|
+
|
|
3
|
+
import type { ChainType, Features, WalletType } from './enum'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* 链接的钱包
|
|
7
|
+
*/
|
|
8
|
+
export interface IConnectedWallet {
|
|
9
|
+
/**
|
|
10
|
+
* base64编码的钱包图标
|
|
11
|
+
*/
|
|
12
|
+
walletIcon: string
|
|
13
|
+
|
|
14
|
+
walletName: string
|
|
15
|
+
|
|
16
|
+
walletId: string
|
|
17
|
+
|
|
18
|
+
walletType: WalletType
|
|
19
|
+
|
|
20
|
+
addressList: {
|
|
21
|
+
address: string
|
|
22
|
+
chainType: ChainType
|
|
23
|
+
}[]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface WalletEvents {
|
|
27
|
+
walletLockedChanged: (isLocked: boolean) => void
|
|
28
|
+
autoSignEnabledChanged: (isEnabled: boolean) => void
|
|
29
|
+
connectedWalletsChanged: (connectedWallets: IConnectedWallet[]) => void
|
|
30
|
+
connectedChainIdChanged: (binanceChainId: string) => void
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export interface IWallet extends EventEmitter<WalletEvents> {
|
|
34
|
+
/**
|
|
35
|
+
* 弹出连接请求
|
|
36
|
+
* 若已链接,则直接返回已连接的钱包
|
|
37
|
+
* 用户的当前活跃钱包会出现在数组的第一个
|
|
38
|
+
* 若用户拒绝,会报4001用户拒绝
|
|
39
|
+
* @param binanceChainIds 请求链接网络的binanceChainId
|
|
40
|
+
*/
|
|
41
|
+
requestConnect(binanceChainIds: string[]): Promise<IConnectedWallet[]>
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* 检查当前连接的钱包
|
|
45
|
+
* 用户的当前活跃钱包会出现在数组的第一个
|
|
46
|
+
*/
|
|
47
|
+
checkConnectedWallet(): Promise<IConnectedWallet[]>
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* 断开所有连接的钱包
|
|
51
|
+
*/
|
|
52
|
+
disconnect(): Promise<void>
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* 切换网络,若当前活跃钱包不支持该网络,会报4001用户拒绝
|
|
56
|
+
* @param binanceChainId 请求网络的binanceChainId
|
|
57
|
+
*/
|
|
58
|
+
switchChain(binanceChainId: string): Promise<void>
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 弹出自动签名的请求弹窗
|
|
62
|
+
* 若已链接,则直接返回
|
|
63
|
+
*/
|
|
64
|
+
requestAutoSign(): Promise<void>
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* 插件当前版本
|
|
68
|
+
*/
|
|
69
|
+
version: string
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* 是否启用自动签名
|
|
73
|
+
*/
|
|
74
|
+
autoSignEnabled: boolean
|
|
75
|
+
walletLocked: boolean
|
|
76
|
+
extensionId: string
|
|
77
|
+
}
|
package/tsconfig.json
ADDED