@bsv/sdk 1.6.26 → 1.7.0

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/dist/cjs/package.json +1 -1
  2. package/dist/cjs/src/storage/StorageDownloader.js +24 -10
  3. package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
  4. package/dist/cjs/src/storage/StorageUploader.js +5 -4
  5. package/dist/cjs/src/storage/StorageUploader.js.map +1 -1
  6. package/dist/cjs/src/storage/StorageUtils.js +11 -3
  7. package/dist/cjs/src/storage/StorageUtils.js.map +1 -1
  8. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  9. package/dist/esm/src/storage/StorageDownloader.js +24 -10
  10. package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
  11. package/dist/esm/src/storage/StorageUploader.js +5 -4
  12. package/dist/esm/src/storage/StorageUploader.js.map +1 -1
  13. package/dist/esm/src/storage/StorageUtils.js +11 -3
  14. package/dist/esm/src/storage/StorageUtils.js.map +1 -1
  15. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  16. package/dist/types/src/storage/StorageDownloader.d.ts +1 -1
  17. package/dist/types/src/storage/StorageDownloader.d.ts.map +1 -1
  18. package/dist/types/src/storage/StorageUploader.d.ts +1 -1
  19. package/dist/types/src/storage/StorageUploader.d.ts.map +1 -1
  20. package/dist/types/src/storage/StorageUtils.d.ts +3 -2
  21. package/dist/types/src/storage/StorageUtils.d.ts.map +1 -1
  22. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  23. package/dist/umd/bundle.js +2 -2
  24. package/dist/umd/bundle.js.map +1 -1
  25. package/docs/reference/storage.md +12 -5
  26. package/docs/tutorials/uhrp-storage.md +6 -6
  27. package/package.json +1 -1
  28. package/src/storage/StorageDownloader.ts +28 -12
  29. package/src/storage/StorageUploader.ts +6 -5
  30. package/src/storage/StorageUtils.ts +12 -4
  31. package/src/storage/__tests/StorageDownloader.test.ts +34 -2
  32. package/src/storage/__tests/StorageUploader.test.ts +20 -0
@@ -43,6 +43,7 @@ export class StorageDownloader {
43
43
  throw new Error('Invalid parameter UHRP url');
44
44
  }
45
45
  const hash = StorageUtils.getHashFromURL(uhrpUrl);
46
+ const expected = Utils.toHex(hash);
46
47
  const downloadURLs = await this.resolve(uhrpUrl);
47
48
  if (!Array.isArray(downloadURLs) || downloadURLs.length === 0) {
48
49
  throw new Error('No one currently hosts this file!');
@@ -52,20 +53,33 @@ export class StorageDownloader {
52
53
  // The url is fetched
53
54
  const result = await fetch(downloadURLs[i], { method: 'GET' });
54
55
  // If the request fails, continue to the next url
55
- if (!result.ok || result.status >= 400) {
56
+ if (!result.ok || result.status >= 400 || result.body == null) {
56
57
  continue;
57
58
  }
58
- const body = await result.arrayBuffer();
59
- // The body is loaded into a number array
60
- const content = [...new Uint8Array(body)];
61
- const contentHash = Hash.sha256(content);
62
- for (let i = 0; i < contentHash.length; ++i) {
63
- if (contentHash[i] !== hash[i]) {
64
- throw new Error('Value of content does not match hash of the url given');
65
- }
59
+ const reader = result.body.getReader();
60
+ const hashStream = new Hash.SHA256();
61
+ const chunks = [];
62
+ let totalLength = 0;
63
+ while (true) {
64
+ const { done, value } = await reader.read();
65
+ if (done)
66
+ break;
67
+ hashStream.update(Array.from(value));
68
+ chunks.push(value);
69
+ totalLength += value.length;
70
+ }
71
+ const digest = Utils.toHex(hashStream.digest());
72
+ if (digest !== expected) {
73
+ throw new Error('Data integrity error: value of content does not match hash of the url given');
74
+ }
75
+ const data = new Uint8Array(totalLength);
76
+ let offset = 0;
77
+ for (const chunk of chunks) {
78
+ data.set(chunk, offset);
79
+ offset += chunk.length;
66
80
  }
67
81
  return {
68
- data: content,
82
+ data,
69
83
  mimeType: result.headers.get('Content-Type')
70
84
  };
71
85
  }
@@ -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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"}
@@ -57,7 +57,7 @@ export class StorageUploader {
57
57
  * @throws {Error} If the server returns a non-OK response
58
58
  */
59
59
  async uploadFile(uploadURL, file, requiredHeaders) {
60
- const body = Uint8Array.from(file.data);
60
+ const body = file.data instanceof Uint8Array ? file.data : Uint8Array.from(file.data);
61
61
  const response = await fetch(uploadURL, {
62
62
  method: 'PUT',
63
63
  body,
@@ -69,7 +69,7 @@ export class StorageUploader {
69
69
  if (!response.ok) {
70
70
  throw new Error(`File upload failed: HTTP ${response.status}`);
71
71
  }
72
- const uhrpURL = await StorageUtils.getURLForFile(file.data);
72
+ const uhrpURL = StorageUtils.getURLForFile(body);
73
73
  return {
74
74
  published: true,
75
75
  uhrpURL
@@ -91,9 +91,10 @@ export class StorageUploader {
91
91
  */
92
92
  async publishFile(params) {
93
93
  const { file, retentionPeriod } = params;
94
- const fileSize = file.data.length;
94
+ const data = file.data instanceof Uint8Array ? file.data : Uint8Array.from(file.data);
95
+ const fileSize = data.byteLength;
95
96
  const { uploadURL, requiredHeaders } = await this.getUploadInfo(fileSize, retentionPeriod);
96
- return await this.uploadFile(uploadURL, file, requiredHeaders);
97
+ return await this.uploadFile(uploadURL, { data, type: file.type }, requiredHeaders);
97
98
  }
98
99
  /**
99
100
  * Retrieves metadata for a file matching the given UHRP URL from the `/find` route.
@@ -1 +1 @@
1
- {"version":3,"file":"StorageUploader.js","sourceRoot":"","sources":["../../../../src/storage/StorageUploader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"StorageUploader.js","sourceRoot":"","sources":["../../../../src/storage/StorageUploader.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
- import { sha256 } from '../primitives/Hash.js';
2
1
  import { toHex, fromBase58Check, toBase58Check, toArray } from '../primitives/utils.js';
2
+ import { Hash } from '../primitives/index.js';
3
3
  /**
4
4
  * Takes a UHRP URL and removes any prefixes.
5
5
  * @param {string} URL - The UHRP URL.
@@ -25,11 +25,19 @@ export const getURLForHash = (hash) => {
25
25
  };
26
26
  /**
27
27
  * Generates a UHRP URL for a given file.
28
- * @param {number[] | string} file - File content as number array or string.
28
+ * Uses a streaming hash to avoid excessive memory usage with large files.
29
+ * @param {Uint8Array | number[]} file - File content as a typed array or number array.
29
30
  * @returns {string} - Base58Check encoded URL.
30
31
  */
31
32
  export const getURLForFile = (file) => {
32
- const hash = sha256(file);
33
+ const data = file instanceof Uint8Array ? file : Uint8Array.from(file);
34
+ const hasher = new Hash.SHA256();
35
+ const chunkSize = 1024 * 1024;
36
+ for (let i = 0; i < data.length; i += chunkSize) {
37
+ const chunk = data.subarray(i, i + chunkSize);
38
+ hasher.update(Array.from(chunk));
39
+ }
40
+ const hash = hasher.digest();
33
41
  return getURLForHash(hash);
34
42
  };
35
43
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"StorageUtils.js","sourceRoot":"","sources":["../../../../src/storage/StorageUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAEvF;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7D,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC5C,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAc,EAAU,EAAE;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;KACzD;IACD,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;AACpD,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAc,EAAU,EAAE;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAY,EAAE;IACtD,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IACvB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;KACnC;IACD,IAAI,KAAK,CAAC,MAAkB,CAAC,KAAK,MAAM,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;KAC9B;IACD,OAAO,IAAgB,CAAA;AACzB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAW,EAAE;IACjD,IAAI;QACF,cAAc,CAAC,GAAG,CAAC,CAAA;QACnB,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"StorageUtils.js","sourceRoot":"","sources":["../../../../src/storage/StorageUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAA;AAE7C;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,GAAW,EAAU,EAAE;IAClD,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC7D,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAC5C,OAAO,GAAG,CAAA;AACZ,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAc,EAAU,EAAE;IACtD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAA;KACzD;IACD,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;AACpD,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAA2B,EAAU,EAAE;IACnE,MAAM,IAAI,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACtE,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAA;IAChC,MAAM,SAAS,GAAG,IAAI,GAAG,IAAI,CAAA;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE;QAC/C,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAA;QAC7C,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;KACjC;IACD,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;IAC5B,OAAO,aAAa,CAAC,IAAI,CAAC,CAAA;AAC5B,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAY,EAAE;IACtD,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,CAAA;IACvB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC,CAAA;IAC3D,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE;QACtB,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAA;KACnC;IACD,IAAI,KAAK,CAAC,MAAkB,CAAC,KAAK,MAAM,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAA;KAC9B;IACD,OAAO,IAAgB,CAAA;AACzB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAW,EAAE;IACjD,IAAI;QACF,cAAc,CAAC,GAAG,CAAC,CAAA;QACnB,OAAO,IAAI,CAAA;KACZ;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,KAAK,CAAA;KACb;AACH,CAAC,CAAA"}