@meshconnect/uwc-injected-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.
- package/dist/eip6963-discovery.d.ts +47 -0
- package/dist/eip6963-discovery.d.ts.map +1 -0
- package/dist/eip6963-discovery.js +58 -0
- package/dist/eip6963-discovery.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/injected-connector.d.ts +40 -0
- package/dist/injected-connector.d.ts.map +1 -0
- package/dist/injected-connector.js +183 -0
- package/dist/injected-connector.js.map +1 -0
- package/dist/injected-connector.old.d.ts +44 -0
- package/dist/injected-connector.old.d.ts.map +1 -0
- package/dist/injected-connector.old.js +491 -0
- package/dist/injected-connector.old.js.map +1 -0
- package/dist/providers/evm-provider.d.ts +18 -0
- package/dist/providers/evm-provider.d.ts.map +1 -0
- package/dist/providers/evm-provider.js +86 -0
- package/dist/providers/evm-provider.js.map +1 -0
- package/dist/providers/solana-provider.d.ts +22 -0
- package/dist/providers/solana-provider.d.ts.map +1 -0
- package/dist/providers/solana-provider.js +137 -0
- package/dist/providers/solana-provider.js.map +1 -0
- package/dist/services/connection-manager.d.ts +56 -0
- package/dist/services/connection-manager.d.ts.map +1 -0
- package/dist/services/connection-manager.js +303 -0
- package/dist/services/connection-manager.js.map +1 -0
- package/dist/services/ethereum-transaction-service.d.ts +28 -0
- package/dist/services/ethereum-transaction-service.d.ts.map +1 -0
- package/dist/services/ethereum-transaction-service.js +143 -0
- package/dist/services/ethereum-transaction-service.js.map +1 -0
- package/dist/services/ethereum-wallet-service.d.ts +55 -0
- package/dist/services/ethereum-wallet-service.d.ts.map +1 -0
- package/dist/services/ethereum-wallet-service.js +133 -0
- package/dist/services/ethereum-wallet-service.js.map +1 -0
- package/dist/services/index.d.ts +8 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +8 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/signature-service.d.ts +16 -0
- package/dist/services/signature-service.d.ts.map +1 -0
- package/dist/services/signature-service.js +63 -0
- package/dist/services/signature-service.js.map +1 -0
- package/dist/services/solana-transaction-service.d.ts +14 -0
- package/dist/services/solana-transaction-service.d.ts.map +1 -0
- package/dist/services/solana-transaction-service.js +48 -0
- package/dist/services/solana-transaction-service.js.map +1 -0
- package/dist/services/solana-wallet-service.d.ts +55 -0
- package/dist/services/solana-wallet-service.d.ts.map +1 -0
- package/dist/services/solana-wallet-service.js +129 -0
- package/dist/services/solana-wallet-service.js.map +1 -0
- package/dist/services/storage-service.d.ts +19 -0
- package/dist/services/storage-service.d.ts.map +1 -0
- package/dist/services/storage-service.js +41 -0
- package/dist/services/storage-service.js.map +1 -0
- package/dist/services/transaction-service.d.ts +28 -0
- package/dist/services/transaction-service.d.ts.map +1 -0
- package/dist/services/transaction-service.js +67 -0
- package/dist/services/transaction-service.js.map +1 -0
- package/dist/utils/error-utils.d.ts +6 -0
- package/dist/utils/error-utils.d.ts.map +1 -0
- package/dist/utils/error-utils.js +55 -0
- package/dist/utils/error-utils.js.map +1 -0
- package/dist/wallet-standard-discovery.d.ts +24 -0
- package/dist/wallet-standard-discovery.d.ts.map +1 -0
- package/dist/wallet-standard-discovery.js +74 -0
- package/dist/wallet-standard-discovery.js.map +1 -0
- package/package.json +42 -0
- package/src/eip6963-discovery.ts +103 -0
- package/src/index.ts +7 -0
- package/src/injected-connector.ts +265 -0
- package/src/services/connection-manager.ts +437 -0
- package/src/services/ethereum-transaction-service.ts +196 -0
- package/src/services/ethereum-wallet-service.ts +161 -0
- package/src/services/index.ts +7 -0
- package/src/services/signature-service.ts +84 -0
- package/src/services/solana-transaction-service.ts +68 -0
- package/src/services/solana-wallet-service.ts +161 -0
- package/src/services/storage-service.ts +44 -0
- package/src/services/transaction-service.ts +106 -0
- package/src/utils/error-utils.ts +62 -0
- package/src/wallet-standard-discovery.ts +102 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EIP-6963: Multi Injected Provider Discovery
|
|
3
|
+
* https://eips.ethereum.org/EIPS/eip-6963
|
|
4
|
+
*/
|
|
5
|
+
export interface EthereumProvider {
|
|
6
|
+
request: (args: {
|
|
7
|
+
method: string;
|
|
8
|
+
params?: unknown[];
|
|
9
|
+
}) => Promise<any>;
|
|
10
|
+
on?: (event: string, handler: (...args: any[]) => void) => void;
|
|
11
|
+
removeListener?: (event: string, handler: (...args: any[]) => void) => void;
|
|
12
|
+
}
|
|
13
|
+
export interface EIP6963ProviderInfo {
|
|
14
|
+
uuid: string;
|
|
15
|
+
name: string;
|
|
16
|
+
icon: string;
|
|
17
|
+
rdns: string;
|
|
18
|
+
}
|
|
19
|
+
export interface EIP6963ProviderDetail {
|
|
20
|
+
info: EIP6963ProviderInfo;
|
|
21
|
+
provider: EthereumProvider;
|
|
22
|
+
}
|
|
23
|
+
export interface EIP6963AnnounceProviderEvent extends CustomEvent {
|
|
24
|
+
type: 'eip6963:announceProvider';
|
|
25
|
+
detail: EIP6963ProviderDetail;
|
|
26
|
+
}
|
|
27
|
+
export interface EIP6963RequestProviderEvent extends Event {
|
|
28
|
+
type: 'eip6963:requestProvider';
|
|
29
|
+
}
|
|
30
|
+
export interface DetectedWallet {
|
|
31
|
+
uuid: string;
|
|
32
|
+
name: string;
|
|
33
|
+
icon: string;
|
|
34
|
+
rdns: string;
|
|
35
|
+
provider: EthereumProvider;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Discovers wallets using EIP-6963 protocol
|
|
39
|
+
* @returns Promise that resolves to an array of detected wallets
|
|
40
|
+
*/
|
|
41
|
+
export declare function discoverWallets(): Promise<DetectedWallet[]>;
|
|
42
|
+
/**
|
|
43
|
+
* Gets available wallets by discovering them via EIP-6963
|
|
44
|
+
* This function can be called multiple times to refresh the list
|
|
45
|
+
*/
|
|
46
|
+
export declare function getAvailableWallets(): Promise<DetectedWallet[]>;
|
|
47
|
+
//# sourceMappingURL=eip6963-discovery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eip6963-discovery.d.ts","sourceRoot":"","sources":["../src/eip6963-discovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,gBAAgB;IAE/B,OAAO,EAAE,CAAC,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEvE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;IAE/D,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,IAAI,KAAK,IAAI,CAAA;CAC5E;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,mBAAmB,CAAA;IACzB,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED,MAAM,WAAW,4BAA6B,SAAQ,WAAW;IAC/D,IAAI,EAAE,0BAA0B,CAAA;IAChC,MAAM,EAAE,qBAAqB,CAAA;CAC9B;AAED,MAAM,WAAW,2BAA4B,SAAQ,KAAK;IACxD,IAAI,EAAE,yBAAyB,CAAA;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,gBAAgB,CAAA;CAC3B;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAyCjE;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAQrE"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EIP-6963: Multi Injected Provider Discovery
|
|
3
|
+
* https://eips.ethereum.org/EIPS/eip-6963
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Discovers wallets using EIP-6963 protocol
|
|
7
|
+
* @returns Promise that resolves to an array of detected wallets
|
|
8
|
+
*/
|
|
9
|
+
export async function discoverWallets() {
|
|
10
|
+
// Skip discovery in non-browser environments
|
|
11
|
+
if (typeof window === 'undefined') {
|
|
12
|
+
return [];
|
|
13
|
+
}
|
|
14
|
+
return new Promise(resolve => {
|
|
15
|
+
const detectedWallets = [];
|
|
16
|
+
const timeout = 1000; // Wait up to 1 second for wallets to announce
|
|
17
|
+
// Set up listener for wallet announcements
|
|
18
|
+
const handleAnnouncement = (event) => {
|
|
19
|
+
const announcementEvent = event;
|
|
20
|
+
const { info, provider } = announcementEvent.detail;
|
|
21
|
+
// Check if wallet is already detected (by uuid)
|
|
22
|
+
const existingIndex = detectedWallets.findIndex(w => w.uuid === info.uuid);
|
|
23
|
+
if (existingIndex === -1) {
|
|
24
|
+
detectedWallets.push({
|
|
25
|
+
uuid: info.uuid,
|
|
26
|
+
name: info.name,
|
|
27
|
+
icon: info.icon,
|
|
28
|
+
rdns: info.rdns,
|
|
29
|
+
provider
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
// Listen for wallet announcements
|
|
34
|
+
window.addEventListener('eip6963:announceProvider', handleAnnouncement);
|
|
35
|
+
// Request wallets to announce themselves
|
|
36
|
+
window.dispatchEvent(new Event('eip6963:requestProvider'));
|
|
37
|
+
// Clean up and resolve after timeout
|
|
38
|
+
setTimeout(() => {
|
|
39
|
+
window.removeEventListener('eip6963:announceProvider', handleAnnouncement);
|
|
40
|
+
resolve(detectedWallets);
|
|
41
|
+
}, timeout);
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Gets available wallets by discovering them via EIP-6963
|
|
46
|
+
* This function can be called multiple times to refresh the list
|
|
47
|
+
*/
|
|
48
|
+
export async function getAvailableWallets() {
|
|
49
|
+
try {
|
|
50
|
+
const wallets = await discoverWallets();
|
|
51
|
+
return wallets;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Return empty array if discovery fails
|
|
55
|
+
return [];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=eip6963-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eip6963-discovery.js","sourceRoot":"","sources":["../src/eip6963-discovery.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAwCH;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,6CAA6C;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;QAClC,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,eAAe,GAAqB,EAAE,CAAA;QAC5C,MAAM,OAAO,GAAG,IAAI,CAAA,CAAC,8CAA8C;QAEnE,2CAA2C;QAC3C,MAAM,kBAAkB,GAAG,CAAC,KAAY,EAAE,EAAE;YAC1C,MAAM,iBAAiB,GAAG,KAAqC,CAAA;YAC/D,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,MAAM,CAAA;YAEnD,gDAAgD;YAChD,MAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAA;YAE1E,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,eAAe,CAAC,IAAI,CAAC;oBACnB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,QAAQ;iBACT,CAAC,CAAA;YACJ,CAAC;QACH,CAAC,CAAA;QAED,kCAAkC;QAClC,MAAM,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,CAAA;QAEvE,yCAAyC;QACzC,MAAM,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC,CAAA;QAE1D,qCAAqC;QACrC,UAAU,CAAC,GAAG,EAAE;YACd,MAAM,CAAC,mBAAmB,CAAC,0BAA0B,EAAE,kBAAkB,CAAC,CAAA;YAC1E,OAAO,CAAC,eAAe,CAAC,CAAA;QAC1B,CAAC,EAAE,OAAO,CAAC,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,eAAe,EAAE,CAAA;QACvC,OAAO,OAAO,CAAA;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;QACxC,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export * from './injected-connector';
|
|
2
|
+
export { getAvailableWallets, type DetectedWallet } from './eip6963-discovery';
|
|
3
|
+
export { getSolanaWallets, type WalletStandardInfo, type SolanaWalletWithAdapter } from './wallet-standard-discovery';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,mBAAmB,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EACL,gBAAgB,EAChB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC7B,MAAM,6BAA6B,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,OAAO,EAAE,mBAAmB,EAAuB,MAAM,qBAAqB,CAAA;AAC9E,OAAO,EACL,gBAAgB,EAGjB,MAAM,6BAA6B,CAAA"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Network, ExtensionInjectedProvider, IntegratedBrowserInjectedProvider, Connector, ConnectorResult, SwitchNetworkResult, Namespace, DetectedEIP6963WalletInfo, DetectedSolanaWalletInfo, TransactionRequest, TransactionResult, NetworkRpcMap } from '@meshconnect/uwc-types';
|
|
2
|
+
export declare class InjectedConnector implements Connector {
|
|
3
|
+
private storageService;
|
|
4
|
+
private ethereumService;
|
|
5
|
+
private solanaService;
|
|
6
|
+
private connectionManager;
|
|
7
|
+
private signatureService;
|
|
8
|
+
private transactionService;
|
|
9
|
+
private networkRpcMap;
|
|
10
|
+
constructor(networkRpcMap?: NetworkRpcMap);
|
|
11
|
+
/**
|
|
12
|
+
* Initialize wallet discovery for both Ethereum and Solana
|
|
13
|
+
*/
|
|
14
|
+
private initializeWalletDiscovery;
|
|
15
|
+
/**
|
|
16
|
+
* Get available wallets for a specific namespace
|
|
17
|
+
*/
|
|
18
|
+
getAvailableWallets(namespace: Namespace): Promise<DetectedEIP6963WalletInfo[] | DetectedSolanaWalletInfo[]>;
|
|
19
|
+
/**
|
|
20
|
+
* Connect to a wallet
|
|
21
|
+
*/
|
|
22
|
+
connect(network: Network, provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider): Promise<ConnectorResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Switch to a different network
|
|
25
|
+
*/
|
|
26
|
+
switchNetwork(network: Network, provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider): Promise<SwitchNetworkResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Disconnect from all wallets (only clears local state)
|
|
29
|
+
*/
|
|
30
|
+
disconnect(): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Sign a message with the connected wallet
|
|
33
|
+
*/
|
|
34
|
+
signMessage(message: string, provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Send a transaction with the connected wallet
|
|
37
|
+
*/
|
|
38
|
+
sendTransaction(request: TransactionRequest, provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider): Promise<TransactionResult>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=injected-connector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injected-connector.d.ts","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,SAAS,EACT,yBAAyB,EACzB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACd,MAAM,wBAAwB,CAAA;AAS/B,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,iBAAiB,CAAmB;IAC5C,OAAO,CAAC,gBAAgB,CAAkB;IAC1C,OAAO,CAAC,kBAAkB,CAAoB;IAC9C,OAAO,CAAC,aAAa,CAAe;gBAExB,aAAa,GAAE,aAAkB;IAmB7C;;OAEG;YACW,yBAAyB;IAKvC;;OAEG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,yBAAyB,EAAE,GAAG,wBAAwB,EAAE,CAAC;IAoCpE;;OAEG;IACG,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,eAAe,CAAC;IAmC3B;;OAEG;IACG,aAAa,CACjB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,mBAAmB,CAAC;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,MAAM,CAAC;IAqDlB;;OAEG;IACG,eAAe,CACnB,OAAO,EAAE,kBAAkB,EAC3B,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,iBAAiB,CAAC;CA0C9B"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { EthereumWalletService } from './services/ethereum-wallet-service';
|
|
2
|
+
import { SolanaWalletService } from './services/solana-wallet-service';
|
|
3
|
+
import { StorageService } from './services/storage-service';
|
|
4
|
+
import { ConnectionManager } from './services/connection-manager';
|
|
5
|
+
import { SignatureService } from './services/signature-service';
|
|
6
|
+
import { TransactionService } from './services/transaction-service';
|
|
7
|
+
export class InjectedConnector {
|
|
8
|
+
storageService;
|
|
9
|
+
ethereumService;
|
|
10
|
+
solanaService;
|
|
11
|
+
connectionManager;
|
|
12
|
+
signatureService;
|
|
13
|
+
transactionService;
|
|
14
|
+
networkRpcMap;
|
|
15
|
+
constructor(networkRpcMap = {}) {
|
|
16
|
+
// Store the network RPC map
|
|
17
|
+
this.networkRpcMap = networkRpcMap;
|
|
18
|
+
// Initialize services
|
|
19
|
+
this.storageService = new StorageService();
|
|
20
|
+
this.ethereumService = new EthereumWalletService();
|
|
21
|
+
this.solanaService = new SolanaWalletService(this.storageService);
|
|
22
|
+
this.connectionManager = new ConnectionManager(this.ethereumService, this.solanaService);
|
|
23
|
+
this.signatureService = new SignatureService();
|
|
24
|
+
this.transactionService = new TransactionService(this.networkRpcMap);
|
|
25
|
+
// Initialize wallet discovery
|
|
26
|
+
this.initializeWalletDiscovery();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Initialize wallet discovery for both Ethereum and Solana
|
|
30
|
+
*/
|
|
31
|
+
async initializeWalletDiscovery() {
|
|
32
|
+
await this.ethereumService.initializeDiscovery();
|
|
33
|
+
this.solanaService.initializeDiscovery();
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Get available wallets for a specific namespace
|
|
37
|
+
*/
|
|
38
|
+
async getAvailableWallets(namespace) {
|
|
39
|
+
switch (namespace) {
|
|
40
|
+
case 'eip155': {
|
|
41
|
+
const detectedWallets = this.ethereumService.getDetectedWallets();
|
|
42
|
+
// Re-fetch if no wallets detected
|
|
43
|
+
if (detectedWallets.length === 0) {
|
|
44
|
+
await this.ethereumService.initializeDiscovery();
|
|
45
|
+
}
|
|
46
|
+
// Convert to DetectedWalletInfo format
|
|
47
|
+
return this.ethereumService.getDetectedWallets().map(wallet => ({
|
|
48
|
+
uuid: wallet.uuid,
|
|
49
|
+
name: wallet.name,
|
|
50
|
+
icon: wallet.icon,
|
|
51
|
+
rdns: wallet.rdns
|
|
52
|
+
}));
|
|
53
|
+
}
|
|
54
|
+
case 'solana': {
|
|
55
|
+
// Re-fetch Solana wallets
|
|
56
|
+
this.solanaService.initializeDiscovery();
|
|
57
|
+
// Convert to DetectedWalletInfo format
|
|
58
|
+
return this.solanaService.getDetectedWallets().map(wallet => ({
|
|
59
|
+
uuid: wallet.uuid,
|
|
60
|
+
name: wallet.name,
|
|
61
|
+
features: wallet.features
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
default:
|
|
65
|
+
return [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Connect to a wallet
|
|
70
|
+
*/
|
|
71
|
+
async connect(network, provider) {
|
|
72
|
+
const targetNamespace = network.namespace;
|
|
73
|
+
// Check if we're already connected
|
|
74
|
+
const { address: existingAddress, availableAddresses } = await this.connectionManager.checkExistingConnections(targetNamespace, provider);
|
|
75
|
+
// If already connected, just return the existing connection
|
|
76
|
+
if (existingAddress) {
|
|
77
|
+
this.connectionManager.setCurrentNetworkId(network.id);
|
|
78
|
+
return {
|
|
79
|
+
networkId: network.id,
|
|
80
|
+
address: existingAddress,
|
|
81
|
+
availableAddresses
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Not connected, need to establish new connection
|
|
85
|
+
switch (targetNamespace) {
|
|
86
|
+
case 'eip155':
|
|
87
|
+
return await this.connectionManager.connectEthereum(network, provider);
|
|
88
|
+
case 'solana':
|
|
89
|
+
return await this.connectionManager.connectSolana(network, provider);
|
|
90
|
+
default:
|
|
91
|
+
throw new Error(`Namespace '${network.namespace}' is not implemented yet. Only 'eip155' and 'solana' are currently supported.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Switch to a different network
|
|
96
|
+
*/
|
|
97
|
+
async switchNetwork(network, provider) {
|
|
98
|
+
return await this.connectionManager.switchNetwork(network, provider);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Disconnect from all wallets (only clears local state)
|
|
102
|
+
*/
|
|
103
|
+
async disconnect() {
|
|
104
|
+
this.connectionManager.disconnect();
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Sign a message with the connected wallet
|
|
108
|
+
*/
|
|
109
|
+
async signMessage(message, provider) {
|
|
110
|
+
if (!provider) {
|
|
111
|
+
throw new Error('Provider is required for message signing');
|
|
112
|
+
}
|
|
113
|
+
if (!message) {
|
|
114
|
+
throw new Error('Message is required for signing');
|
|
115
|
+
}
|
|
116
|
+
// Get current network ID to determine namespace
|
|
117
|
+
const currentNetworkId = this.connectionManager.getCurrentNetworkId();
|
|
118
|
+
if (!currentNetworkId) {
|
|
119
|
+
throw new Error('No active network connection');
|
|
120
|
+
}
|
|
121
|
+
// Determine namespace from network ID (format: "namespace:chainId")
|
|
122
|
+
const namespace = currentNetworkId.split(':')[0];
|
|
123
|
+
// Get current address for the namespace
|
|
124
|
+
const currentAddress = this.connectionManager.getCurrentAccount();
|
|
125
|
+
if (namespace === 'eip155') {
|
|
126
|
+
if (!currentAddress) {
|
|
127
|
+
throw new Error('No active wallet address for signing');
|
|
128
|
+
}
|
|
129
|
+
// Get the actual Ethereum provider
|
|
130
|
+
const ethProvider = this.ethereumService.getConnectedProvider();
|
|
131
|
+
if (!ethProvider) {
|
|
132
|
+
throw new Error('No connected Ethereum provider');
|
|
133
|
+
}
|
|
134
|
+
return await this.signatureService.signEthereumMessage(message, currentAddress, ethProvider);
|
|
135
|
+
}
|
|
136
|
+
else if (namespace === 'solana') {
|
|
137
|
+
// Get the actual Solana adapter
|
|
138
|
+
const solanaAdapter = this.solanaService.getConnectedAdapter();
|
|
139
|
+
if (!solanaAdapter) {
|
|
140
|
+
throw new Error('No connected Solana adapter');
|
|
141
|
+
}
|
|
142
|
+
return await this.signatureService.signSolanaMessage(message, solanaAdapter);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
throw new Error(`Signing not supported for namespace: ${namespace}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Send a transaction with the connected wallet
|
|
150
|
+
*/
|
|
151
|
+
async sendTransaction(request, provider) {
|
|
152
|
+
if (!provider) {
|
|
153
|
+
throw new Error('Provider is required for sending transactions');
|
|
154
|
+
}
|
|
155
|
+
// Get current network ID to determine namespace
|
|
156
|
+
const currentNetworkId = this.connectionManager.getCurrentNetworkId();
|
|
157
|
+
if (!currentNetworkId) {
|
|
158
|
+
throw new Error('No active network connection');
|
|
159
|
+
}
|
|
160
|
+
// Determine namespace from network ID (format: "namespace:chainId")
|
|
161
|
+
const namespace = currentNetworkId.split(':')[0];
|
|
162
|
+
if (namespace === 'eip155') {
|
|
163
|
+
// Get the actual Ethereum provider
|
|
164
|
+
const ethProvider = this.ethereumService.getConnectedProvider();
|
|
165
|
+
if (!ethProvider) {
|
|
166
|
+
throw new Error('No connected Ethereum provider');
|
|
167
|
+
}
|
|
168
|
+
return await this.transactionService.sendTransaction(request, namespace, ethProvider);
|
|
169
|
+
}
|
|
170
|
+
else if (namespace === 'solana') {
|
|
171
|
+
// Get the actual Solana adapter
|
|
172
|
+
const solanaAdapter = this.solanaService.getConnectedAdapter();
|
|
173
|
+
if (!solanaAdapter) {
|
|
174
|
+
throw new Error('No connected Solana adapter');
|
|
175
|
+
}
|
|
176
|
+
return await this.transactionService.sendTransaction(request, namespace, solanaAdapter);
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
throw new Error(`Transactions not supported for namespace: ${namespace}`);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=injected-connector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injected-connector.js","sourceRoot":"","sources":["../src/injected-connector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { Network, ExtensionInjectedProvider, IntegratedBrowserInjectedProvider, Connector, ConnectorResult, SwitchNetworkResult, Namespace, DetectedWalletInfo } from '@meshconnect/uwc-types';
|
|
2
|
+
export declare class InjectedConnector implements Connector {
|
|
3
|
+
private detectedEIP6963Wallets;
|
|
4
|
+
private detectedSolanaWallets;
|
|
5
|
+
private connectedProviders;
|
|
6
|
+
constructor();
|
|
7
|
+
/**
|
|
8
|
+
* Discovers available wallets
|
|
9
|
+
*/
|
|
10
|
+
private initializeWalletDiscovery;
|
|
11
|
+
/**
|
|
12
|
+
* Detect available Solana wallets in the browser
|
|
13
|
+
*/
|
|
14
|
+
private detectSolanaWallets;
|
|
15
|
+
/**
|
|
16
|
+
* Get EVM provider - first try EIP-6963 discovered wallets, then fall back to window.ethereum
|
|
17
|
+
*/
|
|
18
|
+
private getEVMProvider;
|
|
19
|
+
/**
|
|
20
|
+
* Get Solana provider based on metadata
|
|
21
|
+
*/
|
|
22
|
+
private getSolanaProvider;
|
|
23
|
+
/**
|
|
24
|
+
* Get available wallets for a specific namespace
|
|
25
|
+
* @param namespace The namespace to check for available wallets
|
|
26
|
+
* @returns Promise that resolves to detected wallets for the namespace
|
|
27
|
+
*/
|
|
28
|
+
getAvailableWallets(namespace: Namespace): Promise<DetectedWalletInfo[]>;
|
|
29
|
+
connect(network: Network, provider: ExtensionInjectedProvider | IntegratedBrowserInjectedProvider): Promise<ConnectorResult>;
|
|
30
|
+
switchNetwork(network: Network): Promise<SwitchNetworkResult>;
|
|
31
|
+
/**
|
|
32
|
+
* Connect to EIP155 in the background (when primary namespace is Solana)
|
|
33
|
+
*/
|
|
34
|
+
private connectEIP155InBackground;
|
|
35
|
+
/**
|
|
36
|
+
* Connect to Solana in the background (when primary namespace is EIP155)
|
|
37
|
+
*/
|
|
38
|
+
private connectSolanaInBackground;
|
|
39
|
+
/**
|
|
40
|
+
* Disconnect from all providers
|
|
41
|
+
*/
|
|
42
|
+
disconnect(): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=injected-connector.old.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"injected-connector.old.d.ts","sourceRoot":"","sources":["../src/injected-connector.old.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,yBAAyB,EACzB,iCAAiC,EACjC,SAAS,EACT,eAAe,EACf,mBAAmB,EAEnB,SAAS,EACT,kBAAkB,EACnB,MAAM,wBAAwB,CAAA;AAY/B,qBAAa,iBAAkB,YAAW,SAAS;IACjD,OAAO,CAAC,sBAAsB,CAA8B;IAC5D,OAAO,CAAC,qBAAqB,CAA6B;IAC1D,OAAO,CAAC,kBAAkB,CAAiC;;IAO3D;;OAEG;YACW,yBAAyB;IAQvC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAuE3B;;OAEG;IACH,OAAO,CAAC,cAAc;IAuBtB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAsEzB;;;;OAIG;IACG,mBAAmB,CACvB,SAAS,EAAE,SAAS,GACnB,OAAO,CAAC,kBAAkB,EAAE,CAAC;IA6B1B,OAAO,CACX,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,yBAAyB,GAAG,iCAAiC,GACtE,OAAO,CAAC,eAAe,CAAC;IAiLrB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAkHnE;;OAEG;YACW,yBAAyB;IAwCvC;;OAEG;YACW,yBAAyB;IAsCvC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAIlC"}
|