Skip to content

Quick Start ​

Get started with Nosana Kit in minutes.

TIP

This guide assumes you have a basic understanding of TypeScript and Solana. If you're new to Solana, check out the Solana documentation first.

Installation ​

bash
npm install @nosana/kit

Basic Usage ​

ts
import { 
function createNosanaClient(network: NosanaNetwork | undefined, customConfig: PartialClientConfig & {
    connect: ConnectFactoryConfig & {
        clientSecret: string;
    };
}): NosanaClient & {
    connect: ServerConnect;
} (+3 overloads)
createNosanaClient
,
type NosanaNetwork = "mainnet" | "devnet" | "localnet"
const NosanaNetwork: {
    readonly MAINNET: "mainnet";
    readonly DEVNET: "devnet";
    readonly LOCALNET: "localnet";
}
NosanaNetwork
, function address<TAddress extends string = string>(putativeAddress: TAddress): Address<TAddress>
Combines _asserting_ that a string is an address with _coercing_ it to the {@link Address } type. It's most useful with untrusted input.
@example```ts import { address } from '@solana/addresses'; await transfer(address(fromAddress), address(toAddress), lamports(100000n)); ``` > [!TIP] > When starting from a known-good address as a string, it's more efficient to typecast it rather than to use the {@link address} helper, because the helper unconditionally performs validation on its input. > > ```ts > import { Address } from '@solana/addresses'; > > const MEMO_PROGRAM_ADDRESS = > 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr' as Address<'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'>; > ```
address
} from '@nosana/kit';
import type {
type Job = Omit<ConvertTypesForDb<JobAccountArgs>, "state"> & {
    address: Address;
    state: JobState;
}
Job
, NosanaClient } from '@nosana/kit';
// Initialize with mainnet defaults const const client: NosanaClientclient = function createNosanaClient(network?: NosanaNetwork, customConfig?: PartialClientConfig): NosanaClient (+3 overloads)createNosanaClient(); // Or specify network and configuration const const client2: NosanaClientclient2: NosanaClient = function createNosanaClient(network?: NosanaNetwork, customConfig?: PartialClientConfig): NosanaClient (+3 overloads)createNosanaClient(
const NosanaNetwork: {
    readonly MAINNET: "mainnet";
    readonly DEVNET: "devnet";
    readonly LOCALNET: "localnet";
}
NosanaNetwork
.type DEVNET: "devnet"DEVNET, {
PartialClientConfig.solana?: Partial<SolanaConfig> | undefinedsolana: { rpcEndpoint?: string | undefinedrpcEndpoint: 'https://your-custom-rpc.com', }, }); // Fetch a job by address const const job: Jobjob:
type Job = Omit<ConvertTypesForDb<JobAccountArgs>, "state"> & {
    address: Address;
    state: JobState;
}
Job
= await const client: NosanaClientclient.NosanaClient.jobs: JobsProgramjobs.JobsProgram.get(addr: Address, checkRun?: boolean): Promise<Job>
Fetch a job account by address
get
('job-address' as any);
var console: Console
The `console` module provides a simple debugging console that is similar to the JavaScript console mechanism provided by web browsers. The module exports two specific components: * A `Console` class with methods such as `console.log()`, `console.error()` and `console.warn()` that can be used to write to any Node.js stream. * A global `console` instance configured to write to [`process.stdout`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstdout) and [`process.stderr`](https://nodejs.org/docs/latest-v24.x/api/process.html#processstderr). The global `console` can be used without importing the `node:console` module. _**Warning**_: The global console object's methods are neither consistently synchronous like the browser APIs they resemble, nor are they consistently asynchronous like all other Node.js streams. See the [`note on process I/O`](https://nodejs.org/docs/latest-v24.x/api/process.html#a-note-on-process-io) for more information. Example using the global `console`: ```js console.log('hello world'); // Prints: hello world, to stdout console.log('hello %s', 'world'); // Prints: hello world, to stdout console.error(new Error('Whoops, something bad happened')); // Prints error message and stack trace to stderr: // Error: Whoops, something bad happened // at [eval]:5:15 // at Script.runInThisContext (node:vm:132:18) // at Object.runInThisContext (node:vm:309:38) // at node:internal/process/execution:77:19 // at [eval]-wrapper:6:22 // at evalScript (node:internal/process/execution:76:60) // at node:internal/main/eval_string:23:3 const name = 'Will Robinson'; console.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to stderr ``` Example using the `Console` class: ```js const out = getStreamSomehow(); const err = getStreamSomehow(); const myConsole = new console.Console(out, err); myConsole.log('hello world'); // Prints: hello world, to out myConsole.log('hello %s', 'world'); // Prints: hello world, to out myConsole.error(new Error('Whoops, something bad happened')); // Prints: [Error: Whoops, something bad happened], to err const name = 'Will Robinson'; myConsole.warn(`Danger ${name}! Danger!`); // Prints: Danger Will Robinson! Danger!, to err ```
@see[source](https://github.com/nodejs/node/blob/v24.x/lib/console.js)
console
.Console.log(message?: any, ...optionalParams: any[]): void (+1 overload)
Prints to `stdout` with newline. Multiple arguments can be passed, with the first used as the primary message and all additional used as substitution values similar to [`printf(3)`](http://man7.org/linux/man-pages/man3/printf.3.html) (the arguments are all passed to [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args)). ```js const count = 5; console.log('count: %d', count); // Prints: count: 5, to stdout console.log('count:', count); // Prints: count: 5, to stdout ``` See [`util.format()`](https://nodejs.org/docs/latest-v24.x/api/util.html#utilformatformat-args) for more information.
@sincev0.1.100
log
('Job state:', const job: Jobjob.state: JobStatestate);
// Query jobs with filters import { enum JobStateJobState } from '@nosana/kit'; const const completedJobs: Job[]completedJobs:
type Job = Omit<ConvertTypesForDb<JobAccountArgs>, "state"> & {
    address: Address;
    state: JobState;
}
Job
[] = await const client: NosanaClientclient.NosanaClient.jobs: JobsProgramjobs.
JobsProgram.all(filters?: {
    state?: JobState;
    market?: Address;
    node?: Address;
    project?: Address;
}, checkRuns?: boolean): Promise<Job[]>
Fetch all job accounts
all
({
market?: Address | undefinedmarket: address<"market-address">(putativeAddress: "market-address"): Address<"market-address">
Combines _asserting_ that a string is an address with _coercing_ it to the {@link Address } type. It's most useful with untrusted input.
@example```ts import { address } from '@solana/addresses'; await transfer(address(fromAddress), address(toAddress), lamports(100000n)); ``` > [!TIP] > When starting from a known-good address as a string, it's more efficient to typecast it rather than to use the {@link address} helper, because the helper unconditionally performs validation on its input. > > ```ts > import { Address } from '@solana/addresses'; > > const MEMO_PROGRAM_ADDRESS = > 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr' as Address<'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr'>; > ```
address
('market-address'),
state?: JobState | undefinedstate: enum JobStateJobState.function (enum member) JobState.COMPLETED = 2COMPLETED, });

INFO

The client object is typed as NosanaClient, which provides full TypeScript autocomplete and type checking for all available methods and properties.

Next Steps ​