@render-foundation/utils 0.0.64 → 0.0.66

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 (35) hide show
  1. package/lib/cjs/client/pg/v1.js +9 -23
  2. package/lib/cjs/client/pg/v1.js.map +1 -1
  3. package/lib/cjs/client/pg/v2.js +66 -8
  4. package/lib/cjs/client/pg/v2.js.map +1 -1
  5. package/lib/cjs/client/pg/v2Client.js +669 -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 +7 -23
  12. package/lib/esm/src/client/pg/v1.js.map +1 -1
  13. package/lib/esm/src/client/pg/v2.js +65 -8
  14. package/lib/esm/src/client/pg/v2.js.map +1 -1
  15. package/lib/esm/src/client/pg/v2Client.js +613 -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 +10 -1
  23. package/lib/types/src/client/pg/v1.d.ts.map +1 -1
  24. package/lib/types/src/client/pg/v2.d.ts.map +1 -1
  25. package/lib/types/src/client/pg/v2Client.d.ts +120 -0
  26. package/lib/types/src/client/pg/v2Client.d.ts.map +1 -0
  27. package/lib/types/src/client/squads.d.ts +6 -2
  28. package/lib/types/src/client/squads.d.ts.map +1 -1
  29. package/lib/types/src/dbTypes.d.ts +9 -0
  30. package/lib/types/src/dbTypes.d.ts.map +1 -1
  31. package/lib/types/src/dbTypesV2.d.ts +24 -2
  32. package/lib/types/src/dbTypesV2.d.ts.map +1 -1
  33. package/lib/types/src/index.d.ts +1 -0
  34. package/lib/types/src/index.d.ts.map +1 -1
  35. package/package.json +1 -1
@@ -0,0 +1,613 @@
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
+ .execute();
327
+ const solKeys = ks.reduce((r, k) => {
328
+ r[k.sol_key] = {};
329
+ return r;
330
+ }, {});
331
+ return {
332
+ jobIds: res.map((r) => Number(r.id)),
333
+ totalRndr: BigInt(res[0].total_rndr),
334
+ startTime: res[0].start_time,
335
+ endTime: res[0].end_time,
336
+ burned: BigInt(res[0].burned ?? 0),
337
+ burnTx: res[0].tx_sig,
338
+ solKeys,
339
+ };
340
+ },
341
+ async getLatestNodeOperatorEpoch(log = consoleLogger) {
342
+ const now = new Date(Date.now());
343
+ try {
344
+ const res = await db
345
+ .selectFrom(EPOCH_TABLE)
346
+ .selectAll()
347
+ .where('channel', '=', 'node_operator')
348
+ .where('end_time', '<=', now)
349
+ .where('saved_at', 'is', null)
350
+ .orderBy('end_time asc')
351
+ .limit(1)
352
+ .executeTakeFirstOrThrow();
353
+ return {
354
+ epochId: BigInt(res.ui),
355
+ startedAt: res.start_time,
356
+ endedAt: res.end_time,
357
+ savedAt: res.saved_at ?? undefined,
358
+ };
359
+ }
360
+ catch (e) {
361
+ if (e instanceof NoResultError) {
362
+ log.info(`no node operator epoch found`);
363
+ return undefined;
364
+ }
365
+ throw e;
366
+ }
367
+ },
368
+ async saveNodeOperatorEpoch(epochId, liabilities, jobIds, totalRndr, log = consoleLogger) {
369
+ await db
370
+ .transaction()
371
+ .setIsolationLevel('repeatable read')
372
+ .execute(async (trx) => {
373
+ const { epochDbIds } = await createPayments(trx, liabilities.map((l) => ({
374
+ liability: l,
375
+ })), log);
376
+ log.info(`inserted transfers`);
377
+ for (const id of jobIds) {
378
+ await trx
379
+ .insertInto(JOB_ID_TABLE)
380
+ .values({
381
+ id: BigInt(id),
382
+ epoch_id: epochDbIds[0],
383
+ })
384
+ .executeTakeFirstOrThrow();
385
+ }
386
+ const now = new Date();
387
+ await updateTotalRndr(db, { uiEpochId: epochId, channel: 'node_operator' }, totalRndr, now, log);
388
+ log.debug(`saved epoch`);
389
+ /*const now = new Date(Date.now())
390
+ const res = await trx
391
+ .updateTable(EPOCH_TABLE)
392
+ .set({
393
+ saved_at: now,
394
+ total_rndr: totalRndr,
395
+ })
396
+ .where('channel')
397
+ .where('ui', '=', epochId.toString())
398
+ .where('', '=')
399
+ .executeTakeFirstOrThrow()*/
400
+ });
401
+ return;
402
+ },
403
+ async produceBurnedJobs(jobs, log = consoleLogger) {
404
+ await db.transaction().execute(async (trx) => {
405
+ let num = BigInt(0);
406
+ for (const { amount, completedAt, jobId } of jobs) {
407
+ const res = await trx
408
+ .insertInto(JOB_TABLE)
409
+ .values({
410
+ id: jobId,
411
+ render_amt: amount,
412
+ completed_at: completedAt,
413
+ inserted_at: new Date(Date.now()),
414
+ })
415
+ .onConflict((oc) => oc.column('id').doNothing())
416
+ .executeTakeFirstOrThrow();
417
+ num += res.numInsertedOrUpdatedRows ?? BigInt(0);
418
+ }
419
+ log.debug(`inserted ${num} of ${jobs.length} burn jobs`);
420
+ });
421
+ },
422
+ async markJobsBurnt(trx, p, log = consoleLogger) {
423
+ const solTxId = await getOrInsertTx(trx, { sig: p.solTx, executedAt: p.executedAt }, log);
424
+ const { id } = await trx
425
+ .insertInto(BURN_TABLE)
426
+ .values({
427
+ sol_tx_id: solTxId,
428
+ priced_at: p.pricedAt,
429
+ usdc_spent: p.usdcSpent,
430
+ quote_amt: p.quoteAmt,
431
+ burned: p.burned,
432
+ })
433
+ //.onConflict((oc) => oc.column('sol_tx').doNothing())
434
+ .returning((eb) => ['id as id'])
435
+ .executeTakeFirstOrThrow();
436
+ const jobIdsStr = p.jobsIds.map(String);
437
+ const res = await trx
438
+ .updateTable(JOB_TABLE)
439
+ .where('id', 'in', jobIdsStr)
440
+ .set('burn_id', id)
441
+ .executeTakeFirstOrThrow();
442
+ log.debug(`set burn_id on ${res.numUpdatedRows} jobs`);
443
+ return;
444
+ },
445
+ async markJobsBurned(p, log = consoleLogger) {
446
+ let { markedAt, solTx } = p;
447
+ let res = await db
448
+ .updateTable(BURN_TABLE)
449
+ .set({ marked_burned_at: markedAt })
450
+ .from(SOL_TX_TABLE)
451
+ .whereRef('burn.sol_tx_id', '=', 'sol_tx.id')
452
+ .where('sol_tx.sig', '=', solTx)
453
+ .executeTakeFirstOrThrow();
454
+ log.debug(`set ${res.numUpdatedRows} ${solTx} -> marked_burned_at ${markedAt.toISOString()}`);
455
+ },
456
+ async consumeAndLockBurnJobs(limit, lowerRndrThreshold, upperRndrThreshold, log = consoleLogger) {
457
+ const trx = await begin(db);
458
+ const q = trx.trx
459
+ .selectFrom(trx.trx
460
+ .selectFrom(JOB_TABLE)
461
+ .select(({ fn, val, ref }) => [
462
+ 'id',
463
+ fn
464
+ .sum('render_amt')
465
+ .over((ob) => ob.orderBy(`completed_at`, `asc`))
466
+ .as('total'),
467
+ ])
468
+ .where('burn_id', 'is', null)
469
+ .as('t'))
470
+ .select('id')
471
+ .where('total', '>', lowerRndrThreshold)
472
+ .where('total', '<', upperRndrThreshold);
473
+ log.debug(`outstanding jobs q: ${q.compile().sql} ${JSON.stringify({
474
+ limit,
475
+ lowerRndrThreshold,
476
+ upperRndrThreshold,
477
+ })}`);
478
+ const idRs = await q.execute();
479
+ const ids = idRs.map((x) => x.id);
480
+ log.debug(`${ids.length} candidate jobs for burn. locking up to ${limit} jobs`);
481
+ if (ids.length == 0) {
482
+ return { trx, jobs: [] };
483
+ }
484
+ const rows = await trx.trx
485
+ .selectFrom(JOB_TABLE)
486
+ .selectAll()
487
+ .where('id', 'in', ids)
488
+ .limit(limit)
489
+ .forUpdate()
490
+ .skipLocked()
491
+ .execute();
492
+ log.debug(`locked ${rows.length} jobs`);
493
+ const jobs = [];
494
+ for (const r of rows) {
495
+ jobs.push({
496
+ id: Number(r.id),
497
+ completedAt: r.completed_at,
498
+ rndrUsed: BigInt(r.render_amt),
499
+ });
500
+ }
501
+ return { trx, jobs };
502
+ },
503
+ async incrBuyBurnMetrics(log = consoleLogger) {
504
+ const res = await db
505
+ .selectFrom(JOB_TABLE)
506
+ .select('completed_at')
507
+ .orderBy('completed_at asc')
508
+ .where('burn_id', 'is', null)
509
+ .execute();
510
+ if (res.length == 0) {
511
+ return { outstandingJobs: 0 };
512
+ }
513
+ return {
514
+ outstandingJobs: res.length,
515
+ oldestJobFinishedAt: res[0].completed_at ?? undefined,
516
+ };
517
+ },
518
+ async deleteAll(log = consoleLogger) {
519
+ if (config.database.includes('render')) {
520
+ throw new Error('cannot nuke from deployed database. call from tests only');
521
+ }
522
+ const tx = await begin(db);
523
+ try {
524
+ const res = await Promise.all([
525
+ tx.trx
526
+ .deleteFrom(SOL_TX_TABLE)
527
+ .where('id', 'is not', null)
528
+ .executeTakeFirst(),
529
+ tx.trx.deleteFrom(LIABILITY_TABLE).executeTakeFirstOrThrow(),
530
+ tx.trx.deleteFrom(SOL_TRANSFER_TABLE).executeTakeFirstOrThrow(),
531
+ tx.trx
532
+ .deleteFrom(EPOCH_TABLE)
533
+ .where('id', 'is not', null)
534
+ .executeTakeFirst(),
535
+ tx.trx
536
+ .deleteFrom(ENTITY_TABLE)
537
+ .where('id', 'is not', null)
538
+ .executeTakeFirst(),
539
+ tx.trx
540
+ .deleteFrom(MANUAL_BURN_TABLE)
541
+ .where('epoch_id', 'is not', null)
542
+ .executeTakeFirst(),
543
+ tx.trx
544
+ .deleteFrom(JOB_ID_TABLE)
545
+ .where('id', 'is not', null)
546
+ .executeTakeFirst(),
547
+ tx.trx
548
+ .deleteFrom(JOB_TABLE)
549
+ .where('id', 'is not', null)
550
+ .executeTakeFirst(),
551
+ tx.trx
552
+ .deleteFrom(BURN_TABLE)
553
+ .where('id', 'is not', null)
554
+ .executeTakeFirst(),
555
+ ]);
556
+ tx.commit();
557
+ }
558
+ catch (e) {
559
+ log.error(`caught ${e}`);
560
+ tx.rollback();
561
+ }
562
+ },
563
+ };
564
+ };
565
+ async function begin(db) {
566
+ const connection = new Deferred();
567
+ const result = new Deferred();
568
+ // Do NOT await this line.
569
+ db.transaction()
570
+ .setIsolationLevel('repeatable read')
571
+ .execute((trx) => {
572
+ connection.resolve(trx);
573
+ return result.promise;
574
+ })
575
+ .catch((err) => {
576
+ // Don't do anything here. Just swallow the exception.
577
+ });
578
+ const trx = await connection.promise;
579
+ return {
580
+ trx,
581
+ commit() {
582
+ result.resolve(null);
583
+ },
584
+ rollback() {
585
+ result.reject(new Error('rollback'));
586
+ },
587
+ };
588
+ }
589
+ export class Deferred {
590
+ #promise;
591
+ #resolve;
592
+ #reject;
593
+ constructor() {
594
+ this.#promise = new Promise((resolve, reject) => {
595
+ this.#reject = reject;
596
+ this.#resolve = resolve;
597
+ });
598
+ }
599
+ get promise() {
600
+ return this.#promise;
601
+ }
602
+ resolve = (value) => {
603
+ if (this.#resolve) {
604
+ this.#resolve(value);
605
+ }
606
+ };
607
+ reject = (reason) => {
608
+ if (this.#reject) {
609
+ this.#reject(reason);
610
+ }
611
+ };
612
+ }
613
+ //# 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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"}