@meshconnect/uwc-wallet-connect-connector 0.2.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.
Files changed (56) hide show
  1. package/dist/index.d.ts +2 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +2 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/services/connection-service.d.ts +60 -0
  6. package/dist/services/connection-service.d.ts.map +1 -0
  7. package/dist/services/connection-service.js +235 -0
  8. package/dist/services/connection-service.js.map +1 -0
  9. package/dist/services/network-switch-service.d.ts +16 -0
  10. package/dist/services/network-switch-service.d.ts.map +1 -0
  11. package/dist/services/network-switch-service.js +71 -0
  12. package/dist/services/network-switch-service.js.map +1 -0
  13. package/dist/services/signature-service.d.ts +15 -0
  14. package/dist/services/signature-service.d.ts.map +1 -0
  15. package/dist/services/signature-service.js +102 -0
  16. package/dist/services/signature-service.js.map +1 -0
  17. package/dist/services/transaction-service.d.ts +33 -0
  18. package/dist/services/transaction-service.d.ts.map +1 -0
  19. package/dist/services/transaction-service.js +287 -0
  20. package/dist/services/transaction-service.js.map +1 -0
  21. package/dist/services/walletconnect-client.d.ts +28 -0
  22. package/dist/services/walletconnect-client.d.ts.map +1 -0
  23. package/dist/services/walletconnect-client.js +92 -0
  24. package/dist/services/walletconnect-client.js.map +1 -0
  25. package/dist/utils/account-utils.d.ts +41 -0
  26. package/dist/utils/account-utils.d.ts.map +1 -0
  27. package/dist/utils/account-utils.js +81 -0
  28. package/dist/utils/account-utils.js.map +1 -0
  29. package/dist/utils/encoding-utils.d.ts +6 -0
  30. package/dist/utils/encoding-utils.d.ts.map +1 -0
  31. package/dist/utils/encoding-utils.js +27 -0
  32. package/dist/utils/encoding-utils.js.map +1 -0
  33. package/dist/utils/error-utils.d.ts +6 -0
  34. package/dist/utils/error-utils.d.ts.map +1 -0
  35. package/dist/utils/error-utils.js +55 -0
  36. package/dist/utils/error-utils.js.map +1 -0
  37. package/dist/utils/solana-transactions.d.ts +4 -0
  38. package/dist/utils/solana-transactions.d.ts.map +1 -0
  39. package/dist/utils/solana-transactions.js +15 -0
  40. package/dist/utils/solana-transactions.js.map +1 -0
  41. package/dist/wallet-connect-connector.d.ts +17 -0
  42. package/dist/wallet-connect-connector.d.ts.map +1 -0
  43. package/dist/wallet-connect-connector.js +47 -0
  44. package/dist/wallet-connect-connector.js.map +1 -0
  45. package/package.json +41 -0
  46. package/src/index.ts +1 -0
  47. package/src/services/connection-service.ts +304 -0
  48. package/src/services/network-switch-service.ts +83 -0
  49. package/src/services/signature-service.ts +128 -0
  50. package/src/services/transaction-service.ts +397 -0
  51. package/src/services/walletconnect-client.ts +103 -0
  52. package/src/utils/account-utils.ts +116 -0
  53. package/src/utils/encoding-utils.ts +32 -0
  54. package/src/utils/error-utils.ts +62 -0
  55. package/src/utils/solana-transactions.ts +24 -0
  56. package/src/wallet-connect-connector.ts +83 -0
@@ -0,0 +1,2 @@
1
+ export * from './wallet-connect-connector';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from './wallet-connect-connector';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA"}
@@ -0,0 +1,60 @@
1
+ import type { SessionTypes } from '@walletconnect/types';
2
+ import type { Network, ConnectorResult, WalletConnectProvider } from '@meshconnect/uwc-types';
3
+ import { WalletConnectClient } from './walletconnect-client';
4
+ /**
5
+ * Service for handling WalletConnect connections
6
+ */
7
+ export declare class ConnectionService {
8
+ private walletConnectClient;
9
+ private currentSession;
10
+ private connectionUri;
11
+ private activeNetwork;
12
+ private activeAddress;
13
+ constructor(walletConnectClient: WalletConnectClient);
14
+ /**
15
+ * Connect to a wallet via WalletConnect
16
+ * This will store the URI and wait for approval
17
+ */
18
+ connect(network: Network, provider: WalletConnectProvider): Promise<ConnectorResult>;
19
+ /**
20
+ * Get the current connection URI
21
+ */
22
+ getConnectionURI(): string | null;
23
+ /**
24
+ * Build WalletConnect namespaces from provider's supported network IDs
25
+ */
26
+ private buildNamespacesFromProvider;
27
+ /**
28
+ * Extract addresses from a WalletConnect session
29
+ */
30
+ private extractAddresses;
31
+ /**
32
+ * Get current session
33
+ */
34
+ getSession(): SessionTypes.Struct | null;
35
+ /**
36
+ * Set session (for restoration)
37
+ */
38
+ setSession(session: SessionTypes.Struct): void;
39
+ /**
40
+ * Get active network
41
+ */
42
+ getActiveNetwork(): Network | null;
43
+ /**
44
+ * Set active network (for network switching)
45
+ */
46
+ setActiveNetwork(network: Network): void;
47
+ /**
48
+ * Get active address
49
+ */
50
+ getActiveAddress(): string | null;
51
+ /**
52
+ * Set active address (for network/address switching)
53
+ */
54
+ setActiveAddress(address: string): void;
55
+ /**
56
+ * Disconnect current session
57
+ */
58
+ disconnect(): Promise<void>;
59
+ }
60
+ //# sourceMappingURL=connection-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-service.d.ts","sourceRoot":"","sources":["../../src/services/connection-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,KAAK,EACV,OAAO,EAEP,eAAe,EACf,qBAAqB,EAEtB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAI5D;;GAEG;AACH,qBAAa,iBAAiB;IAMhB,OAAO,CAAC,mBAAmB;IALvC,OAAO,CAAC,cAAc,CAAmC;IACzD,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,aAAa,CAAuB;IAC5C,OAAO,CAAC,aAAa,CAAsB;gBAEvB,mBAAmB,EAAE,mBAAmB;IAE5D;;;OAGG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC;IA0D3B;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAqGnC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+CxB;;OAEG;IACH,UAAU,IAAI,YAAY,CAAC,MAAM,GAAG,IAAI;IAIxC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,MAAM,GAAG,IAAI;IAI9C;;OAEG;IACH,gBAAgB,IAAI,OAAO,GAAG,IAAI;IAIlC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAIxC;;OAEG;IACH,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAIjC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CASlC"}
@@ -0,0 +1,235 @@
1
+ import { WalletConnectClient } from './walletconnect-client';
2
+ import { parseAccount, getNamespaceFromNetworkId } from '../utils/account-utils';
3
+ import { parseError } from '../utils/error-utils';
4
+ /**
5
+ * Service for handling WalletConnect connections
6
+ */
7
+ export class ConnectionService {
8
+ walletConnectClient;
9
+ currentSession = null;
10
+ connectionUri = null;
11
+ activeNetwork = null;
12
+ activeAddress = null;
13
+ constructor(walletConnectClient) {
14
+ this.walletConnectClient = walletConnectClient;
15
+ }
16
+ /**
17
+ * Connect to a wallet via WalletConnect
18
+ * This will store the URI and wait for approval
19
+ */
20
+ async connect(network, provider) {
21
+ try {
22
+ const client = await this.walletConnectClient.getClient();
23
+ // Disconnect any existing sessions first
24
+ await this.walletConnectClient.disconnectAll();
25
+ // Build namespaces from the provider's supported network IDs
26
+ const optionalNamespaces = this.buildNamespacesFromProvider(provider);
27
+ // Initiate connection - this starts the connection process
28
+ const connectResult = await client.connect({
29
+ optionalNamespaces
30
+ });
31
+ if (!connectResult.uri) {
32
+ throw new Error('No connection URI generated');
33
+ }
34
+ // Store the URI immediately so it can be retrieved via getConnectionURI
35
+ this.connectionUri = connectResult.uri;
36
+ // Start the approval process in the background
37
+ // The main thread will poll for the URI while this waits for approval
38
+ const approvalPromise = connectResult.approval();
39
+ try {
40
+ // Wait for approval (this resolves when user approves in wallet)
41
+ const session = await approvalPromise;
42
+ this.currentSession = session;
43
+ this.connectionUri = null; // Clear URI after connection
44
+ // Extract addresses from session
45
+ const { address, availableAddresses } = this.extractAddresses(session, network, provider);
46
+ // Store the active network and address
47
+ this.activeNetwork = network;
48
+ this.activeAddress = address;
49
+ return {
50
+ networkId: network.id,
51
+ address,
52
+ availableAddresses
53
+ };
54
+ }
55
+ catch (approvalError) {
56
+ this.connectionUri = null; // Clear URI on error
57
+ throw approvalError;
58
+ }
59
+ }
60
+ catch (error) {
61
+ this.connectionUri = null; // Clear URI on error
62
+ throw parseError(error);
63
+ }
64
+ }
65
+ /**
66
+ * Get the current connection URI
67
+ */
68
+ getConnectionURI() {
69
+ return this.connectionUri;
70
+ }
71
+ /**
72
+ * Build WalletConnect namespaces from provider's supported network IDs
73
+ */
74
+ buildNamespacesFromProvider(provider) {
75
+ const namespaces = {};
76
+ // Group networks by namespace
77
+ const namespaceGroups = {};
78
+ provider.supportedNetworkIds.forEach(networkId => {
79
+ const namespace = getNamespaceFromNetworkId(networkId);
80
+ if (!namespaceGroups[namespace]) {
81
+ namespaceGroups[namespace] = [];
82
+ }
83
+ namespaceGroups[namespace].push(networkId);
84
+ });
85
+ // Build namespaces for each group
86
+ Object.entries(namespaceGroups).forEach(([namespace, chains]) => {
87
+ switch (namespace) {
88
+ case 'eip155':
89
+ namespaces['eip155'] = {
90
+ chains,
91
+ methods: [
92
+ 'personal_sign',
93
+ 'eth_sign',
94
+ 'eth_signTypedData',
95
+ 'eth_signTypedData_v4',
96
+ 'eth_sendTransaction',
97
+ 'eth_sendRawTransaction',
98
+ 'eth_accounts',
99
+ 'eth_requestAccounts',
100
+ 'wallet_switchEthereumChain',
101
+ 'wallet_addEthereumChain'
102
+ ],
103
+ events: ['chainChanged', 'accountsChanged']
104
+ };
105
+ break;
106
+ case 'solana':
107
+ namespaces['solana'] = {
108
+ chains,
109
+ methods: [
110
+ 'solana_signMessage',
111
+ 'solana_signTransaction',
112
+ 'solana_signAndSendTransaction',
113
+ 'solana_getAccounts',
114
+ 'solana_requestAccounts'
115
+ ],
116
+ events: []
117
+ };
118
+ break;
119
+ case 'bip122':
120
+ namespaces['bip122'] = {
121
+ chains,
122
+ methods: [
123
+ 'sendTransfer',
124
+ 'getAccountAddresses',
125
+ 'signPsbt',
126
+ 'signMessage'
127
+ ],
128
+ events: ['bip122_addressesChanged']
129
+ };
130
+ break;
131
+ case 'tron':
132
+ namespaces['tron'] = {
133
+ chains,
134
+ methods: ['tron_signTransaction', 'tron_signMessage'],
135
+ events: []
136
+ };
137
+ break;
138
+ default:
139
+ // For unknown namespaces, include basic methods
140
+ namespaces[namespace] = {
141
+ chains,
142
+ methods: [],
143
+ events: []
144
+ };
145
+ }
146
+ });
147
+ return namespaces;
148
+ }
149
+ /**
150
+ * Extract addresses from a WalletConnect session
151
+ */
152
+ extractAddresses(session, network, provider) {
153
+ const availableAddresses = [];
154
+ let primaryAddress = '';
155
+ // Extract addresses from all namespaces
156
+ Object.entries(session.namespaces).forEach(([, data]) => {
157
+ data.accounts.forEach((account) => {
158
+ try {
159
+ const { networkId, address } = parseAccount(account);
160
+ // Only include addresses for networks that are supported by the provider
161
+ if (provider.supportedNetworkIds.includes(networkId)) {
162
+ availableAddresses.push({
163
+ address,
164
+ networkId
165
+ });
166
+ // Set the primary address based on the requested network
167
+ if (networkId === network.id && !primaryAddress) {
168
+ primaryAddress = address;
169
+ }
170
+ }
171
+ }
172
+ catch {
173
+ // Skip invalid account formats
174
+ }
175
+ });
176
+ });
177
+ // If no address for the specific network, use the first available
178
+ if (!primaryAddress && availableAddresses.length > 0) {
179
+ primaryAddress = availableAddresses[0]?.address || '';
180
+ }
181
+ if (!primaryAddress) {
182
+ throw new Error('No addresses found in session');
183
+ }
184
+ return { address: primaryAddress, availableAddresses };
185
+ }
186
+ /**
187
+ * Get current session
188
+ */
189
+ getSession() {
190
+ return this.currentSession;
191
+ }
192
+ /**
193
+ * Set session (for restoration)
194
+ */
195
+ setSession(session) {
196
+ this.currentSession = session;
197
+ }
198
+ /**
199
+ * Get active network
200
+ */
201
+ getActiveNetwork() {
202
+ return this.activeNetwork;
203
+ }
204
+ /**
205
+ * Set active network (for network switching)
206
+ */
207
+ setActiveNetwork(network) {
208
+ this.activeNetwork = network;
209
+ }
210
+ /**
211
+ * Get active address
212
+ */
213
+ getActiveAddress() {
214
+ return this.activeAddress;
215
+ }
216
+ /**
217
+ * Set active address (for network/address switching)
218
+ */
219
+ setActiveAddress(address) {
220
+ this.activeAddress = address;
221
+ }
222
+ /**
223
+ * Disconnect current session
224
+ */
225
+ async disconnect() {
226
+ if (this.currentSession) {
227
+ await this.walletConnectClient.disconnect(this.currentSession.topic);
228
+ this.currentSession = null;
229
+ }
230
+ this.connectionUri = null;
231
+ this.activeNetwork = null;
232
+ this.activeAddress = null;
233
+ }
234
+ }
235
+ //# sourceMappingURL=connection-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-service.js","sourceRoot":"","sources":["../../src/services/connection-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Network, SwitchNetworkResult } from '@meshconnect/uwc-types';
2
+ import { WalletConnectClient } from './walletconnect-client';
3
+ import { ConnectionService } from './connection-service';
4
+ /**
5
+ * Service for handling network switching in WalletConnect
6
+ */
7
+ export declare class NetworkSwitchService {
8
+ private walletConnectClient;
9
+ private connectionService;
10
+ constructor(walletConnectClient: WalletConnectClient, connectionService: ConnectionService);
11
+ /**
12
+ * Switch to a different network
13
+ */
14
+ switchNetwork(network: Network): Promise<SwitchNetworkResult>;
15
+ }
16
+ //# sourceMappingURL=network-switch-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-switch-service.d.ts","sourceRoot":"","sources":["../../src/services/network-switch-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAIxD;;GAEG;AACH,qBAAa,oBAAoB;IAE7B,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,iBAAiB;gBADjB,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iBAAiB;IAG9C;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAgEpE"}
@@ -0,0 +1,71 @@
1
+ import { WalletConnectClient } from './walletconnect-client';
2
+ import { ConnectionService } from './connection-service';
3
+ import { parseAccount } from '../utils/account-utils';
4
+ import { parseError } from '../utils/error-utils';
5
+ /**
6
+ * Service for handling network switching in WalletConnect
7
+ */
8
+ export class NetworkSwitchService {
9
+ walletConnectClient;
10
+ connectionService;
11
+ constructor(walletConnectClient, connectionService) {
12
+ this.walletConnectClient = walletConnectClient;
13
+ this.connectionService = connectionService;
14
+ }
15
+ /**
16
+ * Switch to a different network
17
+ */
18
+ async switchNetwork(network) {
19
+ try {
20
+ const session = this.connectionService.getSession();
21
+ if (!session) {
22
+ throw new Error('No active session. Please connect first.');
23
+ }
24
+ const client = await this.walletConnectClient.getClient();
25
+ // Check if the requested network is available in the session
26
+ const networkChain = network.id;
27
+ const namespace = network.namespace;
28
+ if (!session.namespaces[namespace]?.chains?.includes(networkChain)) {
29
+ throw new Error(`Network ${networkChain} is not available in the current session`);
30
+ }
31
+ // For WalletConnect, we can't directly switch networks
32
+ // The wallet controls the active network
33
+ // We can only request methods on specific chains
34
+ // Return the current address for the requested network
35
+ const accounts = session.namespaces[namespace]?.accounts || [];
36
+ const matchingAccount = accounts.find(account => account.startsWith(networkChain));
37
+ if (!matchingAccount) {
38
+ throw new Error(`No account found for network ${networkChain}`);
39
+ }
40
+ // Extract address from account string
41
+ const { address } = parseAccount(matchingAccount);
42
+ // Update the active network and address in the connection service
43
+ this.connectionService.setActiveNetwork(network);
44
+ this.connectionService.setActiveAddress(address);
45
+ // Emit a chainChanged event if switching within the same namespace
46
+ if (namespace === 'eip155') {
47
+ try {
48
+ await client.emit({
49
+ topic: session.topic,
50
+ event: {
51
+ name: 'chainChanged',
52
+ data: networkChain
53
+ },
54
+ chainId: networkChain
55
+ });
56
+ }
57
+ catch {
58
+ // Some wallets may not support this event
59
+ }
60
+ }
61
+ return {
62
+ networkId: network.id,
63
+ address
64
+ };
65
+ }
66
+ catch (error) {
67
+ throw parseError(error);
68
+ }
69
+ }
70
+ }
71
+ //# sourceMappingURL=network-switch-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"network-switch-service.js","sourceRoot":"","sources":["../../src/services/network-switch-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAErB;IACA;IAFV,YACU,mBAAwC,EACxC,iBAAoC;QADpC,wBAAmB,GAAnB,mBAAmB,CAAqB;QACxC,sBAAiB,GAAjB,iBAAiB,CAAmB;IAC3C,CAAC;IAEJ;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,OAAgB;QAClC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAA;YACnD,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;YAC7D,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,CAAA;YAEzD,6DAA6D;YAC7D,MAAM,YAAY,GAAG,OAAO,CAAC,EAAE,CAAA;YAC/B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,CAAA;YAEnC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnE,MAAM,IAAI,KAAK,CACb,WAAW,YAAY,0CAA0C,CAClE,CAAA;YACH,CAAC;YAED,uDAAuD;YACvD,yCAAyC;YACzC,iDAAiD;YACjD,uDAAuD;YAEvD,MAAM,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAI,EAAE,CAAA;YAC9D,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAC9C,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,CACjC,CAAA;YAED,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,MAAM,IAAI,KAAK,CAAC,gCAAgC,YAAY,EAAE,CAAC,CAAA;YACjE,CAAC;YAED,sCAAsC;YACtC,MAAM,EAAE,OAAO,EAAE,GAAG,YAAY,CAAC,eAAe,CAAC,CAAA;YAEjD,kEAAkE;YAClE,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAChD,IAAI,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAEhD,mEAAmE;YACnE,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;gBAC3B,IAAI,CAAC;oBACH,MAAM,MAAM,CAAC,IAAI,CAAC;wBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;wBACpB,KAAK,EAAE;4BACL,IAAI,EAAE,cAAc;4BACpB,IAAI,EAAE,YAAY;yBACnB;wBACD,OAAO,EAAE,YAAY;qBACtB,CAAC,CAAA;gBACJ,CAAC;gBAAC,MAAM,CAAC;oBACP,0CAA0C;gBAC5C,CAAC;YACH,CAAC;YAED,OAAO;gBACL,SAAS,EAAE,OAAO,CAAC,EAAE;gBACrB,OAAO;aACR,CAAA;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,15 @@
1
+ import { WalletConnectClient } from './walletconnect-client';
2
+ import { ConnectionService } from './connection-service';
3
+ /**
4
+ * Service for handling message signing in WalletConnect
5
+ */
6
+ export declare class SignatureService {
7
+ private walletConnectClient;
8
+ private connectionService;
9
+ constructor(walletConnectClient: WalletConnectClient, connectionService: ConnectionService);
10
+ /**
11
+ * Sign a message with the connected wallet
12
+ */
13
+ signMessage(message: string): Promise<string>;
14
+ }
15
+ //# sourceMappingURL=signature-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature-service.d.ts","sourceRoot":"","sources":["../../src/services/signature-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAKxD;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,iBAAiB;gBADjB,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iBAAiB;IAG9C;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA6GpD"}
@@ -0,0 +1,102 @@
1
+ import { WalletConnectClient } from './walletconnect-client';
2
+ import { ConnectionService } from './connection-service';
3
+ import { findAccountInNamespaces, parseAccount } from '../utils/account-utils';
4
+ import { base58Encode } from '../utils/encoding-utils';
5
+ import { parseError } from '../utils/error-utils';
6
+ /**
7
+ * Service for handling message signing in WalletConnect
8
+ */
9
+ export class SignatureService {
10
+ walletConnectClient;
11
+ connectionService;
12
+ constructor(walletConnectClient, connectionService) {
13
+ this.walletConnectClient = walletConnectClient;
14
+ this.connectionService = connectionService;
15
+ }
16
+ /**
17
+ * Sign a message with the connected wallet
18
+ */
19
+ async signMessage(message) {
20
+ try {
21
+ const session = this.connectionService.getSession();
22
+ if (!session) {
23
+ throw new Error('No active session. Please connect first.');
24
+ }
25
+ const activeNetwork = this.connectionService.getActiveNetwork();
26
+ const activeAddress = this.connectionService.getActiveAddress();
27
+ if (!activeNetwork) {
28
+ throw new Error('No active network. Please connect first.');
29
+ }
30
+ if (!activeAddress) {
31
+ throw new Error('No active address. Please connect first.');
32
+ }
33
+ const client = await this.walletConnectClient.getClient();
34
+ // Find the account that matches the active network and address
35
+ const targetAccount = findAccountInNamespaces(session.namespaces, activeNetwork.id, activeAddress);
36
+ if (!targetAccount) {
37
+ throw new Error(`No account found for network ${activeNetwork.id} and address ${activeAddress}`);
38
+ }
39
+ const { namespace: accountNamespace, chainId, address } = parseAccount(targetAccount);
40
+ // Determine the signing method based on namespace
41
+ let method;
42
+ let params;
43
+ switch (accountNamespace) {
44
+ case 'eip155':
45
+ method = 'personal_sign';
46
+ // For personal_sign: [message, address]
47
+ params = [message, address];
48
+ break;
49
+ case 'solana': {
50
+ method = 'solana_signMessage';
51
+ // For Solana: message needs to be base58 encoded
52
+ const base58Message = base58Encode(message);
53
+ // For Solana, params is an object, not an array
54
+ params = {
55
+ message: base58Message,
56
+ pubkey: address
57
+ };
58
+ break;
59
+ }
60
+ case 'bip122':
61
+ method = 'signMessage';
62
+ params = [
63
+ {
64
+ message,
65
+ address
66
+ }
67
+ ];
68
+ break;
69
+ case 'tron':
70
+ method = 'tron_signMessage';
71
+ params = [
72
+ {
73
+ message,
74
+ address
75
+ }
76
+ ];
77
+ break;
78
+ default:
79
+ throw new Error(`Signing not supported for namespace: ${accountNamespace}`);
80
+ }
81
+ // Make the signing request
82
+ const result = await client.request({
83
+ topic: session.topic,
84
+ chainId: `${accountNamespace}:${chainId}`,
85
+ request: {
86
+ method,
87
+ params
88
+ }
89
+ });
90
+ // Handle different response formats
91
+ if (accountNamespace === 'solana') {
92
+ // Solana returns an object with a signature property
93
+ return result.signature;
94
+ }
95
+ return result;
96
+ }
97
+ catch (error) {
98
+ throw parseError(error);
99
+ }
100
+ }
101
+ }
102
+ //# sourceMappingURL=signature-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signature-service.js","sourceRoot":"","sources":["../../src/services/signature-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { TransactionRequest, TransactionResult, NetworkRpcMap } from '@meshconnect/uwc-types';
2
+ import { WalletConnectClient } from './walletconnect-client';
3
+ import { ConnectionService } from './connection-service';
4
+ /**
5
+ * Service for handling transactions in WalletConnect
6
+ */
7
+ export declare class TransactionService {
8
+ private walletConnectClient;
9
+ private connectionService;
10
+ private networkRpcMap;
11
+ constructor(walletConnectClient: WalletConnectClient, connectionService: ConnectionService, networkRpcMap?: NetworkRpcMap);
12
+ /**
13
+ * Send a transaction with the connected wallet
14
+ */
15
+ sendTransaction(request: TransactionRequest): Promise<TransactionResult>;
16
+ /**
17
+ * Send an Ethereum transaction
18
+ */
19
+ private sendEthereumTransaction;
20
+ /**
21
+ * Send a Solana transaction
22
+ */
23
+ private sendSolanaTransaction;
24
+ /**
25
+ * Send native token transfer (ETH, BNB, MATIC, etc.)
26
+ */
27
+ private sendNativeTransfer;
28
+ /**
29
+ * Send smart contract transaction (including ERC-20 transfers)
30
+ */
31
+ private sendContractCall;
32
+ }
33
+ //# sourceMappingURL=transaction-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction-service.d.ts","sourceRoot":"","sources":["../../src/services/transaction-service.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EAKjB,aAAa,EACd,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAQxD;;GAEG;AACH,qBAAa,kBAAkB;IAE3B,OAAO,CAAC,mBAAmB;IAC3B,OAAO,CAAC,iBAAiB;IACzB,OAAO,CAAC,aAAa;gBAFb,mBAAmB,EAAE,mBAAmB,EACxC,iBAAiB,EAAE,iBAAiB,EACpC,aAAa,GAAE,aAAkB;IAG3C;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC;IA2C7B;;OAEG;YACW,uBAAuB;IAwCrC;;OAEG;YACW,qBAAqB;IAmHnC;;OAEG;YACW,kBAAkB;IAkEhC;;OAEG;YACW,gBAAgB;CA8E/B"}