Skip to content

IPFS Service ​

The IPFS service provides methods to pin data to IPFS and retrieve data from IPFS. It's configured via the ipfs property in the client configuration.

Configuration ​

ts
const client = createNosanaClient(NosanaNetwork.MAINNET, {
  ipfs: {
    api: 'https://api.pinata.cloud',
    jwt: 'your-pinata-jwt-token',
    gateway: 'https://gateway.pinata.cloud/ipfs/',
  },
});

Methods ​

Pin JSON Data ​

ts
pin(data: object): Promise<string>

Pin File ​

ts
pinFile(filePath: string): Promise<string>

Retrieve Data ​

ts
retrieve(hash: string | Uint8Array): Promise<any>

Examples ​

ts
// Pin job definition to IPFS
const const cid: stringcid: string = await const client: NosanaClientclient.NosanaClient.ipfs: NosanaIpfsClientipfs.pin: (data: object) => Promise<string>pin({
  version: stringversion: '0.1',
  type: stringtype: 'container',
  
meta: {
    trigger: string;
}
meta
: {
trigger: stringtrigger: 'cli', },
ops: {
    type: string;
    id: string;
    args: {
        cmd: string;
        image: string;
    };
}[]
ops
: [
{ type: stringtype: 'container/run', id: stringid: 'run-1',
args: {
    cmd: string;
    image: string;
}
args
: {
cmd: stringcmd: 'echo hello', image: stringimage: 'ubuntu:latest', }, }, ], }); 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
('Pinned to IPFS:', const cid: stringcid);
// Pin a file to IPFS const const fileCid: stringfileCid: string = await const client: NosanaClientclient.NosanaClient.ipfs: NosanaIpfsClientipfs.pinFile: (path: string) => Promise<string>pinFile('/path/to/file.txt'); // Retrieve job results from IPFS if (const job: Jobjob.ipfsResult: string | nullipfsResult) { const const results: anyresults: any = await const client: NosanaClientclient.NosanaClient.ipfs: NosanaIpfsClientipfs.retrieve: <unknown>(hash: string | Array<number>) => Promise<unknown>retrieve(const job: Jobjob.ipfsResult: stringipfsResult); 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 results:', const results: anyresults);
}

Utility Functions ​

The SDK also exports utility functions for converting between Solana hash formats and IPFS CIDs.

ts
import { function solBytesArrayToIpfsHash(hashArray: Array<number>): string
Convert the ipfs bytes from a solana job to a CID It prepends the 0x1220 (18,32) to make it 34 bytes and Base58 encodes it. This result is IPFS addressable.
solBytesArrayToIpfsHash
, function ipfsHashToSolBytesArray(hash: string): Array<number>
Converts IPFS hash to byte array needed to submit results
@paramhash IPFS hash@returnsArray<number>
ipfsHashToSolBytesArray
} from '@nosana/kit';
// Convert Solana hash bytes to IPFS CID const const solanaHashBytes: number[]solanaHashBytes: number[] = [1, 2, 3, 4, 5]; // Example bytes const const ipfsCid: stringipfsCid: string = function solBytesArrayToIpfsHash(hashArray: Array<number>): string
Convert the ipfs bytes from a solana job to a CID It prepends the 0x1220 (18,32) to make it 34 bytes and Base58 encodes it. This result is IPFS addressable.
solBytesArrayToIpfsHash
(const solanaHashBytes: number[]solanaHashBytes);
// Convert IPFS CID to Solana hash bytes const const solanaHash: number[]solanaHash: number[] = function ipfsHashToSolBytesArray(hash: string): Array<number>
Converts IPFS hash to byte array needed to submit results
@paramhash IPFS hash@returnsArray<number>
ipfsHashToSolBytesArray
(const ipfsCid: stringipfsCid);