@nosana/kit 2.0.18 → 2.0.23

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 (80) hide show
  1. package/README.md +96 -24
  2. package/dist/NosanaClient.d.ts +5 -5
  3. package/dist/NosanaClient.js +6 -5
  4. package/dist/NosanaClient.js.map +1 -1
  5. package/dist/index.d.ts +9 -9
  6. package/dist/index.js +5 -5
  7. package/dist/index.js.map +1 -1
  8. package/dist/services/programs/jobs/JobsProgram.d.ts +152 -0
  9. package/dist/services/programs/{JobsProgram.js → jobs/JobsProgram.js} +133 -224
  10. package/dist/services/programs/jobs/JobsProgram.js.map +1 -0
  11. package/dist/services/programs/jobs/index.d.ts +1 -0
  12. package/dist/services/programs/jobs/index.js +2 -0
  13. package/dist/services/programs/jobs/index.js.map +1 -0
  14. package/dist/services/programs/jobs/instructions/delist.d.ts +9 -0
  15. package/dist/services/programs/jobs/instructions/delist.js +29 -0
  16. package/dist/services/programs/jobs/instructions/delist.js.map +1 -0
  17. package/dist/services/programs/jobs/instructions/end.d.ts +9 -0
  18. package/dist/services/programs/jobs/instructions/end.js +36 -0
  19. package/dist/services/programs/jobs/instructions/end.js.map +1 -0
  20. package/dist/services/programs/jobs/instructions/extend.d.ts +11 -0
  21. package/dist/services/programs/jobs/instructions/extend.js +27 -0
  22. package/dist/services/programs/jobs/instructions/extend.js.map +1 -0
  23. package/dist/services/programs/jobs/instructions/index.d.ts +4 -0
  24. package/dist/services/programs/jobs/instructions/index.js +5 -0
  25. package/dist/services/programs/jobs/instructions/index.js.map +1 -0
  26. package/dist/services/programs/jobs/instructions/post.d.ts +13 -0
  27. package/dist/services/programs/jobs/instructions/post.js +36 -0
  28. package/dist/services/programs/jobs/instructions/post.js.map +1 -0
  29. package/dist/services/programs/jobs/instructions/types.d.ts +16 -0
  30. package/dist/services/programs/jobs/instructions/types.js +2 -0
  31. package/dist/services/programs/jobs/instructions/types.js.map +1 -0
  32. package/dist/services/programs/jobs/monitor/index.d.ts +3 -0
  33. package/dist/services/programs/jobs/monitor/index.js +3 -0
  34. package/dist/services/programs/jobs/monitor/index.js.map +1 -0
  35. package/dist/services/programs/jobs/monitor/monitor.d.ts +22 -0
  36. package/dist/services/programs/jobs/monitor/monitor.js +180 -0
  37. package/dist/services/programs/jobs/monitor/monitor.js.map +1 -0
  38. package/dist/services/programs/jobs/monitor/types.d.ts +27 -0
  39. package/dist/services/programs/jobs/monitor/types.js +9 -0
  40. package/dist/services/programs/jobs/monitor/types.js.map +1 -0
  41. package/dist/services/programs/{MerkleDistributorProgram.d.ts → merkleDistributor/MerkleDistributorProgram.d.ts} +4 -4
  42. package/dist/services/programs/{MerkleDistributorProgram.js → merkleDistributor/MerkleDistributorProgram.js} +3 -3
  43. package/dist/services/programs/merkleDistributor/MerkleDistributorProgram.js.map +1 -0
  44. package/dist/services/programs/merkleDistributor/index.d.ts +1 -0
  45. package/dist/services/programs/merkleDistributor/index.js +2 -0
  46. package/dist/services/programs/merkleDistributor/index.js.map +1 -0
  47. package/dist/services/programs/{StakeProgram.d.ts → stake/StakeProgram.d.ts} +4 -4
  48. package/dist/services/programs/{StakeProgram.js → stake/StakeProgram.js} +2 -2
  49. package/dist/services/programs/stake/StakeProgram.js.map +1 -0
  50. package/dist/services/programs/stake/index.d.ts +1 -0
  51. package/dist/services/programs/stake/index.js +2 -0
  52. package/dist/services/programs/stake/index.js.map +1 -0
  53. package/dist/services/{SolanaService.d.ts → solana/SolanaService.d.ts} +31 -3
  54. package/dist/services/{SolanaService.js → solana/SolanaService.js} +84 -3
  55. package/dist/services/solana/SolanaService.js.map +1 -0
  56. package/dist/services/solana/index.d.ts +1 -0
  57. package/dist/services/solana/index.js +2 -0
  58. package/dist/services/solana/index.js.map +1 -0
  59. package/dist/services/token/TokenService.d.ts +63 -0
  60. package/dist/services/{TokenService.js → token/TokenService.js} +69 -2
  61. package/dist/services/token/TokenService.js.map +1 -0
  62. package/dist/services/token/index.d.ts +1 -0
  63. package/dist/services/token/index.js +2 -0
  64. package/dist/services/token/index.js.map +1 -0
  65. package/dist/types.d.ts +3 -1
  66. package/dist/utils/convertHttpToWebSocketUrl.d.ts +28 -0
  67. package/dist/utils/convertHttpToWebSocketUrl.js +37 -0
  68. package/dist/utils/convertHttpToWebSocketUrl.js.map +1 -0
  69. package/dist/utils/getStaticAccounts.d.ts +1 -1
  70. package/dist/utils/index.d.ts +1 -0
  71. package/dist/utils/index.js +1 -0
  72. package/dist/utils/index.js.map +1 -1
  73. package/package.json +4 -4
  74. package/dist/services/SolanaService.js.map +0 -1
  75. package/dist/services/TokenService.d.ts +0 -41
  76. package/dist/services/TokenService.js.map +0 -1
  77. package/dist/services/programs/JobsProgram.d.ts +0 -106
  78. package/dist/services/programs/JobsProgram.js.map +0 -1
  79. package/dist/services/programs/MerkleDistributorProgram.js.map +0 -1
  80. package/dist/services/programs/StakeProgram.js.map +0 -1
@@ -0,0 +1,36 @@
1
+ import bs58 from 'bs58';
2
+ import { generateKeyPairSigner } from '@solana/kit';
3
+ export async function post({ market, timeout, ipfsHash, payer }, { config, deps, client, getRequiredWallet, getStaticAccounts, getNosATA, }) {
4
+ try {
5
+ const wallet = getRequiredWallet();
6
+ // Use provided payer or fall back to wallet
7
+ const nosPayer = payer ?? wallet;
8
+ // Generate new keypairs for job and run
9
+ const [jobKey, runKey, associatedTokenAddress, { jobsProgram, ...staticAccounts }] = await Promise.all([
10
+ generateKeyPairSigner(),
11
+ generateKeyPairSigner(),
12
+ getNosATA(nosPayer.address),
13
+ getStaticAccounts(),
14
+ ]);
15
+ const vault = await deps.solana.pda([market, config.nosTokenAddress], jobsProgram);
16
+ // Create the list instruction
17
+ return client.getListInstruction({
18
+ job: jobKey,
19
+ run: runKey,
20
+ market,
21
+ ipfsJob: bs58.decode(ipfsHash).subarray(2),
22
+ timeout,
23
+ user: associatedTokenAddress,
24
+ vault: vault,
25
+ payer: nosPayer,
26
+ authority: wallet,
27
+ ...staticAccounts,
28
+ });
29
+ }
30
+ catch (err) {
31
+ const errorMessage = `Failed to create list instruction: ${err instanceof Error ? err.message : String(err)}`;
32
+ deps.logger.error(errorMessage);
33
+ throw new Error(errorMessage);
34
+ }
35
+ }
36
+ //# sourceMappingURL=post.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"post.js","sourceRoot":"","sources":["../../../../../src/services/programs/jobs/instructions/post.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAwC,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAgB1F,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAc,EAChD,EACE,MAAM,EACN,IAAI,EACJ,MAAM,EACN,iBAAiB,EACjB,iBAAiB,EACjB,SAAS,GACgB;IAE3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,4CAA4C;QAC5C,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,CAAC;QAEjC,wCAAwC;QACxC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,sBAAsB,EAAE,EAAE,WAAW,EAAE,GAAG,cAAc,EAAE,CAAC,GAChF,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,qBAAqB,EAAE;YACvB,qBAAqB,EAAE;YACvB,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC3B,iBAAiB,EAAE;SACpB,CAAC,CAAC;QACL,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,EAAE,WAAW,CAAC,CAAC;QAEnF,8BAA8B;QAC9B,OAAO,MAAM,CAAC,kBAAkB,CAAC;YAC/B,GAAG,EAAE,MAAM;YACX,GAAG,EAAE,MAAM;YACX,MAAM;YACN,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1C,OAAO;YACP,IAAI,EAAE,sBAAsB;YAC5B,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,MAAM;YACjB,GAAG,cAAc;SAClB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,YAAY,GAAG,sCAAsC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9G,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ProgramConfig } from '../../../../config/index.js';
2
+ import type { ProgramDeps, Wallet } from '../../../../types.js';
3
+ import type { JobsProgram } from '../JobsProgram.js';
4
+ import type { TokenService } from '../../../../services/token/index.js';
5
+ import type { StaticAccounts } from '../../../../utils/getStaticAccounts.js';
6
+ import * as programClient from '../../../../generated_clients/jobs/index.js';
7
+ export type InstructionsHelperParams = {
8
+ deps: ProgramDeps;
9
+ config: ProgramConfig;
10
+ client: typeof programClient;
11
+ get: JobsProgram['get'];
12
+ getRuns: JobsProgram['runs'];
13
+ getRequiredWallet: () => Wallet;
14
+ getStaticAccounts: () => Promise<StaticAccounts>;
15
+ getNosATA: TokenService['getATA'];
16
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/services/programs/jobs/instructions/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export { createMonitorFunctions } from './monitor.js';
3
+ export type { MonitorDeps } from './monitor.js';
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export { createMonitorFunctions } from './monitor.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/services/programs/jobs/monitor/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type { Account } from '@solana/kit';
2
+ import type { ProgramDeps } from '../../../../types.js';
3
+ import type { ProgramConfig } from '../../../../config/types.js';
4
+ import type { JobsProgram, Job, Market, Run } from '../JobsProgram.js';
5
+ import * as programClient from '../../../../generated_clients/jobs/index.js';
6
+ import { type MonitorEvent, type SimpleMonitorEvent } from './types.js';
7
+ export interface MonitorDeps {
8
+ deps: ProgramDeps;
9
+ config: ProgramConfig;
10
+ client: typeof programClient;
11
+ transformJobAccount: (jobAccount: Account<programClient.JobAccount>) => Job;
12
+ transformRunAccount: (runAccount: Account<programClient.RunAccount>) => Run;
13
+ transformMarketAccount: (marketAccount: Account<programClient.MarketAccount>) => Market;
14
+ mergeRunIntoJob: (job: Job, run: Run) => Job;
15
+ }
16
+ /**
17
+ * Factory function to create monitor functions
18
+ */
19
+ export declare function createMonitorFunctions(get: JobsProgram['get'], runs: JobsProgram['runs'], monitorDeps: MonitorDeps): {
20
+ monitor(): Promise<[AsyncIterable<SimpleMonitorEvent>, () => void]>;
21
+ monitorDetailed(): Promise<[AsyncIterable<MonitorEvent>, () => void]>;
22
+ };
@@ -0,0 +1,180 @@
1
+ import { parseBase64RpcAccount } from '@solana/kit';
2
+ import { JobState } from '../JobsProgram.js';
3
+ import { MonitorEventType } from './types.js';
4
+ /**
5
+ * Set up WebSocket subscription for program notifications
6
+ */
7
+ async function setupSubscription(deps, programId, abortController) {
8
+ try {
9
+ // Set up the subscription using the correct API pattern
10
+ const subscriptionIterable = await deps.solana.rpcSubscriptions
11
+ .programNotifications(programId, { encoding: 'base64' })
12
+ .subscribe({ abortSignal: abortController.signal });
13
+ return subscriptionIterable;
14
+ }
15
+ catch (error) {
16
+ throw new Error(`Failed to setup subscription: ${error}`);
17
+ }
18
+ }
19
+ /**
20
+ * Handle JobAccount updates
21
+ */
22
+ async function handleJobAccount(encodedAccount, autoMerge, runs, monitorDeps) {
23
+ const { client, transformJobAccount, mergeRunIntoJob, deps } = monitorDeps;
24
+ const jobAccount = client.decodeJobAccount(encodedAccount);
25
+ let job = transformJobAccount(jobAccount);
26
+ // If auto-merge is enabled, check for run accounts
27
+ if (autoMerge && job.state === JobState.QUEUED) {
28
+ try {
29
+ const runAccounts = await runs({ job: job.address });
30
+ if (runAccounts.length > 0) {
31
+ job = mergeRunIntoJob(job, runAccounts[0]);
32
+ }
33
+ }
34
+ catch (error) {
35
+ deps.logger.error(`Error checking run account for job ${job.address}: ${error}`);
36
+ }
37
+ }
38
+ return { type: MonitorEventType.JOB, data: job };
39
+ }
40
+ /**
41
+ * Handle MarketAccount updates
42
+ */
43
+ function handleMarketAccount(encodedAccount, monitorDeps) {
44
+ const { client, transformMarketAccount } = monitorDeps;
45
+ const marketAccount = client.decodeMarketAccount(encodedAccount);
46
+ const market = transformMarketAccount(marketAccount);
47
+ return { type: MonitorEventType.MARKET, data: market };
48
+ }
49
+ /**
50
+ * Handle RunAccount updates
51
+ */
52
+ async function handleRunAccount(encodedAccount, autoMerge, get, monitorDeps) {
53
+ const { client, transformRunAccount, mergeRunIntoJob, deps } = monitorDeps;
54
+ const runAccount = client.decodeRunAccount(encodedAccount);
55
+ const run = transformRunAccount(runAccount);
56
+ if (autoMerge) {
57
+ // For auto-merge, fetch the job and merge run data, then yield as job event
58
+ try {
59
+ const job = await get(run.job, false);
60
+ const mergedJob = mergeRunIntoJob(job, run);
61
+ return { type: MonitorEventType.JOB, data: mergedJob };
62
+ }
63
+ catch (error) {
64
+ deps.logger.error(`Error fetching job ${run.job} for run account ${runAccount.address}: ${error}`);
65
+ // Skip this event if we can't fetch the job
66
+ return null;
67
+ }
68
+ }
69
+ else {
70
+ // For detailed monitoring, yield run event as-is
71
+ return { type: MonitorEventType.RUN, data: run };
72
+ }
73
+ }
74
+ /**
75
+ * Create an async generator that yields monitor events from subscription notifications
76
+ */
77
+ async function* createEventStream(subscriptionIterable, isMonitoring, autoMerge, get, runs, monitorDeps) {
78
+ const { deps, client } = monitorDeps;
79
+ try {
80
+ for await (const notification of subscriptionIterable) {
81
+ // Check if monitoring should continue
82
+ if (!isMonitoring()) {
83
+ deps.logger.info('Monitoring stopped, exiting subscription processing');
84
+ break;
85
+ }
86
+ try {
87
+ const { value } = notification;
88
+ const { account, pubkey } = value;
89
+ const encodedAccount = parseBase64RpcAccount(pubkey, account);
90
+ const accountType = client.identifyNosanaJobsAccount(encodedAccount);
91
+ let event = null;
92
+ switch (accountType) {
93
+ case client.NosanaJobsAccount.JobAccount:
94
+ event = await handleJobAccount(encodedAccount, autoMerge, runs, monitorDeps);
95
+ break;
96
+ case client.NosanaJobsAccount.MarketAccount:
97
+ event = handleMarketAccount(encodedAccount, monitorDeps);
98
+ break;
99
+ case client.NosanaJobsAccount.RunAccount:
100
+ event = await handleRunAccount(encodedAccount, autoMerge, get, monitorDeps);
101
+ break;
102
+ default:
103
+ deps.logger.error(`No support yet for account type: ${accountType}`);
104
+ break;
105
+ }
106
+ if (event) {
107
+ yield event;
108
+ }
109
+ }
110
+ catch (error) {
111
+ deps.logger.error(`Error handling account update notification: ${error}`);
112
+ // Continue processing other events
113
+ }
114
+ }
115
+ }
116
+ catch (error) {
117
+ deps.logger.error(`Subscription error: ${error}`);
118
+ // Throw the error so the calling function can restart the subscription
119
+ throw error;
120
+ }
121
+ }
122
+ async function createMonitorStream(get, runs, autoMerge, monitorDeps) {
123
+ const { deps, config } = monitorDeps;
124
+ const programId = config.jobsAddress;
125
+ let abortController = null;
126
+ let isMonitoring = true;
127
+ // Function to stop all monitoring
128
+ const stopMonitoring = () => {
129
+ isMonitoring = false;
130
+ if (abortController) {
131
+ abortController.abort();
132
+ }
133
+ deps.logger.info(`Stopped monitoring job program account updates`);
134
+ };
135
+ // Create async generator that handles reconnection
136
+ const eventStream = (async function* () {
137
+ while (isMonitoring) {
138
+ try {
139
+ deps.logger.info('Attempting to establish WebSocket subscription...');
140
+ abortController = new AbortController();
141
+ const subscriptionIterable = await setupSubscription(deps, programId, abortController);
142
+ deps.logger.info('Successfully established WebSocket subscription');
143
+ // Yield events from the subscription
144
+ yield* createEventStream(subscriptionIterable, () => isMonitoring, autoMerge, get, runs, monitorDeps);
145
+ }
146
+ catch (error) {
147
+ if (!isMonitoring) {
148
+ // Monitoring was stopped, exit gracefully
149
+ return;
150
+ }
151
+ deps.logger.warn(`WebSocket subscription failed: ${error}`);
152
+ // Clean up current subscription
153
+ if (abortController) {
154
+ abortController.abort();
155
+ abortController = null;
156
+ }
157
+ if (isMonitoring) {
158
+ deps.logger.info('Retrying WebSocket subscription in 5 seconds...');
159
+ await new Promise((resolve) => setTimeout(resolve, 5000));
160
+ }
161
+ }
162
+ }
163
+ })();
164
+ deps.logger.info(`Successfully started monitoring job program account updates`);
165
+ return [eventStream, stopMonitoring];
166
+ }
167
+ /**
168
+ * Factory function to create monitor functions
169
+ */
170
+ export function createMonitorFunctions(get, runs, monitorDeps) {
171
+ return {
172
+ async monitor() {
173
+ return createMonitorStream(get, runs, true, monitorDeps);
174
+ },
175
+ async monitorDetailed() {
176
+ return createMonitorStream(get, runs, false, monitorDeps);
177
+ },
178
+ };
179
+ }
180
+ //# sourceMappingURL=monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"monitor.js","sourceRoot":"","sources":["../../../../../src/services/programs/jobs/monitor/monitor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Job, Market, Run } from '../JobsProgram.js';
2
+ /**
3
+ * Monitor event type constants
4
+ */
5
+ export declare const MonitorEventType: {
6
+ readonly JOB: "job";
7
+ readonly MARKET: "market";
8
+ readonly RUN: "run";
9
+ };
10
+ export type MonitorEventType = (typeof MonitorEventType)[keyof typeof MonitorEventType];
11
+ /**
12
+ * Simple monitor event (run accounts are auto-merged into job events)
13
+ */
14
+ export type SimpleMonitorEvent = {
15
+ type: typeof MonitorEventType.JOB;
16
+ data: Job;
17
+ } | {
18
+ type: typeof MonitorEventType.MARKET;
19
+ data: Market;
20
+ };
21
+ /**
22
+ * Event types for monitoring (extends SimpleMonitorEvent with run events)
23
+ */
24
+ export type MonitorEvent = SimpleMonitorEvent | {
25
+ type: typeof MonitorEventType.RUN;
26
+ data: Run;
27
+ };
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Monitor event type constants
3
+ */
4
+ export const MonitorEventType = {
5
+ JOB: 'job',
6
+ MARKET: 'market',
7
+ RUN: 'run',
8
+ };
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/services/programs/jobs/monitor/types.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;CACF,CAAC"}
@@ -1,7 +1,7 @@
1
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';
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
5
  /**
6
6
  * Claim target enum for merkle distributor.
7
7
  * Determines which address receives the claimed tokens.
@@ -97,5 +97,5 @@ export interface MerkleDistributorProgram {
97
97
  * const distributor = await merkleDistributor.get('distributor-address');
98
98
  * ```
99
99
  */
100
- import type { ProgramConfig } from '../../config/types.js';
100
+ import type { ProgramConfig } from '../../../config/types.js';
101
101
  export declare function createMerkleDistributorProgram(deps: ProgramDeps, config: ProgramConfig): MerkleDistributorProgram;
@@ -1,7 +1,7 @@
1
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';
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
5
  import { findAssociatedTokenPda, TOKEN_PROGRAM_ADDRESS } from '@solana-program/token';
6
6
  import { SYSTEM_PROGRAM_ADDRESS } from '@solana-program/system';
7
7
  import bs58 from 'bs58';
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MerkleDistributorProgram.js","sourceRoot":"","sources":["../../../../src/services/programs/merkleDistributor/MerkleDistributorProgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './MerkleDistributorProgram.js';
@@ -0,0 +1,2 @@
1
+ export * from './MerkleDistributorProgram.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/programs/merkleDistributor/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC"}
@@ -1,7 +1,7 @@
1
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';
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
5
  export type Stake = ConvertTypesForDb<programClient.StakeAccountArgs> & {
6
6
  address: Address;
7
7
  };
@@ -42,5 +42,5 @@ export interface StakeProgram {
42
42
  * const stake = await stakeProgram.get('stake-address');
43
43
  * ```
44
44
  */
45
- import type { ProgramConfig } from '../../config/types.js';
45
+ import type { ProgramConfig } from '../../../config/types.js';
46
46
  export declare function createStakeProgram(deps: ProgramDeps, config: ProgramConfig): StakeProgram;
@@ -1,6 +1,6 @@
1
1
  import { parseBase64RpcAccount } from '@solana/kit';
2
- import * as programClient from '../../generated_clients/staking/index.js';
3
- import { convertBigIntToNumber } from '../../utils/index.js';
2
+ import * as programClient from '../../../generated_clients/staking/index.js';
3
+ import { convertBigIntToNumber } from '../../../utils/index.js';
4
4
  import bs58 from 'bs58';
5
5
  export function createStakeProgram(deps, config) {
6
6
  const programId = config.stakeAddress;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StakeProgram.js","sourceRoot":"","sources":["../../../../src/services/programs/stake/StakeProgram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './StakeProgram.js';
@@ -0,0 +1,2 @@
1
+ export * from './StakeProgram.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/programs/stake/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
@@ -1,8 +1,10 @@
1
1
  import { createSolanaRpc, createSolanaRpcSubscriptions, Address, Signature, Instruction, TransactionMessageWithBlockhashLifetime, sendAndConfirmTransactionFactory, TransactionMessageWithFeePayer, TransactionMessage, SendableTransaction, Transaction, BaseTransactionMessage, TransactionSigner, TransactionWithBlockhashLifetime } from '@solana/kit';
2
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';
3
+ import { getCreateAssociatedTokenIdempotentInstructionAsync } from '@solana-program/token';
4
+ import { getTransferSolInstruction } from '@solana-program/system';
5
+ import { Logger } from '../../logger/Logger.js';
6
+ import { Wallet } from '../../types.js';
7
+ import { SolanaConfig } from '../../config/types.js';
6
8
  /**
7
9
  * Factory function to create an estimateAndSetComputeUnitLimit function
8
10
  * that estimates compute units and adds the set compute unit limit instruction
@@ -44,6 +46,32 @@ export interface SolanaService {
44
46
  feePayer?: TransactionSigner;
45
47
  commitment?: 'processed' | 'confirmed' | 'finalized';
46
48
  }): Promise<Signature>;
49
+ /**
50
+ * Get an instruction to transfer SOL from one address to another.
51
+ *
52
+ * @param params Transfer parameters
53
+ * @param params.to Recipient address
54
+ * @param params.amount Amount in lamports (number or bigint)
55
+ * @param params.from Optional sender TransactionSigner. If not provided, uses wallet from client.
56
+ * @returns An instruction to transfer SOL
57
+ */
58
+ transfer(params: {
59
+ to: Address | string;
60
+ amount: number | bigint;
61
+ from?: TransactionSigner;
62
+ }): Promise<ReturnType<typeof getTransferSolInstruction>>;
63
+ /**
64
+ * Get an instruction to create an associated token account if it doesn't exist.
65
+ * Checks if the ATA exists, and if not, returns an instruction to create it.
66
+ * Uses the idempotent version so it's safe to call even if the account already exists.
67
+ *
68
+ * @param ata The associated token account address
69
+ * @param mint The token mint address
70
+ * @param owner The owner of the associated token account
71
+ * @param payer Optional payer for the account creation. If not provided, uses the wallet or service feePayer.
72
+ * @returns An instruction to create the ATA if it doesn't exist, or null if it already exists
73
+ */
74
+ getCreateATAInstructionIfNeeded(ata: Address, mint: Address, owner: Address, payer?: TransactionSigner): Promise<Awaited<ReturnType<typeof getCreateAssociatedTokenIdempotentInstructionAsync>> | null>;
47
75
  }
48
76
  /**
49
77
  * Creates a Solana service instance.
@@ -1,6 +1,9 @@
1
1
  import { createSolanaRpc, createSolanaRpcSubscriptions, address, getProgramDerivedAddress, getAddressEncoder, createTransactionMessage, signTransactionMessageWithSigners, getSignatureFromTransaction, setTransactionMessageFeePayerSigner, setTransactionMessageLifetimeUsingBlockhash, sendAndConfirmTransactionFactory, appendTransactionMessageInstructions, pipe, assertIsSendableTransaction, } from '@solana/kit';
2
2
  import { estimateComputeUnitLimitFactory, getSetComputeUnitLimitInstruction, } from '@solana-program/compute-budget';
3
- import { NosanaError, ErrorCodes } from '../errors/NosanaError.js';
3
+ import { getCreateAssociatedTokenIdempotentInstructionAsync, TOKEN_PROGRAM_ADDRESS, } from '@solana-program/token';
4
+ import { SYSTEM_PROGRAM_ADDRESS, getTransferSolInstruction } from '@solana-program/system';
5
+ import { NosanaError, ErrorCodes } from '../../errors/NosanaError.js';
6
+ import { convertHttpToWebSocketUrl } from '../../utils/convertHttpToWebSocketUrl.js';
4
7
  /**
5
8
  * Factory function to create an estimateAndSetComputeUnitLimit function
6
9
  * that estimates compute units and adds the set compute unit limit instruction
@@ -20,8 +23,9 @@ export function createSolanaService(deps, config) {
20
23
  throw new NosanaError('RPC URL is required', ErrorCodes.INVALID_CONFIG);
21
24
  }
22
25
  const rpc = createSolanaRpc(config.rpcEndpoint);
23
- // Use wsEndpoint if provided, otherwise fall back to rpcEndpoint
24
- const rpcSubscriptions = createSolanaRpcSubscriptions(config.wsEndpoint ?? config.rpcEndpoint);
26
+ // Use wsEndpoint if provided, otherwise convert rpcEndpoint from http(s) to ws(s)
27
+ const wsUrl = config.wsEndpoint ?? convertHttpToWebSocketUrl(config.rpcEndpoint);
28
+ const rpcSubscriptions = createSolanaRpcSubscriptions(wsUrl);
25
29
  const sendAndConfirmTransaction = sendAndConfirmTransactionFactory({
26
30
  rpc,
27
31
  rpcSubscriptions,
@@ -197,6 +201,83 @@ export function createSolanaService(deps, config) {
197
201
  const signedTransaction = await this.signTransaction(transactionMessage);
198
202
  return await this.sendTransaction(signedTransaction, { commitment: options?.commitment });
199
203
  },
204
+ /**
205
+ * Get an instruction to transfer SOL from one address to another.
206
+ *
207
+ * @param params Transfer parameters
208
+ * @param params.to Recipient address
209
+ * @param params.amount Amount in lamports (number or bigint)
210
+ * @param params.from Optional sender TransactionSigner. If not provided, uses wallet from client.
211
+ * @returns An instruction to transfer SOL
212
+ */
213
+ async transfer(params) {
214
+ try {
215
+ // Determine sender: use params.from if provided, otherwise get from wallet
216
+ const sender = params.from ?? deps.getWallet();
217
+ if (!sender) {
218
+ throw new NosanaError('No wallet found and no from parameter provided', ErrorCodes.NO_WALLET);
219
+ }
220
+ // Convert amount to bigint if it's a number
221
+ const amountBigInt = typeof params.amount === 'bigint' ? params.amount : BigInt(params.amount);
222
+ // Convert recipient to Address
223
+ const recipient = typeof params.to === 'string' ? address(params.to) : params.to;
224
+ deps.logger.debug(`Creating SOL transfer instruction: ${amountBigInt} lamports from ${sender.address} to ${recipient}`);
225
+ // Create and return transfer instruction
226
+ const instruction = getTransferSolInstruction({
227
+ source: sender,
228
+ destination: recipient,
229
+ amount: amountBigInt,
230
+ });
231
+ return instruction;
232
+ }
233
+ catch (error) {
234
+ if (error instanceof NosanaError) {
235
+ throw error;
236
+ }
237
+ deps.logger.error(`Failed to get transfer SOL instruction: ${error}`);
238
+ throw new NosanaError('Failed to get transfer SOL instruction', ErrorCodes.TRANSACTION_ERROR, error);
239
+ }
240
+ },
241
+ /**
242
+ * Get an instruction to create an associated token account if it doesn't exist.
243
+ * Checks if the ATA exists, and if not, returns an instruction to create it.
244
+ * Uses the idempotent version so it's safe to call even if the account already exists.
245
+ *
246
+ * @param ata The associated token account address
247
+ * @param mint The token mint address
248
+ * @param owner The owner of the associated token account
249
+ * @param payer Optional payer for the account creation. If not provided, uses the wallet or service feePayer.
250
+ * @returns An instruction to create the ATA if it doesn't exist, or null if it already exists
251
+ */
252
+ async getCreateATAInstructionIfNeeded(ata, mint, owner, payer) {
253
+ try {
254
+ // Check if the account exists
255
+ const accountInfo = await rpc.getAccountInfo(ata).send();
256
+ if (accountInfo.value !== null) {
257
+ // Account already exists
258
+ return null;
259
+ }
260
+ // Account doesn't exist, create instruction
261
+ // Priority: provided payer > service feePayer > wallet
262
+ const instructionPayer = payer ?? feePayer ?? deps.getWallet();
263
+ if (!instructionPayer) {
264
+ throw new NosanaError('No payer found for creating associated token account', ErrorCodes.NO_WALLET);
265
+ }
266
+ const instruction = await getCreateAssociatedTokenIdempotentInstructionAsync({
267
+ payer: instructionPayer,
268
+ ata,
269
+ owner,
270
+ mint,
271
+ systemProgram: SYSTEM_PROGRAM_ADDRESS,
272
+ tokenProgram: TOKEN_PROGRAM_ADDRESS,
273
+ });
274
+ return instruction;
275
+ }
276
+ catch (error) {
277
+ deps.logger.error(`Failed to get create ATA instruction: ${error}`);
278
+ throw new NosanaError('Failed to get create ATA instruction', ErrorCodes.RPC_ERROR, error);
279
+ }
280
+ },
200
281
  };
201
282
  }
202
283
  //# sourceMappingURL=SolanaService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SolanaService.js","sourceRoot":"","sources":["../../../src/services/solana/SolanaService.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './SolanaService.js';