@render-foundation/utils 0.0.65 → 0.0.67

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 (34) hide show
  1. package/lib/cjs/client/pg/v1.js +0 -21
  2. package/lib/cjs/client/pg/v1.js.map +1 -1
  3. package/lib/cjs/client/pg/v2.js +1 -1
  4. package/lib/cjs/client/pg/v2.js.map +1 -1
  5. package/lib/cjs/client/pg/v2Client.js +671 -0
  6. package/lib/cjs/client/pg/v2Client.js.map +1 -0
  7. package/lib/cjs/client/squads.js +31 -19
  8. package/lib/cjs/client/squads.js.map +1 -1
  9. package/lib/cjs/index.js +2 -1
  10. package/lib/cjs/index.js.map +1 -1
  11. package/lib/esm/src/client/pg/v1.js +0 -21
  12. package/lib/esm/src/client/pg/v1.js.map +1 -1
  13. package/lib/esm/src/client/pg/v2.js +3 -1
  14. package/lib/esm/src/client/pg/v2.js.map +1 -1
  15. package/lib/esm/src/client/pg/v2Client.js +615 -0
  16. package/lib/esm/src/client/pg/v2Client.js.map +1 -0
  17. package/lib/esm/src/client/squads.js +29 -18
  18. package/lib/esm/src/client/squads.js.map +1 -1
  19. package/lib/esm/src/index.js +1 -0
  20. package/lib/esm/src/index.js.map +1 -1
  21. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
  22. package/lib/types/src/client/pg/v1.d.ts.map +1 -1
  23. package/lib/types/src/client/pg/v2.d.ts.map +1 -1
  24. package/lib/types/src/client/pg/v2Client.d.ts +120 -0
  25. package/lib/types/src/client/pg/v2Client.d.ts.map +1 -0
  26. package/lib/types/src/client/squads.d.ts +6 -2
  27. package/lib/types/src/client/squads.d.ts.map +1 -1
  28. package/lib/types/src/dbTypes.d.ts +9 -0
  29. package/lib/types/src/dbTypes.d.ts.map +1 -1
  30. package/lib/types/src/dbTypesV2.d.ts +23 -1
  31. package/lib/types/src/dbTypesV2.d.ts.map +1 -1
  32. package/lib/types/src/index.d.ts +1 -0
  33. package/lib/types/src/index.d.ts.map +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,615 @@
1
+ import { Kysely, NoResultError, PostgresDialect, sql, } from 'kysely';
2
+ import { consoleLogger } from '../../logger';
3
+ import { Pool } from 'pg';
4
+ export const SOL_TX_TABLE = 'sol_tx';
5
+ export const EPOCH_TABLE = 'epoch';
6
+ export const MANUAL_BURN_TABLE = 'manual_burn';
7
+ export const ENTITY_TABLE = 'entity';
8
+ export const SOL_TRANSFER_TABLE = 'sol_transfer1';
9
+ export const LIABILITY_TABLE = 'liability';
10
+ export const JOB_ID_TABLE = 'job_id';
11
+ export const JOB_TABLE = 'job';
12
+ export const BURN_TABLE = 'burn';
13
+ BigInt.prototype.toJSON = function () {
14
+ return this.toString();
15
+ };
16
+ export const pgClient = (config) => {
17
+ const dialect = new PostgresDialect({
18
+ pool: new Pool({
19
+ ...config,
20
+ port: config.port ?? 5432,
21
+ max: config.max ?? 10,
22
+ }),
23
+ });
24
+ // Database interface is passed to Kysely's constructor, and from now on, Kysely
25
+ // knows your database structure.
26
+ // Dialect is passed to Kysely's constructor, and from now on, Kysely knows how
27
+ // to communicate with your database.
28
+ const db = new Kysely({
29
+ dialect,
30
+ });
31
+ const getOrInsertEntity = async (db, p, log = consoleLogger) => {
32
+ const res = (await db
33
+ .selectFrom(ENTITY_TABLE)
34
+ .select('id')
35
+ .where('sol_key', '=', p.solKey)
36
+ .executeTakeFirst());
37
+ if (res) {
38
+ log.debug(`already found entity ${res.id}`);
39
+ return res.id;
40
+ }
41
+ const { id } = (await db
42
+ .insertInto(ENTITY_TABLE)
43
+ .values({
44
+ sol_key: p.solKey,
45
+ })
46
+ .onConflict((oc) => oc.column('sol_key').doNothing())
47
+ .returning((eb) => ['id as id'])
48
+ .executeTakeFirst());
49
+ log.debug(`inserted entity ${id}`);
50
+ return id;
51
+ };
52
+ const getOrInsertTx = async (db, p, log = consoleLogger) => {
53
+ const res = await db
54
+ .selectFrom(SOL_TX_TABLE)
55
+ .select('id')
56
+ .where('sig', '=', p.sig)
57
+ .executeTakeFirst();
58
+ if (res) {
59
+ log.debug(`already found tx ${res.id}`);
60
+ return res.id;
61
+ }
62
+ const { id } = (await db
63
+ .insertInto(SOL_TX_TABLE)
64
+ .values({
65
+ sig: p.sig,
66
+ executed_at: p.executedAt,
67
+ })
68
+ .onConflict((oc) => oc.column('sig').doNothing())
69
+ .returning((eb) => ['id as id'])
70
+ .executeTakeFirst());
71
+ log.debug(`inserted tx ${id}`);
72
+ return id;
73
+ };
74
+ const getOrInsertEpoch = async (db, p, log = consoleLogger) => {
75
+ const res = await db
76
+ .selectFrom(EPOCH_TABLE)
77
+ .select('id')
78
+ .where('ui', '=', String(p.uiEpochId))
79
+ .where('channel', '=', p.channel)
80
+ .executeTakeFirst();
81
+ if (res) {
82
+ log.debug(`already found epoch ${res.id}`);
83
+ return res.id;
84
+ }
85
+ const { id } = (await db
86
+ .insertInto(EPOCH_TABLE)
87
+ .values({
88
+ ui: p.uiEpochId,
89
+ channel: p.channel,
90
+ start_time: p.startTime,
91
+ end_time: p.endTime,
92
+ saved_at: p.channel == 'node_operator' ? new Date() : undefined,
93
+ })
94
+ .onConflict((oc) => oc.columns(['ui', 'channel']).doNothing())
95
+ .returning((eb) => ['id as id'])
96
+ .executeTakeFirst());
97
+ log.debug(`inserted epoch ${id}`);
98
+ return id;
99
+ };
100
+ const updateTotalRndr = async (db, p, totalRndr, savedAt, log) => {
101
+ const res = (await db
102
+ .updateTable(EPOCH_TABLE)
103
+ .set({
104
+ total_rndr: totalRndr,
105
+ saved_at: savedAt,
106
+ })
107
+ .where('channel', '=', p.channel)
108
+ .where('ui', '=', String(p.uiEpochId))
109
+ .executeTakeFirst());
110
+ log.info(`set ${res.numUpdatedRows} rows. channel: ${p.channel}, ui: ${p.uiEpochId} -> totalRndr ${totalRndr} `);
111
+ };
112
+ const createPayments = async (db, ps, log = consoleLogger) => {
113
+ const ids = [];
114
+ const epochDbIds = [];
115
+ for (const p of ps) {
116
+ let liabilityId;
117
+ let transferId;
118
+ if (p.liability) {
119
+ let { id: dbId, solKey, channel, epochId, createdAt, amountDue, deviceId, points, } = p.liability;
120
+ try {
121
+ let entityId;
122
+ if (solKey && solKey != '') {
123
+ entityId = await getOrInsertEntity(db, { solKey });
124
+ }
125
+ const dbEpochId = await getOrInsertEpoch(db, {
126
+ channel,
127
+ uiEpochId: epochId,
128
+ }, log);
129
+ epochDbIds.push(BigInt(dbEpochId));
130
+ log.debug(`inserting liability ${JSON.stringify(p.liability)}`);
131
+ const { id } = await db
132
+ .insertInto(LIABILITY_TABLE)
133
+ .values({
134
+ id: dbId,
135
+ entity_id: entityId,
136
+ epoch_id: dbEpochId,
137
+ channel,
138
+ created_at: createdAt ?? new Date(),
139
+ amount_due: amountDue,
140
+ device_id: deviceId,
141
+ points,
142
+ })
143
+ .returning((eb) => ['id as id'])
144
+ .executeTakeFirstOrThrow();
145
+ log.debug(`inserted liability ${id}`);
146
+ liabilityId = BigInt(id);
147
+ }
148
+ catch (e) {
149
+ throw new Error(`failed inserting solKey ${solKey} epochId ${epochId} ${JSON.stringify(p.liability)}: ${e}`);
150
+ }
151
+ }
152
+ if (p.transfer) {
153
+ let { executedAt, symbol, amountPayed, solTx, channel, fromSolKey, toSolKey, id: dbId, } = p.transfer;
154
+ if (!fromSolKey || !toSolKey || !solTx) {
155
+ log.debug(`skipping transfer. one of undefined: fromKey ${fromSolKey} toKey ${toSolKey} tx ${solTx}`);
156
+ continue;
157
+ }
158
+ log.debug(`inserting transfer ${JSON.stringify(p.transfer)}`);
159
+ const fromEntityId = await getOrInsertEntity(db, { solKey: fromSolKey });
160
+ const toEntityId = await getOrInsertEntity(db, { solKey: toSolKey });
161
+ const solTxId = await getOrInsertTx(db, {
162
+ sig: solTx,
163
+ executedAt,
164
+ }, log);
165
+ const { id } = await db
166
+ .insertInto(SOL_TRANSFER_TABLE)
167
+ .values({
168
+ id: dbId,
169
+ sol_tx_id: solTxId,
170
+ from_entity_id: fromEntityId,
171
+ to_entity_id: toEntityId,
172
+ channel,
173
+ symbol,
174
+ amount_payed: amountPayed,
175
+ })
176
+ .returning((eb) => ['id as id'])
177
+ .executeTakeFirstOrThrow();
178
+ transferId = BigInt(id);
179
+ }
180
+ ids.push({ transferId, liabilityId });
181
+ }
182
+ return { epochDbIds, inserted: ids };
183
+ };
184
+ return {
185
+ db: {
186
+ commit: () => { },
187
+ rollback: () => { },
188
+ trx: db,
189
+ },
190
+ async startTransaction() {
191
+ return begin(db);
192
+ },
193
+ async createPayments(db, ps, log = consoleLogger) {
194
+ return createPayments(db.trx, ps, log);
195
+ },
196
+ async getLiabilitiesAndTransfers(f, log = consoleLogger) {
197
+ let lq = db
198
+ .selectFrom(LIABILITY_TABLE)
199
+ .selectAll()
200
+ .innerJoin(ENTITY_TABLE, `${LIABILITY_TABLE}.entity_id`, 'entity.id')
201
+ .select(['entity.sol_key'])
202
+ .innerJoin(EPOCH_TABLE, `${EPOCH_TABLE}.id`, 'liability.epoch_id')
203
+ .select(['epoch.ui'])
204
+ .where('entity.sol_key', '=', f.user);
205
+ let tq = db
206
+ .selectFrom(SOL_TRANSFER_TABLE)
207
+ .selectAll()
208
+ .innerJoin(SOL_TX_TABLE, 'sol_tx.id', 'sol_transfer1.sol_tx_id')
209
+ .select(['sol_tx.sig', 'sol_tx.executed_at'])
210
+ .innerJoin(`${ENTITY_TABLE} as t`, `${SOL_TRANSFER_TABLE}.to_entity_id`, 't.id')
211
+ .select(['t.sol_key as to_sol_key'])
212
+ .innerJoin(`${ENTITY_TABLE} as f`, `${SOL_TRANSFER_TABLE}.from_entity_id`, 'f.id')
213
+ .select(['f.sol_key as from_sol_key'])
214
+ .where('t.sol_key', '=', f.user);
215
+ log.info(`fetch liabilities ${lq.compile().sql} ps ${JSON.stringify(f)}`);
216
+ log.info(`fetch transfers ${tq.compile().sql} ps ${JSON.stringify(f)}`);
217
+ const rows = await Promise.all([lq.execute(), tq.execute()]);
218
+ const liabilities = rows[0].map((l) => ({
219
+ id: BigInt(l.id),
220
+ solKey: l.sol_key,
221
+ epochId: Number(l.ui),
222
+ channel: l.channel,
223
+ createdAt: l.created_at,
224
+ amountDue: BigInt(l.amount_due),
225
+ deviceId: l.device_id,
226
+ points: l.points ? BigInt(l.points) : undefined,
227
+ }));
228
+ const transfers = rows[1].map((r) => ({
229
+ id: BigInt(r.id),
230
+ fromSolKey: r.from_sol_key,
231
+ toSolKey: r.to_sol_key,
232
+ symbol: r.symbol,
233
+ channel: r.channel,
234
+ solTx: r.sig,
235
+ executedAt: r.executed_at,
236
+ amountPayed: BigInt(r.amount_payed),
237
+ }));
238
+ return { transfers, liabilities };
239
+ },
240
+ async getOutstanding(f, log = consoleLogger) {
241
+ let q = db
242
+ .selectFrom((eb) => eb
243
+ .selectFrom((eb) => {
244
+ let b = eb
245
+ .selectFrom(SOL_TRANSFER_TABLE)
246
+ .select(({ fn }) => fn.sum(`amount_payed`).as('payed'))
247
+ .innerJoin(ENTITY_TABLE, `${SOL_TRANSFER_TABLE}.to_entity_id`, 'entity.id')
248
+ .select(['entity.sol_key'])
249
+ .groupBy('entity.sol_key');
250
+ if (f.channels && f.channels.length > 0) {
251
+ b = b.where((eb) => eb.or(f.channels.map((c) => eb('sol_transfer1.channel', '=', c))));
252
+ }
253
+ else {
254
+ b = b.where((eb) => eb.or([
255
+ eb('sol_transfer1.channel', '=', 'node_operator'),
256
+ eb('sol_transfer1.channel', '=', 'availability'),
257
+ ]));
258
+ }
259
+ return b.as('y');
260
+ })
261
+ .fullJoin((eb) => {
262
+ let b = eb
263
+ .selectFrom(LIABILITY_TABLE)
264
+ .select(({ fn }) => fn.sum(`amount_due`).as('due'))
265
+ .innerJoin(ENTITY_TABLE, `${LIABILITY_TABLE}.entity_id`, 'entity.id')
266
+ .select(['entity.sol_key'])
267
+ .groupBy('entity.sol_key');
268
+ if (f.channels && f.channels.length > 0) {
269
+ b = b.where((eb) => eb.or(f.channels.map((c) => eb('sol_transfer1.channel', '=', c))));
270
+ }
271
+ else {
272
+ b = b.where((eb) => eb.or([
273
+ eb('channel', '=', 'node_operator'),
274
+ eb('channel', '=', 'availability'),
275
+ ]));
276
+ }
277
+ return b.as('x');
278
+ }, (join) => join.onRef('y.sol_key', '=', 'x.sol_key'))
279
+ .select(({ fn }) => [
280
+ fn.coalesce('y.sol_key', 'x.sol_key').as('sol_key'),
281
+ sql `${fn.coalesce(`x.due`, sql `0`)} - ${fn.coalesce(`y.payed`, sql `0`)}`.as('out'),
282
+ ])
283
+ .as('z'))
284
+ .selectAll();
285
+ if (f.due == 'overpayed') {
286
+ q = q.where('out', '<', '0');
287
+ }
288
+ else if (f.due == 'underpayed') {
289
+ q = q.where('out', '>', '0');
290
+ }
291
+ log.info(`${q.compile().sql} ps ${JSON.stringify(f)}`);
292
+ const res = await q.execute();
293
+ const out = {};
294
+ for (const r of res) {
295
+ out[r.sol_key] = BigInt(r.out);
296
+ }
297
+ return out;
298
+ },
299
+ async fetchNodeOperatorEpoch(epochId, log = consoleLogger) {
300
+ const q = db
301
+ .selectFrom(JOB_ID_TABLE)
302
+ .innerJoin(EPOCH_TABLE, 'epoch.id', 'job_id.epoch_id')
303
+ .leftJoin(MANUAL_BURN_TABLE, 'manual_burn.epoch_id', 'epoch.id')
304
+ .where('epoch.ui', '=', String(epochId))
305
+ .where('epoch.channel', '=', 'node_operator')
306
+ .select([
307
+ 'job_id.id',
308
+ 'epoch.total_rndr',
309
+ 'epoch.start_time',
310
+ 'epoch.end_time',
311
+ 'manual_burn.burned',
312
+ 'manual_burn.tx_sig',
313
+ ])
314
+ .orderBy('job_id.id asc');
315
+ log.debug(`fetch epoch info q ${q.compile().sql} epochId ${epochId}`);
316
+ const res = await q.execute();
317
+ if (res.length == 0) {
318
+ throw new Error(`epoch ${epochId} not found`);
319
+ }
320
+ const ks = await db
321
+ .selectFrom(LIABILITY_TABLE)
322
+ .innerJoin(ENTITY_TABLE, 'liability.entity_id', 'entity.sol_key')
323
+ .select(({ fn }) => [sql `distinct(sol_key)`.as('sol_key')])
324
+ .innerJoin(EPOCH_TABLE, 'liability.epoch_id', 'epoch.id')
325
+ .where('epoch.ui', '=', String(epochId))
326
+ .where('liability.channel', '=', 'node_operator')
327
+ .where('epoch.channel', '=', 'node_operator')
328
+ .execute();
329
+ const solKeys = ks.reduce((r, k) => {
330
+ r[k.sol_key] = {};
331
+ return r;
332
+ }, {});
333
+ return {
334
+ jobIds: res.map((r) => Number(r.id)),
335
+ totalRndr: BigInt(res[0].total_rndr),
336
+ startTime: res[0].start_time,
337
+ endTime: res[0].end_time,
338
+ burned: BigInt(res[0].burned ?? 0),
339
+ burnTx: res[0].tx_sig,
340
+ solKeys,
341
+ };
342
+ },
343
+ async getLatestNodeOperatorEpoch(log = consoleLogger) {
344
+ const now = new Date(Date.now());
345
+ try {
346
+ const res = await db
347
+ .selectFrom(EPOCH_TABLE)
348
+ .selectAll()
349
+ .where('channel', '=', 'node_operator')
350
+ .where('end_time', '<=', now)
351
+ .where('saved_at', 'is', null)
352
+ .orderBy('end_time asc')
353
+ .limit(1)
354
+ .executeTakeFirstOrThrow();
355
+ return {
356
+ epochId: BigInt(res.ui),
357
+ startedAt: res.start_time,
358
+ endedAt: res.end_time,
359
+ savedAt: res.saved_at ?? undefined,
360
+ };
361
+ }
362
+ catch (e) {
363
+ if (e instanceof NoResultError) {
364
+ log.info(`no node operator epoch found`);
365
+ return undefined;
366
+ }
367
+ throw e;
368
+ }
369
+ },
370
+ async saveNodeOperatorEpoch(epochId, liabilities, jobIds, totalRndr, log = consoleLogger) {
371
+ await db
372
+ .transaction()
373
+ .setIsolationLevel('repeatable read')
374
+ .execute(async (trx) => {
375
+ const { epochDbIds } = await createPayments(trx, liabilities.map((l) => ({
376
+ liability: l,
377
+ })), log);
378
+ log.info(`inserted liabilities`);
379
+ for (const id of jobIds) {
380
+ await trx
381
+ .insertInto(JOB_ID_TABLE)
382
+ .values({
383
+ id: BigInt(id),
384
+ epoch_id: epochDbIds[0],
385
+ })
386
+ .executeTakeFirstOrThrow();
387
+ }
388
+ const now = new Date();
389
+ await updateTotalRndr(db, { uiEpochId: epochId, channel: 'node_operator' }, totalRndr, now, log);
390
+ log.debug(`saved epoch`);
391
+ /*const now = new Date(Date.now())
392
+ const res = await trx
393
+ .updateTable(EPOCH_TABLE)
394
+ .set({
395
+ saved_at: now,
396
+ total_rndr: totalRndr,
397
+ })
398
+ .where('channel')
399
+ .where('ui', '=', epochId.toString())
400
+ .where('', '=')
401
+ .executeTakeFirstOrThrow()*/
402
+ });
403
+ return;
404
+ },
405
+ async produceBurnedJobs(jobs, log = consoleLogger) {
406
+ await db.transaction().execute(async (trx) => {
407
+ let num = BigInt(0);
408
+ for (const { amount, completedAt, jobId } of jobs) {
409
+ const res = await trx
410
+ .insertInto(JOB_TABLE)
411
+ .values({
412
+ id: jobId,
413
+ render_amt: amount,
414
+ completed_at: completedAt,
415
+ inserted_at: new Date(Date.now()),
416
+ })
417
+ .onConflict((oc) => oc.column('id').doNothing())
418
+ .executeTakeFirstOrThrow();
419
+ num += res.numInsertedOrUpdatedRows ?? BigInt(0);
420
+ }
421
+ log.debug(`inserted ${num} of ${jobs.length} burn jobs`);
422
+ });
423
+ },
424
+ async markJobsBurnt(trx, p, log = consoleLogger) {
425
+ const solTxId = await getOrInsertTx(trx, { sig: p.solTx, executedAt: p.executedAt }, log);
426
+ const { id } = await trx
427
+ .insertInto(BURN_TABLE)
428
+ .values({
429
+ sol_tx_id: solTxId,
430
+ priced_at: p.pricedAt,
431
+ usdc_spent: p.usdcSpent,
432
+ quote_amt: p.quoteAmt,
433
+ burned: p.burned,
434
+ })
435
+ //.onConflict((oc) => oc.column('sol_tx').doNothing())
436
+ .returning((eb) => ['id as id'])
437
+ .executeTakeFirstOrThrow();
438
+ const jobIdsStr = p.jobsIds.map(String);
439
+ const res = await trx
440
+ .updateTable(JOB_TABLE)
441
+ .where('id', 'in', jobIdsStr)
442
+ .set('burn_id', id)
443
+ .executeTakeFirstOrThrow();
444
+ log.debug(`set burn_id on ${res.numUpdatedRows} jobs`);
445
+ return;
446
+ },
447
+ async markJobsBurned(p, log = consoleLogger) {
448
+ let { markedAt, solTx } = p;
449
+ let res = await db
450
+ .updateTable(BURN_TABLE)
451
+ .set({ marked_burned_at: markedAt })
452
+ .from(SOL_TX_TABLE)
453
+ .whereRef('burn.sol_tx_id', '=', 'sol_tx.id')
454
+ .where('sol_tx.sig', '=', solTx)
455
+ .executeTakeFirstOrThrow();
456
+ log.debug(`set ${res.numUpdatedRows} ${solTx} -> marked_burned_at ${markedAt.toISOString()}`);
457
+ },
458
+ async consumeAndLockBurnJobs(limit, lowerRndrThreshold, upperRndrThreshold, log = consoleLogger) {
459
+ const trx = await begin(db);
460
+ const q = trx.trx
461
+ .selectFrom(trx.trx
462
+ .selectFrom(JOB_TABLE)
463
+ .select(({ fn, val, ref }) => [
464
+ 'id',
465
+ fn
466
+ .sum('render_amt')
467
+ .over((ob) => ob.orderBy(`completed_at`, `asc`))
468
+ .as('total'),
469
+ ])
470
+ .where('burn_id', 'is', null)
471
+ .as('t'))
472
+ .select('id')
473
+ .where('total', '>', lowerRndrThreshold)
474
+ .where('total', '<', upperRndrThreshold);
475
+ log.debug(`outstanding jobs q: ${q.compile().sql} ${JSON.stringify({
476
+ limit,
477
+ lowerRndrThreshold,
478
+ upperRndrThreshold,
479
+ })}`);
480
+ const idRs = await q.execute();
481
+ const ids = idRs.map((x) => x.id);
482
+ log.debug(`${ids.length} candidate jobs for burn. locking up to ${limit} jobs`);
483
+ if (ids.length == 0) {
484
+ return { trx, jobs: [] };
485
+ }
486
+ const rows = await trx.trx
487
+ .selectFrom(JOB_TABLE)
488
+ .selectAll()
489
+ .where('id', 'in', ids)
490
+ .limit(limit)
491
+ .forUpdate()
492
+ .skipLocked()
493
+ .execute();
494
+ log.debug(`locked ${rows.length} jobs`);
495
+ const jobs = [];
496
+ for (const r of rows) {
497
+ jobs.push({
498
+ id: Number(r.id),
499
+ completedAt: r.completed_at,
500
+ rndrUsed: BigInt(r.render_amt),
501
+ });
502
+ }
503
+ return { trx, jobs };
504
+ },
505
+ async incrBuyBurnMetrics(log = consoleLogger) {
506
+ const res = await db
507
+ .selectFrom(JOB_TABLE)
508
+ .select('completed_at')
509
+ .orderBy('completed_at asc')
510
+ .where('burn_id', 'is', null)
511
+ .execute();
512
+ if (res.length == 0) {
513
+ return { outstandingJobs: 0 };
514
+ }
515
+ return {
516
+ outstandingJobs: res.length,
517
+ oldestJobFinishedAt: res[0].completed_at ?? undefined,
518
+ };
519
+ },
520
+ async deleteAll(log = consoleLogger) {
521
+ if (config.database.includes('render')) {
522
+ throw new Error('cannot nuke from deployed database. call from tests only');
523
+ }
524
+ const tx = await begin(db);
525
+ try {
526
+ const res = await Promise.all([
527
+ tx.trx
528
+ .deleteFrom(SOL_TX_TABLE)
529
+ .where('id', 'is not', null)
530
+ .executeTakeFirst(),
531
+ tx.trx.deleteFrom(LIABILITY_TABLE).executeTakeFirstOrThrow(),
532
+ tx.trx.deleteFrom(SOL_TRANSFER_TABLE).executeTakeFirstOrThrow(),
533
+ tx.trx
534
+ .deleteFrom(EPOCH_TABLE)
535
+ .where('id', 'is not', null)
536
+ .executeTakeFirst(),
537
+ tx.trx
538
+ .deleteFrom(ENTITY_TABLE)
539
+ .where('id', 'is not', null)
540
+ .executeTakeFirst(),
541
+ tx.trx
542
+ .deleteFrom(MANUAL_BURN_TABLE)
543
+ .where('epoch_id', 'is not', null)
544
+ .executeTakeFirst(),
545
+ tx.trx
546
+ .deleteFrom(JOB_ID_TABLE)
547
+ .where('id', 'is not', null)
548
+ .executeTakeFirst(),
549
+ tx.trx
550
+ .deleteFrom(JOB_TABLE)
551
+ .where('id', 'is not', null)
552
+ .executeTakeFirst(),
553
+ tx.trx
554
+ .deleteFrom(BURN_TABLE)
555
+ .where('id', 'is not', null)
556
+ .executeTakeFirst(),
557
+ ]);
558
+ tx.commit();
559
+ }
560
+ catch (e) {
561
+ log.error(`caught ${e}`);
562
+ tx.rollback();
563
+ }
564
+ },
565
+ };
566
+ };
567
+ async function begin(db) {
568
+ const connection = new Deferred();
569
+ const result = new Deferred();
570
+ // Do NOT await this line.
571
+ db.transaction()
572
+ .setIsolationLevel('repeatable read')
573
+ .execute((trx) => {
574
+ connection.resolve(trx);
575
+ return result.promise;
576
+ })
577
+ .catch((err) => {
578
+ // Don't do anything here. Just swallow the exception.
579
+ });
580
+ const trx = await connection.promise;
581
+ return {
582
+ trx,
583
+ commit() {
584
+ result.resolve(null);
585
+ },
586
+ rollback() {
587
+ result.reject(new Error('rollback'));
588
+ },
589
+ };
590
+ }
591
+ export class Deferred {
592
+ #promise;
593
+ #resolve;
594
+ #reject;
595
+ constructor() {
596
+ this.#promise = new Promise((resolve, reject) => {
597
+ this.#reject = reject;
598
+ this.#resolve = resolve;
599
+ });
600
+ }
601
+ get promise() {
602
+ return this.#promise;
603
+ }
604
+ resolve = (value) => {
605
+ if (this.#resolve) {
606
+ this.#resolve(value);
607
+ }
608
+ };
609
+ reject = (reason) => {
610
+ if (this.#reject) {
611
+ this.#reject(reason);
612
+ }
613
+ };
614
+ }
615
+ //# sourceMappingURL=v2Client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"v2Client.js","sourceRoot":"","sources":["../../../../../src/client/pg/v2Client.ts"],"names":[],"mappings":"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"}