@haneullabs/walletconnect-wallet 0.1.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.
@@ -0,0 +1,41 @@
1
+ import type { StandardConnectFeature, StandardDisconnectFeature, StandardEventsFeature, HaneulSignAndExecuteTransactionFeature, HaneulSignPersonalMessageFeature, HaneulSignTransactionFeature, Wallet } from '@haneullabs/wallet-standard';
2
+ import { ReadonlyWalletAccount } from '@haneullabs/wallet-standard';
3
+ import type { InferOutput } from 'valibot';
4
+ import type { Experimental_BaseClient } from '@haneullabs/haneul/experimental';
5
+ type SupportedNetwork = 'mainnet' | 'testnet' | 'devnet' | 'localnet';
6
+ export type GetClient = (network: SupportedNetwork) => Experimental_BaseClient;
7
+ type WalletMetadata = InferOutput<typeof WalletMetadataSchema>;
8
+ export declare const WALLETCONNECT_WALLET_NAME: "WalletConnect";
9
+ declare const WalletMetadataSchema: import("valibot").ObjectSchema<{
10
+ readonly id: import("valibot").StringSchema<"Wallet ID is required">;
11
+ readonly walletName: import("valibot").StringSchema<"Wallet name is required">;
12
+ readonly icon: import("valibot").StringSchema<"Icon must be a valid wallet icon format">;
13
+ readonly enabled: import("valibot").BooleanSchema<"Enabled is required">;
14
+ }, undefined>;
15
+ export declare class WalletConnectWallet implements Wallet {
16
+ #private;
17
+ get name(): string;
18
+ get id(): string;
19
+ get icon(): `data:image/svg+xml;base64,${string}` | `data:image/webp;base64,${string}` | `data:image/png;base64,${string}` | `data:image/gif;base64,${string}`;
20
+ get version(): "1.0.0";
21
+ get chains(): readonly ["haneul:devnet", "haneul:testnet", "haneul:localnet", "haneul:mainnet"];
22
+ get accounts(): ReadonlyWalletAccount[];
23
+ get features(): StandardConnectFeature & StandardDisconnectFeature & StandardEventsFeature & HaneulSignTransactionFeature & HaneulSignPersonalMessageFeature & HaneulSignAndExecuteTransactionFeature;
24
+ constructor({ metadata, projectId, getClient, }: {
25
+ metadata: WalletMetadata;
26
+ projectId: string;
27
+ getClient: GetClient;
28
+ });
29
+ init(): Promise<void>;
30
+ updateMetadata(metadata: WalletMetadata): void;
31
+ }
32
+ type RegisterWalletConnectWallet = {
33
+ projectId: string;
34
+ getClient: GetClient;
35
+ metadata?: WalletMetadata;
36
+ };
37
+ export declare function registerWalletConnectWallet({ projectId, getClient, metadata, }: RegisterWalletConnectWallet): {
38
+ wallet: WalletConnectWallet;
39
+ unregister: () => void;
40
+ } | undefined;
41
+ export {};
@@ -0,0 +1,334 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
9
+ var _id, _events, _accounts, _walletName, _icon, _connector, _projectId, _getClient, _signTransaction, _signAndExecuteTransaction, _signPersonalMessage, _on, _WalletConnectWallet_instances, setAccounts_fn, _getAccounts, _connect, _getPreviouslyAuthorizedAccounts, _disconnect;
10
+ import { fromBase64, toBase64 } from "@haneullabs/haneul/utils";
11
+ import {
12
+ getWallets,
13
+ ReadonlyWalletAccount,
14
+ StandardConnect,
15
+ StandardDisconnect,
16
+ StandardEvents,
17
+ HANEUL_CHAINS,
18
+ HaneulSignAndExecuteTransaction,
19
+ HaneulSignPersonalMessage,
20
+ HaneulSignTransaction
21
+ } from "@haneullabs/wallet-standard";
22
+ import mitt from "mitt";
23
+ import { boolean, object, string } from "valibot";
24
+ import { UniversalConnector } from "@reown/appkit-universal-connector";
25
+ import { Transaction } from "@haneullabs/haneul/transactions";
26
+ const icon = "data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiBoZWlnaHQ9IjQwMCIgdmlld0JveD0iMCAwIDQwMCA0MDAiIHdpZHRoPSI0MDAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPjxjbGlwUGF0aCBpZD0iYSI+PHBhdGggZD0ibTAgMGg0MDB2NDAwaC00MDB6Ii8+PC9jbGlwUGF0aD48ZyBjbGlwLXBhdGg9InVybCgjYSkiPjxjaXJjbGUgY3g9IjIwMCIgY3k9IjIwMCIgZmlsbD0iIzE0MTQxNCIgcj0iMTk5LjUiIHN0cm9rZT0iIzNiNDA0MCIvPjxwYXRoIGQ9Im0xMjIuNTE5IDE0OC45NjVjNDIuNzkxLTQxLjcyOSAxMTIuMTcxLTQxLjcyOSAxNTQuOTYyIDBsNS4xNSA1LjAyMmMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtMTcuNjE3IDE3LjE4Yy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTcuMDg3LTYuOTExYy0yOS44NTMtMjkuMTExLTc4LjI1My0yOS4xMTEtMTA4LjEwNiAwbC03LjU5IDcuNDAxYy0xLjA3IDEuMDQzLTIuODA0IDEuMDQzLTMuODc0IDBsLTE3LjYxNy0xNy4xOGMtMi4xNC0yLjA4Ni0yLjE0LTUuNDY5IDAtNy41NTV6bTE5MS4zOTcgMzUuNTI5IDE1LjY3OSAxNS4yOWMyLjE0IDIuMDg2IDIuMTQgNS40NjkgMCA3LjU1NWwtNzAuNyA2OC45NDRjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTUwLjE3OC00OC45MzFjLS41MzUtLjUyMi0xLjQwMi0uNTIyLTEuOTM3IDBsLTUwLjE3OCA0OC45MzFjLTIuMTM5IDIuMDg3LTUuNjA4IDIuMDg3LTcuNzQ4IDBsLTcwLjcwMTUtNjguOTQ1Yy0yLjEzOTYtMi4wODYtMi4xMzk2LTUuNDY5IDAtNy41NTVsMTUuNjc5NS0xNS4yOWMyLjEzOTYtMi4wODcgNS42MDg1LTIuMDg3IDcuNzQ4MSAwbDUwLjE3ODkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3Ny00OC45MzJjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMGw1MC4xNzkgNDguOTMyYy41MzUuNTIyIDEuNDAyLjUyMiAxLjkzNyAwbDUwLjE3OS00OC45MzFjMi4xMzktMi4wODcgNS42MDgtMi4wODcgNy43NDggMHoiIGZpbGw9IiNmZmYiLz48L2c+PC9zdmc+";
27
+ const WALLETCONNECT_WALLET_NAME = "WalletConnect";
28
+ const walletAccountFeatures = [
29
+ "sui:signTransaction",
30
+ "sui:signAndExecuteTransaction",
31
+ "sui:signPersonalMessage"
32
+ ];
33
+ const SUI_CAIP_CHAIN_IDS = ["sui:devnet", "sui:testnet", "sui:localnet", "sui:mainnet"];
34
+ const SUICaipNetworks = SUI_CAIP_CHAIN_IDS.map((chain) => {
35
+ const [_, chainId] = chain.split(":");
36
+ return {
37
+ id: chainId,
38
+ chainNamespace: "sui",
39
+ caipNetworkId: chain,
40
+ name: `Haneul ${chainId}`,
41
+ nativeCurrency: { name: "HANEUL", symbol: "HANEUL", decimals: 9 },
42
+ rpcUrls: { default: { http: [`https://haneul-${chainId}.gateway.tatum.io`] } }
43
+ };
44
+ });
45
+ const WalletMetadataSchema = object({
46
+ id: string("Wallet ID is required"),
47
+ walletName: string("Wallet name is required"),
48
+ icon: string("Icon must be a valid wallet icon format"),
49
+ enabled: boolean("Enabled is required")
50
+ });
51
+ const toStandardAccounts = (accounts, chains) => {
52
+ return accounts.map((account) => {
53
+ return new ReadonlyWalletAccount({
54
+ address: account.address,
55
+ chains,
56
+ features: walletAccountFeatures,
57
+ publicKey: fromBase64(account.pubkey)
58
+ });
59
+ });
60
+ };
61
+ class WalletConnectWallet {
62
+ constructor({
63
+ metadata,
64
+ projectId,
65
+ getClient
66
+ }) {
67
+ __privateAdd(this, _WalletConnectWallet_instances);
68
+ __privateAdd(this, _id);
69
+ __privateAdd(this, _events);
70
+ __privateAdd(this, _accounts);
71
+ __privateAdd(this, _walletName);
72
+ __privateAdd(this, _icon);
73
+ __privateAdd(this, _connector);
74
+ __privateAdd(this, _projectId);
75
+ __privateAdd(this, _getClient);
76
+ __privateAdd(this, _signTransaction, async ({ transaction, account, chain }) => {
77
+ const tx = await transaction.toJSON();
78
+ const response = await __privateGet(this, _connector)?.request(
79
+ {
80
+ method: "sui_signTransaction",
81
+ params: {
82
+ transaction: tx,
83
+ address: account.address
84
+ }
85
+ },
86
+ chain
87
+ );
88
+ return {
89
+ bytes: response.transactionBytes,
90
+ signature: response.signature
91
+ };
92
+ });
93
+ __privateAdd(this, _signAndExecuteTransaction, async ({
94
+ transaction,
95
+ account,
96
+ chain
97
+ }) => {
98
+ const [, network] = chain.split(":");
99
+ const client = __privateGet(this, _getClient).call(this, network);
100
+ const data = await transaction.toJSON();
101
+ const parsedTransaction = Transaction.from(data);
102
+ const bytes = await parsedTransaction.build({ client });
103
+ const response = await __privateGet(this, _connector)?.request(
104
+ {
105
+ method: "sui_signAndExecuteTransaction",
106
+ params: {
107
+ transaction: data,
108
+ address: account.address
109
+ }
110
+ },
111
+ chain
112
+ );
113
+ const tx = await client.core.waitForTransaction({
114
+ digest: response.digest
115
+ });
116
+ return {
117
+ digest: response.digest,
118
+ signature: tx.transaction.signatures[0] ?? "",
119
+ bytes: toBase64(bytes),
120
+ effects: tx.transaction.effects.bcs ? toBase64(tx.transaction.effects.bcs) : ""
121
+ };
122
+ });
123
+ __privateAdd(this, _signPersonalMessage, async ({ message, account, chain }) => {
124
+ const messageString = new TextDecoder().decode(message);
125
+ const response = await __privateGet(this, _connector)?.request(
126
+ {
127
+ method: "sui_signPersonalMessage",
128
+ params: {
129
+ message: messageString,
130
+ address: account.address
131
+ }
132
+ },
133
+ chain ?? "haneul:mainnet"
134
+ );
135
+ return {
136
+ signature: response.signature,
137
+ bytes: toBase64(message)
138
+ };
139
+ });
140
+ __privateAdd(this, _on, (event, listener) => {
141
+ __privateGet(this, _events).on(event, listener);
142
+ return () => __privateGet(this, _events).off(event, listener);
143
+ });
144
+ __privateAdd(this, _getAccounts, async () => {
145
+ let accounts = JSON.parse(
146
+ __privateGet(this, _connector)?.provider?.session?.sessionProperties?.["sui_getAccounts"] ?? "[]"
147
+ );
148
+ if (!accounts?.length) {
149
+ accounts = await __privateGet(this, _connector)?.request({ method: "sui_getAccounts" }, "haneul:mainnet");
150
+ }
151
+ return toStandardAccounts(accounts, this.chains);
152
+ });
153
+ __privateAdd(this, _connect, async (input) => {
154
+ if (input?.silent) {
155
+ const accounts2 = await __privateGet(this, _getPreviouslyAuthorizedAccounts).call(this);
156
+ if (accounts2.length > 0) {
157
+ __privateMethod(this, _WalletConnectWallet_instances, setAccounts_fn).call(this, accounts2);
158
+ return { accounts: accounts2 };
159
+ }
160
+ }
161
+ if (!__privateGet(this, _connector)?.provider?.session?.namespaces?.sui) {
162
+ await __privateGet(this, _connector)?.connect();
163
+ }
164
+ const accounts = await __privateGet(this, _getAccounts).call(this);
165
+ __privateMethod(this, _WalletConnectWallet_instances, setAccounts_fn).call(this, accounts);
166
+ return { accounts: this.accounts };
167
+ });
168
+ __privateAdd(this, _getPreviouslyAuthorizedAccounts, async () => {
169
+ const session = __privateGet(this, _connector)?.provider?.session;
170
+ if (!session?.namespaces?.sui) {
171
+ return [];
172
+ }
173
+ const accounts = JSON.parse(session.sessionProperties?.["sui_getAccounts"] ?? "[]");
174
+ return toStandardAccounts(accounts, HANEUL_CHAINS);
175
+ });
176
+ __privateAdd(this, _disconnect, async () => {
177
+ __privateGet(this, _connector)?.disconnect();
178
+ __privateMethod(this, _WalletConnectWallet_instances, setAccounts_fn).call(this, []);
179
+ });
180
+ __privateSet(this, _id, metadata.id);
181
+ __privateSet(this, _accounts, []);
182
+ __privateSet(this, _events, mitt());
183
+ __privateSet(this, _walletName, metadata.walletName);
184
+ __privateSet(this, _icon, icon);
185
+ __privateSet(this, _projectId, projectId);
186
+ __privateSet(this, _getClient, getClient);
187
+ this.init();
188
+ }
189
+ get name() {
190
+ return __privateGet(this, _walletName);
191
+ }
192
+ get id() {
193
+ return __privateGet(this, _id);
194
+ }
195
+ get icon() {
196
+ return __privateGet(this, _icon);
197
+ }
198
+ get version() {
199
+ return "1.0.0";
200
+ }
201
+ get chains() {
202
+ return HANEUL_CHAINS;
203
+ }
204
+ get accounts() {
205
+ return __privateGet(this, _accounts);
206
+ }
207
+ get features() {
208
+ return {
209
+ [StandardConnect]: {
210
+ version: "1.0.0",
211
+ connect: __privateGet(this, _connect)
212
+ },
213
+ [StandardDisconnect]: {
214
+ version: "1.0.0",
215
+ disconnect: __privateGet(this, _disconnect)
216
+ },
217
+ [StandardEvents]: {
218
+ version: "1.0.0",
219
+ on: __privateGet(this, _on)
220
+ },
221
+ [HaneulSignTransaction]: {
222
+ version: "2.0.0",
223
+ signTransaction: __privateGet(this, _signTransaction)
224
+ },
225
+ [HaneulSignPersonalMessage]: {
226
+ version: "1.1.0",
227
+ signPersonalMessage: __privateGet(this, _signPersonalMessage)
228
+ },
229
+ [HaneulSignAndExecuteTransaction]: {
230
+ version: "2.0.0",
231
+ signAndExecuteTransaction: __privateGet(this, _signAndExecuteTransaction)
232
+ }
233
+ };
234
+ }
235
+ async init() {
236
+ __privateSet(this, _connector, await UniversalConnector.init({
237
+ projectId: __privateGet(this, _projectId),
238
+ // TODO: Use dapp metadata
239
+ metadata: {
240
+ name: __privateGet(this, _walletName),
241
+ description: "WalletConnect",
242
+ icon: __privateGet(this, _icon)
243
+ },
244
+ networks: [
245
+ {
246
+ namespace: "sui",
247
+ methods: [
248
+ "sui_signTransaction",
249
+ "sui_signPersonalMessage",
250
+ "sui_signAndExecuteTransaction",
251
+ "sui_getAccounts"
252
+ ],
253
+ events: ["chainChanged", "accountsChanged"],
254
+ chains: SUICaipNetworks
255
+ }
256
+ ],
257
+ modalConfig: {
258
+ themeVariables: {
259
+ "--w3m-z-index": 2147483647
260
+ }
261
+ }
262
+ }));
263
+ __privateSet(this, _accounts, await __privateGet(this, _getPreviouslyAuthorizedAccounts).call(this));
264
+ }
265
+ updateMetadata(metadata) {
266
+ __privateSet(this, _id, metadata.id);
267
+ __privateSet(this, _walletName, metadata.walletName);
268
+ }
269
+ }
270
+ _id = new WeakMap();
271
+ _events = new WeakMap();
272
+ _accounts = new WeakMap();
273
+ _walletName = new WeakMap();
274
+ _icon = new WeakMap();
275
+ _connector = new WeakMap();
276
+ _projectId = new WeakMap();
277
+ _getClient = new WeakMap();
278
+ _signTransaction = new WeakMap();
279
+ _signAndExecuteTransaction = new WeakMap();
280
+ _signPersonalMessage = new WeakMap();
281
+ _on = new WeakMap();
282
+ _WalletConnectWallet_instances = new WeakSet();
283
+ setAccounts_fn = function(accounts) {
284
+ __privateSet(this, _accounts, accounts);
285
+ __privateGet(this, _events).emit("change", { accounts: this.accounts });
286
+ };
287
+ _getAccounts = new WeakMap();
288
+ _connect = new WeakMap();
289
+ _getPreviouslyAuthorizedAccounts = new WeakMap();
290
+ _disconnect = new WeakMap();
291
+ function registerWalletConnectWallet({
292
+ projectId,
293
+ getClient,
294
+ metadata
295
+ }) {
296
+ const wallets = getWallets();
297
+ let unregister = null;
298
+ wallets.on("register", (wallet) => {
299
+ if (wallet.id === "walletconnect") {
300
+ unregister?.();
301
+ }
302
+ });
303
+ const extension = wallets.get().find((wallet) => wallet.id === "walletconnect");
304
+ if (extension) {
305
+ return;
306
+ }
307
+ const fullMetadata = {
308
+ id: "walletconnect",
309
+ walletName: "Wallet Connect",
310
+ icon,
311
+ enabled: true,
312
+ ...metadata
313
+ };
314
+ const walletConnectWalletInstance = new WalletConnectWallet({
315
+ metadata: fullMetadata,
316
+ projectId,
317
+ getClient
318
+ });
319
+ unregister = wallets.register(walletConnectWalletInstance);
320
+ walletConnectWalletInstance.updateMetadata({
321
+ ...fullMetadata,
322
+ enabled: true
323
+ });
324
+ return {
325
+ wallet: walletConnectWalletInstance,
326
+ unregister
327
+ };
328
+ }
329
+ export {
330
+ WALLETCONNECT_WALLET_NAME,
331
+ WalletConnectWallet,
332
+ registerWalletConnectWallet
333
+ };
334
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/wallet/index.ts"],
4
+ "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 type { Emitter } from 'mitt';\nimport mitt from 'mitt';\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 { Experimental_BaseClient } from '@haneullabs/haneul/experimental';\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) => Experimental_BaseClient;\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'sui:signTransaction',\n\t'sui:signAndExecuteTransaction',\n\t'sui:signPersonalMessage',\n] as const;\n\n// WalletConnect uses CAIP-2 standard which requires 'sui:' namespace for external protocol compatibility\n// TODO: Register 'haneul' namespace with CASA (Chain Agnostic Standards Alliance) before mainnet launch\nconst SUI_CAIP_CHAIN_IDS = ['sui:devnet', 'sui:testnet', 'sui:localnet', 'sui:mainnet'] as const;\n\nconst SUICaipNetworks: CustomCaipNetwork<'sui'>[] = SUI_CAIP_CHAIN_IDS.map((chain) => {\n\tconst [_, chainId] = chain.split(':');\n\treturn {\n\t\tid: chainId,\n\t\tchainNamespace: 'sui',\n\t\tcaipNetworkId: chain,\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\ticon: 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: SUICaipNetworks,\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});\n\n\t\treturn {\n\t\t\tdigest: response.digest,\n\t\t\tsignature: tx.transaction.signatures[0] ?? '',\n\t\t\tbytes: toBase64(bytes),\n\t\t\teffects: tx.transaction.effects.bcs ? toBase64(tx.transaction.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"],
5
+ "mappings": "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",
6
+ "names": ["accounts"]
7
+ }