| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | import { assertArgument } from "../utils/index.js";import { JsonRpcApiPollingProvider } from "./provider-jsonrpc.js";;/** *  A **BrowserProvider** is intended to wrap an injected provider which *  adheres to the [[link-eip-1193]] standard, which most (if not all) *  currently do. */export class BrowserProvider extends JsonRpcApiPollingProvider {    #request;    /**     *  Connect to the %%ethereum%% provider, optionally forcing the     *  %%network%%.     */    constructor(ethereum, network, _options) {        // Copy the options        const options = Object.assign({}, ((_options != null) ? _options : {}), { batchMaxCount: 1 });        assertArgument(ethereum && ethereum.request, "invalid EIP-1193 provider", "ethereum", ethereum);        super(network, options);        this.#request = async (method, params) => {            const payload = { method, params };            this.emit("debug", { action: "sendEip1193Request", payload });            try {                const result = await ethereum.request(payload);                this.emit("debug", { action: "receiveEip1193Result", result });                return result;            }            catch (e) {                const error = new Error(e.message);                error.code = e.code;                error.data = e.data;                error.payload = payload;                this.emit("debug", { action: "receiveEip1193Error", error });                throw error;            }        };    }    async send(method, params) {        await this._start();        return await super.send(method, params);    }    async _send(payload) {        assertArgument(!Array.isArray(payload), "EIP-1193 does not support batch request", "payload", payload);        try {            const result = await this.#request(payload.method, payload.params || []);            return [{ id: payload.id, result }];        }        catch (e) {            return [{                    id: payload.id,                    error: { code: e.code, data: e.data, message: e.message }                }];        }    }    getRpcError(payload, error) {        error = JSON.parse(JSON.stringify(error));        // EIP-1193 gives us some machine-readable error codes, so rewrite        // them into         switch (error.error.code || -1) {            case 4001:                error.error.message = `ethers-user-denied: ${error.error.message}`;                break;            case 4200:                error.error.message = `ethers-unsupported: ${error.error.message}`;                break;        }        return super.getRpcError(payload, error);    }    /**     *  Resolves to ``true`` if the provider manages the %%address%%.     */    async hasSigner(address) {        if (address == null) {            address = 0;        }        const accounts = await this.send("eth_accounts", []);        if (typeof (address) === "number") {            return (accounts.length > address);        }        address = address.toLowerCase();        return accounts.filter((a) => (a.toLowerCase() === address)).length !== 0;    }    async getSigner(address) {        if (address == null) {            address = 0;        }        if (!(await this.hasSigner(address))) {            try {                //const resp =                 await this.#request("eth_requestAccounts", []);                //console.log("RESP", resp);            }            catch (error) {                const payload = error.payload;                throw this.getRpcError(payload, { id: payload.id, error });            }        }        return await super.getSigner(address);    }}//# sourceMappingURL=provider-browser.js.map
 |