@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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nosana/node",
3
- "version": "1.1.27",
3
+ "version": "1.1.28-rc",
4
4
  "description": "",
5
5
  "bin": {
6
6
  "nosana-node": "./dist/src/index.js"
@@ -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)) {
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@nosana/node",
3
- "version": "1.1.27",
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.27",
9
+ "version": "1.1.28-rc",
10
10
  "license": "ISC",
11
11
  "dependencies": {
12
12
  "@coral-xyz/anchor": "^0.28.1-beta.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nosana/node",
3
- "version": "1.1.27",
3
+ "version": "1.1.28-rc",
4
4
  "description": "",
5
5
  "bin": {
6
6
  "nosana-node": "./dist/src/index.js"