Skip to content

Commit 82b46c5

Browse files
committed
fix heartbeats, improve reconnect logic
1 parent 29bfe8f commit 82b46c5

File tree

7 files changed

+3825
-3524
lines changed

7 files changed

+3825
-3524
lines changed

packages/wallet-sdk/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@coinbase/wallet-sdk",
3-
"version": "3.9.4",
3+
"version": "3.9.5",
44
"description": "Coinbase Wallet JavaScript SDK",
55
"keywords": [
66
"cipher",

packages/wallet-sdk/src/relay/walletlink/WalletLinkRelay.test.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ describe('WalletLinkRelay', () => {
1919
linkAPIUrl: 'http://link-api-url',
2020
version: '0.0.0',
2121
darkMode: false,
22+
headlessMode: false,
2223
storage: new ScopedLocalStorage('test'),
2324
relayEventManager: new RelayEventManager(),
2425
uiConstructor: jest.fn(),

packages/wallet-sdk/src/relay/walletlink/WalletLinkRelay.ts

Lines changed: 58 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
116116
}
117117

118118
linkedUpdated = (linked: boolean) => {
119+
console.debug('[WalletLinkRelay] Link status updated:', linked);
119120
this.isLinked = linked;
120121
const cachedAddresses = this.storage.getItem(LOCAL_STORAGE_ADDRESSES_KEY);
121122

@@ -140,10 +141,12 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
140141
};
141142

142143
metadataUpdated = (key: string, value: string) => {
144+
console.debug('[WalletLinkRelay] Metadata updated:', { key, value });
143145
this.storage.setItem(key, value);
144146
};
145147

146148
chainUpdated = (chainId: string, jsonRpcUrl: string) => {
149+
console.debug('[WalletLinkRelay] Chain updated:', { chainId, jsonRpcUrl });
147150
if (
148151
this.chainCallbackParams.chainId === chainId &&
149152
this.chainCallbackParams.jsonRpcUrl === jsonRpcUrl
@@ -161,6 +164,7 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
161164
};
162165

163166
accountUpdated = (selectedAddress: string) => {
167+
console.debug('[WalletLinkRelay] Account updated:', selectedAddress);
164168
if (this.accountsCallback) {
165169
this.accountsCallback([selectedAddress]);
166170
}
@@ -170,29 +174,35 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
170174
// reason we don't get a response via an explicit web3 message
171175
// we can still fulfill the eip1102 request.
172176
Array.from(WalletLinkRelay.accountRequestCallbackIds.values()).forEach((id) => {
173-
const message: WalletLinkEventData = {
177+
const message: WalletLinkResponseEventData = {
174178
type: 'WEB3_RESPONSE',
175179
id,
176180
response: {
177181
method: 'requestEthereumAccounts',
178182
result: [selectedAddress as AddressString],
179183
},
180184
};
181-
this.invokeCallback({ ...message, id });
185+
this.invokeCallback(message);
182186
});
183187
WalletLinkRelay.accountRequestCallbackIds.clear();
184188
}
185189
};
186190

187191
connectedUpdated = (connected: boolean) => {
188-
this.ui.setConnected(connected);
192+
console.debug('[WalletLinkRelay] Connection status updated:', connected);
193+
if (this.ui) {
194+
this.ui.setConnected(connected);
195+
} else {
196+
console.warn('[WalletLinkRelay] UI not initialized, skipping setConnected call');
197+
}
189198
};
190199

191200
public attachUI() {
192201
this.ui.attach();
193202
}
194203

195204
public resetAndReload(): void {
205+
console.debug('[WalletLinkRelay] Reset and reload triggered');
196206
Promise.race([
197207
this.connection.setSessionMetadata('__destroyed', '1'),
198208
new Promise((resolve) => setTimeout(() => resolve(null), 1000)),
@@ -452,6 +462,13 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
452462
protected publishWeb3RequestEvent(id: string, request: Web3Request): void {
453463
const message: WalletLinkEventData = { type: 'WEB3_REQUEST', id, request };
454464
const storedSession = Session.load(this.storage);
465+
console.debug('[WalletLinkRelay] Publishing Web3Request:', {
466+
id,
467+
method: request.method,
468+
params: 'params' in request ? request.params : undefined,
469+
sessionId: this._session.id,
470+
});
471+
455472
this.diagnostic?.log(EVENTS.WEB3_REQUEST, {
456473
eventId: message.id,
457474
method: `relay::${request.method}`,
@@ -461,7 +478,12 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
461478
});
462479

463480
this.publishEvent('Web3Request', message, true)
464-
.then((_) => {
481+
.then((eventId) => {
482+
console.debug('[WalletLinkRelay] Web3Request published successfully:', {
483+
id,
484+
eventId,
485+
method: request.method,
486+
});
465487
this.diagnostic?.log(EVENTS.WEB3_REQUEST_PUBLISHED, {
466488
eventId: message.id,
467489
method: `relay::${request.method}`,
@@ -471,6 +493,11 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
471493
});
472494
})
473495
.catch((err) => {
496+
console.error('[WalletLinkRelay] Failed to publish Web3Request:', {
497+
id,
498+
method: request.method,
499+
error: err.message,
500+
});
474501
this.handleWeb3ResponseMessage({
475502
type: 'WEB3_RESPONSE',
476503
id: message.id,
@@ -487,6 +514,7 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
487514
type: 'WEB3_REQUEST_CANCELED',
488515
id,
489516
};
517+
console.debug('[WalletLinkRelay] Publishing Web3RequestCanceled:', { id });
490518
this.publishEvent('Web3RequestCanceled', message, false).then();
491519
}
492520

@@ -495,18 +523,31 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
495523
message: WalletLinkEventData,
496524
callWebhook: boolean
497525
): Promise<string> {
526+
console.debug('[WalletLinkRelay] Publishing event:', {
527+
event,
528+
message,
529+
callWebhook,
530+
});
498531
return this.connection.publishEvent(event, message, callWebhook);
499532
}
500533

501534
handleWeb3ResponseMessage(message: WalletLinkResponseEventData) {
502535
const { response } = message;
536+
console.debug('[WalletLinkRelay] Handling Web3Response:', {
537+
id: message.id,
538+
method: response.method,
539+
hasResult: 'result' in response,
540+
hasError: 'errorMessage' in response,
541+
errorMessage: 'errorMessage' in response ? response.errorMessage : undefined,
542+
});
503543

504544
this.diagnostic?.log(EVENTS.WEB3_RESPONSE, {
505545
eventId: message.id,
506546
method: `relay::${response.method}`,
507547
sessionIdHash: this.getSessionIdHash(),
508548
});
509549
if (response.method === 'requestEthereumAccounts') {
550+
console.debug('[WalletLinkRelay] Processing requestEthereumAccounts response for all callbacks');
510551
WalletLinkRelay.accountRequestCallbackIds.forEach((id) =>
511552
this.invokeCallback({ ...message, id })
512553
);
@@ -524,6 +565,12 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
524565
errorCode?: number
525566
) {
526567
const errorMessage = error?.message ?? getMessageFromCode(errorCode);
568+
console.debug('[WalletLinkRelay] Handling error response:', {
569+
id,
570+
method,
571+
errorMessage,
572+
errorCode,
573+
});
527574
this.handleWeb3ResponseMessage({
528575
type: 'WEB3_RESPONSE',
529576
id,
@@ -537,9 +584,16 @@ export class WalletLinkRelay extends RelayAbstract implements WalletLinkConnecti
537584

538585
private invokeCallback(message: WalletLinkResponseEventData) {
539586
const callback = this.relayEventManager.callbacks.get(message.id);
587+
console.debug('[WalletLinkRelay] Invoking callback:', {
588+
id: message.id,
589+
hasCallback: !!callback,
590+
method: message.response.method,
591+
});
540592
if (callback) {
541593
callback(message.response);
542594
this.relayEventManager.callbacks.delete(message.id);
595+
} else {
596+
console.warn('[WalletLinkRelay] No callback found for response:', message.id);
543597
}
544598
}
545599

0 commit comments

Comments
 (0)