web3-provider.js 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. "use strict";
  2. var __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. })();
  17. Object.defineProperty(exports, "__esModule", { value: true });
  18. exports.Web3Provider = void 0;
  19. var properties_1 = require("@ethersproject/properties");
  20. var logger_1 = require("@ethersproject/logger");
  21. var _version_1 = require("./_version");
  22. var logger = new logger_1.Logger(_version_1.version);
  23. var json_rpc_provider_1 = require("./json-rpc-provider");
  24. var _nextId = 1;
  25. function 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. }
  71. function 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. }
  105. var Web3Provider = /** @class */ (function (_super) {
  106. __extends(Web3Provider, _super);
  107. function Web3Provider(provider, network) {
  108. var _newTarget = this.constructor;
  109. var _this = this;
  110. logger.checkNew(_newTarget, Web3Provider);
  111. if (provider == null) {
  112. logger.throwArgumentError("missing provider", "provider", provider);
  113. }
  114. var path = null;
  115. var jsonRpcFetchFunc = null;
  116. var subprovider = null;
  117. if (typeof (provider) === "function") {
  118. path = "unknown:";
  119. jsonRpcFetchFunc = provider;
  120. }
  121. else {
  122. path = provider.host || provider.path || "";
  123. if (!path && provider.isMetaMask) {
  124. path = "metamask";
  125. }
  126. subprovider = provider;
  127. if (provider.request) {
  128. if (path === "") {
  129. path = "eip-1193:";
  130. }
  131. jsonRpcFetchFunc = buildEip1193Fetcher(provider);
  132. }
  133. else if (provider.sendAsync) {
  134. jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.sendAsync.bind(provider));
  135. }
  136. else if (provider.send) {
  137. jsonRpcFetchFunc = buildWeb3LegacyFetcher(provider, provider.send.bind(provider));
  138. }
  139. else {
  140. logger.throwArgumentError("unsupported provider", "provider", provider);
  141. }
  142. if (!path) {
  143. path = "unknown:";
  144. }
  145. }
  146. _this = _super.call(this, path, network) || this;
  147. (0, properties_1.defineReadOnly)(_this, "jsonRpcFetchFunc", jsonRpcFetchFunc);
  148. (0, properties_1.defineReadOnly)(_this, "provider", subprovider);
  149. return _this;
  150. }
  151. Web3Provider.prototype.send = function (method, params) {
  152. return this.jsonRpcFetchFunc(method, params);
  153. };
  154. return Web3Provider;
  155. }(json_rpc_provider_1.JsonRpcProvider));
  156. exports.Web3Provider = Web3Provider;
  157. //# sourceMappingURL=web3-provider.js.map