Skip to content

Commit

Permalink
feat: server maintained rpcBatch fallback whitelist hosts (#2769)
Browse files Browse the repository at this point in the history
  • Loading branch information
qwang1113 committed Mar 27, 2023
1 parent ddd2d76 commit 87034bb
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 3 deletions.
11 changes: 11 additions & 0 deletions packages/engine/src/dbs/simple/entity/SimpleDbEntitySetting.ts
Expand Up @@ -9,6 +9,7 @@ export type ISimpleDbEntitySettings = {
swapReceivingIsNotSendingAccountShown?: boolean;
swapReceivingUnknownShown?: boolean;
swapPriceImpactShown?: boolean;
disabledRpcBatchHosts?: string[];
};

export class SimpleDbEntitySetting extends SimpleDbEntityBase<ISimpleDbEntitySettings> {
Expand Down Expand Up @@ -96,4 +97,14 @@ export class SimpleDbEntitySetting extends SimpleDbEntityBase<ISimpleDbEntitySet
const data = await this.getRawData();
return Boolean(data?.swapPriceImpactShown);
}

async setRpcBatchFallbackWhitelistHosts(value: string[]) {
const rawData = await this.getRawData();
return this.setRawData({ ...rawData, disabledRpcBatchHosts: value });
}

async getRpcBatchFallbackWhitelistHosts() {
const data = await this.getRawData();
return data?.disabledRpcBatchHosts || [];
}
}
4 changes: 4 additions & 0 deletions packages/kit-bg/src/services/ServiceSetting.ts
Expand Up @@ -29,6 +29,7 @@ type RemoteSetting = {
swapMaintain: boolean;
helloVersion: string;
bookmarkVersion: string;
disabledRpcBatchHosts: string[];
};

@backgroundClass()
Expand All @@ -46,6 +47,9 @@ export default class ServiceSetting extends ServiceBase {
const data = res.data as RemoteSetting;
await simpleDb.setting.setEnableAppRatings(data.enableAppRatings);
await simpleDb.setting.setSwapMaintain(data.swapMaintain);
await simpleDb.setting.setRpcBatchFallbackWhitelistHosts(
data.disabledRpcBatchHosts,
);
dispatch(setSwapMaintain(data.swapMaintain));
let v = '';
if (platformEnv.isNativeIOS || platformEnv.isMas) {
Expand Down
11 changes: 8 additions & 3 deletions packages/shared/src/request/JsonRPCRequest.ts
@@ -1,6 +1,7 @@
import fetch from 'cross-fetch';
import timeoutSignal from 'timeout-signal';

import simpleDb from '@onekeyhq/engine/src/dbs/simple/simpleDb';
import type { IJsonRpcResponsePro } from '@onekeyhq/engine/src/types';
import {
JsonPRCResponseError,
Expand All @@ -11,8 +12,6 @@ import type { IJsonRpcRequest } from '@onekeyfe/cross-inpage-provider-types';

type JsonRpcParams = undefined | { [p: string]: any } | Array<any>;

const disabledRpcBatchHosts = ['rpc-endurance.fusionist.io'];

function normalizePayload(
method: string,
params: JsonRpcParams,
Expand All @@ -33,6 +32,8 @@ class JsonRPCRequest {

readonly headers: Record<string, string>;

private disabledRpcBatchHosts: string[] = [];

constructor(url: string, headers?: Record<string, string>, timeout = 30000) {
this.url = url;
this.timeout = timeout;
Expand All @@ -43,6 +44,10 @@ class JsonRPCRequest {
if (headers) {
Object.assign(this.headers, headers);
}

simpleDb.setting
.getRpcBatchFallbackWhitelistHosts()
.then((value) => (this.disabledRpcBatchHosts = value));
}

private static parseRPCResponse<T>(
Expand Down Expand Up @@ -95,7 +100,7 @@ class JsonRPCRequest {
): Promise<T> {
let jsonResponses: unknown[] = [];

if (!disabledRpcBatchHosts.includes(new URL(this.url).hostname)) {
if (!this.disabledRpcBatchHosts.includes(new URL(this.url).hostname)) {
const payload = calls.map(([method, params], index) =>
normalizePayload(method, params, index),
);
Expand Down

0 comments on commit 87034bb

Please sign in to comment.