@meshconnect/uwc-core 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 (60) hide show
  1. package/dist/connection-manager.d.ts +18 -0
  2. package/dist/connection-manager.d.ts.map +1 -0
  3. package/dist/connection-manager.js +54 -0
  4. package/dist/connection-manager.js.map +1 -0
  5. package/dist/index.d.ts +4 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +4 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/managers/event-manager.d.ts +10 -0
  10. package/dist/managers/event-manager.d.ts.map +1 -0
  11. package/dist/managers/event-manager.js +19 -0
  12. package/dist/managers/event-manager.js.map +1 -0
  13. package/dist/managers/index.d.ts +3 -0
  14. package/dist/managers/index.d.ts.map +1 -0
  15. package/dist/managers/index.js +3 -0
  16. package/dist/managers/index.js.map +1 -0
  17. package/dist/managers/session-manager.d.ts +11 -0
  18. package/dist/managers/session-manager.d.ts.map +1 -0
  19. package/dist/managers/session-manager.js +36 -0
  20. package/dist/managers/session-manager.js.map +1 -0
  21. package/dist/services/connection-service.d.ts +24 -0
  22. package/dist/services/connection-service.d.ts.map +1 -0
  23. package/dist/services/connection-service.js +176 -0
  24. package/dist/services/connection-service.js.map +1 -0
  25. package/dist/services/index.d.ts +4 -0
  26. package/dist/services/index.d.ts.map +1 -0
  27. package/dist/services/index.js +4 -0
  28. package/dist/services/index.js.map +1 -0
  29. package/dist/services/network-switch-service.d.ts +20 -0
  30. package/dist/services/network-switch-service.d.ts.map +1 -0
  31. package/dist/services/network-switch-service.js +130 -0
  32. package/dist/services/network-switch-service.js.map +1 -0
  33. package/dist/services/signature-service.d.ts +18 -0
  34. package/dist/services/signature-service.d.ts.map +1 -0
  35. package/dist/services/signature-service.js +53 -0
  36. package/dist/services/signature-service.js.map +1 -0
  37. package/dist/services/transaction-service.d.ts +18 -0
  38. package/dist/services/transaction-service.d.ts.map +1 -0
  39. package/dist/services/transaction-service.js +53 -0
  40. package/dist/services/transaction-service.js.map +1 -0
  41. package/dist/universal-wallet-connector.d.ts +56 -0
  42. package/dist/universal-wallet-connector.d.ts.map +1 -0
  43. package/dist/universal-wallet-connector.js +302 -0
  44. package/dist/universal-wallet-connector.js.map +1 -0
  45. package/dist/utils/network-rpc-utils.d.ts +10 -0
  46. package/dist/utils/network-rpc-utils.d.ts.map +1 -0
  47. package/dist/utils/network-rpc-utils.js +20 -0
  48. package/dist/utils/network-rpc-utils.js.map +1 -0
  49. package/package.json +36 -0
  50. package/src/index.ts +3 -0
  51. package/src/managers/event-manager.ts +25 -0
  52. package/src/managers/index.ts +2 -0
  53. package/src/managers/session-manager.ts +43 -0
  54. package/src/services/connection-service.ts +248 -0
  55. package/src/services/index.ts +3 -0
  56. package/src/services/network-switch-service.ts +182 -0
  57. package/src/services/signature-service.ts +77 -0
  58. package/src/services/transaction-service.ts +79 -0
  59. package/src/universal-wallet-connector.ts +426 -0
  60. package/src/utils/network-rpc-utils.ts +27 -0
@@ -0,0 +1,18 @@
1
+ import type { ConnectionMode, ConnectionModeState, Session, Chain } from '@meshconnect/uwc-types';
2
+ export declare class ConnectionManager {
3
+ private connectionMode;
4
+ private session;
5
+ private listeners;
6
+ getConnectionMode(): ConnectionMode;
7
+ getSession(): Session;
8
+ setConnectionMode(mode: ConnectionMode): void;
9
+ updateSession(updates: Partial<Session>): void;
10
+ setActiveNetwork(network: Chain | null): void;
11
+ setActiveAddress(address: string | null): void;
12
+ setAvailableNetworks(networks: Chain[]): void;
13
+ subscribe(listener: () => void): () => void;
14
+ private notifyListeners;
15
+ getState(): ConnectionModeState;
16
+ }
17
+ export declare const connectionManager: ConnectionManager;
18
+ //# sourceMappingURL=connection-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-manager.d.ts","sourceRoot":"","sources":["../src/connection-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,OAAO,EACP,KAAK,EACN,MAAM,wBAAwB,CAAA;AAE/B,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,cAAc,CAA6B;IACnD,OAAO,CAAC,OAAO,CAId;IACD,OAAO,CAAC,SAAS,CAA6B;IAE9C,iBAAiB,IAAI,cAAc;IAInC,UAAU,IAAI,OAAO;IAIrB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAK7C,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAK9C,gBAAgB,CAAC,OAAO,EAAE,KAAK,GAAG,IAAI,GAAG,IAAI;IAK7C,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAK9C,oBAAoB,CAAC,QAAQ,EAAE,KAAK,EAAE,GAAG,IAAI;IAK7C,SAAS,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IAO3C,OAAO,CAAC,eAAe;IAIvB,QAAQ,IAAI,mBAAmB;CAOhC;AAGD,eAAO,MAAM,iBAAiB,mBAA0B,CAAA"}
@@ -0,0 +1,54 @@
1
+ export class ConnectionManager {
2
+ connectionMode = 'injected';
3
+ session = {
4
+ activeNetwork: null,
5
+ activeAddress: null,
6
+ availableNetworks: []
7
+ };
8
+ listeners = new Set();
9
+ getConnectionMode() {
10
+ return this.connectionMode;
11
+ }
12
+ getSession() {
13
+ return this.session;
14
+ }
15
+ setConnectionMode(mode) {
16
+ this.connectionMode = mode;
17
+ this.notifyListeners();
18
+ }
19
+ updateSession(updates) {
20
+ this.session = { ...this.session, ...updates };
21
+ this.notifyListeners();
22
+ }
23
+ setActiveNetwork(network) {
24
+ this.session.activeNetwork = network;
25
+ this.notifyListeners();
26
+ }
27
+ setActiveAddress(address) {
28
+ this.session.activeAddress = address;
29
+ this.notifyListeners();
30
+ }
31
+ setAvailableNetworks(networks) {
32
+ this.session.availableNetworks = networks;
33
+ this.notifyListeners();
34
+ }
35
+ subscribe(listener) {
36
+ this.listeners.add(listener);
37
+ return () => {
38
+ this.listeners.delete(listener);
39
+ };
40
+ }
41
+ notifyListeners() {
42
+ this.listeners.forEach(listener => listener());
43
+ }
44
+ getState() {
45
+ return {
46
+ connectionMode: this.connectionMode,
47
+ setConnectionMode: this.setConnectionMode.bind(this),
48
+ session: this.session
49
+ };
50
+ }
51
+ }
52
+ // Default singleton instance for convenience
53
+ export const connectionManager = new ConnectionManager();
54
+ //# sourceMappingURL=connection-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection-manager.js","sourceRoot":"","sources":["../src/connection-manager.ts"],"names":[],"mappings":"AAOA,MAAM,OAAO,iBAAiB;IACpB,cAAc,GAAmB,UAAU,CAAA;IAC3C,OAAO,GAAY;QACzB,aAAa,EAAE,IAAI;QACnB,aAAa,EAAE,IAAI;QACnB,iBAAiB,EAAE,EAAE;KACtB,CAAA;IACO,SAAS,GAAoB,IAAI,GAAG,EAAE,CAAA;IAE9C,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAA;IAC5B,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,iBAAiB,CAAC,IAAoB;QACpC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,aAAa,CAAC,OAAyB;QACrC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;QAC9C,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,gBAAgB,CAAC,OAAqB;QACpC,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAA;QACpC,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,gBAAgB,CAAC,OAAsB;QACrC,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAA;QACpC,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,oBAAoB,CAAC,QAAiB;QACpC,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,QAAQ,CAAA;QACzC,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,SAAS,CAAC,QAAoB;QAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC,CAAA;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,QAAQ;QACN,OAAO;YACL,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;YACpD,OAAO,EAAE,IAAI,CAAC,OAAO;SACtB,CAAA;IACH,CAAC;CACF;AAED,6CAA6C;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './universal-wallet-connector';
2
+ export * from './managers';
3
+ export * from './services';
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,8BAA8B,CAAA;AAC5C,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export * from './universal-wallet-connector';
2
+ export * from './managers';
3
+ export * from './services';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,8BAA8B,CAAA;AAC5C,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA"}
@@ -0,0 +1,10 @@
1
+ export type Listener = () => void;
2
+ export type Unsubscribe = () => void;
3
+ export declare class EventManager {
4
+ private listeners;
5
+ subscribe(listener: Listener): Unsubscribe;
6
+ notify(): void;
7
+ getListenerCount(): number;
8
+ clearAllListeners(): void;
9
+ }
10
+ //# sourceMappingURL=event-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-manager.d.ts","sourceRoot":"","sources":["../../src/managers/event-manager.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAA;AACjC,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAA;AAEpC,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAA2B;IAE5C,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,WAAW;IAO1C,MAAM,IAAI,IAAI;IAId,gBAAgB,IAAI,MAAM;IAI1B,iBAAiB,IAAI,IAAI;CAG1B"}
@@ -0,0 +1,19 @@
1
+ export class EventManager {
2
+ listeners = new Set();
3
+ subscribe(listener) {
4
+ this.listeners.add(listener);
5
+ return () => {
6
+ this.listeners.delete(listener);
7
+ };
8
+ }
9
+ notify() {
10
+ this.listeners.forEach(listener => listener());
11
+ }
12
+ getListenerCount() {
13
+ return this.listeners.size;
14
+ }
15
+ clearAllListeners() {
16
+ this.listeners.clear();
17
+ }
18
+ }
19
+ //# sourceMappingURL=event-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-manager.js","sourceRoot":"","sources":["../../src/managers/event-manager.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,YAAY;IACf,SAAS,GAAkB,IAAI,GAAG,EAAE,CAAA;IAE5C,SAAS,CAAC,QAAkB;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC5B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACjC,CAAC,CAAA;IACH,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChD,CAAC;IAED,gBAAgB;QACd,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAA;IAC5B,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;IACxB,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export * from './session-manager';
2
+ export * from './event-manager';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,3 @@
1
+ export * from './session-manager';
2
+ export * from './event-manager';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/managers/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAA;AACjC,cAAc,iBAAiB,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { Session, Network } from '@meshconnect/uwc-types';
2
+ export declare class SessionManager {
3
+ private session;
4
+ getSession(): Session;
5
+ updateSession(updates: Partial<Session>): void;
6
+ setActiveNetwork(network: Network | null): void;
7
+ setActiveAddress(address: string | null): void;
8
+ setAvailableNetworks(networks: Network[]): void;
9
+ clearSession(): void;
10
+ }
11
+ //# sourceMappingURL=session-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../../src/managers/session-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAE9D,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAOd;IAED,UAAU,IAAI,OAAO;IAIrB,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI;IAI9C,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI;IAI/C,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAI9C,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI;IAI/C,YAAY,IAAI,IAAI;CAUrB"}
@@ -0,0 +1,36 @@
1
+ export class SessionManager {
2
+ session = {
3
+ connectionMode: null,
4
+ activeWallet: null,
5
+ activeNetwork: null,
6
+ activeAddress: null,
7
+ availableNetworks: [],
8
+ availableAddresses: []
9
+ };
10
+ getSession() {
11
+ return this.session;
12
+ }
13
+ updateSession(updates) {
14
+ this.session = { ...this.session, ...updates };
15
+ }
16
+ setActiveNetwork(network) {
17
+ this.session.activeNetwork = network;
18
+ }
19
+ setActiveAddress(address) {
20
+ this.session.activeAddress = address;
21
+ }
22
+ setAvailableNetworks(networks) {
23
+ this.session.availableNetworks = networks;
24
+ }
25
+ clearSession() {
26
+ this.session = {
27
+ connectionMode: null,
28
+ activeWallet: null,
29
+ activeNetwork: null,
30
+ activeAddress: null,
31
+ availableNetworks: [],
32
+ availableAddresses: []
33
+ };
34
+ }
35
+ }
36
+ //# sourceMappingURL=session-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-manager.js","sourceRoot":"","sources":["../../src/managers/session-manager.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,cAAc;IACjB,OAAO,GAAY;QACzB,cAAc,EAAE,IAAI;QACpB,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,aAAa,EAAE,IAAI;QACnB,iBAAiB,EAAE,EAAE;QACrB,kBAAkB,EAAE,EAAE;KACvB,CAAA;IAED,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,aAAa,CAAC,OAAyB;QACrC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,GAAG,OAAO,EAAE,CAAA;IAChD,CAAC;IAED,gBAAgB,CAAC,OAAuB;QACtC,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAA;IACtC,CAAC;IAED,gBAAgB,CAAC,OAAsB;QACrC,IAAI,CAAC,OAAO,CAAC,aAAa,GAAG,OAAO,CAAA;IACtC,CAAC;IAED,oBAAoB,CAAC,QAAmB;QACtC,IAAI,CAAC,OAAO,CAAC,iBAAiB,GAAG,QAAQ,CAAA;IAC3C,CAAC;IAED,YAAY;QACV,IAAI,CAAC,OAAO,GAAG;YACb,cAAc,EAAE,IAAI;YACpB,YAAY,EAAE,IAAI;YAClB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,IAAI;YACnB,iBAAiB,EAAE,EAAE;YACrB,kBAAkB,EAAE,EAAE;SACvB,CAAA;IACH,CAAC;CACF"}
@@ -0,0 +1,24 @@
1
+ import type { Network, NetworkId, WalletMetadata, ConnectionMode, Connector } from '@meshconnect/uwc-types';
2
+ import type { SessionManager } from '../managers/session-manager';
3
+ import type { EventManager } from '../managers/event-manager';
4
+ export declare class ConnectionService {
5
+ private networks;
6
+ private wallets;
7
+ private sessionManager;
8
+ private connectors;
9
+ private usingIntegratedBrowser;
10
+ private eventManager;
11
+ private activeConnector;
12
+ constructor(networks: Network[], wallets: WalletMetadata[], sessionManager: SessionManager, connectors: Map<ConnectionMode, Connector>, usingIntegratedBrowser: boolean, eventManager: EventManager);
13
+ connect(connectionMode: ConnectionMode, walletId: string, networkId?: NetworkId): Promise<void>;
14
+ private getConnector;
15
+ private findWallet;
16
+ private getProviderForMode;
17
+ private validateAndDetermineNetwork;
18
+ disconnect(): Promise<void>;
19
+ getConnectionURI(): string | undefined;
20
+ getWallets(): WalletMetadata[];
21
+ updateWallets(wallets: WalletMetadata[]): void;
22
+ getNetworks(): Network[];
23
+ }
24
+ //# 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,EACV,OAAO,EACP,SAAS,EACT,cAAc,EACd,cAAc,EACd,SAAS,EAKV,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D,qBAAa,iBAAiB;IAI1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,YAAY;IARtB,OAAO,CAAC,eAAe,CAAyB;gBAGtC,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,EAAE,cAAc,EAAE,EACzB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,EAC1C,sBAAsB,EAAE,OAAO,EAC/B,YAAY,EAAE,YAAY;IAG9B,OAAO,CACX,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,SAAS,GACpB,OAAO,CAAC,IAAI,CAAC;IA4EhB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,kBAAkB;IAiC1B,OAAO,CAAC,2BAA2B;IA6C7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBjC,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAkBtC,UAAU,IAAI,cAAc,EAAE;IAI9B,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAI9C,WAAW,IAAI,OAAO,EAAE;CAGzB"}
@@ -0,0 +1,176 @@
1
+ export class ConnectionService {
2
+ networks;
3
+ wallets;
4
+ sessionManager;
5
+ connectors;
6
+ usingIntegratedBrowser;
7
+ eventManager;
8
+ activeConnector = null;
9
+ constructor(networks, wallets, sessionManager, connectors, usingIntegratedBrowser, eventManager) {
10
+ this.networks = networks;
11
+ this.wallets = wallets;
12
+ this.sessionManager = sessionManager;
13
+ this.connectors = connectors;
14
+ this.usingIntegratedBrowser = usingIntegratedBrowser;
15
+ this.eventManager = eventManager;
16
+ }
17
+ async connect(connectionMode, walletId, networkId) {
18
+ // Find the wallet
19
+ const wallet = this.findWallet(walletId);
20
+ // Get the appropriate provider based on connection mode
21
+ const provider = this.getProviderForMode(wallet, connectionMode);
22
+ // Validate and determine the network
23
+ const network = this.validateAndDetermineNetwork(networkId, provider);
24
+ // Get the appropriate connector
25
+ const connector = this.getConnector(connectionMode);
26
+ // Store the active connector BEFORE starting connection
27
+ // This allows getConnectionURI to work while connection is in progress
28
+ this.activeConnector = connector;
29
+ let result;
30
+ if (connectionMode === 'injected') {
31
+ // For injected, pass the provider (which is ExtensionInjectedProvider | IntegratedBrowserInjectedProvider)
32
+ result = await connector.connect(network, provider);
33
+ }
34
+ else if (connectionMode === 'walletConnect') {
35
+ // For WalletConnect, start connection and poll for URI
36
+ const connectPromise = connector.connect(network, provider);
37
+ // Poll for URI and notify when it becomes available
38
+ const pollForURI = setInterval(() => {
39
+ const uri = this.getConnectionURI();
40
+ if (uri) {
41
+ clearInterval(pollForURI);
42
+ // Notify subscribers that URI is available
43
+ this.eventManager.notify();
44
+ }
45
+ }, 100); // Poll every 100ms
46
+ // Stop polling after 10 seconds
47
+ const timeoutId = setTimeout(() => {
48
+ clearInterval(pollForURI);
49
+ }, 10000);
50
+ try {
51
+ result = await connectPromise;
52
+ }
53
+ finally {
54
+ // Ensure cleanup happens regardless of success or failure
55
+ clearInterval(pollForURI);
56
+ clearTimeout(timeoutId);
57
+ }
58
+ }
59
+ else {
60
+ throw new Error(`Unsupported connection mode: ${connectionMode}`);
61
+ }
62
+ // Filter available addresses to only include those for configured networks
63
+ const filteredAvailableAddresses = result.availableAddresses.filter(addr => this.networks.some(n => n.id === addr.networkId));
64
+ this.sessionManager.updateSession({
65
+ connectionMode,
66
+ activeWallet: wallet,
67
+ activeNetwork: network,
68
+ activeAddress: result.address,
69
+ availableNetworks: this.networks.filter(n => provider.supportedNetworkIds.includes(n.id)),
70
+ availableAddresses: filteredAvailableAddresses
71
+ });
72
+ }
73
+ getConnector(connectionMode) {
74
+ const connector = this.connectors.get(connectionMode);
75
+ if (!connector) {
76
+ throw new Error(`No connector found for connection mode: ${connectionMode}`);
77
+ }
78
+ return connector;
79
+ }
80
+ findWallet(walletId) {
81
+ const wallet = this.wallets.find(w => w.id === walletId);
82
+ if (!wallet) {
83
+ throw new Error(`Wallet with id '${walletId}' not found`);
84
+ }
85
+ return wallet;
86
+ }
87
+ getProviderForMode(wallet, connectionMode) {
88
+ let provider;
89
+ if (connectionMode === 'injected') {
90
+ provider = this.usingIntegratedBrowser
91
+ ? wallet.integratedBrowserInjectedProvider
92
+ : wallet.extensionInjectedProvider;
93
+ if (!provider) {
94
+ throw new Error(this.usingIntegratedBrowser
95
+ ? `Wallet '${wallet.id}' does not have an integrated browser injected provider`
96
+ : `Wallet '${wallet.id}' does not have an extension injected provider`);
97
+ }
98
+ }
99
+ else if (connectionMode === 'walletConnect') {
100
+ provider = wallet.walletConnectProvider;
101
+ if (!provider) {
102
+ throw new Error(`Wallet '${wallet.id}' does not have a WalletConnect provider`);
103
+ }
104
+ }
105
+ else {
106
+ throw new Error(`Unsupported connection mode: ${connectionMode}`);
107
+ }
108
+ return provider;
109
+ }
110
+ validateAndDetermineNetwork(networkId, provider) {
111
+ let targetNetworkId;
112
+ if (networkId) {
113
+ // Check if networkId is in the configured networks
114
+ const networkExists = this.networks.some(n => n.id === networkId);
115
+ if (!networkExists) {
116
+ throw new Error(`Network ${networkId} is not in the configured networks`);
117
+ }
118
+ // Check if networkId is supported by the wallet
119
+ const supportedByWallet = provider.supportedNetworkIds.includes(networkId);
120
+ if (!supportedByWallet) {
121
+ throw new Error(`Network ${networkId} is not supported by the wallet`);
122
+ }
123
+ targetNetworkId = networkId;
124
+ }
125
+ else {
126
+ // Use the first supported network that exists in both wallet and configured networks
127
+ const supportedNetwork = provider.supportedNetworkIds.find(id => this.networks.some(n => n.id === id));
128
+ if (!supportedNetwork) {
129
+ throw new Error('No common supported network found between wallet and configured networks');
130
+ }
131
+ targetNetworkId = supportedNetwork;
132
+ }
133
+ // Find and return the network object
134
+ const network = this.networks.find(n => n.id === targetNetworkId);
135
+ if (!network) {
136
+ throw new Error(`Network ${targetNetworkId} not found in configured networks`);
137
+ }
138
+ return network;
139
+ }
140
+ async disconnect() {
141
+ // If there's an active connector with a disconnect method, call it
142
+ if (this.activeConnector &&
143
+ typeof this.activeConnector.disconnect === 'function') {
144
+ await this.activeConnector.disconnect();
145
+ }
146
+ // Clear the active connector
147
+ this.activeConnector = null;
148
+ // Clear the session state
149
+ this.sessionManager.clearSession();
150
+ }
151
+ getConnectionURI() {
152
+ // Only WalletConnect connector has getConnectionURI method
153
+ if (this.activeConnector &&
154
+ typeof this.activeConnector.getConnectionURI === 'function') {
155
+ try {
156
+ const uri = this.activeConnector.getConnectionURI();
157
+ return uri;
158
+ }
159
+ catch {
160
+ // If there's no URI available yet, return undefined
161
+ return undefined;
162
+ }
163
+ }
164
+ return undefined;
165
+ }
166
+ getWallets() {
167
+ return this.wallets;
168
+ }
169
+ updateWallets(wallets) {
170
+ this.wallets = wallets;
171
+ }
172
+ getNetworks() {
173
+ return this.networks;
174
+ }
175
+ }
176
+ //# 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,4 @@
1
+ export * from './connection-service';
2
+ export * from './signature-service';
3
+ export * from './transaction-service';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './connection-service';
2
+ export * from './signature-service';
3
+ export * from './transaction-service';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,20 @@
1
+ import type { Network, NetworkId, Connector, ConnectionMode } from '@meshconnect/uwc-types';
2
+ import type { SessionManager } from '../managers/session-manager';
3
+ import type { EventManager } from '../managers/event-manager';
4
+ export declare class NetworkSwitchService {
5
+ private networks;
6
+ private sessionManager;
7
+ private connectors;
8
+ private usingIntegratedBrowser;
9
+ private eventManager;
10
+ private isLoading;
11
+ private isWaitingForUserApproval;
12
+ constructor(networks: Network[], sessionManager: SessionManager, connectors: Map<ConnectionMode, Connector>, usingIntegratedBrowser: boolean, eventManager: EventManager);
13
+ getLoadingState(): {
14
+ isLoading: boolean;
15
+ isWaitingForUserApproval: boolean;
16
+ };
17
+ switchNetwork(networkId: NetworkId): Promise<void>;
18
+ private checkIfApprovalRequired;
19
+ }
20
+ //# 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,EACV,OAAO,EACP,SAAS,EACT,SAAS,EACT,cAAc,EAMf,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D,qBAAa,oBAAoB;IAK7B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,YAAY;IARtB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,wBAAwB,CAAQ;gBAG9B,QAAQ,EAAE,OAAO,EAAE,EACnB,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,EAC1C,sBAAsB,EAAE,OAAO,EAC/B,YAAY,EAAE,YAAY;IAGpC,eAAe;;;;IAOT,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IA2GxD,OAAO,CAAC,uBAAuB;CAyChC"}
@@ -0,0 +1,130 @@
1
+ export class NetworkSwitchService {
2
+ networks;
3
+ sessionManager;
4
+ connectors;
5
+ usingIntegratedBrowser;
6
+ eventManager;
7
+ isLoading = false;
8
+ isWaitingForUserApproval = false;
9
+ constructor(networks, sessionManager, connectors, usingIntegratedBrowser, eventManager) {
10
+ this.networks = networks;
11
+ this.sessionManager = sessionManager;
12
+ this.connectors = connectors;
13
+ this.usingIntegratedBrowser = usingIntegratedBrowser;
14
+ this.eventManager = eventManager;
15
+ }
16
+ getLoadingState() {
17
+ return {
18
+ isLoading: this.isLoading,
19
+ isWaitingForUserApproval: this.isWaitingForUserApproval
20
+ };
21
+ }
22
+ async switchNetwork(networkId) {
23
+ // Check if there's an active connection
24
+ const session = this.sessionManager.getSession();
25
+ if (!session) {
26
+ throw new Error('No active connection. Connect to a wallet first.');
27
+ }
28
+ // Find the network
29
+ const network = this.networks.find(n => n.id === networkId);
30
+ if (!network) {
31
+ throw new Error(`Network with id '${networkId}' not found`);
32
+ }
33
+ // Check if the network is supported by the current wallet
34
+ const currentWallet = session.activeWallet;
35
+ if (!currentWallet) {
36
+ throw new Error('No active wallet found in session');
37
+ }
38
+ // Check if connection mode is set
39
+ if (!session.connectionMode) {
40
+ throw new Error('No connection mode found in session');
41
+ }
42
+ // Get the provider for the current connection mode
43
+ let provider;
44
+ if (session.connectionMode === 'injected') {
45
+ provider = this.usingIntegratedBrowser
46
+ ? currentWallet.integratedBrowserInjectedProvider
47
+ : currentWallet.extensionInjectedProvider;
48
+ }
49
+ else if (session.connectionMode === 'walletConnect') {
50
+ provider = currentWallet.walletConnectProvider;
51
+ }
52
+ if (!provider) {
53
+ throw new Error(`Wallet '${currentWallet.id}' does not have a provider for ${session.connectionMode} mode`);
54
+ }
55
+ // Validate the network is supported by the wallet
56
+ if (!provider.supportedNetworkIds.includes(networkId)) {
57
+ throw new Error(`Network ${networkId} is not supported by the current wallet`);
58
+ }
59
+ // Get the active connector
60
+ const activeConnector = this.connectors.get(session.connectionMode);
61
+ // Check if the connector supports network switching
62
+ if (!activeConnector ||
63
+ typeof activeConnector.switchNetwork !== 'function') {
64
+ throw new Error('Current connector does not support network switching');
65
+ }
66
+ // Determine if user approval is required based on wallet metadata
67
+ const requiresApproval = this.checkIfApprovalRequired(currentWallet, network, session.activeNetwork);
68
+ try {
69
+ // Set loading states
70
+ this.isLoading = true;
71
+ this.isWaitingForUserApproval = requiresApproval;
72
+ this.eventManager.notify();
73
+ // Perform the network switch and get the new address
74
+ // Pass the appropriate provider based on connection mode
75
+ let result;
76
+ if (session.connectionMode === 'injected' && provider) {
77
+ result = await activeConnector.switchNetwork(network, provider);
78
+ }
79
+ else if (session.connectionMode === 'walletConnect' && provider) {
80
+ result = await activeConnector.switchNetwork(network, provider);
81
+ }
82
+ else {
83
+ result = await activeConnector.switchNetwork(network);
84
+ }
85
+ // Update the session with the new network, address, and available addresses
86
+ this.sessionManager.updateSession({
87
+ activeNetwork: network,
88
+ activeAddress: result.address,
89
+ ...(result.availableAddresses && {
90
+ availableAddresses: result.availableAddresses
91
+ })
92
+ });
93
+ }
94
+ finally {
95
+ // Clear loading states
96
+ this.isLoading = false;
97
+ this.isWaitingForUserApproval = false;
98
+ this.eventManager.notify();
99
+ }
100
+ }
101
+ checkIfApprovalRequired(wallet, targetNetwork, currentNetwork) {
102
+ if (!currentNetwork)
103
+ return false;
104
+ // Check if switching between different namespaces
105
+ const isNamespaceSwitch = currentNetwork.namespace !== targetNetwork.namespace;
106
+ // Get the provider to check metadata
107
+ const provider = this.usingIntegratedBrowser
108
+ ? wallet.integratedBrowserInjectedProvider
109
+ : wallet.extensionInjectedProvider;
110
+ if (!provider)
111
+ return false;
112
+ // Check if namespace switch requires approval
113
+ if (isNamespaceSwitch && provider.requiresUserApprovalOnNamespaceSwitch) {
114
+ return true;
115
+ }
116
+ // Check if network switch within same namespace requires approval
117
+ if (!isNamespaceSwitch &&
118
+ provider.namespaceMetaData?.[targetNetwork.namespace]) {
119
+ const namespaceData = provider.namespaceMetaData[targetNetwork.namespace];
120
+ // Only EIP155 networks have the requiresUserApprovalOnNetworkSwitch property
121
+ if (namespaceData &&
122
+ targetNetwork.namespace === 'eip155' &&
123
+ 'requiresUserApprovalOnNetworkSwitch' in namespaceData) {
124
+ return namespaceData.requiresUserApprovalOnNetworkSwitch || false;
125
+ }
126
+ }
127
+ return false;
128
+ }
129
+ }
130
+ //# 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":"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"}
@@ -0,0 +1,18 @@
1
+ import type { ConnectionMode, Connector, SupportedProvider } from '@meshconnect/uwc-types';
2
+ import type { SessionManager } from '../managers/session-manager';
3
+ /**
4
+ * Service for handling signature operations across different connector types
5
+ */
6
+ export declare class SignatureService {
7
+ private sessionManager;
8
+ private connectors;
9
+ constructor(sessionManager: SessionManager, connectors: Map<ConnectionMode, Connector>);
10
+ /**
11
+ * Sign a message with the currently connected wallet
12
+ * @param message The message to sign
13
+ * @param provider The wallet provider to use for signing (required for injected connector)
14
+ * @returns A promise that resolves to the signature
15
+ */
16
+ signMessage(message: string, provider?: SupportedProvider): Promise<string>;
17
+ }
18
+ //# 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,KAAK,EACV,cAAc,EACd,SAAS,EAIT,iBAAiB,EAClB,MAAM,wBAAwB,CAAA;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE;;GAEG;AACH,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;gBADV,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC;IAGpD;;;;;OAKG;IACG,WAAW,CACf,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,MAAM,CAAC;CAgDnB"}