@nosana/kit 1.0.10 → 2.0.10

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 (289) hide show
  1. package/README.md +539 -152
  2. package/dist/NosanaClient.d.ts +58 -0
  3. package/dist/NosanaClient.js +103 -0
  4. package/dist/NosanaClient.js.map +1 -0
  5. package/dist/config/defaultConfigs.d.ts +2 -1
  6. package/dist/config/defaultConfigs.js +4 -4
  7. package/dist/config/defaultConfigs.js.map +1 -0
  8. package/dist/config/index.d.ts +1 -0
  9. package/dist/config/index.js +1 -0
  10. package/dist/config/index.js.map +1 -0
  11. package/dist/config/types.d.ts +41 -33
  12. package/dist/config/types.js +14 -13
  13. package/dist/config/types.js.map +1 -0
  14. package/dist/config/utils.d.ts +2 -2
  15. package/dist/config/utils.js +11 -4
  16. package/dist/config/utils.js.map +1 -0
  17. package/dist/errors/NosanaError.d.ts +1 -0
  18. package/dist/errors/NosanaError.js +2 -0
  19. package/dist/errors/NosanaError.js.map +1 -0
  20. package/dist/generated_clients/jobs/accounts/index.d.ts +5 -5
  21. package/dist/generated_clients/jobs/accounts/index.js +6 -5
  22. package/dist/generated_clients/jobs/accounts/index.js.map +1 -0
  23. package/dist/generated_clients/jobs/accounts/jobAccount.d.ts +10 -6
  24. package/dist/generated_clients/jobs/accounts/jobAccount.js +6 -2
  25. package/dist/generated_clients/jobs/accounts/jobAccount.js.map +1 -0
  26. package/dist/generated_clients/jobs/accounts/marketAccount.d.ts +6 -2
  27. package/dist/generated_clients/jobs/accounts/marketAccount.js +6 -2
  28. package/dist/generated_clients/jobs/accounts/marketAccount.js.map +1 -0
  29. package/dist/generated_clients/jobs/accounts/runAccount.d.ts +10 -6
  30. package/dist/generated_clients/jobs/accounts/runAccount.js +6 -2
  31. package/dist/generated_clients/jobs/accounts/runAccount.js.map +1 -0
  32. package/dist/generated_clients/jobs/errors/index.d.ts +3 -3
  33. package/dist/generated_clients/jobs/errors/index.js +4 -3
  34. package/dist/generated_clients/jobs/errors/index.js.map +1 -0
  35. package/dist/generated_clients/jobs/errors/nosanaJobs.d.ts +2 -2
  36. package/dist/generated_clients/jobs/errors/nosanaJobs.js +4 -3
  37. package/dist/generated_clients/jobs/errors/nosanaJobs.js.map +1 -0
  38. package/dist/generated_clients/jobs/index.d.ts +7 -7
  39. package/dist/generated_clients/jobs/index.js +8 -7
  40. package/dist/generated_clients/jobs/index.js.map +1 -0
  41. package/dist/generated_clients/jobs/instructions/assign.d.ts +14 -14
  42. package/dist/generated_clients/jobs/instructions/assign.js +8 -8
  43. package/dist/generated_clients/jobs/instructions/assign.js.map +1 -0
  44. package/dist/generated_clients/jobs/instructions/claim.d.ts +13 -13
  45. package/dist/generated_clients/jobs/instructions/claim.js +8 -8
  46. package/dist/generated_clients/jobs/instructions/claim.js.map +1 -0
  47. package/dist/generated_clients/jobs/instructions/clean.d.ts +10 -10
  48. package/dist/generated_clients/jobs/instructions/clean.js +8 -8
  49. package/dist/generated_clients/jobs/instructions/clean.js.map +1 -0
  50. package/dist/generated_clients/jobs/instructions/cleanAdmin.d.ts +11 -11
  51. package/dist/generated_clients/jobs/instructions/cleanAdmin.js +8 -8
  52. package/dist/generated_clients/jobs/instructions/cleanAdmin.js.map +1 -0
  53. package/dist/generated_clients/jobs/instructions/close.d.ts +11 -11
  54. package/dist/generated_clients/jobs/instructions/close.js +8 -8
  55. package/dist/generated_clients/jobs/instructions/close.js.map +1 -0
  56. package/dist/generated_clients/jobs/instructions/closeAdmin.d.ts +11 -11
  57. package/dist/generated_clients/jobs/instructions/closeAdmin.js +8 -8
  58. package/dist/generated_clients/jobs/instructions/closeAdmin.js.map +1 -0
  59. package/dist/generated_clients/jobs/instructions/complete.d.ts +11 -11
  60. package/dist/generated_clients/jobs/instructions/complete.js +9 -12
  61. package/dist/generated_clients/jobs/instructions/complete.js.map +1 -0
  62. package/dist/generated_clients/jobs/instructions/delist.d.ts +11 -11
  63. package/dist/generated_clients/jobs/instructions/delist.js +8 -8
  64. package/dist/generated_clients/jobs/instructions/delist.js.map +1 -0
  65. package/dist/generated_clients/jobs/instructions/end.d.ts +11 -11
  66. package/dist/generated_clients/jobs/instructions/end.js +8 -8
  67. package/dist/generated_clients/jobs/instructions/end.js.map +1 -0
  68. package/dist/generated_clients/jobs/instructions/extend.d.ts +12 -12
  69. package/dist/generated_clients/jobs/instructions/extend.js +8 -8
  70. package/dist/generated_clients/jobs/instructions/extend.js.map +1 -0
  71. package/dist/generated_clients/jobs/instructions/finish.d.ts +23 -20
  72. package/dist/generated_clients/jobs/instructions/finish.js +15 -12
  73. package/dist/generated_clients/jobs/instructions/finish.js.map +1 -0
  74. package/dist/generated_clients/jobs/instructions/index.d.ts +21 -21
  75. package/dist/generated_clients/jobs/instructions/index.js +22 -21
  76. package/dist/generated_clients/jobs/instructions/index.js.map +1 -0
  77. package/dist/generated_clients/jobs/instructions/list.d.ts +14 -14
  78. package/dist/generated_clients/jobs/instructions/list.js +8 -8
  79. package/dist/generated_clients/jobs/instructions/list.js.map +1 -0
  80. package/dist/generated_clients/jobs/instructions/open.d.ts +12 -12
  81. package/dist/generated_clients/jobs/instructions/open.js +8 -8
  82. package/dist/generated_clients/jobs/instructions/open.js.map +1 -0
  83. package/dist/generated_clients/jobs/instructions/quit.d.ts +11 -11
  84. package/dist/generated_clients/jobs/instructions/quit.js +8 -8
  85. package/dist/generated_clients/jobs/instructions/quit.js.map +1 -0
  86. package/dist/generated_clients/jobs/instructions/quitAdmin.d.ts +11 -11
  87. package/dist/generated_clients/jobs/instructions/quitAdmin.js +8 -8
  88. package/dist/generated_clients/jobs/instructions/quitAdmin.js.map +1 -0
  89. package/dist/generated_clients/jobs/instructions/recover.d.ts +11 -11
  90. package/dist/generated_clients/jobs/instructions/recover.js +8 -8
  91. package/dist/generated_clients/jobs/instructions/recover.js.map +1 -0
  92. package/dist/generated_clients/jobs/instructions/stop.d.ts +11 -11
  93. package/dist/generated_clients/jobs/instructions/stop.js +8 -8
  94. package/dist/generated_clients/jobs/instructions/stop.js.map +1 -0
  95. package/dist/generated_clients/jobs/instructions/update.d.ts +11 -11
  96. package/dist/generated_clients/jobs/instructions/update.js +8 -8
  97. package/dist/generated_clients/jobs/instructions/update.js.map +1 -0
  98. package/dist/generated_clients/jobs/instructions/work.d.ts +13 -13
  99. package/dist/generated_clients/jobs/instructions/work.js +8 -8
  100. package/dist/generated_clients/jobs/instructions/work.js.map +1 -0
  101. package/dist/generated_clients/jobs/programs/index.d.ts +3 -3
  102. package/dist/generated_clients/jobs/programs/index.js +4 -3
  103. package/dist/generated_clients/jobs/programs/index.js.map +1 -0
  104. package/dist/generated_clients/jobs/programs/nosanaJobs.d.ts +52 -50
  105. package/dist/generated_clients/jobs/programs/nosanaJobs.js +30 -31
  106. package/dist/generated_clients/jobs/programs/nosanaJobs.js.map +1 -0
  107. package/dist/generated_clients/jobs/shared/index.d.ts +5 -5
  108. package/dist/generated_clients/jobs/shared/index.js +4 -3
  109. package/dist/generated_clients/jobs/shared/index.js.map +1 -0
  110. package/dist/generated_clients/jobs/types/index.d.ts +5 -5
  111. package/dist/generated_clients/jobs/types/index.js +6 -5
  112. package/dist/generated_clients/jobs/types/index.js.map +1 -0
  113. package/dist/generated_clients/jobs/types/jobState.d.ts +12 -11
  114. package/dist/generated_clients/jobs/types/jobState.js +8 -8
  115. package/dist/generated_clients/jobs/types/jobState.js.map +1 -0
  116. package/dist/generated_clients/jobs/types/jobType.d.ts +15 -14
  117. package/dist/generated_clients/jobs/types/jobType.js +11 -11
  118. package/dist/generated_clients/jobs/types/jobType.js.map +1 -0
  119. package/dist/generated_clients/jobs/types/queueType.d.ts +12 -11
  120. package/dist/generated_clients/jobs/types/queueType.js +8 -8
  121. package/dist/generated_clients/jobs/types/queueType.js.map +1 -0
  122. package/dist/generated_clients/merkle_distributor/accounts/claimStatus.d.ts +10 -6
  123. package/dist/generated_clients/merkle_distributor/accounts/claimStatus.js +6 -2
  124. package/dist/generated_clients/merkle_distributor/accounts/claimStatus.js.map +1 -0
  125. package/dist/generated_clients/merkle_distributor/accounts/index.d.ts +4 -4
  126. package/dist/generated_clients/merkle_distributor/accounts/index.js +5 -4
  127. package/dist/generated_clients/merkle_distributor/accounts/index.js.map +1 -0
  128. package/dist/generated_clients/merkle_distributor/accounts/merkleDistributor.d.ts +10 -6
  129. package/dist/generated_clients/merkle_distributor/accounts/merkleDistributor.js +6 -2
  130. package/dist/generated_clients/merkle_distributor/accounts/merkleDistributor.js.map +1 -0
  131. package/dist/generated_clients/merkle_distributor/errors/index.d.ts +3 -3
  132. package/dist/generated_clients/merkle_distributor/errors/index.js +4 -3
  133. package/dist/generated_clients/merkle_distributor/errors/index.js.map +1 -0
  134. package/dist/generated_clients/merkle_distributor/errors/merkleDistributor.d.ts +2 -2
  135. package/dist/generated_clients/merkle_distributor/errors/merkleDistributor.js +4 -3
  136. package/dist/generated_clients/merkle_distributor/errors/merkleDistributor.js.map +1 -0
  137. package/dist/generated_clients/merkle_distributor/index.d.ts +6 -6
  138. package/dist/generated_clients/merkle_distributor/index.js +7 -6
  139. package/dist/generated_clients/merkle_distributor/index.js.map +1 -0
  140. package/dist/generated_clients/merkle_distributor/instructions/claimLocked.d.ts +11 -11
  141. package/dist/generated_clients/merkle_distributor/instructions/claimLocked.js +8 -8
  142. package/dist/generated_clients/merkle_distributor/instructions/claimLocked.js.map +1 -0
  143. package/dist/generated_clients/merkle_distributor/instructions/clawback.d.ts +11 -11
  144. package/dist/generated_clients/merkle_distributor/instructions/clawback.js +8 -8
  145. package/dist/generated_clients/merkle_distributor/instructions/clawback.js.map +1 -0
  146. package/dist/generated_clients/merkle_distributor/instructions/closeClaimStatus.d.ts +11 -11
  147. package/dist/generated_clients/merkle_distributor/instructions/closeClaimStatus.js +8 -8
  148. package/dist/generated_clients/merkle_distributor/instructions/closeClaimStatus.js.map +1 -0
  149. package/dist/generated_clients/merkle_distributor/instructions/closeDistributor.d.ts +11 -11
  150. package/dist/generated_clients/merkle_distributor/instructions/closeDistributor.js +8 -8
  151. package/dist/generated_clients/merkle_distributor/instructions/closeDistributor.js.map +1 -0
  152. package/dist/generated_clients/merkle_distributor/instructions/index.d.ts +11 -11
  153. package/dist/generated_clients/merkle_distributor/instructions/index.js +12 -11
  154. package/dist/generated_clients/merkle_distributor/instructions/index.js.map +1 -0
  155. package/dist/generated_clients/merkle_distributor/instructions/newClaim.d.ts +8 -8
  156. package/dist/generated_clients/merkle_distributor/instructions/newClaim.js +8 -8
  157. package/dist/generated_clients/merkle_distributor/instructions/newClaim.js.map +1 -0
  158. package/dist/generated_clients/merkle_distributor/instructions/newDistributor.d.ts +11 -11
  159. package/dist/generated_clients/merkle_distributor/instructions/newDistributor.js +8 -8
  160. package/dist/generated_clients/merkle_distributor/instructions/newDistributor.js.map +1 -0
  161. package/dist/generated_clients/merkle_distributor/instructions/setAdmin.d.ts +11 -11
  162. package/dist/generated_clients/merkle_distributor/instructions/setAdmin.js +8 -8
  163. package/dist/generated_clients/merkle_distributor/instructions/setAdmin.js.map +1 -0
  164. package/dist/generated_clients/merkle_distributor/instructions/setClawbackReceiver.d.ts +11 -11
  165. package/dist/generated_clients/merkle_distributor/instructions/setClawbackReceiver.js +8 -8
  166. package/dist/generated_clients/merkle_distributor/instructions/setClawbackReceiver.js.map +1 -0
  167. package/dist/generated_clients/merkle_distributor/instructions/setEnableSlot.d.ts +11 -11
  168. package/dist/generated_clients/merkle_distributor/instructions/setEnableSlot.js +9 -12
  169. package/dist/generated_clients/merkle_distributor/instructions/setEnableSlot.js.map +1 -0
  170. package/dist/generated_clients/merkle_distributor/programs/index.d.ts +3 -3
  171. package/dist/generated_clients/merkle_distributor/programs/index.js +4 -3
  172. package/dist/generated_clients/merkle_distributor/programs/index.js.map +1 -0
  173. package/dist/generated_clients/merkle_distributor/programs/merkleDistributor.d.ts +29 -27
  174. package/dist/generated_clients/merkle_distributor/programs/merkleDistributor.js +18 -19
  175. package/dist/generated_clients/merkle_distributor/programs/merkleDistributor.js.map +1 -0
  176. package/dist/generated_clients/merkle_distributor/shared/index.d.ts +5 -5
  177. package/dist/generated_clients/merkle_distributor/shared/index.js +4 -3
  178. package/dist/generated_clients/merkle_distributor/shared/index.js.map +1 -0
  179. package/dist/generated_clients/staking/accounts/index.d.ts +4 -4
  180. package/dist/generated_clients/staking/accounts/index.js +5 -4
  181. package/dist/generated_clients/staking/accounts/index.js.map +1 -0
  182. package/dist/generated_clients/staking/accounts/settingsAccount.d.ts +9 -6
  183. package/dist/generated_clients/staking/accounts/settingsAccount.js +6 -2
  184. package/dist/generated_clients/staking/accounts/settingsAccount.js.map +1 -0
  185. package/dist/generated_clients/staking/accounts/stakeAccount.d.ts +9 -6
  186. package/dist/generated_clients/staking/accounts/stakeAccount.js +6 -2
  187. package/dist/generated_clients/staking/accounts/stakeAccount.js.map +1 -0
  188. package/dist/generated_clients/staking/errors/index.d.ts +3 -3
  189. package/dist/generated_clients/staking/errors/index.js +4 -3
  190. package/dist/generated_clients/staking/errors/index.js.map +1 -0
  191. package/dist/generated_clients/staking/errors/nosanaStaking.d.ts +2 -2
  192. package/dist/generated_clients/staking/errors/nosanaStaking.js +4 -3
  193. package/dist/generated_clients/staking/errors/nosanaStaking.js.map +1 -0
  194. package/dist/generated_clients/staking/index.d.ts +6 -6
  195. package/dist/generated_clients/staking/index.js +7 -6
  196. package/dist/generated_clients/staking/index.js.map +1 -0
  197. package/dist/generated_clients/staking/instructions/close.d.ts +11 -11
  198. package/dist/generated_clients/staking/instructions/close.js +8 -8
  199. package/dist/generated_clients/staking/instructions/close.js.map +1 -0
  200. package/dist/generated_clients/staking/instructions/extend.d.ts +11 -11
  201. package/dist/generated_clients/staking/instructions/extend.js +9 -12
  202. package/dist/generated_clients/staking/instructions/extend.js.map +1 -0
  203. package/dist/generated_clients/staking/instructions/index.d.ts +12 -12
  204. package/dist/generated_clients/staking/instructions/index.js +13 -12
  205. package/dist/generated_clients/staking/instructions/index.js.map +1 -0
  206. package/dist/generated_clients/staking/instructions/init.d.ts +11 -11
  207. package/dist/generated_clients/staking/instructions/init.js +8 -8
  208. package/dist/generated_clients/staking/instructions/init.js.map +1 -0
  209. package/dist/generated_clients/staking/instructions/restake.d.ts +11 -11
  210. package/dist/generated_clients/staking/instructions/restake.js +8 -8
  211. package/dist/generated_clients/staking/instructions/restake.js.map +1 -0
  212. package/dist/generated_clients/staking/instructions/slash.d.ts +11 -11
  213. package/dist/generated_clients/staking/instructions/slash.js +8 -8
  214. package/dist/generated_clients/staking/instructions/slash.js.map +1 -0
  215. package/dist/generated_clients/staking/instructions/stake.d.ts +11 -11
  216. package/dist/generated_clients/staking/instructions/stake.js +8 -8
  217. package/dist/generated_clients/staking/instructions/stake.js.map +1 -0
  218. package/dist/generated_clients/staking/instructions/topup.d.ts +11 -11
  219. package/dist/generated_clients/staking/instructions/topup.js +8 -8
  220. package/dist/generated_clients/staking/instructions/topup.js.map +1 -0
  221. package/dist/generated_clients/staking/instructions/unstake.d.ts +11 -11
  222. package/dist/generated_clients/staking/instructions/unstake.js +8 -8
  223. package/dist/generated_clients/staking/instructions/unstake.js.map +1 -0
  224. package/dist/generated_clients/staking/instructions/updateSettings.d.ts +11 -11
  225. package/dist/generated_clients/staking/instructions/updateSettings.js +8 -8
  226. package/dist/generated_clients/staking/instructions/updateSettings.js.map +1 -0
  227. package/dist/generated_clients/staking/instructions/withdraw.d.ts +11 -11
  228. package/dist/generated_clients/staking/instructions/withdraw.js +8 -8
  229. package/dist/generated_clients/staking/instructions/withdraw.js.map +1 -0
  230. package/dist/generated_clients/staking/programs/index.d.ts +3 -3
  231. package/dist/generated_clients/staking/programs/index.js +4 -3
  232. package/dist/generated_clients/staking/programs/index.js.map +1 -0
  233. package/dist/generated_clients/staking/programs/nosanaStaking.d.ts +33 -31
  234. package/dist/generated_clients/staking/programs/nosanaStaking.js +20 -21
  235. package/dist/generated_clients/staking/programs/nosanaStaking.js.map +1 -0
  236. package/dist/generated_clients/staking/shared/index.d.ts +5 -5
  237. package/dist/generated_clients/staking/shared/index.js +4 -3
  238. package/dist/generated_clients/staking/shared/index.js.map +1 -0
  239. package/dist/index.d.ts +13 -32
  240. package/dist/index.js +13 -37
  241. package/dist/index.js.map +1 -0
  242. package/dist/logger/Logger.d.ts +4 -4
  243. package/dist/logger/Logger.js +7 -2
  244. package/dist/logger/Logger.js.map +1 -0
  245. package/dist/services/SolanaService.d.ts +49 -26
  246. package/dist/services/SolanaService.js +191 -133
  247. package/dist/services/SolanaService.js.map +1 -0
  248. package/dist/services/TokenService.d.ts +41 -0
  249. package/dist/services/TokenService.js +136 -0
  250. package/dist/services/TokenService.js.map +1 -0
  251. package/dist/services/programs/JobsProgram.d.ts +106 -0
  252. package/dist/services/programs/JobsProgram.js +584 -0
  253. package/dist/services/programs/JobsProgram.js.map +1 -0
  254. package/dist/services/programs/MerkleDistributorProgram.d.ts +101 -0
  255. package/dist/services/programs/MerkleDistributorProgram.js +343 -0
  256. package/dist/services/programs/MerkleDistributorProgram.js.map +1 -0
  257. package/dist/services/programs/StakeProgram.d.ts +46 -0
  258. package/dist/services/programs/StakeProgram.js +87 -0
  259. package/dist/services/programs/StakeProgram.js.map +1 -0
  260. package/dist/types.d.ts +17 -0
  261. package/dist/types.js +2 -0
  262. package/dist/types.js.map +1 -0
  263. package/dist/utils/convertBigIntToNumber.d.ts +19 -0
  264. package/dist/utils/convertBigIntToNumber.js +15 -0
  265. package/dist/utils/convertBigIntToNumber.js.map +1 -0
  266. package/dist/utils/getStaticAccounts.d.ts +23 -0
  267. package/dist/utils/getStaticAccounts.js +39 -0
  268. package/dist/utils/getStaticAccounts.js.map +1 -0
  269. package/dist/utils/index.d.ts +3 -20
  270. package/dist/utils/index.js +5 -16
  271. package/dist/utils/index.js.map +1 -0
  272. package/dist/utils/walletToAuthorizationSigner.d.ts +10 -0
  273. package/dist/utils/walletToAuthorizationSigner.js +42 -0
  274. package/dist/utils/walletToAuthorizationSigner.js.map +1 -0
  275. package/package.json +17 -14
  276. package/dist/ipfs/IPFS.d.ts +0 -50
  277. package/dist/ipfs/IPFS.js +0 -149
  278. package/dist/programs/BaseProgram.d.ts +0 -20
  279. package/dist/programs/BaseProgram.js +0 -31
  280. package/dist/programs/JobsProgram.d.ts +0 -129
  281. package/dist/programs/JobsProgram.js +0 -559
  282. package/dist/programs/MerkleDistributorProgram.d.ts +0 -115
  283. package/dist/programs/MerkleDistributorProgram.js +0 -337
  284. package/dist/programs/StakeProgram.d.ts +0 -29
  285. package/dist/programs/StakeProgram.js +0 -91
  286. package/dist/services/NosService.d.ts +0 -48
  287. package/dist/services/NosService.js +0 -139
  288. package/dist/utils/walletConverter.d.ts +0 -9
  289. package/dist/utils/walletConverter.js +0 -141
@@ -0,0 +1,584 @@
1
+ import { generateKeyPairSigner, parseBase64RpcAccount, } from '@solana/kit';
2
+ import { ErrorCodes, NosanaError } from '../../errors/NosanaError.js';
3
+ import * as programClient from '../../generated_clients/jobs/index.js';
4
+ import { findAssociatedTokenPda, TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';
5
+ import bs58 from 'bs58';
6
+ import { solBytesArrayToIpfsHash } from '@nosana/ipfs';
7
+ import { convertBigIntToNumber } from '../../utils/index.js';
8
+ import { getStaticAccounts } from '../../utils/getStaticAccounts.js';
9
+ export var JobState;
10
+ (function (JobState) {
11
+ JobState[JobState["QUEUED"] = 0] = "QUEUED";
12
+ JobState[JobState["RUNNING"] = 1] = "RUNNING";
13
+ JobState[JobState["COMPLETED"] = 2] = "COMPLETED";
14
+ JobState[JobState["STOPPED"] = 3] = "STOPPED";
15
+ })(JobState || (JobState = {}));
16
+ export var MarketQueueType;
17
+ (function (MarketQueueType) {
18
+ MarketQueueType[MarketQueueType["JOB_QUEUE"] = 0] = "JOB_QUEUE";
19
+ MarketQueueType[MarketQueueType["NODE_QUEUE"] = 1] = "NODE_QUEUE";
20
+ })(MarketQueueType || (MarketQueueType = {}));
21
+ export function createJobsProgram(deps, config) {
22
+ const programId = config.jobsAddress;
23
+ const client = programClient;
24
+ // Cache for static accounts (memoization)
25
+ const staticAccountsCache = {};
26
+ /**
27
+ * Transform job account to include address and convert types
28
+ */
29
+ /**
30
+ * Convert Solana bytes array to IPFS hash, returning null for empty/invalid hashes
31
+ */
32
+ function solBytesToIpfsHashOrNull(hashArray) {
33
+ const result = solBytesArrayToIpfsHash(Array.from(hashArray));
34
+ // Return null for the empty hash value
35
+ if (result === 'QmNLei78zWmzUdbeRB3CiUfAizWUrbeeZh5K1rhAQKCh51') {
36
+ return null;
37
+ }
38
+ return result;
39
+ }
40
+ function transformJobAccount(jobAccount) {
41
+ const { discriminator: _, ...jobAccountData } = jobAccount.data;
42
+ const converted = convertBigIntToNumber(jobAccountData);
43
+ return {
44
+ address: jobAccount.address,
45
+ ...converted,
46
+ ipfsJob: solBytesToIpfsHashOrNull(jobAccountData.ipfsJob),
47
+ ipfsResult: solBytesToIpfsHashOrNull(jobAccountData.ipfsResult),
48
+ state: converted.state,
49
+ };
50
+ }
51
+ /**
52
+ * Transform run account to include address and convert types
53
+ */
54
+ function transformRunAccount(runAccount) {
55
+ const { discriminator: _, ...runAccountData } = runAccount.data;
56
+ return {
57
+ address: runAccount.address,
58
+ ...convertBigIntToNumber(runAccountData),
59
+ };
60
+ }
61
+ /**
62
+ * Transform market account to include address and convert types
63
+ */
64
+ function transformMarketAccount(marketAccount) {
65
+ const { discriminator: _, ...marketAccountData } = marketAccount.data;
66
+ const converted = convertBigIntToNumber(marketAccountData);
67
+ return {
68
+ address: marketAccount.address,
69
+ ...converted,
70
+ queueType: converted.queueType,
71
+ };
72
+ }
73
+ /**
74
+ * Set up WebSocket subscription for program notifications
75
+ */
76
+ async function setupSubscription(abortController) {
77
+ try {
78
+ // Set up the subscription using the correct API pattern
79
+ const subscriptionIterable = await deps.solana.rpcSubscriptions
80
+ .programNotifications(programId, { encoding: 'base64' })
81
+ .subscribe({ abortSignal: abortController.signal });
82
+ return subscriptionIterable;
83
+ }
84
+ catch (error) {
85
+ throw new Error(`Failed to setup subscription: ${error}`);
86
+ }
87
+ }
88
+ /**
89
+ * Handle job account update
90
+ */
91
+ async function handleJobAccount(jobAccount, onJobAccount, _isMonitoring) {
92
+ if (onJobAccount) {
93
+ try {
94
+ await onJobAccount(transformJobAccount(jobAccount));
95
+ }
96
+ catch (error) {
97
+ deps.logger.error(`Error in onJobAccount callback: ${error}`);
98
+ throw error;
99
+ }
100
+ }
101
+ deps.logger.debug(`Processed job account ${jobAccount.address.toString()}`);
102
+ }
103
+ /**
104
+ * Handle market account update
105
+ */
106
+ async function handleMarketAccount(marketAccount, onMarketAccount, _isMonitoring) {
107
+ if (onMarketAccount) {
108
+ try {
109
+ await onMarketAccount(transformMarketAccount(marketAccount));
110
+ }
111
+ catch (error) {
112
+ deps.logger.error(`Error in onMarketAccount callback: ${error}`);
113
+ throw error;
114
+ }
115
+ }
116
+ deps.logger.debug(`Processed market account ${marketAccount.address.toString()}`);
117
+ }
118
+ /**
119
+ * Handle run account update
120
+ */
121
+ async function handleRunAccount(runAccount, onRunAccount, _isMonitoring) {
122
+ if (onRunAccount) {
123
+ try {
124
+ await onRunAccount(transformRunAccount(runAccount));
125
+ }
126
+ catch (error) {
127
+ deps.logger.error(`Error in onRunAccount callback: ${error}`);
128
+ throw error;
129
+ }
130
+ }
131
+ deps.logger.debug(`Processed run account ${runAccount.address.toString()}`);
132
+ }
133
+ /**
134
+ * Handle account update using callback functions
135
+ */
136
+ async function handleAccountUpdate(accountData, options, isMonitoring) {
137
+ try {
138
+ const { account, pubkey } = accountData;
139
+ const encodedAccount = parseBase64RpcAccount(pubkey, account);
140
+ const accountType = client.identifyNosanaJobsAccount(encodedAccount);
141
+ switch (accountType) {
142
+ case client.NosanaJobsAccount.JobAccount: {
143
+ const jobAccount = client.decodeJobAccount(encodedAccount);
144
+ await handleJobAccount(jobAccount, options.onJobAccount, isMonitoring);
145
+ break;
146
+ }
147
+ case client.NosanaJobsAccount.MarketAccount: {
148
+ const marketAccount = client.decodeMarketAccount(encodedAccount);
149
+ await handleMarketAccount(marketAccount, options.onMarketAccount, isMonitoring);
150
+ break;
151
+ }
152
+ case client.NosanaJobsAccount.RunAccount: {
153
+ const runAccount = client.decodeRunAccount(encodedAccount);
154
+ await handleRunAccount(runAccount, options.onRunAccount, isMonitoring);
155
+ break;
156
+ }
157
+ default:
158
+ deps.logger.error(`No support yet for account type: ${accountType}`);
159
+ return;
160
+ }
161
+ }
162
+ catch (error) {
163
+ deps.logger.error(`Error in handleAccountUpdate: ${error}`);
164
+ }
165
+ }
166
+ /**
167
+ * Process subscription notifications
168
+ */
169
+ async function processSubscriptionNotifications(notificationIterable, options, isMonitoring) {
170
+ try {
171
+ for await (const notification of notificationIterable) {
172
+ // Check if monitoring should continue
173
+ if (!isMonitoring()) {
174
+ deps.logger.info('Monitoring stopped, exiting subscription processing');
175
+ break;
176
+ }
177
+ try {
178
+ const { value } = notification;
179
+ await handleAccountUpdate(value, options, isMonitoring);
180
+ }
181
+ catch (error) {
182
+ deps.logger.error(`Error handling account update notification: ${error}`);
183
+ if (options.onError) {
184
+ try {
185
+ await options.onError(error instanceof Error ? error : new Error(String(error)));
186
+ }
187
+ catch (callbackError) {
188
+ deps.logger.error(`Error in onError callback: ${callbackError}`);
189
+ }
190
+ }
191
+ }
192
+ }
193
+ }
194
+ catch (error) {
195
+ deps.logger.error(`Subscription error: ${error}`);
196
+ // Throw the error so the calling function can restart the subscription
197
+ throw error;
198
+ }
199
+ }
200
+ return {
201
+ /**
202
+ * Fetch a job account by address
203
+ */
204
+ async get(addr, checkRun = true) {
205
+ try {
206
+ const jobAccount = await client.fetchJobAccount(deps.solana.rpc, addr);
207
+ const job = transformJobAccount(jobAccount);
208
+ if (checkRun && job.state === JobState.QUEUED) {
209
+ // If job is queued, check if there is a run account for the job
210
+ const runs = await this.runs({ job: job.address });
211
+ if (runs.length > 0) {
212
+ const run = runs[0];
213
+ job.state = JobState.RUNNING;
214
+ job.timeStart = run.time;
215
+ job.node = run.node;
216
+ }
217
+ }
218
+ return job;
219
+ }
220
+ catch (err) {
221
+ deps.logger.error(`Failed to fetch job ${err}`);
222
+ throw err;
223
+ }
224
+ },
225
+ /**
226
+ * Fetch a run account by address
227
+ */
228
+ async run(addr) {
229
+ try {
230
+ const runAccount = await client.fetchRunAccount(deps.solana.rpc, addr);
231
+ const run = transformRunAccount(runAccount);
232
+ return run;
233
+ }
234
+ catch (err) {
235
+ deps.logger.error(`Failed to fetch run ${err}`);
236
+ throw err;
237
+ }
238
+ },
239
+ /**
240
+ * Fetch a market account by address
241
+ */
242
+ async market(addr) {
243
+ try {
244
+ const marketAccount = await client.fetchMarketAccount(deps.solana.rpc, addr);
245
+ const market = transformMarketAccount(marketAccount);
246
+ return market;
247
+ }
248
+ catch (err) {
249
+ deps.logger.error(`Failed to fetch market ${err}`);
250
+ throw err;
251
+ }
252
+ },
253
+ /**
254
+ * Fetch multiple job accounts by address
255
+ */
256
+ async multiple(addresses, checkRuns = false) {
257
+ try {
258
+ const jobAccounts = await client.fetchAllJobAccount(deps.solana.rpc, addresses);
259
+ const jobs = jobAccounts.map((jobAccount) => transformJobAccount(jobAccount));
260
+ if (checkRuns) {
261
+ const runs = await this.runs();
262
+ jobs.forEach((job) => {
263
+ if (job.state === JobState.QUEUED) {
264
+ const run = runs.find((run) => run.job === job.address);
265
+ if (run) {
266
+ job.state = JobState.RUNNING;
267
+ job.timeStart = run.time;
268
+ job.node = run.node;
269
+ }
270
+ }
271
+ });
272
+ }
273
+ return jobs;
274
+ }
275
+ catch (err) {
276
+ deps.logger.error(`Failed to fetch job ${err}`);
277
+ throw err;
278
+ }
279
+ },
280
+ /**
281
+ * Fetch all job accounts
282
+ */
283
+ async all(filters, checkRuns = false) {
284
+ try {
285
+ const extraGPAFilters = [];
286
+ if (filters) {
287
+ if (typeof filters.state === 'number') {
288
+ extraGPAFilters.push({
289
+ memcmp: {
290
+ offset: BigInt(208),
291
+ bytes: bs58.encode(Buffer.from([filters.state])),
292
+ encoding: 'base58',
293
+ },
294
+ });
295
+ }
296
+ if (filters.project) {
297
+ extraGPAFilters.push({
298
+ memcmp: {
299
+ offset: BigInt(176),
300
+ bytes: filters.project.toString(),
301
+ encoding: 'base58',
302
+ },
303
+ });
304
+ }
305
+ if (filters.node) {
306
+ extraGPAFilters.push({
307
+ memcmp: {
308
+ offset: BigInt(104),
309
+ bytes: filters.node.toString(),
310
+ encoding: 'base58',
311
+ },
312
+ });
313
+ }
314
+ if (filters.market) {
315
+ extraGPAFilters.push({
316
+ memcmp: {
317
+ offset: BigInt(72),
318
+ bytes: filters.market.toString(),
319
+ encoding: 'base58',
320
+ },
321
+ });
322
+ }
323
+ }
324
+ const getProgramAccountsResponse = await deps.solana.rpc
325
+ .getProgramAccounts(programId, {
326
+ encoding: 'base64',
327
+ filters: [
328
+ {
329
+ memcmp: {
330
+ offset: BigInt(0),
331
+ bytes: bs58.encode(Buffer.from(client.JOB_ACCOUNT_DISCRIMINATOR)),
332
+ encoding: 'base58',
333
+ },
334
+ },
335
+ ...extraGPAFilters,
336
+ ],
337
+ })
338
+ .send();
339
+ const jobs = getProgramAccountsResponse
340
+ .map((result) => {
341
+ try {
342
+ const jobAccount = client.decodeJobAccount(parseBase64RpcAccount(result.pubkey, result.account));
343
+ return transformJobAccount(jobAccount);
344
+ }
345
+ catch (err) {
346
+ deps.logger.error(`Failed to decode job ${err}`);
347
+ return null;
348
+ }
349
+ })
350
+ .filter((account) => account !== null);
351
+ if (checkRuns) {
352
+ const runs = await this.runs();
353
+ jobs.forEach((job) => {
354
+ if (job.state === JobState.QUEUED) {
355
+ const run = runs.find((run) => run.job === job.address);
356
+ if (run) {
357
+ job.state = JobState.RUNNING;
358
+ job.timeStart = run.time;
359
+ job.node = run.node;
360
+ }
361
+ }
362
+ });
363
+ }
364
+ return jobs;
365
+ }
366
+ catch (err) {
367
+ deps.logger.error(`Failed to fetch all jobs ${err}`);
368
+ throw err;
369
+ }
370
+ },
371
+ /**
372
+ * Fetch all run accounts
373
+ */
374
+ async runs(filters) {
375
+ try {
376
+ const extraGPAFilters = [];
377
+ if (filters) {
378
+ if (filters.node) {
379
+ extraGPAFilters.push({
380
+ memcmp: {
381
+ offset: BigInt(40),
382
+ bytes: filters.node.toString(),
383
+ encoding: 'base58',
384
+ },
385
+ });
386
+ }
387
+ if (filters.job) {
388
+ extraGPAFilters.push({
389
+ memcmp: {
390
+ offset: BigInt(8),
391
+ bytes: filters.job.toString(),
392
+ encoding: 'base58',
393
+ },
394
+ });
395
+ }
396
+ }
397
+ const getProgramAccountsResponse = await deps.solana.rpc
398
+ .getProgramAccounts(programId, {
399
+ encoding: 'base64',
400
+ filters: [
401
+ {
402
+ memcmp: {
403
+ offset: BigInt(0),
404
+ bytes: bs58.encode(Buffer.from(client.RUN_ACCOUNT_DISCRIMINATOR)),
405
+ encoding: 'base58',
406
+ },
407
+ },
408
+ ],
409
+ })
410
+ .send();
411
+ const runAccounts = getProgramAccountsResponse
412
+ .map((result) => {
413
+ try {
414
+ const runAccount = client.decodeRunAccount(parseBase64RpcAccount(result.pubkey, result.account));
415
+ return transformRunAccount(runAccount);
416
+ }
417
+ catch (err) {
418
+ deps.logger.error(`Failed to decode run ${err}`);
419
+ return null;
420
+ }
421
+ })
422
+ .filter((account) => account !== null);
423
+ return runAccounts;
424
+ }
425
+ catch (err) {
426
+ deps.logger.error(`Failed to fetch all runs ${err}`);
427
+ throw err;
428
+ }
429
+ },
430
+ /**
431
+ * Fetch all market accounts
432
+ */
433
+ async markets() {
434
+ try {
435
+ const getProgramAccountsResponse = await deps.solana.rpc
436
+ .getProgramAccounts(programId, {
437
+ encoding: 'base64',
438
+ filters: [
439
+ {
440
+ memcmp: {
441
+ offset: BigInt(0),
442
+ bytes: bs58.encode(Buffer.from(client.MARKET_ACCOUNT_DISCRIMINATOR)),
443
+ encoding: 'base58',
444
+ },
445
+ },
446
+ ],
447
+ })
448
+ .send();
449
+ const marketAccounts = getProgramAccountsResponse
450
+ .map((result) => {
451
+ try {
452
+ const marketAccount = client.decodeMarketAccount(parseBase64RpcAccount(result.pubkey, result.account));
453
+ return transformMarketAccount(marketAccount);
454
+ }
455
+ catch (err) {
456
+ deps.logger.error(`Failed to decode market ${err}`);
457
+ return null;
458
+ }
459
+ })
460
+ .filter((account) => account !== null);
461
+ return marketAccounts;
462
+ }
463
+ catch (err) {
464
+ deps.logger.error(`Failed to fetch all markets ${err}`);
465
+ throw err;
466
+ }
467
+ },
468
+ /**
469
+ * Post a new job to the marketplace
470
+ */
471
+ async post(params) {
472
+ const jobKey = await generateKeyPairSigner();
473
+ const runKey = await generateKeyPairSigner();
474
+ const [associatedTokenAddress] = await findAssociatedTokenPda({
475
+ mint: config.nosTokenAddress,
476
+ owner: deps.getWallet().address,
477
+ tokenProgram: TOKEN_PROGRAM_ADDRESS,
478
+ });
479
+ try {
480
+ const staticAccounts = await getStaticAccounts(config, deps.solana, staticAccountsCache);
481
+ // Create the list instruction
482
+ const instruction = client.getListInstruction({
483
+ job: jobKey,
484
+ market: params.market,
485
+ run: runKey,
486
+ user: associatedTokenAddress,
487
+ vault: await deps.solana.pda([params.market, config.nosTokenAddress], staticAccounts.jobsProgram),
488
+ payer: deps.getWallet(),
489
+ rewardsReflection: staticAccounts.rewardsReflection,
490
+ rewardsVault: staticAccounts.rewardsVault,
491
+ authority: deps.getWallet(),
492
+ rewardsProgram: staticAccounts.rewardsProgram,
493
+ ipfsJob: bs58.decode(params.ipfsHash).subarray(2),
494
+ timeout: params.timeout,
495
+ });
496
+ return instruction;
497
+ }
498
+ catch (err) {
499
+ const errorMessage = `Failed to create list instruction: ${err instanceof Error ? err.message : String(err)}`;
500
+ deps.logger.error(errorMessage);
501
+ throw new Error(errorMessage);
502
+ }
503
+ },
504
+ /**
505
+ * Monitor program account updates using callback functions
506
+ * Uses WebSocket subscriptions with automatic restart on failure
507
+ *
508
+ * @example
509
+ * ```typescript
510
+ * // Example: Monitor job accounts and save to file
511
+ * const stopMonitoring = await jobsProgram.monitor({
512
+ * onJobAccount: async (jobAccount) => {
513
+ * console.log('Job updated:', jobAccount.address.toString());
514
+ * // Save to database, file, or process as needed
515
+ * },
516
+ * onRunAccount: async (runAccount) => {
517
+ * console.log('Run updated:', runAccount.address.toString());
518
+ * },
519
+ * onError: async (error, accountType) => {
520
+ * console.error('Error processing account:', error, accountType);
521
+ * }
522
+ * });
523
+ *
524
+ * // Stop monitoring when done
525
+ * stopMonitoring();
526
+ * ```
527
+ *
528
+ * @param options Configuration options for monitoring
529
+ * @returns A function to stop monitoring
530
+ */
531
+ async monitor(options = {}) {
532
+ const { onJobAccount, onMarketAccount, onRunAccount, onError } = options;
533
+ try {
534
+ deps.logger.info(`Starting to monitor job program account updates for program: ${programId}`);
535
+ let abortController = null;
536
+ let isMonitoring = true;
537
+ // Function to stop all monitoring
538
+ const stopMonitoring = () => {
539
+ isMonitoring = false;
540
+ if (abortController) {
541
+ abortController.abort();
542
+ }
543
+ deps.logger.info(`Stopped monitoring job program account updates`);
544
+ };
545
+ // Function to start/restart subscription with retry logic
546
+ const startSubscription = async () => {
547
+ while (isMonitoring) {
548
+ try {
549
+ deps.logger.info('Attempting to establish WebSocket subscription...');
550
+ abortController = new AbortController();
551
+ const subscriptionIterable = await setupSubscription(abortController);
552
+ deps.logger.info('Successfully established WebSocket subscription');
553
+ // Start processing subscription notifications
554
+ await processSubscriptionNotifications(subscriptionIterable, { onJobAccount, onMarketAccount, onRunAccount, onError }, () => isMonitoring);
555
+ }
556
+ catch (error) {
557
+ deps.logger.warn(`WebSocket subscription failed: ${error}`);
558
+ // Clean up current subscription
559
+ if (abortController) {
560
+ abortController.abort();
561
+ abortController = null;
562
+ }
563
+ if (isMonitoring) {
564
+ deps.logger.info('Retrying WebSocket subscription in 5 seconds...');
565
+ await new Promise((resolve) => setTimeout(resolve, 5000));
566
+ }
567
+ }
568
+ }
569
+ };
570
+ // Start the subscription loop
571
+ startSubscription().catch((error) => {
572
+ deps.logger.error(`Failed to start subscription loop: ${error}`);
573
+ });
574
+ deps.logger.info(`Successfully started monitoring job program account updates`);
575
+ return stopMonitoring;
576
+ }
577
+ catch (error) {
578
+ deps.logger.error(`Failed to start monitoring job program accounts: ${error}`);
579
+ throw new NosanaError('Failed to start monitoring job program accounts', ErrorCodes.RPC_ERROR, error);
580
+ }
581
+ },
582
+ };
583
+ }
584
+ //# sourceMappingURL=JobsProgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JobsProgram.js","sourceRoot":"","sources":["../../../src/services/programs/JobsProgram.ts"],"names":[],"mappings":"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"}