@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,41 @@
1
+ import { Address } from '@solana/kit';
2
+ import { Logger } from '../logger/Logger.js';
3
+ export interface TokenAccount {
4
+ pubkey: Address;
5
+ owner: Address;
6
+ mint: Address;
7
+ amount: bigint;
8
+ decimals: number;
9
+ }
10
+ export interface TokenAccountWithBalance extends TokenAccount {
11
+ uiAmount: number;
12
+ }
13
+ import type { SolanaService } from './SolanaService.js';
14
+ /**
15
+ * Dependencies for TokenService
16
+ */
17
+ export interface TokenServiceDeps {
18
+ logger: Logger;
19
+ solana: SolanaService;
20
+ }
21
+ /**
22
+ * Config for TokenService
23
+ */
24
+ export interface TokenServiceConfig {
25
+ tokenAddress: Address;
26
+ }
27
+ /**
28
+ * TokenService interface
29
+ */
30
+ export interface TokenService {
31
+ getAllTokenHolders(options?: {
32
+ includeZeroBalance?: boolean;
33
+ excludePdaAccounts?: boolean;
34
+ }): Promise<TokenAccountWithBalance[]>;
35
+ getTokenAccountForAddress(owner: string | Address): Promise<TokenAccountWithBalance | null>;
36
+ getBalance(owner: string | Address): Promise<number>;
37
+ }
38
+ /**
39
+ * Creates a TokenService instance.
40
+ */
41
+ export declare function createTokenService(deps: TokenServiceDeps, config: TokenServiceConfig): TokenService;
@@ -0,0 +1,136 @@
1
+ import { address } from '@solana/kit';
2
+ import { NosanaError, ErrorCodes } from '../errors/NosanaError.js';
3
+ import { TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';
4
+ // Standard SPL token account size
5
+ const TOKEN_ACCOUNT_SIZE = 165;
6
+ // Offset of mint address in token account data structure
7
+ const MINT_OFFSET = 0;
8
+ /**
9
+ * Creates a TokenService instance.
10
+ */
11
+ export function createTokenService(deps, config) {
12
+ return {
13
+ /**
14
+ * Retrieve all token accounts for all token holders
15
+ * Uses a single RPC call to fetch all accounts holding the token
16
+ *
17
+ * @param options - Optional configuration
18
+ * @param options.includeZeroBalance - Whether to include accounts with zero balance (default: false)
19
+ * @param options.excludePdaAccounts - Whether to exclude PDA (Program Derived Address) accounts owned by smart contracts (default: false)
20
+ * @returns Array of token accounts with their balances
21
+ */
22
+ async getAllTokenHolders(options) {
23
+ try {
24
+ const tokenMint = config.tokenAddress;
25
+ deps.logger.debug(`Fetching all token holders for mint: ${tokenMint}`);
26
+ // Use getProgramAccounts to fetch all token accounts for the token mint
27
+ const accounts = await deps.solana.rpc
28
+ .getProgramAccounts(TOKEN_PROGRAM_ADDRESS, {
29
+ encoding: 'jsonParsed',
30
+ filters: [
31
+ {
32
+ dataSize: BigInt(TOKEN_ACCOUNT_SIZE),
33
+ },
34
+ {
35
+ memcmp: {
36
+ offset: BigInt(MINT_OFFSET),
37
+ bytes: tokenMint.toString(),
38
+ encoding: 'base58',
39
+ },
40
+ },
41
+ ],
42
+ })
43
+ .send();
44
+ deps.logger.info(`Found ${accounts.length} token accounts`);
45
+ // Parse the response
46
+ const allAccounts = accounts.map((accountInfo) => {
47
+ const parsed = accountInfo.account.data.parsed.info;
48
+ return {
49
+ pubkey: accountInfo.pubkey,
50
+ owner: parsed.owner,
51
+ mint: parsed.mint,
52
+ amount: BigInt(parsed.tokenAmount.amount),
53
+ decimals: parsed.tokenAmount.decimals,
54
+ uiAmount: parsed.tokenAmount.uiAmount ?? 0,
55
+ };
56
+ });
57
+ // Apply filters
58
+ const includeZeroBalance = options?.includeZeroBalance ?? false;
59
+ const excludePdaAccounts = options?.excludePdaAccounts ?? false;
60
+ let filteredAccounts = allAccounts;
61
+ // Filter out zero balance accounts unless explicitly included
62
+ if (!includeZeroBalance) {
63
+ filteredAccounts = filteredAccounts.filter((account) => account.uiAmount > 0);
64
+ }
65
+ // Filter out PDA accounts (where token account equals owner, indicating smart contract ownership)
66
+ if (excludePdaAccounts) {
67
+ const beforePdaFilter = filteredAccounts.length;
68
+ filteredAccounts = filteredAccounts.filter((account) => account.pubkey !== account.owner);
69
+ const pdaCount = beforePdaFilter - filteredAccounts.length;
70
+ deps.logger.debug(`Filtered out ${pdaCount} PDA accounts`);
71
+ }
72
+ const filterInfo = [];
73
+ if (!includeZeroBalance)
74
+ filterInfo.push('excluding zero balances');
75
+ if (excludePdaAccounts)
76
+ filterInfo.push('excluding PDA accounts');
77
+ const filterText = filterInfo.length > 0 ? ` (${filterInfo.join(', ')})` : '';
78
+ deps.logger.info(`Returning ${filteredAccounts.length} token holders${filterText}`);
79
+ return filteredAccounts;
80
+ }
81
+ catch (error) {
82
+ deps.logger.error(`Failed to fetch token holders: ${error}`);
83
+ throw new NosanaError('Failed to fetch token holders', ErrorCodes.RPC_ERROR, error);
84
+ }
85
+ },
86
+ /**
87
+ * Retrieve the token account for a specific owner address
88
+ *
89
+ * @param owner - The owner address to query
90
+ * @returns The token account with balance, or null if no account exists
91
+ */
92
+ async getTokenAccountForAddress(owner) {
93
+ try {
94
+ const ownerAddr = typeof owner === 'string' ? address(owner) : owner;
95
+ const tokenMint = config.tokenAddress;
96
+ deps.logger.debug(`Fetching token account for owner: ${ownerAddr}`);
97
+ // Use getTokenAccountsByOwner to fetch token accounts for this owner filtered by token mint
98
+ const response = await deps.solana.rpc
99
+ .getTokenAccountsByOwner(ownerAddr, { mint: tokenMint }, { encoding: 'jsonParsed' })
100
+ .send();
101
+ if (response.value.length === 0) {
102
+ deps.logger.debug(`No token account found for owner: ${ownerAddr}`);
103
+ return null;
104
+ }
105
+ // Typically there should only be one token account per owner per mint
106
+ const accountInfo = response.value[0];
107
+ const parsed = accountInfo.account.data.parsed.info;
108
+ deps.logger.info(`Found token account for owner ${ownerAddr}: balance = ${parsed.tokenAmount.uiAmount}`);
109
+ return {
110
+ pubkey: accountInfo.pubkey,
111
+ owner: parsed.owner,
112
+ mint: parsed.mint,
113
+ amount: BigInt(parsed.tokenAmount.amount),
114
+ decimals: parsed.tokenAmount.decimals,
115
+ uiAmount: parsed.tokenAmount.uiAmount ?? 0,
116
+ };
117
+ }
118
+ catch (error) {
119
+ deps.logger.error(`Failed to fetch token account for owner: ${error}`);
120
+ throw new NosanaError('Failed to fetch token account', ErrorCodes.RPC_ERROR, error);
121
+ }
122
+ },
123
+ /**
124
+ * Get the token balance for a specific owner address
125
+ * Convenience method that returns just the balance
126
+ *
127
+ * @param owner - The owner address to query
128
+ * @returns The token balance as a UI amount (with decimals), or 0 if no account exists
129
+ */
130
+ async getBalance(owner) {
131
+ const account = await this.getTokenAccountForAddress(owner);
132
+ return account ? account.uiAmount : 0;
133
+ },
134
+ };
135
+ }
136
+ //# sourceMappingURL=TokenService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TokenService.js","sourceRoot":"","sources":["../../src/services/TokenService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ import { Address } from '@solana/kit';
2
+ import type { ProgramDeps } from '../../types.js';
3
+ import * as programClient from '../../generated_clients/jobs/index.js';
4
+ import { ConvertTypesForDb } from '../../utils/index.js';
5
+ export declare enum JobState {
6
+ QUEUED = 0,
7
+ RUNNING = 1,
8
+ COMPLETED = 2,
9
+ STOPPED = 3
10
+ }
11
+ export declare enum MarketQueueType {
12
+ JOB_QUEUE = 0,
13
+ NODE_QUEUE = 1
14
+ }
15
+ export type Job = Omit<ConvertTypesForDb<programClient.JobAccountArgs>, 'state'> & {
16
+ address: Address;
17
+ state: JobState;
18
+ };
19
+ export type Market = Omit<ConvertTypesForDb<programClient.MarketAccountArgs>, 'queueType'> & {
20
+ address: Address;
21
+ queueType: MarketQueueType;
22
+ };
23
+ export type Run = ConvertTypesForDb<programClient.RunAccountArgs> & {
24
+ address: Address;
25
+ };
26
+ /**
27
+ * Jobs program interface
28
+ */
29
+ export interface JobsProgram {
30
+ /**
31
+ * Fetch a job account by address
32
+ */
33
+ get(addr: Address, checkRun?: boolean): Promise<Job>;
34
+ /**
35
+ * Fetch a run account by address
36
+ */
37
+ run(addr: Address): Promise<Run>;
38
+ /**
39
+ * Fetch a market account by address
40
+ */
41
+ market(addr: Address): Promise<Market>;
42
+ /**
43
+ * Fetch multiple job accounts by address
44
+ */
45
+ multiple(addresses: Address[], checkRuns?: boolean): Promise<Job[]>;
46
+ /**
47
+ * Fetch all job accounts
48
+ */
49
+ all(filters?: {
50
+ state?: JobState;
51
+ market?: Address;
52
+ node?: Address;
53
+ project?: Address;
54
+ }, checkRuns?: boolean): Promise<Job[]>;
55
+ /**
56
+ * Fetch all run accounts
57
+ */
58
+ runs(filters?: {
59
+ node?: Address;
60
+ job?: Address;
61
+ }): Promise<Run[]>;
62
+ /**
63
+ * Fetch all market accounts
64
+ */
65
+ markets(): Promise<Market[]>;
66
+ /**
67
+ * Post a new job to the marketplace
68
+ */
69
+ post(params: {
70
+ market: Address;
71
+ timeout: number | bigint;
72
+ ipfsHash: string;
73
+ node?: Address;
74
+ }): Promise<ReturnType<typeof programClient.getListInstruction>>;
75
+ /**
76
+ * Monitor program account updates using callback functions
77
+ */
78
+ monitor(options?: {
79
+ onJobAccount?: (jobAccount: Job) => Promise<void> | void;
80
+ onMarketAccount?: (marketAccount: Market) => Promise<void> | void;
81
+ onRunAccount?: (runAccount: Run) => Promise<void> | void;
82
+ onError?: (error: Error, accountType?: string) => Promise<void> | void;
83
+ }): Promise<() => void>;
84
+ }
85
+ /**
86
+ * Creates a new JobsProgram instance.
87
+ *
88
+ * @param deps - Program dependencies (config, logger, solana service, wallet getter)
89
+ * @returns A JobsProgram instance with methods to interact with the jobs program
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * import { createJobsProgram } from '@nosana/kit';
94
+ *
95
+ * const jobsProgram = createJobsProgram({
96
+ * config,
97
+ * logger,
98
+ * solana,
99
+ * getWallet,
100
+ * });
101
+ *
102
+ * const job = await jobsProgram.get('job-address');
103
+ * ```
104
+ */
105
+ import type { ProgramConfig } from '../../config/types.js';
106
+ export declare function createJobsProgram(deps: ProgramDeps, config: ProgramConfig): JobsProgram;