@fastnear/wallet-adapter
Version:
Wallet adapter implementations for Meteor Wallet and Near Mobile
128 lines • 4.96 kB
JavaScript
/* ⋈ 🏃🏻💨 FastNear Wallet Adapters - CJS (@fastnear/wallet-adapter version 1.2.0) */
/* https://www.npmjs.com/package/@fastnear/wallet-adapter/v/1.2.0 */
;
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