@bsv/wallet-toolbox 2.0.5-beta.0 → 2.0.5

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/CHANGELOG.md CHANGED
@@ -4,6 +4,10 @@ This document captures the history of significant changes to the wallet-toolbox
4
4
  The git commit history contains the details but is unable to draw
5
5
  attention to changes that materially alter behavior or extend functionality.
6
6
 
7
+ ## wallet-toolbox 2.0.5
8
+
9
+ Change sqlite support to better-sqlite3, all tests resolved. Support for existing databases confirmed.
10
+
7
11
  ## wallet-toolbox 2.0.4
8
12
 
9
13
  - Added better group permissions and PACT protocol support
package/docs/client.md CHANGED
@@ -19589,19 +19589,6 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
19589
19589
  chain: "test",
19590
19590
  validated: true
19591
19591
  },
19592
- {
19593
- chain: "test",
19594
- count: 95262,
19595
- fileHash: "BvNO9eeMwCaN1Xsx8PQLMJ+YiqF9FrNe+9WnnEo9B44=",
19596
- fileName: "testNet_16.headers",
19597
- firstHeight: 1600000,
19598
- lastChainWork: "00000000000000000000000000000000000000000000015814b84c3f9834ef93",
19599
- lastHash: "000000000ca922c841cb7fedd8f012ebc27b17991c9b00a8fb7ca4b1b2b648d3",
19600
- prevChainWork: "000000000000000000000000000000000000000000000156c3b84396da4e60b9",
19601
- prevHash: "00000000000005504bfd1a3ce4688c30c86740390102b6cd464a2fb5e0e3fed1",
19602
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
19603
- validated: true
19604
- },
19605
19592
  {
19606
19593
  chain: "test",
19607
19594
  count: 100000,
@@ -19612,7 +19599,8 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
19612
19599
  lastHash: "000000000001561e0532f48401f822f5c0d8797e364b1d612a317eca6983ca36",
19613
19600
  prevChainWork: "000000000000000000000000000000000000000000000156c3b84396da4e60b9",
19614
19601
  prevHash: "00000000000005504bfd1a3ce4688c30c86740390102b6cd464a2fb5e0e3fed1",
19615
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders"
19602
+ sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
19603
+ validated: true
19616
19604
  },
19617
19605
  {
19618
19606
  chain: "test",
@@ -19624,7 +19612,8 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
19624
19612
  lastHash: "00000000086ca64c1f351b76c63f944b7b6b553e0c66fce3d9c1e91cddf9d067",
19625
19613
  prevChainWork: "00000000000000000000000000000000000000000000015814b9c82dabd4ea74",
19626
19614
  prevHash: "000000000001561e0532f48401f822f5c0d8797e364b1d612a317eca6983ca36",
19627
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders"
19615
+ sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
19616
+ validated: true
19628
19617
  },
19629
19618
  {
19630
19619
  sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
package/docs/services.md CHANGED
@@ -6209,19 +6209,6 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
6209
6209
  chain: "test",
6210
6210
  validated: true
6211
6211
  },
6212
- {
6213
- chain: "test",
6214
- count: 95262,
6215
- fileHash: "BvNO9eeMwCaN1Xsx8PQLMJ+YiqF9FrNe+9WnnEo9B44=",
6216
- fileName: "testNet_16.headers",
6217
- firstHeight: 1600000,
6218
- lastChainWork: "00000000000000000000000000000000000000000000015814b84c3f9834ef93",
6219
- lastHash: "000000000ca922c841cb7fedd8f012ebc27b17991c9b00a8fb7ca4b1b2b648d3",
6220
- prevChainWork: "000000000000000000000000000000000000000000000156c3b84396da4e60b9",
6221
- prevHash: "00000000000005504bfd1a3ce4688c30c86740390102b6cd464a2fb5e0e3fed1",
6222
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
6223
- validated: true
6224
- },
6225
6212
  {
6226
6213
  chain: "test",
6227
6214
  count: 100000,
@@ -6232,7 +6219,8 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
6232
6219
  lastHash: "000000000001561e0532f48401f822f5c0d8797e364b1d612a317eca6983ca36",
6233
6220
  prevChainWork: "000000000000000000000000000000000000000000000156c3b84396da4e60b9",
6234
6221
  prevHash: "00000000000005504bfd1a3ce4688c30c86740390102b6cd464a2fb5e0e3fed1",
6235
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders"
6222
+ sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
6223
+ validated: true
6236
6224
  },
6237
6225
  {
6238
6226
  chain: "test",
@@ -6244,7 +6232,8 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
6244
6232
  lastHash: "00000000086ca64c1f351b76c63f944b7b6b553e0c66fce3d9c1e91cddf9d067",
6245
6233
  prevChainWork: "00000000000000000000000000000000000000000000015814b9c82dabd4ea74",
6246
6234
  prevHash: "000000000001561e0532f48401f822f5c0d8797e364b1d612a317eca6983ca36",
6247
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders"
6235
+ sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
6236
+ validated: true
6248
6237
  },
6249
6238
  {
6250
6239
  sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
package/docs/wallet.md CHANGED
@@ -19589,19 +19589,6 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
19589
19589
  chain: "test",
19590
19590
  validated: true
19591
19591
  },
19592
- {
19593
- chain: "test",
19594
- count: 95262,
19595
- fileHash: "BvNO9eeMwCaN1Xsx8PQLMJ+YiqF9FrNe+9WnnEo9B44=",
19596
- fileName: "testNet_16.headers",
19597
- firstHeight: 1600000,
19598
- lastChainWork: "00000000000000000000000000000000000000000000015814b84c3f9834ef93",
19599
- lastHash: "000000000ca922c841cb7fedd8f012ebc27b17991c9b00a8fb7ca4b1b2b648d3",
19600
- prevChainWork: "000000000000000000000000000000000000000000000156c3b84396da4e60b9",
19601
- prevHash: "00000000000005504bfd1a3ce4688c30c86740390102b6cd464a2fb5e0e3fed1",
19602
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
19603
- validated: true
19604
- },
19605
19592
  {
19606
19593
  chain: "test",
19607
19594
  count: 100000,
@@ -19612,7 +19599,8 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
19612
19599
  lastHash: "000000000001561e0532f48401f822f5c0d8797e364b1d612a317eca6983ca36",
19613
19600
  prevChainWork: "000000000000000000000000000000000000000000000156c3b84396da4e60b9",
19614
19601
  prevHash: "00000000000005504bfd1a3ce4688c30c86740390102b6cd464a2fb5e0e3fed1",
19615
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders"
19602
+ sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
19603
+ validated: true
19616
19604
  },
19617
19605
  {
19618
19606
  chain: "test",
@@ -19624,7 +19612,8 @@ validBulkHeaderFiles: BulkHeaderFileInfo[] = [
19624
19612
  lastHash: "00000000086ca64c1f351b76c63f944b7b6b553e0c66fce3d9c1e91cddf9d067",
19625
19613
  prevChainWork: "00000000000000000000000000000000000000000000015814b9c82dabd4ea74",
19626
19614
  prevHash: "000000000001561e0532f48401f822f5c0d8797e364b1d612a317eca6983ca36",
19627
- sourceUrl: "https://cdn.projectbabbage.com/blockheaders"
19615
+ sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
19616
+ validated: true
19628
19617
  },
19629
19618
  {
19630
19619
  sourceUrl: "https://cdn.projectbabbage.com/blockheaders",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsv/wallet-toolbox",
3
- "version": "2.0.5-beta.0",
3
+ "version": "2.0.5",
4
4
  "description": "BRC100 conforming wallet, wallet storage and wallet signer components",
5
5
  "main": "./out/src/index.js",
6
6
  "types": "./out/src/index.d.ts",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=WhatsOnChainServices.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WhatsOnChainServices.test.d.ts","sourceRoot":"","sources":["../../../../../../../src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts"],"names":[],"mappings":""}
@@ -1,102 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const blockHeaderUtilities_1 = require("../../util/blockHeaderUtilities");
4
- const ChaintracksFetch_1 = require("../../util/ChaintracksFetch");
5
- const WhatsOnChainServices_1 = require("../WhatsOnChainServices");
6
- const WhatsOnChainIngestorWs_1 = require("../WhatsOnChainIngestorWs");
7
- const HeightRange_1 = require("../../util/HeightRange");
8
- describe('WhatsOnChainServices tests', () => {
9
- jest.setTimeout(999999999);
10
- const chain = 'main';
11
- const options = WhatsOnChainServices_1.WhatsOnChainServices.createWhatsOnChainServicesOptions(chain);
12
- const woc = new WhatsOnChainServices_1.WhatsOnChainServices(options);
13
- test('getHeaderByHash', async () => {
14
- const header = await woc.getHeaderByHash('000000000000000001b3e99847d57ff3e0bfc4222cea5c29f10bf24387a250a2');
15
- expect((header === null || header === void 0 ? void 0 : header.height) === 781348).toBe(true);
16
- });
17
- test('getChainTipHeight', async () => {
18
- const height = await woc.getChainTipHeight();
19
- expect(height > 600000).toBe(true);
20
- });
21
- const stopOldListenersToken = { stop: undefined };
22
- function stopOldListener() {
23
- var _a;
24
- (_a = stopOldListenersToken.stop) === null || _a === void 0 ? void 0 : _a.call(stopOldListenersToken);
25
- }
26
- test.skip('0 listenForOldBlockHeaders', async () => {
27
- // The service this depends on appears to be deprecated...
28
- const height = await woc.getChainTipHeight();
29
- expect(height > 600000).toBe(true);
30
- const headersOld = [];
31
- const errorsOld = [];
32
- const okOld = await (0, WhatsOnChainIngestorWs_1.WocHeadersBulkListener)(height - 4, height, h => headersOld.push(h), (code, message) => {
33
- errorsOld.push({ code, message });
34
- return true;
35
- }, stopOldListenersToken, chain);
36
- expect(okOld).toBe(true);
37
- expect(errorsOld.length).toBe(0);
38
- expect(headersOld.length >= 4).toBe(true);
39
- });
40
- const stopNewListenersToken = { stop: undefined };
41
- test.skip('1 listenForNewBlockHeaders', async () => {
42
- // The service this depends on appears to be deprecated...
43
- const height = await woc.getChainTipHeight();
44
- expect(height > 600000).toBe(true);
45
- // Comment out this line to just wait for next new header...
46
- //setTimeout(() => woc.stopNewListener(), 5000)
47
- const headersNew = [];
48
- const errorsNew = [];
49
- const eh = h => {
50
- var _a;
51
- headersNew.push(h);
52
- if (headersNew.length >= 1)
53
- (_a = stopNewListenersToken.stop) === null || _a === void 0 ? void 0 : _a.call(stopNewListenersToken);
54
- };
55
- const errh = (code, message) => {
56
- errorsNew.push({ code, message });
57
- return true;
58
- };
59
- const okNew = await (0, WhatsOnChainIngestorWs_1.WocHeadersLiveListener)(eh, errh, stopNewListenersToken, chain, console.log.bind(console));
60
- if (errorsNew.length > 0)
61
- console.log(JSON.stringify(errorsNew));
62
- expect(errorsNew.length).toBe(0);
63
- expect(okNew).toBe(true);
64
- expect(headersNew.length >= 0).toBe(true);
65
- });
66
- test('2 get latest header bytes', async () => {
67
- const fetch = new ChaintracksFetch_1.ChaintracksFetch();
68
- //for (;;) {
69
- const bytes = await fetch.download(`https://api.whatsonchain.com/v1/bsv/main/block/headers/latest`);
70
- console.log(`headers: ${bytes.length / 80}`);
71
- const latest = await fetch.download(`https://api.whatsonchain.com/v1/bsv/main/block/headers/latest?count=1`);
72
- const bh = (0, blockHeaderUtilities_1.deserializeBlockHeader)(latest, 0, 0);
73
- console.log(`latest hash: ${bh.hash} at ${new Date().toISOString()}`);
74
- // await wait(60 * 1000)
75
- //}
76
- });
77
- test('3 get headers', async () => {
78
- const fetch = new ChaintracksFetch_1.ChaintracksFetch();
79
- //for (;;) {
80
- const headers = await fetch.fetchJson(`https://api.whatsonchain.com/v1/bsv/main/block/headers`);
81
- let log = '';
82
- for (const h of headers) {
83
- log += `${h.height} ${h.hash} ${h.confirmations} ${h.nTx}\n`;
84
- }
85
- console.log(`${new Date().toISOString()}\n${log}`);
86
- //await wait(60 * 1000)
87
- //}
88
- });
89
- test('4 get header byte file links', async () => {
90
- const fetch = new ChaintracksFetch_1.ChaintracksFetch();
91
- const woc = new WhatsOnChainServices_1.WhatsOnChainServices(WhatsOnChainServices_1.WhatsOnChainServices.createWhatsOnChainServicesOptions('main'));
92
- const files = await woc.getHeaderByteFileLinks(new HeightRange_1.HeightRange(907123, 911000));
93
- expect(files.length).toBe(3);
94
- expect(files[0].range.minHeight).toBe(906001);
95
- expect(files[0].range.maxHeight).toBe(908000);
96
- expect(files[1].range.minHeight).toBe(908001);
97
- expect(files[1].range.maxHeight).toBe(910000);
98
- expect(files[2].range.minHeight).toBe(910001);
99
- expect(files[2].range.maxHeight).toBeGreaterThan(910001);
100
- });
101
- });
102
- //# sourceMappingURL=WhatsOnChainServices.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"WhatsOnChainServices.test.js","sourceRoot":"","sources":["../../../../../../../src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts"],"names":[],"mappings":"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"}