@bsv/wallet-toolbox 2.1.16 → 2.1.17

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 (32) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/docs/client.md +2 -1
  3. package/docs/storage.md +90 -39
  4. package/docs/wallet.md +2 -1
  5. package/out/src/monitor/Monitor.d.ts.map +1 -1
  6. package/out/src/monitor/Monitor.js +5 -1
  7. package/out/src/monitor/Monitor.js.map +1 -1
  8. package/out/src/storage/StorageKnex.d.ts +1 -0
  9. package/out/src/storage/StorageKnex.d.ts.map +1 -1
  10. package/out/src/storage/StorageKnex.js +14 -7
  11. package/out/src/storage/StorageKnex.js.map +1 -1
  12. package/out/src/storage/StorageProvider.d.ts +2 -0
  13. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  14. package/out/src/storage/StorageProvider.js +23 -0
  15. package/out/src/storage/StorageProvider.js.map +1 -1
  16. package/out/src/storage/adminServer/adminServer.d.ts +26 -0
  17. package/out/src/storage/adminServer/adminServer.d.ts.map +1 -0
  18. package/out/src/storage/adminServer/adminServer.js +547 -0
  19. package/out/src/storage/adminServer/adminServer.js.map +1 -0
  20. package/out/src/storage/adminServer/adminUi.d.ts +2 -0
  21. package/out/src/storage/adminServer/adminUi.d.ts.map +1 -0
  22. package/out/src/storage/adminServer/adminUi.js +1024 -0
  23. package/out/src/storage/adminServer/adminUi.js.map +1 -0
  24. package/out/src/storage/adminServer/index.all.d.ts +3 -0
  25. package/out/src/storage/adminServer/index.all.d.ts.map +1 -0
  26. package/out/src/storage/adminServer/index.all.js +19 -0
  27. package/out/src/storage/adminServer/index.all.js.map +1 -0
  28. package/out/src/storage/index.all.d.ts +1 -0
  29. package/out/src/storage/index.all.d.ts.map +1 -1
  30. package/out/src/storage/index.all.js +1 -0
  31. package/out/src/storage/index.all.js.map +1 -1
  32. package/package.json +1 -1
@@ -0,0 +1,547 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
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
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.AdminServer = void 0;
40
+ const sdk_1 = require("@bsv/sdk");
41
+ const sdk = __importStar(require("../../sdk/index"));
42
+ const Format_1 = require("../../utility/Format");
43
+ const Services_1 = require("../../services/Services");
44
+ const adminUi_1 = require("./adminUi");
45
+ const path_1 = __importDefault(require("path"));
46
+ const express = require('express');
47
+ const { createAuthMiddleware } = require('@bsv/auth-express-middleware');
48
+ function asNumber(value, fallback) {
49
+ const parsed = Number.parseInt(String(value !== null && value !== void 0 ? value : ''), 10);
50
+ return Number.isNaN(parsed) ? fallback : parsed;
51
+ }
52
+ function toHex(value) {
53
+ if (!value)
54
+ return undefined;
55
+ if (Buffer.isBuffer(value))
56
+ return value.toString('hex');
57
+ return Buffer.from(value).toString('hex');
58
+ }
59
+ function prettyJson(value) {
60
+ if (!value)
61
+ return undefined;
62
+ try {
63
+ return JSON.stringify(JSON.parse(value), null, 2);
64
+ }
65
+ catch (_a) {
66
+ return value;
67
+ }
68
+ }
69
+ function alignLeft(value, width) {
70
+ const text = String(value);
71
+ return text.length > width ? `${text.slice(0, width - 1)}…` : text.padEnd(width);
72
+ }
73
+ function alignRight(value, width) {
74
+ const text = String(value);
75
+ return text.length > width ? `…${text.slice(-width + 1)}` : text.padStart(width);
76
+ }
77
+ function toAdminStatsLog(stats) {
78
+ var _a, _b;
79
+ const row = (label, day, week, month, total) => ` ${alignLeft(label, 13)} ${alignRight(day !== null && day !== void 0 ? day : '', 18)} ${alignRight(week !== null && week !== void 0 ? week : '', 18)} ${alignRight(month !== null && month !== void 0 ? month : '', 18)} ${alignRight(total !== null && total !== void 0 ? total : '', 18)}\n`;
80
+ let log = `StorageAdminStats: ${(_a = stats.when) !== null && _a !== void 0 ? _a : ''} ${(_b = stats.requestedBy) !== null && _b !== void 0 ? _b : ''}\n`;
81
+ log += ` ${alignLeft('', 13)} ${alignRight('Day', 18)} ${alignRight('Week', 18)} ${alignRight('Month', 18)} ${alignRight('Total', 18)}\n`;
82
+ log += row('users', stats.usersDay, stats.usersWeek, stats.usersMonth, stats.usersTotal);
83
+ log += row('change sats', formatSatoshis(stats.satoshisDefaultDay), formatSatoshis(stats.satoshisDefaultWeek), formatSatoshis(stats.satoshisDefaultMonth), formatSatoshis(stats.satoshisDefaultTotal));
84
+ log += row('other sats', formatSatoshis(stats.satoshisOtherDay), formatSatoshis(stats.satoshisOtherWeek), formatSatoshis(stats.satoshisOtherMonth), formatSatoshis(stats.satoshisOtherTotal));
85
+ log += row('labels', stats.labelsDay, stats.labelsWeek, stats.labelsMonth, stats.labelsTotal);
86
+ log += row('tags', stats.tagsDay, stats.tagsWeek, stats.tagsMonth, stats.tagsTotal);
87
+ log += row('baskets', stats.basketsDay, stats.basketsWeek, stats.basketsMonth, stats.basketsTotal);
88
+ log += row('transactions', stats.transactionsDay, stats.transactionsWeek, stats.transactionsMonth, stats.transactionsTotal);
89
+ log += row('completed', stats.txCompletedDay, stats.txCompletedWeek, stats.txCompletedMonth, stats.txCompletedTotal);
90
+ log += row('failed', stats.txFailedDay, stats.txFailedWeek, stats.txFailedMonth, stats.txFailedTotal);
91
+ log += row('abandoned', stats.txAbandonedDay, stats.txAbandonedWeek, stats.txAbandonedMonth, stats.txAbandonedTotal);
92
+ log += row('nosend', stats.txNosendDay, stats.txNosendWeek, stats.txNosendMonth, stats.txNosendTotal);
93
+ log += row('unproven', stats.txUnprovenDay, stats.txUnprovenWeek, stats.txUnprovenMonth, stats.txUnprovenTotal);
94
+ log += row('sending', stats.txSendingDay, stats.txSendingWeek, stats.txSendingMonth, stats.txSendingTotal);
95
+ log += row('unprocessed', stats.txUnprocessedDay, stats.txUnprocessedWeek, stats.txUnprocessedMonth, stats.txUnprocessedTotal);
96
+ log += row('unsigned', stats.txUnsignedDay, stats.txUnsignedWeek, stats.txUnsignedMonth, stats.txUnsignedTotal);
97
+ log += row('nonfinal', stats.txNonfinalDay, stats.txNonfinalWeek, stats.txNonfinalMonth, stats.txNonfinalTotal);
98
+ log += row('unfail', stats.txUnfailDay, stats.txUnfailWeek, stats.txUnfailMonth, stats.txUnfailTotal);
99
+ return log;
100
+ }
101
+ function formatSatoshis(value) {
102
+ const n = typeof value === 'number' ? value : Number(value !== null && value !== void 0 ? value : 0);
103
+ return Format_1.Format.satoshis(Number.isFinite(n) ? n : 0);
104
+ }
105
+ function parseJson(value) {
106
+ if (!value)
107
+ return undefined;
108
+ try {
109
+ return JSON.parse(value);
110
+ }
111
+ catch (_a) {
112
+ return value;
113
+ }
114
+ }
115
+ function decodeRawTx(rawTx) {
116
+ if (!rawTx)
117
+ return undefined;
118
+ const tx = sdk_1.Transaction.fromBinary(rawTx);
119
+ return {
120
+ txid: tx.id('hex'),
121
+ version: tx.version,
122
+ lockTime: tx.lockTime,
123
+ inputs: tx.inputs.map((input, vin) => {
124
+ var _a, _b;
125
+ return ({
126
+ vin,
127
+ sourceTXID: input.sourceTXID,
128
+ sourceOutputIndex: input.sourceOutputIndex,
129
+ sequence: input.sequence,
130
+ unlockingScriptLength: (_b = (_a = input.unlockingScript) === null || _a === void 0 ? void 0 : _a.toBinary) === null || _b === void 0 ? void 0 : _b.call(_a).length
131
+ });
132
+ }),
133
+ outputs: tx.outputs.map((output, vout) => {
134
+ var _a, _b;
135
+ return ({
136
+ vout,
137
+ satoshis: Number(output.satoshis),
138
+ lockingScriptHex: (_b = (_a = output.lockingScript) === null || _a === void 0 ? void 0 : _a.toHex) === null || _b === void 0 ? void 0 : _b.call(_a)
139
+ });
140
+ })
141
+ };
142
+ }
143
+ async function getStorage(context) {
144
+ var _a;
145
+ const storage = (_a = context.daemon.setup) === null || _a === void 0 ? void 0 : _a.storageProvider;
146
+ if (!storage)
147
+ throw new Error('Monitor storage provider is not available.');
148
+ return storage;
149
+ }
150
+ async function getKnex(context) {
151
+ const storage = await getStorage(context);
152
+ const knex = storage.knex;
153
+ if (!knex)
154
+ throw new Error('Joined admin review requires StorageKnex / MySQL.');
155
+ return knex;
156
+ }
157
+ async function queryReqReview(context, query) {
158
+ var _a;
159
+ const knex = await getKnex(context);
160
+ const status = typeof query.status === 'string' && query.status.trim() ? query.status.trim() : undefined;
161
+ const txid = typeof query.txid === 'string' && query.txid.trim() ? query.txid.trim() : undefined;
162
+ const batch = typeof query.batch === 'string' && query.batch.trim() ? query.batch.trim() : undefined;
163
+ const userId = typeof query.userId === 'string' && query.userId.trim() ? asNumber(query.userId, 0) : undefined;
164
+ const minTransactionId = asNumber(query.minTransactionId, 0);
165
+ const limit = Math.min(asNumber(query.limit, 25), 200);
166
+ const offset = Math.max(asNumber(query.offset, 0), 0);
167
+ const base = knex('proven_tx_reqs as r')
168
+ .join('transactions as t', 't.txid', 'r.txid')
169
+ .where('t.transactionId', '>=', minTransactionId);
170
+ if (status)
171
+ base.andWhere('r.status', status);
172
+ if (txid)
173
+ base.andWhere('r.txid', txid);
174
+ if (batch)
175
+ base.andWhere('r.batch', batch);
176
+ if (userId)
177
+ base.andWhere('t.userId', userId);
178
+ const totalResult = (await base.clone().count({ count: '*' }));
179
+ const total = Number(((_a = totalResult[0]) === null || _a === void 0 ? void 0 : _a.count) || 0);
180
+ const rows = (await base
181
+ .clone()
182
+ .select([
183
+ 'r.updated_at',
184
+ 'r.created_at as req_created_at',
185
+ 't.created_at as tx_created_at',
186
+ knex.raw('TIMESTAMPDIFF(MINUTE, r.created_at, NOW()) as minutesOld'),
187
+ knex.raw('TIMESTAMPDIFF(HOUR, r.created_at, NOW()) as hoursOld'),
188
+ 'r.provenTxReqId',
189
+ 't.transactionId',
190
+ 't.userId',
191
+ 'r.txid',
192
+ 'r.provenTxId',
193
+ 'r.status as reqStatus',
194
+ 't.status as txStatus',
195
+ 't.satoshis',
196
+ 'r.attempts',
197
+ 'r.notified',
198
+ 'r.history',
199
+ 'r.notify',
200
+ knex.raw('HEX(r.rawTx) as rawTxHex'),
201
+ 'r.batch',
202
+ knex.raw('HEX(r.inputBEEF) as inputBeefHex')
203
+ ])
204
+ .orderBy('r.provenTxReqId', 'desc')
205
+ .limit(limit)
206
+ .offset(offset));
207
+ return {
208
+ total,
209
+ rows: rows.map(row => ({
210
+ ...row,
211
+ historyJson: parseJson(row.history),
212
+ notifyJson: parseJson(row.notify),
213
+ historyPretty: prettyJson(row.history),
214
+ notifyPretty: prettyJson(row.notify)
215
+ }))
216
+ };
217
+ }
218
+ function normalizeReviewMode(value) {
219
+ return value === 'change' ? 'change' : 'all';
220
+ }
221
+ function getReviewUtxosTask(context) {
222
+ var _a;
223
+ const monitor = (_a = context.daemon.setup) === null || _a === void 0 ? void 0 : _a.monitor;
224
+ if (!monitor)
225
+ throw new Error('Monitor is not available.');
226
+ const task = [...monitor._tasks, ...monitor._otherTasks].find(item => item.name === 'ReviewUtxos');
227
+ if (!(task === null || task === void 0 ? void 0 : task.reviewByIdentityKey)) {
228
+ throw new Error('ReviewUtxos task is not available in this monitor runtime.');
229
+ }
230
+ return {
231
+ reviewByIdentityKey: task.reviewByIdentityKey.bind(task)
232
+ };
233
+ }
234
+ async function queryUsers(context, query) {
235
+ const storage = await getStorage(context);
236
+ const search = typeof query.search === 'string' ? query.search.trim() : '';
237
+ const limit = Math.min(Math.max(asNumber(query.limit, 50), 1), 200);
238
+ const users = await storage.recentlyActiveUsers(search ? 200 : limit);
239
+ const filtered = search
240
+ ? users.filter(user => user.identityKey.includes(search) || (user.userId !== undefined && String(user.userId).includes(search)))
241
+ : users;
242
+ return {
243
+ total: filtered.length,
244
+ users: filtered.slice(0, limit).map(user => ({
245
+ userId: user.userId,
246
+ identityKey: user.identityKey,
247
+ isActive: user.activeStorage
248
+ }))
249
+ };
250
+ }
251
+ async function resolveIdentityKeyFromInput(context, userInput) {
252
+ const value = userInput.trim();
253
+ if (!value)
254
+ throw new Error('identityKey or userId is required.');
255
+ if (value.length < 64) {
256
+ const storage = await getStorage(context);
257
+ const userId = asNumber(value, -1);
258
+ if (userId < 0)
259
+ throw new Error('userId must be a valid integer.');
260
+ const user = (await storage.findUsers({ partial: { userId } }))[0];
261
+ if (!(user === null || user === void 0 ? void 0 : user.identityKey))
262
+ throw new Error(`User ${userId} was not found.`);
263
+ return user.identityKey;
264
+ }
265
+ return value;
266
+ }
267
+ async function queryMonitorCallHistory(context, query) {
268
+ const storage = await getStorage(context);
269
+ const limit = Math.min(Math.max(asNumber(query.limit, 120), 1), 120);
270
+ const offset = Math.max(asNumber(query.offset, 0), 0);
271
+ const selectedId = asNumber(query.selectedId, -1);
272
+ const partial = { event: 'MonitorCallHistory' };
273
+ const [events, total] = await Promise.all([
274
+ storage.findMonitorEvents({ partial, orderDescending: true, paged: { limit, offset } }),
275
+ storage.countMonitorEvents({ partial })
276
+ ]);
277
+ const mapped = events.map(event => ({
278
+ id: event.id,
279
+ created_at: event.created_at,
280
+ updated_at: event.updated_at,
281
+ event: event.event,
282
+ detailsJson: parseJson(event.details),
283
+ detailsPretty: prettyJson(event.details)
284
+ }));
285
+ const selected = mapped.find(event => event.id === selectedId) || mapped[0] || null;
286
+ return {
287
+ total,
288
+ offset,
289
+ limit,
290
+ selectedId: selected === null || selected === void 0 ? void 0 : selected.id,
291
+ hasNewer: offset > 0,
292
+ hasOlder: offset + mapped.length < total,
293
+ events: mapped,
294
+ selected
295
+ };
296
+ }
297
+ async function reviewUtxosByIdentityKey(context, requestedBy, userInput, mode) {
298
+ const storage = await getStorage(context);
299
+ const task = getReviewUtxosTask(context);
300
+ const identityKey = await resolveIdentityKeyFromInput(context, userInput);
301
+ const log = await task.reviewByIdentityKey(identityKey, mode);
302
+ await storage.insertMonitorEvent({
303
+ created_at: new Date(),
304
+ updated_at: new Date(),
305
+ id: 0,
306
+ event: 'AdminReviewUtxos',
307
+ details: JSON.stringify({ requestedBy, identityKey, mode, log })
308
+ });
309
+ return {
310
+ requestedBy,
311
+ identityKey,
312
+ mode,
313
+ log
314
+ };
315
+ }
316
+ async function getReqDetail(context, provenTxReqId) {
317
+ const storage = await getStorage(context);
318
+ const req = (await storage.findProvenTxReqs({ partial: { provenTxReqId } }))[0];
319
+ if (!req)
320
+ throw new Error(`ProvenTxReq ${provenTxReqId} not found`);
321
+ const txs = req.txid
322
+ ? await storage.findTransactions({ partial: { txid: req.txid }, noRawTx: false, orderDescending: true })
323
+ : [];
324
+ return {
325
+ req,
326
+ reqHistory: parseJson(req.history),
327
+ reqNotify: parseJson(req.notify),
328
+ rawTxHex: toHex(req.rawTx),
329
+ inputBeefHex: toHex(req.inputBEEF),
330
+ decodedRawTx: decodeRawTx(req.rawTx),
331
+ transactions: txs.map(tx => ({
332
+ ...tx,
333
+ rawTxHex: toHex(tx.rawTx),
334
+ inputBeefHex: toHex(tx.inputBEEF)
335
+ }))
336
+ };
337
+ }
338
+ async function rebroadcastReq(context, provenTxReqId, provider, requestedBy) {
339
+ var _a;
340
+ const storage = await getStorage(context);
341
+ const req = (await storage.findProvenTxReqs({ partial: { provenTxReqId } }))[0];
342
+ if (!(req === null || req === void 0 ? void 0 : req.rawTx))
343
+ throw new Error(`ProvenTxReq ${provenTxReqId} is missing rawTx`);
344
+ const services = (_a = context.daemon.setup) === null || _a === void 0 ? void 0 : _a.services;
345
+ if (!(services instanceof Services_1.Services)) {
346
+ throw new Error('Manual rebroadcast requires monitor services to be a Services instance.');
347
+ }
348
+ const rawTxHex = toHex(req.rawTx);
349
+ let result;
350
+ switch (provider) {
351
+ case 'taal':
352
+ result = await services.arcTaal.postRawTx(rawTxHex, [req.txid]);
353
+ break;
354
+ case 'woc':
355
+ result = await services.whatsonchain.postRawTx(rawTxHex);
356
+ break;
357
+ default:
358
+ throw new Error(`Unsupported provider "${provider}". Use "taal" or "woc".`);
359
+ }
360
+ await storage.insertMonitorEvent({
361
+ created_at: new Date(),
362
+ updated_at: new Date(),
363
+ id: 0,
364
+ event: 'AdminRebroadcast',
365
+ details: JSON.stringify({ requestedBy, provider, provenTxReqId, txid: req.txid, result })
366
+ });
367
+ return {
368
+ provider,
369
+ provenTxReqId,
370
+ txid: req.txid,
371
+ rawTxHex,
372
+ result
373
+ };
374
+ }
375
+ class AdminServer {
376
+ constructor(context) {
377
+ this.context = context;
378
+ this.app = express();
379
+ this.setupRoutes();
380
+ }
381
+ getSdkBundlePath() {
382
+ const sdkMainPath = require.resolve('@bsv/sdk');
383
+ return path_1.default.resolve(path_1.default.dirname(sdkMainPath), '../umd/bundle.js');
384
+ }
385
+ setupRoutes() {
386
+ this.app.use(express.json({ limit: '5mb' }));
387
+ this.app.use((req, res, next) => {
388
+ res.header('Access-Control-Allow-Origin', '*');
389
+ res.header('Access-Control-Allow-Headers', '*');
390
+ res.header('Access-Control-Allow-Methods', '*');
391
+ if (req.method === 'OPTIONS')
392
+ return res.sendStatus(200);
393
+ next();
394
+ });
395
+ this.app.get('/healthz', (_req, res) => {
396
+ res.json({ ok: true, chain: this.context.config.chain });
397
+ });
398
+ this.app.get('/admin/assets/bsv-sdk.js', (_req, res) => {
399
+ res.type('application/javascript').sendFile(this.getSdkBundlePath());
400
+ });
401
+ this.app.get('/admin', (_req, res) => {
402
+ res.type('text/html').send((0, adminUi_1.renderAdminPage)());
403
+ });
404
+ if (!this.context.authWallet || this.context.config.adminIdentityKeys.length === 0) {
405
+ this.app.use((_req, res) => {
406
+ res
407
+ .status(503)
408
+ .type('text/plain')
409
+ .send('Admin server requires ADMIN_IDENTITY_KEYS and a running monitor runtime.');
410
+ });
411
+ return;
412
+ }
413
+ this.app.use(createAuthMiddleware({
414
+ wallet: this.context.authWallet
415
+ }));
416
+ this.app.use('/admin/api', this.requireAdmin.bind(this));
417
+ this.app.get('/admin/api/stats', async (req, res) => {
418
+ const storage = await getStorage(this.context);
419
+ const stats = await storage.adminStats(req.auth.identityKey);
420
+ const formattedStats = {
421
+ satoshisDefaultDayFormatted: formatSatoshis(stats.satoshisDefaultDay),
422
+ satoshisDefaultWeekFormatted: formatSatoshis(stats.satoshisDefaultWeek),
423
+ satoshisDefaultMonthFormatted: formatSatoshis(stats.satoshisDefaultMonth),
424
+ satoshisDefaultTotalFormatted: formatSatoshis(stats.satoshisDefaultTotal),
425
+ satoshisOtherDayFormatted: formatSatoshis(stats.satoshisOtherDay),
426
+ satoshisOtherWeekFormatted: formatSatoshis(stats.satoshisOtherWeek),
427
+ satoshisOtherMonthFormatted: formatSatoshis(stats.satoshisOtherMonth),
428
+ satoshisOtherTotalFormatted: formatSatoshis(stats.satoshisOtherTotal)
429
+ };
430
+ const reqsTotal = await storage.countProvenTxReqs({ partial: {} });
431
+ const mergedStats = { ...stats, ...formattedStats, reqsTotal };
432
+ res.json({
433
+ requestedBy: req.auth.identityKey,
434
+ stats: mergedStats,
435
+ statsLog: toAdminStatsLog(stats)
436
+ });
437
+ });
438
+ this.app.get('/admin/api/events', async (req, res) => {
439
+ const storage = await getStorage(this.context);
440
+ const limit = Math.min(asNumber(req.query.limit, 20), 200);
441
+ const offset = Math.max(asNumber(req.query.offset, 0), 0);
442
+ const event = typeof req.query.event === 'string' && req.query.event.trim() ? req.query.event.trim() : undefined;
443
+ const partial = event ? { event } : {};
444
+ const [events, total] = await Promise.all([
445
+ storage.findMonitorEvents({ partial, orderDescending: true, paged: { limit, offset } }),
446
+ storage.countMonitorEvents({ partial })
447
+ ]);
448
+ res.json({
449
+ total,
450
+ events: events.map(item => ({
451
+ ...item,
452
+ detailsJson: parseJson(item.details),
453
+ detailsPretty: prettyJson(item.details)
454
+ }))
455
+ });
456
+ });
457
+ this.app.get('/admin/api/tasks', async (_req, res) => {
458
+ var _a;
459
+ const monitor = (_a = this.context.daemon.setup) === null || _a === void 0 ? void 0 : _a.monitor;
460
+ if (!monitor)
461
+ throw new Error('Monitor is not available.');
462
+ res.json({
463
+ tasks: [
464
+ ...monitor._tasks.map(task => ({ name: task.name, kind: 'scheduled' })),
465
+ ...monitor._otherTasks.map(task => ({ name: task.name, kind: 'manual' }))
466
+ ]
467
+ });
468
+ });
469
+ this.app.get('/admin/api/users', async (req, res) => {
470
+ res.json(await queryUsers(this.context, req.query || {}));
471
+ });
472
+ this.app.get('/admin/api/call-history', async (req, res) => {
473
+ res.json(await queryMonitorCallHistory(this.context, req.query || {}));
474
+ });
475
+ this.app.post('/admin/api/tasks/:name/run', async (req, res) => {
476
+ var _a;
477
+ const monitor = (_a = this.context.daemon.setup) === null || _a === void 0 ? void 0 : _a.monitor;
478
+ const storage = await getStorage(this.context);
479
+ if (!monitor)
480
+ throw new Error('Monitor is not available.');
481
+ const name = String(req.params.name);
482
+ const log = await monitor.runTask(name);
483
+ await storage.insertMonitorEvent({
484
+ created_at: new Date(),
485
+ updated_at: new Date(),
486
+ id: 0,
487
+ event: 'AdminTaskRun',
488
+ details: JSON.stringify({ requestedBy: req.auth.identityKey, taskName: name, log })
489
+ });
490
+ res.json({ task: name, log });
491
+ });
492
+ this.app.post('/admin/api/review-utxos', async (req, res) => {
493
+ var _a, _b;
494
+ const userInput = typeof ((_a = req.body) === null || _a === void 0 ? void 0 : _a.identityKey) === 'string' ? req.body.identityKey.trim() : '';
495
+ if (!userInput)
496
+ throw new Error('identityKey or userId is required.');
497
+ const mode = normalizeReviewMode((_b = req.body) === null || _b === void 0 ? void 0 : _b.mode);
498
+ res.json(await reviewUtxosByIdentityKey(this.context, req.auth.identityKey, userInput, mode));
499
+ });
500
+ this.app.get('/admin/api/proven-tx-reqs/review', async (req, res) => {
501
+ res.json(await queryReqReview(this.context, req.query || {}));
502
+ });
503
+ this.app.get('/admin/api/proven-tx-reqs/:id', async (req, res) => {
504
+ res.json(await getReqDetail(this.context, asNumber(req.params.id, -1)));
505
+ });
506
+ this.app.get('/admin/api/proven-tx-reqs/:id/decode', async (req, res) => {
507
+ const detail = await getReqDetail(this.context, asNumber(req.params.id, -1));
508
+ res.json({
509
+ provenTxReqId: detail.req.provenTxReqId,
510
+ txid: detail.req.txid,
511
+ rawTxHex: detail.rawTxHex,
512
+ decodedRawTx: detail.decodedRawTx
513
+ });
514
+ });
515
+ this.app.post('/admin/api/proven-tx-reqs/:id/rebroadcast', async (req, res) => {
516
+ var _a;
517
+ const provider = typeof ((_a = req.body) === null || _a === void 0 ? void 0 : _a.provider) === 'string' ? req.body.provider : 'taal';
518
+ res.json(await rebroadcastReq(this.context, asNumber(req.params.id, -1), provider, req.auth.identityKey));
519
+ });
520
+ this.app.use((error, _req, res, _next) => {
521
+ const e = sdk.WalletError.fromUnknown(error);
522
+ res.status(500).json({ error: { code: e.code, message: e.message, description: e.description } });
523
+ });
524
+ }
525
+ requireAdmin(req, _res, next) {
526
+ var _a;
527
+ const identityKey = (_a = req.auth) === null || _a === void 0 ? void 0 : _a.identityKey;
528
+ if (!identityKey || !this.context.config.adminIdentityKeys.includes(identityKey)) {
529
+ next(new Error('Authenticated user is not an allowed monitor admin.'));
530
+ return;
531
+ }
532
+ next();
533
+ }
534
+ start() {
535
+ this.server = this.app.listen(this.context.config.adminPort, this.context.config.adminHost, () => {
536
+ console.log(`Monitor admin listening at http://${this.context.config.adminHost}:${this.context.config.adminPort}/admin`);
537
+ });
538
+ }
539
+ async close() {
540
+ if (!this.server)
541
+ return;
542
+ await new Promise(resolve => this.server.close(() => resolve()));
543
+ this.server = undefined;
544
+ }
545
+ }
546
+ exports.AdminServer = AdminServer;
547
+ //# sourceMappingURL=adminServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminServer.js","sourceRoot":"","sources":["../../../../src/storage/adminServer/adminServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function renderAdminPage(): string;
2
+ //# sourceMappingURL=adminUi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adminUi.d.ts","sourceRoot":"","sources":["../../../../src/storage/adminServer/adminUi.ts"],"names":[],"mappings":"AAAA,wBAAgB,eAAe,IAAI,MAAM,CA2/BxC"}