@ecency/hive-tx 7.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +206 -0
- package/dist/browser/hive-tx.min.js +3 -0
- package/dist/browser/hive-tx.min.js.LICENSE.txt +5 -0
- package/dist/browser/hive-tx.min.js.map +1 -0
- package/dist/cjs/Transaction.d.ts +71 -0
- package/dist/cjs/Transaction.d.ts.map +1 -0
- package/dist/cjs/Transaction.js +199 -0
- package/dist/cjs/Transaction.js.map +1 -0
- package/dist/cjs/config.d.ts +37 -0
- package/dist/cjs/config.d.ts.map +1 -0
- package/dist/cjs/config.js +54 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/cjs/helpers/Asset.d.ts +21 -0
- package/dist/cjs/helpers/Asset.d.ts.map +1 -0
- package/dist/cjs/helpers/Asset.js +74 -0
- package/dist/cjs/helpers/Asset.js.map +1 -0
- package/dist/cjs/helpers/ByteBuffer.d.ts +75 -0
- package/dist/cjs/helpers/ByteBuffer.d.ts.map +1 -0
- package/dist/cjs/helpers/ByteBuffer.js +555 -0
- package/dist/cjs/helpers/ByteBuffer.js.map +1 -0
- package/dist/cjs/helpers/HexBuffer.d.ts +10 -0
- package/dist/cjs/helpers/HexBuffer.d.ts.map +1 -0
- package/dist/cjs/helpers/HexBuffer.js +33 -0
- package/dist/cjs/helpers/HexBuffer.js.map +1 -0
- package/dist/cjs/helpers/PrivateKey.d.ts +114 -0
- package/dist/cjs/helpers/PrivateKey.d.ts.map +1 -0
- package/dist/cjs/helpers/PrivateKey.js +212 -0
- package/dist/cjs/helpers/PrivateKey.js.map +1 -0
- package/dist/cjs/helpers/PublicKey.d.ts +47 -0
- package/dist/cjs/helpers/PublicKey.d.ts.map +1 -0
- package/dist/cjs/helpers/PublicKey.js +97 -0
- package/dist/cjs/helpers/PublicKey.js.map +1 -0
- package/dist/cjs/helpers/Signature.d.ts +38 -0
- package/dist/cjs/helpers/Signature.d.ts.map +1 -0
- package/dist/cjs/helpers/Signature.js +85 -0
- package/dist/cjs/helpers/Signature.js.map +1 -0
- package/dist/cjs/helpers/aes.d.ts +15 -0
- package/dist/cjs/helpers/aes.d.ts.map +1 -0
- package/dist/cjs/helpers/aes.js +87 -0
- package/dist/cjs/helpers/aes.js.map +1 -0
- package/dist/cjs/helpers/call.d.ts +119 -0
- package/dist/cjs/helpers/call.d.ts.map +1 -0
- package/dist/cjs/helpers/call.js +498 -0
- package/dist/cjs/helpers/call.js.map +1 -0
- package/dist/cjs/helpers/deserializer.d.ts +4 -0
- package/dist/cjs/helpers/deserializer.d.ts.map +1 -0
- package/dist/cjs/helpers/deserializer.js +58 -0
- package/dist/cjs/helpers/deserializer.js.map +1 -0
- package/dist/cjs/helpers/memo.d.ts +36 -0
- package/dist/cjs/helpers/memo.d.ts.map +1 -0
- package/dist/cjs/helpers/memo.js +167 -0
- package/dist/cjs/helpers/memo.js.map +1 -0
- package/dist/cjs/helpers/serializer.d.ts +14 -0
- package/dist/cjs/helpers/serializer.d.ts.map +1 -0
- package/dist/cjs/helpers/serializer.js +639 -0
- package/dist/cjs/helpers/serializer.js.map +1 -0
- package/dist/cjs/helpers/sleep.d.ts +2 -0
- package/dist/cjs/helpers/sleep.d.ts.map +1 -0
- package/dist/cjs/helpers/sleep.js +8 -0
- package/dist/cjs/helpers/sleep.js.map +1 -0
- package/dist/cjs/helpers/utils.d.ts +122 -0
- package/dist/cjs/helpers/utils.d.ts.map +1 -0
- package/dist/cjs/helpers/utils.js +202 -0
- package/dist/cjs/helpers/utils.js.map +1 -0
- package/dist/cjs/index.d.ts +10 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +60 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/type_generators/types/balance.d.ts +1096 -0
- package/dist/cjs/type_generators/types/balance.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/balance.js +3 -0
- package/dist/cjs/type_generators/types/balance.js.map +1 -0
- package/dist/cjs/type_generators/types/hafah.d.ts +2154 -0
- package/dist/cjs/type_generators/types/hafah.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hafah.js +3 -0
- package/dist/cjs/type_generators/types/hafah.js.map +1 -0
- package/dist/cjs/type_generators/types/hafbe.d.ts +2121 -0
- package/dist/cjs/type_generators/types/hafbe.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hafbe.js +3 -0
- package/dist/cjs/type_generators/types/hafbe.js.map +1 -0
- package/dist/cjs/type_generators/types/hafsql.d.ts +2439 -0
- package/dist/cjs/type_generators/types/hafsql.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hafsql.js +3 -0
- package/dist/cjs/type_generators/types/hafsql.js.map +1 -0
- package/dist/cjs/type_generators/types/hivemind.d.ts +202 -0
- package/dist/cjs/type_generators/types/hivemind.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hivemind.js +3 -0
- package/dist/cjs/type_generators/types/hivemind.js.map +1 -0
- package/dist/cjs/type_generators/types/hivesense.d.ts +448 -0
- package/dist/cjs/type_generators/types/hivesense.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/hivesense.js +3 -0
- package/dist/cjs/type_generators/types/hivesense.js.map +1 -0
- package/dist/cjs/type_generators/types/nft-tracker.d.ts +348 -0
- package/dist/cjs/type_generators/types/nft-tracker.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/nft-tracker.js +3 -0
- package/dist/cjs/type_generators/types/nft-tracker.js.map +1 -0
- package/dist/cjs/type_generators/types/reputation.d.ts +182 -0
- package/dist/cjs/type_generators/types/reputation.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/reputation.js +3 -0
- package/dist/cjs/type_generators/types/reputation.js.map +1 -0
- package/dist/cjs/type_generators/types/status.d.ts +139 -0
- package/dist/cjs/type_generators/types/status.d.ts.map +1 -0
- package/dist/cjs/type_generators/types/status.js +3 -0
- package/dist/cjs/type_generators/types/status.js.map +1 -0
- package/dist/cjs/types.d.ts +415 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/Transaction.d.ts +71 -0
- package/dist/esm/Transaction.d.ts.map +1 -0
- package/dist/esm/Transaction.js +195 -0
- package/dist/esm/Transaction.js.map +1 -0
- package/dist/esm/config.d.ts +37 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js +51 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/helpers/Asset.d.ts +21 -0
- package/dist/esm/helpers/Asset.d.ts.map +1 -0
- package/dist/esm/helpers/Asset.js +70 -0
- package/dist/esm/helpers/Asset.js.map +1 -0
- package/dist/esm/helpers/ByteBuffer.d.ts +75 -0
- package/dist/esm/helpers/ByteBuffer.d.ts.map +1 -0
- package/dist/esm/helpers/ByteBuffer.js +551 -0
- package/dist/esm/helpers/ByteBuffer.js.map +1 -0
- package/dist/esm/helpers/HexBuffer.d.ts +10 -0
- package/dist/esm/helpers/HexBuffer.d.ts.map +1 -0
- package/dist/esm/helpers/HexBuffer.js +29 -0
- package/dist/esm/helpers/HexBuffer.js.map +1 -0
- package/dist/esm/helpers/PrivateKey.d.ts +114 -0
- package/dist/esm/helpers/PrivateKey.d.ts.map +1 -0
- package/dist/esm/helpers/PrivateKey.js +205 -0
- package/dist/esm/helpers/PrivateKey.js.map +1 -0
- package/dist/esm/helpers/PublicKey.d.ts +47 -0
- package/dist/esm/helpers/PublicKey.d.ts.map +1 -0
- package/dist/esm/helpers/PublicKey.js +90 -0
- package/dist/esm/helpers/PublicKey.js.map +1 -0
- package/dist/esm/helpers/Signature.d.ts +38 -0
- package/dist/esm/helpers/Signature.d.ts.map +1 -0
- package/dist/esm/helpers/Signature.js +81 -0
- package/dist/esm/helpers/Signature.js.map +1 -0
- package/dist/esm/helpers/aes.d.ts +15 -0
- package/dist/esm/helpers/aes.d.ts.map +1 -0
- package/dist/esm/helpers/aes.js +81 -0
- package/dist/esm/helpers/aes.js.map +1 -0
- package/dist/esm/helpers/call.d.ts +119 -0
- package/dist/esm/helpers/call.d.ts.map +1 -0
- package/dist/esm/helpers/call.js +490 -0
- package/dist/esm/helpers/call.js.map +1 -0
- package/dist/esm/helpers/deserializer.d.ts +4 -0
- package/dist/esm/helpers/deserializer.d.ts.map +1 -0
- package/dist/esm/helpers/deserializer.js +55 -0
- package/dist/esm/helpers/deserializer.js.map +1 -0
- package/dist/esm/helpers/memo.d.ts +36 -0
- package/dist/esm/helpers/memo.d.ts.map +1 -0
- package/dist/esm/helpers/memo.js +128 -0
- package/dist/esm/helpers/memo.js.map +1 -0
- package/dist/esm/helpers/serializer.d.ts +14 -0
- package/dist/esm/helpers/serializer.d.ts.map +1 -0
- package/dist/esm/helpers/serializer.js +636 -0
- package/dist/esm/helpers/serializer.js.map +1 -0
- package/dist/esm/helpers/sleep.d.ts +2 -0
- package/dist/esm/helpers/sleep.d.ts.map +1 -0
- package/dist/esm/helpers/sleep.js +4 -0
- package/dist/esm/helpers/sleep.js.map +1 -0
- package/dist/esm/helpers/utils.d.ts +122 -0
- package/dist/esm/helpers/utils.d.ts.map +1 -0
- package/dist/esm/helpers/utils.js +196 -0
- package/dist/esm/helpers/utils.js.map +1 -0
- package/dist/esm/index.d.ts +10 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/type_generators/types/balance.d.ts +1096 -0
- package/dist/esm/type_generators/types/balance.d.ts.map +1 -0
- package/dist/esm/type_generators/types/balance.js +2 -0
- package/dist/esm/type_generators/types/balance.js.map +1 -0
- package/dist/esm/type_generators/types/hafah.d.ts +2154 -0
- package/dist/esm/type_generators/types/hafah.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hafah.js +2 -0
- package/dist/esm/type_generators/types/hafah.js.map +1 -0
- package/dist/esm/type_generators/types/hafbe.d.ts +2121 -0
- package/dist/esm/type_generators/types/hafbe.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hafbe.js +2 -0
- package/dist/esm/type_generators/types/hafbe.js.map +1 -0
- package/dist/esm/type_generators/types/hafsql.d.ts +2439 -0
- package/dist/esm/type_generators/types/hafsql.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hafsql.js +2 -0
- package/dist/esm/type_generators/types/hafsql.js.map +1 -0
- package/dist/esm/type_generators/types/hivemind.d.ts +202 -0
- package/dist/esm/type_generators/types/hivemind.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hivemind.js +2 -0
- package/dist/esm/type_generators/types/hivemind.js.map +1 -0
- package/dist/esm/type_generators/types/hivesense.d.ts +448 -0
- package/dist/esm/type_generators/types/hivesense.d.ts.map +1 -0
- package/dist/esm/type_generators/types/hivesense.js +2 -0
- package/dist/esm/type_generators/types/hivesense.js.map +1 -0
- package/dist/esm/type_generators/types/nft-tracker.d.ts +348 -0
- package/dist/esm/type_generators/types/nft-tracker.d.ts.map +1 -0
- package/dist/esm/type_generators/types/nft-tracker.js +2 -0
- package/dist/esm/type_generators/types/nft-tracker.js.map +1 -0
- package/dist/esm/type_generators/types/reputation.d.ts +182 -0
- package/dist/esm/type_generators/types/reputation.d.ts.map +1 -0
- package/dist/esm/type_generators/types/reputation.js +2 -0
- package/dist/esm/type_generators/types/reputation.js.map +1 -0
- package/dist/esm/type_generators/types/status.d.ts +139 -0
- package/dist/esm/type_generators/types/status.d.ts.map +1 -0
- package/dist/esm/type_generators/types/status.js +2 -0
- package/dist/esm/type_generators/types/status.js.map +1 -0
- package/dist/esm/types.d.ts +415 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ByteBuffer } from './ByteBuffer';
|
|
2
|
+
import { cbc as AESCBC } from '@noble/ciphers/aes.js';
|
|
3
|
+
import { secp256k1 } from '@noble/curves/secp256k1.js';
|
|
4
|
+
import { sha256, sha512 } from '@noble/hashes/sha2.js';
|
|
5
|
+
export const encrypt = (privateKey, publicKey, message, nonce = uniqueNonce()) => crypt(privateKey, publicKey, nonce, message);
|
|
6
|
+
export const decrypt = (privateKey, publicKey, nonce, message, checksum) => {
|
|
7
|
+
const d = crypt(privateKey, publicKey, nonce, message, checksum);
|
|
8
|
+
return d.message;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* @arg message - Encrypted or plain text message (see checksum)
|
|
12
|
+
* @arg checksum - shared secret checksum (null to encrypt, non-null to decrypt)
|
|
13
|
+
*/
|
|
14
|
+
const crypt = (privateKey, publicKey, nonce, message, checksum) => {
|
|
15
|
+
const nonceL = typeof nonce === 'bigint' ? nonce : BigInt(nonce);
|
|
16
|
+
const S = privateKey.getSharedSecret(publicKey);
|
|
17
|
+
let ebuf = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
|
|
18
|
+
ebuf.writeUint64(nonceL);
|
|
19
|
+
ebuf.append(S);
|
|
20
|
+
ebuf.flip();
|
|
21
|
+
const encryptionKey = sha512(new Uint8Array(ebuf.toBuffer()));
|
|
22
|
+
const iv = encryptionKey.subarray(32, 48);
|
|
23
|
+
const tag = encryptionKey.subarray(0, 32);
|
|
24
|
+
// check if first 64 bit of sha256 hash treated as uint64_t truncated to 32 bits.
|
|
25
|
+
const check = sha256(encryptionKey).subarray(0, 4);
|
|
26
|
+
const cbuf = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
|
|
27
|
+
cbuf.append(check);
|
|
28
|
+
cbuf.flip();
|
|
29
|
+
const check32 = cbuf.readUint32();
|
|
30
|
+
if (checksum) {
|
|
31
|
+
if (check32 !== checksum) {
|
|
32
|
+
throw new Error('Invalid key');
|
|
33
|
+
}
|
|
34
|
+
message = cryptoJsDecrypt(message, tag, iv);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
message = cryptoJsEncrypt(message, tag, iv);
|
|
38
|
+
}
|
|
39
|
+
return { nonce: nonceL, message, checksum: check32 };
|
|
40
|
+
};
|
|
41
|
+
/**
|
|
42
|
+
* This method does not use a checksum, the returned data must be validated some other way.
|
|
43
|
+
* @arg {string|Uint8Array} ciphertext - binary format
|
|
44
|
+
* @return {Uint8Array} the decrypted message
|
|
45
|
+
*/
|
|
46
|
+
const cryptoJsDecrypt = (message, tag, iv) => {
|
|
47
|
+
let messageBuffer = message;
|
|
48
|
+
const decipher = AESCBC(tag, iv);
|
|
49
|
+
messageBuffer = decipher.decrypt(messageBuffer);
|
|
50
|
+
// return Uint8Array.from(messageBuffer)
|
|
51
|
+
return messageBuffer;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* This method does not use a checksum, the returned data must be validated some other way.
|
|
55
|
+
* @arg {string|Uint8Array} plaintext - binary format
|
|
56
|
+
* @return {Uint8Array} binary
|
|
57
|
+
*/
|
|
58
|
+
export const cryptoJsEncrypt = (message, tag, iv) => {
|
|
59
|
+
let messageBuffer = message;
|
|
60
|
+
const cipher = AESCBC(tag, iv);
|
|
61
|
+
messageBuffer = cipher.encrypt(messageBuffer);
|
|
62
|
+
// return Uint8Array.from(messageBuffer)
|
|
63
|
+
return messageBuffer;
|
|
64
|
+
};
|
|
65
|
+
/** @return {string} unique 64 bit unsigned number string. Being time based,
|
|
66
|
+
* this is careful to never choose the same nonce twice. This value could
|
|
67
|
+
* clsbe recorded in the blockchain for a long time.
|
|
68
|
+
*/
|
|
69
|
+
let uniqueNonceEntropy = null;
|
|
70
|
+
const uniqueNonce = () => {
|
|
71
|
+
if (uniqueNonceEntropy === null) {
|
|
72
|
+
const randomPrivateKey = secp256k1.utils.randomSecretKey();
|
|
73
|
+
uniqueNonceEntropy = Math.round((randomPrivateKey[0] << 8) | randomPrivateKey[1]);
|
|
74
|
+
}
|
|
75
|
+
let long = BigInt(Date.now());
|
|
76
|
+
const entropy = ++uniqueNonceEntropy % 0xffff;
|
|
77
|
+
long = (long << BigInt(16)) | BigInt(entropy);
|
|
78
|
+
return long;
|
|
79
|
+
};
|
|
80
|
+
// const toLongObj = (o) => (o ? (Long.isLong(o) ? o : Long.fromString(o)) : o)
|
|
81
|
+
//# sourceMappingURL=aes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aes.js","sourceRoot":"","sources":["../../../src/helpers/aes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { APIMethods, APIPaths } from '../types';
|
|
2
|
+
export declare class RPCError extends Error {
|
|
3
|
+
name: string;
|
|
4
|
+
data?: any;
|
|
5
|
+
code: number;
|
|
6
|
+
stack: undefined;
|
|
7
|
+
constructor(rpcError: {
|
|
8
|
+
message: string;
|
|
9
|
+
code: number;
|
|
10
|
+
data?: any;
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Makes API calls to Hive blockchain nodes with automatic retry and failover support.
|
|
15
|
+
* Uses per-request retry counters, node health tracking, jitter between retries,
|
|
16
|
+
* and HTTP status awareness (429 rate limiting, 503).
|
|
17
|
+
*
|
|
18
|
+
* If the current node fails, it will automatically try the next healthy node.
|
|
19
|
+
* When all nodes have been tried, wraps around to give earlier nodes another chance
|
|
20
|
+
* until the full retry budget (config.retry) is exhausted.
|
|
21
|
+
* RPCErrors (valid blockchain rejections) are never retried.
|
|
22
|
+
*
|
|
23
|
+
* @param method - The API method name (e.g., 'condenser_api.get_accounts')
|
|
24
|
+
* @param params - Parameters for the API method as array or object
|
|
25
|
+
* @param timeout - Request timeout in milliseconds (default: config.timeout)
|
|
26
|
+
* @param retry - Maximum number of retry attempts (default: config.retry)
|
|
27
|
+
* @returns Promise resolving to the API response
|
|
28
|
+
* @throws {RPCError} On blockchain-level errors (bad params, missing authority, etc.)
|
|
29
|
+
* @throws {Error} If all retry attempts fail
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* import { callRPC } from 'hive-tx'
|
|
34
|
+
*
|
|
35
|
+
* // Get account information
|
|
36
|
+
* const accounts = await callRPC('condenser_api.get_accounts', [['alice']])
|
|
37
|
+
*
|
|
38
|
+
* // Custom timeout and retry settings
|
|
39
|
+
* const data = await callRPC('condenser_api.get_content', ['alice', 'test-post'], 10_000, 5)
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare const callRPC: <T = any>(method: string, params?: any[] | object, timeout?: number, retry?: number) => Promise<T>;
|
|
43
|
+
/**
|
|
44
|
+
* Broadcast-safe RPC call. Only retries on pre-connection errors where the
|
|
45
|
+
* request definitively never reached the server (ECONNREFUSED, ENOTFOUND, etc.).
|
|
46
|
+
* On timeouts, HTTP errors, or any ambiguous failure, throws immediately to
|
|
47
|
+
* prevent double-broadcasting transactions.
|
|
48
|
+
*
|
|
49
|
+
* Tries each node once (no wrap-around) since broadcast retries are dangerous.
|
|
50
|
+
*
|
|
51
|
+
* @internal Used by Transaction.broadcast()
|
|
52
|
+
*/
|
|
53
|
+
export declare const callRPCBroadcast: <T = any>(method: string, params?: any[] | object, timeout?: number) => Promise<T>;
|
|
54
|
+
type GetResponse<T> = T extends {
|
|
55
|
+
responses: {
|
|
56
|
+
'200'?: {
|
|
57
|
+
content: {
|
|
58
|
+
'application/json': infer R;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
} ? R : undefined;
|
|
63
|
+
type SafeGet<T> = T extends {
|
|
64
|
+
get: infer G;
|
|
65
|
+
} ? G : undefined;
|
|
66
|
+
type SafePathParams<T> = SafeGet<T> extends {
|
|
67
|
+
parameters: {
|
|
68
|
+
path: infer P;
|
|
69
|
+
};
|
|
70
|
+
} ? P : undefined;
|
|
71
|
+
type SafeQueryParams<T> = SafeGet<T> extends {
|
|
72
|
+
parameters: {
|
|
73
|
+
query: infer Q;
|
|
74
|
+
};
|
|
75
|
+
} ? Q : SafeGet<T> extends {
|
|
76
|
+
parameters: {
|
|
77
|
+
query?: infer Q;
|
|
78
|
+
};
|
|
79
|
+
} ? Q : undefined;
|
|
80
|
+
type ParamsForEndpoint<T> = SafePathParams<T> & SafeQueryParams<T> extends undefined ? SafePathParams<T> : SafePathParams<T> & SafeQueryParams<T>;
|
|
81
|
+
/**
|
|
82
|
+
* Makes REST API calls to Hive blockchain REST endpoints with automatic retry and failover support.
|
|
83
|
+
* Uses per-request retry counters, node health tracking, and timeout support.
|
|
84
|
+
* Wraps around the node list to honor the full retry budget.
|
|
85
|
+
*
|
|
86
|
+
* @template Api - The REST API method type (e.g., 'balance', 'hafah', 'hivemind', etc.)
|
|
87
|
+
* @template P - The endpoint path type for the specified API
|
|
88
|
+
*
|
|
89
|
+
* @param api - The REST API method name to call
|
|
90
|
+
* @param endpoint - The specific endpoint path within the API
|
|
91
|
+
* @param params - Optional parameters for path and query string replacement
|
|
92
|
+
* @param timeout - Request timeout in milliseconds (default: config.timeout)
|
|
93
|
+
* @param retry - Number of retry attempts before throwing an error (default: config.retry)
|
|
94
|
+
*
|
|
95
|
+
* @returns Promise resolving to the API response data with proper typing
|
|
96
|
+
* @throws Error if all retry attempts fail
|
|
97
|
+
*
|
|
98
|
+
* @example
|
|
99
|
+
* ```typescript
|
|
100
|
+
* import { callREST } from 'hive-tx'
|
|
101
|
+
*
|
|
102
|
+
* // Get account balance
|
|
103
|
+
* const balance = await callREST('balance', '/accounts/{account-name}/balances', { "account-name": 'alice' })
|
|
104
|
+
*
|
|
105
|
+
* // Custom timeout and retry settings
|
|
106
|
+
* const data = await callREST('status', '/status', undefined, 10_000, 3)
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare function callREST<Api extends APIMethods, P extends keyof APIPaths[Api]>(api: Api, endpoint: P, params?: ParamsForEndpoint<APIPaths[Api][P]>, timeout?: number, retry?: number): Promise<GetResponse<SafeGet<APIPaths[Api][P]>>>;
|
|
110
|
+
/**
|
|
111
|
+
* Make a JSONRPC call with quorum. The method will cross-check the result
|
|
112
|
+
* with `quorum` number of nodes before returning the result.
|
|
113
|
+
* @param method - The API method name (e.g., 'condenser_api.get_accounts')
|
|
114
|
+
* @param params - Parameters for the API method as array or object
|
|
115
|
+
* @param quorum - Default: 2 (recommended)
|
|
116
|
+
*/
|
|
117
|
+
export declare const callWithQuorum: <T = any>(method: string, params?: any[] | object, quorum?: number) => Promise<T>;
|
|
118
|
+
export {};
|
|
119
|
+
//# sourceMappingURL=call.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"call.d.ts","sourceRoot":"","sources":["../../../src/helpers/call.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAgB,MAAM,UAAU,CAAA;AAK7D,qBAAa,QAAS,SAAQ,KAAK;IACjC,IAAI,SAAa;IACjB,IAAI,CAAC,EAAE,GAAG,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,SAAS,CAAY;gBAChB,QAAQ,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,GAAG,CAAA;KAAE;CAOpE;AA6MD;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,OAAO,GAAU,CAAC,GAAG,GAAG,EACnC,QAAQ,MAAM,EACd,SAAQ,GAAG,EAAE,GAAG,MAAW,EAC3B,gBAAwB,EACxB,cAAoB,KACnB,OAAO,CAAC,CAAC,CA0CX,CAAA;AAID;;;;;;;;;GASG;AACH,eAAO,MAAM,gBAAgB,GAAU,CAAC,GAAG,GAAG,EAC5C,QAAQ,MAAM,EACd,SAAQ,GAAG,EAAE,GAAG,MAAW,EAC3B,gBAAwB,KACvB,OAAO,CAAC,CAAC,CAuCX,CAAA;AAgBD,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS;IAC9B,SAAS,EAAE;QAAE,KAAK,CAAC,EAAE;YAAE,OAAO,EAAE;gBAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;aAAE,CAAA;SAAE,CAAA;KAAE,CAAA;CACpE,GACG,CAAC,GACD,SAAS,CAAA;AACb,KAAK,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,SAAS,CAAA;AAC5D,KAAK,cAAc,CAAC,CAAC,IACnB,OAAO,CAAC,CAAC,CAAC,SAAS;IACjB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;CAC9B,GACG,CAAC,GACD,SAAS,CAAA;AACf,KAAK,eAAe,CAAC,CAAC,IACpB,OAAO,CAAC,CAAC,CAAC,SAAS;IACjB,UAAU,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC,CAAA;KAAE,CAAA;CAC/B,GACG,CAAC,GACD,OAAO,CAAC,CAAC,CAAC,SAAS;IACf,UAAU,EAAE;QACV,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;KAChB,CAAA;CACF,GACD,CAAC,GACD,SAAS,CAAA;AACjB,KAAK,iBAAiB,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,SAAS,SAAS,GAChF,cAAc,CAAC,CAAC,CAAC,GACjB,cAAc,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAA;AAE1C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,QAAQ,CAAC,GAAG,SAAS,UAAU,EAAE,CAAC,SAAS,MAAM,QAAQ,CAAC,GAAG,CAAC,EAClF,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,CAAC,EACX,MAAM,CAAC,EAAE,iBAAiB,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAC5C,OAAO,SAAiB,EACxB,KAAK,SAAe,GACnB,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAqFjD;AAID;;;;;;GAMG;AACH,eAAO,MAAM,cAAc,GAAU,CAAC,GAAG,GAAG,EAC1C,QAAQ,MAAM,EACd,SAAQ,GAAG,EAAE,GAAG,MAAW,EAC3B,eAAU,KACT,OAAO,CAAC,CAAC,CAuCX,CAAA"}
|