@nosana/kit 1.0.10 → 2.0.9

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
package/dist/index.d.ts CHANGED
@@ -1,38 +1,19 @@
1
- import { ClientConfig, NosanaNetwork, PartialClientConfig, WalletConfig } from './config/index.js';
2
- import { Logger } from './logger/Logger.js';
3
- import { JobsProgram } from './programs/JobsProgram.js';
4
- import { StakeProgram } from './programs/StakeProgram.js';
5
- import { MerkleDistributorProgram } from './programs/MerkleDistributorProgram.js';
6
- import { SolanaService } from './services/SolanaService.js';
7
- import { NosService } from './services/NosService.js';
8
- import { IPFS } from './ipfs/IPFS.js';
9
- import { KeyPairSigner } from 'gill';
10
- export declare class NosanaClient {
11
- readonly config: ClientConfig;
12
- readonly jobs: JobsProgram;
13
- readonly stake: StakeProgram;
14
- readonly merkleDistributor: MerkleDistributorProgram;
15
- readonly solana: SolanaService;
16
- readonly nos: NosService;
17
- readonly ipfs: IPFS;
18
- readonly logger: Logger;
19
- wallet: KeyPairSigner | undefined;
20
- constructor(network?: NosanaNetwork, customConfig?: PartialClientConfig);
21
- setWallet(wallet: WalletConfig): Promise<KeyPairSigner | undefined>;
22
- }
1
+ export { createNosanaClient, type NosanaClient } from './NosanaClient.js';
2
+ export * from '@nosana/types';
3
+ export type { Wallet } from './types.js';
23
4
  export * from './config/index.js';
24
5
  export * from './errors/NosanaError.js';
25
6
  export * from './logger/Logger.js';
26
- export { JobsProgram, JobState, MarketQueueType } from './programs/JobsProgram.js';
27
- export type { Job, Market, Run } from './programs/JobsProgram.js';
28
- export { StakeProgram } from './programs/StakeProgram.js';
29
- export type { Stake } from './programs/StakeProgram.js';
30
- export { MerkleDistributorProgram, ClaimTarget } from './programs/MerkleDistributorProgram.js';
31
- export type { MerkleDistributor, ClaimStatus } from './programs/MerkleDistributorProgram.js';
32
- export * from './ipfs/IPFS.js';
33
- export { NosService } from './services/NosService.js';
34
- export type { TokenAccount, TokenAccountWithBalance } from './services/NosService.js';
7
+ export { createJobsProgram, type JobsProgram, JobState, MarketQueueType, } from './services/programs/JobsProgram.js';
8
+ export type { Job, Market, Run } from './services/programs/JobsProgram.js';
9
+ export { createStakeProgram, type StakeProgram } from './services/programs/StakeProgram.js';
10
+ export type { Stake } from './services/programs/StakeProgram.js';
11
+ export { createMerkleDistributorProgram, type MerkleDistributorProgram, ClaimTarget, } from './services/programs/MerkleDistributorProgram.js';
12
+ export type { MerkleDistributor, ClaimStatus, } from './services/programs/MerkleDistributorProgram.js';
13
+ export { ClaimStatusNotFoundError } from './services/programs/MerkleDistributorProgram.js';
14
+ export { solBytesArrayToIpfsHash, ipfsHashToSolBytesArray } from '@nosana/ipfs';
15
+ export { createTokenService, type TokenService } from './services/TokenService.js';
16
+ export type { TokenAccount, TokenAccountWithBalance } from './services/TokenService.js';
35
17
  export * as JobsClient from './generated_clients/jobs/index.js';
36
18
  export * as StakingClient from './generated_clients/staking/index.js';
37
19
  export * as MerkleDistributorClient from './generated_clients/merkle_distributor/index.js';
38
- export * from 'gill';
package/dist/index.js CHANGED
@@ -1,48 +1,24 @@
1
- import { getNosanaConfig, NosanaNetwork, } from './config/index.js';
2
- import { Logger } from './logger/Logger.js';
3
- import { JobsProgram } from './programs/JobsProgram.js';
4
- import { StakeProgram } from './programs/StakeProgram.js';
5
- import { MerkleDistributorProgram } from './programs/MerkleDistributorProgram.js';
6
- import { SolanaService } from './services/SolanaService.js';
7
- import { NosService } from './services/NosService.js';
8
- import { IPFS } from './ipfs/IPFS.js';
9
- import { convertWalletConfigToKeyPairSigner } from './utils/walletConverter.js';
10
- export class NosanaClient {
11
- constructor(network = NosanaNetwork.MAINNET, customConfig) {
12
- this.config = getNosanaConfig(network, customConfig);
13
- if (this.config.wallet) {
14
- this.setWallet(this.config.wallet);
15
- }
16
- this.jobs = new JobsProgram(this);
17
- this.stake = new StakeProgram(this);
18
- this.merkleDistributor = new MerkleDistributorProgram(this);
19
- this.logger = Logger.getInstance();
20
- this.solana = new SolanaService(this);
21
- this.nos = new NosService(this);
22
- this.ipfs = new IPFS(this.config.ipfs);
23
- }
24
- async setWallet(wallet) {
25
- this.wallet = await convertWalletConfigToKeyPairSigner(wallet);
26
- return this.wallet;
27
- }
28
- }
1
+ // Export the main client
2
+ export { createNosanaClient } from './NosanaClient.js';
3
+ // Export types
4
+ export * from '@nosana/types';
29
5
  // Export types and configuration
30
6
  export * from './config/index.js';
31
7
  export * from './errors/NosanaError.js';
32
8
  export * from './logger/Logger.js';
33
9
  // Export JobsProgram and related types
34
- export { JobsProgram, JobState, MarketQueueType } from './programs/JobsProgram.js';
10
+ export { createJobsProgram, JobState, MarketQueueType, } from './services/programs/JobsProgram.js';
35
11
  // Export StakeProgram and related types
36
- export { StakeProgram } from './programs/StakeProgram.js';
12
+ export { createStakeProgram } from './services/programs/StakeProgram.js';
37
13
  // Export MerkleDistributorProgram and related types
38
- export { MerkleDistributorProgram, ClaimTarget } from './programs/MerkleDistributorProgram.js';
39
- // Export IPFS utilities
40
- export * from './ipfs/IPFS.js';
41
- // Export NOS token service
42
- export { NosService } from './services/NosService.js';
14
+ export { createMerkleDistributorProgram, ClaimTarget, } from './services/programs/MerkleDistributorProgram.js';
15
+ export { ClaimStatusNotFoundError } from './services/programs/MerkleDistributorProgram.js';
16
+ // Export IPFS utilities from @nosana/ipfs
17
+ export { solBytesArrayToIpfsHash, ipfsHashToSolBytesArray } from '@nosana/ipfs';
18
+ // Export token service
19
+ export { createTokenService } from './services/TokenService.js';
43
20
  // Export generated clients under namespaces to avoid naming conflicts
44
21
  export * as JobsClient from './generated_clients/jobs/index.js';
45
22
  export * as StakingClient from './generated_clients/staking/index.js';
46
23
  export * as MerkleDistributorClient from './generated_clients/merkle_distributor/index.js';
47
- // Export dependencies
48
- export * from 'gill';
24
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,EAAE,kBAAkB,EAAqB,MAAM,mBAAmB,CAAC;AAE1E,eAAe;AACf,cAAc,eAAe,CAAC;AAG9B,iCAAiC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AAEnC,uCAAuC;AACvC,OAAO,EACL,iBAAiB,EAEjB,QAAQ,EACR,eAAe,GAChB,MAAM,oCAAoC,CAAC;AAG5C,wCAAwC;AACxC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,qCAAqC,CAAC;AAG5F,oDAAoD;AACpD,OAAO,EACL,8BAA8B,EAE9B,WAAW,GACZ,MAAM,iDAAiD,CAAC;AAKzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iDAAiD,CAAC;AAE3F,0CAA0C;AAC1C,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAEhF,uBAAuB;AACvB,OAAO,EAAE,kBAAkB,EAAqB,MAAM,4BAA4B,CAAC;AAGnF,sEAAsE;AACtE,OAAO,KAAK,UAAU,MAAM,mCAAmC,CAAC;AAChE,OAAO,KAAK,aAAa,MAAM,sCAAsC,CAAC;AACtE,OAAO,KAAK,uBAAuB,MAAM,iDAAiD,CAAC"}
@@ -1,4 +1,4 @@
1
- export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
1
+ export type LogLevel = 'none' | 'error' | 'warn' | 'info' | 'debug';
2
2
  export interface LoggerOptions {
3
3
  level?: LogLevel;
4
4
  prefix?: string;
@@ -6,9 +6,9 @@ export interface LoggerOptions {
6
6
  }
7
7
  export declare class Logger {
8
8
  private static instance;
9
- private level;
10
- private prefix;
11
- private enabled;
9
+ level: LogLevel;
10
+ prefix: string;
11
+ enabled: boolean;
12
12
  private constructor();
13
13
  static getInstance(options?: LoggerOptions): Logger;
14
14
  private shouldLog;
@@ -16,10 +16,14 @@ export class Logger {
16
16
  return Logger.instance;
17
17
  }
18
18
  shouldLog(messageLevel) {
19
- if (!this.enabled)
19
+ if (!this.enabled || this.level === 'none')
20
20
  return false;
21
+ // Levels ordered from most verbose (debug) to least verbose (error)
22
+ // If level is 'info', we log 'info', 'warn', 'error' (index >= 2)
21
23
  const levels = ['debug', 'info', 'warn', 'error'];
22
- return levels.indexOf(messageLevel) >= levels.indexOf(this.level);
24
+ const currentLevelIndex = levels.indexOf(this.level);
25
+ const messageLevelIndex = levels.indexOf(messageLevel);
26
+ return messageLevelIndex >= currentLevelIndex;
23
27
  }
24
28
  formatMessage(level, message) {
25
29
  return `${this.prefix} [${level.toUpperCase()}] ${message}`;
@@ -57,3 +61,4 @@ export class Logger {
57
61
  this.enabled = false;
58
62
  }
59
63
  }
64
+ //# sourceMappingURL=Logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../src/logger/Logger.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,MAAM;IAMjB,YAAoB,OAAuB;QAJpC,UAAK,GAAa,MAAM,CAAC;QACzB,WAAM,GAAW,UAAU,CAAC;QAC5B,YAAO,GAAY,IAAI,CAAC;QAG7B,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;YACzC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC;YAC5C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC;QACjD,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,WAAW,CAAC,OAAuB;QAC/C,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;YACrB,MAAM,CAAC,QAAQ,GAAG,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;QACD,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IAEO,SAAS,CAAC,YAAuC;QACvD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM;YAAE,OAAO,KAAK,CAAC;QACzD,oEAAoE;QACpE,kEAAkE;QAClE,MAAM,MAAM,GAAgC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/E,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAkC,CAAC,CAAC;QAClF,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACvD,OAAO,iBAAiB,IAAI,iBAAiB,CAAC;IAChD,CAAC;IAEO,aAAa,CAAC,KAAe,EAAE,OAAe;QACpD,OAAO,GAAG,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,WAAW,EAAE,KAAK,OAAO,EAAE,CAAC;IAC9D,CAAC;IAEM,KAAK,CAAC,OAAe;QAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAEM,IAAI,CAAC,OAAe;QACzB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEM,IAAI,CAAC,OAAe;QACzB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,OAAe;QAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACtD,CAAC;IACH,CAAC;IAEM,QAAQ,CAAC,KAAe;QAC7B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAEM,SAAS,CAAC,MAAc;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAEM,MAAM;QACX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;IACtB,CAAC;IAEM,OAAO;QACZ,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACvB,CAAC;CACF"}
@@ -1,29 +1,52 @@
1
- import { Address, SolanaClient, Signature, IInstruction, TransactionMessageWithBlockhashLifetime, CompilableTransactionMessage, FullySignedTransaction, TransactionWithBlockhashLifetime } from 'gill';
2
- import { NosanaClient } from '../index.js';
3
- export declare class SolanaService {
4
- private readonly sdk;
5
- readonly rpc: SolanaClient['rpc'];
6
- readonly rpcSubscriptions: SolanaClient['rpcSubscriptions'];
7
- readonly sendAndConfirmTransaction: SolanaClient['sendAndConfirmTransaction'];
8
- constructor(sdk: NosanaClient);
9
- pda(seeds: Array<Address | string>, programId: Address): Promise<Address>;
10
- getBalance(addressStr: string | Address): Promise<bigint>;
11
- getLatestBlockhash(): Promise<Readonly<{
12
- blockhash: import("gill").Blockhash;
13
- lastValidBlockHeight: bigint;
14
- }>>;
15
- /**
16
- * Type guard to check if the input is a transaction
17
- */
18
- private isTransaction;
19
- /**
20
- * Type guard to check if the input is a signed transaction
21
- */
22
- private isSignedTransaction;
1
+ import { createSolanaRpc, createSolanaRpcSubscriptions, Address, Signature, Instruction, TransactionMessageWithBlockhashLifetime, sendAndConfirmTransactionFactory, TransactionMessageWithFeePayer, TransactionMessage, SendableTransaction, Transaction, BaseTransactionMessage, TransactionSigner, TransactionWithBlockhashLifetime } from '@solana/kit';
2
+ import { estimateComputeUnitLimitFactory } from '@solana-program/compute-budget';
3
+ import { Logger } from '../logger/Logger.js';
4
+ import { Wallet } from '../types.js';
5
+ import { SolanaConfig } from '../config/types.js';
6
+ /**
7
+ * Factory function to create an estimateAndSetComputeUnitLimit function
8
+ * that estimates compute units and adds the set compute unit limit instruction
9
+ */
10
+ declare function estimateAndSetComputeUnitLimitFactory(...params: Parameters<typeof estimateComputeUnitLimitFactory>): <T extends BaseTransactionMessage & TransactionMessageWithFeePayer>(transactionMessage: T) => Promise<Omit<import("@solana/transaction-messages").ExcludeTransactionMessageWithinSizeLimit<T>, "instructions"> & {
11
+ readonly instructions: readonly [...T["instructions"], import("@solana-program/compute-budget").SetComputeUnitLimitInstruction<Address, []>];
12
+ }>;
13
+ /**
14
+ * Dependencies for SolanaService
15
+ */
16
+ export interface SolanaServiceDeps {
17
+ logger: Logger;
18
+ getWallet: () => Wallet | undefined;
19
+ }
20
+ /**
21
+ * Solana service interface
22
+ */
23
+ export interface SolanaService {
24
+ readonly config: SolanaConfig;
25
+ readonly rpc: ReturnType<typeof createSolanaRpc>;
26
+ readonly rpcSubscriptions: ReturnType<typeof createSolanaRpcSubscriptions>;
27
+ readonly sendAndConfirmTransaction: ReturnType<typeof sendAndConfirmTransactionFactory>;
28
+ readonly estimateAndSetComputeUnitLimit: ReturnType<typeof estimateAndSetComputeUnitLimitFactory>;
23
29
  /**
24
- * Create, sign, and send a transaction with proper logging and error handling
25
- * @param instructionsOrTransaction Single instruction, array of instructions, or pre-built transaction
26
- * @returns The transaction signature
30
+ * Optional fee payer for transactions. If set, will be used as fallback when no feePayer is provided in options.
31
+ * Set this property directly to configure the fee payer.
27
32
  */
28
- send(instructionsOrTransaction: IInstruction | IInstruction[] | (CompilableTransactionMessage & TransactionMessageWithBlockhashLifetime) | (FullySignedTransaction & TransactionWithBlockhashLifetime)): Promise<Signature>;
33
+ feePayer: TransactionSigner | undefined;
34
+ pda(seeds: Array<Address | string>, programId: Address): Promise<Address>;
35
+ getBalance(addressStr?: string | Address): Promise<bigint>;
36
+ buildTransaction(instructions: Instruction | Instruction[], options?: {
37
+ feePayer?: TransactionSigner;
38
+ }): Promise<TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithBlockhashLifetime>;
39
+ signTransaction(transactionMessage: TransactionMessage & TransactionMessageWithFeePayer & TransactionMessageWithBlockhashLifetime): Promise<SendableTransaction & Transaction & TransactionWithBlockhashLifetime>;
40
+ sendTransaction(transaction: SendableTransaction & Transaction & TransactionWithBlockhashLifetime, options?: {
41
+ commitment?: 'processed' | 'confirmed' | 'finalized';
42
+ }): Promise<Signature>;
43
+ buildSignAndSend(instructions: Instruction | Instruction[], options?: {
44
+ feePayer?: TransactionSigner;
45
+ commitment?: 'processed' | 'confirmed' | 'finalized';
46
+ }): Promise<Signature>;
29
47
  }
48
+ /**
49
+ * Creates a Solana service instance.
50
+ */
51
+ export declare function createSolanaService(deps: SolanaServiceDeps, config: SolanaConfig): SolanaService;
52
+ export {};
@@ -1,144 +1,202 @@
1
- import { createSolanaClient, address, getProgramDerivedAddress, getAddressEncoder, createTransaction, signTransactionMessageWithSigners, getExplorerLink, getSignatureFromTransaction, } from 'gill';
1
+ import { createSolanaRpc, createSolanaRpcSubscriptions, address, getProgramDerivedAddress, getAddressEncoder, createTransactionMessage, signTransactionMessageWithSigners, getSignatureFromTransaction, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, sendAndConfirmTransactionFactory, appendTransactionMessageInstructions, pipe, assertIsSendableTransaction, } from '@solana/kit';
2
+ import { estimateComputeUnitLimitFactory, getSetComputeUnitLimitInstruction, } from '@solana-program/compute-budget';
2
3
  import { NosanaError, ErrorCodes } from '../errors/NosanaError.js';
3
- export class SolanaService {
4
- constructor(sdk) {
5
- this.sdk = sdk;
6
- const rpcEndpoint = this.sdk.config.solana.rpcEndpoint;
7
- if (!rpcEndpoint)
8
- throw new NosanaError('RPC URL is required', ErrorCodes.INVALID_CONFIG);
9
- const { rpc, rpcSubscriptions, sendAndConfirmTransaction } = createSolanaClient({
10
- urlOrMoniker: rpcEndpoint,
11
- });
12
- this.rpc = rpc;
13
- this.rpcSubscriptions = rpcSubscriptions;
14
- this.sendAndConfirmTransaction = sendAndConfirmTransaction;
4
+ /**
5
+ * Factory function to create an estimateAndSetComputeUnitLimit function
6
+ * that estimates compute units and adds the set compute unit limit instruction
7
+ */
8
+ function estimateAndSetComputeUnitLimitFactory(...params) {
9
+ const estimateComputeUnitLimit = estimateComputeUnitLimitFactory(...params);
10
+ return async (transactionMessage) => {
11
+ const computeUnitsEstimate = await estimateComputeUnitLimit(transactionMessage);
12
+ return appendTransactionMessageInstructions([getSetComputeUnitLimitInstruction({ units: computeUnitsEstimate })], transactionMessage);
13
+ };
14
+ }
15
+ /**
16
+ * Creates a Solana service instance.
17
+ */
18
+ export function createSolanaService(deps, config) {
19
+ if (!config.rpcEndpoint) {
20
+ throw new NosanaError('RPC URL is required', ErrorCodes.INVALID_CONFIG);
15
21
  }
16
- async pda(seeds, programId) {
17
- const addressEncoder = getAddressEncoder();
18
- const [pda] = await getProgramDerivedAddress({
19
- programAddress: programId,
20
- seeds: seeds.map((seed) => {
21
- // Address is a branded string type, so typeof will return 'string'
22
- // We need to encode Address types to bytes for PDA seeds
23
- // Try to encode if it looks like an address (base58, 32-44 chars), otherwise pass as-is
24
- if (typeof seed === 'string') {
25
- // Check if it's likely an address (base58 encoded addresses are 32-44 chars)
26
- // Short strings like 'ClaimStatus' should be passed as-is
27
- if (seed.length >= 32 && seed.length <= 44) {
28
- try {
29
- // Try to encode as Address - if it's a valid address, this will work
30
- return addressEncoder.encode(seed);
31
- }
32
- catch {
33
- // If encoding fails, it's not a valid address, pass as-is (e.g., 'ClaimStatus')
34
- return seed;
22
+ const rpc = createSolanaRpc(config.rpcEndpoint);
23
+ // Use wsEndpoint if provided, otherwise fall back to rpcEndpoint
24
+ const rpcSubscriptions = createSolanaRpcSubscriptions(config.wsEndpoint ?? config.rpcEndpoint);
25
+ const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({
26
+ rpc,
27
+ rpcSubscriptions,
28
+ });
29
+ // Create a function to estimate and set the compute unit limit
30
+ const estimateAndSetComputeUnitLimit = estimateAndSetComputeUnitLimitFactory({ rpc });
31
+ // Store feePayer in a mutable variable, initialized from config
32
+ let feePayer = config.feePayer;
33
+ return {
34
+ config,
35
+ rpc,
36
+ rpcSubscriptions,
37
+ sendAndConfirmTransaction,
38
+ estimateAndSetComputeUnitLimit,
39
+ get feePayer() {
40
+ return feePayer;
41
+ },
42
+ set feePayer(value) {
43
+ feePayer = value;
44
+ },
45
+ async pda(seeds, programId) {
46
+ const addressEncoder = getAddressEncoder();
47
+ const [pda] = await getProgramDerivedAddress({
48
+ programAddress: programId,
49
+ seeds: seeds.map((seed) => {
50
+ // Address is a branded string type, so typeof will return 'string'
51
+ // We need to encode Address types to bytes for PDA seeds
52
+ // Try to encode if it looks like an address (base58, 32-44 chars), otherwise pass as-is
53
+ if (typeof seed === 'string') {
54
+ // Check if it's likely an address (base58 encoded addresses are 32-44 chars)
55
+ // Short strings like 'ClaimStatus' should be passed as-is
56
+ if (seed.length >= 32 && seed.length <= 44) {
57
+ try {
58
+ // Try to encode as Address - if it's a valid address, this will work
59
+ return addressEncoder.encode(seed);
60
+ }
61
+ catch {
62
+ // If encoding fails, it's not a valid address, pass as-is (e.g., 'ClaimStatus')
63
+ return seed;
64
+ }
35
65
  }
66
+ // Short strings pass as-is
67
+ return seed;
36
68
  }
37
- // Short strings pass as-is
38
- return seed;
39
- }
40
- // Non-string types should be encoded
41
- return addressEncoder.encode(seed);
42
- }),
43
- });
44
- return pda;
45
- }
46
- async getBalance(addressStr) {
47
- try {
48
- this.sdk.logger.debug(`Getting balance for address: ${addressStr}`);
49
- const addr = address(addressStr);
50
- const balance = await this.rpc.getBalance(addr).send();
51
- return balance.value;
52
- }
53
- catch (error) {
54
- this.sdk.logger.error(`Failed to get balance: ${error}`);
55
- throw new NosanaError('Failed to get balance', ErrorCodes.RPC_ERROR, error);
56
- }
57
- }
58
- async getLatestBlockhash() {
59
- try {
60
- const { value: blockhash } = await this.rpc.getLatestBlockhash().send();
61
- return blockhash;
62
- }
63
- catch (error) {
64
- this.sdk.logger.error(`Failed to get latest blockhash: ${error}`);
65
- throw new NosanaError('Failed to get latest blockhash', ErrorCodes.RPC_ERROR, error);
66
- }
67
- }
68
- /**
69
- * Type guard to check if the input is a transaction
70
- */
71
- isTransaction(input) {
72
- return (typeof input === 'object' &&
73
- input !== null &&
74
- 'instructions' in input &&
75
- 'version' in input &&
76
- !('programAddress' in input));
77
- }
78
- /**
79
- * Type guard to check if the input is a signed transaction
80
- */
81
- isSignedTransaction(input) {
82
- return (typeof input === 'object' &&
83
- input !== null &&
84
- 'signatures' in input &&
85
- Array.isArray(input.signatures) &&
86
- input.signatures.length > 0);
87
- }
88
- /**
89
- * Create, sign, and send a transaction with proper logging and error handling
90
- * @param instructionsOrTransaction Single instruction, array of instructions, or pre-built transaction
91
- * @returns The transaction signature
92
- */
93
- async send(instructionsOrTransaction) {
94
- if (!this.sdk.wallet) {
95
- throw new NosanaError('No wallet found', ErrorCodes.NO_WALLET);
96
- }
97
- try {
98
- let signedTransaction;
99
- // Check if it's already a transaction or if we need to create one from instructions
100
- if (this.isTransaction(instructionsOrTransaction)) {
101
- // Check if it's already signed
102
- if (this.isSignedTransaction(instructionsOrTransaction)) {
103
- // Already signed, use it directly
104
- signedTransaction = instructionsOrTransaction;
69
+ // Non-string types should be encoded
70
+ return addressEncoder.encode(seed);
71
+ }),
72
+ });
73
+ return pda;
74
+ },
75
+ async getBalance(addressStr) {
76
+ try {
77
+ // Use wallet address if no address is provided
78
+ let addr;
79
+ if (addressStr) {
80
+ addr = address(addressStr);
105
81
  }
106
82
  else {
107
- // Not signed yet, sign it
108
- signedTransaction = await signTransactionMessageWithSigners(instructionsOrTransaction);
83
+ const wallet = deps.getWallet();
84
+ if (!wallet) {
85
+ throw new NosanaError('No wallet found and no address provided', ErrorCodes.NO_WALLET);
86
+ }
87
+ addr = wallet.address;
109
88
  }
89
+ deps.logger.debug(`Getting balance for address: ${addr}`);
90
+ const balance = await rpc.getBalance(addr).send();
91
+ return balance.value;
110
92
  }
111
- else {
112
- // It's instructions, create and sign a transaction
113
- const instructions = Array.isArray(instructionsOrTransaction)
114
- ? instructionsOrTransaction
115
- : [instructionsOrTransaction];
116
- const transaction = createTransaction({
117
- instructions,
118
- feePayer: this.sdk.wallet,
119
- latestBlockhash: await this.getLatestBlockhash(),
120
- version: 0,
121
- });
122
- // Sign the transaction with all required signers
123
- signedTransaction = await signTransactionMessageWithSigners(transaction);
93
+ catch (error) {
94
+ if (error instanceof NosanaError) {
95
+ throw error;
96
+ }
97
+ deps.logger.error(`Failed to get balance: ${error}`);
98
+ throw new NosanaError('Failed to get balance', ErrorCodes.RPC_ERROR, error);
99
+ }
100
+ },
101
+ /**
102
+ * Build a transaction message from instructions
103
+ * This function creates a transaction message with:
104
+ * - Fee payer set to the provided feePayer, service feePayer, or wallet (in that order)
105
+ * - Latest blockhash for lifetime
106
+ * - Provided instructions
107
+ * - Estimated compute unit limit
108
+ *
109
+ * @param instructions Single instruction or array of instructions
110
+ * @param options Optional configuration
111
+ * @param options.feePayer Optional custom fee payer. Takes precedence over service feePayer and wallet.
112
+ * @returns An unsigned transaction message ready to be signed
113
+ */
114
+ async buildTransaction(instructions, options) {
115
+ // Priority: options.feePayer > service.feePayer > wallet
116
+ const transactionFeePayer = options?.feePayer ?? feePayer ?? deps.getWallet();
117
+ if (!transactionFeePayer) {
118
+ throw new NosanaError('No wallet found and no feePayer provided', ErrorCodes.NO_WALLET);
119
+ }
120
+ try {
121
+ // Get latest blockhash
122
+ const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
123
+ // Normalize instructions to array
124
+ const instructionsArray = Array.isArray(instructions) ? instructions : [instructions];
125
+ // Build transaction message using pipe
126
+ const transactionMessage = await pipe(createTransactionMessage({ version: 0 }), (tx) => setTransactionMessageFeePayerSigner(transactionFeePayer, tx), (tx) => setTransactionMessageLifetimeUsingBlockhash(latestBlockhash, tx), (tx) => appendTransactionMessageInstructions(instructionsArray, tx), (tx) => estimateAndSetComputeUnitLimit(tx));
127
+ return transactionMessage;
128
+ }
129
+ catch (error) {
130
+ deps.logger.error(`Failed to build transaction: ${error}`);
131
+ throw new NosanaError('Failed to build transaction', ErrorCodes.RPC_ERROR, error);
132
+ }
133
+ },
134
+ /**
135
+ * Sign a transaction message
136
+ * This function signs the transaction message using the signers embedded in the message.
137
+ * The transaction message should already contain the signers (e.g., from buildTransaction).
138
+ *
139
+ * @param transactionMessage The transaction message to sign (must contain signers)
140
+ * @returns A signed transaction
141
+ */
142
+ async signTransaction(transactionMessage) {
143
+ try {
144
+ // Sign the transaction message using signers embedded in the message
145
+ const transaction = await signTransactionMessageWithSigners(transactionMessage);
146
+ return transaction;
124
147
  }
125
- // Get the transaction signature for logging
126
- const signature = getSignatureFromTransaction(signedTransaction);
127
- // Log the transaction explorer link
128
- const explorerLink = getExplorerLink({
129
- cluster: this.sdk.config.solana.cluster,
130
- transaction: signature,
148
+ catch (error) {
149
+ deps.logger.error(`Failed to sign transaction: ${error}`);
150
+ throw new NosanaError('Failed to sign transaction', ErrorCodes.TRANSACTION_ERROR, error);
151
+ }
152
+ },
153
+ /**
154
+ * Send and confirm a signed transaction
155
+ * This function validates that the transaction is sendable, then sends it and waits for confirmation.
156
+ *
157
+ * @param transaction The signed transaction to send
158
+ * @param options Optional configuration (same as sendAndConfirmTransaction)
159
+ * @param options.commitment Commitment level for confirmation (takes precedence over config, then falls back to config.commitment, then 'confirmed')
160
+ * @returns The transaction signature
161
+ */
162
+ async sendTransaction(transaction, options) {
163
+ try {
164
+ // Ensure the transaction is sendable before attempting to send
165
+ assertIsSendableTransaction(transaction);
166
+ // Get the transaction signature for logging
167
+ const signature = getSignatureFromTransaction(transaction);
168
+ deps.logger.info(`Sending transaction: ${signature}`);
169
+ // Send and confirm the transaction with optional commitment level
170
+ // Priority: options.commitment > config.commitment > 'confirmed'
171
+ const commitment = options?.commitment ?? config.commitment ?? 'confirmed';
172
+ await sendAndConfirmTransaction(transaction, { commitment });
173
+ deps.logger.info(`Transaction ${signature} confirmed!`);
174
+ return signature;
175
+ }
176
+ catch (error) {
177
+ const errorMessage = `Failed to send transaction: ${error instanceof Error ? error.message : String(error)}`;
178
+ deps.logger.error(errorMessage);
179
+ throw new NosanaError(errorMessage, ErrorCodes.RPC_ERROR, error);
180
+ }
181
+ },
182
+ /**
183
+ * Build, sign, and send a transaction in one call
184
+ * This is a convenience function that combines buildTransaction, signTransaction, and sendTransaction.
185
+ * Use this when you want to build, sign, and send in a single operation.
186
+ *
187
+ * @param instructions Single instruction or array of instructions
188
+ * @param options Optional configuration
189
+ * @param options.feePayer Optional custom fee payer. If not provided, uses the wallet.
190
+ * @param options.commitment Commitment level for confirmation (takes precedence over config, then falls back to config.commitment, then 'confirmed')
191
+ * @returns The transaction signature
192
+ */
193
+ async buildSignAndSend(instructions, options) {
194
+ const transactionMessage = await this.buildTransaction(instructions, {
195
+ feePayer: options?.feePayer,
131
196
  });
132
- this.sdk.logger.info(`Sending transaction: ${explorerLink}`);
133
- // Send and confirm the transaction
134
- await this.sendAndConfirmTransaction(signedTransaction);
135
- this.sdk.logger.info('Transaction confirmed!');
136
- return signature;
137
- }
138
- catch (err) {
139
- const errorMessage = `Failed to send transaction: ${err instanceof Error ? err.message : String(err)}`;
140
- this.sdk.logger.error(errorMessage);
141
- throw new Error(errorMessage);
142
- }
143
- }
197
+ const signedTransaction = await this.signTransaction(transactionMessage);
198
+ return await this.sendTransaction(signedTransaction, { commitment: options?.commitment });
199
+ },
200
+ };
144
201
  }
202
+ //# sourceMappingURL=SolanaService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaService.js","sourceRoot":"","sources":["../../src/services/SolanaService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,4BAA4B,EAC5B,OAAO,EAEP,wBAAwB,EACxB,iBAAiB,EACjB,wBAAwB,EACxB,iCAAiC,EACjC,2BAA2B,EAI3B,mCAAmC,EACnC,2CAA2C,EAC3C,gCAAgC,EAKhC,oCAAoC,EAEpC,IAAI,EACJ,2BAA2B,GAI5B,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,+BAA+B,EAC/B,iCAAiC,GAClC,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAKnE;;;GAGG;AACH,SAAS,qCAAqC,CAC5C,GAAG,MAA0D;IAE7D,MAAM,wBAAwB,GAAG,+BAA+B,CAAC,GAAG,MAAM,CAAC,CAAC;IAC5E,OAAO,KAAK,EACV,kBAAqB,EACrB,EAAE;QACF,MAAM,oBAAoB,GAAG,MAAM,wBAAwB,CAAC,kBAAkB,CAAC,CAAC;QAChF,OAAO,oCAAoC,CACzC,CAAC,iCAAiC,CAAC,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC,CAAC,EACpE,kBAAkB,CACnB,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAkDD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAuB,EAAE,MAAoB;IAC/E,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,MAAM,IAAI,WAAW,CAAC,qBAAqB,EAAE,UAAU,CAAC,cAAc,CAAC,CAAC;IAC1E,CAAC;IAED,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;IAChD,iEAAiE;IACjE,MAAM,gBAAgB,GAAG,4BAA4B,CAAC,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC;IAC/F,MAAM,yBAAyB,GAAG,gCAAgC,CAAC;QACjE,GAAG;QACH,gBAAgB;KACjB,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,8BAA8B,GAAG,qCAAqC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAEtF,gEAAgE;IAChE,IAAI,QAAQ,GAAkC,MAAM,CAAC,QAAQ,CAAC;IAE9D,OAAO;QACL,MAAM;QACN,GAAG;QACH,gBAAgB;QAChB,yBAAyB;QACzB,8BAA8B;QAC9B,IAAI,QAAQ;YACV,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,QAAQ,CAAC,KAAoC;YAC/C,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,KAA8B,EAAE,SAAkB;YAC1D,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;YAC3C,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,wBAAwB,CAAC;gBAC3C,cAAc,EAAE,SAAS;gBACzB,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACxB,mEAAmE;oBACnE,yDAAyD;oBACzD,wFAAwF;oBACxF,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;wBAC7B,6EAA6E;wBAC7E,0DAA0D;wBAC1D,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;4BAC3C,IAAI,CAAC;gCACH,qEAAqE;gCACrE,OAAO,cAAc,CAAC,MAAM,CAAC,IAAe,CAAC,CAAC;4BAChD,CAAC;4BAAC,MAAM,CAAC;gCACP,gFAAgF;gCAChF,OAAO,IAAI,CAAC;4BACd,CAAC;wBACH,CAAC;wBACD,2BAA2B;wBAC3B,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,qCAAqC;oBACrC,OAAO,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACrC,CAAC,CAAC;aACH,CAAC,CAAC;YACH,OAAO,GAAG,CAAC;QACb,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,UAA6B;YAC5C,IAAI,CAAC;gBACH,+CAA+C;gBAC/C,IAAI,IAAa,CAAC;gBAClB,IAAI,UAAU,EAAE,CAAC;oBACf,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;oBAChC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,MAAM,IAAI,WAAW,CAAC,yCAAyC,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;oBACzF,CAAC;oBACD,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;gBACxB,CAAC;gBAED,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;gBAC1D,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBAClD,OAAO,OAAO,CAAC,KAAK,CAAC;YACvB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;oBACjC,MAAM,KAAK,CAAC;gBACd,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,KAAK,EAAE,CAAC,CAAC;gBACrD,MAAM,IAAI,WAAW,CAAC,uBAAuB,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAC9E,CAAC;QACH,CAAC;QAED;;;;;;;;;;;;WAYG;QACH,KAAK,CAAC,gBAAgB,CACpB,YAAyC,EACzC,OAA0C;YAI1C,yDAAyD;YACzD,MAAM,mBAAmB,GAAG,OAAO,EAAE,QAAQ,IAAI,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9E,IAAI,CAAC,mBAAmB,EAAE,CAAC;gBACzB,MAAM,IAAI,WAAW,CAAC,0CAA0C,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;YAC1F,CAAC;YAED,IAAI,CAAC;gBACH,uBAAuB;gBACvB,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,MAAM,GAAG,CAAC,kBAAkB,EAAE,CAAC,IAAI,EAAE,CAAC;gBAEzE,kCAAkC;gBAClC,MAAM,iBAAiB,GAAG,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAEtF,uCAAuC;gBACvC,MAAM,kBAAkB,GAAG,MAAM,IAAI,CACnC,wBAAwB,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EACxC,CAAC,EAAE,EAAE,EAAE,CAAC,mCAAmC,CAAC,mBAAmB,EAAE,EAAE,CAAC,EACpE,CAAC,EAAE,EAAE,EAAE,CAAC,2CAA2C,CAAC,eAAe,EAAE,EAAE,CAAC,EACxE,CAAC,EAAE,EAAE,EAAE,CAAC,oCAAoC,CAAC,iBAAiB,EAAE,EAAE,CAAC,EACnE,CAAC,EAAE,EAAE,EAAE,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAC3C,CAAC;gBAEF,OAAO,kBAAkB,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;gBAC3D,MAAM,IAAI,WAAW,CAAC,6BAA6B,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpF,CAAC;QACH,CAAC;QAED;;;;;;;WAOG;QACH,KAAK,CAAC,eAAe,CACnB,kBAEyC;YAEzC,IAAI,CAAC;gBACH,qEAAqE;gBACrE,MAAM,WAAW,GAAG,MAAM,iCAAiC,CAAC,kBAAkB,CAAC,CAAC;gBAEhF,OAAO,WAAmF,CAAC;YAC7F,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,+BAA+B,KAAK,EAAE,CAAC,CAAC;gBAC1D,MAAM,IAAI,WAAW,CAAC,4BAA4B,EAAE,UAAU,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YAC3F,CAAC;QACH,CAAC;QAED;;;;;;;;WAQG;QACH,KAAK,CAAC,eAAe,CACnB,WAAiF,EACjF,OAAqC;YAErC,IAAI,CAAC;gBACH,+DAA+D;gBAC/D,2BAA2B,CAAC,WAAW,CAAC,CAAC;gBAEzC,4CAA4C;gBAC5C,MAAM,SAAS,GAAG,2BAA2B,CAAC,WAAW,CAAC,CAAC;gBAE3D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wBAAwB,SAAS,EAAE,CAAC,CAAC;gBAEtD,kEAAkE;gBAClE,iEAAiE;gBACjE,MAAM,UAAU,GAAG,OAAO,EAAE,UAAU,IAAI,MAAM,CAAC,UAAU,IAAI,WAAW,CAAC;gBAC3E,MAAM,yBAAyB,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;gBAE7D,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,SAAS,aAAa,CAAC,CAAC;gBAExD,OAAO,SAAS,CAAC;YACnB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,YAAY,GAAG,+BAA+B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC7G,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;gBAChC,MAAM,IAAI,WAAW,CAAC,YAAY,EAAE,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;QAED;;;;;;;;;;WAUG;QACH,KAAK,CAAC,gBAAgB,CACpB,YAAyC,EACzC,OAGC;YAED,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE;gBACnE,QAAQ,EAAE,OAAO,EAAE,QAAQ;aAC5B,CAAC,CAAC;YACH,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;YACzE,OAAO,MAAM,IAAI,CAAC,eAAe,CAAC,iBAAiB,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;QAC5F,CAAC;KACF,CAAC;AACJ,CAAC"}