@render-foundation/utils 0.0.198 → 0.0.200

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 (83) hide show
  1. package/lib/cjs/assertSecrets.js +2 -1
  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/client/dispersed.js +123 -0
  6. package/lib/cjs/client/dispersed.js.map +1 -0
  7. package/lib/cjs/client/onchain.js +3 -3
  8. package/lib/cjs/client/onchain.js.map +1 -1
  9. package/lib/cjs/client/pg/base.js +7 -7
  10. package/lib/cjs/client/pg/base.js.map +1 -1
  11. package/lib/cjs/client/pg/v1.js +31 -31
  12. package/lib/cjs/client/pg/v1.js.map +1 -1
  13. package/lib/cjs/client/pg/v2Client.js +160 -157
  14. package/lib/cjs/client/pg/v2Client.js.map +1 -1
  15. package/lib/cjs/client/pg/viewClient.js +6 -6
  16. package/lib/cjs/client/pg/viewClient.js.map +1 -1
  17. package/lib/cjs/client/price.js +3 -3
  18. package/lib/cjs/client/price.js.map +1 -1
  19. package/lib/cjs/client/render.js +10 -10
  20. package/lib/cjs/client/render.js.map +1 -1
  21. package/lib/cjs/client/squads.js +10 -20
  22. package/lib/cjs/client/squads.js.map +1 -1
  23. package/lib/cjs/client/trade.js +12 -15
  24. package/lib/cjs/client/trade.js.map +1 -1
  25. package/lib/cjs/client/wormhole.js +9 -19
  26. package/lib/cjs/client/wormhole.js.map +1 -1
  27. package/lib/cjs/errorReporter.js +1 -1
  28. package/lib/cjs/errorReporter.js.map +1 -1
  29. package/lib/cjs/index.js +12 -19
  30. package/lib/cjs/index.js.map +1 -1
  31. package/lib/esm/src/assertSecrets.js.map +1 -1
  32. package/lib/esm/src/backfiller.js.map +1 -1
  33. package/lib/esm/src/client/dispersed.js +108 -0
  34. package/lib/esm/src/client/dispersed.js.map +1 -0
  35. package/lib/esm/src/client/onchain.js.map +1 -1
  36. package/lib/esm/src/client/pg/base.js.map +1 -1
  37. package/lib/esm/src/client/pg/v1.js.map +1 -1
  38. package/lib/esm/src/client/pg/v2Client.js +52 -49
  39. package/lib/esm/src/client/pg/v2Client.js.map +1 -1
  40. package/lib/esm/src/client/pg/viewClient.js.map +1 -1
  41. package/lib/esm/src/client/price.js.map +1 -1
  42. package/lib/esm/src/client/render.js.map +1 -1
  43. package/lib/esm/src/client/squads.js.map +1 -1
  44. package/lib/esm/src/client/trade.js +2 -2
  45. package/lib/esm/src/client/trade.js.map +1 -1
  46. package/lib/esm/src/client/wormhole.js.map +1 -1
  47. package/lib/esm/src/errorReporter.js.map +1 -1
  48. package/lib/esm/src/index.js +5 -2
  49. package/lib/esm/src/index.js.map +1 -1
  50. package/lib/esm/tsconfig.esm.tsbuildinfo +1 -1
  51. package/lib/types/src/backfiller.d.ts.map +1 -1
  52. package/lib/types/src/client/dispersed.d.ts +91 -0
  53. package/lib/types/src/client/dispersed.d.ts.map +1 -0
  54. package/lib/types/src/client/onchain.d.ts +1 -2
  55. package/lib/types/src/client/onchain.d.ts.map +1 -1
  56. package/lib/types/src/client/pg/base.d.ts.map +1 -1
  57. package/lib/types/src/client/pg/v1.d.ts.map +1 -1
  58. package/lib/types/src/client/pg/v2Client.d.ts +22 -0
  59. package/lib/types/src/client/pg/v2Client.d.ts.map +1 -1
  60. package/lib/types/src/client/pg/viewClient.d.ts.map +1 -1
  61. package/lib/types/src/client/render.d.ts.map +1 -1
  62. package/lib/types/src/client/squads.d.ts.map +1 -1
  63. package/lib/types/src/client/trade.d.ts.map +1 -1
  64. package/lib/types/src/client/wormhole.d.ts +1 -1
  65. package/lib/types/src/client/wormhole.d.ts.map +1 -1
  66. package/lib/types/src/dbTypesV2.d.ts +13 -0
  67. package/lib/types/src/dbTypesV2.d.ts.map +1 -1
  68. package/lib/types/src/errorReporter.d.ts.map +1 -1
  69. package/lib/types/src/index.d.ts +2 -2
  70. package/lib/types/src/index.d.ts.map +1 -1
  71. package/package.json +1 -1
  72. package/lib/cjs/burn/burnAnalysis.js +0 -101
  73. package/lib/cjs/burn/burnAnalysis.js.map +0 -1
  74. package/lib/cjs/burn/burnCalculations.js +0 -140
  75. package/lib/cjs/burn/burnCalculations.js.map +0 -1
  76. package/lib/esm/src/burn/burnAnalysis.js +0 -90
  77. package/lib/esm/src/burn/burnAnalysis.js.map +0 -1
  78. package/lib/esm/src/burn/burnCalculations.js +0 -124
  79. package/lib/esm/src/burn/burnCalculations.js.map +0 -1
  80. package/lib/types/src/burn/burnAnalysis.d.ts +0 -51
  81. package/lib/types/src/burn/burnAnalysis.d.ts.map +0 -1
  82. package/lib/types/src/burn/burnCalculations.d.ts +0 -52
  83. package/lib/types/src/burn/burnCalculations.d.ts.map +0 -1
@@ -15,23 +15,13 @@ 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 () {
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
- })();
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
+ };
35
25
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
26
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
27
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -45,7 +35,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
45
35
  return (mod && mod.__esModule) ? mod : { "default": mod };
46
36
  };
47
37
  Object.defineProperty(exports, "__esModule", { value: true });
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.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;
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;
49
39
  const kysely_1 = require("kysely");
50
40
  const logger_1 = require("../../logger");
51
41
  const pg_1 = require("pg");
@@ -69,6 +59,7 @@ exports.CURRENT_USER_GRANT_SPEND_TABLE = 'current_user_grant_spend';
69
59
  exports.USER_GRANT_SPEND_TABLE = 'user_grant_spend';
70
60
  exports.GRANT_BURN_ID_TABLE = 'grant_burn_id';
71
61
  exports.GRANT_BURN_TABLE = 'grant_burn';
62
+ exports.DISPERSED_SETTLEMENT_TABLE = 'dispersed_settlement';
72
63
  BigInt.prototype.toJSON = function () {
73
64
  return this.toString();
74
65
  };
@@ -102,7 +93,7 @@ const pgClient = (config) => {
102
93
  const db = new kysely_1.Kysely({
103
94
  dialect,
104
95
  });
105
- 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) {
96
+ const getOrInsertEntity = (db, p, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
106
97
  const res = (yield db
107
98
  .selectFrom(exports.ENTITY_TABLE)
108
99
  .select('id')
@@ -123,7 +114,7 @@ const pgClient = (config) => {
123
114
  log.debug(`inserted entity ${id}`);
124
115
  return id;
125
116
  });
126
- 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) {
117
+ const getOrInsertTx = (db, p, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
127
118
  const res = yield db
128
119
  .selectFrom(exports.SOL_TX_TABLE)
129
120
  .select('id')
@@ -145,7 +136,7 @@ const pgClient = (config) => {
145
136
  log.debug(`inserted tx ${id}`);
146
137
  return id;
147
138
  });
148
- 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) {
139
+ const getOrInsertEpoch = (db, p, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
149
140
  const res = yield db
150
141
  .selectFrom(exports.EPOCH_TABLE)
151
142
  .select('id')
@@ -173,7 +164,7 @@ const pgClient = (config) => {
173
164
  log.debug(`inserted epoch ${id}`);
174
165
  return id;
175
166
  });
176
- 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) {
167
+ const getCurrentUserGrantSpend = (db, p, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
177
168
  var _a;
178
169
  const res = yield db
179
170
  .selectFrom(exports.CURRENT_USER_GRANT_SPEND_TABLE)
@@ -203,7 +194,7 @@ const pgClient = (config) => {
203
194
  .executeTakeFirst());
204
195
  log.info(`set ${res.numUpdatedRows} rows. channel: ${p.channel}, ui: ${p.uiEpochId} -> totalRndr ${totalRndr} `);
205
196
  });
206
- 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) {
197
+ const fetchJobs1 = (db, f, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
207
198
  let q = db.selectFrom('job').selectAll();
208
199
  //.where('job.burn_id', 'is not', null)
209
200
  if (f.completedAtAfter) {
@@ -233,7 +224,7 @@ const pgClient = (config) => {
233
224
  insertedAt: r.inserted_at,
234
225
  }));
235
226
  });
236
- 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) {
227
+ const fetchJobs2 = (db, f, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
237
228
  let q = db.selectFrom('job').selectAll();
238
229
  //.where('job.burn_id', 'is not', null)
239
230
  if (f.completedAtAfter) {
@@ -267,7 +258,7 @@ const pgClient = (config) => {
267
258
  });
268
259
  });
269
260
  });
270
- 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) {
261
+ const createBridgeTransfers = (db, bts, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
271
262
  const sequenceNumbers = [];
272
263
  const dbEpochIds = [];
273
264
  for (const bt of bts) {
@@ -311,7 +302,7 @@ const pgClient = (config) => {
311
302
  }
312
303
  return { sequenceNumbers: sequenceNumbers };
313
304
  });
314
- 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) {
305
+ const createPayments = (db, ps, log = logger_1.consoleLogger) => __awaiter(void 0, void 0, void 0, function* () {
315
306
  const ids = [];
316
307
  const epochDbIds = [];
317
308
  for (const p of ps) {
@@ -365,11 +356,7 @@ const pgClient = (config) => {
365
356
  sig: solTx,
366
357
  executedAt,
367
358
  }, log);
368
- // sol_transfer1 already has UNIQUE(sol_tx_id, from_entity_id,
369
- // to_entity_id, symbol). Without ON CONFLICT a retry of the record step
370
- // throws a unique violation and wedges the BullMQ job; make it an
371
- // idempotent no-op and re-fetch the existing id instead.
372
- let transferRow = yield db
359
+ const { id } = yield db
373
360
  .insertInto(exports.SOL_TRANSFER_TABLE)
374
361
  .values({
375
362
  id: dbId,
@@ -380,23 +367,9 @@ const pgClient = (config) => {
380
367
  symbol,
381
368
  amount_payed: amountPayed,
382
369
  })
383
- .onConflict((oc) => oc
384
- .columns(['sol_tx_id', 'from_entity_id', 'to_entity_id', 'symbol'])
385
- .doNothing())
386
370
  .returning((eb) => ['id as id'])
387
- .executeTakeFirst();
388
- if (!transferRow) {
389
- log.warn(`sol_transfer for sol_tx_id ${solTxId} ${fromEntityId}->${toEntityId} ${symbol} already exists; reusing existing id (idempotent retry)`);
390
- transferRow = yield db
391
- .selectFrom(exports.SOL_TRANSFER_TABLE)
392
- .select((eb) => ['id as id'])
393
- .where('sol_tx_id', '=', solTxId)
394
- .where('from_entity_id', '=', fromEntityId)
395
- .where('to_entity_id', '=', toEntityId)
396
- .where('symbol', '=', symbol)
397
- .executeTakeFirstOrThrow();
398
- }
399
- transferId = BigInt(transferRow.id);
371
+ .executeTakeFirstOrThrow();
372
+ transferId = BigInt(id);
400
373
  }
401
374
  ids.push({ transferId, liabilityId });
402
375
  }
@@ -408,18 +381,18 @@ const pgClient = (config) => {
408
381
  rollback: () => { },
409
382
  trx: db,
410
383
  },
411
- startTransaction() {
412
- return __awaiter(this, arguments, void 0, function* (log = logger_1.consoleLogger) {
384
+ startTransaction(log = logger_1.consoleLogger) {
385
+ return __awaiter(this, void 0, void 0, function* () {
413
386
  return (0, base_2.begin)(db, log);
414
387
  });
415
388
  },
416
- createPayments(db_1, ps_1) {
417
- return __awaiter(this, arguments, void 0, function* (db, ps, log = logger_1.consoleLogger) {
389
+ createPayments(db, ps, log = logger_1.consoleLogger) {
390
+ return __awaiter(this, void 0, void 0, function* () {
418
391
  return createPayments(db.trx, ps, log);
419
392
  });
420
393
  },
421
- fetchTransfers(db_1, f_1) {
422
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
394
+ fetchTransfers(db, f, log = logger_1.consoleLogger) {
395
+ return __awaiter(this, void 0, void 0, function* () {
423
396
  let lastId = undefined;
424
397
  if (f.cursor) {
425
398
  lastId = atob(f.cursor);
@@ -475,8 +448,8 @@ const pgClient = (config) => {
475
448
  };
476
449
  });
477
450
  },
478
- fetchEpochs(db_1, f_1) {
479
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
451
+ fetchEpochs(db, f, log = logger_1.consoleLogger) {
452
+ return __awaiter(this, void 0, void 0, function* () {
480
453
  let q = db.trx.selectFrom(exports.EPOCH_TABLE).selectAll();
481
454
  if (f.channels) {
482
455
  q = q.where('channel', 'in', f.channels);
@@ -499,9 +472,9 @@ const pgClient = (config) => {
499
472
  }));
500
473
  });
501
474
  },
502
- fetchLiabilities(db_1, f_1) {
503
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
504
- var _a;
475
+ fetchLiabilities(db, f, log = logger_1.consoleLogger) {
476
+ var _a;
477
+ return __awaiter(this, void 0, void 0, function* () {
505
478
  let offset = 0;
506
479
  let orderBy = (_a = f.orderBy) !== null && _a !== void 0 ? _a : 'epoch.ui,liability.id';
507
480
  if (f.cursor) {
@@ -568,8 +541,8 @@ const pgClient = (config) => {
568
541
  };
569
542
  });
570
543
  },
571
- getLiabilitiesAndTransfers(f_1) {
572
- return __awaiter(this, arguments, void 0, function* (f, log = logger_1.consoleLogger) {
544
+ getLiabilitiesAndTransfers(f, log = logger_1.consoleLogger) {
545
+ return __awaiter(this, void 0, void 0, function* () {
573
546
  let lq = db
574
547
  .selectFrom(exports.LIABILITY_TABLE)
575
548
  .selectAll()
@@ -630,9 +603,9 @@ const pgClient = (config) => {
630
603
  return { transfers, liabilities, epochs: Object.values(epochs) };
631
604
  });
632
605
  },
633
- getOutstanding(f_1) {
634
- return __awaiter(this, arguments, void 0, function* (f, log = logger_1.consoleLogger) {
635
- var _a, _b, _c, _d, _e;
606
+ getOutstanding(f, log = logger_1.consoleLogger) {
607
+ var _a, _b, _c, _d, _e;
608
+ return __awaiter(this, void 0, void 0, function* () {
636
609
  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)'}`);
637
610
  let epochUi;
638
611
  let epochEndTime;
@@ -741,9 +714,9 @@ const pgClient = (config) => {
741
714
  return out;
742
715
  });
743
716
  },
744
- fetchNodeOperatorEpoch(epochId_1) {
745
- return __awaiter(this, arguments, void 0, function* (epochId, log = logger_1.consoleLogger) {
746
- var _a;
717
+ fetchNodeOperatorEpoch(epochId, log = logger_1.consoleLogger) {
718
+ var _a;
719
+ return __awaiter(this, void 0, void 0, function* () {
747
720
  const q = db
748
721
  .selectFrom(exports.JOB_ID_TABLE)
749
722
  .innerJoin(exports.EPOCH_TABLE, 'epoch.id', 'job_id.epoch_id')
@@ -793,14 +766,14 @@ const pgClient = (config) => {
793
766
  };
794
767
  });
795
768
  },
796
- insertEpoch(db_1, epoch_1) {
797
- return __awaiter(this, arguments, void 0, function* (db, epoch, log = logger_1.consoleLogger) {
769
+ insertEpoch(db, epoch, log = logger_1.consoleLogger) {
770
+ return __awaiter(this, void 0, void 0, function* () {
798
771
  yield getOrInsertEpoch(db.trx, Object.assign(Object.assign({}, epoch), { uiEpochId: epoch.ui }), log);
799
772
  });
800
773
  },
801
- getEpoch(f_1) {
802
- return __awaiter(this, arguments, void 0, function* (f, log = logger_1.consoleLogger) {
803
- var _a;
774
+ getEpoch(f, log = logger_1.consoleLogger) {
775
+ var _a;
776
+ return __awaiter(this, void 0, void 0, function* () {
804
777
  const now = new Date(Date.now());
805
778
  try {
806
779
  let q = db
@@ -838,9 +811,9 @@ const pgClient = (config) => {
838
811
  }
839
812
  });
840
813
  },
841
- getLatestNodeOperatorEpoch(f_1) {
842
- return __awaiter(this, arguments, void 0, function* (f, log = logger_1.consoleLogger) {
843
- var _a;
814
+ getLatestNodeOperatorEpoch(f, log = logger_1.consoleLogger) {
815
+ var _a;
816
+ return __awaiter(this, void 0, void 0, function* () {
844
817
  const now = new Date(Date.now());
845
818
  try {
846
819
  let q = db
@@ -880,8 +853,8 @@ const pgClient = (config) => {
880
853
  }
881
854
  });
882
855
  },
883
- saveNodeOperatorEpoch(epochId_1, liabilities_1, jobIds_1, totalRndr_1) {
884
- return __awaiter(this, arguments, void 0, function* (epochId, liabilities, jobIds, totalRndr, log = logger_1.consoleLogger) {
856
+ saveNodeOperatorEpoch(epochId, liabilities, jobIds, totalRndr, log = logger_1.consoleLogger) {
857
+ return __awaiter(this, void 0, void 0, function* () {
885
858
  yield db
886
859
  .transaction()
887
860
  .setIsolationLevel('repeatable read')
@@ -917,8 +890,8 @@ const pgClient = (config) => {
917
890
  return;
918
891
  });
919
892
  },
920
- produceBurnedJobs(jobs_1) {
921
- return __awaiter(this, arguments, void 0, function* (jobs, log = logger_1.consoleLogger) {
893
+ produceBurnedJobs(jobs, log = logger_1.consoleLogger) {
894
+ return __awaiter(this, void 0, void 0, function* () {
922
895
  yield db.transaction().execute((trx) => __awaiter(this, void 0, void 0, function* () {
923
896
  var _a;
924
897
  let num = BigInt(0);
@@ -941,9 +914,9 @@ const pgClient = (config) => {
941
914
  }));
942
915
  });
943
916
  },
944
- markJobsBurntWithGrant(db_1, p_1) {
945
- return __awaiter(this, arguments, void 0, function* (db, p, log = logger_1.consoleLogger) {
946
- var _a;
917
+ markJobsBurntWithGrant(db, p, log = logger_1.consoleLogger) {
918
+ var _a;
919
+ return __awaiter(this, void 0, void 0, function* () {
947
920
  const solTxId = yield getOrInsertTx(db.trx, { sig: p.tx.sig, executedAt: p.tx.executedAt }, log);
948
921
  const { id } = yield db.trx
949
922
  .insertInto(exports.GRANT_BURN_TABLE)
@@ -974,9 +947,9 @@ const pgClient = (config) => {
974
947
  return;
975
948
  });
976
949
  },
977
- insertGrantSpend(db_1, p_1) {
978
- return __awaiter(this, arguments, void 0, function* (db, p, log = logger_1.consoleLogger) {
979
- var _a, _b, _c;
950
+ insertGrantSpend(db, p, log = logger_1.consoleLogger) {
951
+ var _a, _b, _c;
952
+ return __awaiter(this, void 0, void 0, function* () {
980
953
  const existing = yield getCurrentUserGrantSpend(db.trx, { userId: p.userId }, log);
981
954
  const diff = {
982
955
  render_spent: ((_a = existing === null || existing === void 0 ? void 0 : existing.renderSpent) !== null && _a !== void 0 ? _a : BigInt(0)) + p.renderSpentDelta,
@@ -1041,9 +1014,9 @@ const pgClient = (config) => {
1041
1014
  }
1042
1015
  });
1043
1016
  },
1044
- markJobsBurnt(trx_1, p_1) {
1045
- return __awaiter(this, arguments, void 0, function* (trx, p, log = logger_1.consoleLogger) {
1046
- var _a, _b;
1017
+ markJobsBurnt(trx, p, log = logger_1.consoleLogger) {
1018
+ var _a, _b;
1019
+ return __awaiter(this, void 0, void 0, function* () {
1047
1020
  if (!p.buyBurn && !p.grantBurn) {
1048
1021
  throw new Error('no buyBurn or grantBurn');
1049
1022
  }
@@ -1074,24 +1047,13 @@ const pgClient = (config) => {
1074
1047
  to_burn: toBurn,
1075
1048
  };
1076
1049
  log.debug(`inserting burn ${JSON.stringify(v)}`);
1077
- // Idempotent on sol_tx_id (uniq_burn_sol_tx_id, migration 27): a retry of
1078
- // the record step for the same on-chain burn is a safe no-op. On conflict
1079
- // executeTakeFirst() returns undefined, so re-fetch the existing id.
1080
- let burnRow = yield trx.trx
1050
+ const { id } = yield trx.trx
1081
1051
  .insertInto(exports.BURN_TABLE)
1082
1052
  .values(v)
1083
- .onConflict((oc) => oc.column('sol_tx_id').doNothing())
1053
+ //.onConflict((oc) => oc.column('sol_tx').doNothing())
1084
1054
  .returning((eb) => ['id as id'])
1085
- .executeTakeFirst();
1086
- if (!burnRow) {
1087
- log.warn(`burn for sol_tx_id ${solTxId} already exists; reusing existing id (idempotent retry)`);
1088
- burnRow = yield trx.trx
1089
- .selectFrom(exports.BURN_TABLE)
1090
- .select((eb) => ['id as id'])
1091
- .where('sol_tx_id', '=', solTxId)
1092
- .executeTakeFirstOrThrow();
1093
- }
1094
- buyBurnId = Number(burnRow.id);
1055
+ .executeTakeFirstOrThrow();
1056
+ buyBurnId = Number(id);
1095
1057
  }
1096
1058
  if (p.grantBurn) {
1097
1059
  const { burned, tags } = p.grantBurn;
@@ -1101,22 +1063,12 @@ const pgClient = (config) => {
1101
1063
  tags: tags === null || tags === void 0 ? void 0 : tags.join(','),
1102
1064
  };
1103
1065
  log.debug(`inserting grant burn ${JSON.stringify(v)}`);
1104
- // Idempotent on sol_tx_id (uniq_grant_burn_sol_tx_id, migration 27).
1105
- let grantBurnRow = yield trx.trx
1066
+ const { id } = yield trx.trx
1106
1067
  .insertInto(exports.GRANT_BURN_TABLE)
1107
1068
  .values(v)
1108
- .onConflict((oc) => oc.column('sol_tx_id').doNothing())
1109
1069
  .returning((eb) => ['id as id'])
1110
- .executeTakeFirst();
1111
- if (!grantBurnRow) {
1112
- log.warn(`grant_burn for sol_tx_id ${solTxId} already exists; reusing existing id (idempotent retry)`);
1113
- grantBurnRow = yield trx.trx
1114
- .selectFrom(exports.GRANT_BURN_TABLE)
1115
- .select((eb) => ['id as id'])
1116
- .where('sol_tx_id', '=', solTxId)
1117
- .executeTakeFirstOrThrow();
1118
- }
1119
- grantBurnId = Number(grantBurnRow.id);
1070
+ .executeTakeFirstOrThrow();
1071
+ grantBurnId = Number(id);
1120
1072
  }
1121
1073
  const burnId = buyBurnId;
1122
1074
  const grantId = grantBurnId !== null && grantBurnId !== void 0 ? grantBurnId : buyBurnId;
@@ -1142,8 +1094,8 @@ const pgClient = (config) => {
1142
1094
  return { grantBurnId, buyBurnId };
1143
1095
  });
1144
1096
  },
1145
- markJobsBurned(trx_1, p_1) {
1146
- return __awaiter(this, arguments, void 0, function* (trx, p, log = logger_1.consoleLogger) {
1097
+ markJobsBurned(trx, p, log = logger_1.consoleLogger) {
1098
+ return __awaiter(this, void 0, void 0, function* () {
1147
1099
  let { markedAt, solTx } = p;
1148
1100
  let res = yield trx.trx
1149
1101
  .updateTable(exports.BURN_TABLE)
@@ -1167,8 +1119,8 @@ const pgClient = (config) => {
1167
1119
  }
1168
1120
  });
1169
1121
  },
1170
- consumeAndLockBurnJobs(limit_1, lowerRndrThreshold_1, upperRndrThreshold_1) {
1171
- return __awaiter(this, arguments, void 0, function* (limit, lowerRndrThreshold, upperRndrThreshold, log = logger_1.consoleLogger) {
1122
+ consumeAndLockBurnJobs(limit, lowerRndrThreshold, upperRndrThreshold, log = logger_1.consoleLogger) {
1123
+ return __awaiter(this, void 0, void 0, function* () {
1172
1124
  const trx = yield (0, base_2.begin)(db, log);
1173
1125
  const q = trx.trx
1174
1126
  .selectFrom(trx.trx
@@ -1275,9 +1227,9 @@ const pgClient = (config) => {
1275
1227
  };
1276
1228
  });
1277
1229
  },
1278
- incrBuyBurnMetrics() {
1279
- return __awaiter(this, arguments, void 0, function* (log = logger_1.consoleLogger) {
1280
- var _a;
1230
+ incrBuyBurnMetrics(log = logger_1.consoleLogger) {
1231
+ var _a;
1232
+ return __awaiter(this, void 0, void 0, function* () {
1281
1233
  const res = yield db
1282
1234
  .selectFrom(exports.JOB_TABLE)
1283
1235
  .select('inserted_at')
@@ -1294,9 +1246,9 @@ const pgClient = (config) => {
1294
1246
  };
1295
1247
  });
1296
1248
  },
1297
- fetchBurns(db_1, f_1) {
1298
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1299
- var _a, _b;
1249
+ fetchBurns(db, f, log = logger_1.consoleLogger) {
1250
+ var _a, _b;
1251
+ return __awaiter(this, void 0, void 0, function* () {
1300
1252
  let q = db.trx
1301
1253
  .selectFrom('burn')
1302
1254
  .selectAll('burn')
@@ -1365,9 +1317,9 @@ const pgClient = (config) => {
1365
1317
  return burns;
1366
1318
  });
1367
1319
  },
1368
- fetchBurnsAndGrants(db_1, f_1) {
1369
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1370
- var _a, _b;
1320
+ fetchBurnsAndGrants(db, f, log = logger_1.consoleLogger) {
1321
+ var _a, _b;
1322
+ return __awaiter(this, void 0, void 0, function* () {
1371
1323
  // Build a unified query to get all transactions with both buy burns and grant burns
1372
1324
  let baseQuery = db.trx
1373
1325
  .selectFrom('sol_tx')
@@ -1505,13 +1457,13 @@ const pgClient = (config) => {
1505
1457
  return groupedBurns;
1506
1458
  });
1507
1459
  },
1508
- createBridgeTransfers(db_1, bts_1) {
1509
- return __awaiter(this, arguments, void 0, function* (db, bts, log = logger_1.consoleLogger) {
1460
+ createBridgeTransfers(db, bts, log = logger_1.consoleLogger) {
1461
+ return __awaiter(this, void 0, void 0, function* () {
1510
1462
  return createBridgeTransfers(db.trx, bts, log);
1511
1463
  });
1512
1464
  },
1513
- getBridgeTransfers(_a) {
1514
- return __awaiter(this, arguments, void 0, function* ({ solKey, page, }, log = logger_1.consoleLogger) {
1465
+ getBridgeTransfers({ solKey, page, }, log = logger_1.consoleLogger) {
1466
+ return __awaiter(this, void 0, void 0, function* () {
1515
1467
  let q = db
1516
1468
  .selectFrom(exports.BRIDGE_TRANSFER_TABLE)
1517
1469
  .innerJoin(exports.EPOCH_TABLE, 'epoch.id', 'bridge_transfer.epoch_id')
@@ -1588,8 +1540,8 @@ const pgClient = (config) => {
1588
1540
  });
1589
1541
  },
1590
1542
  getTotalBurned(db) {
1543
+ var _a, _b;
1591
1544
  return __awaiter(this, void 0, void 0, function* () {
1592
- var _a, _b;
1593
1545
  const total = yield db.trx
1594
1546
  .selectFrom('burn')
1595
1547
  .select(({ fn }) => fn.sum('burned').as('total_burned'))
@@ -1597,8 +1549,8 @@ const pgClient = (config) => {
1597
1549
  return BigInt((_b = (_a = total[0]) === null || _a === void 0 ? void 0 : _a.total_burned) !== null && _b !== void 0 ? _b : 0);
1598
1550
  });
1599
1551
  },
1600
- insertBurn(p_1) {
1601
- return __awaiter(this, arguments, void 0, function* (p, log = logger_1.consoleLogger) {
1552
+ insertBurn(p, log = logger_1.consoleLogger) {
1553
+ return __awaiter(this, void 0, void 0, function* () {
1602
1554
  yield db.transaction().execute((trx) => __awaiter(this, void 0, void 0, function* () {
1603
1555
  var _a;
1604
1556
  const solTxId = yield getOrInsertTx(trx, { sig: p.solTx, executedAt: p.executedAt }, log);
@@ -1635,18 +1587,69 @@ const pgClient = (config) => {
1635
1587
  }));
1636
1588
  });
1637
1589
  },
1638
- fetchJobs(db_1, f_1) {
1639
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1590
+ insertDispersedOutbox(p, log = logger_1.consoleLogger) {
1591
+ var _a;
1592
+ return __awaiter(this, void 0, void 0, function* () {
1593
+ const res = yield db
1594
+ .insertInto(exports.DISPERSED_SETTLEMENT_TABLE)
1595
+ .values({
1596
+ tx_signature: p.txSignature,
1597
+ claim_uuid: p.claimUuid,
1598
+ obligation_uuids: p.obligationUuids,
1599
+ settled_amount: p.settledAmount,
1600
+ burned_amount: p.burnedAmount,
1601
+ executed_at: p.executedAt,
1602
+ eur_render: (_a = p.eurRender) !== null && _a !== void 0 ? _a : null,
1603
+ })
1604
+ .onConflict((oc) => oc.column('tx_signature').doNothing())
1605
+ .executeTakeFirst();
1606
+ log.debug(`dispersed outbox tx ${p.txSignature}: ${res.numInsertedOrUpdatedRows} row(s)`);
1607
+ });
1608
+ },
1609
+ markDispersedSettled(txSignature, p, log = logger_1.consoleLogger) {
1610
+ return __awaiter(this, void 0, void 0, function* () {
1611
+ yield db
1612
+ .updateTable(exports.DISPERSED_SETTLEMENT_TABLE)
1613
+ .set({ settled_at: new Date(), idempotent_replay: p.idempotentReplay })
1614
+ .where('tx_signature', '=', txSignature)
1615
+ .execute();
1616
+ log.debug(`dispersed settled tx ${txSignature}`);
1617
+ });
1618
+ },
1619
+ getUnsettledDispersed(log = logger_1.consoleLogger) {
1620
+ return __awaiter(this, void 0, void 0, function* () {
1621
+ const rows = yield db
1622
+ .selectFrom(exports.DISPERSED_SETTLEMENT_TABLE)
1623
+ .selectAll()
1624
+ .where('settled_at', 'is', null)
1625
+ .execute();
1626
+ log.debug(`dispersed outbox: ${rows.length} unsettled`);
1627
+ return rows.map((r) => {
1628
+ var _a;
1629
+ return ({
1630
+ txSignature: r.tx_signature,
1631
+ claimUuid: r.claim_uuid,
1632
+ obligationUuids: r.obligation_uuids,
1633
+ settledAmount: r.settled_amount,
1634
+ burnedAmount: r.burned_amount,
1635
+ executedAt: r.executed_at,
1636
+ eurRender: (_a = r.eur_render) !== null && _a !== void 0 ? _a : undefined,
1637
+ });
1638
+ });
1639
+ });
1640
+ },
1641
+ fetchJobs(db, f, log = logger_1.consoleLogger) {
1642
+ return __awaiter(this, void 0, void 0, function* () {
1640
1643
  return yield fetchJobs1(db.trx, f, log);
1641
1644
  });
1642
1645
  },
1643
- fetchJobsWithGrantValues(db_1, f_1) {
1644
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1646
+ fetchJobsWithGrantValues(db, f, log = logger_1.consoleLogger) {
1647
+ return __awaiter(this, void 0, void 0, function* () {
1645
1648
  return yield fetchJobs2(db.trx, f, log);
1646
1649
  });
1647
1650
  },
1648
- fetchLiabilityEpochs(db_1) {
1649
- return __awaiter(this, arguments, void 0, function* (db, log = logger_1.consoleLogger) {
1651
+ fetchLiabilityEpochs(db, log = logger_1.consoleLogger) {
1652
+ return __awaiter(this, void 0, void 0, function* () {
1650
1653
  const q = db.trx
1651
1654
  .selectFrom(exports.LIABILITY_TABLE)
1652
1655
  .select(({ fn }) => [
@@ -1704,8 +1707,8 @@ const pgClient = (config) => {
1704
1707
  }));
1705
1708
  });
1706
1709
  },
1707
- getBurnAdjustments(trx_1, ps_1) {
1708
- return __awaiter(this, arguments, void 0, function* (trx, ps, log = logger_1.consoleLogger) {
1710
+ getBurnAdjustments(trx, ps, log = logger_1.consoleLogger) {
1711
+ return __awaiter(this, void 0, void 0, function* () {
1709
1712
  if (ps.toFill) {
1710
1713
  const q = trx.trx
1711
1714
  .selectFrom(exports.BURN_ADJUSTMENT_TABLE)
@@ -1746,8 +1749,8 @@ const pgClient = (config) => {
1746
1749
  return [];
1747
1750
  });
1748
1751
  },
1749
- insertPolygonUpgrade(db_1, p_1) {
1750
- return __awaiter(this, arguments, void 0, function* (db, p, log = logger_1.consoleLogger) {
1752
+ insertPolygonUpgrade(db, p, log = logger_1.consoleLogger) {
1753
+ return __awaiter(this, void 0, void 0, function* () {
1751
1754
  const solTxId = yield getOrInsertTx(db.trx, {
1752
1755
  sig: p.solTx.sig,
1753
1756
  executedAt: p.solTx.executedAt,
@@ -1765,8 +1768,8 @@ const pgClient = (config) => {
1765
1768
  return;
1766
1769
  });
1767
1770
  },
1768
- fetchPolygonUpgrades(db_1, f_1) {
1769
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1771
+ fetchPolygonUpgrades(db, f, log = logger_1.consoleLogger) {
1772
+ return __awaiter(this, void 0, void 0, function* () {
1770
1773
  let query = db.trx
1771
1774
  .selectFrom('polygon_upgrade')
1772
1775
  .selectAll('polygon_upgrade')
@@ -1792,13 +1795,13 @@ const pgClient = (config) => {
1792
1795
  }));
1793
1796
  });
1794
1797
  },
1795
- getCurrentUserGrantSpend(db_1, f_1) {
1796
- return __awaiter(this, arguments, void 0, function* (db, f, log = logger_1.consoleLogger) {
1798
+ getCurrentUserGrantSpend(db, f, log = logger_1.consoleLogger) {
1799
+ return __awaiter(this, void 0, void 0, function* () {
1797
1800
  return yield getCurrentUserGrantSpend(db.trx, f, log);
1798
1801
  });
1799
1802
  },
1800
- deleteAll() {
1801
- return __awaiter(this, arguments, void 0, function* (log = logger_1.consoleLogger) {
1803
+ deleteAll(log = logger_1.consoleLogger) {
1804
+ return __awaiter(this, void 0, void 0, function* () {
1802
1805
  if (config.database.includes('render')) {
1803
1806
  throw new Error('cannot nuke from deployed database. call from tests only');
1804
1807
  }
@@ -1844,8 +1847,8 @@ const pgClient = (config) => {
1844
1847
  }
1845
1848
  });
1846
1849
  },
1847
- checkPaymentsForDate(targetDate_1) {
1848
- return __awaiter(this, arguments, void 0, function* (targetDate, channel = 'both', log = logger_1.consoleLogger) {
1850
+ checkPaymentsForDate(targetDate, channel = 'both', log = logger_1.consoleLogger) {
1851
+ return __awaiter(this, void 0, void 0, function* () {
1849
1852
  const startOfDay = new Date(targetDate);
1850
1853
  startOfDay.setHours(0, 0, 0, 0);
1851
1854
  const endOfDay = new Date(targetDate);
@@ -1896,8 +1899,8 @@ const pgClient = (config) => {
1896
1899
  }
1897
1900
  });
1898
1901
  },
1899
- checkEpochProcessed(epochId_1, channel_1) {
1900
- return __awaiter(this, arguments, void 0, function* (epochId, channel, log = logger_1.consoleLogger) {
1902
+ checkEpochProcessed(epochId, channel, log = logger_1.consoleLogger) {
1903
+ return __awaiter(this, void 0, void 0, function* () {
1901
1904
  try {
1902
1905
  const result = yield db
1903
1906
  .selectFrom('epoch')
@@ -1917,8 +1920,8 @@ const pgClient = (config) => {
1917
1920
  }
1918
1921
  });
1919
1922
  },
1920
- checkRecentPaymentActivity() {
1921
- return __awaiter(this, arguments, void 0, function* (lookbackHours = 2, channel = 'both', log = logger_1.consoleLogger) {
1923
+ checkRecentPaymentActivity(lookbackHours = 2, channel = 'both', log = logger_1.consoleLogger) {
1924
+ return __awaiter(this, void 0, void 0, function* () {
1922
1925
  const lookbackTime = new Date(Date.now() - lookbackHours * 60 * 60 * 1000);
1923
1926
  const now = new Date();
1924
1927
  try {