@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.
- package/README.md +96 -24
- package/dist/NosanaClient.d.ts +5 -5
- package/dist/NosanaClient.js +6 -5
- package/dist/NosanaClient.js.map +1 -1
- package/dist/index.d.ts +9 -9
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/dist/services/programs/jobs/JobsProgram.d.ts +152 -0
- package/dist/services/programs/{JobsProgram.js → jobs/JobsProgram.js} +133 -224
- package/dist/services/programs/jobs/JobsProgram.js.map +1 -0
- package/dist/services/programs/jobs/index.d.ts +1 -0
- package/dist/services/programs/jobs/index.js +2 -0
- package/dist/services/programs/jobs/index.js.map +1 -0
- package/dist/services/programs/jobs/instructions/delist.d.ts +9 -0
- package/dist/services/programs/jobs/instructions/delist.js +29 -0
- package/dist/services/programs/jobs/instructions/delist.js.map +1 -0
- package/dist/services/programs/jobs/instructions/end.d.ts +9 -0
- package/dist/services/programs/jobs/instructions/end.js +36 -0
- package/dist/services/programs/jobs/instructions/end.js.map +1 -0
- package/dist/services/programs/jobs/instructions/extend.d.ts +11 -0
- package/dist/services/programs/jobs/instructions/extend.js +27 -0
- package/dist/services/programs/jobs/instructions/extend.js.map +1 -0
- package/dist/services/programs/jobs/instructions/index.d.ts +4 -0
- package/dist/services/programs/jobs/instructions/index.js +5 -0
- package/dist/services/programs/jobs/instructions/index.js.map +1 -0
- package/dist/services/programs/jobs/instructions/post.d.ts +13 -0
- package/dist/services/programs/jobs/instructions/post.js +36 -0
- package/dist/services/programs/jobs/instructions/post.js.map +1 -0
- package/dist/services/programs/jobs/instructions/types.d.ts +16 -0
- package/dist/services/programs/jobs/instructions/types.js +2 -0
- package/dist/services/programs/jobs/instructions/types.js.map +1 -0
- package/dist/services/programs/jobs/monitor/index.d.ts +3 -0
- package/dist/services/programs/jobs/monitor/index.js +3 -0
- package/dist/services/programs/jobs/monitor/index.js.map +1 -0
- package/dist/services/programs/jobs/monitor/monitor.d.ts +22 -0
- package/dist/services/programs/jobs/monitor/monitor.js +180 -0
- package/dist/services/programs/jobs/monitor/monitor.js.map +1 -0
- package/dist/services/programs/jobs/monitor/types.d.ts +27 -0
- package/dist/services/programs/jobs/monitor/types.js +9 -0
- package/dist/services/programs/jobs/monitor/types.js.map +1 -0
- package/dist/services/programs/{MerkleDistributorProgram.d.ts → merkleDistributor/MerkleDistributorProgram.d.ts} +4 -4
- package/dist/services/programs/{MerkleDistributorProgram.js → merkleDistributor/MerkleDistributorProgram.js} +3 -3
- package/dist/services/programs/merkleDistributor/MerkleDistributorProgram.js.map +1 -0
- package/dist/services/programs/merkleDistributor/index.d.ts +1 -0
- package/dist/services/programs/merkleDistributor/index.js +2 -0
- package/dist/services/programs/merkleDistributor/index.js.map +1 -0
- package/dist/services/programs/{StakeProgram.d.ts → stake/StakeProgram.d.ts} +4 -4
- package/dist/services/programs/{StakeProgram.js → stake/StakeProgram.js} +2 -2
- package/dist/services/programs/stake/StakeProgram.js.map +1 -0
- package/dist/services/programs/stake/index.d.ts +1 -0
- package/dist/services/programs/stake/index.js +2 -0
- package/dist/services/programs/stake/index.js.map +1 -0
- package/dist/services/{SolanaService.d.ts → solana/SolanaService.d.ts} +31 -3
- package/dist/services/{SolanaService.js → solana/SolanaService.js} +84 -3
- package/dist/services/solana/SolanaService.js.map +1 -0
- package/dist/services/solana/index.d.ts +1 -0
- package/dist/services/solana/index.js +2 -0
- package/dist/services/solana/index.js.map +1 -0
- package/dist/services/token/TokenService.d.ts +63 -0
- package/dist/services/{TokenService.js → token/TokenService.js} +69 -2
- package/dist/services/token/TokenService.js.map +1 -0
- package/dist/services/token/index.d.ts +1 -0
- package/dist/services/token/index.js +2 -0
- package/dist/services/token/index.js.map +1 -0
- package/dist/types.d.ts +3 -1
- package/dist/utils/convertHttpToWebSocketUrl.d.ts +28 -0
- package/dist/utils/convertHttpToWebSocketUrl.js +37 -0
- package/dist/utils/convertHttpToWebSocketUrl.js.map +1 -0
- package/dist/utils/getStaticAccounts.d.ts +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/package.json +4 -4
- package/dist/services/SolanaService.js.map +0 -1
- package/dist/services/TokenService.d.ts +0 -41
- package/dist/services/TokenService.js.map +0 -1
- package/dist/services/programs/JobsProgram.d.ts +0 -106
- package/dist/services/programs/JobsProgram.js.map +0 -1
- package/dist/services/programs/MerkleDistributorProgram.js.map +0 -1
- 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 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../src/services/programs/jobs/instructions/types.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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 '
|
|
3
|
-
import * as programClient from '
|
|
4
|
-
import { ConvertTypesForDb } from '
|
|
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 '
|
|
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 '
|
|
3
|
-
import * as programClient from '
|
|
4
|
-
import { convertBigIntToNumber } from '
|
|
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 @@
|
|
|
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 '
|
|
3
|
-
import * as programClient from '
|
|
4
|
-
import { ConvertTypesForDb } from '
|
|
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 '
|
|
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 '
|
|
3
|
-
import { convertBigIntToNumber } from '
|
|
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 @@
|
|
|
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 {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
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 {
|
|
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
|
|
24
|
-
const
|
|
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';
|