@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 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
+ ```
@@ -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
@@ -0,0 +1,3 @@
1
+ export * from './enum'
2
+ export * from './type'
3
+ export * from './getMultichainWallet'
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
@@ -0,0 +1,3 @@
1
+ {
2
+ "extends": "../../tsconfig.json"
3
+ }