@bsv/wallet-toolbox-client 1.2.4 → 1.2.6
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.
- package/out/src/Setup.d.ts +329 -0
- package/out/src/Setup.d.ts.map +1 -0
- package/out/src/Setup.js +394 -0
- package/out/src/Setup.js.map +1 -0
- package/out/src/index.all.d.ts +19 -0
- package/out/src/index.all.d.ts.map +1 -0
- package/out/src/index.all.js +58 -0
- package/out/src/index.all.js.map +1 -0
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js +3 -0
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/MonitorDaemon.d.ts +30 -0
- package/out/src/monitor/MonitorDaemon.d.ts.map +1 -0
- package/out/src/monitor/MonitorDaemon.js +134 -0
- package/out/src/monitor/MonitorDaemon.js.map +1 -0
- package/out/src/monitor/tasks/TaskUnFail.d.ts +40 -0
- package/out/src/monitor/tasks/TaskUnFail.d.ts.map +1 -0
- package/out/src/monitor/tasks/TaskUnFail.js +145 -0
- package/out/src/monitor/tasks/TaskUnFail.js.map +1 -0
- package/out/src/sdk/types.d.ts +3 -1
- package/out/src/sdk/types.d.ts.map +1 -1
- package/out/src/sdk/types.js.map +1 -1
- package/out/src/services/providers/echangeRates.d.ts.map +1 -1
- package/out/src/services/providers/echangeRates.js +6 -6
- package/out/src/services/providers/echangeRates.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts +176 -0
- package/out/src/storage/StorageKnex.d.ts.map +1 -0
- package/out/src/storage/StorageKnex.js +1017 -0
- package/out/src/storage/StorageKnex.js.map +1 -0
- package/out/src/storage/StorageProvider.js +2 -2
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/index.all.d.ts +11 -0
- package/out/src/storage/index.all.d.ts.map +1 -0
- package/out/src/storage/index.all.js +50 -0
- package/out/src/storage/index.all.js.map +1 -0
- package/out/src/storage/methods/listActions.d.ts +5 -0
- package/out/src/storage/methods/listActions.d.ts.map +1 -0
- package/out/src/storage/methods/listActions.js +162 -0
- package/out/src/storage/methods/listActions.js.map +1 -0
- package/out/src/storage/methods/listOutputs.d.ts +5 -0
- package/out/src/storage/methods/listOutputs.d.ts.map +1 -0
- package/out/src/storage/methods/listOutputs.js +300 -0
- package/out/src/storage/methods/listOutputs.js.map +1 -0
- package/out/src/storage/methods/purgeData.d.ts +4 -0
- package/out/src/storage/methods/purgeData.d.ts.map +1 -0
- package/out/src/storage/methods/purgeData.js +207 -0
- package/out/src/storage/methods/purgeData.js.map +1 -0
- package/out/src/storage/methods/reviewStatus.d.ts +9 -0
- package/out/src/storage/methods/reviewStatus.d.ts.map +1 -0
- package/out/src/storage/methods/reviewStatus.js +73 -0
- package/out/src/storage/methods/reviewStatus.js.map +1 -0
- package/out/src/storage/remoting/StorageServer.d.ts +39 -0
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -0
- package/out/src/storage/remoting/StorageServer.js +220 -0
- package/out/src/storage/remoting/StorageServer.js.map +1 -0
- package/out/src/storage/schema/KnexMigrations.d.ts +39 -0
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -0
- package/out/src/storage/schema/KnexMigrations.js +395 -0
- package/out/src/storage/schema/KnexMigrations.js.map +1 -0
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts +71 -0
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -0
- package/out/src/storage/sync/StorageMySQLDojoReader.js +609 -0
- package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -0
- package/out/src/storage/sync/index.d.ts +2 -0
- package/out/src/storage/sync/index.d.ts.map +1 -0
- package/out/src/storage/sync/index.js +18 -0
- package/out/src/storage/sync/index.js.map +1 -0
- package/out/src/utility/index.all.d.ts +7 -0
- package/out/src/utility/index.all.d.ts.map +1 -0
- package/out/src/utility/index.all.js +23 -0
- package/out/src/utility/index.all.js.map +1 -0
- package/out/src/utility/utilityHelpers.buffer.d.ts +18 -0
- package/out/src/utility/utilityHelpers.buffer.d.ts.map +1 -0
- package/out/src/utility/utilityHelpers.buffer.js +45 -0
- package/out/src/utility/utilityHelpers.buffer.js.map +1 -0
- package/package.json +2 -3
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listOutputs = listOutputs;
|
|
4
|
+
const sdk_1 = require("@bsv/sdk");
|
|
5
|
+
const index_client_1 = require("../../index.client");
|
|
6
|
+
const basketToSpecOp = {
|
|
7
|
+
[index_client_1.sdk.specOpWalletBalance]: {
|
|
8
|
+
name: 'totalOutputsIsWalletBalance',
|
|
9
|
+
useBasket: 'default',
|
|
10
|
+
ignoreLimit: true,
|
|
11
|
+
resultFromOutputs: async (s, auth, vargs, specOpTags, outputs) => {
|
|
12
|
+
let totalOutputs = 0;
|
|
13
|
+
for (const o of outputs)
|
|
14
|
+
totalOutputs += o.satoshis;
|
|
15
|
+
return { totalOutputs, outputs: [] };
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
[index_client_1.sdk.specOpInvalidChange]: {
|
|
19
|
+
name: 'invalidChangeOutputs',
|
|
20
|
+
useBasket: 'default',
|
|
21
|
+
ignoreLimit: true,
|
|
22
|
+
includeOutputScripts: true,
|
|
23
|
+
tagsToIntercept: ['release'],
|
|
24
|
+
filterOutputs: async (s, auth, vargs, specOpTags, outputs) => {
|
|
25
|
+
var _a;
|
|
26
|
+
const filteredOutputs = [];
|
|
27
|
+
for (const o of outputs) {
|
|
28
|
+
await s.validateOutputScript(o);
|
|
29
|
+
let ok = false;
|
|
30
|
+
let r;
|
|
31
|
+
if (o.lockingScript && o.lockingScript.length > 0) {
|
|
32
|
+
r = await s.getServices().getUtxoStatus((0, index_client_1.asString)(o.lockingScript), 'script');
|
|
33
|
+
if (r.status === 'success' && r.isUtxo && ((_a = r.details) === null || _a === void 0 ? void 0 : _a.length) > 0) {
|
|
34
|
+
if (r.details.some(d => d.txid === o.txid && d.satoshis === o.satoshis && d.index === o.vout)) {
|
|
35
|
+
ok = true;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
ok = undefined;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
ok = false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
ok = undefined;
|
|
47
|
+
}
|
|
48
|
+
if (ok === false) {
|
|
49
|
+
filteredOutputs.push(o);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
if (specOpTags.indexOf('release') >= 0) {
|
|
53
|
+
for (const o of filteredOutputs) {
|
|
54
|
+
await s.updateOutput(o.outputId, { spendable: false });
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return filteredOutputs;
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
[index_client_1.sdk.specOpSetWalletChangeParams]: {
|
|
61
|
+
name: 'setWalletChangeParams',
|
|
62
|
+
tagsParamsCount: 2,
|
|
63
|
+
resultFromTags: async (s, auth, vargs, specOpTags) => {
|
|
64
|
+
if (specOpTags.length !== 2)
|
|
65
|
+
throw new index_client_1.sdk.WERR_INVALID_PARAMETER('numberOfDesiredUTXOs and minimumDesiredUTXOValue', 'valid');
|
|
66
|
+
const numberOfDesiredUTXOs = (0, index_client_1.verifyInteger)(Number(specOpTags[0]));
|
|
67
|
+
const minimumDesiredUTXOValue = (0, index_client_1.verifyInteger)(Number(specOpTags[1]));
|
|
68
|
+
const basket = (0, index_client_1.verifyOne)(await s.findOutputBaskets({
|
|
69
|
+
partial: { userId: (0, index_client_1.verifyId)(auth.userId), name: 'default' }
|
|
70
|
+
}));
|
|
71
|
+
await s.updateOutputBasket(basket.basketId, {
|
|
72
|
+
numberOfDesiredUTXOs,
|
|
73
|
+
minimumDesiredUTXOValue
|
|
74
|
+
});
|
|
75
|
+
return { totalOutputs: 0, outputs: [] };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
async function listOutputs(dsk, auth, vargs, originator) {
|
|
80
|
+
const trx = undefined;
|
|
81
|
+
const userId = (0, index_client_1.verifyId)(auth.userId);
|
|
82
|
+
const limit = vargs.limit;
|
|
83
|
+
const offset = vargs.offset;
|
|
84
|
+
const k = dsk.toDb(trx);
|
|
85
|
+
const r = {
|
|
86
|
+
totalOutputs: 0,
|
|
87
|
+
outputs: []
|
|
88
|
+
};
|
|
89
|
+
/*
|
|
90
|
+
ListOutputsArgs {
|
|
91
|
+
basket: BasketStringUnder300Bytes
|
|
92
|
+
|
|
93
|
+
tags?: OutputTagStringUnder300Bytes[]
|
|
94
|
+
tagQueryMode?: 'all' | 'any' // default any
|
|
95
|
+
|
|
96
|
+
limit?: PositiveIntegerDefault10Max10000
|
|
97
|
+
offset?: PositiveIntegerOrZero
|
|
98
|
+
}
|
|
99
|
+
*/
|
|
100
|
+
let specOp = undefined;
|
|
101
|
+
let basketId = undefined;
|
|
102
|
+
const basketsById = {};
|
|
103
|
+
if (vargs.basket) {
|
|
104
|
+
let b = vargs.basket;
|
|
105
|
+
specOp = basketToSpecOp[b];
|
|
106
|
+
b = specOp ? (specOp.useBasket ? specOp.useBasket : '') : b;
|
|
107
|
+
if (b) {
|
|
108
|
+
const baskets = await dsk.findOutputBaskets({
|
|
109
|
+
partial: { userId, name: b },
|
|
110
|
+
trx
|
|
111
|
+
});
|
|
112
|
+
if (baskets.length !== 1) {
|
|
113
|
+
// If basket does not exist, result is no outputs.
|
|
114
|
+
return r;
|
|
115
|
+
}
|
|
116
|
+
const basket = baskets[0];
|
|
117
|
+
basketId = basket.basketId;
|
|
118
|
+
basketsById[basketId] = basket;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
let tagIds = [];
|
|
122
|
+
let tags = [...vargs.tags];
|
|
123
|
+
const specOpTags = [];
|
|
124
|
+
if (specOp && specOp.tagsParamsCount) {
|
|
125
|
+
specOpTags.push(...tags.splice(0, Math.min(tags.length, specOp.tagsParamsCount)));
|
|
126
|
+
}
|
|
127
|
+
if (specOp && specOp.tagsToIntercept) {
|
|
128
|
+
// Pull out tags used by current specOp
|
|
129
|
+
const ts = tags;
|
|
130
|
+
tags = [];
|
|
131
|
+
for (const t of ts) {
|
|
132
|
+
if (specOp.tagsToIntercept.length === 0 || specOp.tagsToIntercept.indexOf(t) >= 0) {
|
|
133
|
+
specOpTags.push(t);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
tags.push(t);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
if (specOp && specOp.resultFromTags) {
|
|
141
|
+
const r = await specOp.resultFromTags(dsk, auth, vargs, specOpTags);
|
|
142
|
+
return r;
|
|
143
|
+
}
|
|
144
|
+
if (tags && tags.length > 0) {
|
|
145
|
+
const q = k('output_tags')
|
|
146
|
+
.where({
|
|
147
|
+
userId: userId,
|
|
148
|
+
isDeleted: false
|
|
149
|
+
})
|
|
150
|
+
.whereNotNull('outputTagId')
|
|
151
|
+
.whereIn('tag', vargs.tags)
|
|
152
|
+
.select('outputTagId');
|
|
153
|
+
const r = await q;
|
|
154
|
+
tagIds = r.map(r => r.outputTagId);
|
|
155
|
+
}
|
|
156
|
+
const isQueryModeAll = vargs.tagQueryMode === 'all';
|
|
157
|
+
if (isQueryModeAll && tagIds.length < vargs.tags.length)
|
|
158
|
+
return r;
|
|
159
|
+
const columns = [
|
|
160
|
+
'outputId',
|
|
161
|
+
'transactionId',
|
|
162
|
+
'basketId',
|
|
163
|
+
'spendable',
|
|
164
|
+
'txid',
|
|
165
|
+
'vout',
|
|
166
|
+
'satoshis',
|
|
167
|
+
'lockingScript',
|
|
168
|
+
'customInstructions',
|
|
169
|
+
'outputDescription',
|
|
170
|
+
'spendingDescription',
|
|
171
|
+
'scriptLength',
|
|
172
|
+
'scriptOffset'
|
|
173
|
+
];
|
|
174
|
+
const noTags = tagIds.length === 0;
|
|
175
|
+
const includeSpent = false;
|
|
176
|
+
const txStatusOk = `(select status as tstatus from transactions where transactions.transactionId = outputs.transactionId) in ('completed', 'unproven', 'nosend')`;
|
|
177
|
+
const txStatusOkCteq = `(select status as tstatus from transactions where transactions.transactionId = o.transactionId) in ('completed', 'unproven', 'nosend')`;
|
|
178
|
+
const makeWithTagsQueries = () => {
|
|
179
|
+
let cteqOptions = '';
|
|
180
|
+
if (basketId)
|
|
181
|
+
cteqOptions += ` AND o.basketId = ${basketId}`;
|
|
182
|
+
if (!includeSpent)
|
|
183
|
+
cteqOptions += ` AND o.spendable`;
|
|
184
|
+
const cteq = k.raw(`
|
|
185
|
+
SELECT ${columns.map(c => 'o.' + c).join(',')},
|
|
186
|
+
(SELECT COUNT(*)
|
|
187
|
+
FROM output_tags_map AS m
|
|
188
|
+
WHERE m.OutputId = o.OutputId
|
|
189
|
+
AND m.outputTagId IN (${tagIds.join(',')})
|
|
190
|
+
) AS tc
|
|
191
|
+
FROM outputs AS o
|
|
192
|
+
WHERE o.userId = ${userId} ${cteqOptions} AND ${txStatusOkCteq}
|
|
193
|
+
`);
|
|
194
|
+
const q = k.with('otc', cteq);
|
|
195
|
+
q.from('otc');
|
|
196
|
+
if (isQueryModeAll)
|
|
197
|
+
q.where('tc', tagIds.length);
|
|
198
|
+
else
|
|
199
|
+
q.where('tc', '>', 0);
|
|
200
|
+
const qcount = q.clone();
|
|
201
|
+
q.select(columns);
|
|
202
|
+
qcount.count('outputId as total');
|
|
203
|
+
return { q, qcount };
|
|
204
|
+
};
|
|
205
|
+
const makeWithoutTagsQueries = () => {
|
|
206
|
+
const where = { userId };
|
|
207
|
+
if (basketId)
|
|
208
|
+
where.basketId = basketId;
|
|
209
|
+
if (!includeSpent)
|
|
210
|
+
where.spendable = true;
|
|
211
|
+
const q = k('outputs').where(where).whereRaw(txStatusOk);
|
|
212
|
+
const qcount = q.clone().count('outputId as total');
|
|
213
|
+
return { q, qcount };
|
|
214
|
+
};
|
|
215
|
+
const { q, qcount } = noTags ? makeWithoutTagsQueries() : makeWithTagsQueries();
|
|
216
|
+
// Sort order when limit and offset are possible must be ascending for determinism.
|
|
217
|
+
if (!specOp || !specOp.ignoreLimit)
|
|
218
|
+
q.limit(limit).offset(offset);
|
|
219
|
+
q.orderBy('outputId', 'asc');
|
|
220
|
+
let outputs = await q;
|
|
221
|
+
if (specOp) {
|
|
222
|
+
if (specOp.filterOutputs)
|
|
223
|
+
outputs = await specOp.filterOutputs(dsk, auth, vargs, specOpTags, outputs);
|
|
224
|
+
if (specOp.resultFromOutputs) {
|
|
225
|
+
const r = await specOp.resultFromOutputs(dsk, auth, vargs, specOpTags, outputs);
|
|
226
|
+
return r;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
if (!limit || outputs.length < limit)
|
|
230
|
+
r.totalOutputs = outputs.length;
|
|
231
|
+
else {
|
|
232
|
+
const total = (0, index_client_1.verifyOne)(await qcount)['total'];
|
|
233
|
+
r.totalOutputs = Number(total);
|
|
234
|
+
}
|
|
235
|
+
/*
|
|
236
|
+
ListOutputsArgs {
|
|
237
|
+
include?: 'locking scripts' | 'entire transactions'
|
|
238
|
+
includeCustomInstructions?: BooleanDefaultFalse
|
|
239
|
+
includeTags?: BooleanDefaultFalse
|
|
240
|
+
includeLabels?: BooleanDefaultFalse
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
ListOutputsResult {
|
|
244
|
+
totalOutputs: PositiveIntegerOrZero
|
|
245
|
+
BEEF?: BEEF
|
|
246
|
+
outputs: Array<WalletOutput>
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
WalletOutput {
|
|
250
|
+
satoshis: SatoshiValue
|
|
251
|
+
spendable: boolean
|
|
252
|
+
outpoint: OutpointString
|
|
253
|
+
|
|
254
|
+
customInstructions?: string
|
|
255
|
+
lockingScript?: HexString
|
|
256
|
+
tags?: OutputTagStringUnder300Bytes[]
|
|
257
|
+
labels?: LabelStringUnder300Bytes[]
|
|
258
|
+
}
|
|
259
|
+
*/
|
|
260
|
+
const labelsByTxid = {};
|
|
261
|
+
const beef = new sdk_1.Beef();
|
|
262
|
+
for (const o of outputs) {
|
|
263
|
+
const wo = {
|
|
264
|
+
satoshis: Number(o.satoshis),
|
|
265
|
+
spendable: !!o.spendable,
|
|
266
|
+
outpoint: `${o.txid}.${o.vout}`
|
|
267
|
+
};
|
|
268
|
+
r.outputs.push(wo);
|
|
269
|
+
//if (vargs.includeBasket && o.basketId) {
|
|
270
|
+
// if (!basketsById[o.basketId]) {
|
|
271
|
+
// basketsById[o.basketId] = verifyTruthy(await dsk.findOutputBasketId(o.basketId!, trx))
|
|
272
|
+
// }
|
|
273
|
+
// wo.basket = basketsById[o.basketId].name
|
|
274
|
+
//}
|
|
275
|
+
if (vargs.includeCustomInstructions && o.customInstructions)
|
|
276
|
+
wo.customInstructions = o.customInstructions;
|
|
277
|
+
if (vargs.includeLabels && o.txid) {
|
|
278
|
+
if (labelsByTxid[o.txid] === undefined) {
|
|
279
|
+
labelsByTxid[o.txid] = (await dsk.getLabelsForTransactionId(o.transactionId, trx)).map(l => l.label);
|
|
280
|
+
}
|
|
281
|
+
wo.labels = labelsByTxid[o.txid];
|
|
282
|
+
}
|
|
283
|
+
if (vargs.includeTags) {
|
|
284
|
+
wo.tags = (await dsk.getTagsForOutputId(o.outputId, trx)).map(t => t.tag);
|
|
285
|
+
}
|
|
286
|
+
if (vargs.includeLockingScripts) {
|
|
287
|
+
await dsk.validateOutputScript(o, trx);
|
|
288
|
+
if (o.lockingScript)
|
|
289
|
+
wo.lockingScript = (0, index_client_1.asString)(o.lockingScript);
|
|
290
|
+
}
|
|
291
|
+
if (vargs.includeTransactions && !beef.findTxid(o.txid)) {
|
|
292
|
+
await dsk.getValidBeefForKnownTxid(o.txid, beef, undefined, vargs.knownTxids, trx);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (vargs.includeTransactions) {
|
|
296
|
+
r.BEEF = beef.toBinary();
|
|
297
|
+
}
|
|
298
|
+
return r;
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=listOutputs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listOutputs.js","sourceRoot":"","sources":["../../../../../src/storage/methods/listOutputs.ts"],"names":[],"mappings":";;AAmIA,kCA8OC;AAjXD,kCAAyG;AAEzG,qDAAsF;AAyCtF,MAAM,cAAc,GAA2B;IAC7C,CAAC,kBAAG,CAAC,mBAAmB,CAAC,EAAE;QACzB,IAAI,EAAE,6BAA6B;QACnC,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,IAAI;QACjB,iBAAiB,EAAE,KAAK,EACtB,CAAc,EACd,IAAgB,EAChB,KAA2B,EAC3B,UAAoB,EACpB,OAAsB,EACM,EAAE;YAC9B,IAAI,YAAY,GAAG,CAAC,CAAA;YACpB,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,YAAY,IAAI,CAAC,CAAC,QAAQ,CAAA;YACnD,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QACtC,CAAC;KACF;IACD,CAAC,kBAAG,CAAC,mBAAmB,CAAC,EAAE;QACzB,IAAI,EAAE,sBAAsB;QAC5B,SAAS,EAAE,SAAS;QACpB,WAAW,EAAE,IAAI;QACjB,oBAAoB,EAAE,IAAI;QAC1B,eAAe,EAAE,CAAC,SAAS,CAAC;QAC5B,aAAa,EAAE,KAAK,EAClB,CAAc,EACd,IAAgB,EAChB,KAA2B,EAC3B,UAAoB,EACpB,OAAsB,EACE,EAAE;;YAC1B,MAAM,eAAe,GAAkB,EAAE,CAAA;YACzC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;gBACxB,MAAM,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAA;gBAC/B,IAAI,EAAE,GAAwB,KAAK,CAAA;gBACnC,IAAI,CAA0B,CAAA;gBAC9B,IAAI,CAAC,CAAC,aAAa,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAClD,CAAC,GAAG,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC,aAAa,CAAC,IAAA,uBAAQ,EAAC,CAAC,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,CAAA;oBAC5E,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,IAAI,CAAA,MAAA,CAAC,CAAC,OAAO,0CAAE,MAAM,IAAG,CAAC,EAAE,CAAC;wBAChE,IAAI,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;4BAC9F,EAAE,GAAG,IAAI,CAAA;wBACX,CAAC;6BAAM,CAAC;4BACN,EAAE,GAAG,SAAS,CAAA;wBAChB,CAAC;oBACH,CAAC;yBAAM,CAAC;wBACN,EAAE,GAAG,KAAK,CAAA;oBACZ,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,EAAE,GAAG,SAAS,CAAA;gBAChB,CAAC;gBACD,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;oBACjB,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;gBACzB,CAAC;YACH,CAAC;YACD,IAAI,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;oBAChC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAA;gBACxD,CAAC;YACH,CAAC;YACD,OAAO,eAAe,CAAA;QACxB,CAAC;KACF;IACD,CAAC,kBAAG,CAAC,2BAA2B,CAAC,EAAE;QACjC,IAAI,EAAE,uBAAuB;QAC7B,eAAe,EAAE,CAAC;QAClB,cAAc,EAAE,KAAK,EACnB,CAAc,EACd,IAAgB,EAChB,KAA2B,EAC3B,UAAoB,EACQ,EAAE;YAC9B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;gBACzB,MAAM,IAAI,kBAAG,CAAC,sBAAsB,CAAC,kDAAkD,EAAE,OAAO,CAAC,CAAA;YACnG,MAAM,oBAAoB,GAAW,IAAA,4BAAa,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACzE,MAAM,uBAAuB,GAAW,IAAA,4BAAa,EAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YAC5E,MAAM,MAAM,GAAG,IAAA,wBAAS,EACtB,MAAM,CAAC,CAAC,iBAAiB,CAAC;gBACxB,OAAO,EAAE,EAAE,MAAM,EAAE,IAAA,uBAAQ,EAAC,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE;aAC5D,CAAC,CACH,CAAA;YACD,MAAM,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,QAAQ,EAAE;gBAC1C,oBAAoB;gBACpB,uBAAuB;aACxB,CAAC,CAAA;YACF,OAAO,EAAE,YAAY,EAAE,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAA;QACzC,CAAC;KACF;CACF,CAAA;AAEM,KAAK,UAAU,WAAW,CAC/B,GAAgB,EAChB,IAAgB,EAChB,KAA+B,EAC/B,UAAoD;IAEpD,MAAM,GAAG,GAA6B,SAAS,CAAA;IAC/C,MAAM,MAAM,GAAG,IAAA,uBAAQ,EAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAA;IACzB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAE3B,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEvB,MAAM,CAAC,GAAsB;QAC3B,YAAY,EAAE,CAAC;QACf,OAAO,EAAE,EAAE;KACZ,CAAA;IAED;;;;;;;;;;QAUI;IAEJ,IAAI,MAAM,GAAuB,SAAS,CAAA;IAC1C,IAAI,QAAQ,GAAuB,SAAS,CAAA;IAC5C,MAAM,WAAW,GAAsC,EAAE,CAAA;IACzD,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAA;QACpB,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC,CAAA;QAC1B,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QAC3D,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,iBAAiB,CAAC;gBAC1C,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;gBAC5B,GAAG;aACJ,CAAC,CAAA;YACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACzB,kDAAkD;gBAClD,OAAO,CAAC,CAAA;YACV,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;YACzB,QAAQ,GAAG,MAAM,CAAC,QAAS,CAAA;YAC3B,WAAW,CAAC,QAAS,CAAC,GAAG,MAAM,CAAA;QACjC,CAAC;IACH,CAAC;IAED,IAAI,MAAM,GAAa,EAAE,CAAA;IACzB,IAAI,IAAI,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IAC1B,MAAM,UAAU,GAAa,EAAE,CAAA;IAC/B,IAAI,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACrC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IACnF,CAAC;IACD,IAAI,MAAM,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;QACrC,uCAAuC;QACvC,MAAM,EAAE,GAAG,IAAI,CAAA;QACf,IAAI,GAAG,EAAE,CAAA;QACT,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClF,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACpB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACd,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,MAAM,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAA;QACnE,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAiB,aAAa,CAAC;aACvC,KAAK,CAAC;YACL,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,KAAK;SACjB,CAAC;aACD,YAAY,CAAC,aAAa,CAAC;aAC3B,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC;aAC1B,MAAM,CAAC,aAAa,CAAC,CAAA;QACxB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAA;QACjB,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAY,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,KAAK,KAAK,CAAA;IACnD,IAAI,cAAc,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAA;IAEjE,MAAM,OAAO,GAAa;QACxB,UAAU;QACV,eAAe;QACf,UAAU;QACV,WAAW;QACX,MAAM;QACN,MAAM;QACN,UAAU;QACV,eAAe;QACf,oBAAoB;QACpB,mBAAmB;QACnB,qBAAqB;QACrB,cAAc;QACd,cAAc;KACf,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,CAAA;IAClC,MAAM,YAAY,GAAG,KAAK,CAAA;IAE1B,MAAM,UAAU,GAAG,8IAA8I,CAAA;IACjK,MAAM,cAAc,GAAG,wIAAwI,CAAA;IAE/J,MAAM,mBAAmB,GAAG,GAAG,EAAE;QAC/B,IAAI,WAAW,GAAG,EAAE,CAAA;QACpB,IAAI,QAAQ;YAAE,WAAW,IAAI,qBAAqB,QAAQ,EAAE,CAAA;QAC5D,IAAI,CAAC,YAAY;YAAE,WAAW,IAAI,kBAAkB,CAAA;QACpD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC;qBACF,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;;;;4CAIb,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;;;+BAG7B,MAAM,IAAI,WAAW,QAAQ,cAAc;aAC7D,CAAC,CAAA;QAEV,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAC7B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACb,IAAI,cAAc;YAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;;YAC3C,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAA;QAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;QACxB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QACjB,MAAM,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACjC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,sBAAsB,GAAG,GAAG,EAAE;QAClC,MAAM,KAAK,GAAyB,EAAE,MAAM,EAAE,CAAA;QAC9C,IAAI,QAAQ;YAAE,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAA;QACvC,IAAI,CAAC,YAAY;YAAE,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;QACzC,MAAM,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAA;QACnD,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,CAAC,CAAA;IAED,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,mBAAmB,EAAE,CAAA;IAE/E,mFAAmF;IACnF,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW;QAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAEjE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;IAE5B,IAAI,OAAO,GAAkB,MAAM,CAAC,CAAA;IAEpC,IAAI,MAAM,EAAE,CAAC;QACX,IAAI,MAAM,CAAC,aAAa;YAAE,OAAO,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;QACrG,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;YAC/E,OAAO,CAAC,CAAA;QACV,CAAC;IACH,CAAC;IAED,IAAI,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,GAAG,KAAK;QAAE,CAAC,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAA;SAChE,CAAC;QACJ,MAAM,KAAK,GAAG,IAAA,wBAAS,EAAC,MAAM,MAAM,CAAC,CAAC,OAAO,CAAC,CAAA;QAC9C,CAAC,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;QAwBI;IAEJ,MAAM,YAAY,GAA6B,EAAE,CAAA;IAEjD,MAAM,IAAI,GAAG,IAAI,UAAI,EAAE,CAAA;IAEvB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,EAAE,GAAiB;YACvB,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC5B,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS;YACxB,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,EAAE;SAChC,CAAA;QACD,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAClB,0CAA0C;QAC1C,qCAAqC;QACrC,gGAAgG;QAChG,OAAO;QACP,8CAA8C;QAC9C,GAAG;QACH,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,CAAC,kBAAkB;YAAE,EAAE,CAAC,kBAAkB,GAAG,CAAC,CAAC,kBAAkB,CAAA;QACzG,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,IAAI,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;gBACvC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;YACtG,CAAC;YACD,EAAE,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClC,CAAC;QACD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACtB,EAAE,CAAC,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;QAC3E,CAAC;QACD,IAAI,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAChC,MAAM,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;YACtC,IAAI,CAAC,CAAC,aAAa;gBAAE,EAAE,CAAC,aAAa,GAAG,IAAA,uBAAQ,EAAC,CAAC,CAAC,aAAa,CAAC,CAAA;QACnE,CAAC;QACD,IAAI,KAAK,CAAC,mBAAmB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAK,CAAC,EAAE,CAAC;YACzD,MAAM,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,IAAK,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACrF,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,mBAAmB,EAAE,CAAC;QAC9B,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;IAC1B,CAAC;IAED,OAAO,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purgeData.d.ts","sourceRoot":"","sources":["../../../../../src/storage/methods/purgeData.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,wBAAsB,SAAS,CAC7B,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,GAAG,CAAC,WAAW,EACvB,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,GACjB,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAkO3B"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.purgeData = purgeData;
|
|
4
|
+
const sdk_1 = require("@bsv/sdk");
|
|
5
|
+
const index_client_1 = require("../../index.client");
|
|
6
|
+
async function purgeData(storage, params, trx) {
|
|
7
|
+
const r = { count: 0, log: '' };
|
|
8
|
+
const defaultAge = 1000 * 60 * 60 * 24 * 14;
|
|
9
|
+
const runPurgeQuery = async (pq) => {
|
|
10
|
+
try {
|
|
11
|
+
pq.sql = pq.q.toString();
|
|
12
|
+
const count = await pq.q;
|
|
13
|
+
if (count > 0) {
|
|
14
|
+
r.count += count;
|
|
15
|
+
r.log += `${count} ${pq.log}\n`;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
catch (eu) {
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
20
|
+
const e = index_client_1.sdk.WalletError.fromUnknown(eu);
|
|
21
|
+
throw eu;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
if (params.purgeCompleted) {
|
|
25
|
+
const age = params.purgeCompletedAge || defaultAge;
|
|
26
|
+
const before = toSqlWhereDate(new Date(Date.now() - age));
|
|
27
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
+
const qs = [];
|
|
29
|
+
// select * from transactions where updated_at < '2024-08-20' and status = 'completed' and not provenTxId is null and (not truncatedExternalInputs is null or not beef is null or not rawTx is null)
|
|
30
|
+
qs.push({
|
|
31
|
+
log: 'conpleted transactions purged of transient data',
|
|
32
|
+
q: storage
|
|
33
|
+
.toDb(trx)('transactions')
|
|
34
|
+
.update({
|
|
35
|
+
inputBEEF: null,
|
|
36
|
+
rawTx: null
|
|
37
|
+
})
|
|
38
|
+
.where('updated_at', '<', before)
|
|
39
|
+
.where('status', 'completed')
|
|
40
|
+
.whereNotNull('provenTxId')
|
|
41
|
+
.where(function () {
|
|
42
|
+
this.orWhereNotNull('inputBEEF');
|
|
43
|
+
this.orWhereNotNull('rawTx');
|
|
44
|
+
})
|
|
45
|
+
});
|
|
46
|
+
const completedReqs = await storage
|
|
47
|
+
.toDb(trx)('proven_tx_reqs')
|
|
48
|
+
.select('provenTxReqId')
|
|
49
|
+
.where('updated_at', '<', before)
|
|
50
|
+
.where('status', 'completed')
|
|
51
|
+
.whereNotNull('provenTxId')
|
|
52
|
+
.where('notified', 1);
|
|
53
|
+
const completedReqIds = completedReqs.map(o => o.provenTxReqId);
|
|
54
|
+
if (completedReqIds.length > 0) {
|
|
55
|
+
qs.push({
|
|
56
|
+
log: 'completed proven_tx_reqs deleted',
|
|
57
|
+
q: storage.toDb(trx)('proven_tx_reqs').whereIn('provenTxReqId', completedReqIds).delete()
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
for (const q of qs)
|
|
61
|
+
await runPurgeQuery(q);
|
|
62
|
+
}
|
|
63
|
+
if (params.purgeFailed) {
|
|
64
|
+
const age = params.purgeFailedAge || defaultAge;
|
|
65
|
+
const before = toSqlWhereDate(new Date(Date.now() - age));
|
|
66
|
+
const qs = [];
|
|
67
|
+
const failedTxsQ = storage
|
|
68
|
+
.toDb(trx)('transactions')
|
|
69
|
+
.select('transactionId')
|
|
70
|
+
.where('updated_at', '<', before)
|
|
71
|
+
.where('status', 'failed');
|
|
72
|
+
const txs = await failedTxsQ;
|
|
73
|
+
const failedTxIds = txs.map(tx => tx.transactionId);
|
|
74
|
+
await deleteTransactions(failedTxIds, qs, 'failed', true);
|
|
75
|
+
const invalidReqs = await storage
|
|
76
|
+
.toDb(trx)('proven_tx_reqs')
|
|
77
|
+
.select('provenTxReqId')
|
|
78
|
+
.where('updated_at', '<', before)
|
|
79
|
+
.where('status', 'invalid');
|
|
80
|
+
const invalidReqIds = invalidReqs.map(o => o.provenTxReqId);
|
|
81
|
+
if (invalidReqIds.length > 0)
|
|
82
|
+
qs.push({
|
|
83
|
+
log: 'invalid proven_tx_reqs deleted',
|
|
84
|
+
q: storage.toDb(trx)('proven_tx_reqs').whereIn('provenTxReqId', invalidReqIds).delete()
|
|
85
|
+
});
|
|
86
|
+
const doubleSpendReqs = await storage
|
|
87
|
+
.toDb(trx)('proven_tx_reqs')
|
|
88
|
+
.select('provenTxReqId')
|
|
89
|
+
.where('updated_at', '<', before)
|
|
90
|
+
.where('status', 'doubleSpend');
|
|
91
|
+
const doubleSpendReqIds = doubleSpendReqs.map(o => o.provenTxReqId);
|
|
92
|
+
if (doubleSpendReqIds.length > 0)
|
|
93
|
+
qs.push({
|
|
94
|
+
log: 'doubleSpend proven_tx_reqs deleted',
|
|
95
|
+
q: storage.toDb(trx)('proven_tx_reqs').whereIn('provenTxReqId', doubleSpendReqIds).delete()
|
|
96
|
+
});
|
|
97
|
+
for (const q of qs)
|
|
98
|
+
await runPurgeQuery(q);
|
|
99
|
+
}
|
|
100
|
+
if (params.purgeSpent) {
|
|
101
|
+
const age = params.purgeSpentAge || defaultAge;
|
|
102
|
+
const before = toSqlWhereDate(new Date(Date.now() - age));
|
|
103
|
+
const beef = new sdk_1.Beef();
|
|
104
|
+
const utxos = await storage.findOutputs({
|
|
105
|
+
partial: { spendable: true },
|
|
106
|
+
txStatus: ['sending', 'unproven', 'completed', 'nosend']
|
|
107
|
+
});
|
|
108
|
+
for (const utxo of utxos) {
|
|
109
|
+
// Figure out all the txids required to prove the validity of this utxo and merge proofs into beef.
|
|
110
|
+
const options = {
|
|
111
|
+
mergeToBeef: beef,
|
|
112
|
+
ignoreServices: true
|
|
113
|
+
};
|
|
114
|
+
if (utxo.txid)
|
|
115
|
+
await storage.getBeefForTransaction(utxo.txid, options);
|
|
116
|
+
}
|
|
117
|
+
const proofTxids = {};
|
|
118
|
+
for (const btx of beef.txs)
|
|
119
|
+
proofTxids[btx.txid] = true;
|
|
120
|
+
let qs = [];
|
|
121
|
+
const spentTxsQ = storage
|
|
122
|
+
.toDb(trx)('transactions')
|
|
123
|
+
.where('updated_at', '<', before)
|
|
124
|
+
.where('status', 'completed')
|
|
125
|
+
.whereRaw(`not exists(select outputId from outputs as o where o.transactionId = transactions.transactionId and o.spendable = 1)`);
|
|
126
|
+
const txs = await spentTxsQ;
|
|
127
|
+
// Save any spent txid still needed to prove a utxo:
|
|
128
|
+
const nptxs = txs.filter(t => !proofTxids[t.txid || '']);
|
|
129
|
+
let spentTxIds = nptxs.map(tx => tx.transactionId);
|
|
130
|
+
if (spentTxIds.length > 0) {
|
|
131
|
+
const update = {
|
|
132
|
+
spentBy: null
|
|
133
|
+
};
|
|
134
|
+
qs.push({
|
|
135
|
+
log: 'spent outputs no longer tracked by spentBy',
|
|
136
|
+
q: storage
|
|
137
|
+
.toDb(trx)('outputs')
|
|
138
|
+
.update(storage.validatePartialForUpdate(update, undefined, ['spendable']))
|
|
139
|
+
.where('spendable', false)
|
|
140
|
+
.whereIn('spentBy', spentTxIds)
|
|
141
|
+
});
|
|
142
|
+
await deleteTransactions(spentTxIds, qs, 'spent', false);
|
|
143
|
+
for (const q of qs)
|
|
144
|
+
await runPurgeQuery(q);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Delete proven_txs no longer referenced by remaining transactions.
|
|
148
|
+
const qs = [];
|
|
149
|
+
qs.push({
|
|
150
|
+
log: 'orphan proven_txs deleted',
|
|
151
|
+
q: storage
|
|
152
|
+
.toDb(trx)('proven_txs')
|
|
153
|
+
.whereRaw(`not exists(select * from transactions as t where t.txid = proven_txs.txid or t.provenTxId = proven_txs.provenTxId)`)
|
|
154
|
+
.whereRaw(`not exists(select * from proven_tx_reqs as r where r.txid = proven_txs.txid or r.provenTxId = proven_txs.provenTxId)`)
|
|
155
|
+
.delete()
|
|
156
|
+
});
|
|
157
|
+
for (const q of qs)
|
|
158
|
+
await runPurgeQuery(q);
|
|
159
|
+
return r;
|
|
160
|
+
async function deleteTransactions(transactionIds, qs, reason, markNotSpentBy) {
|
|
161
|
+
if (transactionIds.length > 0) {
|
|
162
|
+
const outputs = await storage
|
|
163
|
+
.toDb(trx)('outputs')
|
|
164
|
+
.select('outputId')
|
|
165
|
+
.whereIn('transactionId', transactionIds);
|
|
166
|
+
const outputIds = outputs.map(o => o.outputId);
|
|
167
|
+
if (outputIds.length > 0) {
|
|
168
|
+
qs.push({
|
|
169
|
+
log: `${reason} output_tags_map deleted`,
|
|
170
|
+
q: storage.toDb(trx)('output_tags_map').whereIn('outputId', outputIds).delete()
|
|
171
|
+
});
|
|
172
|
+
qs.push({
|
|
173
|
+
log: `${reason} outputs deleted`,
|
|
174
|
+
q: storage.toDb(trx)('outputs').whereIn('outputId', outputIds).delete()
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
qs.push({
|
|
178
|
+
log: `${reason} tx_labels_map deleted`,
|
|
179
|
+
q: storage.toDb(trx)('tx_labels_map').whereIn('transactionId', transactionIds).delete()
|
|
180
|
+
});
|
|
181
|
+
qs.push({
|
|
182
|
+
log: `${reason} commissions deleted`,
|
|
183
|
+
q: storage.toDb(trx)('commissions').whereIn('transactionId', transactionIds).delete()
|
|
184
|
+
});
|
|
185
|
+
if (markNotSpentBy) {
|
|
186
|
+
qs.push({
|
|
187
|
+
log: 'unspent outputs updated to spendable',
|
|
188
|
+
q: storage
|
|
189
|
+
.toDb(trx)('outputs')
|
|
190
|
+
.update({ spendable: true, spentBy: null })
|
|
191
|
+
.whereIn('spentBy', transactionIds)
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
qs.push({
|
|
195
|
+
log: `${reason} transactions deleted`,
|
|
196
|
+
q: storage.toDb(trx)('transactions').whereIn('transactionId', transactionIds).delete()
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
function toSqlWhereDate(d) {
|
|
202
|
+
let s = d.toISOString();
|
|
203
|
+
s = s.replace('T', ' ');
|
|
204
|
+
s = s.replace('Z', '');
|
|
205
|
+
return s;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=purgeData.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purgeData.js","sourceRoot":"","sources":["../../../../../src/storage/methods/purgeData.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { sdk } from '../../index.client';
|
|
2
|
+
import { StorageKnex } from '../StorageKnex';
|
|
3
|
+
export declare function reviewStatus(storage: StorageKnex, args: {
|
|
4
|
+
agedLimit: Date;
|
|
5
|
+
trx?: sdk.TrxToken;
|
|
6
|
+
}): Promise<{
|
|
7
|
+
log: string;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=reviewStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewStatus.d.ts","sourceRoot":"","sources":["../../../../../src/storage/methods/reviewStatus.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAE5C,wBAAsB,YAAY,CAChC,OAAO,EAAE,WAAW,EACpB,IAAI,EAAE;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,GAAG,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAA;CAAE,GAC5C,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAyE1B"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.reviewStatus = reviewStatus;
|
|
4
|
+
const index_client_1 = require("../../index.client");
|
|
5
|
+
async function reviewStatus(storage, args) {
|
|
6
|
+
const r = { log: '' };
|
|
7
|
+
const runReviewStatusQuery = async (pq) => {
|
|
8
|
+
try {
|
|
9
|
+
pq.sql = pq.q.toString();
|
|
10
|
+
const count = await pq.q;
|
|
11
|
+
if (count > 0) {
|
|
12
|
+
r.log += `${count} ${pq.log}\n`;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
catch (eu) {
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
17
|
+
const e = index_client_1.sdk.WalletError.fromUnknown(eu);
|
|
18
|
+
throw eu;
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
const k = storage.toDb(args.trx);
|
|
22
|
+
const qs = [];
|
|
23
|
+
qs.push({
|
|
24
|
+
log: `transactions updated to status of 'failed' where provenTxReq with matching txid is 'invalid'`,
|
|
25
|
+
/*
|
|
26
|
+
UPDATE transactions SET status = 'failed'
|
|
27
|
+
WHERE exists(select 1 from proven_tx_reqs as r where transactions.txid = r.txid and r.status = 'invalid')
|
|
28
|
+
*/
|
|
29
|
+
q: k('transactions')
|
|
30
|
+
.update({ status: 'failed' })
|
|
31
|
+
.whereNot({ status: 'failed' })
|
|
32
|
+
.whereExists(function () {
|
|
33
|
+
this.select(k.raw(1))
|
|
34
|
+
.from('proven_tx_reqs as r')
|
|
35
|
+
.whereRaw(`transactions.txid = r.txid and r.status = 'invalid'`);
|
|
36
|
+
})
|
|
37
|
+
});
|
|
38
|
+
qs.push({
|
|
39
|
+
log: `outputs updated to spendable where spentBy is a transaction with status 'failed'`,
|
|
40
|
+
/*
|
|
41
|
+
UPDATE outputs SET spentBy = null, spendable = 1
|
|
42
|
+
where exists(select 1 from transactions as t where outputs.spentBy = t.transactionId and t.status = 'failed')
|
|
43
|
+
*/
|
|
44
|
+
q: k('outputs')
|
|
45
|
+
.update({ spentBy: null, spendable: true })
|
|
46
|
+
.whereExists(function () {
|
|
47
|
+
this.select(k.raw(1))
|
|
48
|
+
.from('transactions as t')
|
|
49
|
+
.whereRaw(`outputs.spentBy = t.transactionId and t.status = 'failed'`);
|
|
50
|
+
})
|
|
51
|
+
});
|
|
52
|
+
qs.push({
|
|
53
|
+
log: `transactions updated with provenTxId and status of 'completed' where provenTx with matching txid exists`,
|
|
54
|
+
/*
|
|
55
|
+
UPDATE transactions SET status = 'completed', provenTxId = p.provenTxId
|
|
56
|
+
FROM proven_txs p
|
|
57
|
+
WHERE transactions.txid = p.txid AND transactions.provenTxId IS NULL
|
|
58
|
+
*/
|
|
59
|
+
q: k('transactions')
|
|
60
|
+
.update({
|
|
61
|
+
status: 'completed',
|
|
62
|
+
provenTxId: k.raw('(SELECT provenTxId FROM proven_txs AS p WHERE transactions.txid = p.txid)')
|
|
63
|
+
})
|
|
64
|
+
.whereNull('provenTxId')
|
|
65
|
+
.whereExists(function () {
|
|
66
|
+
this.select(k.raw(1)).from('proven_txs as p').whereRaw('transactions.txid = p.txid');
|
|
67
|
+
})
|
|
68
|
+
});
|
|
69
|
+
for (const q of qs)
|
|
70
|
+
await runReviewStatusQuery(q);
|
|
71
|
+
return r;
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=reviewStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reviewStatus.js","sourceRoot":"","sources":["../../../../../src/storage/methods/reviewStatus.ts"],"names":[],"mappings":";;AAMA,oCA4EC;AA/ED,qDAAwC;AAGjC,KAAK,UAAU,YAAY,CAChC,OAAoB,EACpB,IAA6C;IAE7C,MAAM,CAAC,GAAoB,EAAE,GAAG,EAAE,EAAE,EAAE,CAAA;IAEtC,MAAM,oBAAoB,GAAG,KAAK,EAAoB,EAAqB,EAAiB,EAAE;QAC5F,IAAI,CAAC;YACH,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;YACxB,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,CAAC,CAAA;YACxB,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC,GAAG,IAAI,CAAA;YACjC,CAAC;QACH,CAAC;QAAC,OAAO,EAAW,EAAE,CAAC;YACrB,6DAA6D;YAC7D,MAAM,CAAC,GAAG,kBAAG,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YACzC,MAAM,EAAE,CAAA;QACV,CAAC;IACH,CAAC,CAAA;IAED,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAEhC,MAAM,EAAE,GAAwB,EAAE,CAAA;IAElC,EAAE,CAAC,IAAI,CAAC;QACN,GAAG,EAAE,8FAA8F;QACnG;;;cAGM;QACN,CAAC,EAAE,CAAC,CAAmB,cAAc,CAAC;aACnC,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;aAC5B,QAAQ,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;aAC9B,WAAW,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAClB,IAAI,CAAC,qBAAqB,CAAC;iBAC3B,QAAQ,CAAC,qDAAqD,CAAC,CAAA;QACpE,CAAC,CAAC;KACL,CAAC,CAAA;IAEF,EAAE,CAAC,IAAI,CAAC;QACN,GAAG,EAAE,kFAAkF;QACvF;;;cAGM;QACN,CAAC,EAAE,CAAC,CAAc,SAAS,CAAC;aACzB,MAAM,CAAC,EAAE,OAAO,EAAE,IAA4B,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aAClE,WAAW,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAClB,IAAI,CAAC,mBAAmB,CAAC;iBACzB,QAAQ,CAAC,2DAA2D,CAAC,CAAA;QAC1E,CAAC,CAAC;KACL,CAAC,CAAA;IAEF,EAAE,CAAC,IAAI,CAAC;QACN,GAAG,EAAE,yGAAyG;QAC9G;;;;cAIM;QACN,CAAC,EAAE,CAAC,CAAmB,cAAc,CAAC;aACnC,MAAM,CAAC;YACN,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,CAAC,CAAC,GAAG,CAAC,2EAA2E,CAAC;SAC/F,CAAC;aACD,SAAS,CAAC,YAAY,CAAC;aACvB,WAAW,CAAC;YACX,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAA;QACtF,CAAC,CAAC;KACL,CAAC,CAAA;IAEF,KAAK,MAAM,CAAC,IAAI,EAAE;QAAE,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAAA;IAEjD,OAAO,CAAC,CAAA;AACV,CAAC"}
|