@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.
- package/dist/connection-manager.d.ts +18 -0
- package/dist/connection-manager.d.ts.map +1 -0
- package/dist/connection-manager.js +54 -0
- package/dist/connection-manager.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/managers/event-manager.d.ts +10 -0
- package/dist/managers/event-manager.d.ts.map +1 -0
- package/dist/managers/event-manager.js +19 -0
- package/dist/managers/event-manager.js.map +1 -0
- package/dist/managers/index.d.ts +3 -0
- package/dist/managers/index.d.ts.map +1 -0
- package/dist/managers/index.js +3 -0
- package/dist/managers/index.js.map +1 -0
- package/dist/managers/session-manager.d.ts +11 -0
- package/dist/managers/session-manager.d.ts.map +1 -0
- package/dist/managers/session-manager.js +36 -0
- package/dist/managers/session-manager.js.map +1 -0
- package/dist/services/connection-service.d.ts +24 -0
- package/dist/services/connection-service.d.ts.map +1 -0
- package/dist/services/connection-service.js +176 -0
- package/dist/services/connection-service.js.map +1 -0
- package/dist/services/index.d.ts +4 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +4 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/network-switch-service.d.ts +20 -0
- package/dist/services/network-switch-service.d.ts.map +1 -0
- package/dist/services/network-switch-service.js +130 -0
- package/dist/services/network-switch-service.js.map +1 -0
- package/dist/services/signature-service.d.ts +18 -0
- package/dist/services/signature-service.d.ts.map +1 -0
- package/dist/services/signature-service.js +53 -0
- package/dist/services/signature-service.js.map +1 -0
- package/dist/services/transaction-service.d.ts +18 -0
- package/dist/services/transaction-service.d.ts.map +1 -0
- package/dist/services/transaction-service.js +53 -0
- package/dist/services/transaction-service.js.map +1 -0
- package/dist/universal-wallet-connector.d.ts +56 -0
- package/dist/universal-wallet-connector.d.ts.map +1 -0
- package/dist/universal-wallet-connector.js +302 -0
- package/dist/universal-wallet-connector.js.map +1 -0
- package/dist/utils/network-rpc-utils.d.ts +10 -0
- package/dist/utils/network-rpc-utils.d.ts.map +1 -0
- package/dist/utils/network-rpc-utils.js +20 -0
- package/dist/utils/network-rpc-utils.js.map +1 -0
- package/package.json +36 -0
- package/src/index.ts +3 -0
- package/src/managers/event-manager.ts +25 -0
- package/src/managers/index.ts +2 -0
- package/src/managers/session-manager.ts +43 -0
- package/src/services/connection-service.ts +248 -0
- package/src/services/index.ts +3 -0
- package/src/services/network-switch-service.ts +182 -0
- package/src/services/signature-service.ts +77 -0
- package/src/services/transaction-service.ts +79 -0
- package/src/universal-wallet-connector.ts +426 -0
- 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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|