From 329732d47886e32681d7f726fe5900d861ec7160 Mon Sep 17 00:00:00 2001 From: Jaco Date: Sat, 17 Dec 2022 14:57:14 +0200 Subject: [PATCH] Ping on enabled extension (#1183) --- .../extension-base/src/background/handlers/Extension.ts | 3 +++ packages/extension-base/src/background/handlers/Tabs.ts | 3 +++ packages/extension-base/src/background/types.ts | 2 ++ packages/extension-base/src/page/Injected.ts | 6 ++++++ packages/extension-ui/src/messaging.ts | 4 ++++ 5 files changed, 18 insertions(+) diff --git a/packages/extension-base/src/background/handlers/Extension.ts b/packages/extension-base/src/background/handlers/Extension.ts index 5cdd0799..cc74db2a 100644 --- a/packages/extension-base/src/background/handlers/Extension.ts +++ b/packages/extension-base/src/background/handlers/Extension.ts @@ -625,6 +625,9 @@ export default class Extension { case 'pri(json.account.info)': return this.jsonGetAccountInfo(request as KeyringPair$Json); + case 'pri(ping)': + return Promise.resolve(true); + case 'pri(seed.create)': return this.seedCreate(request as RequestSeedCreate); diff --git a/packages/extension-base/src/background/handlers/Tabs.ts b/packages/extension-base/src/background/handlers/Tabs.ts index 49d9edf8..2e2253da 100644 --- a/packages/extension-base/src/background/handlers/Tabs.ts +++ b/packages/extension-base/src/background/handlers/Tabs.ts @@ -244,6 +244,9 @@ export default class Tabs { case 'pub(metadata.provide)': return this.metadataProvide(url, request as MetadataDef); + case 'pub(ping)': + return Promise.resolve(true); + case 'pub(rpc.listProviders)': return this.rpcListProviders(); diff --git a/packages/extension-base/src/background/types.ts b/packages/extension-base/src/background/types.ts index 7ccf20f2..c9b86a43 100644 --- a/packages/extension-base/src/background/types.ts +++ b/packages/extension-base/src/background/types.ts @@ -109,6 +109,7 @@ export interface RequestSignatures { 'pri(metadata.reject)': [RequestMetadataReject, boolean]; 'pri(metadata.requests)': [RequestMetadataSubscribe, boolean, MetadataRequest[]]; 'pri(metadata.list)': [null, MetadataDef[]]; + 'pri(ping)': [null, boolean]; 'pri(seed.create)': [RequestSeedCreate, ResponseSeedCreate]; 'pri(seed.validate)': [RequestSeedValidate, ResponseSeedValidate]; 'pri(settings.notification)': [string, boolean]; @@ -128,6 +129,7 @@ export interface RequestSignatures { 'pub(metadata.list)': [null, InjectedMetadataKnown[]]; 'pub(metadata.provide)': [MetadataDef, boolean]; 'pub(phishing.redirectIfDenied)': [null, boolean]; + 'pub(ping)': [null, boolean]; 'pub(rpc.listProviders)': [void, ResponseRpcListProviders]; 'pub(rpc.send)': [RequestRpcSend, JsonRpcResponse]; 'pub(rpc.startProvider)': [string, ProviderMeta]; diff --git a/packages/extension-base/src/page/Injected.ts b/packages/extension-base/src/page/Injected.ts index 60304038..b0733725 100644 --- a/packages/extension-base/src/page/Injected.ts +++ b/packages/extension-base/src/page/Injected.ts @@ -23,5 +23,11 @@ export default class implements Injected { this.metadata = new Metadata(sendRequest); this.provider = new PostMessageProvider(sendRequest); this.signer = new Signer(sendRequest); + + setInterval((): void => { + sendRequest('pub(ping)', null).catch((): void => { + console.error('Extension unavailable, ping failed'); + }); + }, 5_000 + Math.floor(Math.random() * 5_000)); } } diff --git a/packages/extension-ui/src/messaging.ts b/packages/extension-ui/src/messaging.ts index 878d7ccd..9b4d8fad 100644 --- a/packages/extension-ui/src/messaging.ts +++ b/packages/extension-ui/src/messaging.ts @@ -243,3 +243,7 @@ export async function batchRestore (file: KeyringPairs$Json, password: string): export async function setNotification (notification: string): Promise { return sendMessage('pri(settings.notification)', notification); } + +export async function ping (): Promise { + return sendMessage('pri(ping)', null); +}