UNPKG

5.76 kBJavaScriptView Raw
1"use strict";
2var __extends = (this && this.__extends) || (function () {
3 var extendStatics = function (d, b) {
4 extendStatics = Object.setPrototypeOf ||
5 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6 function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7 return extendStatics(d, b);
8 };
9 return function (d, b) {
10 if (typeof b !== "function" && b !== null)
11 throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12 extendStatics(d, b);
13 function __() { this.constructor = d; }
14 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15 };
16})();
17Object.defineProperty(exports, "__esModule", { value: true });
18exports.Web3Provider = void 0;
19var properties_1 = require("@ethersproject/properties");
20var logger_1 = require("@ethersproject/logger");
21var _version_1 = require("./_version");
22var logger = new logger_1.Logger(_version_1.version);
23var json_rpc_provider_1 = require("./json-rpc-provider");
24var _nextId = 1;
25function buildWeb3LegacyFetcher(provider, sendFunc) {
26 var fetcher = "Web3LegacyFetcher";
27 return function (method, params) {
28 var _this = this;
29 var request = {
30 method: method,
31 params: params,
32 id: (_nextId++),
33 jsonrpc: "2.0"
34 };
35 return new Promise(function (resolve, reject) {
36 _this.emit("debug", {
37 action: "request",
38 fetcher: fetcher,
39 request: (0, properties_1.deepCopy)(request),
40 provider: _this
41 });
42 sendFunc(request, function (error, response) {
43 if (error) {
44 _this.emit("debug", {
45 action: "response",
46 fetcher: fetcher,
47 error: error,
48 request: request,
49 provider: _this
50 });
51 return reject(error);
52 }
53 _this.emit("debug", {
54 action: "response",
55 fetcher: fetcher,
56 request: request,
57 response: response,
58 provider: _this
59 });
60 if (response.error) {
61 var error_1 = new Error(response.error.message);
62 error_1.code = response.error.code;
63 error_1.data = response.error.data;
64 return reject(error_1);
65 }
66 resolve(response.result);
67 });
68 });
69 };
70}
71function buildEip1193Fetcher(provider) {
72 return function (method, params) {
73 var _this = this;
74 if (params == null) {
75 params = [];
76 }
77 var request = { method: method, params: params };
78 this.emit("debug", {
79 action: "request",
80 fetcher: "Eip1193Fetcher",
81 request: (0, properties_1.deepCopy)(request),
82 provider: this
83 });
84 return provider.request(request).then(function (response) {
85 _this.emit("debug", {
86 action: "response",
87 fetcher: "Eip1193Fetcher",
88 request: request,
89 response: response,
90 provider: _this
91 });
92 return response;
93 }, function (error) {
94 _this.emit("debug", {
95 action: "response",
96 fetcher: "Eip1193Fetcher",
97 request: request,
98 error: error,
99 provider: _this
100 });
101 throw error;
102 });
103 };
104}
105var Web3Provider = /** @class */ (function (_super) {
106 __extends(Web3Provider, _super);
107 function Web3Provider(provider, network) {
108 var _this = this;
109 if (provider == null) {
110 logger.throwArgumentError("missing provider", "provider", provider);
111 }
112 var path = null;
113 var jsonRpcFetchFunc = null;
114 var subprovider = null;
115 if (typeof (provider) === "function") {
116 path = "unknown:";
117 jsonRpcFetchFunc = provider;
118 }
119 else {
120 path = provider.host || provider.path || "";
121 if (!path && provider.isMetaMask) {
122 path = "metamask";
123 }
124 subprovider = provider;
125 if (provider.request) {
126 if (path === "") {
127 path = "eip-1193:";
128 }
129 jsonRpcFetchFunc = buildEip1193Fetcher(provider);
130 }
131 else if (provider.sendAsync) {
132 jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.sendAsync.bind(provider));
133 }
134 else if (provider.send) {
135 jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.send.bind(provider));
136 }
137 else {
138 logger.throwArgumentError("unsupported provider", "provider", provider);
139 }
140 if (!path) {
141 path = "unknown:";
142 }
143 }
144 _this = _super.call(this, path, network) || this;
145 (0, properties_1.defineReadOnly)(_this, "jsonRpcFetchFunc", jsonRpcFetchFunc);
146 (0, properties_1.defineReadOnly)(_this, "provider", subprovider);
147 return _this;
148 }
149 Web3Provider.prototype.send = function (method, params) {
150 return this.jsonRpcFetchFunc(method, params);
151 };
152 return Web3Provider;
153}(json_rpc_provider_1.JsonRpcProvider));
154exports.Web3Provider = Web3Provider;
155//# sourceMappingURL=web3-provider.js.map
\No newline at end of file