@validators-dao/solana-stream-sdk 0.1.0 → 0.2.0

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 CHANGED
@@ -16,18 +16,188 @@ pnpm add @validators-dao/solana-stream-sdk
16
16
 
17
17
  ## Usage
18
18
 
19
- ```typescript
20
- import { gRPC, bs58 } from '@validators-dao/solana-stream-sdk'
19
+ Example of using the GeyserClient to subscribe to Solana Pump Fun transactions and accounts:
21
20
 
22
- // Use the gRPC client for Yellowstone streams
23
- // Use bs58 for base58 encoding/decoding
21
+ ```typescript
22
+ import {
23
+ GeyserClient,
24
+ bs58,
25
+ CommitmentLevel,
26
+ SubscribeRequestAccountsDataSlice,
27
+ SubscribeRequestFilterAccounts,
28
+ SubscribeRequestFilterBlocks,
29
+ SubscribeRequestFilterBlocksMeta,
30
+ SubscribeRequestFilterEntry,
31
+ SubscribeRequestFilterSlots,
32
+ SubscribeRequestFilterTransactions,
33
+ } from '@validators-dao/solana-stream-sdk'
34
+ import 'dotenv/config'
35
+
36
+ interface SubscribeRequest {
37
+ accounts: {
38
+ [key: string]: SubscribeRequestFilterAccounts
39
+ }
40
+ slots: {
41
+ [key: string]: SubscribeRequestFilterSlots
42
+ }
43
+ transactions: {
44
+ [key: string]: SubscribeRequestFilterTransactions
45
+ }
46
+ transactionsStatus: {
47
+ [key: string]: SubscribeRequestFilterTransactions
48
+ }
49
+ blocks: {
50
+ [key: string]: SubscribeRequestFilterBlocks
51
+ }
52
+ blocksMeta: {
53
+ [key: string]: SubscribeRequestFilterBlocksMeta
54
+ }
55
+ entry: {
56
+ [key: string]: SubscribeRequestFilterEntry
57
+ }
58
+ commitment?: CommitmentLevel | undefined
59
+ accountsDataSlice: SubscribeRequestAccountsDataSlice[]
60
+ ping?: any
61
+ }
62
+
63
+ // const PUMP_FUN_MINT_AUTHORITY = 'TSLvdd1pWpHVjahSpsvCXUbgwsL3JAcvokwaKt1eokM'
64
+ const PUMP_FUN_PROGRAM_ID = '6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P'
65
+
66
+ const tran: SubscribeRequestFilterTransactions = {
67
+ accountInclude: [PUMP_FUN_PROGRAM_ID],
68
+ accountExclude: [],
69
+ accountRequired: [],
70
+ }
71
+
72
+ const request: SubscribeRequest = {
73
+ accounts: {
74
+ pumpfun: {
75
+ account: [],
76
+ owner: [],
77
+ filters: [],
78
+ },
79
+ },
80
+ slots: {},
81
+ transactions: { elsol: tran },
82
+ transactionsStatus: {},
83
+ blocks: {},
84
+ blocksMeta: {},
85
+ entry: {},
86
+ accountsDataSlice: [],
87
+ commitment: CommitmentLevel.PROCESSED,
88
+ }
89
+
90
+ const geyser = async () => {
91
+ console.log('Starting geyser client...')
92
+ const maxRetries = 2000000
93
+
94
+ const createClient = () => {
95
+ const token = process.env.X_TOKEN || ''
96
+ console.log('X_TOKEN:', token)
97
+ if (token === '') {
98
+ throw new Error('X_TOKEN environment variable is not set')
99
+ }
100
+ const endpoint = `https://grpc-ams-3.erpc.global`
101
+ console.log('Connecting to', endpoint)
102
+
103
+ // @ts-ignore ignore
104
+ return new GeyserClient(endpoint, token, undefined)
105
+ }
106
+
107
+ const connect = async (retries: number = 0): Promise<void> => {
108
+ if (retries > maxRetries) {
109
+ throw new Error('Max retries reached')
110
+ }
111
+
112
+ try {
113
+ const client = createClient()
114
+ const version = await client.getVersion()
115
+ console.log('version: ', version)
116
+ const stream = await client.subscribe()
117
+ stream.on('data', async (data: any) => {
118
+ if (data.transaction !== undefined) {
119
+ const transaction = data.transaction
120
+ const txnSignature = transaction.transaction.signature
121
+ const tx = bs58.encode(new Uint8Array(txnSignature))
122
+ console.log('tx:', tx)
123
+ return
124
+ }
125
+ if (data.account === undefined) {
126
+ return
127
+ }
128
+ // console.log('data:', JSON.stringify(data, null, 2))
129
+
130
+ const accounts = data.account
131
+ const rawPubkey = accounts.account.pubkey
132
+ const rawTxnSignature = accounts.account.txnSignature
133
+ const pubkey = bs58.encode(new Uint8Array(rawPubkey))
134
+ const txnSignature = bs58.encode(new Uint8Array(rawTxnSignature))
135
+ console.log('pubkey:', pubkey)
136
+ console.log('txnSignature:', txnSignature)
137
+ })
138
+
139
+ stream.on('error', async (e: any) => {
140
+ console.error('Stream error:', e)
141
+ console.log(`Reconnecting ...`)
142
+ await connect(retries + 1)
143
+ })
144
+
145
+ await new Promise<void>((resolve, reject) => {
146
+ stream.write(request, (err: any) => {
147
+ if (!err) {
148
+ resolve()
149
+ } else {
150
+ console.error('Request error:', err)
151
+ reject(err)
152
+ }
153
+ })
154
+ }).catch((reason) => {
155
+ console.error(reason)
156
+ throw reason
157
+ })
158
+ } catch (error) {
159
+ console.error(`Connection failed. Retrying ...`, error)
160
+ await connect(retries + 1)
161
+ }
162
+ }
163
+
164
+ await connect()
165
+ }
166
+
167
+ const main = async () => {
168
+ try {
169
+ await geyser()
170
+ } catch (error) {
171
+ console.log(error)
172
+ }
173
+ }
174
+
175
+ main()
24
176
  ```
25
177
 
178
+ Please ensure you have the `X_TOKEN` environment variable set with your gRPC token for authentication.
179
+
180
+ Please note that the url endpoint in the example is for demonstration purposes. You should replace it with the actual endpoint you are using.
181
+
26
182
  ## Features
27
183
 
28
- - **gRPC Streaming**: Built on Triton's Yellowstone gRPC for real-time Solana data streaming
184
+ - **Geyser Client**: Direct access to Triton's Yellowstone gRPC client for real-time Solana data streaming
185
+ - **TypeScript Types**: Comprehensive TypeScript types for all filter and subscription interfaces
29
186
  - **Base58 Utilities**: Includes bs58 for Solana address and data encoding/decoding
30
- - **TypeScript Support**: Full TypeScript support with type definitions
187
+ - **Full Type Safety**: Complete TypeScript support with detailed type definitions
188
+
189
+ ## Exported Types
190
+
191
+ - `GeyserClient`: Main client for connecting to Yellowstone gRPC streams
192
+ - `CommitmentLevel`: Solana commitment level types
193
+ - `SubscribeRequestFilterAccounts`: Account filter types
194
+ - `SubscribeRequestFilterTransactions`: Transaction filter types
195
+ - `SubscribeRequestFilterBlocks`: Block filter types
196
+ - `SubscribeRequestFilterBlocksMeta`: Block metadata filter types
197
+ - `SubscribeRequestFilterSlots`: Slot filter types
198
+ - `SubscribeRequestFilterEntry`: Entry filter types
199
+ - `SubscribeRequestAccountsDataSlice`: Account data slice types
200
+ - `bs58`: Base58 encoding/decoding utilities
31
201
 
32
202
  ## Dependencies
33
203
 
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import * as gRPC from '@triton-one/yellowstone-grpc';
1
+ import Client, { CommitmentLevel, SubscribeRequestAccountsDataSlice, SubscribeRequestFilterAccounts, SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta, SubscribeRequestFilterEntry, SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions } from '@triton-one/yellowstone-grpc';
2
2
  import bs58 from 'bs58';
3
- export { gRPC, bs58 };
3
+ export { bs58, Client as GeyserClient, CommitmentLevel, SubscribeRequestAccountsDataSlice, SubscribeRequestFilterAccounts, SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta, SubscribeRequestFilterEntry, SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, };
4
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,8BAA8B,CAAA;AACpD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EACb,eAAe,EACf,iCAAiC,EACjC,8BAA8B,EAC9B,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,2BAA2B,EAC3B,kCAAkC,EACnC,MAAM,8BAA8B,CAAA;AACrC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EACL,IAAI,EACJ,MAAM,IAAI,YAAY,EACtB,eAAe,EACf,iCAAiC,EACjC,8BAA8B,EAC9B,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,2BAA2B,EAC3B,kCAAkC,GACnC,CAAA"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import * as gRPC from '@triton-one/yellowstone-grpc';
1
+ import Client, { CommitmentLevel, SubscribeRequestAccountsDataSlice, SubscribeRequestFilterAccounts, SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta, SubscribeRequestFilterEntry, SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, } from '@triton-one/yellowstone-grpc';
2
2
  import bs58 from 'bs58';
3
- export { gRPC, bs58 };
3
+ export { bs58, Client as GeyserClient, CommitmentLevel, SubscribeRequestAccountsDataSlice, SubscribeRequestFilterAccounts, SubscribeRequestFilterBlocks, SubscribeRequestFilterBlocksMeta, SubscribeRequestFilterEntry, SubscribeRequestFilterSlots, SubscribeRequestFilterTransactions, };
4
4
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,8BAA8B,CAAA;AACpD,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EACb,eAAe,EACf,iCAAiC,EACjC,8BAA8B,EAC9B,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,2BAA2B,EAC3B,kCAAkC,GACnC,MAAM,8BAA8B,CAAA;AACrC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EACL,IAAI,EACJ,MAAM,IAAI,YAAY,EACtB,eAAe,EACf,iCAAiC,EACjC,8BAA8B,EAC9B,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,2BAA2B,EAC3B,kCAAkC,GACnC,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@validators-dao/solana-stream-sdk",
3
3
  "description": "Solana Stream SDK by Validators DAO",
4
- "version": "0.1.0",
4
+ "version": "0.2.0",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
@@ -9,8 +9,7 @@
9
9
  "engines": {
10
10
  "pnpm": ">=10",
11
11
  "npm": "please_use_pnpm_instead",
12
- "node": "22",
13
- "version": "0.0.1"
12
+ "node": "22"
14
13
  },
15
14
  "repository": {
16
15
  "type": "git",
@@ -32,8 +31,8 @@
32
31
  "format": "prettier --write ."
33
32
  },
34
33
  "dependencies": {
35
- "@triton-one/yellowstone-grpc": "^4.0.2",
36
- "bs58": "^6.0.0"
34
+ "@triton-one/yellowstone-grpc": "4.0.2",
35
+ "bs58": "6.0.0"
37
36
  },
38
37
  "devDependencies": {
39
38
  "prettier": "3.5.3",