From 6b3da08683c57a982ec730f2a3b729f0f868c331 Mon Sep 17 00:00:00 2001 From: Richard Moore Date: Mon, 27 Apr 2020 06:31:43 -0400 Subject: [PATCH] Updated dist files. --- lib.esm/_version.d.ts | 2 +- lib.esm/_version.js | 2 +- lib.esm/index.d.ts | 4 +- lib.esm/json-rpc-provider.js | 2 +- lib.esm/web3-provider.d.ts | 23 +++++-- lib.esm/web3-provider.js | 105 ++++++++++++++++++++++---------- lib/_version.d.ts | 2 +- lib/_version.js | 2 +- lib/index.d.ts | 4 +- lib/json-rpc-provider.js | 2 +- lib/web3-provider.d.ts | 23 +++++-- lib/web3-provider.js | 114 +++++++++++++++++++++++------------ package.json | 4 +- src.ts/_version.ts | 2 +- 14 files changed, 197 insertions(+), 94 deletions(-) diff --git a/lib.esm/_version.d.ts b/lib.esm/_version.d.ts index 654ae53485..053ba1da3c 100644 --- a/lib.esm/_version.d.ts +++ b/lib.esm/_version.d.ts @@ -1 +1 @@ -export declare const version = "providers/5.0.0-beta.163"; +export declare const version = "providers/5.0.0-beta.164"; diff --git a/lib.esm/_version.js b/lib.esm/_version.js index 6b96aecb0e..cacc3a20b0 100644 --- a/lib.esm/_version.js +++ b/lib.esm/_version.js @@ -1 +1 @@ -export const version = "providers/5.0.0-beta.163"; +export const version = "providers/5.0.0-beta.164"; diff --git a/lib.esm/index.d.ts b/lib.esm/index.d.ts index a88861d294..1f66167fa2 100644 --- a/lib.esm/index.d.ts +++ b/lib.esm/index.d.ts @@ -12,7 +12,7 @@ import { JsonRpcProvider, JsonRpcSigner } from "./json-rpc-provider"; import { NodesmithProvider } from "./nodesmith-provider"; import { Web3Provider } from "./web3-provider"; import { WebSocketProvider } from "./websocket-provider"; -import { AsyncSendable } from "./web3-provider"; +import { ExternalProvider, JsonRpcFetchFunc } from "./web3-provider"; import { Formatter } from "./formatter"; declare function getDefaultProvider(network?: Network | string, options?: any): BaseProvider; -export { Provider, BaseProvider, FallbackProvider, AlchemyProvider, CloudflareProvider, EtherscanProvider, InfuraProvider, JsonRpcProvider, NodesmithProvider, Web3Provider, WebSocketProvider, IpcProvider, JsonRpcSigner, getDefaultProvider, getNetwork, Formatter, Block, BlockTag, EventType, Filter, Log, Listener, TransactionReceipt, TransactionRequest, TransactionResponse, AsyncSendable, Network, Networkish }; +export { Provider, BaseProvider, FallbackProvider, AlchemyProvider, CloudflareProvider, EtherscanProvider, InfuraProvider, JsonRpcProvider, NodesmithProvider, Web3Provider, WebSocketProvider, IpcProvider, JsonRpcSigner, getDefaultProvider, getNetwork, Formatter, Block, BlockTag, EventType, Filter, Log, Listener, TransactionReceipt, TransactionRequest, TransactionResponse, ExternalProvider, JsonRpcFetchFunc, Network, Networkish }; diff --git a/lib.esm/json-rpc-provider.js b/lib.esm/json-rpc-provider.js index 45339a0ba9..2c0d09a8df 100644 --- a/lib.esm/json-rpc-provider.js +++ b/lib.esm/json-rpc-provider.js @@ -245,7 +245,7 @@ export class JsonRpcProvider extends BaseProvider { this._nextId = 42; } static defaultUrl() { - return "http:/" + "/localhost:8545"; + return "http:/\/localhost:8545"; } getSigner(addressOrIndex) { return new JsonRpcSigner(_constructorGuard, this, addressOrIndex); diff --git a/lib.esm/web3-provider.d.ts b/lib.esm/web3-provider.d.ts index 682d6ee67f..f7b591fe40 100644 --- a/lib.esm/web3-provider.d.ts +++ b/lib.esm/web3-provider.d.ts @@ -1,15 +1,26 @@ import { Networkish } from "@ethersproject/networks"; import { JsonRpcProvider } from "./json-rpc-provider"; -export declare type AsyncSendable = { +export declare type ExternalProvider = { isMetaMask?: boolean; host?: string; path?: string; - sendAsync?: (request: any, callback: (error: any, response: any) => void) => void; - send?: (request: any, callback: (error: any, response: any) => void) => void; + sendAsync?: (request: { + method: string; + params?: Array; + }, callback: (error: any, response: any) => void) => void; + send?: (request: { + method: string; + params?: Array; + }, callback: (error: any, response: any) => void) => void; + request?: (request: { + method: string; + params?: Array; + }) => Promise; }; +export declare type JsonRpcFetchFunc = (method: string, params?: Array) => Promise; export declare class Web3Provider extends JsonRpcProvider { - readonly provider: AsyncSendable; - private _sendAsync; - constructor(web3Provider: AsyncSendable, network?: Networkish); + readonly provider: ExternalProvider; + readonly jsonRpcFetchFunc: JsonRpcFetchFunc; + constructor(provider: ExternalProvider | JsonRpcFetchFunc, network?: Networkish); send(method: string, params: Array): Promise; } diff --git a/lib.esm/web3-provider.js b/lib.esm/web3-provider.js index 1da591ca1a..a4e86e5c7f 100644 --- a/lib.esm/web3-provider.js +++ b/lib.esm/web3-provider.js @@ -4,53 +4,94 @@ import { Logger } from "@ethersproject/logger"; import { version } from "./_version"; const logger = new Logger(version); import { JsonRpcProvider } from "./json-rpc-provider"; -export class Web3Provider extends JsonRpcProvider { - constructor(web3Provider, network) { - logger.checkNew(new.target, Web3Provider); - // HTTP has a host; IPC has a path. - super(web3Provider.host || web3Provider.path || "", network); - if (web3Provider) { - if (web3Provider.sendAsync) { - this._sendAsync = web3Provider.sendAsync.bind(web3Provider); - } - else if (web3Provider.send) { - this._sendAsync = web3Provider.send.bind(web3Provider); - } - } - if (!this._sendAsync) { - logger.throwArgumentError("invalid web3Provider", "web3Provider", web3Provider); - } - defineReadOnly(this, "provider", web3Provider); - } - send(method, params) { +let _nextId = 1; +function buildWeb3LegacyFetcher(provider, sendFunc) { + return function (method, params) { // Metamask complains about eth_sign (and on some versions hangs) - if (method == "eth_sign" && this.provider.isMetaMask) { + if (method == "eth_sign" && provider.isMetaMask) { // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign method = "personal_sign"; params = [params[1], params[0]]; } + const request = { + method: method, + params: params, + id: (_nextId++), + jsonrpc: "2.0" + }; return new Promise((resolve, reject) => { - const request = { - method: method, - params: params, - id: (this._nextId++), - jsonrpc: "2.0" - }; - this._sendAsync(request, function (error, result) { + sendFunc(request, function (error, result) { if (error) { - reject(error); - return; + return reject(error); } if (result.error) { - // @TODO: not any const error = new Error(result.error.message); error.code = result.error.code; error.data = result.error.data; - reject(error); - return; + return reject(error); } resolve(result.result); }); }); + }; +} +function buildEip1193Fetcher(provider) { + return function (method, params) { + if (params == null) { + params = []; + } + // Metamask complains about eth_sign (and on some versions hangs) + if (method == "eth_sign" && provider.isMetaMask) { + // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign + method = "personal_sign"; + params = [params[1], params[0]]; + } + return provider.request({ method, params }); + }; +} +export class Web3Provider extends JsonRpcProvider { + constructor(provider, network) { + logger.checkNew(new.target, Web3Provider); + if (provider == null) { + logger.throwArgumentError("missing provider", "provider", provider); + } + let path = null; + let jsonRpcFetchFunc = null; + let subprovider = null; + if (typeof (provider) === "function") { + path = "unknown:"; + jsonRpcFetchFunc = provider; + } + else { + path = provider.host || provider.path || ""; + if (!path && provider.isMetaMask) { + path = "metamask"; + } + subprovider = provider; + if (provider.request) { + if (path === "") { + path = "eip-1193:"; + } + jsonRpcFetchFunc = buildEip1193Fetcher(provider); + } + else if (provider.sendAsync) { + jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.sendAsync.bind(provider)); + } + else if (provider.send) { + jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.send.bind(provider)); + } + else { + logger.throwArgumentError("unsupported provider", "provider", provider); + } + if (!path) { + path = "unknown:"; + } + } + super(path, network); + defineReadOnly(this, "jsonRpcFetchFunc", jsonRpcFetchFunc); + defineReadOnly(this, "provider", subprovider); + } + send(method, params) { + return this.jsonRpcFetchFunc(method, params); } } diff --git a/lib/_version.d.ts b/lib/_version.d.ts index 654ae53485..053ba1da3c 100644 --- a/lib/_version.d.ts +++ b/lib/_version.d.ts @@ -1 +1 @@ -export declare const version = "providers/5.0.0-beta.163"; +export declare const version = "providers/5.0.0-beta.164"; diff --git a/lib/_version.js b/lib/_version.js index 863e174db6..111e33c9cb 100644 --- a/lib/_version.js +++ b/lib/_version.js @@ -1,3 +1,3 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.version = "providers/5.0.0-beta.163"; +exports.version = "providers/5.0.0-beta.164"; diff --git a/lib/index.d.ts b/lib/index.d.ts index a88861d294..1f66167fa2 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -12,7 +12,7 @@ import { JsonRpcProvider, JsonRpcSigner } from "./json-rpc-provider"; import { NodesmithProvider } from "./nodesmith-provider"; import { Web3Provider } from "./web3-provider"; import { WebSocketProvider } from "./websocket-provider"; -import { AsyncSendable } from "./web3-provider"; +import { ExternalProvider, JsonRpcFetchFunc } from "./web3-provider"; import { Formatter } from "./formatter"; declare function getDefaultProvider(network?: Network | string, options?: any): BaseProvider; -export { Provider, BaseProvider, FallbackProvider, AlchemyProvider, CloudflareProvider, EtherscanProvider, InfuraProvider, JsonRpcProvider, NodesmithProvider, Web3Provider, WebSocketProvider, IpcProvider, JsonRpcSigner, getDefaultProvider, getNetwork, Formatter, Block, BlockTag, EventType, Filter, Log, Listener, TransactionReceipt, TransactionRequest, TransactionResponse, AsyncSendable, Network, Networkish }; +export { Provider, BaseProvider, FallbackProvider, AlchemyProvider, CloudflareProvider, EtherscanProvider, InfuraProvider, JsonRpcProvider, NodesmithProvider, Web3Provider, WebSocketProvider, IpcProvider, JsonRpcSigner, getDefaultProvider, getNetwork, Formatter, Block, BlockTag, EventType, Filter, Log, Listener, TransactionReceipt, TransactionRequest, TransactionResponse, ExternalProvider, JsonRpcFetchFunc, Network, Networkish }; diff --git a/lib/json-rpc-provider.js b/lib/json-rpc-provider.js index 2213081d44..774d87d7db 100644 --- a/lib/json-rpc-provider.js +++ b/lib/json-rpc-provider.js @@ -325,7 +325,7 @@ var JsonRpcProvider = /** @class */ (function (_super) { return _this; } JsonRpcProvider.defaultUrl = function () { - return "http:/" + "/localhost:8545"; + return "http:/\/localhost:8545"; }; JsonRpcProvider.prototype.getSigner = function (addressOrIndex) { return new JsonRpcSigner(_constructorGuard, this, addressOrIndex); diff --git a/lib/web3-provider.d.ts b/lib/web3-provider.d.ts index 682d6ee67f..f7b591fe40 100644 --- a/lib/web3-provider.d.ts +++ b/lib/web3-provider.d.ts @@ -1,15 +1,26 @@ import { Networkish } from "@ethersproject/networks"; import { JsonRpcProvider } from "./json-rpc-provider"; -export declare type AsyncSendable = { +export declare type ExternalProvider = { isMetaMask?: boolean; host?: string; path?: string; - sendAsync?: (request: any, callback: (error: any, response: any) => void) => void; - send?: (request: any, callback: (error: any, response: any) => void) => void; + sendAsync?: (request: { + method: string; + params?: Array; + }, callback: (error: any, response: any) => void) => void; + send?: (request: { + method: string; + params?: Array; + }, callback: (error: any, response: any) => void) => void; + request?: (request: { + method: string; + params?: Array; + }) => Promise; }; +export declare type JsonRpcFetchFunc = (method: string, params?: Array) => Promise; export declare class Web3Provider extends JsonRpcProvider { - readonly provider: AsyncSendable; - private _sendAsync; - constructor(web3Provider: AsyncSendable, network?: Networkish); + readonly provider: ExternalProvider; + readonly jsonRpcFetchFunc: JsonRpcFetchFunc; + constructor(provider: ExternalProvider | JsonRpcFetchFunc, network?: Networkish); send(method: string, params: Array): Promise; } diff --git a/lib/web3-provider.js b/lib/web3-provider.js index dfd4e3c41f..a11e8bbb02 100644 --- a/lib/web3-provider.js +++ b/lib/web3-provider.js @@ -18,60 +18,100 @@ var logger_1 = require("@ethersproject/logger"); var _version_1 = require("./_version"); var logger = new logger_1.Logger(_version_1.version); var json_rpc_provider_1 = require("./json-rpc-provider"); -var Web3Provider = /** @class */ (function (_super) { - __extends(Web3Provider, _super); - function Web3Provider(web3Provider, network) { - var _newTarget = this.constructor; - var _this = this; - logger.checkNew(_newTarget, Web3Provider); - // HTTP has a host; IPC has a path. - _this = _super.call(this, web3Provider.host || web3Provider.path || "", network) || this; - if (web3Provider) { - if (web3Provider.sendAsync) { - _this._sendAsync = web3Provider.sendAsync.bind(web3Provider); - } - else if (web3Provider.send) { - _this._sendAsync = web3Provider.send.bind(web3Provider); - } - } - if (!_this._sendAsync) { - logger.throwArgumentError("invalid web3Provider", "web3Provider", web3Provider); - } - properties_1.defineReadOnly(_this, "provider", web3Provider); - return _this; - } - Web3Provider.prototype.send = function (method, params) { - var _this = this; +var _nextId = 1; +function buildWeb3LegacyFetcher(provider, sendFunc) { + return function (method, params) { // Metamask complains about eth_sign (and on some versions hangs) - if (method == "eth_sign" && this.provider.isMetaMask) { + if (method == "eth_sign" && provider.isMetaMask) { // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign method = "personal_sign"; params = [params[1], params[0]]; } + var request = { + method: method, + params: params, + id: (_nextId++), + jsonrpc: "2.0" + }; return new Promise(function (resolve, reject) { - var request = { - method: method, - params: params, - id: (_this._nextId++), - jsonrpc: "2.0" - }; - _this._sendAsync(request, function (error, result) { + sendFunc(request, function (error, result) { if (error) { - reject(error); - return; + return reject(error); } if (result.error) { - // @TODO: not any var error_1 = new Error(result.error.message); error_1.code = result.error.code; error_1.data = result.error.data; - reject(error_1); - return; + return reject(error_1); } resolve(result.result); }); }); }; +} +function buildEip1193Fetcher(provider) { + return function (method, params) { + if (params == null) { + params = []; + } + // Metamask complains about eth_sign (and on some versions hangs) + if (method == "eth_sign" && provider.isMetaMask) { + // https://github.com/ethereum/go-ethereum/wiki/Management-APIs#personal_sign + method = "personal_sign"; + params = [params[1], params[0]]; + } + return provider.request({ method: method, params: params }); + }; +} +var Web3Provider = /** @class */ (function (_super) { + __extends(Web3Provider, _super); + function Web3Provider(provider, network) { + var _newTarget = this.constructor; + var _this = this; + logger.checkNew(_newTarget, Web3Provider); + if (provider == null) { + logger.throwArgumentError("missing provider", "provider", provider); + } + var path = null; + var jsonRpcFetchFunc = null; + var subprovider = null; + if (typeof (provider) === "function") { + path = "unknown:"; + jsonRpcFetchFunc = provider; + } + else { + path = provider.host || provider.path || ""; + if (!path && provider.isMetaMask) { + path = "metamask"; + } + subprovider = provider; + if (provider.request) { + if (path === "") { + path = "eip-1193:"; + } + jsonRpcFetchFunc = buildEip1193Fetcher(provider); + } + else if (provider.sendAsync) { + jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.sendAsync.bind(provider)); + } + else if (provider.send) { + jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.send.bind(provider)); + } + else { + logger.throwArgumentError("unsupported provider", "provider", provider); + } + if (!path) { + path = "unknown:"; + } + } + _this = _super.call(this, path, network) || this; + properties_1.defineReadOnly(_this, "jsonRpcFetchFunc", jsonRpcFetchFunc); + properties_1.defineReadOnly(_this, "provider", subprovider); + return _this; + } + Web3Provider.prototype.send = function (method, params) { + return this.jsonRpcFetchFunc(method, params); + }; return Web3Provider; }(json_rpc_provider_1.JsonRpcProvider)); exports.Web3Provider = Web3Provider; diff --git a/package.json b/package.json index b43182fc74..92c4606941 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, - "tarballHash": "0x8ed93dc5731b3952a7330ea77091897baabaa467c96b6fb030276c3a2356c66c", + "tarballHash": "0xb0f4b9497fef99345ace68624b454d876fae52a272514e185063846f9cb28dfb", "types": "./lib/index.d.ts", - "version": "5.0.0-beta.163" + "version": "5.0.0-beta.164" } diff --git a/src.ts/_version.ts b/src.ts/_version.ts index 6b96aecb0e..cacc3a20b0 100644 --- a/src.ts/_version.ts +++ b/src.ts/_version.ts @@ -1 +1 @@ -export const version = "providers/5.0.0-beta.163"; +export const version = "providers/5.0.0-beta.164";