@heemankv/sigints-sdk 1.0.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.
Files changed (59) hide show
  1. package/README.md +206 -0
  2. package/dist/backend.d.ts +319 -0
  3. package/dist/backend.d.ts.map +1 -0
  4. package/dist/backend.js +306 -0
  5. package/dist/backend.js.map +1 -0
  6. package/dist/crypto.d.ts +16 -0
  7. package/dist/crypto.d.ts.map +1 -0
  8. package/dist/crypto.js +61 -0
  9. package/dist/crypto.js.map +1 -0
  10. package/dist/index.d.ts +134 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +361 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/jetstream.d.ts +22 -0
  15. package/dist/jetstream.d.ts.map +1 -0
  16. package/dist/jetstream.js +113 -0
  17. package/dist/jetstream.js.map +1 -0
  18. package/dist/jetstream.proto +101 -0
  19. package/dist/publish.d.ts +32 -0
  20. package/dist/publish.d.ts.map +1 -0
  21. package/dist/publish.js +139 -0
  22. package/dist/publish.js.map +1 -0
  23. package/dist/solana/constants.d.ts +3 -0
  24. package/dist/solana/constants.d.ts.map +1 -0
  25. package/dist/solana/constants.js +8 -0
  26. package/dist/solana/constants.js.map +1 -0
  27. package/dist/solana/index.d.ts +7 -0
  28. package/dist/solana/index.d.ts.map +1 -0
  29. package/dist/solana/index.js +6 -0
  30. package/dist/solana/index.js.map +1 -0
  31. package/dist/solana/recordSignal.d.ts +23 -0
  32. package/dist/solana/recordSignal.d.ts.map +1 -0
  33. package/dist/solana/recordSignal.js +21 -0
  34. package/dist/solana/recordSignal.js.map +1 -0
  35. package/dist/solana/shared.d.ts +5 -0
  36. package/dist/solana/shared.d.ts.map +1 -0
  37. package/dist/solana/shared.js +27 -0
  38. package/dist/solana/shared.js.map +1 -0
  39. package/dist/solana/streamRegistry.d.ts +41 -0
  40. package/dist/solana/streamRegistry.d.ts.map +1 -0
  41. package/dist/solana/streamRegistry.js +103 -0
  42. package/dist/solana/streamRegistry.js.map +1 -0
  43. package/dist/solana/subscription.d.ts +77 -0
  44. package/dist/solana/subscription.d.ts.map +1 -0
  45. package/dist/solana/subscription.js +237 -0
  46. package/dist/solana/subscription.js.map +1 -0
  47. package/dist/solana/tiers.d.ts +9 -0
  48. package/dist/solana/tiers.d.ts.map +1 -0
  49. package/dist/solana/tiers.js +13 -0
  50. package/dist/solana/tiers.js.map +1 -0
  51. package/dist/tradeIntent.d.ts +21 -0
  52. package/dist/tradeIntent.d.ts.map +1 -0
  53. package/dist/tradeIntent.js +95 -0
  54. package/dist/tradeIntent.js.map +1 -0
  55. package/dist/transactions.d.ts +89 -0
  56. package/dist/transactions.d.ts.map +1 -0
  57. package/dist/transactions.js +118 -0
  58. package/dist/transactions.js.map +1 -0
  59. package/package.json +32 -0
package/dist/index.js ADDED
@@ -0,0 +1,361 @@
1
+ import { Connection, PublicKey } from "@solana/web3.js";
2
+ import { decryptSignal, generateX25519Keypair, subscriberIdFromPubkey, unwrapKeyForSubscriber, } from "./crypto";
3
+ import { buildRecordSignalInstruction as buildRecordSignalIx, buildRecordSignalDelegatedInstruction as buildRecordSignalDelegatedIx, } from "./publish";
4
+ import { registerSubscription as registerSubscriptionRequest, fetchSolanaConfig as fetchSolanaConfigRequest, syncWalletKey as syncWalletKeyRequest, fetchStream as fetchStreamRequest, prepareSignal as prepareSignalRequest, fetchLatestSignal as fetchLatestSignalRequest, fetchSignalByHash as fetchSignalByHashRequest, fetchCiphertext as fetchCiphertextRequest, fetchPublicPayload as fetchPublicPayloadRequest, fetchKeyboxEntry as fetchKeyboxEntryRequest, } from "./backend";
5
+ export class SigintsClient {
6
+ constructor(cfg) {
7
+ this.seenSignals = new Set();
8
+ const resolvedRpcUrl = cfg.orbitflare?.rpcUrl ?? cfg.rpcUrl;
9
+ if (!resolvedRpcUrl) {
10
+ throw new Error("rpcUrl is required to initialize SigintsClient");
11
+ }
12
+ this.connection = new Connection(resolvedRpcUrl, "confirmed");
13
+ this.programId = new PublicKey(cfg.programId);
14
+ this.streamRegistryProgramId = cfg.streamRegistryProgramId
15
+ ? new PublicKey(cfg.streamRegistryProgramId)
16
+ : undefined;
17
+ this.backendUrl = cfg.backendUrl.replace(/\/$/, "");
18
+ this.keyboxAuth = cfg.keyboxAuth;
19
+ this.agentAuth = cfg.agentAuth;
20
+ this.orbitflare = cfg.orbitflare;
21
+ }
22
+ static async fromBackend(backendUrl, options) {
23
+ const config = await fetchSolanaConfigRequest(backendUrl);
24
+ return new SigintsClient({
25
+ rpcUrl: options?.orbitflare?.rpcUrl ?? config.rpcUrl,
26
+ backendUrl,
27
+ programId: config.subscriptionProgramId,
28
+ streamRegistryProgramId: config.streamRegistryProgramId,
29
+ keyboxAuth: options?.keyboxAuth,
30
+ agentAuth: options?.agentAuth,
31
+ orbitflare: options?.orbitflare,
32
+ });
33
+ }
34
+ static generateKeys() {
35
+ return generateX25519Keypair();
36
+ }
37
+ async registerEncryptionKey(streamId, publicKeyDerBase64, subscriberWallet) {
38
+ if (!subscriberWallet) {
39
+ throw new Error("subscriberWallet is required to register encryption key");
40
+ }
41
+ const resp = await syncWalletKeyRequest(this.backendUrl, {
42
+ wallet: subscriberWallet,
43
+ streamId,
44
+ encPubKeyDerBase64: publicKeyDerBase64,
45
+ });
46
+ return resp.subscriberId;
47
+ }
48
+ async registerSubscription(streamId, subscriberWallet) {
49
+ return registerSubscriptionRequest(this.backendUrl, { streamId, subscriberWallet });
50
+ }
51
+ async syncWalletKey(wallet, streamId, encPubKeyDerBase64) {
52
+ return syncWalletKeyRequest(this.backendUrl, { wallet, streamId, encPubKeyDerBase64 });
53
+ }
54
+ async fetchStream(streamId) {
55
+ return fetchStreamRequest(this.backendUrl, streamId);
56
+ }
57
+ async fetchLatestSignal(streamId) {
58
+ try {
59
+ const data = await fetchLatestSignalRequest(this.backendUrl, streamId);
60
+ return normalizeMetadata(data.signal);
61
+ }
62
+ catch (err) {
63
+ if (typeof err?.message === "string" && err.message.includes("404")) {
64
+ return null;
65
+ }
66
+ throw err;
67
+ }
68
+ }
69
+ async fetchSignalByHash(signalHash) {
70
+ const data = await fetchSignalByHashRequest(this.backendUrl, signalHash);
71
+ return normalizeMetadata(data.signal);
72
+ }
73
+ async fetchCiphertext(pointer) {
74
+ const sha = pointer.split("/").pop();
75
+ if (!sha) {
76
+ throw new Error("invalid signal pointer");
77
+ }
78
+ const data = await fetchCiphertextRequest(this.backendUrl, sha);
79
+ return data.payload;
80
+ }
81
+ async fetchPublic(pointer) {
82
+ const sha = pointer.split("/").pop();
83
+ if (!sha) {
84
+ throw new Error("invalid public signal pointer");
85
+ }
86
+ const auth = await this.buildPublicAuth(sha);
87
+ const data = await fetchPublicPayloadRequest(this.backendUrl, sha, auth);
88
+ return data.payload;
89
+ }
90
+ async fetchKeyboxEntry(pointer, encPubKeyDerBase64) {
91
+ const sha = pointer.split("/").pop();
92
+ if (!sha) {
93
+ throw new Error("invalid keybox pointer");
94
+ }
95
+ const message = Buffer.from(`sigints:keybox:${sha}`, "utf8");
96
+ if (this.keyboxAuth) {
97
+ const signatureBytes = await Promise.resolve(this.keyboxAuth.signMessage(message));
98
+ const signatureBase64 = Buffer.from(signatureBytes).toString("base64");
99
+ const data = await fetchKeyboxEntryRequest(this.backendUrl, sha, {
100
+ wallet: this.keyboxAuth.walletPubkey,
101
+ signatureBase64,
102
+ encPubKeyDerBase64,
103
+ });
104
+ return data.entry;
105
+ }
106
+ if (this.agentAuth) {
107
+ const signatureBytes = await Promise.resolve(this.agentAuth.signMessage(message));
108
+ const signatureBase64 = Buffer.from(signatureBytes).toString("base64");
109
+ const data = await fetchKeyboxEntryRequest(this.backendUrl, sha, {
110
+ agentId: this.agentAuth.agentId,
111
+ signatureBase64,
112
+ encPubKeyDerBase64,
113
+ });
114
+ return data.entry;
115
+ }
116
+ throw new Error("keybox auth or agent auth not configured");
117
+ }
118
+ async decryptSignal(meta, keys) {
119
+ const visibility = meta.visibility ?? "private";
120
+ if (visibility === "public") {
121
+ const payload = await this.fetchPublic(meta.signalPointer);
122
+ return Buffer.from(payload.plaintext, "base64").toString("utf8");
123
+ }
124
+ if (!keys) {
125
+ throw new Error("subscriber keys required for private stream signals");
126
+ }
127
+ if (!meta.keyboxPointer) {
128
+ throw new Error("keybox pointer missing for private signal");
129
+ }
130
+ const wrapped = await this.fetchKeyboxEntry(meta.keyboxPointer, keys.publicKeyDerBase64);
131
+ const symKey = unwrapKeyForSubscriber(keys.privateKeyDerBase64, wrapped);
132
+ const payload = await this.fetchCiphertext(meta.signalPointer);
133
+ const plaintext = decryptSignal(payload.ciphertext, symKey, payload.iv, payload.tag);
134
+ return plaintext.toString("utf8");
135
+ }
136
+ async listenForSignals(options) {
137
+ const transport = options.transport ?? "auto";
138
+ if (transport === "websocket") {
139
+ return this.listenForSignalsWebsocket(options);
140
+ }
141
+ if (transport === "jetstream") {
142
+ return this.listenForSignalsJetstream(options);
143
+ }
144
+ const jetstreamEndpoint = this.orbitflare?.jetstreamEndpoint;
145
+ if (jetstreamEndpoint && typeof window === "undefined") {
146
+ try {
147
+ return await this.listenForSignalsJetstream(options);
148
+ }
149
+ catch (err) {
150
+ if (options.onError) {
151
+ options.onError(err instanceof Error ? err : new Error(String(err)));
152
+ }
153
+ }
154
+ }
155
+ return this.listenForSignalsWebsocket(options);
156
+ }
157
+ async listenForSignalsWebsocket(options) {
158
+ const stream = new PublicKey(options.streamPubkey);
159
+ const [signalPda] = PublicKey.findProgramAddressSync([Buffer.from("signal_latest"), stream.toBuffer()], this.programId);
160
+ const subId = this.connection.onAccountChange(signalPda, async (accountInfo, ctx) => {
161
+ try {
162
+ const decoded = decodeSignalRecord(accountInfo.data);
163
+ if (!decoded)
164
+ return;
165
+ if (decoded.stream !== stream.toBase58())
166
+ return;
167
+ await this.handleDecodedSignal(options, decoded, ctx.slot);
168
+ }
169
+ catch (err) {
170
+ if (options.onError) {
171
+ options.onError(err instanceof Error ? err : new Error(String(err)));
172
+ }
173
+ }
174
+ }, "confirmed");
175
+ return () => {
176
+ void this.connection.removeProgramAccountChangeListener(subId);
177
+ };
178
+ }
179
+ async listenForSignalsJetstream(options) {
180
+ if (!this.orbitflare?.jetstreamEndpoint) {
181
+ throw new Error("Jetstream endpoint not configured");
182
+ }
183
+ if (typeof window !== "undefined") {
184
+ throw new Error("Jetstream is not supported in browser environments");
185
+ }
186
+ const stream = new PublicKey(options.streamPubkey);
187
+ const [signalPda] = PublicKey.findProgramAddressSync([Buffer.from("signal_latest"), stream.toBuffer()], this.programId);
188
+ const { startJetstreamAccountListener } = await import("./jetstream");
189
+ const subscription = await startJetstreamAccountListener({
190
+ endpoint: this.orbitflare.jetstreamEndpoint,
191
+ apiKey: this.orbitflare.apiKey,
192
+ apiKeyHeader: this.orbitflare.apiKeyHeader,
193
+ accountPubkey: signalPda.toBase58(),
194
+ onAccount: async (update) => {
195
+ const decoded = decodeSignalRecord(update.data);
196
+ if (!decoded)
197
+ return;
198
+ if (decoded.stream !== stream.toBase58())
199
+ return;
200
+ await this.handleDecodedSignal(options, decoded, update.slot);
201
+ },
202
+ onError: options.onError,
203
+ });
204
+ return () => subscription.close();
205
+ }
206
+ async handleDecodedSignal(options, decoded, slot) {
207
+ const dedupeKey = `${decoded.stream}:${decoded.signalHash}:${decoded.createdAt}`;
208
+ if (this.seenSignals.has(dedupeKey))
209
+ return;
210
+ this.seenSignals.add(dedupeKey);
211
+ const meta = await this.waitForMetadata(decoded.signalHash);
212
+ if (!meta)
213
+ return;
214
+ const receivedAt = Date.now();
215
+ const createdAt = decoded.createdAt;
216
+ const ageMs = receivedAt - createdAt;
217
+ if (options.maxAgeMs && ageMs > options.maxAgeMs) {
218
+ return;
219
+ }
220
+ const plaintext = await this.decryptSignal(meta, options.subscriberKeys);
221
+ const blockTime = options.includeBlockTime && slot !== undefined
222
+ ? await this.connection.getBlockTime(slot)
223
+ : undefined;
224
+ await options.onSignal({
225
+ signalHash: decoded.signalHash,
226
+ metadata: meta,
227
+ plaintext,
228
+ slot: slot ?? 0,
229
+ createdAt,
230
+ receivedAt,
231
+ ageMs,
232
+ blockTime,
233
+ });
234
+ }
235
+ async fetchSignalRecordCreatedAt(streamPubkey, _signalHash) {
236
+ const stream = new PublicKey(streamPubkey);
237
+ const [signalPda] = PublicKey.findProgramAddressSync([Buffer.from("signal_latest"), stream.toBuffer()], this.programId);
238
+ const account = await this.connection.getAccountInfo(signalPda, "confirmed");
239
+ if (!account)
240
+ return null;
241
+ const decoded = decodeSignalRecord(account.data);
242
+ return decoded ? decoded.createdAt : null;
243
+ }
244
+ async waitForMetadata(signalHash) {
245
+ const retries = 5;
246
+ const delayMs = 800;
247
+ for (let i = 0; i < retries; i += 1) {
248
+ try {
249
+ return await this.fetchSignalByHash(signalHash);
250
+ }
251
+ catch {
252
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
253
+ }
254
+ }
255
+ return null;
256
+ }
257
+ async prepareSignal(input) {
258
+ return prepareSignalRequest(this.backendUrl, input);
259
+ }
260
+ async buildRecordSignalInstruction(params) {
261
+ if (!this.streamRegistryProgramId) {
262
+ throw new Error("streamRegistryProgramId not configured");
263
+ }
264
+ return buildRecordSignalIx({
265
+ ...params,
266
+ programId: this.programId,
267
+ streamRegistryProgramId: this.streamRegistryProgramId,
268
+ });
269
+ }
270
+ async buildRecordSignalDelegatedInstruction(params) {
271
+ if (!this.streamRegistryProgramId) {
272
+ throw new Error("streamRegistryProgramId not configured");
273
+ }
274
+ return buildRecordSignalDelegatedIx({
275
+ ...params,
276
+ programId: this.programId,
277
+ streamRegistryProgramId: this.streamRegistryProgramId,
278
+ });
279
+ }
280
+ async buildPublicAuth(sha) {
281
+ const message = new TextEncoder().encode(`sigints:public:${sha}`);
282
+ if (this.agentAuth) {
283
+ const signatureBytes = await Promise.resolve(this.agentAuth.signMessage(message));
284
+ const signatureBase64 = Buffer.from(signatureBytes).toString("base64");
285
+ return { agentId: this.agentAuth.agentId, signatureBase64 };
286
+ }
287
+ if (this.keyboxAuth) {
288
+ const signatureBytes = await Promise.resolve(this.keyboxAuth.signMessage(message));
289
+ const signatureBase64 = Buffer.from(signatureBytes).toString("base64");
290
+ return { wallet: this.keyboxAuth.walletPubkey, signatureBase64 };
291
+ }
292
+ throw new Error("public payload auth not configured");
293
+ }
294
+ }
295
+ function decodeSignalRecord(data) {
296
+ if (data.length < 177) {
297
+ return null;
298
+ }
299
+ let offset = 8;
300
+ const stream = new PublicKey(data.subarray(offset, offset + 32));
301
+ offset += 32;
302
+ const signalHash = data.subarray(offset, offset + 32);
303
+ offset += 32;
304
+ const signalPointerHash = data.subarray(offset, offset + 32);
305
+ offset += 32;
306
+ const keyboxHash = data.subarray(offset, offset + 32);
307
+ offset += 32;
308
+ const keyboxPointerHash = data.subarray(offset, offset + 32);
309
+ offset += 32;
310
+ const createdAtRaw = Number(data.readBigInt64LE(offset));
311
+ offset += 8;
312
+ const bump = data.readUInt8(offset);
313
+ return {
314
+ stream: stream.toBase58(),
315
+ signalHash: signalHash.toString("hex"),
316
+ signalPointerHash: signalPointerHash.toString("hex"),
317
+ keyboxHash: keyboxHash.toString("hex"),
318
+ keyboxPointerHash: keyboxPointerHash.toString("hex"),
319
+ createdAt: normalizeCreatedAt(createdAtRaw),
320
+ bump,
321
+ };
322
+ }
323
+ export * from "./tradeIntent";
324
+ function normalizeCreatedAt(createdAt) {
325
+ if (createdAt < 1000000000000) {
326
+ return createdAt * 1000;
327
+ }
328
+ return createdAt;
329
+ }
330
+ function normalizeMetadata(meta) {
331
+ const visibility = meta.visibility === "public" ? "public" : "private";
332
+ return {
333
+ ...meta,
334
+ visibility,
335
+ keyboxHash: meta.keyboxHash ?? null,
336
+ keyboxPointer: meta.keyboxPointer ?? null,
337
+ };
338
+ }
339
+ function hexToBytes(input, label) {
340
+ const clean = input.trim().toLowerCase();
341
+ if (!/^[0-9a-f]+$/.test(clean) || clean.length % 2 !== 0) {
342
+ throw new Error(`invalid ${label} hex`);
343
+ }
344
+ const bytes = new Uint8Array(clean.length / 2);
345
+ for (let i = 0; i < bytes.length; i += 1) {
346
+ bytes[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);
347
+ }
348
+ return bytes;
349
+ }
350
+ export { decryptSignal, generateX25519Keypair, subscriberIdFromPubkey, unwrapKeyForSubscriber };
351
+ export { buildRecordSignalIx as buildRecordSignalInstruction, buildRecordSignalDelegatedIx as buildRecordSignalDelegatedInstruction, registerSubscriptionRequest as registerSubscription, syncWalletKeyRequest as syncWalletKey, fetchStreamRequest as fetchStream, };
352
+ export { getJson, postJson, deleteJson, createBackendClient, fetchSolanaConfig, fetchStreams, fetchStreamSubscribers, createStream, fetchOnchainSubscriptions, fetchSignals, fetchSignalEvents, fetchLatestSignal, fetchSignalByHash, fetchCiphertext, fetchPublicPayload, buildPublicPayloadMessage, fetchKeyboxEntry, fetchHealth, getTestWallet, testWalletSend, testWalletSignMessage, deleteComment, deletePost, fetchFeed, fetchFollowingFeed, fetchTrendingFeed, fetchPost, prepareSignal, createIntent, createSlashReport, addLike, removeLike, fetchLikeCount, fetchFollowCounts, fetchFollowingIds, fetchComments, addComment, followProfile, searchAgents, fetchAgents, createAgent, createAgentSubscription, fetchAgentSubscriptions, deleteAgentSubscription, fetchUserProfile, loginUser, } from "./backend";
353
+ export * from "./solana/index";
354
+ export * from "./transactions";
355
+ export const __testing = {
356
+ decodeSignalRecord,
357
+ normalizeCreatedAt,
358
+ normalizeMetadata,
359
+ hexToBytes,
360
+ };
361
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ export type JetstreamAccountUpdate = {
2
+ address?: string;
3
+ owner?: string;
4
+ lamports?: number;
5
+ data: Buffer;
6
+ slot?: number;
7
+ isStartup?: boolean;
8
+ };
9
+ export type JetstreamSubscription = {
10
+ close: () => void;
11
+ };
12
+ export type JetstreamAccountListenerParams = {
13
+ endpoint: string;
14
+ apiKey?: string;
15
+ apiKeyHeader?: string;
16
+ accountPubkey: string;
17
+ pingIntervalMs?: number;
18
+ onAccount: (update: JetstreamAccountUpdate) => void | Promise<void>;
19
+ onError?: (error: Error) => void;
20
+ };
21
+ export declare function startJetstreamAccountListener(params: JetstreamAccountListenerParams): Promise<JetstreamSubscription>;
22
+ //# sourceMappingURL=jetstream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jetstream.d.ts","sourceRoot":"","sources":["../src/jetstream.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,sBAAsB,GAAG;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC,CAAC;AA6BF,wBAAsB,6BAA6B,CACjD,MAAM,EAAE,8BAA8B,GACrC,OAAO,CAAC,qBAAqB,CAAC,CAuGhC"}
@@ -0,0 +1,113 @@
1
+ import path from "path";
2
+ import { fileURLToPath } from "url";
3
+ import { createRequire } from "module";
4
+ const DEFAULT_PING_INTERVAL_MS = 25000;
5
+ const DEFAULT_API_HEADER = "X-ORBIT-KEY";
6
+ function normalizeEndpoint(endpoint) {
7
+ const trimmed = endpoint.trim();
8
+ if (trimmed.startsWith("http://") || trimmed.startsWith("https://")) {
9
+ const url = new URL(trimmed);
10
+ return {
11
+ address: url.host,
12
+ secure: url.protocol === "https:",
13
+ };
14
+ }
15
+ const secure = trimmed.endsWith(":443");
16
+ return { address: trimmed, secure };
17
+ }
18
+ export async function startJetstreamAccountListener(params) {
19
+ const { endpoint, apiKey, apiKeyHeader, accountPubkey, pingIntervalMs, onAccount, onError } = params;
20
+ const require = createRequire(import.meta.url);
21
+ // Dynamic import to keep gRPC out of browser bundles.
22
+ const grpc = await import("@grpc/grpc-js");
23
+ const protoLoader = await import("@grpc/proto-loader");
24
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
25
+ const protoPath = path.join(__dirname, "jetstream.proto");
26
+ const protobufRoot = path.dirname(require.resolve("protobufjs/package.json"));
27
+ const packageDefinition = protoLoader.loadSync(protoPath, {
28
+ keepCase: true,
29
+ longs: String,
30
+ enums: String,
31
+ defaults: true,
32
+ oneofs: true,
33
+ includeDirs: [__dirname, protobufRoot],
34
+ });
35
+ const descriptor = grpc.loadPackageDefinition(packageDefinition);
36
+ const JetstreamService = descriptor?.jetstream?.Jetstream;
37
+ if (!JetstreamService) {
38
+ throw new Error("Jetstream service not found in proto");
39
+ }
40
+ const { address, secure } = normalizeEndpoint(endpoint);
41
+ const credentials = secure ? grpc.credentials.createSsl() : grpc.credentials.createInsecure();
42
+ const client = new JetstreamService(address, credentials, {
43
+ "grpc.max_receive_message_length": 64 * 1024 * 1024,
44
+ });
45
+ const metadata = new grpc.Metadata();
46
+ if (apiKey) {
47
+ metadata.set((apiKeyHeader ?? DEFAULT_API_HEADER).toLowerCase(), apiKey);
48
+ }
49
+ const subscribeFn = client.subscribe ?? client.Subscribe;
50
+ if (!subscribeFn) {
51
+ throw new Error("Jetstream client missing subscribe method");
52
+ }
53
+ const stream = subscribeFn.call(client, metadata);
54
+ const request = {
55
+ transactions: {},
56
+ accounts: {
57
+ signals: {
58
+ account: [accountPubkey],
59
+ },
60
+ },
61
+ };
62
+ stream.write(request);
63
+ const pingInterval = setInterval(() => {
64
+ try {
65
+ stream.write({
66
+ transactions: {},
67
+ accounts: {},
68
+ ping: { id: Date.now() % 2147483647 },
69
+ });
70
+ }
71
+ catch (err) {
72
+ onError?.(err instanceof Error ? err : new Error(String(err)));
73
+ }
74
+ }, pingIntervalMs ?? DEFAULT_PING_INTERVAL_MS);
75
+ stream.on("data", async (update) => {
76
+ if (!update?.account?.data)
77
+ return;
78
+ try {
79
+ const data = Buffer.isBuffer(update.account.data)
80
+ ? update.account.data
81
+ : Buffer.from(update.account.data);
82
+ const slotRaw = update.account.slot;
83
+ const slot = slotRaw !== undefined ? Number(slotRaw) : undefined;
84
+ const lamportsRaw = update.account.lamports;
85
+ const lamports = lamportsRaw !== undefined ? Number(lamportsRaw) : undefined;
86
+ await onAccount({
87
+ address: update.account.address,
88
+ owner: update.account.owner,
89
+ lamports,
90
+ data,
91
+ slot: Number.isFinite(slot) ? slot : undefined,
92
+ isStartup: update.account.is_startup,
93
+ });
94
+ }
95
+ catch (err) {
96
+ onError?.(err instanceof Error ? err : new Error(String(err)));
97
+ }
98
+ });
99
+ stream.on("error", (err) => {
100
+ onError?.(err);
101
+ });
102
+ const close = () => {
103
+ clearInterval(pingInterval);
104
+ try {
105
+ stream.end();
106
+ }
107
+ catch {
108
+ // ignore close errors
109
+ }
110
+ };
111
+ return { close };
112
+ }
113
+ //# sourceMappingURL=jetstream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jetstream.js","sourceRoot":"","sources":["../src/jetstream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,101 @@
1
+ syntax = "proto3";
2
+
3
+ package jetstream;
4
+
5
+ import "google/protobuf/timestamp.proto";
6
+
7
+ service Jetstream {
8
+ rpc Subscribe (stream SubscribeRequest) returns (stream SubscribeUpdate);
9
+ }
10
+
11
+ message SubscribeRequest {
12
+ map<string, SubscribeRequestFilterTransactions> transactions = 1;
13
+ map<string, SubscribeRequestFilterAccounts> accounts = 2;
14
+ SubscribeRequestPing ping = 3;
15
+ }
16
+
17
+ message SubscribeRequestFilterTransactions {
18
+ repeated string account_include = 1;
19
+ repeated string account_exclude = 2;
20
+ repeated string account_required = 3;
21
+ }
22
+
23
+ message SubscribeRequestFilterAccounts {
24
+ repeated string account = 1;
25
+ repeated string owner = 2;
26
+ }
27
+
28
+ message SubscribeRequestPing {
29
+ int32 id = 1;
30
+ }
31
+
32
+ message SubscribeUpdate {
33
+ oneof update_oneof {
34
+ SubscribeUpdateAccount account = 1;
35
+ SubscribeUpdateTransaction transaction = 2;
36
+ SubscribeUpdatePing ping = 3;
37
+ SubscribeUpdatePong pong = 4;
38
+ }
39
+ }
40
+
41
+ message SubscribeUpdateAccount {
42
+ string address = 1;
43
+ string owner = 2;
44
+ int64 lamports = 3;
45
+ bytes data = 4;
46
+ google.protobuf.Timestamp created_at = 5;
47
+ bool is_startup = 6;
48
+ int64 slot = 7;
49
+ }
50
+
51
+ message SubscribeUpdateTransaction {
52
+ int64 slot = 1;
53
+ TransactionInfo transaction = 2;
54
+ google.protobuf.Timestamp created_at = 3;
55
+ }
56
+
57
+ message TransactionInfo {
58
+ bytes signature = 1;
59
+ bool is_vote = 2;
60
+ TransactionMessage message = 3;
61
+ TransactionMeta meta = 4;
62
+ int64 index = 5;
63
+ }
64
+
65
+ message TransactionMessage {
66
+ TransactionHeader header = 1;
67
+ repeated string account_keys = 2;
68
+ string recent_blockhash = 3;
69
+ repeated TransactionInstruction instructions = 4;
70
+ repeated TransactionInstruction inner_instructions = 5;
71
+ }
72
+
73
+ message TransactionInstruction {
74
+ int32 program_id_index = 1;
75
+ repeated int32 accounts = 2;
76
+ bytes data = 3;
77
+ }
78
+
79
+ message TransactionHeader {
80
+ int32 num_required_signatures = 1;
81
+ int32 num_readonly_signed_accounts = 2;
82
+ int32 num_readonly_unsigned_accounts = 3;
83
+ }
84
+
85
+ message TransactionMeta {
86
+ bool err = 1;
87
+ int64 fee = 2;
88
+ repeated int64 pre_balances = 3;
89
+ repeated int64 post_balances = 4;
90
+ repeated int64 pre_token_balances = 5;
91
+ repeated int64 post_token_balances = 6;
92
+ repeated string log_messages = 7;
93
+ repeated int64 inner_instructions = 8;
94
+ repeated int64 loaded_addresses = 9;
95
+ repeated int64 return_data = 10;
96
+ repeated int64 compute_units_consumed = 11;
97
+ }
98
+
99
+ message SubscribeUpdatePing {}
100
+
101
+ message SubscribeUpdatePong {}
@@ -0,0 +1,32 @@
1
+ import { PublicKey, TransactionInstruction } from "@solana/web3.js";
2
+ import type { SignalMetadata } from "./index";
3
+ export type PrepareSignalInput = {
4
+ streamId: string;
5
+ tierId: string;
6
+ plaintext: string;
7
+ visibility?: "public" | "private";
8
+ };
9
+ export type PrepareSignalResponse = {
10
+ metadata: SignalMetadata;
11
+ };
12
+ export type RecordSignalParams = {
13
+ programId: PublicKey;
14
+ streamRegistryProgramId: PublicKey;
15
+ authority: PublicKey;
16
+ streamId?: string;
17
+ streamPubkey?: PublicKey;
18
+ metadata: SignalMetadata;
19
+ };
20
+ export type RecordSignalDelegatedParams = {
21
+ programId: PublicKey;
22
+ streamRegistryProgramId: PublicKey;
23
+ publisher: PublicKey;
24
+ streamId?: string;
25
+ streamPubkey?: PublicKey;
26
+ metadata: SignalMetadata;
27
+ };
28
+ export declare function prepareSignal(backendUrl: string, input: PrepareSignalInput): Promise<SignalMetadata>;
29
+ export declare function buildRecordSignalInstruction(params: RecordSignalParams): Promise<TransactionInstruction>;
30
+ export declare function buildRecordSignalDelegatedInstruction(params: RecordSignalDelegatedParams): Promise<TransactionInstruction>;
31
+ export declare function deriveStreamPda(streamRegistryProgramId: PublicKey, streamId: string): Promise<PublicKey>;
32
+ //# sourceMappingURL=publish.d.ts.map