@nosana/kit
Version:
Nosana KIT
130 lines (129 loc) • 4.1 kB
TypeScript
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;
}