@nosana/kit 0.1.1 → 0.1.2
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/.gitlab-ci.yml +6 -5
- package/dist/config/defaultConfigs.js +15 -18
- package/dist/config/index.js +3 -19
- package/dist/config/types.d.ts +1 -3
- package/dist/config/types.js +4 -7
- package/dist/config/utils.js +8 -13
- package/dist/errors/NosanaError.d.ts +1 -0
- package/dist/errors/NosanaError.js +3 -6
- package/dist/generated_clients/jobs/accounts/index.js +3 -19
- package/dist/generated_clients/jobs/accounts/jobAccount.js +46 -59
- package/dist/generated_clients/jobs/accounts/marketAccount.js +45 -57
- package/dist/generated_clients/jobs/accounts/runAccount.js +36 -49
- package/dist/generated_clients/jobs/errors/index.js +1 -17
- package/dist/generated_clients/jobs/errors/nosanaJobs.js +43 -48
- package/dist/generated_clients/jobs/index.js +5 -21
- package/dist/generated_clients/jobs/instructions/claim.js +17 -26
- package/dist/generated_clients/jobs/instructions/clean.js +17 -26
- package/dist/generated_clients/jobs/instructions/cleanAdmin.js +17 -26
- package/dist/generated_clients/jobs/instructions/close.js +17 -26
- package/dist/generated_clients/jobs/instructions/closeAdmin.js +17 -26
- package/dist/generated_clients/jobs/instructions/complete.js +21 -30
- package/dist/generated_clients/jobs/instructions/delist.js +17 -26
- package/dist/generated_clients/jobs/instructions/end.js +17 -26
- package/dist/generated_clients/jobs/instructions/extend.js +21 -30
- package/dist/generated_clients/jobs/instructions/finish.js +21 -30
- package/dist/generated_clients/jobs/instructions/index.js +18 -34
- package/dist/generated_clients/jobs/instructions/list.js +23 -32
- package/dist/generated_clients/jobs/instructions/open.js +29 -38
- package/dist/generated_clients/jobs/instructions/quit.js +17 -26
- package/dist/generated_clients/jobs/instructions/quitAdmin.js +17 -26
- package/dist/generated_clients/jobs/instructions/recover.js +17 -26
- package/dist/generated_clients/jobs/instructions/stop.js +17 -26
- package/dist/generated_clients/jobs/instructions/update.js +29 -38
- package/dist/generated_clients/jobs/instructions/work.js +17 -26
- package/dist/generated_clients/jobs/programs/index.js +1 -17
- package/dist/generated_clients/jobs/programs/nosanaJobs.js +29 -34
- package/dist/generated_clients/jobs/shared/index.js +13 -21
- package/dist/generated_clients/jobs/types/index.js +3 -19
- package/dist/generated_clients/jobs/types/jobState.js +9 -15
- package/dist/generated_clients/jobs/types/jobType.js +9 -15
- package/dist/generated_clients/jobs/types/queueType.js +9 -15
- package/dist/index.d.ts +5 -1
- package/dist/index.js +149 -35
- package/dist/ipfs/IPFS.js +5 -12
- package/dist/logger/Logger.js +1 -5
- package/dist/programs/BaseProgram.js +1 -5
- package/dist/programs/JobsProgram.d.ts +2 -3
- package/dist/programs/JobsProgram.js +35 -99
- package/dist/solana/SolanaUtils.d.ts +15 -1
- package/dist/solana/SolanaUtils.js +81 -14
- package/dist/utils/index.js +1 -4
- package/examples/browser/.gitlab-ci.yml +78 -0
- package/examples/browser/FEATURES.md +141 -0
- package/examples/browser/QUICK_START.md +76 -0
- package/examples/browser/README.md +182 -0
- package/examples/browser/app.vue +1840 -0
- package/examples/browser/assets/css/main.css +7 -0
- package/examples/browser/nuxt.config.ts +24 -0
- package/examples/browser/package-lock.json +11855 -0
- package/examples/browser/package.json +31 -0
- package/examples/browser/public/favicon.ico +0 -0
- package/examples/browser/public/robots.txt +2 -0
- package/examples/browser/start.sh +38 -0
- package/examples/browser/tailwind.config.js +26 -0
- package/examples/node/README.md +146 -0
- package/examples/node/example-keypair.json +1 -0
- package/examples/node/package-lock.json +500 -156
- package/examples/node/package.json +5 -3
- package/examples/node/post-job.ts +160 -0
- package/examples/node/set-wallet.ts +87 -0
- package/package.json +3 -1
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
"name": "nosana-sdk-node-examples",
|
|
3
3
|
"version": "1.0.0",
|
|
4
4
|
"description": "Example scripts for using the Nosana SDK",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"scripts": {
|
|
6
|
-
"retrieve": "
|
|
7
|
-
"monitor": "
|
|
7
|
+
"retrieve": "tsx retrieve.ts",
|
|
8
|
+
"monitor": "tsx monitor.ts",
|
|
9
|
+
"set-wallet": "tsx set-wallet.ts"
|
|
8
10
|
},
|
|
9
11
|
"dependencies": {
|
|
10
12
|
"@nosana/kit": "file:../.."
|
|
11
13
|
},
|
|
12
14
|
"devDependencies": {
|
|
13
|
-
"
|
|
15
|
+
"tsx": "^4.0.0",
|
|
14
16
|
"typescript": "^5.0.0"
|
|
15
17
|
}
|
|
16
18
|
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { NosanaClient, NosanaNetwork } from '@nosana/kit';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
|
|
4
|
+
async function main() {
|
|
5
|
+
console.log('🚀 Nosana Job Posting Example');
|
|
6
|
+
console.log('===============================\n');
|
|
7
|
+
|
|
8
|
+
try {
|
|
9
|
+
// Initialize the client
|
|
10
|
+
console.log('📡 Initializing Nosana client...');
|
|
11
|
+
const client = new NosanaClient(NosanaNetwork.DEVNET);
|
|
12
|
+
|
|
13
|
+
// Set up the wallet using the example keypair
|
|
14
|
+
const keypairPath = path.join(__dirname, 'example-keypair.json');
|
|
15
|
+
console.log('🔑 Setting up wallet from:', keypairPath);
|
|
16
|
+
|
|
17
|
+
const wallet = await client.setWallet(keypairPath);
|
|
18
|
+
console.log('✅ Wallet address:', wallet?.address);
|
|
19
|
+
|
|
20
|
+
// Get available markets
|
|
21
|
+
console.log('\n📊 Fetching available markets...');
|
|
22
|
+
const markets = await client.jobs.markets();
|
|
23
|
+
|
|
24
|
+
if (markets.length === 0) {
|
|
25
|
+
throw new Error('No markets available. Please check your network connection and try again.');
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
console.log(`✅ Found ${markets.length} market(s)`);
|
|
29
|
+
const market = markets[0]; // Use the first available market
|
|
30
|
+
console.log(`📈 Using market: ${market.address}`);
|
|
31
|
+
|
|
32
|
+
// Example job configuration
|
|
33
|
+
const jobConfig = {
|
|
34
|
+
// Market to post the job to
|
|
35
|
+
market: market.address,
|
|
36
|
+
|
|
37
|
+
// Job timeout in seconds (1 hour)
|
|
38
|
+
timeout: 3600,
|
|
39
|
+
|
|
40
|
+
// IPFS hash of the job specification
|
|
41
|
+
// In a real scenario, you would upload your job specification to IPFS first
|
|
42
|
+
ipfsHash: 'QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N', // Example IPFS hash
|
|
43
|
+
|
|
44
|
+
// Optional: specify a particular node (leave undefined for open market)
|
|
45
|
+
// node: 'NodeAddressHere'
|
|
46
|
+
};
|
|
47
|
+
|
|
48
|
+
console.log('\n📝 Job Configuration:');
|
|
49
|
+
console.log(' Market:', jobConfig.market.toString());
|
|
50
|
+
console.log(' Timeout:', jobConfig.timeout, 'seconds');
|
|
51
|
+
console.log(' IPFS Hash:', jobConfig.ipfsHash);
|
|
52
|
+
|
|
53
|
+
// Step 1: Create the job listing instruction
|
|
54
|
+
console.log('\n🔧 Creating job listing instruction...');
|
|
55
|
+
const instruction = await client.jobs.post(jobConfig);
|
|
56
|
+
console.log('✅ Instruction created successfully');
|
|
57
|
+
console.log(' Program Address:', instruction.programAddress);
|
|
58
|
+
console.log(' Accounts:', instruction.accounts.length);
|
|
59
|
+
|
|
60
|
+
// Step 2: Send the instruction using the send utility
|
|
61
|
+
console.log('\n📤 Sending job listing transaction...');
|
|
62
|
+
const signature = await client.solana.send(instruction);
|
|
63
|
+
console.log('✅ Transaction sent successfully!');
|
|
64
|
+
console.log(' Transaction Signature:', signature);
|
|
65
|
+
|
|
66
|
+
// You can view the transaction on Solana Explorer
|
|
67
|
+
const explorerUrl = `https://explorer.solana.com/tx/${signature}?cluster=${client.config.solana.cluster}`;
|
|
68
|
+
console.log(' View on Explorer:', explorerUrl);
|
|
69
|
+
|
|
70
|
+
console.log('\n🎉 Job posted successfully!');
|
|
71
|
+
console.log('💡 Your job is now listed on the Nosana network and waiting for nodes to pick it up.');
|
|
72
|
+
|
|
73
|
+
} catch (error) {
|
|
74
|
+
console.error('\n❌ Error posting job:', error);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Advanced example showing multiple instructions in one transaction
|
|
80
|
+
async function advancedExample() {
|
|
81
|
+
console.log('\n\n🔬 Advanced Example: Multiple Instructions');
|
|
82
|
+
console.log('==========================================\n');
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
const client = new NosanaClient(NosanaNetwork.DEVNET);
|
|
86
|
+
const keypairPath = path.join(__dirname, 'example-keypair.json');
|
|
87
|
+
await client.setWallet(keypairPath);
|
|
88
|
+
|
|
89
|
+
const markets = await client.jobs.markets();
|
|
90
|
+
if (markets.length === 0) {
|
|
91
|
+
throw new Error('No markets available');
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Create multiple job instructions
|
|
95
|
+
const instructions = [];
|
|
96
|
+
|
|
97
|
+
for (let i = 0; i < 2; i++) {
|
|
98
|
+
const jobConfig = {
|
|
99
|
+
market: markets[0].address,
|
|
100
|
+
timeout: 3600,
|
|
101
|
+
ipfsHash: `QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx${i}N`, // Different IPFS hashes
|
|
102
|
+
};
|
|
103
|
+
|
|
104
|
+
console.log(`🔧 Creating job ${i + 1} instruction...`);
|
|
105
|
+
const instruction = await client.jobs.post(jobConfig);
|
|
106
|
+
instructions.push(instruction);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Send all instructions in a single transaction
|
|
110
|
+
console.log('\n📤 Sending batch transaction with multiple jobs...');
|
|
111
|
+
const signature = await client.solana.send(instructions);
|
|
112
|
+
console.log('✅ Batch transaction sent successfully!');
|
|
113
|
+
console.log(' Transaction Signature:', signature);
|
|
114
|
+
|
|
115
|
+
console.log('\n🎉 Multiple jobs posted in a single transaction!');
|
|
116
|
+
|
|
117
|
+
} catch (error) {
|
|
118
|
+
console.error('\n❌ Error in advanced example:', error);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// Example of error handling
|
|
123
|
+
async function errorHandlingExample() {
|
|
124
|
+
console.log('\n\n⚠️ Error Handling Example');
|
|
125
|
+
console.log('==========================\n');
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
const client = new NosanaClient(NosanaNetwork.DEVNET);
|
|
129
|
+
|
|
130
|
+
// Try to post without setting a wallet (this will fail)
|
|
131
|
+
console.log('🔧 Attempting to post job without wallet...');
|
|
132
|
+
|
|
133
|
+
const jobConfig = {
|
|
134
|
+
market: 'InvalidMarketAddress' as any,
|
|
135
|
+
timeout: 3600,
|
|
136
|
+
ipfsHash: 'QmYyQSo1c1Ym7orWxLYvCrM2EmxFTANf8wXmmE7DWjhx5N',
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
await client.jobs.post(jobConfig);
|
|
140
|
+
|
|
141
|
+
} catch (error) {
|
|
142
|
+
console.log('✅ Caught expected error:', error.message);
|
|
143
|
+
console.log('💡 Always ensure your wallet is set before posting jobs!');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Run all examples
|
|
148
|
+
if (require.main === module) {
|
|
149
|
+
main()
|
|
150
|
+
.then(() => advancedExample())
|
|
151
|
+
.then(() => errorHandlingExample())
|
|
152
|
+
.then(() => {
|
|
153
|
+
console.log('\n✨ All examples completed!');
|
|
154
|
+
process.exit(0);
|
|
155
|
+
})
|
|
156
|
+
.catch((error) => {
|
|
157
|
+
console.error('Fatal error:', error);
|
|
158
|
+
process.exit(1);
|
|
159
|
+
});
|
|
160
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { NosanaClient, NosanaNetwork } from '@nosana/kit';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import { fileURLToPath } from 'url';
|
|
4
|
+
|
|
5
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
+
const __dirname = path.dirname(__filename);
|
|
7
|
+
|
|
8
|
+
async function main() {
|
|
9
|
+
console.log('🚀 Nosana Client setWallet Examples\n');
|
|
10
|
+
|
|
11
|
+
// Initialize the client
|
|
12
|
+
const client = new NosanaClient(NosanaNetwork.DEVNET);
|
|
13
|
+
|
|
14
|
+
// Example 1: Set wallet from file path
|
|
15
|
+
console.log('1. Setting wallet from file path...');
|
|
16
|
+
try {
|
|
17
|
+
const keypairPath = path.join(__dirname, 'example-keypair.json');
|
|
18
|
+
|
|
19
|
+
const wallet1 = await client.setWallet(keypairPath);
|
|
20
|
+
console.log('✅ Wallet set from file path successfully');
|
|
21
|
+
console.log(' Address:', wallet1?.address);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.error('❌ Error setting wallet from file:', error);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Example 2: Set wallet from JSON array string
|
|
27
|
+
console.log('\n2. Setting wallet from JSON array string...');
|
|
28
|
+
try {
|
|
29
|
+
const jsonArrayString = '[66,240,117,68,169,30,179,62,57,123,28,249,122,218,186,173,196,222,208,58,126,168,32,91,126,64,102,33,220,51,49,97,6,197,228,206,210,117,23,184,89,48,217,110,194,137,242,129,112,23,140,120,148,249,210,18,105,192,40,197,250,132,40,149]';
|
|
30
|
+
const wallet2 = await client.setWallet(jsonArrayString);
|
|
31
|
+
console.log('✅ Wallet set from JSON array string successfully');
|
|
32
|
+
console.log(' Address:', wallet2?.address);
|
|
33
|
+
} catch (error) {
|
|
34
|
+
console.error('❌ Error setting wallet from JSON array string:', error);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Example 3: Set wallet from number array
|
|
38
|
+
console.log('\n3. Setting wallet from number array...');
|
|
39
|
+
try {
|
|
40
|
+
const numberArray = [66, 240, 117, 68, 169, 30, 179, 62, 57, 123, 28, 249, 122, 218, 186, 173, 196, 222, 208, 58, 126, 168, 32, 91, 126, 64, 102, 33, 220, 51, 49, 97, 6, 197, 228, 206, 210, 117, 23, 184, 89, 48, 217, 110, 194, 137, 242, 129, 112, 23, 140, 120, 148, 249, 210, 18, 105, 192, 40, 197, 250, 132, 40, 149];
|
|
41
|
+
const wallet3 = await client.setWallet(numberArray);
|
|
42
|
+
console.log('✅ Wallet set from number array successfully');
|
|
43
|
+
console.log(' Address:', wallet3?.address);
|
|
44
|
+
} catch (error) {
|
|
45
|
+
console.error('❌ Error setting wallet from number array:', error);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Example 4: Set wallet from base58 string
|
|
49
|
+
console.log('\n4. Setting wallet from base58 string...');
|
|
50
|
+
try {
|
|
51
|
+
// This is the base58 encoded version of the same keypair
|
|
52
|
+
const base58String = '2Ld9Q8E9TxsSPf9Zkxn55u2EuuXBZUiV3XJf1duTnKmH1GgEfhW4tYoTRh5GKMWSd8j853YrtJMN74hixjLsnkRJ';
|
|
53
|
+
const wallet4 = await client.setWallet(base58String);
|
|
54
|
+
console.log('✅ Wallet set from base58 string successfully');
|
|
55
|
+
console.log(' Address:', wallet4?.address);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
console.error('❌ Error setting wallet from base58 string:', error);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Example 5: Set wallet from environment variable
|
|
61
|
+
console.log('\n5. Setting wallet from environment variable...');
|
|
62
|
+
try {
|
|
63
|
+
// Set an environment variable with the keypair
|
|
64
|
+
process.env.EXAMPLE_WALLET_KEY = '[66,240,117,68,169,30,179,62,57,123,28,249,122,218,186,173,196,222,208,58,126,168,32,91,126,64,102,33,220,51,49,97,6,197,228,206,210,117,23,184,89,48,217,110,194,137,242,129,112,23,140,120,148,249,210,18,105,192,40,197,250,132,40,149]';
|
|
65
|
+
|
|
66
|
+
const wallet5 = await client.setWallet('EXAMPLE_WALLET_KEY');
|
|
67
|
+
console.log('✅ Wallet set from environment variable successfully');
|
|
68
|
+
console.log(' Address:', wallet5?.address);
|
|
69
|
+
|
|
70
|
+
// Clean up
|
|
71
|
+
delete process.env.EXAMPLE_WALLET_KEY;
|
|
72
|
+
} catch (error) {
|
|
73
|
+
console.error('❌ Error setting wallet from environment variable:', error);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Example 6: Demonstrate error handling
|
|
77
|
+
console.log('\n6. Demonstrating error handling...');
|
|
78
|
+
try {
|
|
79
|
+
await client.setWallet('invalid-wallet-data');
|
|
80
|
+
} catch (error) {
|
|
81
|
+
console.log('✅ Error handling works correctly:', error instanceof Error ? error.message : error);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
console.log('\n🎉 All setWallet examples completed!');
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
main().catch(console.error);
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nosana/kit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Nosana KIT",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
7
8
|
"scripts": {
|
|
@@ -24,6 +25,7 @@
|
|
|
24
25
|
"dependencies": {
|
|
25
26
|
"@solana-program/token": "^0.5.1",
|
|
26
27
|
"bs58": "^6.0.0",
|
|
28
|
+
"buffer": "^6.0.3",
|
|
27
29
|
"gill": "^0.9.0"
|
|
28
30
|
},
|
|
29
31
|
"devDependencies": {
|