UNPKG

@fastnear/wallet-adapter

Version:

Wallet adapter implementations for Meteor Wallet and Near Mobile

128 lines 4.96 kB
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 1.2.0) */ /* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/1.2.0 */ "use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var rpc_exports = {}; __export(rpc_exports, { NearRpcClient: () => NearRpcClient, createRpcFactory: () => createRpcFactory }); module.exports = __toCommonJS(rpc_exports); var import_errors = require("./errors.js"); const defaultProviders = { mainnet: ["https://relmn.aurora.dev", "https://nearrpc.aurora.dev", "https://rpc.mainnet.near.org"], testnet: ["https://rpc.testnet.near.org"] }; const wait = /* @__PURE__ */ __name((timeout) => new Promise((resolve) => setTimeout(resolve, timeout)), "wait"); let rpcId = 1e3; class NearRpcClient { static { __name(this, "NearRpcClient"); } providers; index = 0; timeoutMs; startTimeoutMs; constructor(providers, timeoutMs = 3e4) { this.providers = providers.length > 0 ? providers : defaultProviders.mainnet; this.timeoutMs = timeoutMs; this.startTimeoutMs = timeoutMs; } async block(params) { return this.sendJsonRpc("block", params); } async query(params) { return this.sendJsonRpc("query", params); } async txStatus(txHash, accountId, waitUntil) { return this.sendJsonRpc("tx", { tx_hash: txHash, sender_account_id: accountId, wait_until: waitUntil }); } async sendJsonRpc(method, params, attempt = 0) { const provider = this.providers[this.index]; try { const result = await this.send(provider, method, params, this.timeoutMs); this.timeoutMs = Math.max(this.startTimeoutMs, Math.floor(this.timeoutMs / 1.2)); return result; } catch (error) { const providersExhausted = attempt + 1 >= this.providers.length * 3; this.index = (this.index + 1) % this.providers.length; this.timeoutMs = Math.min(6e4, Math.floor(this.timeoutMs * 1.2)); if (providersExhausted) { throw error; } await wait(Math.min(500 * (attempt + 1), 3e3)); return this.sendJsonRpc(method, params, attempt + 1); } } async send(provider, method, params, timeoutMs) { const controller = new AbortController(); const timer = setTimeout(() => controller.abort(), timeoutMs); try { const response = await fetch(provider, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ jsonrpc: "2.0", id: rpcId++, method, params }), signal: controller.signal }); if (!response.ok) { const text = await response.text().catch(() => "Unknown RPC error"); throw new import_errors.TransportError("RPC_HTTP_ERROR", `RPC request failed (${response.status}): ${text}`); } const json = await response.json(); if (json.error) { const message = typeof json.error.data === "string" ? json.error.data : json.error.message ?? "RPC error"; throw new import_errors.TransportError("RPC_RESPONSE_ERROR", message, { details: json.error }); } return json.result; } catch (error) { if (controller.signal.aborted) { throw new import_errors.TransportError("RPC_TIMEOUT", "RPC request timed out", { cause: error }); } if (error instanceof import_errors.TransportError) throw error; throw new import_errors.TransportError("RPC_NETWORK_ERROR", "RPC network request failed", { cause: error }); } finally { clearTimeout(timer); } } } const createRpcFactory = /* @__PURE__ */ __name((getNetworkProviders) => { const clients = {}; return (network) => { if (clients[network] != null) return clients[network]; const providers = getNetworkProviders?.(network); clients[network] = new NearRpcClient(providers && providers.length > 0 ? providers : defaultProviders[network]); return clients[network]; }; }, "createRpcFactory"); // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { NearRpcClient, createRpcFactory }); //# sourceMappingURL=rpc.cjs.map