@polkadot/api
Version:
Promise and RxJS wrappers around the Polkadot JS RPC
1,131 lines (1,110 loc) • 341 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@polkadot/keyring'), require('@polkadot/util'), require('@polkadot/types'), require('@polkadot/util-crypto')) :
typeof define === 'function' && define.amd ? define(['exports', '@polkadot/keyring', '@polkadot/util', '@polkadot/types', '@polkadot/util-crypto'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.polkadotApi = {}, global.polkadotKeyring, global.polkadotUtil, global.polkadotTypes, global.polkadotUtilCrypto));
})(this, (function (exports, keyring, util, types, utilCrypto) { 'use strict';
const global = window;
function _classPrivateFieldBase(receiver, privateKey) {
if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {
throw new TypeError("attempted to use private field on non-instance");
}
return receiver;
}
var id = 0;
function _classPrivateFieldKey(name) {
return "__private_" + id++ + "_" + name;
}
({
name: '@polkadot/x-global',
path: (({ url: (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href)) }) && (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))) ? new URL((typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))).pathname.substring(0, new URL((typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))).pathname.lastIndexOf('/') + 1) : 'auto',
type: 'esm',
version: '9.2.1'
});
function evaluateThis(fn) {
return fn('return this');
}
const xglobal = typeof globalThis !== 'undefined' ? globalThis : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : evaluateThis(Function);
({
name: '@polkadot/x-fetch',
path: (({ url: (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href)) }) && (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))) ? new URL((typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))).pathname.substring(0, new URL((typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))).pathname.lastIndexOf('/') + 1) : 'auto',
type: 'esm',
version: '9.2.1'
});
const fetch = xglobal.fetch;
function isFunction$1(value) {
return typeof value === 'function';
}
const UNKNOWN = -99999;
function extend(that, name, value) {
Object.defineProperty(that, name, {
configurable: true,
enumerable: false,
value
});
}
class RpcError extends Error {
constructor(message = '', code = UNKNOWN, data) {
super();
extend(this, 'message', String(message));
extend(this, 'name', this.constructor.name);
extend(this, 'data', data);
extend(this, 'code', code);
if (isFunction$1(Error.captureStackTrace)) {
Error.captureStackTrace(this, this.constructor);
} else {
const {
stack
} = new Error(message);
stack && extend(this, 'stack', stack);
}
}
static CODES = {
ASSERT: -90009,
INVALID_JSONRPC: -99998,
METHOD_NOT_FOUND: -32601,
UNKNOWN
};
}
function formatErrorData(data) {
if (util.isUndefined(data)) {
return '';
}
const formatted = `: ${util.isString(data) ? data.replace(/Error\("/g, '').replace(/\("/g, '(').replace(/"\)/g, ')').replace(/\(/g, ', ').replace(/\)/g, '') : util.stringify(data)}`;
return formatted.length <= 256 ? formatted : `${formatted.substring(0, 255)}…`;
}
function checkError(error) {
if (error) {
const {
code,
data,
message
} = error;
throw new RpcError(`${code}: ${message}${formatErrorData(data)}`, code, data);
}
}
class RpcCoder {
#id = 0;
decodeResponse(response) {
util.assert(response && response.jsonrpc === '2.0', 'Invalid jsonrpc field in decoded object');
const isSubscription = !util.isUndefined(response.params) && !util.isUndefined(response.method);
util.assert(util.isNumber(response.id) || isSubscription && (util.isNumber(response.params.subscription) || util.isString(response.params.subscription)), 'Invalid id field in decoded object');
checkError(response.error);
util.assert(!util.isUndefined(response.result) || isSubscription, 'No result found in jsonrpc response');
if (isSubscription) {
checkError(response.params.error);
return response.params.result;
}
return response.result;
}
encodeJson(method, params) {
const [id, data] = this.encodeObject(method, params);
return [id, util.stringify(data)];
}
encodeObject(method, params) {
const id = ++this.#id;
return [id, {
id,
jsonrpc: '2.0',
method,
params
}];
}
}
const HTTP_URL = 'http://127.0.0.1:9933';
const WS_URL = 'ws://127.0.0.1:9944';
const defaults = {
HTTP_URL,
WS_URL
};
const DEFAULT_CAPACITY = 384;
class LRUNode {
constructor(key) {
this.key = key;
this.next = this.prev = this;
}
}
var _data = _classPrivateFieldKey("data");
var _refs = _classPrivateFieldKey("refs");
var _length = _classPrivateFieldKey("length");
var _head = _classPrivateFieldKey("head");
var _tail = _classPrivateFieldKey("tail");
var _toHead = _classPrivateFieldKey("toHead");
class LRUCache {
constructor(capacity = DEFAULT_CAPACITY) {
Object.defineProperty(this, _toHead, {
value: _toHead2
});
this.capacity = void 0;
Object.defineProperty(this, _data, {
writable: true,
value: new Map()
});
Object.defineProperty(this, _refs, {
writable: true,
value: new Map()
});
Object.defineProperty(this, _length, {
writable: true,
value: 0
});
Object.defineProperty(this, _head, {
writable: true,
value: void 0
});
Object.defineProperty(this, _tail, {
writable: true,
value: void 0
});
this.capacity = capacity;
_classPrivateFieldBase(this, _head)[_head] = _classPrivateFieldBase(this, _tail)[_tail] = new LRUNode('<empty>');
}
get length() {
return _classPrivateFieldBase(this, _length)[_length];
}
get lengthData() {
return _classPrivateFieldBase(this, _data)[_data].size;
}
get lengthRefs() {
return _classPrivateFieldBase(this, _refs)[_refs].size;
}
entries() {
const keys = this.keys();
const entries = new Array(keys.length);
for (let i = 0; i < keys.length; i++) {
const key = keys[i];
entries[i] = [key, _classPrivateFieldBase(this, _data)[_data].get(key)];
}
return entries;
}
keys() {
const keys = [];
if (_classPrivateFieldBase(this, _length)[_length]) {
let curr = _classPrivateFieldBase(this, _head)[_head];
while (curr !== _classPrivateFieldBase(this, _tail)[_tail]) {
keys.push(curr.key);
curr = curr.next;
}
keys.push(curr.key);
}
return keys;
}
get(key) {
const data = _classPrivateFieldBase(this, _data)[_data].get(key);
if (data) {
_classPrivateFieldBase(this, _toHead)[_toHead](key);
return data;
}
return null;
}
set(key, value) {
if (_classPrivateFieldBase(this, _data)[_data].has(key)) {
_classPrivateFieldBase(this, _toHead)[_toHead](key);
} else {
const node = new LRUNode(key);
_classPrivateFieldBase(this, _refs)[_refs].set(node.key, node);
if (this.length === 0) {
_classPrivateFieldBase(this, _head)[_head] = _classPrivateFieldBase(this, _tail)[_tail] = node;
} else {
_classPrivateFieldBase(this, _head)[_head].prev = node;
node.next = _classPrivateFieldBase(this, _head)[_head];
_classPrivateFieldBase(this, _head)[_head] = node;
}
if (_classPrivateFieldBase(this, _length)[_length] === this.capacity) {
_classPrivateFieldBase(this, _data)[_data].delete(_classPrivateFieldBase(this, _tail)[_tail].key);
_classPrivateFieldBase(this, _refs)[_refs].delete(_classPrivateFieldBase(this, _tail)[_tail].key);
_classPrivateFieldBase(this, _tail)[_tail] = _classPrivateFieldBase(this, _tail)[_tail].prev;
_classPrivateFieldBase(this, _tail)[_tail].next = _classPrivateFieldBase(this, _head)[_head];
} else {
_classPrivateFieldBase(this, _length)[_length] += 1;
}
}
_classPrivateFieldBase(this, _data)[_data].set(key, value);
}
}
function _toHead2(key) {
const ref = _classPrivateFieldBase(this, _refs)[_refs].get(key);
if (ref && ref !== _classPrivateFieldBase(this, _head)[_head]) {
ref.prev.next = ref.next;
ref.next.prev = ref.prev;
ref.next = _classPrivateFieldBase(this, _head)[_head];
_classPrivateFieldBase(this, _head)[_head].prev = ref;
_classPrivateFieldBase(this, _head)[_head] = ref;
}
}
const ERROR_SUBSCRIBE = 'HTTP Provider does not have subscriptions, use WebSockets instead';
const l$7 = util.logger('api-http');
var _callCache$1 = _classPrivateFieldKey("callCache");
var _coder$1 = _classPrivateFieldKey("coder");
var _endpoint = _classPrivateFieldKey("endpoint");
var _headers$1 = _classPrivateFieldKey("headers");
var _stats$1 = _classPrivateFieldKey("stats");
var _send$1 = _classPrivateFieldKey("send");
class HttpProvider {
constructor(endpoint = defaults.HTTP_URL, headers = {}) {
Object.defineProperty(this, _send$1, {
value: _send2$1
});
Object.defineProperty(this, _callCache$1, {
writable: true,
value: new LRUCache()
});
Object.defineProperty(this, _coder$1, {
writable: true,
value: void 0
});
Object.defineProperty(this, _endpoint, {
writable: true,
value: void 0
});
Object.defineProperty(this, _headers$1, {
writable: true,
value: void 0
});
Object.defineProperty(this, _stats$1, {
writable: true,
value: void 0
});
util.assert(/^(https|http):\/\//.test(endpoint), () => `Endpoint should start with 'http://', received '${endpoint}'`);
_classPrivateFieldBase(this, _coder$1)[_coder$1] = new RpcCoder();
_classPrivateFieldBase(this, _endpoint)[_endpoint] = endpoint;
_classPrivateFieldBase(this, _headers$1)[_headers$1] = headers;
_classPrivateFieldBase(this, _stats$1)[_stats$1] = {
active: {
requests: 0,
subscriptions: 0
},
total: {
bytesRecv: 0,
bytesSent: 0,
cached: 0,
requests: 0,
subscriptions: 0,
timeout: 0
}
};
}
get hasSubscriptions() {
return false;
}
clone() {
return new HttpProvider(_classPrivateFieldBase(this, _endpoint)[_endpoint], _classPrivateFieldBase(this, _headers$1)[_headers$1]);
}
async connect() {
}
async disconnect() {
}
get stats() {
return _classPrivateFieldBase(this, _stats$1)[_stats$1];
}
get isConnected() {
return true;
}
on(type, sub) {
l$7.error('HTTP Provider does not have \'on\' emitters, use WebSockets instead');
return () => {
};
}
async send(method, params, isCacheable) {
_classPrivateFieldBase(this, _stats$1)[_stats$1].total.requests++;
const [, body] = _classPrivateFieldBase(this, _coder$1)[_coder$1].encodeJson(method, params);
let resultPromise = isCacheable ? _classPrivateFieldBase(this, _callCache$1)[_callCache$1].get(body) : null;
if (!resultPromise) {
resultPromise = _classPrivateFieldBase(this, _send$1)[_send$1](body);
if (isCacheable) {
_classPrivateFieldBase(this, _callCache$1)[_callCache$1].set(body, resultPromise);
}
} else {
_classPrivateFieldBase(this, _stats$1)[_stats$1].total.cached++;
}
return resultPromise;
}
async subscribe(types, method, params, cb) {
l$7.error(ERROR_SUBSCRIBE);
throw new Error(ERROR_SUBSCRIBE);
}
async unsubscribe(type, method, id) {
l$7.error(ERROR_SUBSCRIBE);
throw new Error(ERROR_SUBSCRIBE);
}
}
async function _send2$1(body) {
_classPrivateFieldBase(this, _stats$1)[_stats$1].active.requests++;
_classPrivateFieldBase(this, _stats$1)[_stats$1].total.bytesSent += body.length;
try {
const response = await fetch(_classPrivateFieldBase(this, _endpoint)[_endpoint], {
body,
headers: {
Accept: 'application/json',
'Content-Length': `${body.length}`,
'Content-Type': 'application/json',
..._classPrivateFieldBase(this, _headers$1)[_headers$1]
},
method: 'POST'
});
util.assert(response.ok, () => `[${response.status}]: ${response.statusText}`);
const result = await response.text();
_classPrivateFieldBase(this, _stats$1)[_stats$1].total.bytesRecv += result.length;
const decoded = _classPrivateFieldBase(this, _coder$1)[_coder$1].decodeResponse(JSON.parse(result));
_classPrivateFieldBase(this, _stats$1)[_stats$1].active.requests--;
return decoded;
} catch (e) {
_classPrivateFieldBase(this, _stats$1)[_stats$1].active.requests--;
throw e;
}
}
var eventemitter3 = {exports: {}};
(function (module) {
var has = Object.prototype.hasOwnProperty
, prefix = '~';
function Events() {}
if (Object.create) {
Events.prototype = Object.create(null);
if (!new Events().__proto__) prefix = false;
}
function EE(fn, context, once) {
this.fn = fn;
this.context = context;
this.once = once || false;
}
function addListener(emitter, event, fn, context, once) {
if (typeof fn !== 'function') {
throw new TypeError('The listener must be a function');
}
var listener = new EE(fn, context || emitter, once)
, evt = prefix ? prefix + event : event;
if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;
else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);
else emitter._events[evt] = [emitter._events[evt], listener];
return emitter;
}
function clearEvent(emitter, evt) {
if (--emitter._eventsCount === 0) emitter._events = new Events();
else delete emitter._events[evt];
}
function EventEmitter() {
this._events = new Events();
this._eventsCount = 0;
}
EventEmitter.prototype.eventNames = function eventNames() {
var names = []
, events
, name;
if (this._eventsCount === 0) return names;
for (name in (events = this._events)) {
if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);
}
if (Object.getOwnPropertySymbols) {
return names.concat(Object.getOwnPropertySymbols(events));
}
return names;
};
EventEmitter.prototype.listeners = function listeners(event) {
var evt = prefix ? prefix + event : event
, handlers = this._events[evt];
if (!handlers) return [];
if (handlers.fn) return [handlers.fn];
for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {
ee[i] = handlers[i].fn;
}
return ee;
};
EventEmitter.prototype.listenerCount = function listenerCount(event) {
var evt = prefix ? prefix + event : event
, listeners = this._events[evt];
if (!listeners) return 0;
if (listeners.fn) return 1;
return listeners.length;
};
EventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {
var evt = prefix ? prefix + event : event;
if (!this._events[evt]) return false;
var listeners = this._events[evt]
, len = arguments.length
, args
, i;
if (listeners.fn) {
if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);
switch (len) {
case 1: return listeners.fn.call(listeners.context), true;
case 2: return listeners.fn.call(listeners.context, a1), true;
case 3: return listeners.fn.call(listeners.context, a1, a2), true;
case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;
case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;
case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;
}
for (i = 1, args = new Array(len -1); i < len; i++) {
args[i - 1] = arguments[i];
}
listeners.fn.apply(listeners.context, args);
} else {
var length = listeners.length
, j;
for (i = 0; i < length; i++) {
if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);
switch (len) {
case 1: listeners[i].fn.call(listeners[i].context); break;
case 2: listeners[i].fn.call(listeners[i].context, a1); break;
case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;
case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;
default:
if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {
args[j - 1] = arguments[j];
}
listeners[i].fn.apply(listeners[i].context, args);
}
}
}
return true;
};
EventEmitter.prototype.on = function on(event, fn, context) {
return addListener(this, event, fn, context, false);
};
EventEmitter.prototype.once = function once(event, fn, context) {
return addListener(this, event, fn, context, true);
};
EventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {
var evt = prefix ? prefix + event : event;
if (!this._events[evt]) return this;
if (!fn) {
clearEvent(this, evt);
return this;
}
var listeners = this._events[evt];
if (listeners.fn) {
if (
listeners.fn === fn &&
(!once || listeners.once) &&
(!context || listeners.context === context)
) {
clearEvent(this, evt);
}
} else {
for (var i = 0, events = [], length = listeners.length; i < length; i++) {
if (
listeners[i].fn !== fn ||
(once && !listeners[i].once) ||
(context && listeners[i].context !== context)
) {
events.push(listeners[i]);
}
}
if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;
else clearEvent(this, evt);
}
return this;
};
EventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {
var evt;
if (event) {
evt = prefix ? prefix + event : event;
if (this._events[evt]) clearEvent(this, evt);
} else {
this._events = new Events();
this._eventsCount = 0;
}
return this;
};
EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
EventEmitter.prototype.addListener = EventEmitter.prototype.on;
EventEmitter.prefixed = prefix;
EventEmitter.EventEmitter = EventEmitter;
{
module.exports = EventEmitter;
}
} (eventemitter3));
const EventEmitter = eventemitter3.exports;
({
name: '@polkadot/x-ws',
path: (({ url: (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href)) }) && (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))) ? new URL((typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))).pathname.substring(0, new URL((typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))).pathname.lastIndexOf('/') + 1) : 'auto',
type: 'esm',
version: '9.2.1'
});
const WebSocket = xglobal.WebSocket;
const known = {
1000: 'Normal Closure',
1001: 'Going Away',
1002: 'Protocol Error',
1003: 'Unsupported Data',
1004: '(For future)',
1005: 'No Status Received',
1006: 'Abnormal Closure',
1007: 'Invalid frame payload data',
1008: 'Policy Violation',
1009: 'Message too big',
1010: 'Missing Extension',
1011: 'Internal Error',
1012: 'Service Restart',
1013: 'Try Again Later',
1014: 'Bad Gateway',
1015: 'TLS Handshake'
};
function getUnmapped(code) {
if (code <= 1999) {
return '(For WebSocket standard)';
} else if (code <= 2999) {
return '(For WebSocket extensions)';
} else if (code <= 3999) {
return '(For libraries and frameworks)';
} else if (code <= 4999) {
return '(For applications)';
}
}
function getWSErrorString(code) {
if (code >= 0 && code <= 999) {
return '(Unused)';
}
return known[code] || getUnmapped(code) || '(Unknown)';
}
const ALIASES = {
chain_finalisedHead: 'chain_finalizedHead',
chain_subscribeFinalisedHeads: 'chain_subscribeFinalizedHeads',
chain_unsubscribeFinalisedHeads: 'chain_unsubscribeFinalizedHeads'
};
const RETRY_DELAY = 2500;
const DEFAULT_TIMEOUT_MS = 60 * 1000;
const TIMEOUT_INTERVAL = 5000;
const MEGABYTE = 1024 * 1024;
const l$6 = util.logger('api-ws');
function eraseRecord(record, cb) {
Object.keys(record).forEach(key => {
if (cb) {
cb(record[key]);
}
delete record[key];
});
}
var _callCache = _classPrivateFieldKey("callCache");
var _coder = _classPrivateFieldKey("coder");
var _endpoints = _classPrivateFieldKey("endpoints");
var _headers = _classPrivateFieldKey("headers");
var _eventemitter = _classPrivateFieldKey("eventemitter");
var _handlers = _classPrivateFieldKey("handlers");
var _isReadyPromise = _classPrivateFieldKey("isReadyPromise");
var _stats = _classPrivateFieldKey("stats");
var _waitingForId = _classPrivateFieldKey("waitingForId");
var _autoConnectMs = _classPrivateFieldKey("autoConnectMs");
var _endpointIndex = _classPrivateFieldKey("endpointIndex");
var _isConnected = _classPrivateFieldKey("isConnected");
var _subscriptions = _classPrivateFieldKey("subscriptions");
var _timeoutId = _classPrivateFieldKey("timeoutId");
var _websocket = _classPrivateFieldKey("websocket");
var _timeout = _classPrivateFieldKey("timeout");
var _send = _classPrivateFieldKey("send");
var _emit = _classPrivateFieldKey("emit");
var _onSocketClose = _classPrivateFieldKey("onSocketClose");
var _onSocketError = _classPrivateFieldKey("onSocketError");
var _onSocketMessage = _classPrivateFieldKey("onSocketMessage");
var _onSocketMessageResult = _classPrivateFieldKey("onSocketMessageResult");
var _onSocketMessageSubscribe = _classPrivateFieldKey("onSocketMessageSubscribe");
var _onSocketOpen = _classPrivateFieldKey("onSocketOpen");
var _resubscribe = _classPrivateFieldKey("resubscribe");
var _timeoutHandlers = _classPrivateFieldKey("timeoutHandlers");
class WsProvider {
constructor(endpoint = defaults.WS_URL, autoConnectMs = RETRY_DELAY, headers = {}, timeout) {
Object.defineProperty(this, _send, {
value: _send2
});
Object.defineProperty(this, _callCache, {
writable: true,
value: new LRUCache()
});
Object.defineProperty(this, _coder, {
writable: true,
value: void 0
});
Object.defineProperty(this, _endpoints, {
writable: true,
value: void 0
});
Object.defineProperty(this, _headers, {
writable: true,
value: void 0
});
Object.defineProperty(this, _eventemitter, {
writable: true,
value: void 0
});
Object.defineProperty(this, _handlers, {
writable: true,
value: {}
});
Object.defineProperty(this, _isReadyPromise, {
writable: true,
value: void 0
});
Object.defineProperty(this, _stats, {
writable: true,
value: void 0
});
Object.defineProperty(this, _waitingForId, {
writable: true,
value: {}
});
Object.defineProperty(this, _autoConnectMs, {
writable: true,
value: void 0
});
Object.defineProperty(this, _endpointIndex, {
writable: true,
value: void 0
});
Object.defineProperty(this, _isConnected, {
writable: true,
value: false
});
Object.defineProperty(this, _subscriptions, {
writable: true,
value: {}
});
Object.defineProperty(this, _timeoutId, {
writable: true,
value: null
});
Object.defineProperty(this, _websocket, {
writable: true,
value: void 0
});
Object.defineProperty(this, _timeout, {
writable: true,
value: void 0
});
Object.defineProperty(this, _emit, {
writable: true,
value: (type, ...args) => {
_classPrivateFieldBase(this, _eventemitter)[_eventemitter].emit(type, ...args);
}
});
Object.defineProperty(this, _onSocketClose, {
writable: true,
value: event => {
const error = new Error(`disconnected from ${_classPrivateFieldBase(this, _endpoints)[_endpoints][_classPrivateFieldBase(this, _endpointIndex)[_endpointIndex]]}: ${event.code}:: ${event.reason || getWSErrorString(event.code)}`);
if (_classPrivateFieldBase(this, _autoConnectMs)[_autoConnectMs] > 0) {
l$6.error(error.message);
}
_classPrivateFieldBase(this, _isConnected)[_isConnected] = false;
if (_classPrivateFieldBase(this, _websocket)[_websocket]) {
_classPrivateFieldBase(this, _websocket)[_websocket].onclose = null;
_classPrivateFieldBase(this, _websocket)[_websocket].onerror = null;
_classPrivateFieldBase(this, _websocket)[_websocket].onmessage = null;
_classPrivateFieldBase(this, _websocket)[_websocket].onopen = null;
_classPrivateFieldBase(this, _websocket)[_websocket] = null;
}
if (_classPrivateFieldBase(this, _timeoutId)[_timeoutId]) {
clearInterval(_classPrivateFieldBase(this, _timeoutId)[_timeoutId]);
_classPrivateFieldBase(this, _timeoutId)[_timeoutId] = null;
}
_classPrivateFieldBase(this, _emit)[_emit]('disconnected');
eraseRecord(_classPrivateFieldBase(this, _handlers)[_handlers], h => {
try {
h.callback(error, undefined);
} catch (err) {
l$6.error(err);
}
});
eraseRecord(_classPrivateFieldBase(this, _waitingForId)[_waitingForId]);
if (_classPrivateFieldBase(this, _autoConnectMs)[_autoConnectMs] > 0) {
setTimeout(() => {
this.connectWithRetry().catch(() => {
});
}, _classPrivateFieldBase(this, _autoConnectMs)[_autoConnectMs]);
}
}
});
Object.defineProperty(this, _onSocketError, {
writable: true,
value: error => {
l$6.debug(() => ['socket error', error]);
_classPrivateFieldBase(this, _emit)[_emit]('error', error);
}
});
Object.defineProperty(this, _onSocketMessage, {
writable: true,
value: message => {
l$6.debug(() => ['received', message.data]);
_classPrivateFieldBase(this, _stats)[_stats].total.bytesRecv += message.data.length;
const response = JSON.parse(message.data);
return util.isUndefined(response.method) ? _classPrivateFieldBase(this, _onSocketMessageResult)[_onSocketMessageResult](response) : _classPrivateFieldBase(this, _onSocketMessageSubscribe)[_onSocketMessageSubscribe](response);
}
});
Object.defineProperty(this, _onSocketMessageResult, {
writable: true,
value: response => {
const handler = _classPrivateFieldBase(this, _handlers)[_handlers][response.id];
if (!handler) {
l$6.debug(() => `Unable to find handler for id=${response.id}`);
return;
}
try {
const {
method,
params,
subscription
} = handler;
const result = _classPrivateFieldBase(this, _coder)[_coder].decodeResponse(response);
handler.callback(null, result);
if (subscription) {
const subId = `${subscription.type}::${result}`;
_classPrivateFieldBase(this, _subscriptions)[_subscriptions][subId] = util.objectSpread({}, subscription, {
method,
params
});
if (_classPrivateFieldBase(this, _waitingForId)[_waitingForId][subId]) {
_classPrivateFieldBase(this, _onSocketMessageSubscribe)[_onSocketMessageSubscribe](_classPrivateFieldBase(this, _waitingForId)[_waitingForId][subId]);
}
}
} catch (error) {
handler.callback(error, undefined);
}
delete _classPrivateFieldBase(this, _handlers)[_handlers][response.id];
}
});
Object.defineProperty(this, _onSocketMessageSubscribe, {
writable: true,
value: response => {
const method = ALIASES[response.method] || response.method || 'invalid';
const subId = `${method}::${response.params.subscription}`;
const handler = _classPrivateFieldBase(this, _subscriptions)[_subscriptions][subId];
if (!handler) {
_classPrivateFieldBase(this, _waitingForId)[_waitingForId][subId] = response;
l$6.debug(() => `Unable to find handler for subscription=${subId}`);
return;
}
delete _classPrivateFieldBase(this, _waitingForId)[_waitingForId][subId];
try {
const result = _classPrivateFieldBase(this, _coder)[_coder].decodeResponse(response);
handler.callback(null, result);
} catch (error) {
handler.callback(error, undefined);
}
}
});
Object.defineProperty(this, _onSocketOpen, {
writable: true,
value: () => {
util.assert(!util.isNull(_classPrivateFieldBase(this, _websocket)[_websocket]), 'WebSocket cannot be null in onOpen');
l$6.debug(() => ['connected to', _classPrivateFieldBase(this, _endpoints)[_endpoints][_classPrivateFieldBase(this, _endpointIndex)[_endpointIndex]]]);
_classPrivateFieldBase(this, _isConnected)[_isConnected] = true;
_classPrivateFieldBase(this, _emit)[_emit]('connected');
_classPrivateFieldBase(this, _resubscribe)[_resubscribe]();
return true;
}
});
Object.defineProperty(this, _resubscribe, {
writable: true,
value: () => {
const subscriptions = _classPrivateFieldBase(this, _subscriptions)[_subscriptions];
_classPrivateFieldBase(this, _subscriptions)[_subscriptions] = {};
Promise.all(Object.keys(subscriptions).map(async id => {
const {
callback,
method,
params,
type
} = subscriptions[id];
if (type.startsWith('author_')) {
return;
}
try {
await this.subscribe(type, method, params, callback);
} catch (error) {
l$6.error(error);
}
})).catch(l$6.error);
}
});
Object.defineProperty(this, _timeoutHandlers, {
writable: true,
value: () => {
const now = Date.now();
const ids = Object.keys(_classPrivateFieldBase(this, _handlers)[_handlers]);
for (let i = 0; i < ids.length; i++) {
const handler = _classPrivateFieldBase(this, _handlers)[_handlers][ids[i]];
if (now - handler.start > _classPrivateFieldBase(this, _timeout)[_timeout]) {
try {
handler.callback(new Error(`No response received from RPC endpoint in ${_classPrivateFieldBase(this, _timeout)[_timeout] / 1000}s`), undefined);
} catch {
}
_classPrivateFieldBase(this, _stats)[_stats].total.timeout++;
delete _classPrivateFieldBase(this, _handlers)[_handlers][ids[i]];
}
}
}
});
const endpoints = Array.isArray(endpoint) ? endpoint : [endpoint];
util.assert(endpoints.length !== 0, 'WsProvider requires at least one Endpoint');
endpoints.forEach(endpoint => {
util.assert(/^(wss|ws):\/\//.test(endpoint), () => `Endpoint should start with 'ws://', received '${endpoint}'`);
});
_classPrivateFieldBase(this, _eventemitter)[_eventemitter] = new EventEmitter();
_classPrivateFieldBase(this, _autoConnectMs)[_autoConnectMs] = autoConnectMs || 0;
_classPrivateFieldBase(this, _coder)[_coder] = new RpcCoder();
_classPrivateFieldBase(this, _endpointIndex)[_endpointIndex] = -1;
_classPrivateFieldBase(this, _endpoints)[_endpoints] = endpoints;
_classPrivateFieldBase(this, _headers)[_headers] = headers;
_classPrivateFieldBase(this, _websocket)[_websocket] = null;
_classPrivateFieldBase(this, _stats)[_stats] = {
active: {
requests: 0,
subscriptions: 0
},
total: {
bytesRecv: 0,
bytesSent: 0,
cached: 0,
requests: 0,
subscriptions: 0,
timeout: 0
}
};
_classPrivateFieldBase(this, _timeout)[_timeout] = timeout || DEFAULT_TIMEOUT_MS;
if (autoConnectMs > 0) {
this.connectWithRetry().catch(() => {
});
}
_classPrivateFieldBase(this, _isReadyPromise)[_isReadyPromise] = new Promise(resolve => {
_classPrivateFieldBase(this, _eventemitter)[_eventemitter].once('connected', () => {
resolve(this);
});
});
}
get hasSubscriptions() {
return true;
}
get isConnected() {
return _classPrivateFieldBase(this, _isConnected)[_isConnected];
}
get isReady() {
return _classPrivateFieldBase(this, _isReadyPromise)[_isReadyPromise];
}
clone() {
return new WsProvider(_classPrivateFieldBase(this, _endpoints)[_endpoints]);
}
async connect() {
try {
_classPrivateFieldBase(this, _endpointIndex)[_endpointIndex] = (_classPrivateFieldBase(this, _endpointIndex)[_endpointIndex] + 1) % _classPrivateFieldBase(this, _endpoints)[_endpoints].length;
_classPrivateFieldBase(this, _websocket)[_websocket] = typeof xglobal.WebSocket !== 'undefined' && util.isChildClass(xglobal.WebSocket, WebSocket) ? new WebSocket(_classPrivateFieldBase(this, _endpoints)[_endpoints][_classPrivateFieldBase(this, _endpointIndex)[_endpointIndex]])
: new WebSocket(_classPrivateFieldBase(this, _endpoints)[_endpoints][_classPrivateFieldBase(this, _endpointIndex)[_endpointIndex]], undefined, undefined, _classPrivateFieldBase(this, _headers)[_headers], undefined, {
fragmentOutgoingMessages: true,
fragmentationThreshold: 1 * MEGABYTE,
maxReceivedFrameSize: 24 * MEGABYTE,
maxReceivedMessageSize: 24 * MEGABYTE
});
_classPrivateFieldBase(this, _websocket)[_websocket].onclose = _classPrivateFieldBase(this, _onSocketClose)[_onSocketClose];
_classPrivateFieldBase(this, _websocket)[_websocket].onerror = _classPrivateFieldBase(this, _onSocketError)[_onSocketError];
_classPrivateFieldBase(this, _websocket)[_websocket].onmessage = _classPrivateFieldBase(this, _onSocketMessage)[_onSocketMessage];
_classPrivateFieldBase(this, _websocket)[_websocket].onopen = _classPrivateFieldBase(this, _onSocketOpen)[_onSocketOpen];
_classPrivateFieldBase(this, _timeoutId)[_timeoutId] = setInterval(() => _classPrivateFieldBase(this, _timeoutHandlers)[_timeoutHandlers](), TIMEOUT_INTERVAL);
} catch (error) {
l$6.error(error);
_classPrivateFieldBase(this, _emit)[_emit]('error', error);
throw error;
}
}
async connectWithRetry() {
if (_classPrivateFieldBase(this, _autoConnectMs)[_autoConnectMs] > 0) {
try {
await this.connect();
} catch (error) {
setTimeout(() => {
this.connectWithRetry().catch(() => {
});
}, _classPrivateFieldBase(this, _autoConnectMs)[_autoConnectMs]);
}
}
}
async disconnect() {
_classPrivateFieldBase(this, _autoConnectMs)[_autoConnectMs] = 0;
try {
if (_classPrivateFieldBase(this, _websocket)[_websocket]) {
_classPrivateFieldBase(this, _websocket)[_websocket].close(1000);
}
} catch (error) {
l$6.error(error);
_classPrivateFieldBase(this, _emit)[_emit]('error', error);
throw error;
}
}
get stats() {
return {
active: {
requests: Object.keys(_classPrivateFieldBase(this, _handlers)[_handlers]).length,
subscriptions: Object.keys(_classPrivateFieldBase(this, _subscriptions)[_subscriptions]).length
},
total: _classPrivateFieldBase(this, _stats)[_stats].total
};
}
on(type, sub) {
_classPrivateFieldBase(this, _eventemitter)[_eventemitter].on(type, sub);
return () => {
_classPrivateFieldBase(this, _eventemitter)[_eventemitter].removeListener(type, sub);
};
}
send(method, params, isCacheable, subscription) {
_classPrivateFieldBase(this, _stats)[_stats].total.requests++;
const [id, body] = _classPrivateFieldBase(this, _coder)[_coder].encodeJson(method, params);
let resultPromise = isCacheable ? _classPrivateFieldBase(this, _callCache)[_callCache].get(body) : null;
if (!resultPromise) {
resultPromise = _classPrivateFieldBase(this, _send)[_send](id, body, method, params, subscription);
if (isCacheable) {
_classPrivateFieldBase(this, _callCache)[_callCache].set(body, resultPromise);
}
} else {
_classPrivateFieldBase(this, _stats)[_stats].total.cached++;
}
return resultPromise;
}
subscribe(type, method, params, callback) {
_classPrivateFieldBase(this, _stats)[_stats].total.subscriptions++;
return this.send(method, params, false, {
callback,
type
});
}
async unsubscribe(type, method, id) {
const subscription = `${type}::${id}`;
if (util.isUndefined(_classPrivateFieldBase(this, _subscriptions)[_subscriptions][subscription])) {
l$6.debug(() => `Unable to find active subscription=${subscription}`);
return false;
}
delete _classPrivateFieldBase(this, _subscriptions)[_subscriptions][subscription];
try {
return this.isConnected && !util.isNull(_classPrivateFieldBase(this, _websocket)[_websocket]) ? this.send(method, [id]) : true;
} catch (error) {
return false;
}
}
}
async function _send2(id, body, method, params, subscription) {
return new Promise((resolve, reject) => {
try {
util.assert(this.isConnected && !util.isNull(_classPrivateFieldBase(this, _websocket)[_websocket]), 'WebSocket is not connected');
const callback = (error, result) => {
error ? reject(error) : resolve(result);
};
l$6.debug(() => ['calling', method, body]);
_classPrivateFieldBase(this, _handlers)[_handlers][id] = {
callback,
method,
params,
start: Date.now(),
subscription
};
_classPrivateFieldBase(this, _stats)[_stats].total.bytesSent += body.length;
_classPrivateFieldBase(this, _websocket)[_websocket].send(body);
} catch (error) {
reject(error);
}
});
}
const packageInfo = {
name: '@polkadot/api',
path: (({ url: (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href)) }) && (typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))) ? new URL((typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))).pathname.substring(0, new URL((typeof document === 'undefined' && typeof location === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : typeof document === 'undefined' ? location.href : (document.currentScript && document.currentScript.src || new URL('bundle-polkadot-api.js', document.baseURI).href))).pathname.lastIndexOf('/') + 1) : 'auto',
type: 'esm',
version: '8.5.1'
};
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
function __awaiter(thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
}
function __generator(thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
}
function __values(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
}
function __read(o, n) {
var m = typeof Symbol === "function" && o[Symbol.iterator];
if (!m) return o;
var i = m.call(o), r, ar = [], e;
try {
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
}
catch (error) { e = { error: error }; }
finally {
try {
if (r && !r.done && (m = i["return"])) m.call(i);
}
finally { if (e) throw e.error; }
}
return ar;
}
function __spreadArray(to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
}
function __await(v) {
return this instanceof __await ? (this.v = v, this) : new __await(v);
}
function __asyncGenerator(thisArg, _arguments, generator) {
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
var g = generator.apply(thisArg, _arguments || []), i, q = [];
return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3