@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.
Files changed (71) hide show
  1. package/.gitlab-ci.yml +6 -5
  2. package/dist/config/defaultConfigs.js +15 -18
  3. package/dist/config/index.js +3 -19
  4. package/dist/config/types.d.ts +1 -3
  5. package/dist/config/types.js +4 -7
  6. package/dist/config/utils.js +8 -13
  7. package/dist/errors/NosanaError.d.ts +1 -0
  8. package/dist/errors/NosanaError.js +3 -6
  9. package/dist/generated_clients/jobs/accounts/index.js +3 -19
  10. package/dist/generated_clients/jobs/accounts/jobAccount.js +46 -59
  11. package/dist/generated_clients/jobs/accounts/marketAccount.js +45 -57
  12. package/dist/generated_clients/jobs/accounts/runAccount.js +36 -49
  13. package/dist/generated_clients/jobs/errors/index.js +1 -17
  14. package/dist/generated_clients/jobs/errors/nosanaJobs.js +43 -48
  15. package/dist/generated_clients/jobs/index.js +5 -21
  16. package/dist/generated_clients/jobs/instructions/claim.js +17 -26
  17. package/dist/generated_clients/jobs/instructions/clean.js +17 -26
  18. package/dist/generated_clients/jobs/instructions/cleanAdmin.js +17 -26
  19. package/dist/generated_clients/jobs/instructions/close.js +17 -26
  20. package/dist/generated_clients/jobs/instructions/closeAdmin.js +17 -26
  21. package/dist/generated_clients/jobs/instructions/complete.js +21 -30
  22. package/dist/generated_clients/jobs/instructions/delist.js +17 -26
  23. package/dist/generated_clients/jobs/instructions/end.js +17 -26
  24. package/dist/generated_clients/jobs/instructions/extend.js +21 -30
  25. package/dist/generated_clients/jobs/instructions/finish.js +21 -30
  26. package/dist/generated_clients/jobs/instructions/index.js +18 -34
  27. package/dist/generated_clients/jobs/instructions/list.js +23 -32
  28. package/dist/generated_clients/jobs/instructions/open.js +29 -38
  29. package/dist/generated_clients/jobs/instructions/quit.js +17 -26
  30. package/dist/generated_clients/jobs/instructions/quitAdmin.js +17 -26
  31. package/dist/generated_clients/jobs/instructions/recover.js +17 -26
  32. package/dist/generated_clients/jobs/instructions/stop.js +17 -26
  33. package/dist/generated_clients/jobs/instructions/update.js +29 -38
  34. package/dist/generated_clients/jobs/instructions/work.js +17 -26
  35. package/dist/generated_clients/jobs/programs/index.js +1 -17
  36. package/dist/generated_clients/jobs/programs/nosanaJobs.js +29 -34
  37. package/dist/generated_clients/jobs/shared/index.js +13 -21
  38. package/dist/generated_clients/jobs/types/index.js +3 -19
  39. package/dist/generated_clients/jobs/types/jobState.js +9 -15
  40. package/dist/generated_clients/jobs/types/jobType.js +9 -15
  41. package/dist/generated_clients/jobs/types/queueType.js +9 -15
  42. package/dist/index.d.ts +5 -1
  43. package/dist/index.js +149 -35
  44. package/dist/ipfs/IPFS.js +5 -12
  45. package/dist/logger/Logger.js +1 -5
  46. package/dist/programs/BaseProgram.js +1 -5
  47. package/dist/programs/JobsProgram.d.ts +2 -3
  48. package/dist/programs/JobsProgram.js +35 -99
  49. package/dist/solana/SolanaUtils.d.ts +15 -1
  50. package/dist/solana/SolanaUtils.js +81 -14
  51. package/dist/utils/index.js +1 -4
  52. package/examples/browser/.gitlab-ci.yml +78 -0
  53. package/examples/browser/FEATURES.md +141 -0
  54. package/examples/browser/QUICK_START.md +76 -0
  55. package/examples/browser/README.md +182 -0
  56. package/examples/browser/app.vue +1840 -0
  57. package/examples/browser/assets/css/main.css +7 -0
  58. package/examples/browser/nuxt.config.ts +24 -0
  59. package/examples/browser/package-lock.json +11855 -0
  60. package/examples/browser/package.json +31 -0
  61. package/examples/browser/public/favicon.ico +0 -0
  62. package/examples/browser/public/robots.txt +2 -0
  63. package/examples/browser/start.sh +38 -0
  64. package/examples/browser/tailwind.config.js +26 -0
  65. package/examples/node/README.md +146 -0
  66. package/examples/node/example-keypair.json +1 -0
  67. package/examples/node/package-lock.json +500 -156
  68. package/examples/node/package.json +5 -3
  69. package/examples/node/post-job.ts +160 -0
  70. package/examples/node/set-wallet.ts +87 -0
  71. 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": "ts-node retrieve.ts",
7
- "monitor": "ts-node monitor.ts"
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
- "ts-node": "^10.9.1",
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.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": {