@haneullabs/walletconnect-wallet 1.0.2 → 1.0.3

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.
@@ -17,8 +17,8 @@ const HaneulCaipNetworks = HANEUL_CHAINS.map((chain) => {
17
17
  const [_, chainId] = chain.split(":");
18
18
  return {
19
19
  id: chainId,
20
- chainNamespace: "sui",
21
- caipNetworkId: `sui:${chainId}`,
20
+ chainNamespace: "haneul",
21
+ caipNetworkId: `haneul:${chainId}`,
22
22
  name: `Haneul ${chainId}`,
23
23
  nativeCurrency: {
24
24
  name: "HANEUL",
@@ -119,12 +119,12 @@ var WalletConnectWallet = class {
119
119
  icons: [this.#icon]
120
120
  },
121
121
  networks: [{
122
- namespace: "sui",
122
+ namespace: "haneul",
123
123
  methods: [
124
- "sui_signTransaction",
125
- "sui_signPersonalMessage",
126
- "sui_signAndExecuteTransaction",
127
- "sui_getAccounts"
124
+ "haneul_signTransaction",
125
+ "haneul_signPersonalMessage",
126
+ "haneul_signAndExecuteTransaction",
127
+ "haneul_getAccounts"
128
128
  ],
129
129
  events: ["chainChanged", "accountsChanged"],
130
130
  chains: HaneulCaipNetworks
@@ -136,7 +136,7 @@ var WalletConnectWallet = class {
136
136
  #signTransaction = async ({ transaction, account, chain }) => {
137
137
  const tx = await transaction.toJSON();
138
138
  const response = await this.#connector?.request({
139
- method: "sui_signTransaction",
139
+ method: "haneul_signTransaction",
140
140
  params: {
141
141
  transaction: tx,
142
142
  address: account.address
@@ -153,7 +153,7 @@ var WalletConnectWallet = class {
153
153
  const data = await transaction.toJSON();
154
154
  const bytes = await Transaction.from(data).build({ client });
155
155
  const response = await this.#connector?.request({
156
- method: "sui_signAndExecuteTransaction",
156
+ method: "haneul_signAndExecuteTransaction",
157
157
  params: {
158
158
  transaction: data,
159
159
  address: account.address
@@ -175,7 +175,7 @@ var WalletConnectWallet = class {
175
175
  const messageString = new TextDecoder().decode(message);
176
176
  return {
177
177
  signature: (await this.#connector?.request({
178
- method: "sui_signPersonalMessage",
178
+ method: "haneul_signPersonalMessage",
179
179
  params: {
180
180
  message: messageString,
181
181
  address: account.address
@@ -193,8 +193,8 @@ var WalletConnectWallet = class {
193
193
  this.#events.emit("change", { accounts: this.accounts });
194
194
  }
195
195
  #getAccounts = async () => {
196
- let accounts = JSON.parse(this.#connector?.provider?.session?.sessionProperties?.["sui_getAccounts"] ?? "[]");
197
- if (!accounts?.length) accounts = await this.#connector?.request({ method: "sui_getAccounts" }, "haneul:mainnet");
196
+ let accounts = JSON.parse(this.#connector?.provider?.session?.sessionProperties?.["haneul_getAccounts"] ?? "[]");
197
+ if (!accounts?.length) accounts = await this.#connector?.request({ method: "haneul_getAccounts" }, "haneul:mainnet");
198
198
  return toStandardAccounts(accounts, this.chains);
199
199
  };
200
200
  #connect = async (input) => {
@@ -205,15 +205,15 @@ var WalletConnectWallet = class {
205
205
  return { accounts: accounts$1 };
206
206
  }
207
207
  }
208
- if (!this.#connector?.provider?.session?.namespaces?.sui) await this.#connector?.connect();
208
+ if (!this.#connector?.provider?.session?.namespaces?.haneul) await this.#connector?.connect();
209
209
  const accounts = await this.#getAccounts();
210
210
  this.#setAccounts(accounts);
211
211
  return { accounts: this.accounts };
212
212
  };
213
213
  #getPreviouslyAuthorizedAccounts = async () => {
214
214
  const session = this.#connector?.provider?.session;
215
- if (!session?.namespaces?.sui) return [];
216
- return toStandardAccounts(JSON.parse(session.sessionProperties?.["sui_getAccounts"] ?? "[]"), HANEUL_CHAINS);
215
+ if (!session?.namespaces?.haneul) return [];
216
+ return toStandardAccounts(JSON.parse(session.sessionProperties?.["haneul_getAccounts"] ?? "[]"), HANEUL_CHAINS);
217
217
  };
218
218
  #disconnect = async () => {
219
219
  this.#connector?.disconnect();
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["#walletName","#id","#icon","#accounts","#connect","#disconnect","#on","#signTransaction","#signPersonalMessage","#signAndExecuteTransaction","#events","#projectId","#getClient","#connector","#getPreviouslyAuthorizedAccounts","accounts","#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: CustomCaipNetwork<'sui'>[] = HANEUL_CHAINS.map((chain) => {\n\tconst [_, chainId] = chain.split(':');\n\treturn {\n\t\tid: chainId,\n\t\tchainNamespace: 'sui',\n\t\tcaipNetworkId: `sui:${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};\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: 'sui',\n\t\t\t\t\tmethods: [\n\t\t\t\t\t\t'sui_signTransaction',\n\t\t\t\t\t\t'sui_signPersonalMessage',\n\t\t\t\t\t\t'sui_signAndExecuteTransaction',\n\t\t\t\t\t\t'sui_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: 'sui_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: 'sui_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: 'sui_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?.['sui_getAccounts'] ?? '[]',\n\t\t);\n\n\t\tif (!accounts?.length) {\n\t\t\taccounts = (await this.#connector?.request({ method: 'sui_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?.sui) {\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?.sui) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst accounts = JSON.parse(session.sessionProperties?.['sui_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","#connector","#getPreviouslyAuthorizedAccounts","accounts","#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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"}
package/package.json CHANGED
@@ -1,55 +1,55 @@
1
1
  {
2
- "name": "@haneullabs/walletconnect-wallet",
3
- "version": "1.0.2",
4
- "description": "Wallet adapter for WalletConnect on Haneul",
5
- "license": "Apache-2.0",
6
- "author": "Haneul Labs <build@haneul-labs.com>",
7
- "type": "module",
8
- "main": "./dist/index.mjs",
9
- "types": "./dist/index.d.mts",
10
- "exports": {
11
- ".": {
12
- "types": "./dist/index.d.mts",
13
- "import": "./dist/index.mjs",
14
- "default": "./dist/index.mjs"
15
- }
16
- },
17
- "sideEffects": false,
18
- "files": [
19
- "CHANGELOG.md",
20
- "dist"
21
- ],
22
- "repository": {
23
- "type": "git",
24
- "url": "git+https://github.com/GeunhwaJeong/ts-sdks.git"
25
- },
26
- "bugs": {
27
- "url": "https://github.com/mystenlabs/ts-sdks/issues"
28
- },
29
- "homepage": "https://github.com/GeunhwaJeong/ts-sdks/tree/main/packages/walletconnect-wallet#readme",
30
- "devDependencies": {
31
- "@types/node": "^25.0.8",
32
- "typescript": "^5.9.3",
33
- "vitest": "^4.0.17",
34
- "@haneullabs/haneul": "^2.4.0"
35
- },
36
- "dependencies": {
37
- "@reown/appkit-universal-connector": "1.8.16",
38
- "valibot": "^1.2.0",
39
- "@haneullabs/utils": "^0.3.1",
40
- "@haneullabs/wallet-standard": "^0.20.1"
41
- },
42
- "peerDependencies": {
43
- "@haneullabs/haneul": "^2.4.0"
44
- },
45
- "scripts": {
46
- "clean": "rm -rf tsconfig.tsbuildinfo ./dist",
47
- "build": "rm -rf dist && tsc --noEmit && tsdown",
48
- "prettier:check": "prettier -c --ignore-unknown .",
49
- "prettier:fix": "prettier -w --ignore-unknown .",
50
- "oxlint:check": "oxlint .",
51
- "oxlint:fix": "oxlint --fix",
52
- "lint": "pnpm run oxlint:check && pnpm run prettier:check",
53
- "lint:fix": "pnpm run oxlint:fix && pnpm run prettier:fix"
54
- }
55
- }
2
+ "name": "@haneullabs/walletconnect-wallet",
3
+ "version": "1.0.3",
4
+ "description": "Wallet adapter for WalletConnect on Haneul",
5
+ "license": "Apache-2.0",
6
+ "author": "Haneul Labs <build@haneul-labs.com>",
7
+ "type": "module",
8
+ "main": "./dist/index.mjs",
9
+ "types": "./dist/index.d.mts",
10
+ "exports": {
11
+ ".": {
12
+ "types": "./dist/index.d.mts",
13
+ "import": "./dist/index.mjs",
14
+ "default": "./dist/index.mjs"
15
+ }
16
+ },
17
+ "sideEffects": false,
18
+ "files": [
19
+ "CHANGELOG.md",
20
+ "dist"
21
+ ],
22
+ "scripts": {
23
+ "clean": "rm -rf tsconfig.tsbuildinfo ./dist",
24
+ "build": "rm -rf dist && tsc --noEmit && tsdown",
25
+ "prettier:check": "prettier -c --ignore-unknown .",
26
+ "prettier:fix": "prettier -w --ignore-unknown .",
27
+ "oxlint:check": "oxlint .",
28
+ "oxlint:fix": "oxlint --fix",
29
+ "lint": "pnpm run oxlint:check && pnpm run prettier:check",
30
+ "lint:fix": "pnpm run oxlint:fix && pnpm run prettier:fix"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/GeunhwaJeong/ts-sdks.git"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/mystenlabs/ts-sdks/issues"
38
+ },
39
+ "homepage": "https://github.com/GeunhwaJeong/ts-sdks/tree/main/packages/walletconnect-wallet#readme",
40
+ "devDependencies": {
41
+ "@haneullabs/haneul": "workspace:^",
42
+ "@types/node": "^25.0.8",
43
+ "typescript": "^5.9.3",
44
+ "vitest": "^4.0.17"
45
+ },
46
+ "dependencies": {
47
+ "@haneullabs/utils": "workspace:^",
48
+ "@haneullabs/wallet-standard": "workspace:^",
49
+ "@reown/appkit-universal-connector": "1.8.16",
50
+ "valibot": "^1.2.0"
51
+ },
52
+ "peerDependencies": {
53
+ "@haneullabs/haneul": "workspace:^"
54
+ }
55
+ }