UNPKG

@nosana/kit

Version:

Nosana KIT

130 lines (129 loc) 4.1 kB
import { BaseProgram } from './BaseProgram.js'; import { Address, Account } from 'gill'; import { NosanaClient } from '../index.js'; import * as programClient from "../generated_clients/jobs/index.js"; import { ConvertTypesForDb } from '../utils/index.js'; export declare enum JobState { QUEUED = 0, RUNNING = 1, COMPLETED = 2, STOPPED = 3 } export declare enum MarketQueueType { JOB_QUEUE = 0, NODE_QUEUE = 1 } export type Job = Omit<ConvertTypesForDb<programClient.JobAccountArgs>, 'state'> & { address: Address; state: JobState; }; export type Market = Omit<ConvertTypesForDb<programClient.MarketAccountArgs>, 'queueType'> & { address: Address; queueType: MarketQueueType; }; export type Run = ConvertTypesForDb<programClient.RunAccountArgs> & { address: Address; }; export declare class JobsProgram extends BaseProgram { readonly client: typeof programClient; constructor(sdk: NosanaClient); protected getProgramId(): Address; /** * Fetch a job account by address */ get(addr: Address, checkRun?: boolean): Promise<Job>; /** * Fetch a run account by address */ run(addr: Address): Promise<Run>; /** * Fetch a run account by address */ market(addr: Address): Promise<Market>; /** * Fetch multiple job accounts by address */ multiple(addresses: Address[], checkRuns?: boolean): Promise<Job[]>; /** * Fetch all job accounts */ all(filters?: { state?: JobState; market?: Address; node?: Address; project?: Address; }, checkRuns?: boolean): Promise<Job[]>; /** * Fetch all run accounts */ runs(filters?: { node?: Address; job?: Address; }): Promise<Run[]>; /** * Fetch all market accounts */ markets(): Promise<Market[]>; /** * Post a new job to the marketplace * @param params Parameters for listing a job * @returns The transaction signature */ post(params: { market: Address; timeout: number | bigint; ipfsHash: string; node?: Address; }): Promise<ReturnType<typeof this.client.getListInstruction>>; /** * Monitor program account updates using callback functions * Uses WebSocket subscriptions with automatic restart on failure * * @example * ```typescript * // Example: Monitor job accounts and save to file * const stopMonitoring = await jobsProgram.monitor({ * onJobAccount: async (jobAccount) => { * console.log('Job updated:', jobAccount.address.toString()); * // Save to database, file, or process as needed * }, * onRunAccount: async (runAccount) => { * console.log('Run updated:', runAccount.address.toString()); * }, * onError: async (error, accountType) => { * console.error('Error processing account:', error, accountType); * } * }); * * // Stop monitoring when done * stopMonitoring(); * ``` * * @param options Configuration options for monitoring * @returns A function to stop monitoring */ monitor(options?: { onJobAccount?: (jobAccount: Job) => Promise<void> | void; onMarketAccount?: (marketAccount: Market) => Promise<void> | void; onRunAccount?: (runAccount: Run) => Promise<void> | void; onError?: (error: Error, accountType?: string) => Promise<void> | void; }): Promise<() => void>; /** * Set up WebSocket subscription for program notifications */ private setupSubscription; /** * Process subscription notifications */ private processSubscriptionNotifications; transformJobAccount(jobAccount: Account<programClient.JobAccount>): Job; transformRunAccount(runAccount: Account<programClient.RunAccount>): Run; transformMarketAccount(marketAccount: Account<programClient.MarketAccount>): Market; /** * Handle account update using callback functions */ private handleAccountUpdate; private handleJobAccount; private handleMarketAccount; private handleRunAccount; }