@bsv/wallet-toolbox 1.6.2 → 1.6.4

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 (85) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/docs/client.md +315 -2500
  3. package/docs/services.md +15 -4
  4. package/docs/wallet.md +315 -2500
  5. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts.map +1 -1
  6. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +1 -2
  7. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
  8. package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts +0 -3
  9. package/mobile/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
  10. package/mobile/out/src/services/chaintracker/chaintracks/index.client.js +0 -3
  11. package/mobile/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
  12. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  13. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +2 -3
  14. package/mobile/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  15. package/mobile/package-lock.json +2 -2
  16. package/mobile/package.json +1 -1
  17. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts.map +1 -1
  18. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +1 -2
  19. package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
  20. package/out/src/services/chaintracker/chaintracks/index.all.d.ts +3 -0
  21. package/out/src/services/chaintracker/chaintracks/index.all.d.ts.map +1 -1
  22. package/out/src/services/chaintracker/chaintracks/index.all.js +3 -0
  23. package/out/src/services/chaintracker/chaintracks/index.all.js.map +1 -1
  24. package/out/src/services/chaintracker/chaintracks/index.client.d.ts +0 -3
  25. package/out/src/services/chaintracker/chaintracks/index.client.d.ts.map +1 -1
  26. package/out/src/services/chaintracker/chaintracks/index.client.js +0 -3
  27. package/out/src/services/chaintracker/chaintracks/index.client.js.map +1 -1
  28. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
  29. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +2 -3
  30. package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
  31. package/out/src/storage/__test/getBeefForTransaction.test.js.map +1 -1
  32. package/out/test/storage/idb/update.test.js +1 -1
  33. package/out/test/storage/idb/update.test.js.map +1 -1
  34. package/out/tsconfig.all.tsbuildinfo +1 -1
  35. package/package.json +1 -1
  36. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.ts +1 -2
  37. package/src/services/chaintracker/chaintracks/index.all.ts +4 -0
  38. package/src/services/chaintracker/chaintracks/index.client.ts +0 -3
  39. package/src/services/chaintracker/chaintracks/util/BulkFileDataManager.ts +2 -3
  40. package/src/storage/__test/getBeefForTransaction.test.ts +2 -5
  41. package/test/storage/idb/update.test.ts +1 -1
  42. package/mobile/out/src/Setup.d.ts +0 -267
  43. package/mobile/out/src/Setup.d.ts.map +0 -1
  44. package/mobile/out/src/Setup.js +0 -408
  45. package/mobile/out/src/Setup.js.map +0 -1
  46. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts +0 -30
  47. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts.map +0 -1
  48. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.js +0 -149
  49. package/mobile/out/src/services/chaintracker/chaintracks/ChaintracksService.js.map +0 -1
  50. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts +0 -23
  51. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +0 -1
  52. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js +0 -57
  53. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +0 -1
  54. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts +0 -16
  55. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +0 -1
  56. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js +0 -53
  57. package/mobile/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +0 -1
  58. package/mobile/out/src/storage/StorageKnex.d.ts +0 -179
  59. package/mobile/out/src/storage/StorageKnex.d.ts.map +0 -1
  60. package/mobile/out/src/storage/StorageKnex.js +0 -1215
  61. package/mobile/out/src/storage/StorageKnex.js.map +0 -1
  62. package/mobile/out/src/storage/methods/listActionsKnex.d.ts +0 -6
  63. package/mobile/out/src/storage/methods/listActionsKnex.d.ts.map +0 -1
  64. package/mobile/out/src/storage/methods/listActionsKnex.js +0 -198
  65. package/mobile/out/src/storage/methods/listActionsKnex.js.map +0 -1
  66. package/mobile/out/src/storage/methods/listOutputsKnex.d.ts +0 -6
  67. package/mobile/out/src/storage/methods/listOutputsKnex.d.ts.map +0 -1
  68. package/mobile/out/src/storage/methods/listOutputsKnex.js +0 -241
  69. package/mobile/out/src/storage/methods/listOutputsKnex.js.map +0 -1
  70. package/mobile/out/src/storage/methods/purgeData.d.ts +0 -4
  71. package/mobile/out/src/storage/methods/purgeData.d.ts.map +0 -1
  72. package/mobile/out/src/storage/methods/purgeData.js +0 -207
  73. package/mobile/out/src/storage/methods/purgeData.js.map +0 -1
  74. package/mobile/out/src/storage/methods/reviewStatus.d.ts +0 -20
  75. package/mobile/out/src/storage/methods/reviewStatus.d.ts.map +0 -1
  76. package/mobile/out/src/storage/methods/reviewStatus.js +0 -84
  77. package/mobile/out/src/storage/methods/reviewStatus.js.map +0 -1
  78. package/mobile/out/src/storage/schema/KnexMigrations.d.ts +0 -39
  79. package/mobile/out/src/storage/schema/KnexMigrations.d.ts.map +0 -1
  80. package/mobile/out/src/storage/schema/KnexMigrations.js +0 -410
  81. package/mobile/out/src/storage/schema/KnexMigrations.js.map +0 -1
  82. package/mobile/out/test/utils/TestUtilsWalletStorage.d.ts +0 -522
  83. package/mobile/out/test/utils/TestUtilsWalletStorage.d.ts.map +0 -1
  84. package/mobile/out/test/utils/TestUtilsWalletStorage.js +0 -1956
  85. package/mobile/out/test/utils/TestUtilsWalletStorage.js.map +0 -1
@@ -1,410 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.KnexMigrations = void 0;
4
- exports.determineDBType = determineDBType;
5
- const StorageKnex_1 = require("../StorageKnex");
6
- const WalletError_1 = require("../../sdk/WalletError");
7
- const WERR_errors_1 = require("../../sdk/WERR_errors");
8
- class KnexMigrations {
9
- /**
10
- * @param chain
11
- * @param storageName human readable name for this storage instance
12
- * @param maxOutputScriptLength limit for scripts kept in outputs table, longer scripts will be pulled from rawTx
13
- */
14
- constructor(chain, storageName, storageIdentityKey, maxOutputScriptLength) {
15
- this.chain = chain;
16
- this.storageName = storageName;
17
- this.storageIdentityKey = storageIdentityKey;
18
- this.maxOutputScriptLength = maxOutputScriptLength;
19
- this.migrations = {};
20
- this.migrations = this.setupMigrations(chain, storageName, storageIdentityKey, maxOutputScriptLength);
21
- }
22
- async getMigrations() {
23
- return Object.keys(this.migrations).sort();
24
- }
25
- getMigrationName(migration) {
26
- return migration;
27
- }
28
- async getMigration(migration) {
29
- return this.migrations[migration];
30
- }
31
- async getLatestMigration() {
32
- const ms = await this.getMigrations();
33
- return ms[ms.length - 1];
34
- }
35
- static async latestMigration() {
36
- const km = new KnexMigrations('test', 'dummy', '1'.repeat(64), 100);
37
- return await km.getLatestMigration();
38
- }
39
- setupMigrations(chain, storageName, storageIdentityKey, maxOutputScriptLength) {
40
- const migrations = {};
41
- const addTimeStamps = (knex, table, dbtype) => {
42
- if (dbtype === 'MySQL') {
43
- table.timestamp('created_at', { precision: 3 }).defaultTo(knex.fn.now(3)).notNullable();
44
- table.timestamp('updated_at', { precision: 3 }).defaultTo(knex.fn.now(3)).notNullable();
45
- }
46
- else {
47
- table.timestamp('created_at', { precision: 3 }).defaultTo(knex.fn.now()).notNullable();
48
- table.timestamp('updated_at', { precision: 3 }).defaultTo(knex.fn.now()).notNullable();
49
- }
50
- };
51
- migrations['2025-05-13-001 add monitor events event index'] = {
52
- async up(knex) {
53
- await knex.schema.alterTable('monitor_events', table => {
54
- table.index('event');
55
- });
56
- },
57
- async down(knex) {
58
- await knex.schema.alterTable('monitor_events', table => {
59
- table.dropIndex('event');
60
- });
61
- }
62
- };
63
- migrations['2025-03-03-001 descriptions to 2000'] = {
64
- async up(knex) {
65
- await knex.schema.alterTable('transactions', table => {
66
- table.string('description', 2048).alter();
67
- });
68
- await knex.schema.alterTable('outputs', table => {
69
- table.string('outputDescription', 2048).alter();
70
- table.string('spendingDescription', 2048).alter();
71
- });
72
- },
73
- async down(knex) { }
74
- };
75
- migrations['2025-03-01-001 reset req history'] = {
76
- async up(knex) {
77
- const storage = new StorageKnex_1.StorageKnex({
78
- ...StorageKnex_1.StorageKnex.defaultOptions(),
79
- chain: chain,
80
- knex
81
- });
82
- const settings = await storage.makeAvailable();
83
- await knex.raw(`update proven_tx_reqs set history = '{}'`);
84
- },
85
- async down(knex) {
86
- // No way back...
87
- }
88
- };
89
- migrations['2025-02-28-001 derivations to 200'] = {
90
- async up(knex) {
91
- await knex.schema.alterTable('outputs', table => {
92
- table.string('derivationPrefix', 200).alter();
93
- table.string('derivationSuffix', 200).alter();
94
- });
95
- },
96
- async down(knex) {
97
- await knex.schema.alterTable('outputs', table => {
98
- table.string('derivationPrefix', 32).alter();
99
- table.string('derivationSuffix', 32).alter();
100
- });
101
- }
102
- };
103
- migrations['2025-02-22-001 nonNULL activeStorage'] = {
104
- async up(knex) {
105
- const storage = new StorageKnex_1.StorageKnex({
106
- ...StorageKnex_1.StorageKnex.defaultOptions(),
107
- chain: chain,
108
- knex
109
- });
110
- const settings = await storage.makeAvailable();
111
- await knex.raw(`update users set activeStorage = '${settings.storageIdentityKey}' where activeStorage is NULL`);
112
- await knex.schema.alterTable('users', table => {
113
- table.string('activeStorage').notNullable().alter();
114
- });
115
- },
116
- async down(knex) {
117
- await knex.schema.alterTable('users', table => {
118
- table.string('activeStorage').nullable().alter();
119
- });
120
- }
121
- };
122
- migrations['2025-01-21-001 add activeStorage to users'] = {
123
- async up(knex) {
124
- await knex.schema.alterTable('users', table => {
125
- table.string('activeStorage', 130).nullable().defaultTo(null);
126
- });
127
- },
128
- async down(knex) {
129
- await knex.schema.alterTable('users', table => {
130
- table.dropColumn('activeStorage');
131
- });
132
- }
133
- };
134
- migrations['2024-12-26-001 initial migration'] = {
135
- async up(knex) {
136
- const dbtype = await determineDBType(knex);
137
- await knex.schema.createTable('proven_txs', table => {
138
- addTimeStamps(knex, table, dbtype);
139
- table.increments('provenTxId').notNullable();
140
- table.string('txid', 64).notNullable().unique();
141
- table.integer('height').unsigned().notNullable();
142
- table.integer('index').unsigned().notNullable();
143
- table.binary('merklePath').notNullable();
144
- table.binary('rawTx').notNullable();
145
- table.string('blockHash', 64).notNullable();
146
- table.string('merkleRoot', 64).notNullable();
147
- });
148
- await knex.schema.createTable('proven_tx_reqs', table => {
149
- addTimeStamps(knex, table, dbtype);
150
- table.increments('provenTxReqId');
151
- table.integer('provenTxId').unsigned().references('provenTxId').inTable('proven_txs');
152
- table.string('status', 16).notNullable().defaultTo('unknown');
153
- table.integer('attempts').unsigned().defaultTo(0).notNullable();
154
- table.boolean('notified').notNullable().defaultTo(false);
155
- table.string('txid', 64).notNullable().unique();
156
- table.string('batch', 64).nullable();
157
- table.text('history', 'longtext').notNullable().defaultTo('{}');
158
- table.text('notify', 'longtext').notNullable().defaultTo('{}');
159
- table.binary('rawTx').notNullable();
160
- table.binary('inputBEEF');
161
- table.index('status');
162
- table.index('batch');
163
- });
164
- await knex.schema.createTable('users', table => {
165
- addTimeStamps(knex, table, dbtype);
166
- table.increments('userId');
167
- table.string('identityKey', 130).notNullable().unique();
168
- });
169
- await knex.schema.createTable('certificates', table => {
170
- addTimeStamps(knex, table, dbtype);
171
- table.increments('certificateId');
172
- table.integer('userId').unsigned().references('userId').inTable('users').notNullable();
173
- table.string('serialNumber', 100).notNullable();
174
- table.string('type', 100).notNullable();
175
- table.string('certifier', 100).notNullable();
176
- table.string('subject', 100).notNullable();
177
- table.string('verifier', 100).nullable();
178
- table.string('revocationOutpoint', 100).notNullable();
179
- table.string('signature', 255).notNullable();
180
- table.boolean('isDeleted').notNullable().defaultTo(false);
181
- table.unique(['userId', 'type', 'certifier', 'serialNumber']);
182
- });
183
- await knex.schema.createTable('certificate_fields', table => {
184
- addTimeStamps(knex, table, dbtype);
185
- table.integer('userId').unsigned().references('userId').inTable('users').notNullable();
186
- table.integer('certificateId').unsigned().references('certificateId').inTable('certificates').notNullable();
187
- table.string('fieldName', 100).notNullable();
188
- table.string('fieldValue').notNullable();
189
- table.string('masterKey', 255).defaultTo('').notNullable();
190
- table.unique(['fieldName', 'certificateId']);
191
- });
192
- await knex.schema.createTable('output_baskets', table => {
193
- addTimeStamps(knex, table, dbtype);
194
- table.increments('basketId');
195
- table.integer('userId').unsigned().references('userId').inTable('users').notNullable();
196
- table.string('name', 300).notNullable();
197
- table.integer('numberOfDesiredUTXOs', 6).defaultTo(6).notNullable();
198
- table.integer('minimumDesiredUTXOValue', 15).defaultTo(10000).notNullable();
199
- table.boolean('isDeleted').notNullable().defaultTo(false);
200
- table.unique(['name', 'userId']);
201
- });
202
- await knex.schema.createTable('transactions', table => {
203
- addTimeStamps(knex, table, dbtype);
204
- table.increments('transactionId');
205
- table.integer('userId').unsigned().references('userId').inTable('users').notNullable();
206
- table.integer('provenTxId').unsigned().references('provenTxId').inTable('proven_txs');
207
- table.string('status', 64).notNullable();
208
- table.string('reference', 64).notNullable().unique();
209
- table.boolean('isOutgoing').notNullable();
210
- table.bigint('satoshis').defaultTo(0).notNullable();
211
- table.integer('version').unsigned().nullable();
212
- table.integer('lockTime').unsigned().nullable();
213
- table.string('description', 500).notNullable();
214
- table.string('txid', 64);
215
- table.binary('inputBEEF');
216
- table.binary('rawTx');
217
- table.index('status');
218
- });
219
- await knex.schema.createTable('commissions', table => {
220
- addTimeStamps(knex, table, dbtype);
221
- table.increments('commissionId');
222
- table.integer('userId').unsigned().references('userId').inTable('users').notNullable();
223
- table
224
- .integer('transactionId')
225
- .unsigned()
226
- .references('transactionId')
227
- .inTable('transactions')
228
- .notNullable()
229
- .unique();
230
- table.integer('satoshis', 15).notNullable();
231
- table.string('keyOffset', 130).notNullable();
232
- table.boolean('isRedeemed').defaultTo(false).notNullable();
233
- table.binary('lockingScript').notNullable();
234
- table.index('transactionId');
235
- });
236
- await knex.schema.createTable('outputs', table => {
237
- addTimeStamps(knex, table, dbtype);
238
- table.increments('outputId');
239
- table.integer('userId').unsigned().references('userId').inTable('users').notNullable();
240
- table.integer('transactionId').unsigned().references('transactionId').inTable('transactions').notNullable();
241
- table.integer('basketId').unsigned().references('basketId').inTable('output_baskets');
242
- table.boolean('spendable').defaultTo(false).notNullable();
243
- table.boolean('change').defaultTo(false).notNullable();
244
- table.integer('vout', 10).notNullable();
245
- table.bigint('satoshis').notNullable();
246
- table.string('providedBy', 130).notNullable();
247
- table.string('purpose', 20).notNullable();
248
- table.string('type', 50).notNullable();
249
- table.string('outputDescription', 300); // allow extra room for encryption and imports
250
- table.string('txid', 64);
251
- table.string('senderIdentityKey', 130);
252
- table.string('derivationPrefix', 32);
253
- table.string('derivationSuffix', 32);
254
- table.string('customInstructions', 2500);
255
- table.integer('spentBy').unsigned().references('transactionId').inTable('transactions');
256
- table.integer('sequenceNumber').unsigned().nullable();
257
- table.string('spendingDescription');
258
- table.bigint('scriptLength').unsigned().nullable();
259
- table.bigint('scriptOffset').unsigned().nullable();
260
- table.binary('lockingScript');
261
- table.unique(['transactionId', 'vout', 'userId']);
262
- });
263
- await knex.schema.createTable('output_tags', table => {
264
- addTimeStamps(knex, table, dbtype);
265
- table.increments('outputTagId');
266
- table.integer('userId').unsigned().references('userId').inTable('users').notNullable();
267
- table.string('tag', 150).notNullable();
268
- table.boolean('isDeleted').notNullable().defaultTo(false);
269
- table.unique(['tag', 'userId']);
270
- });
271
- await knex.schema.createTable('output_tags_map', table => {
272
- addTimeStamps(knex, table, dbtype);
273
- table.integer('outputTagId').unsigned().references('outputTagId').inTable('output_tags').notNullable();
274
- table.integer('outputId').unsigned().references('outputId').inTable('outputs').notNullable();
275
- table.boolean('isDeleted').notNullable().defaultTo(false);
276
- table.unique(['outputTagId', 'outputId']);
277
- table.index('outputId');
278
- });
279
- await knex.schema.createTable('tx_labels', table => {
280
- addTimeStamps(knex, table, dbtype);
281
- table.increments('txLabelId');
282
- table.integer('userId').unsigned().references('userId').inTable('users').notNullable();
283
- table.string('label', 300).notNullable();
284
- table.boolean('isDeleted').notNullable().defaultTo(false);
285
- table.unique(['label', 'userId']);
286
- });
287
- await knex.schema.createTable('tx_labels_map', table => {
288
- addTimeStamps(knex, table, dbtype);
289
- table.integer('txLabelId').unsigned().references('txLabelId').inTable('tx_labels').notNullable();
290
- table.integer('transactionId').unsigned().references('transactionId').inTable('transactions').notNullable();
291
- table.boolean('isDeleted').notNullable().defaultTo(false);
292
- table.unique(['txLabelId', 'transactionId']);
293
- table.index('transactionId');
294
- });
295
- await knex.schema.createTable('monitor_events', table => {
296
- addTimeStamps(knex, table, dbtype);
297
- table.increments('id');
298
- table.string('event', 64).notNullable();
299
- table.text('details', 'longtext').nullable();
300
- });
301
- await knex.schema.createTable('settings', table => {
302
- addTimeStamps(knex, table, dbtype);
303
- table.string('storageIdentityKey', 130).notNullable();
304
- table.string('storageName', 128).notNullable();
305
- table.string('chain', 10).notNullable();
306
- table.string('dbtype', 10).notNullable();
307
- table.integer('maxOutputScript', 15).notNullable();
308
- });
309
- await knex.schema.createTable('sync_states', table => {
310
- addTimeStamps(knex, table, dbtype);
311
- table.increments('syncStateId');
312
- table.integer('userId').unsigned().notNullable().references('userId').inTable('users');
313
- table.string('storageIdentityKey', 130).notNullable().defaultTo('');
314
- table.string('storageName').notNullable();
315
- table.string('status').notNullable().defaultTo('unknown');
316
- table.boolean('init').notNullable().defaultTo(false);
317
- table.string('refNum', 100).notNullable().unique();
318
- table.text('syncMap', 'longtext').notNullable();
319
- table.dateTime('when');
320
- table.bigint('satoshis');
321
- table.text('errorLocal', 'longtext');
322
- table.text('errorOther', 'longtext');
323
- table.index('status');
324
- table.index('refNum');
325
- });
326
- if (dbtype === 'MySQL') {
327
- await knex.raw('ALTER TABLE proven_tx_reqs MODIFY COLUMN rawTx LONGBLOB');
328
- await knex.raw('ALTER TABLE proven_tx_reqs MODIFY COLUMN inputBEEF LONGBLOB');
329
- await knex.raw('ALTER TABLE proven_txs MODIFY COLUMN rawTx LONGBLOB');
330
- await knex.raw('ALTER TABLE transactions MODIFY COLUMN rawTx LONGBLOB');
331
- await knex.raw('ALTER TABLE transactions MODIFY COLUMN inputBEEF LONGBLOB');
332
- await knex.raw('ALTER TABLE outputs MODIFY COLUMN lockingScript LONGBLOB');
333
- }
334
- else {
335
- await knex.schema.alterTable('proven_tx_reqs', table => {
336
- table.binary('rawTx', 10000000).alter();
337
- table.binary('beef', 10000000).alter();
338
- });
339
- await knex.schema.alterTable('outputs', table => {
340
- table.binary('lockingScript', 10000000).alter();
341
- });
342
- await knex.schema.alterTable('proven_txs', table => {
343
- table.binary('rawTx', 10000000).alter();
344
- });
345
- await knex.schema.alterTable('transactions', table => {
346
- table.binary('rawTx', 10000000).alter();
347
- table.binary('beef', 10000000).alter();
348
- });
349
- }
350
- await knex('settings').insert({
351
- storageIdentityKey,
352
- storageName,
353
- chain,
354
- dbtype,
355
- maxOutputScript: maxOutputScriptLength
356
- });
357
- },
358
- async down(knex) {
359
- await knex.schema.dropTable('sync_states');
360
- await knex.schema.dropTable('settings');
361
- await knex.schema.dropTable('monitor_events');
362
- await knex.schema.dropTable('certificate_fields');
363
- await knex.schema.dropTable('certificates');
364
- await knex.schema.dropTable('commissions');
365
- await knex.schema.dropTable('output_tags_map');
366
- await knex.schema.dropTable('output_tags');
367
- await knex.schema.dropTable('outputs');
368
- await knex.schema.dropTable('output_baskets');
369
- await knex.schema.dropTable('tx_labels_map');
370
- await knex.schema.dropTable('tx_labels');
371
- await knex.schema.dropTable('transactions');
372
- await knex.schema.dropTable('users');
373
- await knex.schema.dropTable('proven_tx_reqs');
374
- await knex.schema.dropTable('proven_txs');
375
- }
376
- };
377
- return migrations;
378
- }
379
- }
380
- exports.KnexMigrations = KnexMigrations;
381
- /**
382
- * @param knex
383
- * @returns {DBType} connected database engine variant
384
- */
385
- async function determineDBType(knex) {
386
- try {
387
- const q = `SELECT
388
- CASE
389
- WHEN (SELECT VERSION() LIKE '%MariaDB%') = 1 THEN 'Unknown'
390
- WHEN (SELECT VERSION()) IS NOT NULL THEN 'MySQL'
391
- ELSE 'Unknown'
392
- END AS database_type;`;
393
- let r = await knex.raw(q);
394
- if (!r[0]['database_type'])
395
- r = r[0];
396
- if (r['rows'])
397
- r = r.rows;
398
- const dbtype = r[0].database_type;
399
- if (dbtype === 'Unknown')
400
- throw new WERR_errors_1.WERR_NOT_IMPLEMENTED(`Attempting to create database on unsuported engine.`);
401
- return dbtype;
402
- }
403
- catch (eu) {
404
- const e = WalletError_1.WalletError.fromUnknown(eu);
405
- if (e.code === 'SQLITE_ERROR')
406
- return 'SQLite';
407
- throw new WERR_errors_1.WERR_NOT_IMPLEMENTED(`Attempting to create database on unsuported engine.`);
408
- }
409
- }
410
- //# sourceMappingURL=KnexMigrations.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"KnexMigrations.js","sourceRoot":"","sources":["../../../../../src/storage/schema/KnexMigrations.ts"],"names":[],"mappings":"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"}