UNPKG

saepenatus

Version:

Web3-Onboard makes it simple to connect Ethereum hardware and software wallets to your dapp. Features standardised spec compliant web3 providers for all supported wallets, framework agnostic modern javascript UI with code splitting, CSS customization, mul

75 lines (55 loc) 2.18 kB
"use strict"; import { connect } from "net"; import { defineReadOnly } from "@ethersproject/properties"; import { Networkish } from "@ethersproject/networks"; import { Logger } from "@ethersproject/logger"; import { version } from "./_version"; const logger = new Logger(version); import { JsonRpcProvider } from "./json-rpc-provider"; export class IpcProvider extends JsonRpcProvider { readonly path: string; constructor(path: string, network?: Networkish) { logger.checkNew(new.target, IpcProvider); if (path == null) { logger.throwError("missing path", Logger.errors.MISSING_ARGUMENT, { arg: "path" }); } super("ipc://" + path, network); defineReadOnly(this, "path", path); } // @TODO: Create a connection to the IPC path and use filters instead of polling for block send(method: string, params: Array<any>): Promise<any> { // This method is very simple right now. We create a new socket // connection each time, which may be slower, but the main // advantage we are aiming for now is security. This simplifies // multiplexing requests (since we do not need to multiplex). let payload = JSON.stringify({ method: method, params: params, id: 42, jsonrpc: "2.0" }); return new Promise((resolve, reject) => { let response = Buffer.alloc(0); let stream = connect(this.path); stream.on("data", (data) => { response = Buffer.concat([ response, data ]); }); stream.on("end", () => { try { resolve(JSON.parse(response.toString()).result); // @TODO: Better pull apart the error stream.destroy(); } catch (error) { reject(error); stream.destroy(); } }); stream.on("error", (error) => { reject(error); stream.destroy(); }); stream.write(payload); stream.end(); }); } }