@waku/core 0.0.33-f599932.0 → 0.0.34-09108d9.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 (93) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/bundle/base_protocol-Bp5a9PNG.js +152 -0
  3. package/bundle/{index-BVysxsMu.js → index-G1eRBjeI.js} +136 -215
  4. package/bundle/index.js +1963 -621
  5. package/bundle/lib/base_protocol.js +2 -2
  6. package/bundle/lib/message/version_0.js +2 -2
  7. package/bundle/{version_0-C5ObpJ_0.js → version_0-DJZG2fB2.js} +285 -41
  8. package/dist/.tsbuildinfo +1 -1
  9. package/dist/index.d.ts +2 -5
  10. package/dist/index.js +2 -5
  11. package/dist/index.js.map +1 -1
  12. package/dist/lib/base_protocol.d.ts +3 -23
  13. package/dist/lib/base_protocol.js +3 -51
  14. package/dist/lib/base_protocol.js.map +1 -1
  15. package/dist/lib/connection_manager/connection_manager.d.ts +118 -0
  16. package/dist/lib/{connection_manager.js → connection_manager/connection_manager.js} +136 -36
  17. package/dist/lib/connection_manager/connection_manager.js.map +1 -0
  18. package/dist/lib/connection_manager/index.d.ts +1 -0
  19. package/dist/lib/connection_manager/index.js +2 -0
  20. package/dist/lib/connection_manager/index.js.map +1 -0
  21. package/dist/lib/{keep_alive_manager.d.ts → connection_manager/keep_alive_manager.d.ts} +4 -2
  22. package/dist/lib/{keep_alive_manager.js → connection_manager/keep_alive_manager.js} +2 -2
  23. package/dist/lib/connection_manager/keep_alive_manager.js.map +1 -0
  24. package/dist/lib/connection_manager/utils.d.ts +7 -0
  25. package/dist/lib/connection_manager/utils.js +22 -0
  26. package/dist/lib/connection_manager/utils.js.map +1 -0
  27. package/dist/lib/filter/filter.d.ts +18 -0
  28. package/dist/lib/filter/filter.js +209 -0
  29. package/dist/lib/filter/filter.js.map +1 -0
  30. package/dist/lib/filter/index.d.ts +1 -19
  31. package/dist/lib/filter/index.js +1 -211
  32. package/dist/lib/filter/index.js.map +1 -1
  33. package/dist/lib/light_push/index.d.ts +1 -15
  34. package/dist/lib/light_push/index.js +1 -143
  35. package/dist/lib/light_push/index.js.map +1 -1
  36. package/dist/lib/light_push/light_push.d.ts +15 -0
  37. package/dist/lib/light_push/light_push.js +144 -0
  38. package/dist/lib/light_push/light_push.js.map +1 -0
  39. package/dist/lib/light_push/utils.d.ts +0 -2
  40. package/dist/lib/light_push/utils.js +8 -16
  41. package/dist/lib/light_push/utils.js.map +1 -1
  42. package/dist/lib/metadata/index.d.ts +1 -3
  43. package/dist/lib/metadata/index.js +1 -118
  44. package/dist/lib/metadata/index.js.map +1 -1
  45. package/dist/lib/metadata/metadata.d.ts +3 -0
  46. package/dist/lib/metadata/metadata.js +119 -0
  47. package/dist/lib/metadata/metadata.js.map +1 -0
  48. package/dist/lib/store/index.d.ts +1 -9
  49. package/dist/lib/store/index.js +1 -82
  50. package/dist/lib/store/index.js.map +1 -1
  51. package/dist/lib/store/store.d.ts +9 -0
  52. package/dist/lib/store/store.js +83 -0
  53. package/dist/lib/store/store.js.map +1 -0
  54. package/dist/lib/stream_manager/stream_manager.d.ts +13 -10
  55. package/dist/lib/stream_manager/stream_manager.js +88 -58
  56. package/dist/lib/stream_manager/stream_manager.js.map +1 -1
  57. package/dist/lib/stream_manager/utils.d.ts +1 -1
  58. package/dist/lib/stream_manager/utils.js +5 -17
  59. package/dist/lib/stream_manager/utils.js.map +1 -1
  60. package/package.json +1 -1
  61. package/src/index.ts +2 -7
  62. package/src/lib/base_protocol.ts +3 -82
  63. package/src/lib/{connection_manager.ts → connection_manager/connection_manager.ts} +168 -63
  64. package/src/lib/connection_manager/index.ts +1 -0
  65. package/src/lib/{keep_alive_manager.ts → connection_manager/keep_alive_manager.ts} +7 -3
  66. package/src/lib/connection_manager/utils.ts +25 -0
  67. package/src/lib/filter/filter.ts +315 -0
  68. package/src/lib/filter/index.ts +1 -323
  69. package/src/lib/light_push/index.ts +1 -188
  70. package/src/lib/light_push/light_push.ts +188 -0
  71. package/src/lib/light_push/utils.ts +12 -20
  72. package/src/lib/metadata/index.ts +1 -182
  73. package/src/lib/metadata/metadata.ts +182 -0
  74. package/src/lib/store/index.ts +1 -136
  75. package/src/lib/store/store.ts +136 -0
  76. package/src/lib/stream_manager/stream_manager.ts +125 -69
  77. package/src/lib/stream_manager/utils.ts +5 -17
  78. package/bundle/base_protocol-CS0EDeEY.js +0 -260
  79. package/dist/lib/connection_manager.d.ts +0 -62
  80. package/dist/lib/connection_manager.js.map +0 -1
  81. package/dist/lib/filterPeers.d.ts +0 -13
  82. package/dist/lib/filterPeers.js +0 -38
  83. package/dist/lib/filterPeers.js.map +0 -1
  84. package/dist/lib/health_manager.d.ts +0 -14
  85. package/dist/lib/health_manager.js +0 -70
  86. package/dist/lib/health_manager.js.map +0 -1
  87. package/dist/lib/keep_alive_manager.js.map +0 -1
  88. package/dist/lib/wait_for_remote_peer.d.ts +0 -22
  89. package/dist/lib/wait_for_remote_peer.js +0 -142
  90. package/dist/lib/wait_for_remote_peer.js.map +0 -1
  91. package/src/lib/filterPeers.ts +0 -51
  92. package/src/lib/health_manager.ts +0 -90
  93. package/src/lib/wait_for_remote_peer.ts +0 -200
@@ -1,2 +1,2 @@
1
- export { B as BaseProtocol } from '../base_protocol-CS0EDeEY.js';
2
- import '../index-BVysxsMu.js';
1
+ export { B as BaseProtocol } from '../base_protocol-Bp5a9PNG.js';
2
+ import '../index-G1eRBjeI.js';
@@ -1,2 +1,2 @@
1
- export { D as DecodedMessage, k as Decoder, E as Encoder, V as Version, j as createDecoder, g as createEncoder, m as proto } from '../../version_0-C5ObpJ_0.js';
2
- import '../../index-BVysxsMu.js';
1
+ export { D as DecodedMessage, r as Decoder, E as Encoder, V as Version, o as createDecoder, k as createEncoder, q as proto } from '../../version_0-DJZG2fB2.js';
2
+ import '../../index-G1eRBjeI.js';
@@ -1,4 +1,20 @@
1
- import { a as allocUnsafe, f as fromString, b as alloc$1, e as concat, u as utf8ToBytes$1, L as Logger } from './index-BVysxsMu.js';
1
+ import { i as identityBase, g as base2, h as base8, j as base10, k as base16, l as base32, m as base36, n as base58, o as base64, p as base256emoji, L as Logger } from './index-G1eRBjeI.js';
2
+
3
+ /**
4
+ * Returns a `Uint8Array` of the requested size. Referenced memory will
5
+ * be initialized to 0.
6
+ */
7
+ function alloc$1(size = 0) {
8
+ return new Uint8Array(size);
9
+ }
10
+ /**
11
+ * Where possible returns a Uint8Array of the requested size that references
12
+ * uninitialized memory. Only use if you are certain you will immediately
13
+ * overwrite every value in the returned `Uint8Array`.
14
+ */
15
+ function allocUnsafe(size = 0) {
16
+ return new Uint8Array(size);
17
+ }
2
18
 
3
19
  /* eslint-disable no-fallthrough */
4
20
  const N1 = Math.pow(2, 7);
@@ -916,6 +932,69 @@ function decodeMessage(buf, codec, opts) {
916
932
  return codec.decode(reader, undefined, opts);
917
933
  }
918
934
 
935
+ const bases = { ...identityBase, ...base2, ...base8, ...base10, ...base16, ...base32, ...base36, ...base58, ...base64, ...base256emoji };
936
+
937
+ function createCodec$1(name, prefix, encode, decode) {
938
+ return {
939
+ name,
940
+ prefix,
941
+ encoder: {
942
+ name,
943
+ prefix,
944
+ encode
945
+ },
946
+ decoder: {
947
+ decode
948
+ }
949
+ };
950
+ }
951
+ const string = createCodec$1('utf8', 'u', (buf) => {
952
+ const decoder = new TextDecoder('utf8');
953
+ return 'u' + decoder.decode(buf);
954
+ }, (str) => {
955
+ const encoder = new TextEncoder();
956
+ return encoder.encode(str.substring(1));
957
+ });
958
+ const ascii = createCodec$1('ascii', 'a', (buf) => {
959
+ let string = 'a';
960
+ for (let i = 0; i < buf.length; i++) {
961
+ string += String.fromCharCode(buf[i]);
962
+ }
963
+ return string;
964
+ }, (str) => {
965
+ str = str.substring(1);
966
+ const buf = allocUnsafe(str.length);
967
+ for (let i = 0; i < str.length; i++) {
968
+ buf[i] = str.charCodeAt(i);
969
+ }
970
+ return buf;
971
+ });
972
+ const BASES = {
973
+ utf8: string,
974
+ 'utf-8': string,
975
+ hex: bases.base16,
976
+ latin1: ascii,
977
+ ascii,
978
+ binary: ascii,
979
+ ...bases
980
+ };
981
+
982
+ /**
983
+ * Create a `Uint8Array` from the passed string
984
+ *
985
+ * Supports `utf8`, `utf-8`, `hex`, and any encoding supported by the multiformats module.
986
+ *
987
+ * Also `ascii` which is similar to node's 'binary' encoding.
988
+ */
989
+ function fromString(string, encoding = 'utf8') {
990
+ const base = BASES[encoding];
991
+ if (base == null) {
992
+ throw new Error(`Unsupported encoding "${encoding}"`);
993
+ }
994
+ // add multibase prefix
995
+ return base.decoder.decode(`${base.prefix}${string}`); // eslint-disable-line @typescript-eslint/restrict-template-expressions
996
+ }
997
+
919
998
  /**
920
999
  * A general purpose buffer pool
921
1000
  */
@@ -3750,31 +3829,141 @@ var WakuMetadataResponse;
3750
3829
  };
3751
3830
  })(WakuMetadataResponse || (WakuMetadataResponse = {}));
3752
3831
 
3753
- // copied from utils
3832
+ /* eslint-disable import/export */
3833
+ /* eslint-disable complexity */
3834
+ /* eslint-disable @typescript-eslint/no-namespace */
3835
+ /* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
3836
+ /* eslint-disable @typescript-eslint/no-empty-interface */
3837
+ var SdsMessage;
3838
+ (function (SdsMessage) {
3839
+ let _codec;
3840
+ SdsMessage.codec = () => {
3841
+ if (_codec == null) {
3842
+ _codec = message$1((obj, w, opts = {}) => {
3843
+ if (opts.lengthDelimited !== false) {
3844
+ w.fork();
3845
+ }
3846
+ if ((obj.messageId != null && obj.messageId !== '')) {
3847
+ w.uint32(18);
3848
+ w.string(obj.messageId);
3849
+ }
3850
+ if ((obj.channelId != null && obj.channelId !== '')) {
3851
+ w.uint32(26);
3852
+ w.string(obj.channelId);
3853
+ }
3854
+ if (obj.lamportTimestamp != null) {
3855
+ w.uint32(80);
3856
+ w.int32(obj.lamportTimestamp);
3857
+ }
3858
+ if (obj.causalHistory != null) {
3859
+ for (const value of obj.causalHistory) {
3860
+ w.uint32(90);
3861
+ w.string(value);
3862
+ }
3863
+ }
3864
+ if (obj.bloomFilter != null) {
3865
+ w.uint32(98);
3866
+ w.bytes(obj.bloomFilter);
3867
+ }
3868
+ if (obj.content != null) {
3869
+ w.uint32(162);
3870
+ w.bytes(obj.content);
3871
+ }
3872
+ if (opts.lengthDelimited !== false) {
3873
+ w.ldelim();
3874
+ }
3875
+ }, (reader, length, opts = {}) => {
3876
+ const obj = {
3877
+ messageId: '',
3878
+ channelId: '',
3879
+ causalHistory: []
3880
+ };
3881
+ const end = length == null ? reader.len : reader.pos + length;
3882
+ while (reader.pos < end) {
3883
+ const tag = reader.uint32();
3884
+ switch (tag >>> 3) {
3885
+ case 2: {
3886
+ obj.messageId = reader.string();
3887
+ break;
3888
+ }
3889
+ case 3: {
3890
+ obj.channelId = reader.string();
3891
+ break;
3892
+ }
3893
+ case 10: {
3894
+ obj.lamportTimestamp = reader.int32();
3895
+ break;
3896
+ }
3897
+ case 11: {
3898
+ if (opts.limits?.causalHistory != null && obj.causalHistory.length === opts.limits.causalHistory) {
3899
+ throw new MaxLengthError('Decode error - map field "causalHistory" had too many elements');
3900
+ }
3901
+ obj.causalHistory.push(reader.string());
3902
+ break;
3903
+ }
3904
+ case 12: {
3905
+ obj.bloomFilter = reader.bytes();
3906
+ break;
3907
+ }
3908
+ case 20: {
3909
+ obj.content = reader.bytes();
3910
+ break;
3911
+ }
3912
+ default: {
3913
+ reader.skipType(tag & 7);
3914
+ break;
3915
+ }
3916
+ }
3917
+ }
3918
+ return obj;
3919
+ });
3920
+ }
3921
+ return _codec;
3922
+ };
3923
+ SdsMessage.encode = (obj) => {
3924
+ return encodeMessage(obj, SdsMessage.codec());
3925
+ };
3926
+ SdsMessage.decode = (buf, opts) => {
3927
+ return decodeMessage(buf, SdsMessage.codec(), opts);
3928
+ };
3929
+ })(SdsMessage || (SdsMessage = {}));
3930
+
3931
+ /**
3932
+ * Internal assertion helpers.
3933
+ * @module
3934
+ */
3935
+ /** Asserts something is positive integer. */
3936
+ /** Is number an Uint8Array? Copied from utils for perf. */
3754
3937
  function isBytes(a) {
3755
- return (a instanceof Uint8Array ||
3756
- (a != null && typeof a === 'object' && a.constructor.name === 'Uint8Array'));
3938
+ return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');
3757
3939
  }
3758
- function bytes(b, ...lengths) {
3940
+ /** Asserts something is Uint8Array. */
3941
+ function abytes(b, ...lengths) {
3759
3942
  if (!isBytes(b))
3760
3943
  throw new Error('Uint8Array expected');
3761
3944
  if (lengths.length > 0 && !lengths.includes(b.length))
3762
- throw new Error(`Uint8Array expected of length ${lengths}, not of length=${b.length}`);
3945
+ throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);
3763
3946
  }
3764
- function exists(instance, checkFinished = true) {
3947
+ /** Asserts a hash instance has not been destroyed / finished */
3948
+ function aexists(instance, checkFinished = true) {
3765
3949
  if (instance.destroyed)
3766
3950
  throw new Error('Hash instance has been destroyed');
3767
3951
  if (checkFinished && instance.finished)
3768
3952
  throw new Error('Hash#digest() has already been called');
3769
3953
  }
3770
- function output(out, instance) {
3771
- bytes(out);
3954
+ /** Asserts output is properly-sized byte array */
3955
+ function aoutput(out, instance) {
3956
+ abytes(out);
3772
3957
  const min = instance.outputLen;
3773
3958
  if (out.length < min) {
3774
- throw new Error(`digestInto() expects output buffer of length at least ${min}`);
3959
+ throw new Error('digestInto() expects output buffer of length at least ' + min);
3775
3960
  }
3776
3961
  }
3777
3962
 
3963
+ /**
3964
+ * Utilities for hex, bytes, CSPRNG.
3965
+ * @module
3966
+ */
3778
3967
  /*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */
3779
3968
  // We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.
3780
3969
  // node.js versions earlier than v19 don't declare it in global scope.
@@ -3783,16 +3972,20 @@ function output(out, instance) {
3783
3972
  // Makes the utils un-importable in browsers without a bundler.
3784
3973
  // Once node.js 18 is deprecated (2025-04-30), we can just drop the import.
3785
3974
  // Cast array to view
3786
- const createView = (arr) => new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
3787
- // The rotate right (circular right shift) operation for uint32
3788
- const rotr = (word, shift) => (word << (32 - shift)) | (word >>> shift);
3789
- new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44;
3975
+ function createView(arr) {
3976
+ return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);
3977
+ }
3978
+ /** The rotate right (circular right shift) operation for uint32 */
3979
+ function rotr(word, shift) {
3980
+ return (word << (32 - shift)) | (word >>> shift);
3981
+ }
3790
3982
  /**
3983
+ * Convert JS string to byte array.
3791
3984
  * @example utf8ToBytes('abc') // new Uint8Array([97, 98, 99])
3792
3985
  */
3793
- function utf8ToBytes(str) {
3986
+ function utf8ToBytes$1(str) {
3794
3987
  if (typeof str !== 'string')
3795
- throw new Error(`utf8ToBytes expected string, got ${typeof str}`);
3988
+ throw new Error('utf8ToBytes expected string, got ' + typeof str);
3796
3989
  return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809
3797
3990
  }
3798
3991
  /**
@@ -3802,17 +3995,18 @@ function utf8ToBytes(str) {
3802
3995
  */
3803
3996
  function toBytes(data) {
3804
3997
  if (typeof data === 'string')
3805
- data = utf8ToBytes(data);
3806
- bytes(data);
3998
+ data = utf8ToBytes$1(data);
3999
+ abytes(data);
3807
4000
  return data;
3808
4001
  }
3809
- // For runtime check if class implements interface
4002
+ /** For runtime check if class implements interface */
3810
4003
  class Hash {
3811
4004
  // Safe version that clones internal state
3812
4005
  clone() {
3813
4006
  return this._cloneInto();
3814
4007
  }
3815
4008
  }
4009
+ /** Wraps hash function, creating an interface on top of it */
3816
4010
  function wrapConstructor(hashCons) {
3817
4011
  const hashC = (msg) => hashCons().update(toBytes(msg)).digest();
3818
4012
  const tmp = hashCons();
@@ -3822,7 +4016,11 @@ function wrapConstructor(hashCons) {
3822
4016
  return hashC;
3823
4017
  }
3824
4018
 
3825
- // Polyfill for Safari 14
4019
+ /**
4020
+ * Internal Merkle-Damgard hash utils.
4021
+ * @module
4022
+ */
4023
+ /** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */
3826
4024
  function setBigUint64(view, byteOffset, value, isLE) {
3827
4025
  if (typeof view.setBigUint64 === 'function')
3828
4026
  return view.setBigUint64(byteOffset, value, isLE);
@@ -3835,10 +4033,14 @@ function setBigUint64(view, byteOffset, value, isLE) {
3835
4033
  view.setUint32(byteOffset + h, wh, isLE);
3836
4034
  view.setUint32(byteOffset + l, wl, isLE);
3837
4035
  }
3838
- // Choice: a ? b : c
3839
- const Chi = (a, b, c) => (a & b) ^ (~a & c);
3840
- // Majority function, true if any two inpust is true
3841
- const Maj = (a, b, c) => (a & b) ^ (a & c) ^ (b & c);
4036
+ /** Choice: a ? b : c */
4037
+ function Chi(a, b, c) {
4038
+ return (a & b) ^ (~a & c);
4039
+ }
4040
+ /** Majority function, true if any two inputs is true. */
4041
+ function Maj(a, b, c) {
4042
+ return (a & b) ^ (a & c) ^ (b & c);
4043
+ }
3842
4044
  /**
3843
4045
  * Merkle-Damgard hash construction base class.
3844
4046
  * Could be used to create MD5, RIPEMD, SHA1, SHA2.
@@ -3858,7 +4060,7 @@ class HashMD extends Hash {
3858
4060
  this.view = createView(this.buffer);
3859
4061
  }
3860
4062
  update(data) {
3861
- exists(this);
4063
+ aexists(this);
3862
4064
  const { view, buffer, blockLen } = this;
3863
4065
  data = toBytes(data);
3864
4066
  const len = data.length;
@@ -3884,8 +4086,8 @@ class HashMD extends Hash {
3884
4086
  return this;
3885
4087
  }
3886
4088
  digestInto(out) {
3887
- exists(this);
3888
- output(out, this);
4089
+ aexists(this);
4090
+ aoutput(out, this);
3889
4091
  this.finished = true;
3890
4092
  // Padding
3891
4093
  // We can avoid allocation of buffer for padding completely if it
@@ -3942,10 +4144,16 @@ class HashMD extends Hash {
3942
4144
  }
3943
4145
  }
3944
4146
 
3945
- // SHA2-256 need to try 2^128 hashes to execute birthday attack.
3946
- // BTC network is doing 2^67 hashes/sec as per early 2023.
3947
- // Round constants:
3948
- // first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311)
4147
+ /**
4148
+ * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.
4149
+ *
4150
+ * To break sha256 using birthday attack, attackers need to try 2^128 hashes.
4151
+ * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.
4152
+ *
4153
+ * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).
4154
+ * @module
4155
+ */
4156
+ /** Round constants: first 32 bits of fractional parts of the cube roots of the first 64 primes 2..311). */
3949
4157
  // prettier-ignore
3950
4158
  const SHA256_K = /* @__PURE__ */ new Uint32Array([
3951
4159
  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
@@ -3957,14 +4165,15 @@ const SHA256_K = /* @__PURE__ */ new Uint32Array([
3957
4165
  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
3958
4166
  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
3959
4167
  ]);
3960
- // Initial state:
3961
- // first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19
4168
+ /** Initial state: first 32 bits of fractional parts of the square roots of the first 8 primes 2..19. */
3962
4169
  // prettier-ignore
3963
4170
  const SHA256_IV = /* @__PURE__ */ new Uint32Array([
3964
4171
  0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19
3965
4172
  ]);
3966
- // Temporary buffer, not used to store anything between runs
3967
- // Named this way because it matches specification.
4173
+ /**
4174
+ * Temporary buffer, not used to store anything between runs.
4175
+ * Named this way because it matches specification.
4176
+ */
3968
4177
  const SHA256_W = /* @__PURE__ */ new Uint32Array(64);
3969
4178
  class SHA256 extends HashMD {
3970
4179
  constructor() {
@@ -4041,10 +4250,7 @@ class SHA256 extends HashMD {
4041
4250
  this.buffer.fill(0);
4042
4251
  }
4043
4252
  }
4044
- /**
4045
- * SHA2-256 hash function
4046
- * @param message - data that would be hashed
4047
- */
4253
+ /** SHA2-256 hash function */
4048
4254
  const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());
4049
4255
 
4050
4256
  /**
@@ -4052,6 +4258,44 @@ const sha256 = /* @__PURE__ */ wrapConstructor(() => new SHA256());
4052
4258
  */
4053
4259
  const DEFAULT_CLUSTER_ID = 1;
4054
4260
 
4261
+ /**
4262
+ * Turns a `Uint8Array` into a string.
4263
+ *
4264
+ * Supports `utf8`, `utf-8` and any encoding supported by the multibase module.
4265
+ *
4266
+ * Also `ascii` which is similar to node's 'binary' encoding.
4267
+ */
4268
+ function toString(array, encoding = 'utf8') {
4269
+ const base = BASES[encoding];
4270
+ if (base == null) {
4271
+ throw new Error(`Unsupported encoding "${encoding}"`);
4272
+ }
4273
+ // strip multibase prefix
4274
+ return base.encoder.encode(array).substring(1);
4275
+ }
4276
+
4277
+ /**
4278
+ * Decode byte array to utf-8 string.
4279
+ */
4280
+ const bytesToUtf8 = (b) => toString(b, "utf8");
4281
+ /**
4282
+ * Encode utf-8 string to byte array.
4283
+ */
4284
+ const utf8ToBytes = (s) => fromString(s, "utf8");
4285
+ /**
4286
+ * Concatenate using Uint8Arrays as `Buffer` has a different behavior with `DataView`
4287
+ */
4288
+ function concat(byteArrays, totalLength) {
4289
+ const len = byteArrays.reduce((acc, curr) => acc + curr.length, 0);
4290
+ const res = new Uint8Array(len);
4291
+ let offset = 0;
4292
+ for (const bytes of byteArrays) {
4293
+ res.set(bytes, offset);
4294
+ offset += bytes.length;
4295
+ }
4296
+ return res;
4297
+ }
4298
+
4055
4299
  const singleShardInfoToPubsubTopic = (shardInfo) => {
4056
4300
  if (shardInfo.shard === undefined)
4057
4301
  throw new Error("Invalid shard");
@@ -4168,7 +4412,7 @@ function ensureValidContentTopic(contentTopic) {
4168
4412
  */
4169
4413
  function contentTopicToShardIndex(contentTopic, networkShards = 8) {
4170
4414
  const { application, version } = ensureValidContentTopic(contentTopic);
4171
- const digest = sha256(concat([utf8ToBytes$1(application), utf8ToBytes$1(version)]));
4415
+ const digest = sha256(concat([utf8ToBytes(application), utf8ToBytes(version)]));
4172
4416
  const dataview = new DataView(digest.buffer.slice(-8));
4173
4417
  return Number(dataview.getBigUint64(0, false) % BigInt(networkShards));
4174
4418
  }
@@ -4345,4 +4589,4 @@ var version_0 = /*#__PURE__*/Object.freeze({
4345
4589
  proto: message
4346
4590
  });
4347
4591
 
4348
- export { DecodedMessage as D, Encoder as E, FilterSubscribeRequest as F, MessagePush as M, PushRpc$1 as P, StoreQueryRequest$1 as S, Version as V, WakuMetadataRequest as W, encode as a, FilterSubscribeResponse$1 as b, PushResponse as c, decode as d, encodingLength as e, StoreQueryResponse$1 as f, createEncoder as g, pubsubTopicsToShardInfo as h, WakuMetadataResponse as i, createDecoder as j, Decoder as k, message as m, pubsubTopicToSingleShardInfo as p, shardInfoToPubsubTopics as s, version_0 as v };
4592
+ export { DecodedMessage as D, Encoder as E, FilterSubscribeRequest as F, MessagePush as M, PushRpc$1 as P, StoreQueryRequest$1 as S, Version as V, WakuMetadataRequest as W, allocUnsafe as a, alloc$1 as b, encode as c, decode as d, encodingLength as e, FilterSubscribeResponse$1 as f, PushResponse as g, StoreQueryResponse$1 as h, bases as i, fromString as j, createEncoder as k, bytesToUtf8 as l, pubsubTopicsToShardInfo as m, WakuMetadataResponse as n, createDecoder as o, pubsubTopicToSingleShardInfo as p, message as q, Decoder as r, shardInfoToPubsubTopics as s, toString as t, utf8ToBytes as u, version_0 as v };