@across-protocol/sdk 4.3.143-alpha.1 → 4.3.143
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/dist/cjs/src/caching/Arweave/ArweaveClient.d.ts +6 -11
- package/dist/cjs/src/caching/Arweave/ArweaveClient.js +79 -102
- package/dist/cjs/src/caching/Arweave/ArweaveClient.js.map +1 -1
- package/dist/cjs/src/clients/BundleDataClient/utils/SuperstructUtils.d.ts +64 -63
- package/dist/cjs/src/clients/BundleDataClient/utils/SuperstructUtils.js +31 -13
- package/dist/cjs/src/clients/BundleDataClient/utils/SuperstructUtils.js.map +1 -1
- package/dist/esm/src/caching/Arweave/ArweaveClient.d.ts +8 -21
- package/dist/esm/src/caching/Arweave/ArweaveClient.js +89 -119
- package/dist/esm/src/caching/Arweave/ArweaveClient.js.map +1 -1
- package/dist/esm/src/clients/BundleDataClient/utils/SuperstructUtils.d.ts +64 -63
- package/dist/esm/src/clients/BundleDataClient/utils/SuperstructUtils.js +29 -11
- package/dist/esm/src/clients/BundleDataClient/utils/SuperstructUtils.js.map +1 -1
- package/dist/types/src/caching/Arweave/ArweaveClient.d.ts +8 -21
- package/dist/types/src/caching/Arweave/ArweaveClient.d.ts.map +1 -1
- package/dist/types/src/clients/BundleDataClient/utils/SuperstructUtils.d.ts +64 -63
- package/dist/types/src/clients/BundleDataClient/utils/SuperstructUtils.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/caching/Arweave/ArweaveClient.ts +88 -134
- package/src/clients/BundleDataClient/utils/SuperstructUtils.ts +26 -12
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BundleDataSS = exports.SortableEventSS = void 0;
|
|
3
|
+
exports.BundleDataSS = exports.SortableEventSS = exports.AddressType = void 0;
|
|
4
4
|
const superstruct_1 = require("superstruct");
|
|
5
|
+
const ethers_1 = require("ethers");
|
|
6
|
+
const viem_1 = require("viem");
|
|
7
|
+
const kit_1 = require("@solana/kit");
|
|
8
|
+
const tronweb_1 = require("tronweb");
|
|
5
9
|
const constants_1 = require("../../../constants");
|
|
6
10
|
const utils_1 = require("../../../utils");
|
|
7
11
|
const PositiveIntegerStringSS = (0, superstruct_1.pattern)((0, superstruct_1.string)(), /\d+/);
|
|
@@ -14,26 +18,40 @@ const BigNumberType = (0, superstruct_1.coerce)((0, superstruct_1.instance)(util
|
|
|
14
18
|
return value;
|
|
15
19
|
}
|
|
16
20
|
});
|
|
17
|
-
const AddressInstanceSS = (0, superstruct_1.union)([
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
+
const AddressInstanceSS = (0, superstruct_1.union)([
|
|
22
|
+
(0, superstruct_1.instance)(utils_1.EvmAddress),
|
|
23
|
+
(0, superstruct_1.instance)(utils_1.SvmAddress),
|
|
24
|
+
(0, superstruct_1.instance)(utils_1.TvmAddress),
|
|
25
|
+
(0, superstruct_1.instance)(utils_1.RawAddress),
|
|
26
|
+
]);
|
|
27
|
+
exports.AddressType = (0, superstruct_1.coerce)(AddressInstanceSS, (0, superstruct_1.string)(), (value) => {
|
|
28
|
+
try {
|
|
29
|
+
if (value.length === 42 && (0, viem_1.isAddress)(value, { strict: false }))
|
|
30
|
+
return utils_1.EvmAddress.from(value);
|
|
31
|
+
if (value.length === 34 && tronweb_1.TronWeb.isAddress(value))
|
|
32
|
+
return utils_1.TvmAddress.from(value);
|
|
33
|
+
if ((0, kit_1.isAddress)(value))
|
|
34
|
+
return utils_1.SvmAddress.from(value);
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
}
|
|
38
|
+
return new utils_1.RawAddress(value.startsWith("0x") ? ethers_1.utils.arrayify(value) : utils_1.bs58.decode(value));
|
|
21
39
|
});
|
|
22
40
|
const Web3AddressType = (0, superstruct_1.coerce)(Web3AddressSS, (0, superstruct_1.string)(), (value) => {
|
|
23
41
|
return (0, utils_1.toBytes32)(value);
|
|
24
42
|
});
|
|
25
43
|
const FillTypeSS = (0, superstruct_1.number)();
|
|
26
44
|
const V3RelayDataSS = {
|
|
27
|
-
inputToken: AddressType,
|
|
45
|
+
inputToken: exports.AddressType,
|
|
28
46
|
inputAmount: BigNumberType,
|
|
29
|
-
outputToken: AddressType,
|
|
47
|
+
outputToken: exports.AddressType,
|
|
30
48
|
outputAmount: BigNumberType,
|
|
31
49
|
fillDeadline: (0, superstruct_1.number)(),
|
|
32
|
-
exclusiveRelayer: AddressType,
|
|
50
|
+
exclusiveRelayer: exports.AddressType,
|
|
33
51
|
exclusivityDeadline: (0, superstruct_1.number)(),
|
|
34
52
|
originChainId: (0, superstruct_1.number)(),
|
|
35
|
-
depositor: AddressType,
|
|
36
|
-
recipient: AddressType,
|
|
53
|
+
depositor: exports.AddressType,
|
|
54
|
+
recipient: exports.AddressType,
|
|
37
55
|
depositId: BigNumberType,
|
|
38
56
|
message: (0, superstruct_1.string)(),
|
|
39
57
|
};
|
|
@@ -53,7 +71,7 @@ const V3DepositSS = {
|
|
|
53
71
|
quoteTimestamp: (0, superstruct_1.number)(),
|
|
54
72
|
relayerFeePct: (0, superstruct_1.optional)(BigNumberType),
|
|
55
73
|
speedUpSignature: (0, superstruct_1.optional)((0, superstruct_1.string)()),
|
|
56
|
-
updatedRecipient: (0, superstruct_1.optional)(AddressType),
|
|
74
|
+
updatedRecipient: (0, superstruct_1.optional)(exports.AddressType),
|
|
57
75
|
updatedOutputAmount: (0, superstruct_1.optional)(BigNumberType),
|
|
58
76
|
updatedMessage: (0, superstruct_1.optional)((0, superstruct_1.string)()),
|
|
59
77
|
};
|
|
@@ -71,7 +89,7 @@ const V3DepositWithBlockLpFeeSS = (0, superstruct_1.object)({
|
|
|
71
89
|
const V3RelayExecutionEventInfoSS = (0, superstruct_1.object)({
|
|
72
90
|
updatedOutputAmount: BigNumberType,
|
|
73
91
|
fillType: FillTypeSS,
|
|
74
|
-
updatedRecipient: AddressType,
|
|
92
|
+
updatedRecipient: exports.AddressType,
|
|
75
93
|
updatedMessage: (0, superstruct_1.optional)((0, superstruct_1.string)()),
|
|
76
94
|
updatedMessageHash: (0, superstruct_1.defaulted)((0, superstruct_1.string)(), constants_1.UNDEFINED_MESSAGE_HASH),
|
|
77
95
|
});
|
|
@@ -80,7 +98,7 @@ const V3FillSS = {
|
|
|
80
98
|
message: (0, superstruct_1.optional)((0, superstruct_1.string)()),
|
|
81
99
|
messageHash: (0, superstruct_1.defaulted)((0, superstruct_1.string)(), constants_1.UNDEFINED_MESSAGE_HASH),
|
|
82
100
|
destinationChainId: (0, superstruct_1.number)(),
|
|
83
|
-
relayer: AddressType,
|
|
101
|
+
relayer: exports.AddressType,
|
|
84
102
|
repaymentChainId: (0, superstruct_1.number)(),
|
|
85
103
|
relayExecutionInfo: V3RelayExecutionEventInfoSS,
|
|
86
104
|
quoteTimestamp: (0, superstruct_1.number)(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SuperstructUtils.js","sourceRoot":"","sources":["../../../../../../src/clients/BundleDataClient/utils/SuperstructUtils.ts"],"names":[],"mappings":";;;AAAA,6CAeqB;AACrB,
|
|
1
|
+
{"version":3,"file":"SuperstructUtils.js","sourceRoot":"","sources":["../../../../../../src/clients/BundleDataClient/utils/SuperstructUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,30 +2,16 @@ import { JWKInterface } from "arweave/node/lib/wallet";
|
|
|
2
2
|
import { Struct } from "superstruct";
|
|
3
3
|
import winston from "winston";
|
|
4
4
|
import { BigNumber } from "../../utils";
|
|
5
|
-
export interface ArweaveGatewayConfig {
|
|
6
|
-
host: string;
|
|
7
|
-
protocol?: string;
|
|
8
|
-
port?: number;
|
|
9
|
-
}
|
|
10
|
-
export declare const DEFAULT_ARWEAVE_GATEWAYS: ArweaveGatewayConfig[];
|
|
11
5
|
export declare class ArweaveClient {
|
|
12
6
|
private arweaveJWT;
|
|
13
7
|
private logger;
|
|
8
|
+
gatewayURL: string;
|
|
9
|
+
protocol: string;
|
|
14
10
|
private readonly retries;
|
|
15
11
|
private readonly retryDelaySeconds;
|
|
16
|
-
private
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
* Races a request across all gateways, returning the first successful response.
|
|
20
|
-
* If all gateways fail, throws an error with details from each gateway.
|
|
21
|
-
*/
|
|
22
|
-
private _raceGateways;
|
|
23
|
-
/**
|
|
24
|
-
* Tries gateways sequentially, returning the first successful response.
|
|
25
|
-
* Used for write operations where we want exactly one successful submission.
|
|
26
|
-
*/
|
|
27
|
-
private _failoverGateways;
|
|
28
|
-
private _retryRequest;
|
|
12
|
+
private client;
|
|
13
|
+
private gatewayUrl;
|
|
14
|
+
constructor(arweaveJWT: JWKInterface, logger: winston.Logger, gatewayURL?: string, protocol?: string, port?: number, retries?: number, retryDelaySeconds?: number);
|
|
29
15
|
/**
|
|
30
16
|
* Stores an arbitrary record in the Arweave network. The record is stored as a JSON string and uses
|
|
31
17
|
* JSON.stringify to convert the record to a string. The record has all of its big numbers converted
|
|
@@ -33,6 +19,7 @@ export declare class ArweaveClient {
|
|
|
33
19
|
* @param value The value to store
|
|
34
20
|
* @param topicTag An optional topic tag to add to the transaction
|
|
35
21
|
* @returns The transaction ID of the stored value
|
|
22
|
+
* @
|
|
36
23
|
*/
|
|
37
24
|
set(value: Record<string, unknown>, topicTag?: string | undefined): Promise<string | undefined>;
|
|
38
25
|
/**
|
|
@@ -66,11 +53,11 @@ export declare class ArweaveClient {
|
|
|
66
53
|
*/
|
|
67
54
|
getMetadata(transactionID: string): Promise<Record<string, string> | null>;
|
|
68
55
|
/**
|
|
69
|
-
* Returns the address of the signer of the JWT
|
|
70
|
-
* operation and does not require a network call.
|
|
56
|
+
* Returns the address of the signer of the JWT
|
|
71
57
|
* @returns The address of the signer in this client
|
|
72
58
|
*/
|
|
73
59
|
getAddress(): Promise<string>;
|
|
60
|
+
private _retryRequest;
|
|
74
61
|
/**
|
|
75
62
|
* The balance of the signer
|
|
76
63
|
* @returns The balance of the signer in winston units
|
|
@@ -2,94 +2,40 @@ import Arweave from "arweave";
|
|
|
2
2
|
import { create } from "superstruct";
|
|
3
3
|
import { ARWEAVE_TAG_APP_NAME, ARWEAVE_TAG_APP_VERSION, DEFAULT_ARWEAVE_STORAGE_ADDRESS } from "../../constants";
|
|
4
4
|
import { BigNumber, delay, fetchWithTimeout, isDefined, jsonReplacerWithBigNumbers, toBN } from "../../utils";
|
|
5
|
-
export const DEFAULT_ARWEAVE_GATEWAYS = [{ host: "arweave.net" }, { host: "ar-io.net" }];
|
|
6
5
|
export class ArweaveClient {
|
|
7
6
|
arweaveJWT;
|
|
8
7
|
logger;
|
|
8
|
+
gatewayURL;
|
|
9
|
+
protocol;
|
|
9
10
|
retries;
|
|
10
11
|
retryDelaySeconds;
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
client;
|
|
13
|
+
gatewayUrl;
|
|
14
|
+
constructor(arweaveJWT, logger, gatewayURL = "arweave.net", protocol = "https", port = 443, retries = 2, retryDelaySeconds = 1) {
|
|
13
15
|
this.arweaveJWT = arweaveJWT;
|
|
14
16
|
this.logger = logger;
|
|
17
|
+
this.gatewayURL = gatewayURL;
|
|
18
|
+
this.protocol = protocol;
|
|
15
19
|
this.retries = retries;
|
|
16
20
|
this.retryDelaySeconds = retryDelaySeconds;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
this.gateways = gateways.map(({ host, protocol = "https", port = 443 }) => ({
|
|
27
|
-
client: new Arweave({ host, port, protocol, timeout: 20000, logging: false }),
|
|
28
|
-
url: `${protocol}://${host}:${port}`,
|
|
29
|
-
}));
|
|
21
|
+
this.gatewayUrl = `${protocol}://${gatewayURL}:${port}`;
|
|
22
|
+
this.client = new Arweave({
|
|
23
|
+
host: gatewayURL,
|
|
24
|
+
port,
|
|
25
|
+
protocol,
|
|
26
|
+
timeout: 20000,
|
|
27
|
+
logging: false,
|
|
28
|
+
});
|
|
30
29
|
this.logger.debug({
|
|
31
30
|
at: "ArweaveClient:constructor",
|
|
32
31
|
message: "Arweave client initialized",
|
|
33
|
-
|
|
32
|
+
gateway: this.gatewayUrl,
|
|
34
33
|
});
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
* Races a request across all gateways, returning the first successful response.
|
|
38
|
-
* If all gateways fail, throws an error with details from each gateway.
|
|
39
|
-
*/
|
|
40
|
-
async _raceGateways(label, fn) {
|
|
41
|
-
try {
|
|
42
|
-
return await Promise.any(this.gateways.map((gw) => this._retryRequest(() => fn(gw), 0)));
|
|
43
|
-
}
|
|
44
|
-
catch (e) {
|
|
45
|
-
if (e instanceof AggregateError) {
|
|
46
|
-
const details = this.gateways.map((gw, i) => `${gw.url}: ${e.errors[i]}`).join("; ");
|
|
47
|
-
throw new Error(`All Arweave gateways failed for ${label}: ${details}`);
|
|
48
|
-
}
|
|
49
|
-
throw e;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Tries gateways sequentially, returning the first successful response.
|
|
54
|
-
* Used for write operations where we want exactly one successful submission.
|
|
55
|
-
*/
|
|
56
|
-
async _failoverGateways(label, fn) {
|
|
57
|
-
const errors = [];
|
|
58
|
-
for (const gw of this.gateways) {
|
|
59
|
-
try {
|
|
60
|
-
return await this._retryRequest(() => fn(gw), 0);
|
|
61
|
-
}
|
|
62
|
-
catch (e) {
|
|
63
|
-
errors.push(e);
|
|
64
|
-
this.logger.debug({
|
|
65
|
-
at: "ArweaveClient:failoverGateways",
|
|
66
|
-
message: `Gateway ${gw.url} failed for ${label}, trying next: ${e}`,
|
|
67
|
-
});
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
const details = this.gateways.map((gw, i) => `${gw.url}: ${errors[i]}`).join("; ");
|
|
71
|
-
throw new Error(`All Arweave gateways failed for ${label}: ${details}`);
|
|
72
|
-
}
|
|
73
|
-
async _retryRequest(request, retryCount) {
|
|
74
|
-
try {
|
|
75
|
-
return await request();
|
|
34
|
+
if (this.retries < 0) {
|
|
35
|
+
throw new Error(`retries cannot be < 0 and must be an integer. Currently set to ${this.retries}`);
|
|
76
36
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
// Implement a slightly aggressive exponential backoff to account for fierce parallelism.
|
|
80
|
-
const baseDelay = this.retryDelaySeconds * Math.pow(2, retryCount);
|
|
81
|
-
const delayS = baseDelay + baseDelay * Math.random();
|
|
82
|
-
this.logger.debug({
|
|
83
|
-
at: "ArweaveClient:retryRequest",
|
|
84
|
-
message: `Arweave request failed, retrying after waiting ${delayS} seconds: ${e}`,
|
|
85
|
-
retryCount,
|
|
86
|
-
});
|
|
87
|
-
await delay(delayS);
|
|
88
|
-
return this._retryRequest(request, retryCount + 1);
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
throw e;
|
|
92
|
-
}
|
|
37
|
+
if (this.retryDelaySeconds < 0) {
|
|
38
|
+
throw new Error(`delay cannot be < 0. Currently set to ${this.retryDelaySeconds}`);
|
|
93
39
|
}
|
|
94
40
|
}
|
|
95
41
|
/**
|
|
@@ -99,40 +45,41 @@ export class ArweaveClient {
|
|
|
99
45
|
* @param value The value to store
|
|
100
46
|
* @param topicTag An optional topic tag to add to the transaction
|
|
101
47
|
* @returns The transaction ID of the stored value
|
|
48
|
+
* @
|
|
102
49
|
*/
|
|
103
50
|
async set(value, topicTag) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
51
|
+
const transaction = await this.client.createTransaction({ data: JSON.stringify(value, jsonReplacerWithBigNumbers) }, this.arweaveJWT);
|
|
52
|
+
// Add tags to the transaction
|
|
53
|
+
transaction.addTag("Content-Type", "application/json");
|
|
54
|
+
transaction.addTag("App-Name", ARWEAVE_TAG_APP_NAME);
|
|
55
|
+
transaction.addTag("App-Version", ARWEAVE_TAG_APP_VERSION.toString());
|
|
56
|
+
if (isDefined(topicTag)) {
|
|
57
|
+
transaction.addTag("Topic", topicTag);
|
|
58
|
+
}
|
|
59
|
+
// Sign the transaction
|
|
60
|
+
await this.client.transactions.sign(transaction, this.arweaveJWT);
|
|
61
|
+
// Send the transaction
|
|
62
|
+
const result = await this.client.transactions.post(transaction);
|
|
63
|
+
// Ensure that the result is successful
|
|
64
|
+
if (result.status !== 200) {
|
|
65
|
+
const message = result?.data?.error?.msg ?? "Unknown error";
|
|
66
|
+
this.logger.error({
|
|
67
|
+
at: "ArweaveClient:set",
|
|
68
|
+
message,
|
|
69
|
+
result,
|
|
70
|
+
txn: transaction.id,
|
|
71
|
+
address: await this.getAddress(),
|
|
72
|
+
balance: (await this.getBalance()).toString(),
|
|
73
|
+
});
|
|
74
|
+
throw new Error(message);
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
130
77
|
this.logger.debug({
|
|
131
78
|
at: "ArweaveClient:set",
|
|
132
79
|
message: `Arweave transaction posted with ${transaction.id}`,
|
|
133
80
|
});
|
|
134
|
-
|
|
135
|
-
|
|
81
|
+
}
|
|
82
|
+
return transaction.id;
|
|
136
83
|
}
|
|
137
84
|
/**
|
|
138
85
|
* Retrieves a record from the Arweave network. The record is expected to be a JSON string and is
|
|
@@ -142,12 +89,15 @@ export class ArweaveClient {
|
|
|
142
89
|
* @returns The record if it exists, otherwise null
|
|
143
90
|
*/
|
|
144
91
|
async get(transactionID, validator) {
|
|
145
|
-
//
|
|
92
|
+
// Resolve the URL of the transaction
|
|
93
|
+
const transactionUrl = `${this.gatewayUrl}/${transactionID}`;
|
|
94
|
+
// We should query in via Axios directly to the gateway URL. The reasoning behind this is
|
|
146
95
|
// that the Arweave SDK's `getData` method is too slow and does not provide a way to set a timeout.
|
|
147
96
|
// Therefore, something that could take milliseconds to complete could take tens of minutes.
|
|
148
|
-
const
|
|
149
|
-
return await fetchWithTimeout(
|
|
150
|
-
}
|
|
97
|
+
const request = async () => {
|
|
98
|
+
return await fetchWithTimeout(transactionUrl, {}, {}, 20_000);
|
|
99
|
+
};
|
|
100
|
+
const data = await this._retryRequest(request, 0);
|
|
151
101
|
try {
|
|
152
102
|
// We should validate the data and perform any logical coercion here.
|
|
153
103
|
return create(data, validator);
|
|
@@ -186,13 +136,13 @@ export class ArweaveClient {
|
|
|
186
136
|
]
|
|
187
137
|
) { edges { node { id } } }
|
|
188
138
|
}`;
|
|
189
|
-
const response = await this.
|
|
190
|
-
const response = await client.api.post("/graphql", { query });
|
|
139
|
+
const response = await this._retryRequest(async () => {
|
|
140
|
+
const response = await this.client.api.post("/graphql", { query });
|
|
191
141
|
if (!response.ok) {
|
|
192
142
|
throw new Error(`Arweave GraphQL request failed with status ${response.status}`);
|
|
193
143
|
}
|
|
194
144
|
return response;
|
|
195
|
-
});
|
|
145
|
+
}, 0);
|
|
196
146
|
const entries = response?.data?.data?.transactions?.edges ?? [];
|
|
197
147
|
this.logger.debug({
|
|
198
148
|
at: "ArweaveClient:getByTopic",
|
|
@@ -230,9 +180,7 @@ export class ArweaveClient {
|
|
|
230
180
|
* @returns The metadata of the transaction if it exists, otherwise null
|
|
231
181
|
*/
|
|
232
182
|
async getMetadata(transactionID) {
|
|
233
|
-
const transaction = await this.
|
|
234
|
-
return await client.transactions.get(transactionID);
|
|
235
|
-
});
|
|
183
|
+
const transaction = await this.client.transactions.get(transactionID);
|
|
236
184
|
if (!isDefined(transaction)) {
|
|
237
185
|
return null;
|
|
238
186
|
}
|
|
@@ -247,12 +195,33 @@ export class ArweaveClient {
|
|
|
247
195
|
};
|
|
248
196
|
}
|
|
249
197
|
/**
|
|
250
|
-
* Returns the address of the signer of the JWT
|
|
251
|
-
* operation and does not require a network call.
|
|
198
|
+
* Returns the address of the signer of the JWT
|
|
252
199
|
* @returns The address of the signer in this client
|
|
253
200
|
*/
|
|
254
201
|
getAddress() {
|
|
255
|
-
return this.
|
|
202
|
+
return this.client.wallets.jwkToAddress(this.arweaveJWT);
|
|
203
|
+
}
|
|
204
|
+
async _retryRequest(request, retryCount) {
|
|
205
|
+
try {
|
|
206
|
+
return await request();
|
|
207
|
+
}
|
|
208
|
+
catch (e) {
|
|
209
|
+
if (retryCount < this.retries) {
|
|
210
|
+
// Implement a slightly aggressive exponential backoff to account for fierce parallelism.
|
|
211
|
+
const baseDelay = this.retryDelaySeconds * Math.pow(2, retryCount); // ms; attempt = [0, 1, 2, ...]
|
|
212
|
+
const delayS = baseDelay + baseDelay * Math.random();
|
|
213
|
+
this.logger.debug({
|
|
214
|
+
at: "ArweaveClient:retryRequest",
|
|
215
|
+
message: `Arweave request failed, retrying after waiting ${delayS} seconds: ${e}`,
|
|
216
|
+
retryCount,
|
|
217
|
+
});
|
|
218
|
+
await delay(delayS);
|
|
219
|
+
return this._retryRequest(request, retryCount + 1);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
throw e;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
256
225
|
}
|
|
257
226
|
/**
|
|
258
227
|
* The balance of the signer
|
|
@@ -260,9 +229,9 @@ export class ArweaveClient {
|
|
|
260
229
|
*/
|
|
261
230
|
async getBalance() {
|
|
262
231
|
const address = await this.getAddress();
|
|
263
|
-
|
|
264
|
-
const balanceInFloat = await client.wallets.getBalance(address);
|
|
265
|
-
// @dev The reason we add in the BN.from
|
|
232
|
+
const request = async () => {
|
|
233
|
+
const balanceInFloat = await this.client.wallets.getBalance(address);
|
|
234
|
+
// @dev The reason we add in the BN.from into this retry loop is because the client.getBalance call
|
|
266
235
|
// does not correctly throw an error if the request fails, instead it will return the error string as the
|
|
267
236
|
// balanceInFloat.
|
|
268
237
|
// Sometimes the balance is returned in scientific notation, so we need to
|
|
@@ -275,7 +244,8 @@ export class ArweaveClient {
|
|
|
275
244
|
else {
|
|
276
245
|
return BigNumber.from(balanceInFloat);
|
|
277
246
|
}
|
|
278
|
-
}
|
|
247
|
+
};
|
|
248
|
+
return await this._retryRequest(request, 0);
|
|
279
249
|
}
|
|
280
250
|
}
|
|
281
251
|
//# sourceMappingURL=ArweaveClient.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArweaveClient.js","sourceRoot":"","sources":["../../../../../src/caching/Arweave/ArweaveClient.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAU,MAAM,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,0BAA0B,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ArweaveClient.js","sourceRoot":"","sources":["../../../../../src/caching/Arweave/ArweaveClient.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAG9B,OAAO,EAAU,MAAM,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AACjH,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,0BAA0B,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE9G,MAAM,OAAO,aAAa;IAKd;IACA;IACD;IACA;IAEU;IACA;IAVX,MAAM,CAAU;IAChB,UAAU,CAAS;IAE3B,YACU,UAAwB,EACxB,MAAsB,EACvB,aAAa,aAAa,EAC1B,WAAW,OAAO,EACzB,IAAI,GAAG,GAAG,EACO,UAAU,CAAC,EACX,oBAAoB,CAAC;QAN9B,eAAU,GAAV,UAAU,CAAc;QACxB,WAAM,GAAN,MAAM,CAAgB;QACvB,eAAU,GAAV,UAAU,CAAgB;QAC1B,aAAQ,GAAR,QAAQ,CAAU;QAER,YAAO,GAAP,OAAO,CAAI;QACX,sBAAiB,GAAjB,iBAAiB,CAAI;QAEtC,IAAI,CAAC,UAAU,GAAG,GAAG,QAAQ,MAAM,UAAU,IAAI,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,CAAC;YACxB,IAAI,EAAE,UAAU;YAChB,IAAI;YACJ,QAAQ;YACR,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChB,EAAE,EAAE,2BAA2B;YAC/B,OAAO,EAAE,4BAA4B;YACrC,OAAO,EAAE,IAAI,CAAC,UAAU;SACzB,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,kEAAkE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,CAAC,iBAAiB,EAAE,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,GAAG,CAAC,KAA8B,EAAE,QAA6B;QACrE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CACrD,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,0BAA0B,CAAC,EAAE,EAC3D,IAAI,CAAC,UAAU,CAChB,CAAC;QAEF,8BAA8B;QAC9B,WAAW,CAAC,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC;QACvD,WAAW,CAAC,MAAM,CAAC,UAAU,EAAE,oBAAoB,CAAC,CAAC;QACrD,WAAW,CAAC,MAAM,CAAC,aAAa,EAAE,uBAAuB,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtE,IAAI,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;YACxB,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,uBAAuB;QACvB,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAClE,uBAAuB;QACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAEhE,uCAAuC;QACvC,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC1B,MAAM,OAAO,GAAG,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,eAAe,CAAC;YAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChB,EAAE,EAAE,mBAAmB;gBACvB,OAAO;gBACP,MAAM;gBACN,GAAG,EAAE,WAAW,CAAC,EAAE;gBACnB,OAAO,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE;gBAChC,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,QAAQ,EAAE;aAC9C,CAAC,CAAC;YACH,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;gBAChB,EAAE,EAAE,mBAAmB;gBACvB,OAAO,EAAE,mCAAmC,WAAW,CAAC,EAAE,EAAE;aAC7D,CAAC,CAAC;QACL,CAAC;QACD,OAAO,WAAW,CAAC,EAAE,CAAC;IACxB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,GAAG,CAAI,aAAqB,EAAE,SAAoB;QACtD,qCAAqC;QACrC,MAAM,cAAc,GAAG,GAAG,IAAI,CAAC,UAAU,IAAI,aAAa,EAAE,CAAC;QAC7D,yFAAyF;QACzF,mGAAmG;QACnG,4FAA4F;QAC5F,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,OAAO,MAAM,gBAAgB,CAAC,cAAc,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;QAChE,CAAC,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,qEAAqE;YACrE,OAAO,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QACjC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,2EAA2E;YAC3E,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,EAAE,EAAE,mBAAmB;gBACvB,OAAO,EAAE,kEAAkE,CAAC,EAAE;aAC/E,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,UAAU,CACd,GAAW,EACX,SAAoB,EACpB,kBAAkB,GAAG,+BAA+B;QAEpD,MAAM,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,8BAA8B,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,KAAK,GAAG;;oBAEE,kBAAkB;;0CAEI,oBAAoB;;6CAEjB,uBAAuB;YACxD,WAAW;;;MAGjB,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,IAAI,EAAE;YACnD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAExC,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;YAC1B,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACnF,CAAC;YACD,OAAO,QAAQ,CAAC;QAClB,CAAC,EAAE,CAAC,CAAC,CAAC;QAEN,MAAM,OAAO,GAAG,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,IAAI,EAAE,CAAC;QAChE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YAChB,EAAE,EAAE,0BAA0B;YAC9B,OAAO,EAAE,aAAa,OAAO,CAAC,MAAM,qCAAqC;YACzE,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,eAAe,EAAE;gBACf,GAAG;gBACH,kBAAkB;gBAClB,UAAU,EAAE,uBAAuB;aACpC;SACF,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;gBACxD,OAAO,SAAS,CAAC,IAAI,CAAC;oBACpB,CAAC,CAAC;wBACE,IAAI;wBACJ,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;qBACnB;oBACH,CAAC,CAAC,IAAI,CAAC;YACX,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACf,EAAE,EAAE,0BAA0B;oBAC9B,OAAO,EAAE,iCAAiC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,EAAE;iBAC/D,CAAC,CAAC;gBACH,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QACF,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,WAAW,CAAC,aAAqB;QACrC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAC7B,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;YAC5B,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;YAC/C,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;SACjD,CAAC,CACH,CAAC;QACF,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,cAAc,CAAC;YACjC,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC;YACzB,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;IAED;;;OAGG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC3D,CAAC;IAEO,KAAK,CAAC,aAAa,CAAI,OAAyB,EAAE,UAAkB;QAC1E,IAAI,CAAC;YACH,OAAO,MAAM,OAAO,EAAE,CAAC;QACzB,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC9B,yFAAyF;gBACzF,MAAM,SAAS,GAAG,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,+BAA+B;gBACnG,MAAM,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;gBACrD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;oBAChB,EAAE,EAAE,4BAA4B;oBAChC,OAAO,EAAE,kDAAkD,MAAM,aAAa,CAAC,EAAE;oBACjF,UAAU;iBACX,CAAC,CAAC;gBACH,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC;gBACpB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YACrD,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,CAAC;YACV,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU;QACd,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACxC,MAAM,OAAO,GAAG,KAAK,IAAI,EAAE;YACzB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACrE,mGAAmG;YACnG,yGAAyG;YACzG,kBAAkB;YAClB,0EAA0E;YAC1E,4BAA4B;YAC5B,IAAI,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACtD,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzF,OAAO,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACN,OAAO,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YACxC,CAAC;QACH,CAAC,CAAC;QACF,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF"}
|