@nosana/kit 0.1.1

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.
Files changed (98) hide show
  1. package/.gitlab-ci.yml +21 -0
  2. package/README.md +159 -0
  3. package/dist/config/defaultConfigs.d.ts +2 -0
  4. package/dist/config/defaultConfigs.js +47 -0
  5. package/dist/config/index.d.ts +3 -0
  6. package/dist/config/index.js +19 -0
  7. package/dist/config/types.d.ts +43 -0
  8. package/dist/config/types.js +16 -0
  9. package/dist/config/utils.d.ts +3 -0
  10. package/dist/config/utils.js +35 -0
  11. package/dist/errors/NosanaError.d.ts +16 -0
  12. package/dist/errors/NosanaError.js +22 -0
  13. package/dist/generated_clients/jobs/accounts/index.d.ts +10 -0
  14. package/dist/generated_clients/jobs/accounts/index.js +26 -0
  15. package/dist/generated_clients/jobs/accounts/jobAccount.d.ts +47 -0
  16. package/dist/generated_clients/jobs/accounts/jobAccount.js +86 -0
  17. package/dist/generated_clients/jobs/accounts/marketAccount.d.ts +46 -0
  18. package/dist/generated_clients/jobs/accounts/marketAccount.js +82 -0
  19. package/dist/generated_clients/jobs/accounts/runAccount.d.ts +35 -0
  20. package/dist/generated_clients/jobs/accounts/runAccount.js +74 -0
  21. package/dist/generated_clients/jobs/errors/index.d.ts +8 -0
  22. package/dist/generated_clients/jobs/errors/index.js +24 -0
  23. package/dist/generated_clients/jobs/errors/nosanaJobs.d.ts +57 -0
  24. package/dist/generated_clients/jobs/errors/nosanaJobs.js +85 -0
  25. package/dist/generated_clients/jobs/index.d.ts +12 -0
  26. package/dist/generated_clients/jobs/index.js +28 -0
  27. package/dist/generated_clients/jobs/instructions/claim.d.ts +60 -0
  28. package/dist/generated_clients/jobs/instructions/claim.js +102 -0
  29. package/dist/generated_clients/jobs/instructions/clean.d.ts +42 -0
  30. package/dist/generated_clients/jobs/instructions/clean.js +79 -0
  31. package/dist/generated_clients/jobs/instructions/cleanAdmin.d.ts +42 -0
  32. package/dist/generated_clients/jobs/instructions/cleanAdmin.js +79 -0
  33. package/dist/generated_clients/jobs/instructions/close.d.ts +48 -0
  34. package/dist/generated_clients/jobs/instructions/close.js +90 -0
  35. package/dist/generated_clients/jobs/instructions/closeAdmin.d.ts +48 -0
  36. package/dist/generated_clients/jobs/instructions/closeAdmin.js +90 -0
  37. package/dist/generated_clients/jobs/instructions/complete.d.ts +43 -0
  38. package/dist/generated_clients/jobs/instructions/complete.js +82 -0
  39. package/dist/generated_clients/jobs/instructions/delist.d.ts +54 -0
  40. package/dist/generated_clients/jobs/instructions/delist.js +96 -0
  41. package/dist/generated_clients/jobs/instructions/end.d.ts +60 -0
  42. package/dist/generated_clients/jobs/instructions/end.js +102 -0
  43. package/dist/generated_clients/jobs/instructions/extend.d.ts +64 -0
  44. package/dist/generated_clients/jobs/instructions/extend.js +111 -0
  45. package/dist/generated_clients/jobs/instructions/finish.d.ts +67 -0
  46. package/dist/generated_clients/jobs/instructions/finish.js +111 -0
  47. package/dist/generated_clients/jobs/instructions/index.d.ts +25 -0
  48. package/dist/generated_clients/jobs/instructions/index.js +41 -0
  49. package/dist/generated_clients/jobs/instructions/list.d.ts +76 -0
  50. package/dist/generated_clients/jobs/instructions/list.js +126 -0
  51. package/dist/generated_clients/jobs/instructions/open.d.ts +73 -0
  52. package/dist/generated_clients/jobs/instructions/open.js +121 -0
  53. package/dist/generated_clients/jobs/instructions/quit.d.ts +45 -0
  54. package/dist/generated_clients/jobs/instructions/quit.js +82 -0
  55. package/dist/generated_clients/jobs/instructions/quitAdmin.d.ts +42 -0
  56. package/dist/generated_clients/jobs/instructions/quitAdmin.js +79 -0
  57. package/dist/generated_clients/jobs/instructions/recover.d.ts +54 -0
  58. package/dist/generated_clients/jobs/instructions/recover.js +96 -0
  59. package/dist/generated_clients/jobs/instructions/stop.d.ts +42 -0
  60. package/dist/generated_clients/jobs/instructions/stop.js +79 -0
  61. package/dist/generated_clients/jobs/instructions/update.d.ts +58 -0
  62. package/dist/generated_clients/jobs/instructions/update.js +93 -0
  63. package/dist/generated_clients/jobs/instructions/work.d.ts +57 -0
  64. package/dist/generated_clients/jobs/instructions/work.js +99 -0
  65. package/dist/generated_clients/jobs/programs/index.d.ts +8 -0
  66. package/dist/generated_clients/jobs/programs/index.js +24 -0
  67. package/dist/generated_clients/jobs/programs/nosanaJobs.d.ts +78 -0
  68. package/dist/generated_clients/jobs/programs/nosanaJobs.js +112 -0
  69. package/dist/generated_clients/jobs/shared/index.d.ts +49 -0
  70. package/dist/generated_clients/jobs/shared/index.js +94 -0
  71. package/dist/generated_clients/jobs/types/index.d.ts +10 -0
  72. package/dist/generated_clients/jobs/types/index.js +26 -0
  73. package/dist/generated_clients/jobs/types/jobState.d.ts +18 -0
  74. package/dist/generated_clients/jobs/types/jobState.js +30 -0
  75. package/dist/generated_clients/jobs/types/jobType.d.ts +21 -0
  76. package/dist/generated_clients/jobs/types/jobType.js +33 -0
  77. package/dist/generated_clients/jobs/types/queueType.d.ts +18 -0
  78. package/dist/generated_clients/jobs/types/queueType.js +30 -0
  79. package/dist/index.d.ts +19 -0
  80. package/dist/index.js +43 -0
  81. package/dist/ipfs/IPFS.d.ts +19 -0
  82. package/dist/ipfs/IPFS.js +47 -0
  83. package/dist/logger/Logger.d.ts +24 -0
  84. package/dist/logger/Logger.js +63 -0
  85. package/dist/programs/BaseProgram.d.ts +20 -0
  86. package/dist/programs/BaseProgram.js +39 -0
  87. package/dist/programs/JobsProgram.d.ts +118 -0
  88. package/dist/programs/JobsProgram.js +611 -0
  89. package/dist/solana/SolanaUtils.d.ts +15 -0
  90. package/dist/solana/SolanaUtils.js +48 -0
  91. package/dist/utils/index.d.ts +19 -0
  92. package/dist/utils/index.js +17 -0
  93. package/examples/node/monitor.ts +143 -0
  94. package/examples/node/package-lock.json +245 -0
  95. package/examples/node/package.json +16 -0
  96. package/examples/node/retrieve.ts +18 -0
  97. package/package.json +47 -0
  98. package/scripts/generate-clients.ts +9 -0
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ /**
3
+ * This code was AUTOGENERATED using the codama library.
4
+ * Please DO NOT EDIT THIS FILE, instead use visitors
5
+ * to add features, then rerun codama to update it.
6
+ *
7
+ * @see https://github.com/codama-idl/codama
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.JobType = void 0;
11
+ exports.getJobTypeEncoder = getJobTypeEncoder;
12
+ exports.getJobTypeDecoder = getJobTypeDecoder;
13
+ exports.getJobTypeCodec = getJobTypeCodec;
14
+ const kit_1 = require("@solana/kit");
15
+ /** The `JobType` describes the type of any job. */
16
+ var JobType;
17
+ (function (JobType) {
18
+ JobType[JobType["Default"] = 0] = "Default";
19
+ JobType[JobType["Small"] = 1] = "Small";
20
+ JobType[JobType["Medium"] = 2] = "Medium";
21
+ JobType[JobType["Large"] = 3] = "Large";
22
+ JobType[JobType["Gpu"] = 4] = "Gpu";
23
+ JobType[JobType["Unknown"] = 5] = "Unknown";
24
+ })(JobType || (exports.JobType = JobType = {}));
25
+ function getJobTypeEncoder() {
26
+ return (0, kit_1.getEnumEncoder)(JobType);
27
+ }
28
+ function getJobTypeDecoder() {
29
+ return (0, kit_1.getEnumDecoder)(JobType);
30
+ }
31
+ function getJobTypeCodec() {
32
+ return (0, kit_1.combineCodec)(getJobTypeEncoder(), getJobTypeDecoder());
33
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * This code was AUTOGENERATED using the codama library.
3
+ * Please DO NOT EDIT THIS FILE, instead use visitors
4
+ * to add features, then rerun codama to update it.
5
+ *
6
+ * @see https://github.com/codama-idl/codama
7
+ */
8
+ import { type Codec, type Decoder, type Encoder } from '@solana/kit';
9
+ /** The `QueueType` describes the type of queue */
10
+ export declare enum QueueType {
11
+ Job = 0,
12
+ Node = 1,
13
+ Empty = 2
14
+ }
15
+ export type QueueTypeArgs = QueueType;
16
+ export declare function getQueueTypeEncoder(): Encoder<QueueTypeArgs>;
17
+ export declare function getQueueTypeDecoder(): Decoder<QueueType>;
18
+ export declare function getQueueTypeCodec(): Codec<QueueTypeArgs, QueueType>;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ /**
3
+ * This code was AUTOGENERATED using the codama library.
4
+ * Please DO NOT EDIT THIS FILE, instead use visitors
5
+ * to add features, then rerun codama to update it.
6
+ *
7
+ * @see https://github.com/codama-idl/codama
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.QueueType = void 0;
11
+ exports.getQueueTypeEncoder = getQueueTypeEncoder;
12
+ exports.getQueueTypeDecoder = getQueueTypeDecoder;
13
+ exports.getQueueTypeCodec = getQueueTypeCodec;
14
+ const kit_1 = require("@solana/kit");
15
+ /** The `QueueType` describes the type of queue */
16
+ var QueueType;
17
+ (function (QueueType) {
18
+ QueueType[QueueType["Job"] = 0] = "Job";
19
+ QueueType[QueueType["Node"] = 1] = "Node";
20
+ QueueType[QueueType["Empty"] = 2] = "Empty";
21
+ })(QueueType || (exports.QueueType = QueueType = {}));
22
+ function getQueueTypeEncoder() {
23
+ return (0, kit_1.getEnumEncoder)(QueueType);
24
+ }
25
+ function getQueueTypeDecoder() {
26
+ return (0, kit_1.getEnumDecoder)(QueueType);
27
+ }
28
+ function getQueueTypeCodec() {
29
+ return (0, kit_1.combineCodec)(getQueueTypeEncoder(), getQueueTypeDecoder());
30
+ }
@@ -0,0 +1,19 @@
1
+ import { ClientConfig, NosanaNetwork, PartialClientConfig } from './config/index.js';
2
+ import { Logger } from './logger/Logger.js';
3
+ import { JobsProgram } from './programs/JobsProgram.js';
4
+ import { SolanaUtils } from './solana/SolanaUtils.js';
5
+ export declare class NosanaClient {
6
+ readonly config: ClientConfig;
7
+ readonly jobs: JobsProgram;
8
+ readonly solana: SolanaUtils;
9
+ readonly logger: Logger;
10
+ constructor(network?: NosanaNetwork, customConfig?: PartialClientConfig);
11
+ }
12
+ export * from './config/index.js';
13
+ export * from './errors/NosanaError.js';
14
+ export * from './logger/Logger.js';
15
+ export { JobsProgram } from './programs/JobsProgram.js';
16
+ export type { Job, Market, Run } from './programs/JobsProgram.js';
17
+ export * from './ipfs/IPFS.js';
18
+ export * from './generated_clients/jobs/index.js';
19
+ export * from 'gill';
package/dist/index.js ADDED
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.JobsProgram = exports.NosanaClient = void 0;
18
+ const index_js_1 = require("./config/index.js");
19
+ const Logger_js_1 = require("./logger/Logger.js");
20
+ const JobsProgram_js_1 = require("./programs/JobsProgram.js");
21
+ const SolanaUtils_js_1 = require("./solana/SolanaUtils.js");
22
+ class NosanaClient {
23
+ constructor(network = index_js_1.NosanaNetwork.MAINNET, customConfig) {
24
+ this.config = (0, index_js_1.getNosanaConfig)(network, customConfig);
25
+ this.jobs = new JobsProgram_js_1.JobsProgram(this);
26
+ this.logger = Logger_js_1.Logger.getInstance();
27
+ this.solana = new SolanaUtils_js_1.SolanaUtils(this);
28
+ }
29
+ }
30
+ exports.NosanaClient = NosanaClient;
31
+ // Export types and configuration
32
+ __exportStar(require("./config/index.js"), exports);
33
+ __exportStar(require("./errors/NosanaError.js"), exports);
34
+ __exportStar(require("./logger/Logger.js"), exports);
35
+ // Export JobsProgram and related types
36
+ var JobsProgram_js_2 = require("./programs/JobsProgram.js");
37
+ Object.defineProperty(exports, "JobsProgram", { enumerable: true, get: function () { return JobsProgram_js_2.JobsProgram; } });
38
+ // Export IPFS utilities
39
+ __exportStar(require("./ipfs/IPFS.js"), exports);
40
+ // Export all generated client types and functions
41
+ __exportStar(require("./generated_clients/jobs/index.js"), exports);
42
+ // Export dependencies
43
+ __exportStar(require("gill"), exports);
@@ -0,0 +1,19 @@
1
+ import { ReadonlyUint8Array } from 'gill';
2
+ /**
3
+ * Class to interact with Pinata Cloud
4
+ * https://www.pinata.cloud/
5
+ */
6
+ export declare class IPFS {
7
+ /**
8
+ * Convert the ipfs bytes from a solana job to a CID
9
+ * It prepends the 0x1220 (18,32) to make it 34 bytes and Base58 encodes it.
10
+ * This result is IPFS addressable.
11
+ */
12
+ static solHashToIpfsHash(hashArray: ReadonlyUint8Array): string;
13
+ /**
14
+ * Converts IPFS hash to byte array needed to submit results
15
+ * @param hash IPFS hash
16
+ * @returns Array<number>
17
+ */
18
+ static IpfsHashToByteArray(hash: string): Uint8Array;
19
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.IPFS = void 0;
7
+ const bs58_1 = __importDefault(require("bs58"));
8
+ /**
9
+ * Class to interact with Pinata Cloud
10
+ * https://www.pinata.cloud/
11
+ */
12
+ class IPFS {
13
+ /**
14
+ * Convert the ipfs bytes from a solana job to a CID
15
+ * It prepends the 0x1220 (18,32) to make it 34 bytes and Base58 encodes it.
16
+ * This result is IPFS addressable.
17
+ */
18
+ static solHashToIpfsHash(hashArray) {
19
+ let finalArray;
20
+ if (hashArray.length === 32) {
21
+ // Create a new array with the prepended bytes [18, 32] + original array
22
+ finalArray = new Uint8Array(34);
23
+ finalArray[0] = 18;
24
+ finalArray[1] = 32;
25
+ finalArray.set(hashArray, 2);
26
+ }
27
+ else {
28
+ // Use the array as-is if it's not 32 bytes
29
+ finalArray = new Uint8Array(hashArray);
30
+ }
31
+ return bs58_1.default.encode(Buffer.from(finalArray));
32
+ }
33
+ /**
34
+ * Converts IPFS hash to byte array needed to submit results
35
+ * @param hash IPFS hash
36
+ * @returns Array<number>
37
+ */
38
+ static IpfsHashToByteArray(hash) {
39
+ if (hash.length === 34) {
40
+ return new Uint8Array([...bs58_1.default.decode(hash).subarray(2)]);
41
+ }
42
+ else {
43
+ return new Uint8Array([...bs58_1.default.decode(hash)]);
44
+ }
45
+ }
46
+ }
47
+ exports.IPFS = IPFS;
@@ -0,0 +1,24 @@
1
+ export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
2
+ export interface LoggerOptions {
3
+ level?: LogLevel;
4
+ prefix?: string;
5
+ enabled?: boolean;
6
+ }
7
+ export declare class Logger {
8
+ private static instance;
9
+ private level;
10
+ private prefix;
11
+ private enabled;
12
+ private constructor();
13
+ static getInstance(options?: LoggerOptions): Logger;
14
+ private shouldLog;
15
+ private formatMessage;
16
+ debug(message: string): void;
17
+ info(message: string): void;
18
+ warn(message: string): void;
19
+ error(message: string): void;
20
+ setLevel(level: LogLevel): void;
21
+ setPrefix(prefix: string): void;
22
+ enable(): void;
23
+ disable(): void;
24
+ }
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Logger = void 0;
4
+ class Logger {
5
+ constructor(options) {
6
+ this.level = 'info';
7
+ this.prefix = '[Nosana]';
8
+ this.enabled = true;
9
+ if (options) {
10
+ this.level = options.level || this.level;
11
+ this.prefix = options.prefix || this.prefix;
12
+ this.enabled = options.enabled ?? this.enabled;
13
+ }
14
+ }
15
+ static getInstance(options) {
16
+ if (!Logger.instance) {
17
+ Logger.instance = new Logger(options);
18
+ }
19
+ return Logger.instance;
20
+ }
21
+ shouldLog(messageLevel) {
22
+ if (!this.enabled)
23
+ return false;
24
+ const levels = ['debug', 'info', 'warn', 'error'];
25
+ return levels.indexOf(messageLevel) >= levels.indexOf(this.level);
26
+ }
27
+ formatMessage(level, message) {
28
+ return `${this.prefix} [${level.toUpperCase()}] ${message}`;
29
+ }
30
+ debug(message) {
31
+ if (this.shouldLog('debug')) {
32
+ console.debug(this.formatMessage('debug', message));
33
+ }
34
+ }
35
+ info(message) {
36
+ if (this.shouldLog('info')) {
37
+ console.info(this.formatMessage('info', message));
38
+ }
39
+ }
40
+ warn(message) {
41
+ if (this.shouldLog('warn')) {
42
+ console.warn(this.formatMessage('warn', message));
43
+ }
44
+ }
45
+ error(message) {
46
+ if (this.shouldLog('error')) {
47
+ console.error(this.formatMessage('error', message));
48
+ }
49
+ }
50
+ setLevel(level) {
51
+ this.level = level;
52
+ }
53
+ setPrefix(prefix) {
54
+ this.prefix = prefix;
55
+ }
56
+ enable() {
57
+ this.enabled = true;
58
+ }
59
+ disable() {
60
+ this.enabled = false;
61
+ }
62
+ }
63
+ exports.Logger = Logger;
@@ -0,0 +1,20 @@
1
+ import { Address } from 'gill';
2
+ import { NosanaClient } from '../index.js';
3
+ export type staticAccounts = {
4
+ rewardsReflection: Address;
5
+ rewardsVault: Address;
6
+ rewardsProgram: Address;
7
+ jobsProgram: Address;
8
+ };
9
+ export declare abstract class BaseProgram {
10
+ private _staticAccounts;
11
+ private _initializingAccounts;
12
+ /**
13
+ * Gets the static accounts, initializing them if needed.
14
+ */
15
+ protected getStaticAccounts(): Promise<staticAccounts>;
16
+ private initializeStaticAccounts;
17
+ protected readonly sdk: NosanaClient;
18
+ constructor(sdk: NosanaClient);
19
+ protected abstract getProgramId(): Address;
20
+ }
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BaseProgram = void 0;
4
+ class BaseProgram {
5
+ /**
6
+ * Gets the static accounts, initializing them if needed.
7
+ */
8
+ async getStaticAccounts() {
9
+ if (this._staticAccounts) {
10
+ return this._staticAccounts;
11
+ }
12
+ // If we're already initializing, return the existing promise
13
+ if (this._initializingAccounts) {
14
+ return this._initializingAccounts;
15
+ }
16
+ // Start initialization and store the promise
17
+ this._initializingAccounts = this.initializeStaticAccounts();
18
+ // Wait for initialization to complete
19
+ this._staticAccounts = await this._initializingAccounts;
20
+ this._initializingAccounts = undefined;
21
+ return this._staticAccounts;
22
+ }
23
+ async initializeStaticAccounts() {
24
+ return {
25
+ rewardsReflection: await this.sdk.solana.pda([
26
+ 'reflection',
27
+ ], this.sdk.config.programs.rewardsAddress),
28
+ rewardsVault: await this.sdk.solana.pda([
29
+ this.sdk.config.programs.nosTokenAddress,
30
+ ], this.sdk.config.programs.rewardsAddress),
31
+ rewardsProgram: this.sdk.config.programs.rewardsAddress,
32
+ jobsProgram: this.sdk.config.programs.jobsAddress
33
+ };
34
+ }
35
+ constructor(sdk) {
36
+ this.sdk = sdk;
37
+ }
38
+ }
39
+ exports.BaseProgram = BaseProgram;
@@ -0,0 +1,118 @@
1
+ import { BaseProgram } from './BaseProgram.js';
2
+ import { Address, Signature, Account } from 'gill';
3
+ import { NosanaClient } from '../index.js';
4
+ import * as programClient from "../generated_clients/jobs/index.js";
5
+ import { ConvertTypesForDb } from '../utils/index.js';
6
+ export type Job = ConvertTypesForDb<programClient.JobAccountArgs> & {
7
+ address: Address;
8
+ };
9
+ export type Market = ConvertTypesForDb<programClient.MarketAccountArgs> & {
10
+ address: Address;
11
+ };
12
+ export type Run = ConvertTypesForDb<programClient.RunAccountArgs> & {
13
+ address: Address;
14
+ };
15
+ export declare class JobsProgram extends BaseProgram {
16
+ readonly client: typeof programClient;
17
+ constructor(sdk: NosanaClient);
18
+ protected getProgramId(): Address;
19
+ /**
20
+ * Fetch a job account by address
21
+ */
22
+ get(addr: Address, checkRun?: boolean): Promise<Job>;
23
+ /**
24
+ * Fetch a run account by address
25
+ */
26
+ run(addr: Address): Promise<Run>;
27
+ /**
28
+ * Fetch a run account by address
29
+ */
30
+ market(addr: Address): Promise<Market>;
31
+ /**
32
+ * Fetch multiple job accounts by address
33
+ */
34
+ multiple(addresses: Address[], checkRuns?: boolean): Promise<Job[]>;
35
+ /**
36
+ * Fetch all job accounts
37
+ */
38
+ all(filters?: {
39
+ state?: number;
40
+ market?: Address;
41
+ node?: Address;
42
+ project?: Address;
43
+ }, checkRuns?: boolean): Promise<Job[]>;
44
+ /**
45
+ * Fetch all run accounts
46
+ */
47
+ runs(filters?: {
48
+ node?: Address;
49
+ job?: Address;
50
+ }): Promise<Run[]>;
51
+ /**
52
+ * Fetch all market accounts
53
+ */
54
+ markets(): Promise<Market[]>;
55
+ /**
56
+ * Post a new job to the marketplace
57
+ * @param params Parameters for listing a job
58
+ * @returns The transaction signature
59
+ */
60
+ post(params: {
61
+ market: Address;
62
+ timeout: number | bigint;
63
+ ipfsHash: string;
64
+ node?: Address;
65
+ instructionOnly?: boolean;
66
+ }): Promise<ReturnType<typeof this.client.getListInstruction> | Signature>;
67
+ /**
68
+ * Monitor program account updates using callback functions
69
+ * Uses WebSocket subscriptions with automatic restart on failure
70
+ *
71
+ * @example
72
+ * ```typescript
73
+ * // Example: Monitor job accounts and save to file
74
+ * const stopMonitoring = await jobsProgram.monitor({
75
+ * onJobAccount: async (jobAccount) => {
76
+ * console.log('Job updated:', jobAccount.address.toString());
77
+ * // Save to database, file, or process as needed
78
+ * },
79
+ * onRunAccount: async (runAccount) => {
80
+ * console.log('Run updated:', runAccount.address.toString());
81
+ * },
82
+ * onError: async (error, accountType) => {
83
+ * console.error('Error processing account:', error, accountType);
84
+ * }
85
+ * });
86
+ *
87
+ * // Stop monitoring when done
88
+ * stopMonitoring();
89
+ * ```
90
+ *
91
+ * @param options Configuration options for monitoring
92
+ * @returns A function to stop monitoring
93
+ */
94
+ monitor(options?: {
95
+ onJobAccount?: (jobAccount: Job) => Promise<void> | void;
96
+ onMarketAccount?: (marketAccount: Market) => Promise<void> | void;
97
+ onRunAccount?: (runAccount: Run) => Promise<void> | void;
98
+ onError?: (error: Error, accountType?: string) => Promise<void> | void;
99
+ }): Promise<() => void>;
100
+ /**
101
+ * Set up WebSocket subscription for program notifications
102
+ */
103
+ private setupSubscription;
104
+ /**
105
+ * Process subscription notifications
106
+ */
107
+ private processSubscriptionNotifications;
108
+ transformJobAccount(jobAccount: Account<programClient.JobAccount>): Job;
109
+ transformRunAccount(runAccount: Account<programClient.RunAccount>): Run;
110
+ transformMarketAccount(marketAccount: Account<programClient.MarketAccount>): Market;
111
+ /**
112
+ * Handle account update using callback functions
113
+ */
114
+ private handleAccountUpdate;
115
+ private handleJobAccount;
116
+ private handleMarketAccount;
117
+ private handleRunAccount;
118
+ }