123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.BrowserProvider = void 0;
- const index_js_1 = require("../utils/index.js");
- const provider_jsonrpc_js_1 = require("./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.
- */
- class BrowserProvider extends provider_jsonrpc_js_1.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 });
- (0, index_js_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) {
- (0, index_js_1.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);
- }
- }
- exports.BrowserProvider = BrowserProvider;
- //# sourceMappingURL=provider-browser.js.map
|