@bsv/sdk 1.6.4 → 1.6.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.
Files changed (39) hide show
  1. package/dist/cjs/package.json +1 -1
  2. package/dist/cjs/src/kvstore/LocalKVStore.js +78 -52
  3. package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
  4. package/dist/cjs/src/storage/StorageDownloader.js +10 -11
  5. package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
  6. package/dist/cjs/src/transaction/chaintrackers/BlockHeadersService.js +91 -0
  7. package/dist/cjs/src/transaction/chaintrackers/BlockHeadersService.js.map +1 -0
  8. package/dist/cjs/src/transaction/chaintrackers/index.js +3 -1
  9. package/dist/cjs/src/transaction/chaintrackers/index.js.map +1 -1
  10. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  11. package/dist/esm/src/kvstore/LocalKVStore.js +78 -52
  12. package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
  13. package/dist/esm/src/storage/StorageDownloader.js +10 -11
  14. package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
  15. package/dist/esm/src/transaction/chaintrackers/BlockHeadersService.js +90 -0
  16. package/dist/esm/src/transaction/chaintrackers/BlockHeadersService.js.map +1 -0
  17. package/dist/esm/src/transaction/chaintrackers/index.js +1 -0
  18. package/dist/esm/src/transaction/chaintrackers/index.js.map +1 -1
  19. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  20. package/dist/types/src/kvstore/LocalKVStore.d.ts +10 -2
  21. package/dist/types/src/kvstore/LocalKVStore.d.ts.map +1 -1
  22. package/dist/types/src/storage/StorageDownloader.d.ts +10 -11
  23. package/dist/types/src/storage/StorageDownloader.d.ts.map +1 -1
  24. package/dist/types/src/transaction/chaintrackers/BlockHeadersService.d.ts +46 -0
  25. package/dist/types/src/transaction/chaintrackers/BlockHeadersService.d.ts.map +1 -0
  26. package/dist/types/src/transaction/chaintrackers/index.d.ts +1 -0
  27. package/dist/types/src/transaction/chaintrackers/index.d.ts.map +1 -1
  28. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  29. package/dist/umd/bundle.js +1 -1
  30. package/docs/kvstore.md +6 -3
  31. package/docs/overlay-tools.md +2 -3
  32. package/docs/primitives.md +20 -53
  33. package/docs/storage.md +35 -2
  34. package/docs/transaction.md +1 -1
  35. package/package.json +1 -1
  36. package/src/kvstore/LocalKVStore.ts +93 -55
  37. package/src/storage/StorageDownloader.ts +10 -11
  38. package/src/transaction/chaintrackers/BlockHeadersService.ts +138 -0
  39. package/src/transaction/chaintrackers/index.ts +1 -0
@@ -3,22 +3,16 @@ import { StorageUtils } from './index.js';
3
3
  import PushDrop from '../script/templates/PushDrop.js';
4
4
  import Transaction from '../transaction/Transaction.js';
5
5
  import { Hash, Utils } from '../primitives/index.js';
6
- /**
7
- * Locates HTTP URLs where content can be downloaded. It uses the passed or the default one.
8
- *
9
- * @param {Object} obj All parameters are passed in an object.
10
- * @param {String} obj.uhrpUrl The UHRP url to resolve.
11
- * @param {string} obj.confederacyHost HTTPS URL for for the with default setting.
12
- *
13
- * @return {Array<String>} An array of HTTP URLs where content can be downloaded.
14
- * @throws {Error} If UHRP url parameter invalid or is not an array
15
- * or there is an error retrieving url(s) stored in the UHRP token.
16
- */
17
6
  export class StorageDownloader {
18
7
  networkPreset = 'mainnet';
19
8
  constructor(config) {
20
9
  this.networkPreset = config?.networkPreset;
21
10
  }
11
+ /**
12
+ * Resolves the UHRP URL to a list of HTTP URLs where content can be downloaded.
13
+ * @param uhrpUrl The UHRP URL to resolve.
14
+ * @returns A promise that resolves to an array of HTTP URLs.
15
+ */
22
16
  async resolve(uhrpUrl) {
23
17
  // Use UHRP lookup service
24
18
  const lookupResolver = new LookupResolver({ networkPreset: this.networkPreset });
@@ -39,6 +33,11 @@ export class StorageDownloader {
39
33
  }
40
34
  return decodedResults;
41
35
  }
36
+ /**
37
+ * Downloads the content from the UHRP URL after validating the hash for integrity.
38
+ * @param uhrpUrl The UHRP URL to download.
39
+ * @returns A promise that resolves to the downloaded content.
40
+ */
42
41
  async download(uhrpUrl) {
43
42
  if (!StorageUtils.isValidURL(uhrpUrl)) {
44
43
  throw new Error('Invalid parameter UHRP url');
@@ -1 +1 @@
1
- {"version":3,"file":"StorageDownloader.js","sourceRoot":"","sources":["../../../../src/storage/StorageDownloader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StorageDownloader.js","sourceRoot":"","sources":["../../../../src/storage/StorageDownloader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ import { defaultHttpClient } from '../http/DefaultHttpClient.js';
2
+ /**
3
+ * Represents a chain tracker based on a BlockHeadersService API.
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * const chainTracker = new BlockHeadersService('https://headers.spv.money', {
8
+ * apiKey: '17JxRHcJerGBEbusx56W8o1m8Js73TFGo'
9
+ * })
10
+ * ```
11
+ */
12
+ export class BlockHeadersService {
13
+ baseUrl;
14
+ httpClient;
15
+ apiKey;
16
+ /**
17
+ * Constructs an instance of the BlockHeadersService ChainTracker.
18
+ *
19
+ * @param {string} baseUrl - The base URL for the BlockHeadersService API (e.g. https://headers.spv.money)
20
+ * @param {BlockHeadersServiceConfig} config - Configuration options for the BlockHeadersService ChainTracker.
21
+ */
22
+ constructor(baseUrl, config = {}) {
23
+ const { httpClient, apiKey } = config;
24
+ this.baseUrl = baseUrl;
25
+ this.httpClient = httpClient ?? defaultHttpClient();
26
+ this.apiKey = apiKey ?? '';
27
+ }
28
+ /**
29
+ * Verifies if a given merkle root is valid for a specific block height.
30
+ *
31
+ * @param {string} root - The merkle root to verify.
32
+ * @param {number} height - The block height to check against.
33
+ * @returns {Promise<boolean>} - A promise that resolves to true if the merkle root is valid for the specified block height, false otherwise.
34
+ */
35
+ async isValidRootForHeight(root, height) {
36
+ const requestOptions = {
37
+ method: 'POST',
38
+ headers: {
39
+ 'Content-Type': 'application/json',
40
+ 'Accept': 'application/json',
41
+ 'Authorization': `Bearer ${this.apiKey}`
42
+ },
43
+ data: [
44
+ {
45
+ blockHeight: height,
46
+ merkleRoot: root
47
+ }
48
+ ]
49
+ };
50
+ try {
51
+ const response = await this.httpClient.request(`${this.baseUrl}/api/v1/chain/merkleroot/verify`, requestOptions);
52
+ if (response.ok) {
53
+ return response.data.confirmationState === 'CONFIRMED';
54
+ }
55
+ else {
56
+ throw new Error(`Failed to verify merkleroot for height ${height} because of an error: ${JSON.stringify(response.data)}`);
57
+ }
58
+ }
59
+ catch (error) {
60
+ throw new Error(`Failed to verify merkleroot for height ${height} because of an error: ${error instanceof Error ? error.message : String(error)}`);
61
+ }
62
+ }
63
+ /**
64
+ * Gets the current block height from the BlockHeadersService API.
65
+ *
66
+ * @returns {Promise<number>} - A promise that resolves to the current block height.
67
+ */
68
+ async currentHeight() {
69
+ const requestOptions = {
70
+ method: 'GET',
71
+ headers: {
72
+ 'Accept': 'application/json',
73
+ 'Authorization': `Bearer ${this.apiKey}`
74
+ }
75
+ };
76
+ try {
77
+ const response = await this.httpClient.request(`${this.baseUrl}/api/v1/chain/tip/longest`, requestOptions);
78
+ if (response.ok && response.data && typeof response.data.height === 'number') {
79
+ return response.data.height;
80
+ }
81
+ else {
82
+ throw new Error(`Failed to get current height because of an error: ${JSON.stringify(response.data)}`);
83
+ }
84
+ }
85
+ catch (error) {
86
+ throw new Error(`Failed to get current height because of an error: ${error instanceof Error ? error.message : String(error)}`);
87
+ }
88
+ }
89
+ }
90
+ //# sourceMappingURL=BlockHeadersService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BlockHeadersService.js","sourceRoot":"","sources":["../../../../../src/transaction/chaintrackers/BlockHeadersService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AA4BhE;;;;;;;;;GASG;AACH,MAAM,OAAO,mBAAmB;IACX,OAAO,CAAQ;IACf,UAAU,CAAY;IACtB,MAAM,CAAQ;IAEjC;;;;;OAKG;IACH,YACE,OAAe,EACf,SAAoC,EAAE;QAEtC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;QACrC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,iBAAiB,EAAE,CAAA;QACnD,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,EAAE,CAAA;IAC5B,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,oBAAoB,CAAC,IAAY,EAAE,MAAc;QACrD,MAAM,cAAc,GAAG;YACrB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,QAAQ,EAAE,kBAAkB;gBAC5B,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACzC;YACD,IAAI,EAAE;gBACJ;oBACE,WAAW,EAAE,MAAM;oBACnB,UAAU,EAAE,IAAI;iBACjB;aACiC;SACrC,CAAA;QAED,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAC5C,GAAG,IAAI,CAAC,OAAO,iCAAiC,EAChD,cAAc,CACf,CAAA;YAED,IAAI,QAAQ,CAAC,EAAE,EAAE;gBACf,OAAO,QAAQ,CAAC,IAAI,CAAC,iBAAiB,KAAK,WAAW,CAAA;aACvD;iBAAM;gBACL,MAAM,IAAI,KAAK,CACb,0CAA0C,MAAM,yBAAyB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CACzG,CAAA;aACF;SACF;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CACb,0CAA0C,MAAM,yBAAyB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAClI,CAAA;SACF;IACH,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,cAAc,GAAG;YACrB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,QAAQ,EAAE,kBAAkB;gBAC5B,eAAe,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACzC;SACF,CAAA;QAED,IAAI;YACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAC5C,GAAG,IAAI,CAAC,OAAO,2BAA2B,EAC1C,cAAc,CACf,CAAA;YAED,IAAI,QAAQ,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,IAAI,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;gBAC5E,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAA;aAC5B;iBAAM;gBACL,MAAM,IAAI,KAAK,CACb,qDAAqD,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CACrF,CAAA;aACF;SACF;QAAC,OAAO,KAAK,EAAE;YACd,MAAM,IAAI,KAAK,CACb,qDAAqD,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC9G,CAAA;SACF;IACH,CAAC;CACF"}
@@ -1,3 +1,4 @@
1
1
  export { default as WhatsOnChain } from './WhatsOnChain.js';
2
+ export { BlockHeadersService } from './BlockHeadersService.js';
2
3
  export { defaultChainTracker } from './DefaultChainTracker.js';
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/transaction/chaintrackers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/transaction/chaintrackers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAE3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA"}