@haneullabs/walletconnect-wallet 1.1.30 → 1.1.35
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/CHANGELOG.md +17 -0
- package/dist/wallet/index.d.mts.map +1 -1
- package/dist/wallet/index.mjs +11 -3
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +5 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
# @mysten/walletconnect-wallet
|
|
2
2
|
|
|
3
|
+
## 1.1.35
|
|
4
|
+
|
|
5
|
+
## 1.1.34
|
|
6
|
+
|
|
7
|
+
## 1.1.33
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- f85f551: Wait for WalletConnect initialization, including retries, before connecting to prevent
|
|
12
|
+
automatic reconnection from throwing. Silent reconnection without an existing Sui session now
|
|
13
|
+
returns no accounts without starting a new connection, and empty account lookup results are
|
|
14
|
+
handled safely.
|
|
15
|
+
|
|
16
|
+
## 1.1.32
|
|
17
|
+
|
|
18
|
+
## 1.1.31
|
|
19
|
+
|
|
3
20
|
## 1.1.30
|
|
4
21
|
|
|
5
22
|
## 1.1.29
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/wallet/index.ts"],"mappings":";;;;KA8CK;KAEO,aAAa,SAAS,qBAAqB;KAClD,iBAAiB,mBAAmB;cAK5B;cAmBP,wCAAoB;;;;;;cAsBb,+BAA+B;;
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/wallet/index.ts"],"mappings":";;;;KA8CK;KAEO,aAAa,SAAS,qBAAqB;KAClD,iBAAiB,mBAAmB;cAK5B;cAmBP,wCAAoB;;;;;;cAsBb,+BAA+B;;MAWvC;MAIA;MAIA;MAIA;MAIA;MAIA,YAAQ;MAIR,YAAY,yBACf,4BACA,wBACA,+BACA,mCACA;EA6BD,cACC,UACA,WACA;IAEA,UAAU;IACV;IACA,WAAW;;EAYZ,QAAI;EAmMJ,eAAe,UAAU;;KAKrB;EACJ;EACA,WAAW;EACX,WAAW;;iBAGI,8BACf,WACA,WACA,YACE;;EAGqB"}
|
package/dist/wallet/index.mjs
CHANGED
|
@@ -50,6 +50,7 @@ var WalletConnectWallet = class {
|
|
|
50
50
|
#walletName;
|
|
51
51
|
#icon;
|
|
52
52
|
#connector;
|
|
53
|
+
#initialization;
|
|
53
54
|
#projectId;
|
|
54
55
|
#getClient;
|
|
55
56
|
get name() {
|
|
@@ -106,9 +107,14 @@ var WalletConnectWallet = class {
|
|
|
106
107
|
this.#icon = icon;
|
|
107
108
|
this.#projectId = projectId;
|
|
108
109
|
this.#getClient = getClient;
|
|
109
|
-
this.init();
|
|
110
|
+
this.#initialization = this.init();
|
|
110
111
|
}
|
|
111
|
-
|
|
112
|
+
init() {
|
|
113
|
+
this.#initialization = this.#initialize();
|
|
114
|
+
this.#initialization.catch(() => {});
|
|
115
|
+
return this.#initialization;
|
|
116
|
+
}
|
|
117
|
+
async #initialize() {
|
|
112
118
|
this.#connector = await UniversalConnector.init({
|
|
113
119
|
projectId: this.#projectId,
|
|
114
120
|
metadata: {
|
|
@@ -194,15 +200,17 @@ var WalletConnectWallet = class {
|
|
|
194
200
|
#getAccounts = async () => {
|
|
195
201
|
let accounts = JSON.parse(this.#connector?.provider?.session?.sessionProperties?.["haneul_getAccounts"] ?? "[]");
|
|
196
202
|
if (!accounts?.length) accounts = await this.#connector?.request({ method: "haneul_getAccounts" }, "haneul:mainnet");
|
|
197
|
-
return toStandardAccounts(accounts, this.chains);
|
|
203
|
+
return toStandardAccounts(accounts ?? [], this.chains);
|
|
198
204
|
};
|
|
199
205
|
#connect = async (input) => {
|
|
206
|
+
await this.#initialization;
|
|
200
207
|
if (input?.silent) {
|
|
201
208
|
const accounts = await this.#getPreviouslyAuthorizedAccounts();
|
|
202
209
|
if (accounts.length > 0) {
|
|
203
210
|
this.#setAccounts(accounts);
|
|
204
211
|
return { accounts };
|
|
205
212
|
}
|
|
213
|
+
if (!this.#connector?.provider?.session?.namespaces?.haneul) return { accounts: [] };
|
|
206
214
|
}
|
|
207
215
|
if (!this.#connector?.provider?.session?.namespaces?.haneul) await this.#connector?.connect();
|
|
208
216
|
const accounts = await this.#getAccounts();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["#walletName","#id","#icon","#accounts","#connect","#disconnect","#on","#signTransaction","#signPersonalMessage","#signAndExecuteTransaction","#events","#projectId","#getClient","#connector","#getPreviouslyAuthorizedAccounts","#setAccounts","#getAccounts"],"sources":["../../src/wallet/index.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, toBase64 } from '@haneullabs/haneul/utils';\nimport type {\n\tIdentifierArray,\n\tStandardConnectFeature,\n\tStandardConnectMethod,\n\tStandardDisconnectFeature,\n\tStandardDisconnectMethod,\n\tStandardEventsFeature,\n\tStandardEventsListeners,\n\tStandardEventsOnMethod,\n\tHaneulSignAndExecuteTransactionFeature,\n\tHaneulSignAndExecuteTransactionMethod,\n\tHaneulSignPersonalMessageFeature,\n\tHaneulSignPersonalMessageMethod,\n\tHaneulSignTransactionFeature,\n\tHaneulSignTransactionMethod,\n\tWallet,\n\tWalletIcon,\n} from '@haneullabs/wallet-standard';\nimport {\n\tgetWallets,\n\tReadonlyWalletAccount,\n\tStandardConnect,\n\tStandardDisconnect,\n\tStandardEvents,\n\tHANEUL_CHAINS,\n\tHaneulSignAndExecuteTransaction,\n\tHaneulSignPersonalMessage,\n\tHaneulSignTransaction,\n} from '@haneullabs/wallet-standard';\nimport { mitt, type Emitter } from '@haneullabs/utils';\nimport type { InferOutput } from 'valibot';\nimport { boolean, object, string } from 'valibot';\nimport type { CustomCaipNetwork } from '@reown/appkit-universal-connector';\nimport { UniversalConnector } from '@reown/appkit-universal-connector';\nimport type { ClientWithCoreApi } from '@haneullabs/haneul/client';\nimport { Transaction } from '@haneullabs/haneul/transactions';\n\n// -- Types --\ntype WalletEventsMap = {\n\t[E in keyof StandardEventsListeners]: Parameters<StandardEventsListeners[E]>[0];\n};\n\ntype SupportedNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n\nexport type GetClient = (network: SupportedNetwork) => ClientWithCoreApi;\ntype WalletMetadata = InferOutput<typeof WalletMetadataSchema>;\n\n// -- Constants --\nconst icon =\n\t'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzE0MTQxNCIgcj0iMTk5LjUiIHN0cm9rZT0iIzNiNDA0MCIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODcgNS42MDg1LTIuMDg3IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+';\nexport const WALLETCONNECT_WALLET_NAME = 'WalletConnect' as const;\nconst walletAccountFeatures = [\n\t'haneul:signTransaction',\n\t'haneul:signAndExecuteTransaction',\n\t'haneul:signPersonalMessage',\n] as const;\n\nconst HaneulCaipNetworks = HANEUL_CHAINS.map((chain) => {\n\tconst [_, chainId] = chain.split(':');\n\treturn {\n\t\tid: chainId,\n\t\tchainNamespace: 'haneul',\n\t\tcaipNetworkId: `haneul:${chainId}`,\n\t\tname: `Haneul ${chainId}`,\n\t\tnativeCurrency: { name: 'HANEUL', symbol: 'HANEUL', decimals: 9 },\n\t\trpcUrls: { default: { http: [`https://haneul-${chainId}.gateway.tatum.io`] } },\n\t} as unknown as CustomCaipNetwork;\n});\n\nconst WalletMetadataSchema = object({\n\tid: string('Wallet ID is required'),\n\twalletName: string('Wallet name is required'),\n\ticon: string('Icon must be a valid wallet icon format'),\n\tenabled: boolean('Enabled is required'),\n});\n\nconst toStandardAccounts = (\n\taccounts: { address: string; pubkey: string }[],\n\tchains: IdentifierArray,\n) => {\n\treturn accounts.map((account) => {\n\t\treturn new ReadonlyWalletAccount({\n\t\t\taddress: account.address,\n\t\t\tchains,\n\t\t\tfeatures: walletAccountFeatures,\n\t\t\tpublicKey: fromBase64(account.pubkey),\n\t\t});\n\t});\n};\n\n// -- Wallet --\nexport class WalletConnectWallet implements Wallet {\n\t#id: string;\n\t#events: Emitter<WalletEventsMap>;\n\t#accounts: ReadonlyWalletAccount[];\n\t#walletName: string;\n\t#icon: WalletIcon;\n\t#connector?: UniversalConnector;\n\t#projectId: string;\n\t#getClient: GetClient;\n\n\tget name() {\n\t\treturn this.#walletName;\n\t}\n\n\tget id() {\n\t\treturn this.#id;\n\t}\n\n\tget icon() {\n\t\treturn this.#icon;\n\t}\n\n\tget version() {\n\t\treturn '1.0.0' as const;\n\t}\n\n\tget chains() {\n\t\treturn HANEUL_CHAINS;\n\t}\n\n\tget accounts() {\n\t\treturn this.#accounts;\n\t}\n\n\tget features(): StandardConnectFeature &\n\t\tStandardDisconnectFeature &\n\t\tStandardEventsFeature &\n\t\tHaneulSignTransactionFeature &\n\t\tHaneulSignPersonalMessageFeature &\n\t\tHaneulSignAndExecuteTransactionFeature {\n\t\treturn {\n\t\t\t[StandardConnect]: {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tconnect: this.#connect,\n\t\t\t},\n\t\t\t[StandardDisconnect]: {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tdisconnect: this.#disconnect,\n\t\t\t},\n\t\t\t[StandardEvents]: {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\ton: this.#on,\n\t\t\t},\n\t\t\t[HaneulSignTransaction]: {\n\t\t\t\tversion: '2.0.0',\n\t\t\t\tsignTransaction: this.#signTransaction,\n\t\t\t},\n\t\t\t[HaneulSignPersonalMessage]: {\n\t\t\t\tversion: '1.1.0',\n\t\t\t\tsignPersonalMessage: this.#signPersonalMessage,\n\t\t\t},\n\t\t\t[HaneulSignAndExecuteTransaction]: {\n\t\t\t\tversion: '2.0.0',\n\t\t\t\tsignAndExecuteTransaction: this.#signAndExecuteTransaction,\n\t\t\t},\n\t\t};\n\t}\n\n\tconstructor({\n\t\tmetadata,\n\t\tprojectId,\n\t\tgetClient,\n\t}: {\n\t\tmetadata: WalletMetadata;\n\t\tprojectId: string;\n\t\tgetClient: GetClient;\n\t}) {\n\t\tthis.#id = metadata.id;\n\t\tthis.#accounts = [];\n\t\tthis.#events = mitt();\n\t\tthis.#walletName = metadata.walletName;\n\t\tthis.#icon = icon;\n\t\tthis.#projectId = projectId;\n\t\tthis.#getClient = getClient;\n\t\tthis.init();\n\t}\n\n\tasync init() {\n\t\tthis.#connector = await UniversalConnector.init({\n\t\t\tprojectId: this.#projectId,\n\n\t\t\t// TODO: Use dapp metadata\n\t\t\tmetadata: {\n\t\t\t\tname: this.#walletName,\n\t\t\t\tdescription: 'WalletConnect',\n\t\t\t\turl: 'https://walletconnect.org',\n\t\t\t\ticons: [this.#icon],\n\t\t\t},\n\t\t\tnetworks: [\n\t\t\t\t{\n\t\t\t\t\tnamespace: 'haneul',\n\t\t\t\t\tmethods: [\n\t\t\t\t\t\t'haneul_signTransaction',\n\t\t\t\t\t\t'haneul_signPersonalMessage',\n\t\t\t\t\t\t'haneul_signAndExecuteTransaction',\n\t\t\t\t\t\t'haneul_getAccounts',\n\t\t\t\t\t],\n\t\t\t\t\tevents: ['chainChanged', 'accountsChanged'],\n\t\t\t\t\tchains: HaneulCaipNetworks,\n\t\t\t\t},\n\t\t\t],\n\t\t\tmodalConfig: {\n\t\t\t\tthemeVariables: {\n\t\t\t\t\t'--w3m-z-index': 2147483647,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\tthis.#accounts = await this.#getPreviouslyAuthorizedAccounts();\n\t}\n\n\t#signTransaction: HaneulSignTransactionMethod = async ({ transaction, account, chain }) => {\n\t\tconst tx = await transaction.toJSON();\n\n\t\tconst response = (await this.#connector?.request(\n\t\t\t{\n\t\t\t\tmethod: 'haneul_signTransaction',\n\t\t\t\tparams: {\n\t\t\t\t\ttransaction: tx,\n\t\t\t\t\taddress: account.address,\n\t\t\t\t},\n\t\t\t},\n\t\t\tchain,\n\t\t)) as { transactionBytes: string; signature: string };\n\n\t\treturn {\n\t\t\tbytes: response.transactionBytes,\n\t\t\tsignature: response.signature,\n\t\t};\n\t};\n\n\t#signAndExecuteTransaction: HaneulSignAndExecuteTransactionMethod = async ({\n\t\ttransaction,\n\t\taccount,\n\t\tchain,\n\t}) => {\n\t\tconst [, network] = chain.split(':');\n\t\tconst client = this.#getClient(network as SupportedNetwork);\n\t\tconst data = await transaction.toJSON();\n\t\tconst parsedTransaction = Transaction.from(data);\n\t\tconst bytes = await parsedTransaction.build({ client });\n\t\tconst response = (await this.#connector?.request(\n\t\t\t{\n\t\t\t\tmethod: 'haneul_signAndExecuteTransaction',\n\t\t\t\tparams: {\n\t\t\t\t\ttransaction: data,\n\t\t\t\t\taddress: account.address,\n\t\t\t\t},\n\t\t\t},\n\t\t\tchain,\n\t\t)) as { digest: string };\n\n\t\tconst tx = await client.core.waitForTransaction({\n\t\t\tdigest: response.digest,\n\t\t\tinclude: { effects: true },\n\t\t});\n\n\t\tconst result = tx.Transaction ?? tx.FailedTransaction;\n\n\t\treturn {\n\t\t\tdigest: response.digest,\n\t\t\tsignature: result.signatures[0] ?? '',\n\t\t\tbytes: toBase64(bytes),\n\t\t\teffects: result.effects?.bcs ? toBase64(result.effects.bcs) : '',\n\t\t};\n\t};\n\n\t#signPersonalMessage: HaneulSignPersonalMessageMethod = async ({ message, account, chain }) => {\n\t\tconst messageString = new TextDecoder().decode(message);\n\t\tconst response = (await this.#connector?.request(\n\t\t\t{\n\t\t\t\tmethod: 'haneul_signPersonalMessage',\n\t\t\t\tparams: {\n\t\t\t\t\tmessage: messageString,\n\t\t\t\t\taddress: account.address,\n\t\t\t\t},\n\t\t\t},\n\t\t\tchain ?? 'haneul:mainnet',\n\t\t)) as { signature: string };\n\n\t\treturn {\n\t\t\tsignature: response.signature,\n\t\t\tbytes: toBase64(message),\n\t\t};\n\t};\n\n\t#on: StandardEventsOnMethod = (event, listener) => {\n\t\tthis.#events.on(event, listener);\n\t\treturn () => this.#events.off(event, listener);\n\t};\n\n\t#setAccounts(accounts: ReadonlyWalletAccount[]) {\n\t\tthis.#accounts = accounts;\n\t\tthis.#events.emit('change', { accounts: this.accounts });\n\t}\n\n\t#getAccounts = async () => {\n\t\tlet accounts: { address: string; pubkey: string }[] | undefined = JSON.parse(\n\t\t\tthis.#connector?.provider?.session?.sessionProperties?.['haneul_getAccounts'] ?? '[]',\n\t\t);\n\n\t\tif (!accounts?.length) {\n\t\t\taccounts = (await this.#connector?.request({ method: 'haneul_getAccounts' }, 'haneul:mainnet')) as {\n\t\t\t\taddress: string;\n\t\t\t\tpubkey: string;\n\t\t\t}[];\n\t\t}\n\n\t\treturn toStandardAccounts(accounts, this.chains);\n\t};\n\n\t#connect: StandardConnectMethod = async (input) => {\n\t\tif (input?.silent) {\n\t\t\tconst accounts = await this.#getPreviouslyAuthorizedAccounts();\n\t\t\tif (accounts.length > 0) {\n\t\t\t\tthis.#setAccounts(accounts);\n\t\t\t\treturn { accounts };\n\t\t\t}\n\t\t}\n\n\t\tif (!this.#connector?.provider?.session?.namespaces?.haneul) {\n\t\t\tawait this.#connector?.connect();\n\t\t}\n\n\t\tconst accounts = await this.#getAccounts();\n\t\tthis.#setAccounts(accounts);\n\n\t\treturn { accounts: this.accounts };\n\t};\n\n\t#getPreviouslyAuthorizedAccounts = async () => {\n\t\tconst session = this.#connector?.provider?.session;\n\t\tif (!session?.namespaces?.haneul) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst accounts = JSON.parse(session.sessionProperties?.['haneul_getAccounts'] ?? '[]') as {\n\t\t\taddress: string;\n\t\t\tpubkey: string;\n\t\t}[];\n\n\t\treturn toStandardAccounts(accounts, HANEUL_CHAINS);\n\t};\n\n\t#disconnect: StandardDisconnectMethod = async () => {\n\t\tthis.#connector?.disconnect();\n\t\tthis.#setAccounts([]);\n\t};\n\n\tupdateMetadata(metadata: WalletMetadata) {\n\t\tthis.#id = metadata.id;\n\t\tthis.#walletName = metadata.walletName;\n\t}\n}\ntype RegisterWalletConnectWallet = {\n\tprojectId: string;\n\tgetClient: GetClient;\n\tmetadata?: WalletMetadata;\n};\n\nexport function registerWalletConnectWallet({\n\tprojectId,\n\tgetClient,\n\tmetadata,\n}: RegisterWalletConnectWallet) {\n\tconst wallets = getWallets();\n\n\tlet unregister: (() => void) | null = null;\n\n\t// listen for wallet registration\n\twallets.on('register', (wallet: Wallet) => {\n\t\tif (wallet.id === 'walletconnect') {\n\t\t\tunregister?.();\n\t\t}\n\t});\n\n\tconst extension = wallets.get().find((wallet: Wallet) => wallet.id === 'walletconnect');\n\tif (extension) {\n\t\treturn;\n\t}\n\n\tconst fullMetadata = {\n\t\tid: 'walletconnect',\n\t\twalletName: 'Wallet Connect',\n\t\ticon,\n\t\tenabled: true,\n\t\t...metadata,\n\t};\n\n\tconst walletConnectWalletInstance = new WalletConnectWallet({\n\t\tmetadata: fullMetadata,\n\t\tprojectId,\n\t\tgetClient,\n\t});\n\tunregister = wallets.register(walletConnectWalletInstance);\n\n\twalletConnectWalletInstance.updateMetadata({\n\t\t...fullMetadata,\n\t\tenabled: true,\n\t});\n\n\treturn {\n\t\twallet: walletConnectWalletInstance,\n\t\tunregister,\n\t};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["#walletName","#id","#icon","#accounts","#connect","#disconnect","#on","#signTransaction","#signPersonalMessage","#signAndExecuteTransaction","#events","#projectId","#getClient","#initialization","#initialize","#connector","#getPreviouslyAuthorizedAccounts","#setAccounts","#getAccounts"],"sources":["../../src/wallet/index.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport { fromBase64, toBase64 } from '@haneullabs/haneul/utils';\nimport type {\n\tIdentifierArray,\n\tStandardConnectFeature,\n\tStandardConnectMethod,\n\tStandardDisconnectFeature,\n\tStandardDisconnectMethod,\n\tStandardEventsFeature,\n\tStandardEventsListeners,\n\tStandardEventsOnMethod,\n\tHaneulSignAndExecuteTransactionFeature,\n\tHaneulSignAndExecuteTransactionMethod,\n\tHaneulSignPersonalMessageFeature,\n\tHaneulSignPersonalMessageMethod,\n\tHaneulSignTransactionFeature,\n\tHaneulSignTransactionMethod,\n\tWallet,\n\tWalletIcon,\n} from '@haneullabs/wallet-standard';\nimport {\n\tgetWallets,\n\tReadonlyWalletAccount,\n\tStandardConnect,\n\tStandardDisconnect,\n\tStandardEvents,\n\tHANEUL_CHAINS,\n\tHaneulSignAndExecuteTransaction,\n\tHaneulSignPersonalMessage,\n\tHaneulSignTransaction,\n} from '@haneullabs/wallet-standard';\nimport { mitt, type Emitter } from '@haneullabs/utils';\nimport type { InferOutput } from 'valibot';\nimport { boolean, object, string } from 'valibot';\nimport type { CustomCaipNetwork } from '@reown/appkit-universal-connector';\nimport { UniversalConnector } from '@reown/appkit-universal-connector';\nimport type { ClientWithCoreApi } from '@haneullabs/haneul/client';\nimport { Transaction } from '@haneullabs/haneul/transactions';\n\n// -- Types --\ntype WalletEventsMap = {\n\t[E in keyof StandardEventsListeners]: Parameters<StandardEventsListeners[E]>[0];\n};\n\ntype SupportedNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';\n\nexport type GetClient = (network: SupportedNetwork) => ClientWithCoreApi;\ntype WalletMetadata = InferOutput<typeof WalletMetadataSchema>;\n\n// -- Constants --\nconst icon =\n\t'data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzE0MTQxNCIgcj0iMTk5LjUiIHN0cm9rZT0iIzNiNDA0MCIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODcgNS42MDg1LTIuMDg3IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+';\nexport const WALLETCONNECT_WALLET_NAME = 'WalletConnect' as const;\nconst walletAccountFeatures = [\n\t'haneul:signTransaction',\n\t'haneul:signAndExecuteTransaction',\n\t'haneul:signPersonalMessage',\n] as const;\n\nconst HaneulCaipNetworks = HANEUL_CHAINS.map((chain) => {\n\tconst [_, chainId] = chain.split(':');\n\treturn {\n\t\tid: chainId,\n\t\tchainNamespace: 'haneul',\n\t\tcaipNetworkId: `haneul:${chainId}`,\n\t\tname: `Haneul ${chainId}`,\n\t\tnativeCurrency: { name: 'HANEUL', symbol: 'HANEUL', decimals: 9 },\n\t\trpcUrls: { default: { http: [`https://haneul-${chainId}.gateway.tatum.io`] } },\n\t} as unknown as CustomCaipNetwork;\n});\n\nconst WalletMetadataSchema = object({\n\tid: string('Wallet ID is required'),\n\twalletName: string('Wallet name is required'),\n\ticon: string('Icon must be a valid wallet icon format'),\n\tenabled: boolean('Enabled is required'),\n});\n\nconst toStandardAccounts = (\n\taccounts: { address: string; pubkey: string }[],\n\tchains: IdentifierArray,\n) => {\n\treturn accounts.map((account) => {\n\t\treturn new ReadonlyWalletAccount({\n\t\t\taddress: account.address,\n\t\t\tchains,\n\t\t\tfeatures: walletAccountFeatures,\n\t\t\tpublicKey: fromBase64(account.pubkey),\n\t\t});\n\t});\n};\n\n// -- Wallet --\nexport class WalletConnectWallet implements Wallet {\n\t#id: string;\n\t#events: Emitter<WalletEventsMap>;\n\t#accounts: ReadonlyWalletAccount[];\n\t#walletName: string;\n\t#icon: WalletIcon;\n\t#connector?: UniversalConnector;\n\t#initialization: Promise<void>;\n\t#projectId: string;\n\t#getClient: GetClient;\n\n\tget name() {\n\t\treturn this.#walletName;\n\t}\n\n\tget id() {\n\t\treturn this.#id;\n\t}\n\n\tget icon() {\n\t\treturn this.#icon;\n\t}\n\n\tget version() {\n\t\treturn '1.0.0' as const;\n\t}\n\n\tget chains() {\n\t\treturn HANEUL_CHAINS;\n\t}\n\n\tget accounts() {\n\t\treturn this.#accounts;\n\t}\n\n\tget features(): StandardConnectFeature &\n\t\tStandardDisconnectFeature &\n\t\tStandardEventsFeature &\n\t\tHaneulSignTransactionFeature &\n\t\tHaneulSignPersonalMessageFeature &\n\t\tHaneulSignAndExecuteTransactionFeature {\n\t\treturn {\n\t\t\t[StandardConnect]: {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tconnect: this.#connect,\n\t\t\t},\n\t\t\t[StandardDisconnect]: {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\tdisconnect: this.#disconnect,\n\t\t\t},\n\t\t\t[StandardEvents]: {\n\t\t\t\tversion: '1.0.0',\n\t\t\t\ton: this.#on,\n\t\t\t},\n\t\t\t[HaneulSignTransaction]: {\n\t\t\t\tversion: '2.0.0',\n\t\t\t\tsignTransaction: this.#signTransaction,\n\t\t\t},\n\t\t\t[HaneulSignPersonalMessage]: {\n\t\t\t\tversion: '1.1.0',\n\t\t\t\tsignPersonalMessage: this.#signPersonalMessage,\n\t\t\t},\n\t\t\t[HaneulSignAndExecuteTransaction]: {\n\t\t\t\tversion: '2.0.0',\n\t\t\t\tsignAndExecuteTransaction: this.#signAndExecuteTransaction,\n\t\t\t},\n\t\t};\n\t}\n\n\tconstructor({\n\t\tmetadata,\n\t\tprojectId,\n\t\tgetClient,\n\t}: {\n\t\tmetadata: WalletMetadata;\n\t\tprojectId: string;\n\t\tgetClient: GetClient;\n\t}) {\n\t\tthis.#id = metadata.id;\n\t\tthis.#accounts = [];\n\t\tthis.#events = mitt();\n\t\tthis.#walletName = metadata.walletName;\n\t\tthis.#icon = icon;\n\t\tthis.#projectId = projectId;\n\t\tthis.#getClient = getClient;\n\t\tthis.#initialization = this.init();\n\t}\n\n\tinit() {\n\t\tthis.#initialization = this.#initialize();\n\t\t// Initialization failures are surfaced to callers that await\n\t\t// `#initialization` (e.g. `connect`); this catch only prevents an\n\t\t// unhandled rejection when the wallet is never used.\n\t\tthis.#initialization.catch(() => {});\n\t\treturn this.#initialization;\n\t}\n\n\tasync #initialize() {\n\t\tthis.#connector = await UniversalConnector.init({\n\t\t\tprojectId: this.#projectId,\n\n\t\t\t// TODO: Use dapp metadata\n\t\t\tmetadata: {\n\t\t\t\tname: this.#walletName,\n\t\t\t\tdescription: 'WalletConnect',\n\t\t\t\turl: 'https://walletconnect.org',\n\t\t\t\ticons: [this.#icon],\n\t\t\t},\n\t\t\tnetworks: [\n\t\t\t\t{\n\t\t\t\t\tnamespace: 'haneul',\n\t\t\t\t\tmethods: [\n\t\t\t\t\t\t'haneul_signTransaction',\n\t\t\t\t\t\t'haneul_signPersonalMessage',\n\t\t\t\t\t\t'haneul_signAndExecuteTransaction',\n\t\t\t\t\t\t'haneul_getAccounts',\n\t\t\t\t\t],\n\t\t\t\t\tevents: ['chainChanged', 'accountsChanged'],\n\t\t\t\t\tchains: HaneulCaipNetworks,\n\t\t\t\t},\n\t\t\t],\n\t\t\tmodalConfig: {\n\t\t\t\tthemeVariables: {\n\t\t\t\t\t'--w3m-z-index': 2147483647,\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\tthis.#accounts = await this.#getPreviouslyAuthorizedAccounts();\n\t}\n\n\t#signTransaction: HaneulSignTransactionMethod = async ({ transaction, account, chain }) => {\n\t\tconst tx = await transaction.toJSON();\n\n\t\tconst response = (await this.#connector?.request(\n\t\t\t{\n\t\t\t\tmethod: 'haneul_signTransaction',\n\t\t\t\tparams: {\n\t\t\t\t\ttransaction: tx,\n\t\t\t\t\taddress: account.address,\n\t\t\t\t},\n\t\t\t},\n\t\t\tchain,\n\t\t)) as { transactionBytes: string; signature: string };\n\n\t\treturn {\n\t\t\tbytes: response.transactionBytes,\n\t\t\tsignature: response.signature,\n\t\t};\n\t};\n\n\t#signAndExecuteTransaction: HaneulSignAndExecuteTransactionMethod = async ({\n\t\ttransaction,\n\t\taccount,\n\t\tchain,\n\t}) => {\n\t\tconst [, network] = chain.split(':');\n\t\tconst client = this.#getClient(network as SupportedNetwork);\n\t\tconst data = await transaction.toJSON();\n\t\tconst parsedTransaction = Transaction.from(data);\n\t\tconst bytes = await parsedTransaction.build({ client });\n\t\tconst response = (await this.#connector?.request(\n\t\t\t{\n\t\t\t\tmethod: 'haneul_signAndExecuteTransaction',\n\t\t\t\tparams: {\n\t\t\t\t\ttransaction: data,\n\t\t\t\t\taddress: account.address,\n\t\t\t\t},\n\t\t\t},\n\t\t\tchain,\n\t\t)) as { digest: string };\n\n\t\tconst tx = await client.core.waitForTransaction({\n\t\t\tdigest: response.digest,\n\t\t\tinclude: { effects: true },\n\t\t});\n\n\t\tconst result = tx.Transaction ?? tx.FailedTransaction;\n\n\t\treturn {\n\t\t\tdigest: response.digest,\n\t\t\tsignature: result.signatures[0] ?? '',\n\t\t\tbytes: toBase64(bytes),\n\t\t\teffects: result.effects?.bcs ? toBase64(result.effects.bcs) : '',\n\t\t};\n\t};\n\n\t#signPersonalMessage: HaneulSignPersonalMessageMethod = async ({ message, account, chain }) => {\n\t\tconst messageString = new TextDecoder().decode(message);\n\t\tconst response = (await this.#connector?.request(\n\t\t\t{\n\t\t\t\tmethod: 'haneul_signPersonalMessage',\n\t\t\t\tparams: {\n\t\t\t\t\tmessage: messageString,\n\t\t\t\t\taddress: account.address,\n\t\t\t\t},\n\t\t\t},\n\t\t\tchain ?? 'haneul:mainnet',\n\t\t)) as { signature: string };\n\n\t\treturn {\n\t\t\tsignature: response.signature,\n\t\t\tbytes: toBase64(message),\n\t\t};\n\t};\n\n\t#on: StandardEventsOnMethod = (event, listener) => {\n\t\tthis.#events.on(event, listener);\n\t\treturn () => this.#events.off(event, listener);\n\t};\n\n\t#setAccounts(accounts: ReadonlyWalletAccount[]) {\n\t\tthis.#accounts = accounts;\n\t\tthis.#events.emit('change', { accounts: this.accounts });\n\t}\n\n\t#getAccounts = async () => {\n\t\tlet accounts: { address: string; pubkey: string }[] | undefined = JSON.parse(\n\t\t\tthis.#connector?.provider?.session?.sessionProperties?.['haneul_getAccounts'] ?? '[]',\n\t\t);\n\n\t\tif (!accounts?.length) {\n\t\t\taccounts = (await this.#connector?.request({ method: 'haneul_getAccounts' }, 'haneul:mainnet')) as\n\t\t\t\t| {\n\t\t\t\t\t\taddress: string;\n\t\t\t\t\t\tpubkey: string;\n\t\t\t\t }[]\n\t\t\t\t| undefined;\n\t\t}\n\n\t\treturn toStandardAccounts(accounts ?? [], this.chains);\n\t};\n\n\t#connect: StandardConnectMethod = async (input) => {\n\t\t// The wallet is registered (and can be asked to reconnect) before the\n\t\t// connector has finished initializing, so wait for initialization to\n\t\t// complete before touching the connector.\n\t\tawait this.#initialization;\n\n\t\tif (input?.silent) {\n\t\t\tconst accounts = await this.#getPreviouslyAuthorizedAccounts();\n\t\t\tif (accounts.length > 0) {\n\t\t\t\tthis.#setAccounts(accounts);\n\t\t\t\treturn { accounts };\n\t\t\t}\n\n\t\t\tif (!this.#connector?.provider?.session?.namespaces?.haneul) {\n\t\t\t\t// A silent reconnect must not start a new connection when\n\t\t\t\t// there is no existing Haneul session to restore.\n\t\t\t\treturn { accounts: [] };\n\t\t\t}\n\t\t\t// A session exists but carries no cached account metadata:\n\t\t\t// fall through to `#getAccounts()` to look the accounts up.\n\t\t}\n\n\t\tif (!this.#connector?.provider?.session?.namespaces?.haneul) {\n\t\t\tawait this.#connector?.connect();\n\t\t}\n\n\t\tconst accounts = await this.#getAccounts();\n\t\tthis.#setAccounts(accounts);\n\n\t\treturn { accounts: this.accounts };\n\t};\n\n\t#getPreviouslyAuthorizedAccounts = async () => {\n\t\tconst session = this.#connector?.provider?.session;\n\t\tif (!session?.namespaces?.haneul) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst accounts = JSON.parse(session.sessionProperties?.['haneul_getAccounts'] ?? '[]') as {\n\t\t\taddress: string;\n\t\t\tpubkey: string;\n\t\t}[];\n\n\t\treturn toStandardAccounts(accounts, HANEUL_CHAINS);\n\t};\n\n\t#disconnect: StandardDisconnectMethod = async () => {\n\t\tthis.#connector?.disconnect();\n\t\tthis.#setAccounts([]);\n\t};\n\n\tupdateMetadata(metadata: WalletMetadata) {\n\t\tthis.#id = metadata.id;\n\t\tthis.#walletName = metadata.walletName;\n\t}\n}\ntype RegisterWalletConnectWallet = {\n\tprojectId: string;\n\tgetClient: GetClient;\n\tmetadata?: WalletMetadata;\n};\n\nexport function registerWalletConnectWallet({\n\tprojectId,\n\tgetClient,\n\tmetadata,\n}: RegisterWalletConnectWallet) {\n\tconst wallets = getWallets();\n\n\tlet unregister: (() => void) | null = null;\n\n\t// listen for wallet registration\n\twallets.on('register', (wallet: Wallet) => {\n\t\tif (wallet.id === 'walletconnect') {\n\t\t\tunregister?.();\n\t\t}\n\t});\n\n\tconst extension = wallets.get().find((wallet: Wallet) => wallet.id === 'walletconnect');\n\tif (extension) {\n\t\treturn;\n\t}\n\n\tconst fullMetadata = {\n\t\tid: 'walletconnect',\n\t\twalletName: 'Wallet Connect',\n\t\ticon,\n\t\tenabled: true,\n\t\t...metadata,\n\t};\n\n\tconst walletConnectWalletInstance = new WalletConnectWallet({\n\t\tmetadata: fullMetadata,\n\t\tprojectId,\n\t\tgetClient,\n\t});\n\tunregister = wallets.register(walletConnectWalletInstance);\n\n\twalletConnectWalletInstance.updateMetadata({\n\t\t...fullMetadata,\n\t\tenabled: true,\n\t});\n\n\treturn {\n\t\twallet: walletConnectWalletInstance,\n\t\tunregister,\n\t};\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haneullabs/walletconnect-wallet",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.35",
|
|
4
4
|
"description": "Wallet adapter for WalletConnect on Haneul",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Haneul Labs <build@haneul-labs.com>",
|
|
@@ -35,13 +35,14 @@
|
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@reown/appkit-universal-connector": "1.8.23",
|
|
37
37
|
"valibot": "^1.4.2",
|
|
38
|
-
"@haneullabs/wallet-standard": "^0.21.
|
|
39
|
-
"@haneullabs/utils": "^0.4.
|
|
38
|
+
"@haneullabs/wallet-standard": "^0.21.35",
|
|
39
|
+
"@haneullabs/utils": "^0.4.2"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
|
-
"@haneullabs/haneul": "^2.
|
|
42
|
+
"@haneullabs/haneul": "^2.37.0"
|
|
43
43
|
},
|
|
44
44
|
"scripts": {
|
|
45
|
+
"test": "vitest run",
|
|
45
46
|
"clean": "rm -rf tsconfig.tsbuildinfo ./dist",
|
|
46
47
|
"build": "rm -rf dist && tsc --noEmit && tsdown",
|
|
47
48
|
"prettier:check": "prettier -c --ignore-unknown .",
|