@nosana/node 1.1.27 → 1.1.28-rc
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/package.json
CHANGED
|
@@ -15,7 +15,7 @@ export declare class MarketHandler {
|
|
|
15
15
|
clear(): void;
|
|
16
16
|
isInMarket(): boolean;
|
|
17
17
|
setInMarket(): void;
|
|
18
|
-
request(requestedMarket?: string, session?: string): Promise<Market>;
|
|
18
|
+
request(requestedMarket?: string, session?: string, benchmarkRetries?: number): Promise<Market>;
|
|
19
19
|
private logFeedbackReport;
|
|
20
20
|
private logLatestMeasurements;
|
|
21
21
|
check(market: string): Promise<Market>;
|
|
@@ -6,6 +6,8 @@ import { NodeBannedError } from "../../errors/NodeBannedError.js";
|
|
|
6
6
|
import { NodeNotQualifiedError } from "../../errors/NodeNotQualifiedError.js";
|
|
7
7
|
import { MarketAccessHandler } from "./marketAccess.js";
|
|
8
8
|
import { sleep } from "../../utils/utils.js";
|
|
9
|
+
const RETEST_BUFFER_S = 60;
|
|
10
|
+
const MAX_BENCHMARK_RETRIES = 3;
|
|
9
11
|
export class MarketHandler {
|
|
10
12
|
constructor(sdk, provider, repository) {
|
|
11
13
|
this.sdk = sdk;
|
|
@@ -24,7 +26,7 @@ export class MarketHandler {
|
|
|
24
26
|
setInMarket() {
|
|
25
27
|
this.inMarket = true;
|
|
26
28
|
}
|
|
27
|
-
async request(requestedMarket, session) {
|
|
29
|
+
async request(requestedMarket, session, benchmarkRetries = 0) {
|
|
28
30
|
const result = await HostManager.requestMarket(requestedMarket, session);
|
|
29
31
|
// Not registered - caller will handle registration and retry
|
|
30
32
|
if (result.notRegistered) {
|
|
@@ -40,7 +42,7 @@ export class MarketHandler {
|
|
|
40
42
|
await benchmark.run();
|
|
41
43
|
// Re-poll within the same request-market cycle, echoing the session the
|
|
42
44
|
// host issued so lifecycle metrics aren't re-requested on the retry.
|
|
43
|
-
return await this.request(requestedMarket, result.session ?? session);
|
|
45
|
+
return await this.request(requestedMarket, result.session ?? session, benchmarkRetries);
|
|
44
46
|
}
|
|
45
47
|
// Sign and send SFT mint/burn transaction if provided
|
|
46
48
|
if (result.market?.sftTx) {
|
|
@@ -53,6 +55,14 @@ export class MarketHandler {
|
|
|
53
55
|
this.logFeedbackReport(result.feedbackReport);
|
|
54
56
|
}
|
|
55
57
|
if (!result.market?.address) {
|
|
58
|
+
const nextTestAt = parseFutureDate(result.nextTestAt);
|
|
59
|
+
if (nextTestAt && benchmarkRetries < MAX_BENCHMARK_RETRIES) {
|
|
60
|
+
const waitSeconds = Math.ceil((nextTestAt.getTime() - Date.now()) / 1000) +
|
|
61
|
+
RETEST_BUFFER_S;
|
|
62
|
+
console.log(chalk.yellow(`Node does not qualify for a market yet. Next eligible retest at ${nextTestAt.toISOString()}, retrying in ~${Math.ceil(waitSeconds / 60)} minutes.`));
|
|
63
|
+
await sleep(waitSeconds);
|
|
64
|
+
return await this.request(requestedMarket, result.session ?? session, benchmarkRetries + 1);
|
|
65
|
+
}
|
|
56
66
|
throw new NodeNotQualifiedError(result.nextTestAt);
|
|
57
67
|
}
|
|
58
68
|
const onchainMarket = await this.sdk.jobs.getMarket(result.market.address);
|
|
@@ -263,6 +273,15 @@ export class MarketHandler {
|
|
|
263
273
|
this.clear();
|
|
264
274
|
}
|
|
265
275
|
}
|
|
276
|
+
function parseFutureDate(value) {
|
|
277
|
+
if (!value)
|
|
278
|
+
return undefined;
|
|
279
|
+
const date = new Date(value);
|
|
280
|
+
if (Number.isNaN(date.getTime()) || date.getTime() <= Date.now()) {
|
|
281
|
+
return undefined;
|
|
282
|
+
}
|
|
283
|
+
return date;
|
|
284
|
+
}
|
|
266
285
|
function flattenMetrics(obj, prefix = "") {
|
|
267
286
|
const result = [];
|
|
268
287
|
for (const [key, value] of Object.entries(obj)) {
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nosana/node",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.28-rc",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@nosana/node",
|
|
9
|
-
"version": "1.1.
|
|
9
|
+
"version": "1.1.28-rc",
|
|
10
10
|
"license": "ISC",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@coral-xyz/anchor": "^0.28.1-beta.1",
|