import { commonRequest, commonResult } from '../grpc-web-index'; import { sendHttpsRequest } from './sendHttpRequest'; interface AdditionalSetting { proxyHostname?: string; proxyHostnameTls?: string; } interface NodeItem { nodeAddr: string tlsEnable?: string certFileName?: string certKeyFileName?: string options?: { hostName: string; } } // type TxRequest = common.TxRequest const DefaultGrpcOption = { 'grpc.max_send_message_length': -1, 'grpc.max_receive_message_length': -1, 'grpc.max_reconnect_backoff_ms': 1024, } export class RpcNodeClient { constructor(nodeConfigArray: NodeItem[], requestTimeout: number, additionalSetting?: AdditionalSetting) { this.requestTimeout = requestTimeout || 30000; this.additionalSetting = additionalSetting; this.nodeList = nodeConfigArray.concat(); nodeConfigArray.forEach((config) => { const { nodeAddr, tlsEnable, options } = config; // 49.232.86.161:12302 if (typeof nodeAddr !== 'string') throw new Error('[nodeAddr] must be a string'); const grpcOption = { ...DefaultGrpcOption }; if (tlsEnable && options) { const { hostName: sslTargetNameOverride } = options; if (sslTargetNameOverride) { grpcOption['grpc.ssl_target_name_override'] = sslTargetNameOverride; grpcOption['grpc.default_authority'] = sslTargetNameOverride; } } this.nodeList.push({ nodeAddr, tlsEnable, options, }); }); } private requestTimeout: number; private nodeList: NodeItem[] = []; private additionalSetting?: AdditionalSetting; private clientIndex = 0; async SendRequest(request: any, apiUrl:string) { const nodeItem = this.nodeList[this.clientIndex]; const meta = { url: apiUrl, 'X-Grpc-node': nodeItem.nodeAddr, ...(nodeItem.tlsEnable ? { 'X-Grpc-ssl-cert': nodeItem.certFileName, 'X-Grpc-ssl-cert-key': nodeItem.certKeyFileName, 'X-Grpc-ssl_target_name_override': nodeItem.options?.hostName, 'X-Grpc-ssl-target-name': nodeItem.options?.hostName, } : {}), }; try { return await sendHttpsRequest(request, meta, this.requestTimeout); } catch (error) { const result = new commonResult.Result(); result.code = commonResult.TxStatusCode.INTERNAL_ERROR; result.message = `call sendRequest error: ${error}`; return result; } } // fetch(nodeItem.nodeAddr, { // method: 'POST', // headers: { // 'Content-Type': 'application/json', // }, // body: JSON.stringify({ // csr: pemCsr, // }), // }) // .then(response => response.json()) // .then(data => { // console.log('----- 签名结果 -----'); // console.log(data); // }) // SendRequest: GrpcUnaryServiceInterface (message: dependency_1.common.TxRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall { // return super.SendRequest(message, metadata, options, callback); // }; // SendRequestSync: GrpcUnaryServiceInterface = (message: dependency_1.common.TxRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.SendRequestSync(message, metadata, options, callback); // }; // Subscribe: GrpcStreamServiceInterface = (message: dependency_1.common.TxRequest, metadata?: grpc_1.Metadata | grpc_1.CallOptions, options?: grpc_1.CallOptions): grpc_1.ClientReadableStream => { // return super.Subscribe(message, metadata, options); // }; // SubscribeWS: GrpcStreamServiceInterface = (message: dependency_1.common.RawTxRequest, metadata?: grpc_1.Metadata | grpc_1.CallOptions, options?: grpc_1.CallOptions): grpc_1.ClientReadableStream => { // return super.SubscribeWS(message, metadata, options); // }; // UpdateDebugConfig: GrpcUnaryServiceInterface = (message: dependency_3.config.DebugConfigRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.UpdateDebugConfig(message, metadata, options, callback); // }; // RefreshLogLevelsConfig: GrpcUnaryServiceInterface = (message: dependency_4.config.LogLevelsRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.RefreshLogLevelsConfig(message, metadata, options, callback); // }; // GetChainMakerVersion: GrpcUnaryServiceInterface = (message: dependency_5.config.ChainMakerVersionRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.GetChainMakerVersion(message, metadata, options, callback); // }; // CheckNewBlockChainConfig: GrpcUnaryServiceInterface = (message: dependency_3.config.CheckNewBlockChainConfigRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.CheckNewBlockChainConfig(message, metadata, options, callback); // }; // GetPoolStatus: GrpcUnaryServiceInterface = (message: dependency_7.txpool.GetPoolStatusRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.GetPoolStatus(message, metadata, options, callback); // }; // GetTxIdsByTypeAndStage: GrpcUnaryServiceInterface = (message: dependency_7.txpool.GetTxIdsByTypeAndStageRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.GetTxIdsByTypeAndStage(message, metadata, options, callback); // }; // GetTxsInPoolByTxIds: GrpcUnaryServiceInterface = (message: dependency_7.txpool.GetTxsInPoolByTxIdsRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.GetTxsInPoolByTxIds(message, metadata, options, callback); // }; // GetConsensusStateJSON: GrpcUnaryServiceInterface = (message: dependency_9.consensus.GetConsensusStatusRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.GetConsensusStateJSON(message, metadata, options, callback); // }; // GetConsensusValidators: GrpcUnaryServiceInterface = (message: dependency_9.consensus.GetConsensusStatusRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.GetConsensusValidators(message, metadata, options, callback); // }; // GetConsensusHeight: GrpcUnaryServiceInterface = (message: dependency_9.consensus.GetConsensusStatusRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.GetConsensusHeight(message, metadata, options, callback); // }; // GetSyncState: GrpcUnaryServiceInterface = (message: dependency_10.sync.GetSyncStateRequest, metadata: grpc_1.Metadata | grpc_1.CallOptions | grpc_1.requestCallback, options?: grpc_1.CallOptions | grpc_1.requestCallback, callback?: grpc_1.requestCallback): grpc_1.ClientUnaryCall => { // return super.GetSyncState(message, metadata, options, callback); // }; }