@meshconnect/uwc-core 1.2.3-snapshot.2b4c3e4 → 1.2.3-snapshot.b719f01
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/services/connection-service.d.ts +30 -0
- package/dist/services/connection-service.d.ts.map +1 -1
- package/dist/services/connection-service.js +120 -0
- package/dist/services/connection-service.js.map +1 -1
- package/package.json +5 -5
- package/src/services/connection-service.test.ts +283 -1
- package/src/services/connection-service.ts +141 -0
|
@@ -4,6 +4,12 @@ import type { EventManager } from '../managers/event-manager';
|
|
|
4
4
|
export interface ServiceOptions {
|
|
5
5
|
signal?: AbortSignal;
|
|
6
6
|
}
|
|
7
|
+
/** Sibling-namespace live-account re-read poll: absorbs the lag while a wallet
|
|
8
|
+
* re-derives a sibling namespace's address (e.g. MetaMask's Solana Snap) after
|
|
9
|
+
* an account switch on another namespace. Bounded so a genuinely-unchanged
|
|
10
|
+
* sibling gives up quickly. */
|
|
11
|
+
export declare const SIBLING_REFRESH_MAX_ATTEMPTS = 5;
|
|
12
|
+
export declare const SIBLING_REFRESH_DELAY_MS = 200;
|
|
7
13
|
export declare class ConnectionService {
|
|
8
14
|
private networks;
|
|
9
15
|
private wallets;
|
|
@@ -29,6 +35,13 @@ export declare class ConnectionService {
|
|
|
29
35
|
* each reading the shared activeConnector, and flood telemetry).
|
|
30
36
|
*/
|
|
31
37
|
private inFlightAbort;
|
|
38
|
+
/**
|
|
39
|
+
* Monotonic token for the in-flight cross-namespace sibling refresh (see
|
|
40
|
+
* `refreshSiblingNamespaces`). A newer account switch, a teardown, or a
|
|
41
|
+
* disconnect bumps it so a still-polling older refresh aborts before it
|
|
42
|
+
* writes a now-stale sibling address into the session.
|
|
43
|
+
*/
|
|
44
|
+
private siblingRefreshGeneration;
|
|
32
45
|
constructor(networks: Network[], wallets: WalletMetadata[], sessionManager: SessionManager, connectors: Map<ConnectionMode, Connector>, usingIntegratedBrowser: boolean, eventManager: EventManager, walletResponseTimeoutMs: number);
|
|
33
46
|
connect(connectionMode: ConnectionMode, walletId: string, networkId?: NetworkId, options?: ServiceOptions): Promise<void>;
|
|
34
47
|
/** Wire the active connector's lifecycle stream onto the bus (or signal absence). */
|
|
@@ -73,6 +86,23 @@ export declare class ConnectionService {
|
|
|
73
86
|
* disconnect signal.
|
|
74
87
|
*/
|
|
75
88
|
private attachSecondaryAccountSync;
|
|
89
|
+
/**
|
|
90
|
+
* After a real account switch on `changedNamespace`, re-read the LIVE account
|
|
91
|
+
* of every OTHER connected namespace and fold any that changed into the
|
|
92
|
+
* session in ONE update. Sibling namespaces (e.g. a MetaMask Solana Snap
|
|
93
|
+
* address derived from the EVM account) change with the underlying account but
|
|
94
|
+
* emit no `accountsChanged`, and their live read can LAG the firing namespace's
|
|
95
|
+
* event while the wallet re-derives — so poll each sibling up to
|
|
96
|
+
* `SIBLING_REFRESH_MAX_ATTEMPTS` times, `SIBLING_REFRESH_DELAY_MS` apart,
|
|
97
|
+
* stopping a sibling the moment its live address differs from the stored one.
|
|
98
|
+
*
|
|
99
|
+
* Loop-safe: writes addresses DIRECTLY via the session manager (never
|
|
100
|
+
* re-dispatches a per-namespace accountsChanged), and only emits when at least
|
|
101
|
+
* one sibling actually changed — so refreshing B here cannot re-enter this for
|
|
102
|
+
* A and recurse. Generation-guarded so a newer switch / teardown / disconnect
|
|
103
|
+
* supersedes an older still-polling refresh before it writes.
|
|
104
|
+
*/
|
|
105
|
+
private refreshSiblingNamespaces;
|
|
76
106
|
private connectWithURIPoll;
|
|
77
107
|
private getConnector;
|
|
78
108
|
private findWallet;
|
|
@@ -1 +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,EAET,cAAc,EACd,cAAc,EACd,SAAS,EAMV,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAK7D,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED,qBAAa,iBAAiB;
|
|
1
|
+
{"version":3,"file":"connection-service.d.ts","sourceRoot":"","sources":["../../src/services/connection-service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,OAAO,EACP,SAAS,EAET,cAAc,EACd,cAAc,EACd,SAAS,EAMV,MAAM,wBAAwB,CAAA;AAE/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAK7D,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;AAED;;;gCAGgC;AAChC,eAAO,MAAM,4BAA4B,IAAI,CAAA;AAC7C,eAAO,MAAM,wBAAwB,MAAM,CAAA;AAE3C,qBAAa,iBAAiB;IA2B1B,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,sBAAsB;IAC9B,OAAO,CAAC,YAAY;IAEpB,OAAO,CAAC,uBAAuB;IAjCjC,OAAO,CAAC,eAAe,CAAyB;IAChD,+EAA+E;IAC/E,OAAO,CAAC,iBAAiB,CAA0B;IACnD;;;;OAIG;IACH,OAAO,CAAC,6BAA6B,CAAwB;IAC7D;;;;;;OAMG;IACH,OAAO,CAAC,aAAa,CAA+B;IACpD;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB,CAAI;gBAG1B,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,EAE1B,uBAAuB,EAAE,MAAM;IAGnC,OAAO,CACX,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,SAAS,EACrB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC;IA4JhB,qFAAqF;IACrF,OAAO,CAAC,eAAe;IAwDvB;;;;;;OAMG;IACH,OAAO,CAAC,qBAAqB;IA0D7B;;;;;;OAMG;IACH,iBAAiB,IAAI,IAAI;IAYzB;;;;;;;OAOG;IACH,iBAAiB,IAAI,IAAI;IAmCzB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,0BAA0B;IAsDlC;;;;;;;;;;;;;;;OAeG;YACW,wBAAwB;YAkGxB,kBAAkB;IAgEhC,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,kBAAkB;IA2C1B,OAAO,CAAC,2BAA2B;IAiD7B,UAAU,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BzD;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,gBAAgB;IASxB,gBAAgB,IAAI,MAAM,GAAG,SAAS;IAiBtC,UAAU,IAAI,cAAc,EAAE;IAI9B,aAAa,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,IAAI;IAI9C,WAAW,IAAI,OAAO,EAAE;IAIxB;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,wBAAwB;CAiBjC"}
|
|
@@ -2,6 +2,12 @@ import { NoCommonNetworkError } from '@meshconnect/uwc-types';
|
|
|
2
2
|
import { raceAbort } from '../utils/abort';
|
|
3
3
|
import { instrumentHandoff } from '../observability/instrument-handoff';
|
|
4
4
|
import { attachLifecycle } from '../observability/lifecycle-bridge';
|
|
5
|
+
/** Sibling-namespace live-account re-read poll: absorbs the lag while a wallet
|
|
6
|
+
* re-derives a sibling namespace's address (e.g. MetaMask's Solana Snap) after
|
|
7
|
+
* an account switch on another namespace. Bounded so a genuinely-unchanged
|
|
8
|
+
* sibling gives up quickly. */
|
|
9
|
+
export const SIBLING_REFRESH_MAX_ATTEMPTS = 5;
|
|
10
|
+
export const SIBLING_REFRESH_DELAY_MS = 200;
|
|
5
11
|
export class ConnectionService {
|
|
6
12
|
networks;
|
|
7
13
|
wallets;
|
|
@@ -27,6 +33,13 @@ export class ConnectionService {
|
|
|
27
33
|
* each reading the shared activeConnector, and flood telemetry).
|
|
28
34
|
*/
|
|
29
35
|
inFlightAbort = null;
|
|
36
|
+
/**
|
|
37
|
+
* Monotonic token for the in-flight cross-namespace sibling refresh (see
|
|
38
|
+
* `refreshSiblingNamespaces`). A newer account switch, a teardown, or a
|
|
39
|
+
* disconnect bumps it so a still-polling older refresh aborts before it
|
|
40
|
+
* writes a now-stale sibling address into the session.
|
|
41
|
+
*/
|
|
42
|
+
siblingRefreshGeneration = 0;
|
|
30
43
|
constructor(networks, wallets, sessionManager, connectors, usingIntegratedBrowser, eventManager,
|
|
31
44
|
// Observational wallet-response deadline for the handoff timeout marker.
|
|
32
45
|
walletResponseTimeoutMs) {
|
|
@@ -253,6 +266,13 @@ export class ConnectionService {
|
|
|
253
266
|
this.eventManager.emit('sessionChanged', {
|
|
254
267
|
session: this.sessionManager.getSession()
|
|
255
268
|
});
|
|
269
|
+
// A single wallet account drives ALL its namespaces (e.g. MetaMask's Solana
|
|
270
|
+
// Snap derives its key from the selected EVM account). The wallet only fired
|
|
271
|
+
// an accountsChanged for THIS namespace; refresh the live account of every
|
|
272
|
+
// other connected namespace so the session doesn't serve a stale sibling
|
|
273
|
+
// address. Fire-and-forget: we're inside the wallet's synchronous event
|
|
274
|
+
// dispatch and must not await.
|
|
275
|
+
void this.refreshSiblingNamespaces(namespace);
|
|
256
276
|
}
|
|
257
277
|
/**
|
|
258
278
|
* Remove the active provider-lifecycle subscription (EIP-1193 `.on` / wallet-
|
|
@@ -267,6 +287,11 @@ export class ConnectionService {
|
|
|
267
287
|
for (const teardown of this.secondaryAccountSyncTeardowns)
|
|
268
288
|
teardown();
|
|
269
289
|
this.secondaryAccountSyncTeardowns = [];
|
|
290
|
+
// Supersede any in-flight sibling-namespace refresh (see
|
|
291
|
+
// `refreshSiblingNamespaces`) — a still-polling refresh must not write a
|
|
292
|
+
// now-stale address after teardown/disconnect. `finishDisconnect()` calls
|
|
293
|
+
// this too, so one bump here covers both paths.
|
|
294
|
+
this.siblingRefreshGeneration++;
|
|
270
295
|
}
|
|
271
296
|
/**
|
|
272
297
|
* Re-evaluate the lifecycle source for the CURRENT session. Used after a
|
|
@@ -356,6 +381,101 @@ export class ConnectionService {
|
|
|
356
381
|
}));
|
|
357
382
|
}
|
|
358
383
|
}
|
|
384
|
+
/**
|
|
385
|
+
* After a real account switch on `changedNamespace`, re-read the LIVE account
|
|
386
|
+
* of every OTHER connected namespace and fold any that changed into the
|
|
387
|
+
* session in ONE update. Sibling namespaces (e.g. a MetaMask Solana Snap
|
|
388
|
+
* address derived from the EVM account) change with the underlying account but
|
|
389
|
+
* emit no `accountsChanged`, and their live read can LAG the firing namespace's
|
|
390
|
+
* event while the wallet re-derives — so poll each sibling up to
|
|
391
|
+
* `SIBLING_REFRESH_MAX_ATTEMPTS` times, `SIBLING_REFRESH_DELAY_MS` apart,
|
|
392
|
+
* stopping a sibling the moment its live address differs from the stored one.
|
|
393
|
+
*
|
|
394
|
+
* Loop-safe: writes addresses DIRECTLY via the session manager (never
|
|
395
|
+
* re-dispatches a per-namespace accountsChanged), and only emits when at least
|
|
396
|
+
* one sibling actually changed — so refreshing B here cannot re-enter this for
|
|
397
|
+
* A and recurse. Generation-guarded so a newer switch / teardown / disconnect
|
|
398
|
+
* supersedes an older still-polling refresh before it writes.
|
|
399
|
+
*/
|
|
400
|
+
async refreshSiblingNamespaces(changedNamespace) {
|
|
401
|
+
const connector = this.activeConnector;
|
|
402
|
+
if (!connector?.getLiveAccount)
|
|
403
|
+
return;
|
|
404
|
+
const gen = ++this.siblingRefreshGeneration;
|
|
405
|
+
const namespaceForNetworkId = (networkId) => this.networks.find(n => n.id === networkId)?.namespace;
|
|
406
|
+
// Sibling = every connected namespace except the one that just fired.
|
|
407
|
+
const initial = this.sessionManager.getSession();
|
|
408
|
+
const siblings = new Set();
|
|
409
|
+
for (const addr of initial.availableAddresses) {
|
|
410
|
+
const ns = namespaceForNetworkId(addr.networkId);
|
|
411
|
+
if (ns && ns !== changedNamespace)
|
|
412
|
+
siblings.add(ns);
|
|
413
|
+
}
|
|
414
|
+
if (siblings.size === 0)
|
|
415
|
+
return;
|
|
416
|
+
const equal = (ns, a, b) => ns === 'eip155' ? a.toLowerCase() === b.toLowerCase() : a === b;
|
|
417
|
+
const storedFor = (ns) => {
|
|
418
|
+
const s = this.sessionManager.getSession();
|
|
419
|
+
for (const addr of s.availableAddresses) {
|
|
420
|
+
if (namespaceForNetworkId(addr.networkId) === ns)
|
|
421
|
+
return addr.address;
|
|
422
|
+
}
|
|
423
|
+
return undefined;
|
|
424
|
+
};
|
|
425
|
+
const resolved = new Map();
|
|
426
|
+
const pending = new Set(siblings);
|
|
427
|
+
for (let attempt = 0; attempt < SIBLING_REFRESH_MAX_ATTEMPTS && pending.size > 0; attempt++) {
|
|
428
|
+
// Superseded (newer switch), disconnected, or connector swapped → abandon.
|
|
429
|
+
if (gen !== this.siblingRefreshGeneration ||
|
|
430
|
+
this.activeConnector !== connector)
|
|
431
|
+
return;
|
|
432
|
+
for (const ns of [...pending]) {
|
|
433
|
+
let live = null;
|
|
434
|
+
try {
|
|
435
|
+
live = await connector.getLiveAccount(ns);
|
|
436
|
+
}
|
|
437
|
+
catch {
|
|
438
|
+
live = null;
|
|
439
|
+
}
|
|
440
|
+
if (gen !== this.siblingRefreshGeneration ||
|
|
441
|
+
this.activeConnector !== connector)
|
|
442
|
+
return;
|
|
443
|
+
if (!live)
|
|
444
|
+
continue;
|
|
445
|
+
const stored = storedFor(ns);
|
|
446
|
+
if (stored != null && !equal(ns, stored, live)) {
|
|
447
|
+
resolved.set(ns, live);
|
|
448
|
+
pending.delete(ns);
|
|
449
|
+
}
|
|
450
|
+
// stored == live (not yet re-derived) → keep polling until the cap.
|
|
451
|
+
}
|
|
452
|
+
if (pending.size === 0)
|
|
453
|
+
break;
|
|
454
|
+
await new Promise(r => setTimeout(r, SIBLING_REFRESH_DELAY_MS));
|
|
455
|
+
}
|
|
456
|
+
if (resolved.size === 0)
|
|
457
|
+
return;
|
|
458
|
+
if (gen !== this.siblingRefreshGeneration ||
|
|
459
|
+
this.activeConnector !== connector)
|
|
460
|
+
return;
|
|
461
|
+
const session = this.sessionManager.getSession();
|
|
462
|
+
const availableAddresses = session.availableAddresses.map(addr => {
|
|
463
|
+
const ns = namespaceForNetworkId(addr.networkId);
|
|
464
|
+
const next = ns ? resolved.get(ns) : undefined;
|
|
465
|
+
return next ? { ...addr, address: next } : addr;
|
|
466
|
+
});
|
|
467
|
+
// If the ACTIVE network's namespace was among the refreshed siblings, move
|
|
468
|
+
// activeAddress too (e.g. a Solana-active session whose Solana address just
|
|
469
|
+
// followed an EVM switch).
|
|
470
|
+
const activeNs = session.activeNetwork?.namespace;
|
|
471
|
+
const activeAddress = activeNs && resolved.has(activeNs)
|
|
472
|
+
? resolved.get(activeNs)
|
|
473
|
+
: session.activeAddress;
|
|
474
|
+
this.sessionManager.updateSession({ activeAddress, availableAddresses });
|
|
475
|
+
this.eventManager.emit('sessionChanged', {
|
|
476
|
+
session: this.sessionManager.getSession()
|
|
477
|
+
});
|
|
478
|
+
}
|
|
359
479
|
async connectWithURIPoll(connector, network, provider, connectionMode, signal) {
|
|
360
480
|
const connectPromise = connector.connect(network, provider);
|
|
361
481
|
let pollingStopped = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"connection-service.js","sourceRoot":"","sources":["../../src/services/connection-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"connection-service.js","sourceRoot":"","sources":["../../src/services/connection-service.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@meshconnect/uwc-core",
|
|
3
|
-
"version": "1.2.3-snapshot.
|
|
3
|
+
"version": "1.2.3-snapshot.b719f01",
|
|
4
4
|
"description": "Core functionality for Universal Wallet Connector",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -16,10 +16,10 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@meshconnect/uwc-injected-connector": "0.16.4-snapshot.
|
|
20
|
-
"@meshconnect/uwc-ton-connector": "0.7.2-snapshot.
|
|
21
|
-
"@meshconnect/uwc-
|
|
22
|
-
"@meshconnect/uwc-
|
|
19
|
+
"@meshconnect/uwc-injected-connector": "0.16.4-snapshot.b719f01",
|
|
20
|
+
"@meshconnect/uwc-ton-connector": "0.7.2-snapshot.b719f01",
|
|
21
|
+
"@meshconnect/uwc-types": "0.19.0-snapshot.b719f01",
|
|
22
|
+
"@meshconnect/uwc-wallet-connect-connector": "0.8.2-snapshot.b719f01"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"typescript": "^5.9.3"
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
ConnectionService,
|
|
4
|
+
SIBLING_REFRESH_MAX_ATTEMPTS,
|
|
5
|
+
SIBLING_REFRESH_DELAY_MS
|
|
6
|
+
} from './connection-service'
|
|
3
7
|
import { SessionManager } from '../managers/session-manager'
|
|
4
8
|
import { EventManager } from '../managers/event-manager'
|
|
5
9
|
import type {
|
|
@@ -1136,4 +1140,282 @@ describe('ConnectionService', () => {
|
|
|
1136
1140
|
).toBe('0xAFTER')
|
|
1137
1141
|
})
|
|
1138
1142
|
})
|
|
1143
|
+
|
|
1144
|
+
describe('cross-namespace account refresh on switch', () => {
|
|
1145
|
+
// Multi-namespace injected wallets (MetaMask/Trust/Phantom) derive every
|
|
1146
|
+
// namespace's address from ONE underlying account. The wallet fires
|
|
1147
|
+
// accountsChanged for a SINGLE namespace on a switch; the sibling
|
|
1148
|
+
// namespaces' addresses change too but emit no event of their own, so
|
|
1149
|
+
// `refreshSiblingNamespaces` re-reads each connected sibling's LIVE
|
|
1150
|
+
// account and folds any real change into the session. Session is seeded
|
|
1151
|
+
// SOLANA-active (the real-bug shape: an eip155 switch must still move the
|
|
1152
|
+
// active solana address).
|
|
1153
|
+
let accountSubs: Map<string, (accounts: string[]) => void>
|
|
1154
|
+
|
|
1155
|
+
beforeEach(() => {
|
|
1156
|
+
networks.push({
|
|
1157
|
+
id: 'solana:mainnet',
|
|
1158
|
+
internalId: 101,
|
|
1159
|
+
namespace: 'solana',
|
|
1160
|
+
name: 'Solana',
|
|
1161
|
+
logoUrl: '',
|
|
1162
|
+
nativeCurrency: { name: 'SOL', symbol: 'SOL', decimals: 9 },
|
|
1163
|
+
networkType: 'solana'
|
|
1164
|
+
} as never)
|
|
1165
|
+
wallets[0]!.extensionInjectedProvider = {
|
|
1166
|
+
supportedNetworkIds: ['solana:mainnet', 'eip155:1']
|
|
1167
|
+
} as never
|
|
1168
|
+
mockConnector.connect = vi.fn().mockResolvedValue({
|
|
1169
|
+
networkId: 'solana:mainnet',
|
|
1170
|
+
address: 'SoLAddr111',
|
|
1171
|
+
availableAddresses: [
|
|
1172
|
+
{ address: 'SoLAddr111', networkId: 'solana:mainnet' },
|
|
1173
|
+
{ address: '0x1234', networkId: 'eip155:1' }
|
|
1174
|
+
]
|
|
1175
|
+
})
|
|
1176
|
+
accountSubs = new Map()
|
|
1177
|
+
mockConnector.onAccountsChanged = ((
|
|
1178
|
+
listener: (accounts: string[]) => void,
|
|
1179
|
+
context: { namespace: string }
|
|
1180
|
+
) => {
|
|
1181
|
+
accountSubs.set(context.namespace, listener)
|
|
1182
|
+
return () => {}
|
|
1183
|
+
}) as never
|
|
1184
|
+
})
|
|
1185
|
+
|
|
1186
|
+
it('a Solana-active session follows an eip155 switch: the solana sibling is refreshed and activeAddress moves with it', async () => {
|
|
1187
|
+
const liveAccount = vi.fn(async (ns: string) =>
|
|
1188
|
+
ns === 'solana' ? 'SoLAddr_NEW' : null
|
|
1189
|
+
)
|
|
1190
|
+
;(mockConnector as any).getLiveAccount = liveAccount
|
|
1191
|
+
|
|
1192
|
+
const sessions: unknown[] = []
|
|
1193
|
+
eventManager.on('sessionChanged', d => sessions.push(d))
|
|
1194
|
+
|
|
1195
|
+
await connectionService.connect('injected', 'metamask', 'solana:mainnet')
|
|
1196
|
+
sessions.length = 0 // drop the connect's own sessionChanged
|
|
1197
|
+
|
|
1198
|
+
accountSubs.get('eip155')!(['0xSWITCHED'])
|
|
1199
|
+
|
|
1200
|
+
await vi.waitFor(() => {
|
|
1201
|
+
expect(
|
|
1202
|
+
sessionManager
|
|
1203
|
+
.getSession()
|
|
1204
|
+
.availableAddresses.find(a => a.networkId === 'solana:mainnet')
|
|
1205
|
+
?.address
|
|
1206
|
+
).toBe('SoLAddr_NEW')
|
|
1207
|
+
})
|
|
1208
|
+
|
|
1209
|
+
const session = sessionManager.getSession()
|
|
1210
|
+
expect(session.activeAddress).toBe('SoLAddr_NEW')
|
|
1211
|
+
expect(session.availableAddresses).toEqual([
|
|
1212
|
+
{ address: 'SoLAddr_NEW', networkId: 'solana:mainnet' },
|
|
1213
|
+
{ address: '0xSWITCHED', networkId: 'eip155:1' }
|
|
1214
|
+
])
|
|
1215
|
+
expect(sessions.length).toBeGreaterThan(0)
|
|
1216
|
+
})
|
|
1217
|
+
|
|
1218
|
+
it('polls a lagging sibling until its live address differs from the stored one', async () => {
|
|
1219
|
+
vi.useFakeTimers()
|
|
1220
|
+
try {
|
|
1221
|
+
let call = 0
|
|
1222
|
+
const liveAccount = vi.fn(async (ns: string) => {
|
|
1223
|
+
if (ns !== 'solana') return null
|
|
1224
|
+
call++
|
|
1225
|
+
// First read still reflects the OLD (stored) address — the wallet
|
|
1226
|
+
// hasn't finished re-deriving the sibling yet.
|
|
1227
|
+
return call === 1 ? 'SoLAddr111' : 'SoLAddr_NEW'
|
|
1228
|
+
})
|
|
1229
|
+
;(mockConnector as any).getLiveAccount = liveAccount
|
|
1230
|
+
|
|
1231
|
+
await connectionService.connect(
|
|
1232
|
+
'injected',
|
|
1233
|
+
'metamask',
|
|
1234
|
+
'solana:mainnet'
|
|
1235
|
+
)
|
|
1236
|
+
|
|
1237
|
+
accountSubs.get('eip155')!(['0xSWITCHED'])
|
|
1238
|
+
|
|
1239
|
+
await vi.advanceTimersByTimeAsync(SIBLING_REFRESH_DELAY_MS)
|
|
1240
|
+
|
|
1241
|
+
const session = sessionManager.getSession()
|
|
1242
|
+
expect(
|
|
1243
|
+
session.availableAddresses.find(a => a.networkId === 'solana:mainnet')
|
|
1244
|
+
?.address
|
|
1245
|
+
).toBe('SoLAddr_NEW')
|
|
1246
|
+
expect(session.activeAddress).toBe('SoLAddr_NEW')
|
|
1247
|
+
} finally {
|
|
1248
|
+
vi.useRealTimers()
|
|
1249
|
+
}
|
|
1250
|
+
})
|
|
1251
|
+
|
|
1252
|
+
it('gives up after the poll cap when the sibling never changes, without an extra update or emit', async () => {
|
|
1253
|
+
vi.useFakeTimers()
|
|
1254
|
+
try {
|
|
1255
|
+
const liveAccount = vi.fn(async (ns: string) =>
|
|
1256
|
+
ns === 'solana' ? 'SoLAddr111' : null
|
|
1257
|
+
)
|
|
1258
|
+
;(mockConnector as any).getLiveAccount = liveAccount
|
|
1259
|
+
|
|
1260
|
+
const sessions: unknown[] = []
|
|
1261
|
+
eventManager.on('sessionChanged', d => sessions.push(d))
|
|
1262
|
+
|
|
1263
|
+
await connectionService.connect(
|
|
1264
|
+
'injected',
|
|
1265
|
+
'metamask',
|
|
1266
|
+
'solana:mainnet'
|
|
1267
|
+
)
|
|
1268
|
+
sessions.length = 0 // drop the connect's own sessionChanged
|
|
1269
|
+
|
|
1270
|
+
accountSubs.get('eip155')!(['0xSWITCHED'])
|
|
1271
|
+
// The eip155 switch's own sessionChanged fires synchronously above.
|
|
1272
|
+
expect(sessions.length).toBe(1)
|
|
1273
|
+
|
|
1274
|
+
await vi.advanceTimersByTimeAsync(
|
|
1275
|
+
SIBLING_REFRESH_MAX_ATTEMPTS * SIBLING_REFRESH_DELAY_MS
|
|
1276
|
+
)
|
|
1277
|
+
|
|
1278
|
+
const session = sessionManager.getSession()
|
|
1279
|
+
expect(
|
|
1280
|
+
session.availableAddresses.find(a => a.networkId === 'solana:mainnet')
|
|
1281
|
+
?.address
|
|
1282
|
+
).toBe('SoLAddr111')
|
|
1283
|
+
expect(session.activeAddress).toBe('SoLAddr111')
|
|
1284
|
+
// No additional sessionChanged beyond the firing namespace's own one.
|
|
1285
|
+
expect(sessions.length).toBe(1)
|
|
1286
|
+
} finally {
|
|
1287
|
+
vi.useRealTimers()
|
|
1288
|
+
}
|
|
1289
|
+
})
|
|
1290
|
+
|
|
1291
|
+
it('an empty accounts list (disconnect) does not trigger a sibling refresh', async () => {
|
|
1292
|
+
const liveAccount = vi.fn(async () => 'SoLAddr_NEW')
|
|
1293
|
+
;(mockConnector as any).getLiveAccount = liveAccount
|
|
1294
|
+
mockConnector.disconnect = vi.fn().mockResolvedValue(undefined)
|
|
1295
|
+
|
|
1296
|
+
await connectionService.connect('injected', 'metamask', 'solana:mainnet')
|
|
1297
|
+
|
|
1298
|
+
accountSubs.get('solana')!([]) // active namespace's own disconnect signal
|
|
1299
|
+
|
|
1300
|
+
expect(liveAccount).not.toHaveBeenCalled()
|
|
1301
|
+
const session = sessionManager.getSession()
|
|
1302
|
+
expect(session.activeAddress).toBeNull()
|
|
1303
|
+
expect(session.connectionMode).toBeNull()
|
|
1304
|
+
})
|
|
1305
|
+
|
|
1306
|
+
it('cancels an in-flight poll when a newer switch supersedes it — the later switch wins', async () => {
|
|
1307
|
+
vi.useFakeTimers()
|
|
1308
|
+
try {
|
|
1309
|
+
// Keyed by CALL ORDER, not by a single shared "current live value"
|
|
1310
|
+
// variable — a shared variable would let the superseded refresh's
|
|
1311
|
+
// later read silently converge with whatever the second refresh just
|
|
1312
|
+
// wrote, passing even with the generation guard deleted. Instead:
|
|
1313
|
+
// call #1 = refresh #1 (superseded), attempt 0 → equals the stored
|
|
1314
|
+
// address, so refresh #1 does NOT resolve yet and keeps polling.
|
|
1315
|
+
// call #2 = refresh #2 (superseding), attempt 0 → differs from the
|
|
1316
|
+
// stored address, so refresh #2 resolves immediately and writes
|
|
1317
|
+
// the correct value.
|
|
1318
|
+
// call #3 = refresh #1, attempt 1 — reached ONLY if refresh #1 is
|
|
1319
|
+
// allowed to keep going after being superseded (i.e. the
|
|
1320
|
+
// generation guard is missing). Returns a THIRD address that is
|
|
1321
|
+
// neither the original stored value nor refresh #2's correct
|
|
1322
|
+
// value, so if refresh #1 is ever allowed to write here, it
|
|
1323
|
+
// visibly clobbers the correct value with this stale one.
|
|
1324
|
+
let solanaCallCount = 0
|
|
1325
|
+
const liveAccount = vi.fn(async (ns: string) => {
|
|
1326
|
+
if (ns !== 'solana') return null
|
|
1327
|
+
solanaCallCount++
|
|
1328
|
+
if (solanaCallCount === 1) return 'SoLAddr111'
|
|
1329
|
+
if (solanaCallCount === 2) return 'SoLAddr_FROM_SECOND'
|
|
1330
|
+
return 'SoLAddr_STALE_FROM_FIRST'
|
|
1331
|
+
})
|
|
1332
|
+
;(mockConnector as any).getLiveAccount = liveAccount
|
|
1333
|
+
|
|
1334
|
+
await connectionService.connect(
|
|
1335
|
+
'injected',
|
|
1336
|
+
'metamask',
|
|
1337
|
+
'solana:mainnet'
|
|
1338
|
+
)
|
|
1339
|
+
|
|
1340
|
+
accountSubs.get('eip155')!(['0xSWITCHED1'])
|
|
1341
|
+
// Let the first refresh's attempt-0 read (call #1) resolve and enter
|
|
1342
|
+
// its poll wait.
|
|
1343
|
+
await vi.advanceTimersByTimeAsync(0)
|
|
1344
|
+
|
|
1345
|
+
// A newer switch fires before the first refresh's next attempt — it
|
|
1346
|
+
// supersedes the generation token. Its own attempt-0 read (call #2)
|
|
1347
|
+
// resolves synchronously below, since the stored address hasn't
|
|
1348
|
+
// moved yet.
|
|
1349
|
+
accountSubs.get('eip155')!(['0xSWITCHED2'])
|
|
1350
|
+
|
|
1351
|
+
// Drain everything: the first refresh's remaining attempts must bail
|
|
1352
|
+
// out on the generation check rather than issuing call #3 and writing
|
|
1353
|
+
// its stale value over the second refresh's correct one.
|
|
1354
|
+
await vi.advanceTimersByTimeAsync(
|
|
1355
|
+
SIBLING_REFRESH_MAX_ATTEMPTS * SIBLING_REFRESH_DELAY_MS
|
|
1356
|
+
)
|
|
1357
|
+
|
|
1358
|
+
const session = sessionManager.getSession()
|
|
1359
|
+
expect(
|
|
1360
|
+
session.availableAddresses.find(a => a.networkId === 'solana:mainnet')
|
|
1361
|
+
?.address
|
|
1362
|
+
).toBe('SoLAddr_FROM_SECOND')
|
|
1363
|
+
expect(session.activeAddress).toBe('SoLAddr_FROM_SECOND')
|
|
1364
|
+
// Never the superseded refresh's later, stale read (call #3) — this
|
|
1365
|
+
// is the write the generation guard exists to prevent.
|
|
1366
|
+
expect(session.availableAddresses.map(a => a.address)).not.toContain(
|
|
1367
|
+
'SoLAddr_STALE_FROM_FIRST'
|
|
1368
|
+
)
|
|
1369
|
+
} finally {
|
|
1370
|
+
vi.useRealTimers()
|
|
1371
|
+
}
|
|
1372
|
+
})
|
|
1373
|
+
|
|
1374
|
+
it('is a no-op (no throw, no sibling change) when the connector has no getLiveAccount', async () => {
|
|
1375
|
+
// Backward compat: connectors that predate `getLiveAccount` (Task A)
|
|
1376
|
+
// must not break the switch path.
|
|
1377
|
+
expect((mockConnector as any).getLiveAccount).toBeUndefined()
|
|
1378
|
+
|
|
1379
|
+
await connectionService.connect('injected', 'metamask', 'solana:mainnet')
|
|
1380
|
+
|
|
1381
|
+
expect(() => accountSubs.get('eip155')!(['0xSWITCHED'])).not.toThrow()
|
|
1382
|
+
|
|
1383
|
+
const session = sessionManager.getSession()
|
|
1384
|
+
expect(
|
|
1385
|
+
session.availableAddresses.find(a => a.networkId === 'solana:mainnet')
|
|
1386
|
+
?.address
|
|
1387
|
+
).toBe('SoLAddr111')
|
|
1388
|
+
})
|
|
1389
|
+
|
|
1390
|
+
it('treats an eip155 sibling address as unchanged when it differs from stored only by case', async () => {
|
|
1391
|
+
vi.useFakeTimers()
|
|
1392
|
+
try {
|
|
1393
|
+
// Changed namespace is SOLANA here; eip155 is the sibling under test.
|
|
1394
|
+
const liveAccount = vi.fn(async (ns: string) =>
|
|
1395
|
+
ns === 'eip155' ? '0X1234' : null
|
|
1396
|
+
)
|
|
1397
|
+
;(mockConnector as any).getLiveAccount = liveAccount
|
|
1398
|
+
|
|
1399
|
+
await connectionService.connect(
|
|
1400
|
+
'injected',
|
|
1401
|
+
'metamask',
|
|
1402
|
+
'solana:mainnet'
|
|
1403
|
+
)
|
|
1404
|
+
|
|
1405
|
+
accountSubs.get('solana')!(['SoLAddr_NEW'])
|
|
1406
|
+
|
|
1407
|
+
await vi.advanceTimersByTimeAsync(
|
|
1408
|
+
SIBLING_REFRESH_MAX_ATTEMPTS * SIBLING_REFRESH_DELAY_MS
|
|
1409
|
+
)
|
|
1410
|
+
|
|
1411
|
+
const session = sessionManager.getSession()
|
|
1412
|
+
expect(
|
|
1413
|
+
session.availableAddresses.find(a => a.networkId === 'eip155:1')
|
|
1414
|
+
?.address
|
|
1415
|
+
).toBe('0x1234')
|
|
1416
|
+
} finally {
|
|
1417
|
+
vi.useRealTimers()
|
|
1418
|
+
}
|
|
1419
|
+
})
|
|
1420
|
+
})
|
|
1139
1421
|
})
|
|
@@ -22,6 +22,13 @@ export interface ServiceOptions {
|
|
|
22
22
|
signal?: AbortSignal
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
/** Sibling-namespace live-account re-read poll: absorbs the lag while a wallet
|
|
26
|
+
* re-derives a sibling namespace's address (e.g. MetaMask's Solana Snap) after
|
|
27
|
+
* an account switch on another namespace. Bounded so a genuinely-unchanged
|
|
28
|
+
* sibling gives up quickly. */
|
|
29
|
+
export const SIBLING_REFRESH_MAX_ATTEMPTS = 5
|
|
30
|
+
export const SIBLING_REFRESH_DELAY_MS = 200
|
|
31
|
+
|
|
25
32
|
export class ConnectionService {
|
|
26
33
|
private activeConnector: Connector | null = null
|
|
27
34
|
/** Tears down the post-connect lifecycle subscription; set while connected. */
|
|
@@ -40,6 +47,13 @@ export class ConnectionService {
|
|
|
40
47
|
* each reading the shared activeConnector, and flood telemetry).
|
|
41
48
|
*/
|
|
42
49
|
private inFlightAbort: AbortController | null = null
|
|
50
|
+
/**
|
|
51
|
+
* Monotonic token for the in-flight cross-namespace sibling refresh (see
|
|
52
|
+
* `refreshSiblingNamespaces`). A newer account switch, a teardown, or a
|
|
53
|
+
* disconnect bumps it so a still-polling older refresh aborts before it
|
|
54
|
+
* writes a now-stale sibling address into the session.
|
|
55
|
+
*/
|
|
56
|
+
private siblingRefreshGeneration = 0
|
|
43
57
|
|
|
44
58
|
constructor(
|
|
45
59
|
private networks: Network[],
|
|
@@ -325,6 +339,14 @@ export class ConnectionService {
|
|
|
325
339
|
this.eventManager.emit('sessionChanged', {
|
|
326
340
|
session: this.sessionManager.getSession()
|
|
327
341
|
})
|
|
342
|
+
|
|
343
|
+
// A single wallet account drives ALL its namespaces (e.g. MetaMask's Solana
|
|
344
|
+
// Snap derives its key from the selected EVM account). The wallet only fired
|
|
345
|
+
// an accountsChanged for THIS namespace; refresh the live account of every
|
|
346
|
+
// other connected namespace so the session doesn't serve a stale sibling
|
|
347
|
+
// address. Fire-and-forget: we're inside the wallet's synchronous event
|
|
348
|
+
// dispatch and must not await.
|
|
349
|
+
void this.refreshSiblingNamespaces(namespace)
|
|
328
350
|
}
|
|
329
351
|
|
|
330
352
|
/**
|
|
@@ -339,6 +361,11 @@ export class ConnectionService {
|
|
|
339
361
|
this.lifecycleTeardown = undefined
|
|
340
362
|
for (const teardown of this.secondaryAccountSyncTeardowns) teardown()
|
|
341
363
|
this.secondaryAccountSyncTeardowns = []
|
|
364
|
+
// Supersede any in-flight sibling-namespace refresh (see
|
|
365
|
+
// `refreshSiblingNamespaces`) — a still-polling refresh must not write a
|
|
366
|
+
// now-stale address after teardown/disconnect. `finishDisconnect()` calls
|
|
367
|
+
// this too, so one bump here covers both paths.
|
|
368
|
+
this.siblingRefreshGeneration++
|
|
342
369
|
}
|
|
343
370
|
|
|
344
371
|
/**
|
|
@@ -452,6 +479,120 @@ export class ConnectionService {
|
|
|
452
479
|
}
|
|
453
480
|
}
|
|
454
481
|
|
|
482
|
+
/**
|
|
483
|
+
* After a real account switch on `changedNamespace`, re-read the LIVE account
|
|
484
|
+
* of every OTHER connected namespace and fold any that changed into the
|
|
485
|
+
* session in ONE update. Sibling namespaces (e.g. a MetaMask Solana Snap
|
|
486
|
+
* address derived from the EVM account) change with the underlying account but
|
|
487
|
+
* emit no `accountsChanged`, and their live read can LAG the firing namespace's
|
|
488
|
+
* event while the wallet re-derives — so poll each sibling up to
|
|
489
|
+
* `SIBLING_REFRESH_MAX_ATTEMPTS` times, `SIBLING_REFRESH_DELAY_MS` apart,
|
|
490
|
+
* stopping a sibling the moment its live address differs from the stored one.
|
|
491
|
+
*
|
|
492
|
+
* Loop-safe: writes addresses DIRECTLY via the session manager (never
|
|
493
|
+
* re-dispatches a per-namespace accountsChanged), and only emits when at least
|
|
494
|
+
* one sibling actually changed — so refreshing B here cannot re-enter this for
|
|
495
|
+
* A and recurse. Generation-guarded so a newer switch / teardown / disconnect
|
|
496
|
+
* supersedes an older still-polling refresh before it writes.
|
|
497
|
+
*/
|
|
498
|
+
private async refreshSiblingNamespaces(
|
|
499
|
+
changedNamespace: Namespace
|
|
500
|
+
): Promise<void> {
|
|
501
|
+
const connector = this.activeConnector
|
|
502
|
+
if (!connector?.getLiveAccount) return
|
|
503
|
+
const gen = ++this.siblingRefreshGeneration
|
|
504
|
+
|
|
505
|
+
const namespaceForNetworkId = (
|
|
506
|
+
networkId: NetworkId
|
|
507
|
+
): Namespace | undefined =>
|
|
508
|
+
this.networks.find(n => n.id === networkId)?.namespace
|
|
509
|
+
|
|
510
|
+
// Sibling = every connected namespace except the one that just fired.
|
|
511
|
+
const initial = this.sessionManager.getSession()
|
|
512
|
+
const siblings = new Set<Namespace>()
|
|
513
|
+
for (const addr of initial.availableAddresses) {
|
|
514
|
+
const ns = namespaceForNetworkId(addr.networkId)
|
|
515
|
+
if (ns && ns !== changedNamespace) siblings.add(ns)
|
|
516
|
+
}
|
|
517
|
+
if (siblings.size === 0) return
|
|
518
|
+
|
|
519
|
+
const equal = (ns: Namespace, a: string, b: string): boolean =>
|
|
520
|
+
ns === 'eip155' ? a.toLowerCase() === b.toLowerCase() : a === b
|
|
521
|
+
|
|
522
|
+
const storedFor = (ns: Namespace): string | undefined => {
|
|
523
|
+
const s = this.sessionManager.getSession()
|
|
524
|
+
for (const addr of s.availableAddresses) {
|
|
525
|
+
if (namespaceForNetworkId(addr.networkId) === ns) return addr.address
|
|
526
|
+
}
|
|
527
|
+
return undefined
|
|
528
|
+
}
|
|
529
|
+
|
|
530
|
+
const resolved = new Map<Namespace, string>()
|
|
531
|
+
const pending = new Set(siblings)
|
|
532
|
+
|
|
533
|
+
for (
|
|
534
|
+
let attempt = 0;
|
|
535
|
+
attempt < SIBLING_REFRESH_MAX_ATTEMPTS && pending.size > 0;
|
|
536
|
+
attempt++
|
|
537
|
+
) {
|
|
538
|
+
// Superseded (newer switch), disconnected, or connector swapped → abandon.
|
|
539
|
+
if (
|
|
540
|
+
gen !== this.siblingRefreshGeneration ||
|
|
541
|
+
this.activeConnector !== connector
|
|
542
|
+
)
|
|
543
|
+
return
|
|
544
|
+
for (const ns of [...pending]) {
|
|
545
|
+
let live: string | null = null
|
|
546
|
+
try {
|
|
547
|
+
live = await connector.getLiveAccount!(ns)
|
|
548
|
+
} catch {
|
|
549
|
+
live = null
|
|
550
|
+
}
|
|
551
|
+
if (
|
|
552
|
+
gen !== this.siblingRefreshGeneration ||
|
|
553
|
+
this.activeConnector !== connector
|
|
554
|
+
)
|
|
555
|
+
return
|
|
556
|
+
if (!live) continue
|
|
557
|
+
const stored = storedFor(ns)
|
|
558
|
+
if (stored != null && !equal(ns, stored, live)) {
|
|
559
|
+
resolved.set(ns, live)
|
|
560
|
+
pending.delete(ns)
|
|
561
|
+
}
|
|
562
|
+
// stored == live (not yet re-derived) → keep polling until the cap.
|
|
563
|
+
}
|
|
564
|
+
if (pending.size === 0) break
|
|
565
|
+
await new Promise<void>(r => setTimeout(r, SIBLING_REFRESH_DELAY_MS))
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
if (resolved.size === 0) return
|
|
569
|
+
if (
|
|
570
|
+
gen !== this.siblingRefreshGeneration ||
|
|
571
|
+
this.activeConnector !== connector
|
|
572
|
+
)
|
|
573
|
+
return
|
|
574
|
+
|
|
575
|
+
const session = this.sessionManager.getSession()
|
|
576
|
+
const availableAddresses = session.availableAddresses.map(addr => {
|
|
577
|
+
const ns = namespaceForNetworkId(addr.networkId)
|
|
578
|
+
const next = ns ? resolved.get(ns) : undefined
|
|
579
|
+
return next ? { ...addr, address: next } : addr
|
|
580
|
+
})
|
|
581
|
+
// If the ACTIVE network's namespace was among the refreshed siblings, move
|
|
582
|
+
// activeAddress too (e.g. a Solana-active session whose Solana address just
|
|
583
|
+
// followed an EVM switch).
|
|
584
|
+
const activeNs = session.activeNetwork?.namespace
|
|
585
|
+
const activeAddress =
|
|
586
|
+
activeNs && resolved.has(activeNs)
|
|
587
|
+
? resolved.get(activeNs)!
|
|
588
|
+
: session.activeAddress
|
|
589
|
+
|
|
590
|
+
this.sessionManager.updateSession({ activeAddress, availableAddresses })
|
|
591
|
+
this.eventManager.emit('sessionChanged', {
|
|
592
|
+
session: this.sessionManager.getSession()
|
|
593
|
+
})
|
|
594
|
+
}
|
|
595
|
+
|
|
455
596
|
private async connectWithURIPoll(
|
|
456
597
|
connector: Connector,
|
|
457
598
|
network: Network,
|