@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,101 @@
1
+ import { Address, ReadonlyUint8Array, TransactionSigner } from '@solana/kit';
2
+ import type { ProgramDeps } from '../../types.js';
3
+ import * as programClient from '../../generated_clients/merkle_distributor/index.js';
4
+ import { ConvertTypesForDb } from '../../utils/index.js';
5
+ /**
6
+ * Claim target enum for merkle distributor.
7
+ * Determines which address receives the claimed tokens.
8
+ */
9
+ export declare enum ClaimTarget {
10
+ YES = "YES",
11
+ NO = "NO"
12
+ }
13
+ /**
14
+ * Allowed addresses for receiving claimed tokens from merkle distributor.
15
+ * The `to` account must be the ATA of one of these addresses.
16
+ */
17
+ export declare const ALLOWED_RECEIVE_ADDRESSES: {
18
+ readonly YES: Address<"YessuvqUauj9yW4B3eERcyRLWmQtWpFc2ERKmaedmCE">;
19
+ readonly NO: Address<"NopXntmRdXhYNkoZaNTMUMShJ3aVG5RvwpiyPdd4bMh">;
20
+ };
21
+ export type MerkleDistributor = ConvertTypesForDb<programClient.MerkleDistributorArgs> & {
22
+ address: Address;
23
+ };
24
+ export type ClaimStatus = ConvertTypesForDb<programClient.ClaimStatusArgs> & {
25
+ address: Address;
26
+ };
27
+ /**
28
+ * Error thrown when a claim status account is not found
29
+ */
30
+ export declare class ClaimStatusNotFoundError extends Error {
31
+ constructor(address: Address);
32
+ }
33
+ /**
34
+ * Merkle distributor program interface
35
+ */
36
+ export interface MerkleDistributorProgram {
37
+ /**
38
+ * Derive the ClaimStatus PDA address for a given distributor and optional claimant.
39
+ */
40
+ getClaimStatusPda(distributor: Address, claimant?: Address): Promise<Address>;
41
+ /**
42
+ * Fetch a merkle distributor account by address
43
+ */
44
+ get(addr: Address): Promise<MerkleDistributor>;
45
+ /**
46
+ * Fetch all merkle distributor accounts
47
+ */
48
+ all(): Promise<MerkleDistributor[]>;
49
+ /**
50
+ * Fetch a claim status account by address
51
+ */
52
+ getClaimStatus(addr: Address): Promise<ClaimStatus>;
53
+ /**
54
+ * Fetch claim status for a specific distributor and optional claimant.
55
+ */
56
+ getClaimStatusForDistributor(distributor: Address, claimant?: Address): Promise<ClaimStatus | null>;
57
+ /**
58
+ * Fetch all claim status accounts
59
+ */
60
+ allClaimStatus(): Promise<ClaimStatus[]>;
61
+ /**
62
+ * Claim tokens from a merkle distributor.
63
+ */
64
+ claim(params: {
65
+ distributor: Address;
66
+ amountUnlocked: number | bigint;
67
+ amountLocked: number | bigint;
68
+ proof: Array<ReadonlyUint8Array>;
69
+ target: ClaimTarget;
70
+ claimant?: TransactionSigner;
71
+ }): Promise<ReturnType<typeof programClient.getNewClaimInstruction>>;
72
+ /**
73
+ * Clawback tokens from a merkle distributor.
74
+ */
75
+ clawback(params: {
76
+ distributor: Address;
77
+ claimant?: TransactionSigner;
78
+ }): Promise<ReturnType<typeof programClient.getClawbackInstruction>>;
79
+ }
80
+ /**
81
+ * Creates a new MerkleDistributorProgram instance.
82
+ *
83
+ * @param deps - Program dependencies (config, logger, solana service, wallet getter)
84
+ * @returns A MerkleDistributorProgram instance with methods to interact with the merkle distributor program
85
+ *
86
+ * @example
87
+ * ```ts
88
+ * import { createMerkleDistributorProgram } from '@nosana/kit';
89
+ *
90
+ * const merkleDistributor = createMerkleDistributorProgram({
91
+ * config,
92
+ * logger,
93
+ * solana,
94
+ * getWallet,
95
+ * });
96
+ *
97
+ * const distributor = await merkleDistributor.get('distributor-address');
98
+ * ```
99
+ */
100
+ import type { ProgramConfig } from '../../config/types.js';
101
+ export declare function createMerkleDistributorProgram(deps: ProgramDeps, config: ProgramConfig): MerkleDistributorProgram;
@@ -0,0 +1,343 @@
1
+ import { parseBase64RpcAccount, address, } from '@solana/kit';
2
+ import { NosanaError, ErrorCodes } from '../../errors/NosanaError.js';
3
+ import * as programClient from '../../generated_clients/merkle_distributor/index.js';
4
+ import { convertBigIntToNumber } from '../../utils/index.js';
5
+ import { findAssociatedTokenPda, TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';
6
+ import { SYSTEM_PROGRAM_ADDRESS } from '@solana-program/system';
7
+ import bs58 from 'bs58';
8
+ /**
9
+ * Claim target enum for merkle distributor.
10
+ * Determines which address receives the claimed tokens.
11
+ */
12
+ export var ClaimTarget;
13
+ (function (ClaimTarget) {
14
+ ClaimTarget["YES"] = "YES";
15
+ ClaimTarget["NO"] = "NO";
16
+ })(ClaimTarget || (ClaimTarget = {}));
17
+ /**
18
+ * Allowed addresses for receiving claimed tokens from merkle distributor.
19
+ * The `to` account must be the ATA of one of these addresses.
20
+ */
21
+ export const ALLOWED_RECEIVE_ADDRESSES = {
22
+ [ClaimTarget.YES]: address('YessuvqUauj9yW4B3eERcyRLWmQtWpFc2ERKmaedmCE'),
23
+ [ClaimTarget.NO]: address('NopXntmRdXhYNkoZaNTMUMShJ3aVG5RvwpiyPdd4bMh'),
24
+ };
25
+ /**
26
+ * Error thrown when a claim status account is not found
27
+ */
28
+ export class ClaimStatusNotFoundError extends Error {
29
+ constructor(address) {
30
+ super(`Claim status account not found at address ${address}`);
31
+ this.name = 'ClaimStatusNotFoundError';
32
+ }
33
+ }
34
+ export function createMerkleDistributorProgram(deps, config) {
35
+ const programId = config.merkleDistributorAddress;
36
+ const client = programClient;
37
+ /**
38
+ * Transform merkle distributor account to include address and convert BigInt to numbers
39
+ */
40
+ function transformMerkleDistributorAccount(distributorAccount) {
41
+ const { discriminator: _, root, buffer0, buffer1, buffer2, ...distributorAccountData } = distributorAccount.data;
42
+ const converted = convertBigIntToNumber(distributorAccountData);
43
+ return {
44
+ address: distributorAccount.address,
45
+ ...converted,
46
+ root: bs58.encode(Buffer.from(root)),
47
+ buffer0: bs58.encode(Buffer.from(buffer0)),
48
+ buffer1: bs58.encode(Buffer.from(buffer1)),
49
+ buffer2: bs58.encode(Buffer.from(buffer2)),
50
+ };
51
+ }
52
+ /**
53
+ * Transform claim status account to include address and convert BigInt to numbers
54
+ */
55
+ function transformClaimStatusAccount(claimStatusAccount) {
56
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
57
+ const { discriminator: _, ...claimStatusAccountData } = claimStatusAccount.data;
58
+ return {
59
+ address: claimStatusAccount.address,
60
+ ...convertBigIntToNumber(claimStatusAccountData),
61
+ };
62
+ }
63
+ return {
64
+ /**
65
+ * Derive the ClaimStatus PDA address for a given distributor and optional claimant.
66
+ * If claimant is not provided, uses the wallet's address.
67
+ *
68
+ * @param distributor The address of the merkle distributor
69
+ * @param claimant Optional claimant address. If not provided, uses the wallet's address.
70
+ * @returns The ClaimStatus PDA address
71
+ * @throws Error if wallet is not set and claimant is not provided
72
+ */
73
+ async getClaimStatusPda(distributor, claimant) {
74
+ let claimantAddress;
75
+ if (claimant) {
76
+ claimantAddress = claimant;
77
+ }
78
+ else {
79
+ const wallet = deps.getWallet();
80
+ if (!wallet) {
81
+ throw new Error('Wallet not set. Please set a wallet or provide a claimant address.');
82
+ }
83
+ claimantAddress = wallet.address;
84
+ }
85
+ return await deps.solana.pda(['ClaimStatus', claimantAddress, distributor], programId);
86
+ },
87
+ /**
88
+ * Fetch a merkle distributor account by address
89
+ */
90
+ async get(addr) {
91
+ try {
92
+ const distributorAccount = await client.fetchMerkleDistributor(deps.solana.rpc, addr);
93
+ const distributor = transformMerkleDistributorAccount(distributorAccount);
94
+ return distributor;
95
+ }
96
+ catch (err) {
97
+ deps.logger.error(`Failed to fetch merkle distributor ${err}`);
98
+ throw err;
99
+ }
100
+ },
101
+ /**
102
+ * Fetch all merkle distributor accounts
103
+ */
104
+ async all() {
105
+ try {
106
+ const getProgramAccountsResponse = await deps.solana.rpc
107
+ .getProgramAccounts(programId, {
108
+ encoding: 'base64',
109
+ filters: [
110
+ {
111
+ memcmp: {
112
+ offset: BigInt(0),
113
+ bytes: bs58.encode(Buffer.from(client.MERKLE_DISTRIBUTOR_DISCRIMINATOR)),
114
+ encoding: 'base58',
115
+ },
116
+ },
117
+ ],
118
+ })
119
+ .send();
120
+ const distributors = getProgramAccountsResponse
121
+ .map((result) => {
122
+ try {
123
+ const distributorAccount = programClient.decodeMerkleDistributor(parseBase64RpcAccount(result.pubkey, result.account));
124
+ return transformMerkleDistributorAccount(distributorAccount);
125
+ }
126
+ catch (err) {
127
+ deps.logger.error(`Failed to decode merkle distributor ${err}`);
128
+ return null;
129
+ }
130
+ })
131
+ .filter((account) => account !== null);
132
+ return distributors;
133
+ }
134
+ catch (err) {
135
+ deps.logger.error(`Failed to fetch all merkle distributors ${err}`);
136
+ throw err;
137
+ }
138
+ },
139
+ /**
140
+ * Fetch a claim status account by address
141
+ */
142
+ async getClaimStatus(addr) {
143
+ try {
144
+ const maybeClaimStatus = await client.fetchMaybeClaimStatus(deps.solana.rpc, addr);
145
+ // If account doesn't exist, throw a specific error
146
+ if (!maybeClaimStatus.exists) {
147
+ throw new ClaimStatusNotFoundError(addr);
148
+ }
149
+ // Transform and return the claim status
150
+ return transformClaimStatusAccount(maybeClaimStatus);
151
+ }
152
+ catch (err) {
153
+ deps.logger.error(`Failed to fetch claim status ${err}`);
154
+ throw err;
155
+ }
156
+ },
157
+ /**
158
+ * Fetch claim status for a specific distributor and optional claimant.
159
+ * Derives the ClaimStatus PDA using the claimant address (or wallet's address if not provided) and the distributor address.
160
+ *
161
+ * @param distributor The address of the merkle distributor
162
+ * @param claimant Optional claimant address. If not provided, uses the wallet's address.
163
+ * @returns The claim status if it exists, null otherwise
164
+ * @throws Error if wallet is not set and claimant is not provided
165
+ */
166
+ async getClaimStatusForDistributor(distributor, claimant) {
167
+ try {
168
+ // Derive ClaimStatus PDA
169
+ const claimStatusPda = await this.getClaimStatusPda(distributor, claimant);
170
+ // Reuse getClaimStatus to fetch and transform the claim status
171
+ // If the account doesn't exist, it will throw, so we catch and return null
172
+ return await this.getClaimStatus(claimStatusPda);
173
+ }
174
+ catch (err) {
175
+ // If the account doesn't exist, return null instead of throwing
176
+ // Check if it's the specific ClaimStatusNotFoundError from getClaimStatus
177
+ if (err instanceof ClaimStatusNotFoundError) {
178
+ return null;
179
+ }
180
+ // For other errors, log and rethrow
181
+ deps.logger.error(`Failed to fetch claim status ${err}`);
182
+ throw err;
183
+ }
184
+ },
185
+ /**
186
+ * Fetch all claim status accounts
187
+ * TODO: add filter for claimant and distributor
188
+ */
189
+ async allClaimStatus() {
190
+ try {
191
+ const getProgramAccountsResponse = await deps.solana.rpc
192
+ .getProgramAccounts(programId, {
193
+ encoding: 'base64',
194
+ filters: [
195
+ {
196
+ memcmp: {
197
+ offset: BigInt(0),
198
+ bytes: bs58.encode(Buffer.from(client.CLAIM_STATUS_DISCRIMINATOR)),
199
+ encoding: 'base58',
200
+ },
201
+ },
202
+ ],
203
+ })
204
+ .send();
205
+ const claimStatuses = getProgramAccountsResponse
206
+ .map((result) => {
207
+ try {
208
+ const claimStatusAccount = programClient.decodeClaimStatus(parseBase64RpcAccount(result.pubkey, result.account));
209
+ return transformClaimStatusAccount(claimStatusAccount);
210
+ }
211
+ catch (err) {
212
+ deps.logger.error(`Failed to decode claim status ${err}`);
213
+ return null;
214
+ }
215
+ })
216
+ .filter((account) => account !== null);
217
+ return claimStatuses;
218
+ }
219
+ catch (err) {
220
+ deps.logger.error(`Failed to fetch all claim statuses ${err}`);
221
+ throw err;
222
+ }
223
+ },
224
+ /**
225
+ * Claim tokens from a merkle distributor.
226
+ * This function creates a new ClaimStatus account and claims the tokens in a single instruction.
227
+ *
228
+ * @param params Parameters for claiming tokens
229
+ * @param params.claimant Optional claimant signer. If not provided, uses the wallet.
230
+ * @returns The newClaim instruction
231
+ * @throws NosanaError if tokens have already been claimed
232
+ * @throws Error if wallet is not set and claimant is not provided
233
+ */
234
+ async claim(params) {
235
+ // Determine claimant signer and address
236
+ let claimantSigner;
237
+ let claimantAddress;
238
+ if (params.claimant) {
239
+ claimantSigner = params.claimant;
240
+ claimantAddress = params.claimant.address;
241
+ }
242
+ else {
243
+ const wallet = deps.getWallet();
244
+ if (!wallet) {
245
+ throw new Error('Wallet not set. Please set a wallet or provide a claimant signer.');
246
+ }
247
+ claimantSigner = wallet;
248
+ claimantAddress = wallet.address;
249
+ }
250
+ try {
251
+ // Get the distributor account to find mint and tokenVault
252
+ const distributorAccount = await client.fetchMerkleDistributor(deps.solana.rpc, params.distributor);
253
+ // Derive ClaimStatus PDA using the claimant address
254
+ const claimStatusPda = await this.getClaimStatusPda(params.distributor, claimantAddress);
255
+ // Check if ClaimStatus account exists
256
+ const maybeClaimStatus = await client.fetchMaybeClaimStatus(deps.solana.rpc, claimStatusPda);
257
+ // If ClaimStatus already exists, throw an error (already claimed)
258
+ if (maybeClaimStatus.exists) {
259
+ throw new NosanaError('Tokens have already been claimed from this distributor', ErrorCodes.VALIDATION_ERROR);
260
+ }
261
+ // Get the target address for receiving tokens (YES or NO)
262
+ const targetAddress = ALLOWED_RECEIVE_ADDRESSES[params.target];
263
+ // Find the ATA of the target address (where tokens will be sent)
264
+ const [targetAta] = await findAssociatedTokenPda({
265
+ mint: distributorAccount.data.mint,
266
+ owner: targetAddress,
267
+ tokenProgram: TOKEN_PROGRAM_ADDRESS,
268
+ });
269
+ programClient.getClawbackInstruction({
270
+ distributor: params.distributor,
271
+ from: distributorAccount.data.tokenVault,
272
+ to: distributorAccount.data.clawbackReceiver,
273
+ claimant: claimantSigner,
274
+ tokenProgram: TOKEN_PROGRAM_ADDRESS,
275
+ systemProgram: SYSTEM_PROGRAM_ADDRESS,
276
+ });
277
+ // Create newClaim in struction which creates the account and claims the tokens
278
+ // Note: tokens go to the ATA of the target address (YES or NO), not the claimant's ATA
279
+ // The claimant in the instruction is the claimant signer (or wallet if not provided)
280
+ const newClaimInstruction = programClient.getNewClaimInstruction({
281
+ distributor: params.distributor,
282
+ claimStatus: claimStatusPda,
283
+ from: distributorAccount.data.tokenVault,
284
+ to: targetAta, // ATA of YES or NO address, not claimant's ATA
285
+ claimant: claimantSigner, // Claimant signer (or wallet if not provided)
286
+ tokenProgram: TOKEN_PROGRAM_ADDRESS,
287
+ systemProgram: SYSTEM_PROGRAM_ADDRESS,
288
+ amountUnlocked: params.amountUnlocked,
289
+ amountLocked: params.amountLocked,
290
+ proof: params.proof,
291
+ }, { programAddress: programId });
292
+ return newClaimInstruction;
293
+ }
294
+ catch (err) {
295
+ deps.logger.error(`Failed to create claim instructions: ${err}`);
296
+ throw err;
297
+ }
298
+ },
299
+ /**
300
+ * Clawback tokens from a merkle distributor.
301
+ * This function creates a clawback instruction to transfer tokens from the distributor's token vault to the clawback receiver.
302
+ *
303
+ * @param params Parameters for clawback
304
+ * @param params.distributor The address of the merkle distributor
305
+ * @param params.claimant Optional claimant signer. If not provided, uses the wallet.
306
+ * @returns The clawback instruction
307
+ * @throws Error if wallet is not set and claimant is not provided
308
+ */
309
+ async clawback(params) {
310
+ // Determine claimant signer
311
+ let claimantSigner;
312
+ if (params.claimant) {
313
+ claimantSigner = params.claimant;
314
+ }
315
+ else {
316
+ const wallet = deps.getWallet();
317
+ if (!wallet) {
318
+ throw new Error('Wallet not set. Please set a wallet or provide a claimant signer.');
319
+ }
320
+ claimantSigner = wallet;
321
+ }
322
+ try {
323
+ // Get the distributor account to find tokenVault and clawbackReceiver
324
+ const distributorAccount = await client.fetchMerkleDistributor(deps.solana.rpc, params.distributor);
325
+ // Create clawback instruction
326
+ const clawbackInstruction = client.getClawbackInstruction({
327
+ distributor: params.distributor,
328
+ from: distributorAccount.data.tokenVault,
329
+ to: distributorAccount.data.clawbackReceiver,
330
+ claimant: claimantSigner,
331
+ tokenProgram: TOKEN_PROGRAM_ADDRESS,
332
+ systemProgram: SYSTEM_PROGRAM_ADDRESS,
333
+ }, { programAddress: programId });
334
+ return clawbackInstruction;
335
+ }
336
+ catch (err) {
337
+ deps.logger.error(`Failed to create clawback instruction: ${err}`);
338
+ throw err;
339
+ }
340
+ },
341
+ };
342
+ }
343
+ //# sourceMappingURL=MerkleDistributorProgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MerkleDistributorProgram.js","sourceRoot":"","sources":["../../../src/services/programs/MerkleDistributorProgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import { Address } from '@solana/kit';
2
+ import type { ProgramDeps } from '../../types.js';
3
+ import * as programClient from '../../generated_clients/staking/index.js';
4
+ import { ConvertTypesForDb } from '../../utils/index.js';
5
+ export type Stake = ConvertTypesForDb<programClient.StakeAccountArgs> & {
6
+ address: Address;
7
+ };
8
+ /**
9
+ * Stake program interface
10
+ */
11
+ export interface StakeProgram {
12
+ /**
13
+ * Fetch a stake account by address
14
+ */
15
+ get(addr: Address): Promise<Stake>;
16
+ /**
17
+ * Fetch multiple stake accounts by address
18
+ */
19
+ multiple(addresses: Address[]): Promise<Stake[]>;
20
+ /**
21
+ * Fetch all stake accounts
22
+ */
23
+ all(): Promise<Stake[]>;
24
+ }
25
+ /**
26
+ * Creates a new StakeProgram instance.
27
+ *
28
+ * @param deps - Program dependencies (config, logger, solana service, wallet getter)
29
+ * @returns A StakeProgram instance with methods to interact with the stake program
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * import { createStakeProgram } from '@nosana/kit';
34
+ *
35
+ * const stakeProgram = createStakeProgram({
36
+ * config,
37
+ * logger,
38
+ * solana,
39
+ * getWallet,
40
+ * });
41
+ *
42
+ * const stake = await stakeProgram.get('stake-address');
43
+ * ```
44
+ */
45
+ import type { ProgramConfig } from '../../config/types.js';
46
+ export declare function createStakeProgram(deps: ProgramDeps, config: ProgramConfig): StakeProgram;
@@ -0,0 +1,87 @@
1
+ import { parseBase64RpcAccount } from '@solana/kit';
2
+ import * as programClient from '../../generated_clients/staking/index.js';
3
+ import { convertBigIntToNumber } from '../../utils/index.js';
4
+ import bs58 from 'bs58';
5
+ export function createStakeProgram(deps, config) {
6
+ const programId = config.stakeAddress;
7
+ const client = programClient;
8
+ /**
9
+ * Transform stake account to include address and convert BigInt to numbers
10
+ */
11
+ function transformStakeAccount(stakeAccount) {
12
+ const { discriminator: _, ...stakeAccountData } = stakeAccount.data;
13
+ return {
14
+ address: stakeAccount.address,
15
+ ...convertBigIntToNumber(stakeAccountData),
16
+ };
17
+ }
18
+ return {
19
+ /**
20
+ * Fetch a stake account by address
21
+ */
22
+ async get(addr) {
23
+ try {
24
+ const stakeAccount = await client.fetchStakeAccount(deps.solana.rpc, addr);
25
+ const stake = transformStakeAccount(stakeAccount);
26
+ return stake;
27
+ }
28
+ catch (err) {
29
+ deps.logger.error(`Failed to fetch stake ${err}`);
30
+ throw err;
31
+ }
32
+ },
33
+ /**
34
+ * Fetch multiple stake accounts by address
35
+ */
36
+ async multiple(addresses) {
37
+ try {
38
+ const stakeAccounts = await client.fetchAllStakeAccount(deps.solana.rpc, addresses);
39
+ const stakes = stakeAccounts.map((stakeAccount) => transformStakeAccount(stakeAccount));
40
+ return stakes;
41
+ }
42
+ catch (err) {
43
+ deps.logger.error(`Failed to fetch stakes ${err}`);
44
+ throw err;
45
+ }
46
+ },
47
+ /**
48
+ * Fetch all stake accounts
49
+ */
50
+ async all() {
51
+ try {
52
+ const getProgramAccountsResponse = await deps.solana.rpc
53
+ .getProgramAccounts(programId, {
54
+ encoding: 'base64',
55
+ filters: [
56
+ {
57
+ memcmp: {
58
+ offset: BigInt(0),
59
+ bytes: bs58.encode(Buffer.from(client.STAKE_ACCOUNT_DISCRIMINATOR)),
60
+ encoding: 'base58',
61
+ },
62
+ },
63
+ ],
64
+ })
65
+ .send();
66
+ const stakes = getProgramAccountsResponse
67
+ .map((result) => {
68
+ try {
69
+ const stakeAccount = programClient.decodeStakeAccount(parseBase64RpcAccount(result.pubkey, result.account));
70
+ return transformStakeAccount(stakeAccount);
71
+ }
72
+ catch (err) {
73
+ deps.logger.error(`Failed to decode stake ${err}`);
74
+ return null;
75
+ }
76
+ })
77
+ .filter((account) => account !== null);
78
+ return stakes;
79
+ }
80
+ catch (err) {
81
+ deps.logger.error(`Failed to fetch all stakes ${err}`);
82
+ throw err;
83
+ }
84
+ },
85
+ };
86
+ }
87
+ //# sourceMappingURL=StakeProgram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StakeProgram.js","sourceRoot":"","sources":["../../../src/services/programs/StakeProgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { TransactionSigner, MessageSigner } from '@solana/kit';
2
+ import type { SolanaService } from './services/SolanaService.js';
3
+ import { Logger } from './logger/Logger.js';
4
+ /**
5
+ * A wallet that can sign both messages and transactions.
6
+ * This is a combination of MessageSigner and TransactionSigner,
7
+ * allowing the wallet to be used for both message signing and transaction signing.
8
+ */
9
+ export type Wallet = MessageSigner & TransactionSigner;
10
+ /**
11
+ * Dependencies for program services
12
+ */
13
+ export interface ProgramDeps {
14
+ logger: Logger;
15
+ solana: SolanaService;
16
+ getWallet: () => Wallet | undefined;
17
+ }
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { ReadonlyUint8Array } from '@solana/kit';
2
+ /**
3
+ * Type helper to convert bigint properties to number
4
+ */
5
+ export type ConvertBigIntToNumber<T> = {
6
+ [K in keyof T]: T[K] extends bigint ? number : T[K];
7
+ };
8
+ /**
9
+ * Type helper to convert bigint to number and ReadonlyUint8Array to string
10
+ */
11
+ export type ConvertTypesForDb<T> = {
12
+ [K in keyof T]: T[K] extends bigint ? number : T[K] extends ReadonlyUint8Array ? string | null : T[K];
13
+ };
14
+ /**
15
+ * Helper function to convert bigint values to numbers in an object
16
+ * @param obj Object that may contain bigint values
17
+ * @returns Object with all bigint values converted to numbers
18
+ */
19
+ export declare function convertBigIntToNumber<T extends Record<string, unknown>>(obj: T): ConvertBigIntToNumber<T>;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Helper function to convert bigint values to numbers in an object
3
+ * @param obj Object that may contain bigint values
4
+ * @returns Object with all bigint values converted to numbers
5
+ */
6
+ export function convertBigIntToNumber(obj) {
7
+ const result = { ...obj };
8
+ for (const [key, value] of Object.entries(result)) {
9
+ if (typeof value === 'bigint') {
10
+ result[key] = Number(value);
11
+ }
12
+ }
13
+ return result;
14
+ }
15
+ //# sourceMappingURL=convertBigIntToNumber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertBigIntToNumber.js","sourceRoot":"","sources":["../../src/utils/convertBigIntToNumber.ts"],"names":[],"mappings":"AAoBA;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,GAAM;IAEN,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAC1B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC7B,MAAkC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,MAAkC,CAAC;AAC5C,CAAC"}