@silvana-one/agent 1.0.32

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.
@@ -0,0 +1,520 @@
1
+ import { createGrpcTransport } from "@connectrpc/connect-node";
2
+ import { createClient } from "@connectrpc/connect";
3
+ import { CoordinatorService, RetrieveSecretRequestSchema, GetJobRequestSchema, CompleteJobRequestSchema, FailJobRequestSchema, GetSequenceStatesRequestSchema, SubmitProofRequestSchema, SubmitStateRequestSchema, GetProofRequestSchema, GetBlockProofRequestSchema, GetBlockRequestSchema, GetBlockSettlementRequestSchema, UpdateBlockSettlementRequestSchema, TerminateJobRequestSchema, ReadDataAvailabilityRequestSchema, SetKVRequestSchema, GetKVRequestSchema, DeleteKVRequestSchema, AddMetadataRequestSchema, GetMetadataRequestSchema, TryCreateBlockRequestSchema, UpdateBlockStateDataAvailabilityRequestSchema, UpdateBlockProofDataAvailabilityRequestSchema, UpdateBlockSettlementTxHashRequestSchema, UpdateBlockSettlementTxIncludedInBlockRequestSchema, CreateAppJobRequestSchema, RejectProofRequestSchema, } from "./proto/silvana/coordinator/v1/coordinator_pb.js";
4
+ import { create } from "@bufbuild/protobuf";
5
+ // Static client instance to be reused
6
+ let coordinatorClient = null;
7
+ // Environment variables - cached after first initialization
8
+ let sessionId = null;
9
+ let jobId = null;
10
+ let chain = null;
11
+ let coordinatorId = null;
12
+ let sessionPrivateKey = null;
13
+ let developer = null;
14
+ let agent = null;
15
+ let agentMethod = null;
16
+ /**
17
+ * Gets the coordinator client instance and environment variables, initializing if necessary
18
+ * @returns Object containing the client and all required environment variables
19
+ */
20
+ function getCoordinatorClient() {
21
+ if (coordinatorClient === null) {
22
+ // Read all environment variables
23
+ sessionId = process.env.SESSION_ID || null;
24
+ chain = process.env.CHAIN || null;
25
+ coordinatorId = process.env.COORDINATOR_ID || null;
26
+ sessionPrivateKey = process.env.SESSION_PRIVATE_KEY || null;
27
+ developer = process.env.DEVELOPER || null;
28
+ agent = process.env.AGENT || null;
29
+ agentMethod = process.env.AGENT_METHOD || null;
30
+ // Check for required environment variables
31
+ if (!sessionId) {
32
+ throw new Error("SESSION_ID environment variable is required");
33
+ }
34
+ // if (!chain) {
35
+ // throw new Error("CHAIN environment variable is required");
36
+ // }
37
+ // if (!coordinatorId) {
38
+ // throw new Error("COORDINATOR_ID environment variable is required");
39
+ // }
40
+ // if (!sessionPrivateKey) {
41
+ // throw new Error("SESSION_PRIVATE_KEY environment variable is required");
42
+ // }
43
+ if (!developer) {
44
+ throw new Error("DEVELOPER environment variable is required");
45
+ }
46
+ if (!agent) {
47
+ throw new Error("AGENT environment variable is required");
48
+ }
49
+ if (!agentMethod) {
50
+ throw new Error("AGENT_METHOD environment variable is required");
51
+ }
52
+ // Create gRPC client over TCP (accessible from Docker container)
53
+ const transport = createGrpcTransport({
54
+ baseUrl: "http://host.docker.internal:50051",
55
+ });
56
+ coordinatorClient = createClient(CoordinatorService, transport);
57
+ }
58
+ // At this point, all values are guaranteed to be non-null due to the checks above
59
+ return {
60
+ client: coordinatorClient,
61
+ sessionId: sessionId,
62
+ chain: chain,
63
+ coordinatorId: coordinatorId,
64
+ sessionPrivateKey: sessionPrivateKey,
65
+ developer: developer,
66
+ agent: agent,
67
+ agentMethod: agentMethod,
68
+ };
69
+ }
70
+ /**
71
+ * Retrieves a secret value from the coordinator service
72
+ * @param key The name/key of the secret to retrieve
73
+ * @returns The secret value if found, null otherwise
74
+ */
75
+ export async function getSecret(key) {
76
+ if (!jobId) {
77
+ throw new Error("Call getJob() first");
78
+ }
79
+ try {
80
+ const { client, sessionId } = getCoordinatorClient();
81
+ // Create the request
82
+ const request = create(RetrieveSecretRequestSchema, {
83
+ jobId: jobId,
84
+ sessionId: sessionId,
85
+ name: key,
86
+ });
87
+ console.log(`Retrieving secret: ${key}`);
88
+ // Make the gRPC call
89
+ const response = await client.retrieveSecret(request);
90
+ if (response.success && response.secretValue !== undefined) {
91
+ console.log(` Successfully retrieved secret: ${key}`);
92
+ return response.secretValue;
93
+ }
94
+ else {
95
+ console.log(`L Failed to retrieve secret: ${key} - ${response.message}`);
96
+ return null;
97
+ }
98
+ }
99
+ catch (error) {
100
+ console.error(`Error retrieving secret '${key}':`, error.message);
101
+ return null;
102
+ }
103
+ }
104
+ /**
105
+ * Gets a job from the coordinator
106
+ */
107
+ export async function getJob() {
108
+ const { client, sessionId, developer, agent, agentMethod } = getCoordinatorClient();
109
+ const request = create(GetJobRequestSchema, {
110
+ developer,
111
+ agent,
112
+ agentMethod,
113
+ sessionId,
114
+ });
115
+ const response = await client.getJob(request);
116
+ if (response.job) {
117
+ jobId = response.job.jobId;
118
+ }
119
+ return response;
120
+ }
121
+ /**
122
+ * Completes a job
123
+ */
124
+ export async function completeJob() {
125
+ if (!jobId) {
126
+ throw new Error("Call getJob() first");
127
+ }
128
+ const { client, sessionId } = getCoordinatorClient();
129
+ const request = create(CompleteJobRequestSchema, {
130
+ sessionId,
131
+ jobId,
132
+ });
133
+ jobId = null;
134
+ return await client.completeJob(request);
135
+ }
136
+ /**
137
+ * Fails a job
138
+ */
139
+ export async function failJob(errorMessage) {
140
+ if (!jobId) {
141
+ throw new Error("Call getJob() first");
142
+ }
143
+ const { client, sessionId } = getCoordinatorClient();
144
+ const request = create(FailJobRequestSchema, {
145
+ sessionId,
146
+ jobId,
147
+ errorMessage,
148
+ });
149
+ jobId = null;
150
+ return await client.failJob(request);
151
+ }
152
+ /**
153
+ * Terminates a job
154
+ */
155
+ export async function terminateJob() {
156
+ if (!jobId) {
157
+ throw new Error("Call getJob() first");
158
+ }
159
+ const { client, sessionId } = getCoordinatorClient();
160
+ const request = create(TerminateJobRequestSchema, {
161
+ sessionId,
162
+ jobId,
163
+ });
164
+ jobId = null;
165
+ return await client.terminateJob(request);
166
+ }
167
+ /**
168
+ * Gets sequence states
169
+ */
170
+ export async function getSequenceStates(sequence) {
171
+ if (!jobId) {
172
+ throw new Error("Call getJob() first");
173
+ }
174
+ const { client, sessionId } = getCoordinatorClient();
175
+ const request = create(GetSequenceStatesRequestSchema, {
176
+ sessionId,
177
+ jobId,
178
+ sequence,
179
+ });
180
+ return await client.getSequenceStates(request);
181
+ }
182
+ /**
183
+ * Submits a proof
184
+ */
185
+ export async function submitProof(blockNumber, sequences, proof, cpuTime, mergedSequences1, mergedSequences2) {
186
+ if (!jobId) {
187
+ throw new Error("Call getJob() first");
188
+ }
189
+ const { client, sessionId } = getCoordinatorClient();
190
+ const request = create(SubmitProofRequestSchema, {
191
+ sessionId,
192
+ jobId,
193
+ blockNumber,
194
+ sequences,
195
+ proof,
196
+ cpuTime,
197
+ mergedSequences1: mergedSequences1 || [],
198
+ mergedSequences2: mergedSequences2 || [],
199
+ });
200
+ return await client.submitProof(request);
201
+ }
202
+ /**
203
+ * Submits state
204
+ */
205
+ export async function submitState(sequence, newStateData, serializedState) {
206
+ if (!jobId) {
207
+ throw new Error("Call getJob() first");
208
+ }
209
+ const { client, sessionId } = getCoordinatorClient();
210
+ const request = create(SubmitStateRequestSchema, {
211
+ sessionId,
212
+ jobId,
213
+ sequence,
214
+ newStateData,
215
+ serializedState,
216
+ });
217
+ return await client.submitState(request);
218
+ }
219
+ /**
220
+ * Gets a proof
221
+ */
222
+ export async function getProof(blockNumber, sequences) {
223
+ if (!jobId) {
224
+ throw new Error("Call getJob() first");
225
+ }
226
+ const { client, sessionId } = getCoordinatorClient();
227
+ const request = create(GetProofRequestSchema, {
228
+ sessionId,
229
+ blockNumber,
230
+ sequences,
231
+ jobId,
232
+ });
233
+ return await client.getProof(request);
234
+ }
235
+ /**
236
+ * Gets a block proof
237
+ */
238
+ export async function getBlockProof(blockNumber) {
239
+ if (!jobId) {
240
+ throw new Error("Call getJob() first");
241
+ }
242
+ const { client, sessionId } = getCoordinatorClient();
243
+ const request = create(GetBlockProofRequestSchema, {
244
+ sessionId,
245
+ blockNumber,
246
+ jobId,
247
+ });
248
+ return await client.getBlockProof(request);
249
+ }
250
+ /**
251
+ * Reads data availability
252
+ */
253
+ export async function readDataAvailability(daHash) {
254
+ if (!jobId) {
255
+ throw new Error("Call getJob() first");
256
+ }
257
+ const { client, sessionId } = getCoordinatorClient();
258
+ const request = create(ReadDataAvailabilityRequestSchema, {
259
+ sessionId,
260
+ daHash,
261
+ });
262
+ return await client.readDataAvailability(request);
263
+ }
264
+ /**
265
+ * Sets a key-value pair in the app instance KV store
266
+ */
267
+ export async function setKv(key, value) {
268
+ if (!jobId) {
269
+ throw new Error("Call getJob() first");
270
+ }
271
+ const { client, sessionId } = getCoordinatorClient();
272
+ const request = create(SetKVRequestSchema, {
273
+ sessionId,
274
+ jobId,
275
+ key,
276
+ value,
277
+ });
278
+ return await client.setKV(request);
279
+ }
280
+ /**
281
+ * Gets a value from the app instance KV store
282
+ */
283
+ export async function getKv(key) {
284
+ if (!jobId) {
285
+ throw new Error("Call getJob() first");
286
+ }
287
+ const { client, sessionId } = getCoordinatorClient();
288
+ const request = create(GetKVRequestSchema, {
289
+ sessionId,
290
+ jobId,
291
+ key,
292
+ });
293
+ return await client.getKV(request);
294
+ }
295
+ /**
296
+ * Deletes a key-value pair from the app instance KV store
297
+ */
298
+ export async function deleteKv(key) {
299
+ if (!jobId) {
300
+ throw new Error("Call getJob() first");
301
+ }
302
+ const { client, sessionId } = getCoordinatorClient();
303
+ const request = create(DeleteKVRequestSchema, {
304
+ sessionId,
305
+ jobId,
306
+ key,
307
+ });
308
+ return await client.deleteKV(request);
309
+ }
310
+ /**
311
+ * Adds metadata to the app instance (write-once)
312
+ */
313
+ export async function addMetadata(key, value) {
314
+ if (!jobId) {
315
+ throw new Error("Call getJob() first");
316
+ }
317
+ const { client, sessionId } = getCoordinatorClient();
318
+ const request = create(AddMetadataRequestSchema, {
319
+ sessionId,
320
+ jobId,
321
+ key,
322
+ value,
323
+ });
324
+ return await client.addMetadata(request);
325
+ }
326
+ /**
327
+ * Gets metadata from the app instance
328
+ * @param key Optional metadata key. If not provided, returns app instance info only
329
+ */
330
+ export async function getMetadata(key) {
331
+ if (!jobId) {
332
+ throw new Error("Call getJob() first");
333
+ }
334
+ const { client, sessionId } = getCoordinatorClient();
335
+ const request = create(GetMetadataRequestSchema, {
336
+ sessionId,
337
+ jobId,
338
+ ...(key && { key }),
339
+ });
340
+ return await client.getMetadata(request);
341
+ }
342
+ /**
343
+ * Gets app instance information without a specific metadata key
344
+ * Returns all AppInstance fields like sequence, block number, admin, etc.
345
+ */
346
+ export async function getAppInstanceInfo() {
347
+ return getMetadata(); // Call without key to get app instance info
348
+ }
349
+ /**
350
+ * Tries to create a new block
351
+ */
352
+ export async function tryCreateBlock() {
353
+ if (!jobId) {
354
+ throw new Error("Call getJob() first");
355
+ }
356
+ const { client, sessionId } = getCoordinatorClient();
357
+ const request = create(TryCreateBlockRequestSchema, {
358
+ sessionId,
359
+ jobId,
360
+ });
361
+ return await client.tryCreateBlock(request);
362
+ }
363
+ /**
364
+ * Updates block state data availability
365
+ */
366
+ export async function updateBlockStateDataAvailability(blockNumber, stateDataAvailability) {
367
+ if (!jobId) {
368
+ throw new Error("Call getJob() first");
369
+ }
370
+ const { client, sessionId } = getCoordinatorClient();
371
+ const request = create(UpdateBlockStateDataAvailabilityRequestSchema, {
372
+ sessionId,
373
+ jobId,
374
+ blockNumber,
375
+ stateDataAvailability,
376
+ });
377
+ return await client.updateBlockStateDataAvailability(request);
378
+ }
379
+ /**
380
+ * Updates block proof data availability
381
+ */
382
+ export async function updateBlockProofDataAvailability(blockNumber, proofDataAvailability) {
383
+ if (!jobId) {
384
+ throw new Error("Call getJob() first");
385
+ }
386
+ const { client, sessionId } = getCoordinatorClient();
387
+ const request = create(UpdateBlockProofDataAvailabilityRequestSchema, {
388
+ sessionId,
389
+ jobId,
390
+ blockNumber,
391
+ proofDataAvailability,
392
+ });
393
+ return await client.updateBlockProofDataAvailability(request);
394
+ }
395
+ /**
396
+ * Updates block settlement transaction hash
397
+ */
398
+ export async function updateBlockSettlementTxHash(blockNumber, settlementTxHash, settlementChain) {
399
+ if (!jobId) {
400
+ throw new Error("Call getJob() first");
401
+ }
402
+ const { client, sessionId } = getCoordinatorClient();
403
+ const request = create(UpdateBlockSettlementTxHashRequestSchema, {
404
+ sessionId,
405
+ jobId,
406
+ blockNumber,
407
+ settlementTxHash,
408
+ chain: settlementChain,
409
+ });
410
+ return await client.updateBlockSettlementTxHash(request);
411
+ }
412
+ /**
413
+ * Updates block settlement transaction included in block
414
+ */
415
+ export async function updateBlockSettlementTxIncludedInBlock(blockNumber, settledAt, settlementChain) {
416
+ if (!jobId) {
417
+ throw new Error("Call getJob() first");
418
+ }
419
+ const { client, sessionId } = getCoordinatorClient();
420
+ const request = create(UpdateBlockSettlementTxIncludedInBlockRequestSchema, {
421
+ sessionId,
422
+ jobId,
423
+ blockNumber,
424
+ settledAt,
425
+ chain: settlementChain,
426
+ });
427
+ return await client.updateBlockSettlementTxIncludedInBlock(request);
428
+ }
429
+ /**
430
+ * Creates a new app job
431
+ */
432
+ export async function createAppJob(methodName, data, options) {
433
+ if (!jobId) {
434
+ throw new Error("Call getJob() first");
435
+ }
436
+ const { client, sessionId } = getCoordinatorClient();
437
+ const request = create(CreateAppJobRequestSchema, {
438
+ sessionId,
439
+ jobId,
440
+ methodName,
441
+ jobDescription: options?.jobDescription,
442
+ blockNumber: options?.blockNumber,
443
+ sequences: options?.sequences || [],
444
+ sequences1: options?.sequences1 || [],
445
+ sequences2: options?.sequences2 || [],
446
+ data,
447
+ intervalMs: options?.intervalMs,
448
+ nextScheduledAt: options?.nextScheduledAt,
449
+ settlementChain: options?.settlementChain,
450
+ });
451
+ return await client.createAppJob(request);
452
+ }
453
+ /**
454
+ * Gets a block by block number
455
+ */
456
+ export async function getBlock(blockNumber) {
457
+ if (!jobId) {
458
+ throw new Error("Call getJob() first");
459
+ }
460
+ const { client, sessionId } = getCoordinatorClient();
461
+ const request = create(GetBlockRequestSchema, {
462
+ sessionId,
463
+ jobId,
464
+ blockNumber,
465
+ });
466
+ return await client.getBlock(request);
467
+ }
468
+ /**
469
+ * Rejects a proof for specific sequences
470
+ */
471
+ export async function rejectProof(blockNumber, sequences) {
472
+ if (!jobId) {
473
+ throw new Error("Call getJob() first");
474
+ }
475
+ const { client, sessionId } = getCoordinatorClient();
476
+ const request = create(RejectProofRequestSchema, {
477
+ sessionId,
478
+ blockNumber,
479
+ sequences,
480
+ jobId,
481
+ });
482
+ return await client.rejectProof(request);
483
+ }
484
+ /**
485
+ * Gets a block settlement for a specific chain
486
+ */
487
+ export async function getBlockSettlement(blockNumber, chain) {
488
+ if (!jobId) {
489
+ throw new Error("Call getJob() first");
490
+ }
491
+ const { client, sessionId } = getCoordinatorClient();
492
+ const request = create(GetBlockSettlementRequestSchema, {
493
+ sessionId,
494
+ jobId,
495
+ blockNumber,
496
+ chain,
497
+ });
498
+ return await client.getBlockSettlement(request);
499
+ }
500
+ /**
501
+ * Updates a block settlement for a specific chain
502
+ */
503
+ export async function updateBlockSettlement(blockNumber, chain, settlementData) {
504
+ if (!jobId) {
505
+ throw new Error("Call getJob() first");
506
+ }
507
+ const { client, sessionId } = getCoordinatorClient();
508
+ const request = create(UpdateBlockSettlementRequestSchema, {
509
+ sessionId,
510
+ jobId,
511
+ blockNumber,
512
+ chain,
513
+ settlementTxHash: settlementData.settlementTxHash,
514
+ settlementTxIncludedInBlock: settlementData.settlementTxIncludedInBlock ?? false,
515
+ sentToSettlementAt: settlementData.sentToSettlementAt,
516
+ settledAt: settlementData.settledAt,
517
+ });
518
+ return await client.updateBlockSettlement(request);
519
+ }
520
+ //# sourceMappingURL=grpc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grpc.js","sourceRoot":"","sources":["../../src/grpc.ts"],"names":[],"mappings":"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"}