@render-foundation/utils 0.0.199 → 0.0.230

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 (84) hide show
  1. package/lib/cjs/assertSecrets.js +1 -2
  2. package/lib/cjs/assertSecrets.js.map +1 -1
  3. package/lib/cjs/backfiller.js +16 -16
  4. package/lib/cjs/backfiller.js.map +1 -1
  5. package/lib/cjs/burn/burnAnalysis.js +101 -0
  6. package/lib/cjs/burn/burnAnalysis.js.map +1 -0
  7. package/lib/cjs/burn/burnCalculations.js +140 -0
  8. package/lib/cjs/burn/burnCalculations.js.map +1 -0
  9. package/lib/cjs/client/onchain.js +3 -3
  10. package/lib/cjs/client/onchain.js.map +1 -1
  11. package/lib/cjs/client/pg/base.js +7 -7
  12. package/lib/cjs/client/pg/base.js.map +1 -1
  13. package/lib/cjs/client/pg/v1.js +31 -31
  14. package/lib/cjs/client/pg/v1.js.map +1 -1
  15. package/lib/cjs/client/pg/v2Client.js +244 -194
  16. package/lib/cjs/client/pg/v2Client.js.map +1 -1
  17. package/lib/cjs/client/pg/viewClient.js +6 -6
  18. package/lib/cjs/client/pg/viewClient.js.map +1 -1
  19. package/lib/cjs/client/price.js +3 -3
  20. package/lib/cjs/client/price.js.map +1 -1
  21. package/lib/cjs/client/render.js +10 -10
  22. package/lib/cjs/client/render.js.map +1 -1
  23. package/lib/cjs/client/squads.js +20 -10
  24. package/lib/cjs/client/squads.js.map +1 -1
  25. package/lib/cjs/client/trade.js +15 -12
  26. package/lib/cjs/client/trade.js.map +1 -1
  27. package/lib/cjs/client/wormhole.js +19 -9
  28. package/lib/cjs/client/wormhole.js.map +1 -1
  29. package/lib/cjs/errorReporter.js +1 -1
  30. package/lib/cjs/errorReporter.js.map +1 -1
  31. package/lib/cjs/index.js +19 -12
  32. package/lib/cjs/index.js.map +1 -1
  33. package/lib/esm/src/assertSecrets.js.map +1 -1
  34. package/lib/esm/src/backfiller.js.map +1 -1
  35. package/lib/esm/src/burn/burnAnalysis.js +90 -0
  36. package/lib/esm/src/burn/burnAnalysis.js.map +1 -0
  37. package/lib/esm/src/burn/burnCalculations.js +124 -0
  38. package/lib/esm/src/burn/burnCalculations.js.map +1 -0
  39. package/lib/esm/src/client/onchain.js.map +1 -1
  40. package/lib/esm/src/client/pg/base.js.map +1 -1
  41. package/lib/esm/src/client/pg/v1.js.map +1 -1
  42. package/lib/esm/src/client/pg/v2Client.js +133 -91
  43. package/lib/esm/src/client/pg/v2Client.js.map +1 -1
  44. package/lib/esm/src/client/pg/viewClient.js.map +1 -1
  45. package/lib/esm/src/client/price.js.map +1 -1
  46. package/lib/esm/src/client/render.js.map +1 -1
  47. package/lib/esm/src/client/squads.js.map +1 -1
  48. package/lib/esm/src/client/trade.js +2 -2
  49. package/lib/esm/src/client/trade.js.map +1 -1
  50. package/lib/esm/src/client/wormhole.js.map +1 -1
  51. package/lib/esm/src/errorReporter.js.map +1 -1
  52. package/lib/esm/src/index.js +2 -5
  53. package/lib/esm/src/index.js.map +1 -1
  54. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
  55. package/lib/types/src/backfiller.d.ts.map +1 -1
  56. package/lib/types/src/burn/burnAnalysis.d.ts +51 -0
  57. package/lib/types/src/burn/burnAnalysis.d.ts.map +1 -0
  58. package/lib/types/src/burn/burnCalculations.d.ts +52 -0
  59. package/lib/types/src/burn/burnCalculations.d.ts.map +1 -0
  60. package/lib/types/src/client/onchain.d.ts +2 -1
  61. package/lib/types/src/client/onchain.d.ts.map +1 -1
  62. package/lib/types/src/client/pg/base.d.ts.map +1 -1
  63. package/lib/types/src/client/pg/v1.d.ts.map +1 -1
  64. package/lib/types/src/client/pg/v2Client.d.ts +23 -26
  65. package/lib/types/src/client/pg/v2Client.d.ts.map +1 -1
  66. package/lib/types/src/client/pg/viewClient.d.ts.map +1 -1
  67. package/lib/types/src/client/render.d.ts.map +1 -1
  68. package/lib/types/src/client/squads.d.ts.map +1 -1
  69. package/lib/types/src/client/trade.d.ts.map +1 -1
  70. package/lib/types/src/client/wormhole.d.ts +1 -1
  71. package/lib/types/src/client/wormhole.d.ts.map +1 -1
  72. package/lib/types/src/dbTypesV2.d.ts +13 -15
  73. package/lib/types/src/dbTypesV2.d.ts.map +1 -1
  74. package/lib/types/src/errorReporter.d.ts.map +1 -1
  75. package/lib/types/src/index.d.ts +2 -2
  76. package/lib/types/src/index.d.ts.map +1 -1
  77. package/package.json +2 -2
  78. package/CHANGELOG.md +0 -310
  79. package/lib/cjs/client/dispersed.js +0 -123
  80. package/lib/cjs/client/dispersed.js.map +0 -1
  81. package/lib/esm/src/client/dispersed.js +0 -108
  82. package/lib/esm/src/client/dispersed.js.map +0 -1
  83. package/lib/types/src/client/dispersed.d.ts +0 -91
  84. package/lib/types/src/client/dispersed.d.ts.map +0 -1
@@ -15,13 +15,23 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -35,7 +45,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
35
45
  return (mod && mod.__esModule) ? mod : { "default": mod };
36
46
  };
37
47
  Object.defineProperty(exports, "__esModule", { value: true });
38
- exports.pgClient = exports.batchFinishedAtMedian = exports.DISPERSED_SETTLEMENT_TABLE = exports.GRANT_BURN_TABLE = exports.GRANT_BURN_ID_TABLE = exports.USER_GRANT_SPEND_TABLE = exports.CURRENT_USER_GRANT_SPEND_TABLE = exports.POLYGON_UPGRADE_TABLE = exports.ENTITY_EPOCH_INFO_TABLE = exports.BURN_ADJUSTMENT_TABLE = exports.NETWORK_REVENUE_TABLE = exports.BRIDGE_TRANSFER_TABLE = exports.BURN_TABLE = exports.JOB_TABLE = exports.JOB_ID_TABLE = exports.LIABILITY_TABLE = exports.SOL_TRANSFER_TABLE = exports.ENTITY_TABLE = exports.MANUAL_BURN_TABLE = exports.EPOCH_TABLE = exports.SOL_TX_TABLE = void 0;
48
+ exports.pgClient = exports.batchFinishedAtMedian = exports.GRANT_BURN_TABLE = exports.GRANT_BURN_ID_TABLE = exports.USER_GRANT_SPEND_TABLE = exports.CURRENT_USER_GRANT_SPEND_TABLE = exports.POLYGON_UPGRADE_TABLE = exports.ENTITY_EPOCH_INFO_TABLE = exports.TX_BURN_ADJUSTMENT_TABLE = exports.JOB_BURN_ADJUSTMENT_TABLE = exports.NETWORK_REVENUE_TABLE = exports.BRIDGE_TRANSFER_TABLE = exports.BURN_TABLE = exports.JOB_TABLE = exports.JOB_ID_TABLE = exports.LIABILITY_TABLE = exports.SOL_TRANSFER_TABLE = exports.ENTITY_TABLE = exports.MANUAL_BURN_TABLE = exports.EPOCH_TABLE = exports.SOL_TX_TABLE = void 0;
39
49
  const kysely_1 = require("kysely");
40
50
  const logger_1 = require("../../logger");
41
51
  const pg_1 = require("pg");
@@ -52,14 +62,14 @@ exports.JOB_TABLE = 'job';
52
62
  exports.BURN_TABLE = 'burn';
53
63
  exports.BRIDGE_TRANSFER_TABLE = 'bridge_transfer';
54
64
  exports.NETWORK_REVENUE_TABLE = 'network_revenue';
55
- exports.BURN_ADJUSTMENT_TABLE = 'burn_adjustment';
65
+ exports.JOB_BURN_ADJUSTMENT_TABLE = 'job_burn_adjustment';
66
+ exports.TX_BURN_ADJUSTMENT_TABLE = 'tx_burn_adjustment';
56
67
  exports.ENTITY_EPOCH_INFO_TABLE = 'entity_epoch_info';
57
68
  exports.POLYGON_UPGRADE_TABLE = 'polygon_upgrade';
58
69
  exports.CURRENT_USER_GRANT_SPEND_TABLE = 'current_user_grant_spend';
59
70
  exports.USER_GRANT_SPEND_TABLE = 'user_grant_spend';
60
71
  exports.GRANT_BURN_ID_TABLE = 'grant_burn_id';
61
72
  exports.GRANT_BURN_TABLE = 'grant_burn';
62
- exports.DISPERSED_SETTLEMENT_TABLE = 'dispersed_settlement';
63
73
  BigInt.prototype.toJSON = function () {
64
74
  return this.toString();
65
75
  };
@@ -93,7 +103,7 @@ const pgClient = (config) => {
93
103
  const db = new kysely_1.Kysely({
94
104
  dialect,
95
105
  });
96
- const getOrInsertEntity = (db, p, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
106
+ const getOrInsertEntity = (db_1, p_1, ...args_1) => __awaiter(void 0, [db_1, p_1, ...args_1], void 0, function* (db, p, log = logger_1.consoleLogger) {
97
107
  const res = (yield db
98
108
  .selectFrom(exports.ENTITY_TABLE)
99
109
  .select('id')
@@ -114,7 +124,7 @@ const pgClient = (config) => {
114
124
  log.debug(`inserted entity ${id}`);
115
125
  return id;
116
126
  });
117
- const getOrInsertTx = (db, p, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
127
+ const getOrInsertTx = (db_1, p_1, ...args_1) => __awaiter(void 0, [db_1, p_1, ...args_1], void 0, function* (db, p, log = logger_1.consoleLogger) {
118
128
  const res = yield db
119
129
  .selectFrom(exports.SOL_TX_TABLE)
120
130
  .select('id')
@@ -136,7 +146,7 @@ const pgClient = (config) => {
136
146
  log.debug(`inserted tx ${id}`);
137
147
  return id;
138
148
  });
139
- const getOrInsertEpoch = (db, p, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
149
+ const getOrInsertEpoch = (db_1, p_1, ...args_1) => __awaiter(void 0, [db_1, p_1, ...args_1], void 0, function* (db, p, log = logger_1.consoleLogger) {
140
150
  const res = yield db
141
151
  .selectFrom(exports.EPOCH_TABLE)
142
152
  .select('id')
@@ -164,7 +174,7 @@ const pgClient = (config) => {
164
174
  log.debug(`inserted epoch ${id}`);
165
175
  return id;
166
176
  });
167
- const getCurrentUserGrantSpend = (db, p, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
177
+ const getCurrentUserGrantSpend = (db_1, p_1, ...args_1) => __awaiter(void 0, [db_1, p_1, ...args_1], void 0, function* (db, p, log = logger_1.consoleLogger) {
168
178
  var _a;
169
179
  const res = yield db
170
180
  .selectFrom(exports.CURRENT_USER_GRANT_SPEND_TABLE)
@@ -194,7 +204,7 @@ const pgClient = (config) => {
194
204
  .executeTakeFirst());
195
205
  log.info(`set ${res.numUpdatedRows} rows. channel: ${p.channel}, ui: ${p.uiEpochId} -> totalRndr ${totalRndr} `);
196
206
  });
197
- const fetchJobs1 = (db, f, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
207
+ const fetchJobs1 = (db_1, f_1, ...args_1) => __awaiter(void 0, [db_1, f_1, ...args_1], void 0, function* (db, f, log = logger_1.consoleLogger) {
198
208
  let q = db.selectFrom('job').selectAll();
199
209
  //.where('job.burn_id', 'is not', null)
200
210
  if (f.completedAtAfter) {
@@ -224,7 +234,7 @@ const pgClient = (config) => {
224
234
  insertedAt: r.inserted_at,
225
235
  }));
226
236
  });
227
- const fetchJobs2 = (db, f, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
237
+ const fetchJobs2 = (db_1, f_1, ...args_1) => __awaiter(void 0, [db_1, f_1, ...args_1], void 0, function* (db, f, log = logger_1.consoleLogger) {
228
238
  let q = db.selectFrom('job').selectAll();
229
239
  //.where('job.burn_id', 'is not', null)
230
240
  if (f.completedAtAfter) {
@@ -258,7 +268,7 @@ const pgClient = (config) => {
258
268
  });
259
269
  });
260
270
  });
261
- const createBridgeTransfers = (db, bts, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
271
+ const createBridgeTransfers = (db_1, bts_1, ...args_1) => __awaiter(void 0, [db_1, bts_1, ...args_1], void 0, function* (db, bts, log = logger_1.consoleLogger) {
262
272
  const sequenceNumbers = [];
263
273
  const dbEpochIds = [];
264
274
  for (const bt of bts) {
@@ -302,7 +312,7 @@ const pgClient = (config) => {
302
312
  }
303
313
  return { sequenceNumbers: sequenceNumbers };
304
314
  });
305
- const createPayments = (db, ps, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
315
+ const createPayments = (db_1, ps_1, ...args_1) => __awaiter(void 0, [db_1, ps_1, ...args_1], void 0, function* (db, ps, log = logger_1.consoleLogger) {
306
316
  const ids = [];
307
317
  const epochDbIds = [];
308
318
  for (const p of ps) {
@@ -356,7 +366,11 @@ const pgClient = (config) => {
356
366
  sig: solTx,
357
367
  executedAt,
358
368
  }, log);
359
- const { id } = yield db
369
+ // sol_transfer1 already has UNIQUE(sol_tx_id, from_entity_id,
370
+ // to_entity_id, symbol). Without ON CONFLICT a retry of the record step
371
+ // throws a unique violation and wedges the BullMQ job; make it an
372
+ // idempotent no-op and re-fetch the existing id instead.
373
+ let transferRow = yield db
360
374
  .insertInto(exports.SOL_TRANSFER_TABLE)
361
375
  .values({
362
376
  id: dbId,
@@ -367,9 +381,23 @@ const pgClient = (config) => {
367
381
  symbol,
368
382
  amount_payed: amountPayed,
369
383
  })
384
+ .onConflict((oc) => oc
385
+ .columns(['sol_tx_id', 'from_entity_id', 'to_entity_id', 'symbol'])
386
+ .doNothing())
370
387
  .returning((eb) => ['id as id'])
371
- .executeTakeFirstOrThrow();
372
- transferId = BigInt(id);
388
+ .executeTakeFirst();
389
+ if (!transferRow) {
390
+ log.warn(`sol_transfer for sol_tx_id ${solTxId} ${fromEntityId}->${toEntityId} ${symbol} already exists; reusing existing id (idempotent retry)`);
391
+ transferRow = yield db
392
+ .selectFrom(exports.SOL_TRANSFER_TABLE)
393
+ .select((eb) => ['id as id'])
394
+ .where('sol_tx_id', '=', solTxId)
395
+ .where('from_entity_id', '=', fromEntityId)
396
+ .where('to_entity_id', '=', toEntityId)
397
+ .where('symbol', '=', symbol)
398
+ .executeTakeFirstOrThrow();
399
+ }
400
+ transferId = BigInt(transferRow.id);
373
401
  }
374
402
  ids.push({ transferId, liabilityId });
375
403
  }
@@ -381,18 +409,18 @@ const pgClient = (config) => {
381
409
  rollback: () => { },
382
410
  trx: db,
383
411
  },
384
- startTransaction(log = logger_1.consoleLogger) {
385
- return __awaiter(this, void 0, void 0, function* () {
412
+ startTransaction() {
413
+ return __awaiter(this, arguments, void 0, function* (log = logger_1.consoleLogger) {
386
414
  return (0, base_2.begin)(db, log);
387
415
  });
388
416
  },
389
- createPayments(db, ps, log = logger_1.consoleLogger) {
390
- return __awaiter(this, void 0, void 0, function* () {
417
+ createPayments(db_1, ps_1) {
418
+ return __awaiter(this, arguments, void 0, function* (db, ps, log = logger_1.consoleLogger) {
391
419
  return createPayments(db.trx, ps, log);
392
420
  });
393
421
  },
394
- fetchTransfers(db, f, log = logger_1.consoleLogger) {
395
- return __awaiter(this, void 0, void 0, function* () {
422
+ fetchTransfers(db_1, f_1) {
423
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
396
424
  let lastId = undefined;
397
425
  if (f.cursor) {
398
426
  lastId = atob(f.cursor);
@@ -448,8 +476,8 @@ const pgClient = (config) => {
448
476
  };
449
477
  });
450
478
  },
451
- fetchEpochs(db, f, log = logger_1.consoleLogger) {
452
- return __awaiter(this, void 0, void 0, function* () {
479
+ fetchEpochs(db_1, f_1) {
480
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
453
481
  let q = db.trx.selectFrom(exports.EPOCH_TABLE).selectAll();
454
482
  if (f.channels) {
455
483
  q = q.where('channel', 'in', f.channels);
@@ -472,9 +500,9 @@ const pgClient = (config) => {
472
500
  }));
473
501
  });
474
502
  },
475
- fetchLiabilities(db, f, log = logger_1.consoleLogger) {
476
- var _a;
477
- return __awaiter(this, void 0, void 0, function* () {
503
+ fetchLiabilities(db_1, f_1) {
504
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
505
+ var _a;
478
506
  let offset = 0;
479
507
  let orderBy = (_a = f.orderBy) !== null && _a !== void 0 ? _a : 'epoch.ui,liability.id';
480
508
  if (f.cursor) {
@@ -541,8 +569,8 @@ const pgClient = (config) => {
541
569
  };
542
570
  });
543
571
  },
544
- getLiabilitiesAndTransfers(f, log = logger_1.consoleLogger) {
545
- return __awaiter(this, void 0, void 0, function* () {
572
+ getLiabilitiesAndTransfers(f_1) {
573
+ return __awaiter(this, arguments, void 0, function* (f, log = logger_1.consoleLogger) {
546
574
  let lq = db
547
575
  .selectFrom(exports.LIABILITY_TABLE)
548
576
  .selectAll()
@@ -603,9 +631,9 @@ const pgClient = (config) => {
603
631
  return { transfers, liabilities, epochs: Object.values(epochs) };
604
632
  });
605
633
  },
606
- getOutstanding(f, log = logger_1.consoleLogger) {
607
- var _a, _b, _c, _d, _e;
608
- return __awaiter(this, void 0, void 0, function* () {
634
+ getOutstanding(f_1) {
635
+ return __awaiter(this, arguments, void 0, function* (f, log = logger_1.consoleLogger) {
636
+ var _a, _b, _c, _d, _e;
609
637
  log.info(`getting outstanding balances for ${(_a = f.channels) !== null && _a !== void 0 ? _a : '(no channels specified)'} epoch: ${(_b = f.startEpochId.id) !== null && _b !== void 0 ? _b : '(no epoch specified)'}`);
610
638
  let epochUi;
611
639
  let epochEndTime;
@@ -714,9 +742,9 @@ const pgClient = (config) => {
714
742
  return out;
715
743
  });
716
744
  },
717
- fetchNodeOperatorEpoch(epochId, log = logger_1.consoleLogger) {
718
- var _a;
719
- return __awaiter(this, void 0, void 0, function* () {
745
+ fetchNodeOperatorEpoch(epochId_1) {
746
+ return __awaiter(this, arguments, void 0, function* (epochId, log = logger_1.consoleLogger) {
747
+ var _a;
720
748
  const q = db
721
749
  .selectFrom(exports.JOB_ID_TABLE)
722
750
  .innerJoin(exports.EPOCH_TABLE, 'epoch.id', 'job_id.epoch_id')
@@ -766,14 +794,14 @@ const pgClient = (config) => {
766
794
  };
767
795
  });
768
796
  },
769
- insertEpoch(db, epoch, log = logger_1.consoleLogger) {
770
- return __awaiter(this, void 0, void 0, function* () {
797
+ insertEpoch(db_1, epoch_1) {
798
+ return __awaiter(this, arguments, void 0, function* (db, epoch, log = logger_1.consoleLogger) {
771
799
  yield getOrInsertEpoch(db.trx, Object.assign(Object.assign({}, epoch), { uiEpochId: epoch.ui }), log);
772
800
  });
773
801
  },
774
- getEpoch(f, log = logger_1.consoleLogger) {
775
- var _a;
776
- return __awaiter(this, void 0, void 0, function* () {
802
+ getEpoch(f_1) {
803
+ return __awaiter(this, arguments, void 0, function* (f, log = logger_1.consoleLogger) {
804
+ var _a;
777
805
  const now = new Date(Date.now());
778
806
  try {
779
807
  let q = db
@@ -811,9 +839,9 @@ const pgClient = (config) => {
811
839
  }
812
840
  });
813
841
  },
814
- getLatestNodeOperatorEpoch(f, log = logger_1.consoleLogger) {
815
- var _a;
816
- return __awaiter(this, void 0, void 0, function* () {
842
+ getLatestNodeOperatorEpoch(f_1) {
843
+ return __awaiter(this, arguments, void 0, function* (f, log = logger_1.consoleLogger) {
844
+ var _a;
817
845
  const now = new Date(Date.now());
818
846
  try {
819
847
  let q = db
@@ -853,8 +881,8 @@ const pgClient = (config) => {
853
881
  }
854
882
  });
855
883
  },
856
- saveNodeOperatorEpoch(epochId, liabilities, jobIds, totalRndr, log = logger_1.consoleLogger) {
857
- return __awaiter(this, void 0, void 0, function* () {
884
+ saveNodeOperatorEpoch(epochId_1, liabilities_1, jobIds_1, totalRndr_1) {
885
+ return __awaiter(this, arguments, void 0, function* (epochId, liabilities, jobIds, totalRndr, log = logger_1.consoleLogger) {
858
886
  yield db
859
887
  .transaction()
860
888
  .setIsolationLevel('repeatable read')
@@ -890,8 +918,8 @@ const pgClient = (config) => {
890
918
  return;
891
919
  });
892
920
  },
893
- produceBurnedJobs(jobs, log = logger_1.consoleLogger) {
894
- return __awaiter(this, void 0, void 0, function* () {
921
+ produceBurnedJobs(jobs_1) {
922
+ return __awaiter(this, arguments, void 0, function* (jobs, log = logger_1.consoleLogger) {
895
923
  yield db.transaction().execute((trx) => __awaiter(this, void 0, void 0, function* () {
896
924
  var _a;
897
925
  let num = BigInt(0);
@@ -914,9 +942,9 @@ const pgClient = (config) => {
914
942
  }));
915
943
  });
916
944
  },
917
- markJobsBurntWithGrant(db, p, log = logger_1.consoleLogger) {
918
- var _a;
919
- return __awaiter(this, void 0, void 0, function* () {
945
+ markJobsBurntWithGrant(db_1, p_1) {
946
+ return __awaiter(this, arguments, void 0, function* (db, p, log = logger_1.consoleLogger) {
947
+ var _a;
920
948
  const solTxId = yield getOrInsertTx(db.trx, { sig: p.tx.sig, executedAt: p.tx.executedAt }, log);
921
949
  const { id } = yield db.trx
922
950
  .insertInto(exports.GRANT_BURN_TABLE)
@@ -947,9 +975,9 @@ const pgClient = (config) => {
947
975
  return;
948
976
  });
949
977
  },
950
- insertGrantSpend(db, p, log = logger_1.consoleLogger) {
951
- var _a, _b, _c;
952
- return __awaiter(this, void 0, void 0, function* () {
978
+ insertGrantSpend(db_1, p_1) {
979
+ return __awaiter(this, arguments, void 0, function* (db, p, log = logger_1.consoleLogger) {
980
+ var _a, _b, _c;
953
981
  const existing = yield getCurrentUserGrantSpend(db.trx, { userId: p.userId }, log);
954
982
  const diff = {
955
983
  render_spent: ((_a = existing === null || existing === void 0 ? void 0 : existing.renderSpent) !== null && _a !== void 0 ? _a : BigInt(0)) + p.renderSpentDelta,
@@ -1014,9 +1042,9 @@ const pgClient = (config) => {
1014
1042
  }
1015
1043
  });
1016
1044
  },
1017
- markJobsBurnt(trx, p, log = logger_1.consoleLogger) {
1018
- var _a, _b;
1019
- return __awaiter(this, void 0, void 0, function* () {
1045
+ markJobsBurnt(trx_1, p_1) {
1046
+ return __awaiter(this, arguments, void 0, function* (trx, p, log = logger_1.consoleLogger) {
1047
+ var _a, _b;
1020
1048
  if (!p.buyBurn && !p.grantBurn) {
1021
1049
  throw new Error('no buyBurn or grantBurn');
1022
1050
  }
@@ -1024,7 +1052,7 @@ const pgClient = (config) => {
1024
1052
  let buyBurnId;
1025
1053
  let grantBurnId;
1026
1054
  if (p.buyBurn) {
1027
- const { burned, usdcSpent, eurToUsdc, renderToUsdc, quoteAmt, tags, burnAdjustmentId, toBurn, } = p.buyBurn;
1055
+ const { burned, usdcSpent, eurToUsdc, renderToUsdc, quoteAmt, tags, jobBurnAdjustmentId, txBurnAdjustmentId, toBurn, fromEscrowCredit, } = p.buyBurn;
1028
1056
  let pricedAt = p.buyBurn.pricedAt;
1029
1057
  if (!pricedAt) {
1030
1058
  const jobs = yield fetchJobs1(trx.trx, { ids: p.jobs.map((j) => String(j.id)) }, log);
@@ -1043,17 +1071,30 @@ const pgClient = (config) => {
1043
1071
  quote_amt: quoteAmt,
1044
1072
  burned: burned,
1045
1073
  tags: tags.join(','),
1046
- burn_adjustment_id: burnAdjustmentId,
1074
+ job_burn_adjustment_id: jobBurnAdjustmentId,
1075
+ tx_burn_adjustment_id: txBurnAdjustmentId,
1047
1076
  to_burn: toBurn,
1077
+ from_escrow_credit: fromEscrowCredit !== null && fromEscrowCredit !== void 0 ? fromEscrowCredit : 0,
1048
1078
  };
1049
1079
  log.debug(`inserting burn ${JSON.stringify(v)}`);
1050
- const { id } = yield trx.trx
1080
+ // Idempotent on sol_tx_id (uniq_burn_sol_tx_id, migration 27): a retry of
1081
+ // the record step for the same on-chain burn is a safe no-op. On conflict
1082
+ // executeTakeFirst() returns undefined, so re-fetch the existing id.
1083
+ let burnRow = yield trx.trx
1051
1084
  .insertInto(exports.BURN_TABLE)
1052
1085
  .values(v)
1053
- //.onConflict((oc) => oc.column('sol_tx').doNothing())
1086
+ .onConflict((oc) => oc.column('sol_tx_id').doNothing())
1054
1087
  .returning((eb) => ['id as id'])
1055
- .executeTakeFirstOrThrow();
1056
- buyBurnId = Number(id);
1088
+ .executeTakeFirst();
1089
+ if (!burnRow) {
1090
+ log.warn(`burn for sol_tx_id ${solTxId} already exists; reusing existing id (idempotent retry)`);
1091
+ burnRow = yield trx.trx
1092
+ .selectFrom(exports.BURN_TABLE)
1093
+ .select((eb) => ['id as id'])
1094
+ .where('sol_tx_id', '=', solTxId)
1095
+ .executeTakeFirstOrThrow();
1096
+ }
1097
+ buyBurnId = Number(burnRow.id);
1057
1098
  }
1058
1099
  if (p.grantBurn) {
1059
1100
  const { burned, tags } = p.grantBurn;
@@ -1063,12 +1104,22 @@ const pgClient = (config) => {
1063
1104
  tags: tags === null || tags === void 0 ? void 0 : tags.join(','),
1064
1105
  };
1065
1106
  log.debug(`inserting grant burn ${JSON.stringify(v)}`);
1066
- const { id } = yield trx.trx
1107
+ // Idempotent on sol_tx_id (uniq_grant_burn_sol_tx_id, migration 27).
1108
+ let grantBurnRow = yield trx.trx
1067
1109
  .insertInto(exports.GRANT_BURN_TABLE)
1068
1110
  .values(v)
1111
+ .onConflict((oc) => oc.column('sol_tx_id').doNothing())
1069
1112
  .returning((eb) => ['id as id'])
1070
- .executeTakeFirstOrThrow();
1071
- grantBurnId = Number(id);
1113
+ .executeTakeFirst();
1114
+ if (!grantBurnRow) {
1115
+ log.warn(`grant_burn for sol_tx_id ${solTxId} already exists; reusing existing id (idempotent retry)`);
1116
+ grantBurnRow = yield trx.trx
1117
+ .selectFrom(exports.GRANT_BURN_TABLE)
1118
+ .select((eb) => ['id as id'])
1119
+ .where('sol_tx_id', '=', solTxId)
1120
+ .executeTakeFirstOrThrow();
1121
+ }
1122
+ grantBurnId = Number(grantBurnRow.id);
1072
1123
  }
1073
1124
  const burnId = buyBurnId;
1074
1125
  const grantId = grantBurnId !== null && grantBurnId !== void 0 ? grantBurnId : buyBurnId;
@@ -1094,8 +1145,8 @@ const pgClient = (config) => {
1094
1145
  return { grantBurnId, buyBurnId };
1095
1146
  });
1096
1147
  },
1097
- markJobsBurned(trx, p, log = logger_1.consoleLogger) {
1098
- return __awaiter(this, void 0, void 0, function* () {
1148
+ markJobsBurned(trx_1, p_1) {
1149
+ return __awaiter(this, arguments, void 0, function* (trx, p, log = logger_1.consoleLogger) {
1099
1150
  let { markedAt, solTx } = p;
1100
1151
  let res = yield trx.trx
1101
1152
  .updateTable(exports.BURN_TABLE)
@@ -1119,8 +1170,8 @@ const pgClient = (config) => {
1119
1170
  }
1120
1171
  });
1121
1172
  },
1122
- consumeAndLockBurnJobs(limit, lowerRndrThreshold, upperRndrThreshold, log = logger_1.consoleLogger) {
1123
- return __awaiter(this, void 0, void 0, function* () {
1173
+ consumeAndLockBurnJobs(limit_1, lowerRndrThreshold_1, upperRndrThreshold_1) {
1174
+ return __awaiter(this, arguments, void 0, function* (limit, lowerRndrThreshold, upperRndrThreshold, log = logger_1.consoleLogger) {
1124
1175
  const trx = yield (0, base_2.begin)(db, log);
1125
1176
  const q = trx.trx
1126
1177
  .selectFrom(trx.trx
@@ -1227,9 +1278,9 @@ const pgClient = (config) => {
1227
1278
  };
1228
1279
  });
1229
1280
  },
1230
- incrBuyBurnMetrics(log = logger_1.consoleLogger) {
1231
- var _a;
1232
- return __awaiter(this, void 0, void 0, function* () {
1281
+ incrBuyBurnMetrics() {
1282
+ return __awaiter(this, arguments, void 0, function* (log = logger_1.consoleLogger) {
1283
+ var _a;
1233
1284
  const res = yield db
1234
1285
  .selectFrom(exports.JOB_TABLE)
1235
1286
  .select('inserted_at')
@@ -1246,9 +1297,9 @@ const pgClient = (config) => {
1246
1297
  };
1247
1298
  });
1248
1299
  },
1249
- fetchBurns(db, f, log = logger_1.consoleLogger) {
1250
- var _a, _b;
1251
- return __awaiter(this, void 0, void 0, function* () {
1300
+ fetchBurns(db_1, f_1) {
1301
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1302
+ var _a, _b;
1252
1303
  let q = db.trx
1253
1304
  .selectFrom('burn')
1254
1305
  .selectAll('burn')
@@ -1317,9 +1368,9 @@ const pgClient = (config) => {
1317
1368
  return burns;
1318
1369
  });
1319
1370
  },
1320
- fetchBurnsAndGrants(db, f, log = logger_1.consoleLogger) {
1321
- var _a, _b;
1322
- return __awaiter(this, void 0, void 0, function* () {
1371
+ fetchBurnsAndGrants(db_1, f_1) {
1372
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1373
+ var _a, _b;
1323
1374
  // Build a unified query to get all transactions with both buy burns and grant burns
1324
1375
  let baseQuery = db.trx
1325
1376
  .selectFrom('sol_tx')
@@ -1457,13 +1508,13 @@ const pgClient = (config) => {
1457
1508
  return groupedBurns;
1458
1509
  });
1459
1510
  },
1460
- createBridgeTransfers(db, bts, log = logger_1.consoleLogger) {
1461
- return __awaiter(this, void 0, void 0, function* () {
1511
+ createBridgeTransfers(db_1, bts_1) {
1512
+ return __awaiter(this, arguments, void 0, function* (db, bts, log = logger_1.consoleLogger) {
1462
1513
  return createBridgeTransfers(db.trx, bts, log);
1463
1514
  });
1464
1515
  },
1465
- getBridgeTransfers({ solKey, page, }, log = logger_1.consoleLogger) {
1466
- return __awaiter(this, void 0, void 0, function* () {
1516
+ getBridgeTransfers(_a) {
1517
+ return __awaiter(this, arguments, void 0, function* ({ solKey, page, }, log = logger_1.consoleLogger) {
1467
1518
  let q = db
1468
1519
  .selectFrom(exports.BRIDGE_TRANSFER_TABLE)
1469
1520
  .innerJoin(exports.EPOCH_TABLE, 'epoch.id', 'bridge_transfer.epoch_id')
@@ -1540,8 +1591,8 @@ const pgClient = (config) => {
1540
1591
  });
1541
1592
  },
1542
1593
  getTotalBurned(db) {
1543
- var _a, _b;
1544
1594
  return __awaiter(this, void 0, void 0, function* () {
1595
+ var _a, _b;
1545
1596
  const total = yield db.trx
1546
1597
  .selectFrom('burn')
1547
1598
  .select(({ fn }) => fn.sum('burned').as('total_burned'))
@@ -1549,8 +1600,8 @@ const pgClient = (config) => {
1549
1600
  return BigInt((_b = (_a = total[0]) === null || _a === void 0 ? void 0 : _a.total_burned) !== null && _b !== void 0 ? _b : 0);
1550
1601
  });
1551
1602
  },
1552
- insertBurn(p, log = logger_1.consoleLogger) {
1553
- return __awaiter(this, void 0, void 0, function* () {
1603
+ insertBurn(p_1) {
1604
+ return __awaiter(this, arguments, void 0, function* (p, log = logger_1.consoleLogger) {
1554
1605
  yield db.transaction().execute((trx) => __awaiter(this, void 0, void 0, function* () {
1555
1606
  var _a;
1556
1607
  const solTxId = yield getOrInsertTx(trx, { sig: p.solTx, executedAt: p.executedAt }, log);
@@ -1587,63 +1638,18 @@ const pgClient = (config) => {
1587
1638
  }));
1588
1639
  });
1589
1640
  },
1590
- insertDispersedOutbox(p, log = logger_1.consoleLogger) {
1591
- return __awaiter(this, void 0, void 0, function* () {
1592
- const res = yield db
1593
- .insertInto(exports.DISPERSED_SETTLEMENT_TABLE)
1594
- .values({
1595
- tx_signature: p.txSignature,
1596
- claim_uuid: p.claimUuid,
1597
- obligation_uuids: p.obligationUuids,
1598
- settled_amount: p.settledAmount,
1599
- burned_amount: p.burnedAmount,
1600
- executed_at: p.executedAt,
1601
- })
1602
- .onConflict((oc) => oc.column('tx_signature').doNothing())
1603
- .executeTakeFirst();
1604
- log.debug(`dispersed outbox tx ${p.txSignature}: ${res.numInsertedOrUpdatedRows} row(s)`);
1605
- });
1606
- },
1607
- markDispersedSettled(txSignature, p, log = logger_1.consoleLogger) {
1608
- return __awaiter(this, void 0, void 0, function* () {
1609
- yield db
1610
- .updateTable(exports.DISPERSED_SETTLEMENT_TABLE)
1611
- .set({ settled_at: new Date(), idempotent_replay: p.idempotentReplay })
1612
- .where('tx_signature', '=', txSignature)
1613
- .execute();
1614
- log.debug(`dispersed settled tx ${txSignature}`);
1615
- });
1616
- },
1617
- getUnsettledDispersed(log = logger_1.consoleLogger) {
1618
- return __awaiter(this, void 0, void 0, function* () {
1619
- const rows = yield db
1620
- .selectFrom(exports.DISPERSED_SETTLEMENT_TABLE)
1621
- .selectAll()
1622
- .where('settled_at', 'is', null)
1623
- .execute();
1624
- log.debug(`dispersed outbox: ${rows.length} unsettled`);
1625
- return rows.map((r) => ({
1626
- txSignature: r.tx_signature,
1627
- claimUuid: r.claim_uuid,
1628
- obligationUuids: r.obligation_uuids,
1629
- settledAmount: r.settled_amount,
1630
- burnedAmount: r.burned_amount,
1631
- executedAt: r.executed_at,
1632
- }));
1633
- });
1634
- },
1635
- fetchJobs(db, f, log = logger_1.consoleLogger) {
1636
- return __awaiter(this, void 0, void 0, function* () {
1641
+ fetchJobs(db_1, f_1) {
1642
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1637
1643
  return yield fetchJobs1(db.trx, f, log);
1638
1644
  });
1639
1645
  },
1640
- fetchJobsWithGrantValues(db, f, log = logger_1.consoleLogger) {
1641
- return __awaiter(this, void 0, void 0, function* () {
1646
+ fetchJobsWithGrantValues(db_1, f_1) {
1647
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1642
1648
  return yield fetchJobs2(db.trx, f, log);
1643
1649
  });
1644
1650
  },
1645
- fetchLiabilityEpochs(db, log = logger_1.consoleLogger) {
1646
- return __awaiter(this, void 0, void 0, function* () {
1651
+ fetchLiabilityEpochs(db_1) {
1652
+ return __awaiter(this, arguments, void 0, function* (db, log = logger_1.consoleLogger) {
1647
1653
  const q = db.trx
1648
1654
  .selectFrom(exports.LIABILITY_TABLE)
1649
1655
  .select(({ fn }) => [
@@ -1701,50 +1707,94 @@ const pgClient = (config) => {
1701
1707
  }));
1702
1708
  });
1703
1709
  },
1704
- getBurnAdjustments(trx, ps, log = logger_1.consoleLogger) {
1705
- return __awaiter(this, void 0, void 0, function* () {
1706
- if (ps.toFill) {
1707
- const q = trx.trx
1708
- .selectFrom(exports.BURN_ADJUSTMENT_TABLE)
1709
- .selectAll(exports.BURN_ADJUSTMENT_TABLE)
1710
- .innerJoin(exports.JOB_TABLE, `${exports.JOB_TABLE}.id`, `${exports.BURN_ADJUSTMENT_TABLE}.job_id`)
1711
- .select([`${exports.JOB_TABLE}.completed_at`, `${exports.JOB_TABLE}.render_amt`])
1712
- .leftJoin(exports.BURN_TABLE, `${exports.BURN_TABLE}.burn_adjustment_id`, `${exports.BURN_ADJUSTMENT_TABLE}.id`)
1713
- .select(({ fn, lit }) => [
1714
- fn
1715
- .sum(fn.coalesce(`${exports.BURN_TABLE}.to_burn`, lit(0)))
1716
- .as('tot_to_burn'),
1717
- fn
1718
- .sum(fn.coalesce(`${exports.BURN_TABLE}.burned`, lit(0)))
1719
- .as('tot_burned'),
1720
- ])
1721
- .groupBy([
1722
- `${exports.BURN_ADJUSTMENT_TABLE}.id`,
1723
- `${exports.JOB_TABLE}.completed_at`,
1724
- `${exports.JOB_TABLE}.render_amt`,
1725
- ])
1726
- .havingRef((0, kysely_1.sql) `SUM(COALESCE("burn"."to_burn", 0)) - SUM(COALESCE("burn"."burned", 0))`, '<', `${exports.BURN_ADJUSTMENT_TABLE}.down_adj_to_burn`);
1727
- log.info(`getBurnAdjustments ${q.compile().sql}`);
1728
- const res = yield q.execute();
1729
- return res.map((r) => ({
1730
- id: Number(r.id),
1731
- createdAt: r.created_at,
1732
- jobId: Number(r.job_id),
1733
- downAdjRndrUsed: Number(r.down_adj_rndr_used),
1734
- downAdjToBurn: Number(r.down_adj_to_burn),
1735
- adjusted: Number(r.tot_to_burn) - Number(r.tot_burned),
1736
- job: {
1737
- id: Number(r.job_id),
1738
- completedAt: r.completed_at,
1739
- rndrUsed: BigInt(r.render_amt),
1740
- },
1741
- }));
1710
+ createTxBurnAdjustment(trx_1, p_1) {
1711
+ return __awaiter(this, arguments, void 0, function* (trx, p, log = logger_1.consoleLogger) {
1712
+ // Idempotent per sol_tx_id (unique) — a re-run for the same bad tx is a no-op.
1713
+ const row = yield trx.trx
1714
+ .insertInto(exports.TX_BURN_ADJUSTMENT_TABLE)
1715
+ .values({
1716
+ sol_tx_id: p.solTxId,
1717
+ surplus_render: p.surplusRender,
1718
+ description: p.description,
1719
+ })
1720
+ .onConflict((oc) => oc.column('sol_tx_id').doNothing())
1721
+ .returning('id')
1722
+ .executeTakeFirst();
1723
+ if (!row) {
1724
+ log.info(`tx_burn_adjustment for sol_tx ${p.solTxId} already exists — skipped`);
1725
+ return undefined;
1742
1726
  }
1743
- return [];
1727
+ log.info(`created tx_burn_adjustment ${row.id}: ${p.surplusRender} RENDER surplus (sol_tx ${p.solTxId})`);
1728
+ return Number(row.id);
1744
1729
  });
1745
1730
  },
1746
- insertPolygonUpgrade(db, p, log = logger_1.consoleLogger) {
1747
- return __awaiter(this, void 0, void 0, function* () {
1731
+ getJobBurnAdjustments(trx_1, ps_1) {
1732
+ return __awaiter(this, arguments, void 0, function* (trx, ps, log = logger_1.consoleLogger) {
1733
+ if (!ps.toFill)
1734
+ return [];
1735
+ const q = trx.trx
1736
+ .selectFrom(exports.JOB_BURN_ADJUSTMENT_TABLE)
1737
+ .selectAll(exports.JOB_BURN_ADJUSTMENT_TABLE)
1738
+ .innerJoin(exports.JOB_TABLE, `${exports.JOB_TABLE}.id`, `${exports.JOB_BURN_ADJUSTMENT_TABLE}.job_id`)
1739
+ .select([`${exports.JOB_TABLE}.completed_at`, `${exports.JOB_TABLE}.render_amt`])
1740
+ .leftJoin(exports.BURN_TABLE, `${exports.BURN_TABLE}.job_burn_adjustment_id`, `${exports.JOB_BURN_ADJUSTMENT_TABLE}.id`)
1741
+ .select(({ fn, lit }) => [
1742
+ fn.sum(fn.coalesce(`${exports.BURN_TABLE}.to_burn`, lit(0))).as('tot_to_burn'),
1743
+ fn.sum(fn.coalesce(`${exports.BURN_TABLE}.burned`, lit(0))).as('tot_burned'),
1744
+ ])
1745
+ .groupBy([
1746
+ `${exports.JOB_BURN_ADJUSTMENT_TABLE}.id`,
1747
+ `${exports.JOB_TABLE}.completed_at`,
1748
+ `${exports.JOB_TABLE}.render_amt`,
1749
+ ]);
1750
+ log.info(`getJobBurnAdjustments ${q.compile().sql}`);
1751
+ const res = yield q.execute();
1752
+ return res
1753
+ .map((r) => ({
1754
+ id: Number(r.id),
1755
+ createdAt: r.created_at,
1756
+ jobId: Number(r.job_id),
1757
+ downAdjRndrUsed: Number(r.down_adj_rndr_used),
1758
+ downAdjToBurn: Number(r.down_adj_to_burn),
1759
+ adjusted: Number(r.tot_to_burn) - Number(r.tot_burned),
1760
+ job: {
1761
+ id: Number(r.job_id),
1762
+ completedAt: r.completed_at,
1763
+ rndrUsed: BigInt(r.render_amt),
1764
+ },
1765
+ }))
1766
+ .filter((a) => a.adjusted < a.downAdjToBurn);
1767
+ });
1768
+ },
1769
+ getTxBurnAdjustments(trx_1, ps_1) {
1770
+ return __awaiter(this, arguments, void 0, function* (trx, ps, log = logger_1.consoleLogger) {
1771
+ if (!ps.toFill)
1772
+ return [];
1773
+ const q = trx.trx
1774
+ .selectFrom(exports.TX_BURN_ADJUSTMENT_TABLE)
1775
+ .selectAll(exports.TX_BURN_ADJUSTMENT_TABLE)
1776
+ .leftJoin(exports.BURN_TABLE, `${exports.BURN_TABLE}.tx_burn_adjustment_id`, `${exports.TX_BURN_ADJUSTMENT_TABLE}.id`)
1777
+ .select(({ fn, lit }) => [
1778
+ fn
1779
+ .sum(fn.coalesce(`${exports.BURN_TABLE}.from_escrow_credit`, lit(0)))
1780
+ .as('tot_from_escrow'),
1781
+ ])
1782
+ .groupBy(`${exports.TX_BURN_ADJUSTMENT_TABLE}.id`);
1783
+ log.info(`getTxBurnAdjustments ${q.compile().sql}`);
1784
+ const res = yield q.execute();
1785
+ return res
1786
+ .map((r) => ({
1787
+ id: Number(r.id),
1788
+ createdAt: r.created_at,
1789
+ solTxId: Number(r.sol_tx_id),
1790
+ surplusRender: Number(r.surplus_render),
1791
+ consumed: Number(r.tot_from_escrow),
1792
+ }))
1793
+ .filter((a) => a.consumed < a.surplusRender);
1794
+ });
1795
+ },
1796
+ insertPolygonUpgrade(db_1, p_1) {
1797
+ return __awaiter(this, arguments, void 0, function* (db, p, log = logger_1.consoleLogger) {
1748
1798
  const solTxId = yield getOrInsertTx(db.trx, {
1749
1799
  sig: p.solTx.sig,
1750
1800
  executedAt: p.solTx.executedAt,
@@ -1762,8 +1812,8 @@ const pgClient = (config) => {
1762
1812
  return;
1763
1813
  });
1764
1814
  },
1765
- fetchPolygonUpgrades(db, f, log = logger_1.consoleLogger) {
1766
- return __awaiter(this, void 0, void 0, function* () {
1815
+ fetchPolygonUpgrades(db_1, f_1) {
1816
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1767
1817
  let query = db.trx
1768
1818
  .selectFrom('polygon_upgrade')
1769
1819
  .selectAll('polygon_upgrade')
@@ -1789,13 +1839,13 @@ const pgClient = (config) => {
1789
1839
  }));
1790
1840
  });
1791
1841
  },
1792
- getCurrentUserGrantSpend(db, f, log = logger_1.consoleLogger) {
1793
- return __awaiter(this, void 0, void 0, function* () {
1842
+ getCurrentUserGrantSpend(db_1, f_1) {
1843
+ return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1794
1844
  return yield getCurrentUserGrantSpend(db.trx, f, log);
1795
1845
  });
1796
1846
  },
1797
- deleteAll(log = logger_1.consoleLogger) {
1798
- return __awaiter(this, void 0, void 0, function* () {
1847
+ deleteAll() {
1848
+ return __awaiter(this, arguments, void 0, function* (log = logger_1.consoleLogger) {
1799
1849
  if (config.database.includes('render')) {
1800
1850
  throw new Error('cannot nuke from deployed database. call from tests only');
1801
1851
  }
@@ -1841,8 +1891,8 @@ const pgClient = (config) => {
1841
1891
  }
1842
1892
  });
1843
1893
  },
1844
- checkPaymentsForDate(targetDate, channel = 'both', log = logger_1.consoleLogger) {
1845
- return __awaiter(this, void 0, void 0, function* () {
1894
+ checkPaymentsForDate(targetDate_1) {
1895
+ return __awaiter(this, arguments, void 0, function* (targetDate, channel = 'both', log = logger_1.consoleLogger) {
1846
1896
  const startOfDay = new Date(targetDate);
1847
1897
  startOfDay.setHours(0, 0, 0, 0);
1848
1898
  const endOfDay = new Date(targetDate);
@@ -1893,8 +1943,8 @@ const pgClient = (config) => {
1893
1943
  }
1894
1944
  });
1895
1945
  },
1896
- checkEpochProcessed(epochId, channel, log = logger_1.consoleLogger) {
1897
- return __awaiter(this, void 0, void 0, function* () {
1946
+ checkEpochProcessed(epochId_1, channel_1) {
1947
+ return __awaiter(this, arguments, void 0, function* (epochId, channel, log = logger_1.consoleLogger) {
1898
1948
  try {
1899
1949
  const result = yield db
1900
1950
  .selectFrom('epoch')
@@ -1914,8 +1964,8 @@ const pgClient = (config) => {
1914
1964
  }
1915
1965
  });
1916
1966
  },
1917
- checkRecentPaymentActivity(lookbackHours = 2, channel = 'both', log = logger_1.consoleLogger) {
1918
- return __awaiter(this, void 0, void 0, function* () {
1967
+ checkRecentPaymentActivity() {
1968
+ return __awaiter(this, arguments, void 0, function* (lookbackHours = 2, channel = 'both', log = logger_1.consoleLogger) {
1919
1969
  const lookbackTime = new Date(Date.now() - lookbackHours * 60 * 60 * 1000);
1920
1970
  const now = new Date();
1921
1971
  try {