@xyo-network/hash 2.81.8 → 2.81.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
1
+ {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
1
+ {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
1
+ {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
@@ -126,9 +126,11 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
126
126
  const stringToHash = this.stringifyHashFields(obj);
127
127
  const b = enc.encode(stringToHash);
128
128
  const hashArray = await import_platform.subtle.digest("SHA-256", b);
129
- return (0, import_hex.asHash)(hashArray, 256, true);
129
+ return (0, import_hex.hexFromArrayBuffer)(hashArray, { bitLength: 256 });
130
130
  } catch (ex) {
131
- console.log("Setting allowSubtle to false");
131
+ const error = ex;
132
+ console.error(`Setting allowSubtle to false [${error.message}]`);
133
+ console.log(error.stack);
132
134
  _PayloadHasher.allowSubtle = false;
133
135
  }
134
136
  }
@@ -136,7 +138,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
136
138
  if (this.wasmSupport.canUseWasm) {
137
139
  const stringToHash = this.stringifyHashFields(obj);
138
140
  try {
139
- return (0, import_hex.asHash)(await (0, import_hash_wasm.sha256)(stringToHash), 256, true);
141
+ return (0, import_hex.asHash)(await (0, import_hash_wasm.sha256)(stringToHash), true);
140
142
  } catch (ex) {
141
143
  this.wasmSupport.allowWasm = false;
142
144
  }
@@ -150,7 +152,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
150
152
  return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
151
153
  }
152
154
  static hashSync(obj) {
153
- return (0, import_hex.asHash)((0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), 256, true);
155
+ return (0, import_hex.asHash)((0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
154
156
  }
155
157
  static async hashes(objs) {
156
158
  return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './model'\nexport * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[0-9a-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return asHash(hashArray, 256, true)\n } catch (ex) {\n console.log('Setting allowSubtle to false')\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), 256, true)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), 256, true)\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["import_object","obj","shajs"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './model'\nexport * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[0-9a-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["import_object","obj","shajs"]}
@@ -3,7 +3,7 @@ var hexRegex = /[0-9a-f]+/i;
3
3
  var isHex = (value) => hexRegex.test(value);
4
4
 
5
5
  // src/PayloadHasher.ts
6
- import { asHash } from "@xylabs/hex";
6
+ import { asHash, hexFromArrayBuffer } from "@xylabs/hex";
7
7
  import { subtle } from "@xylabs/platform";
8
8
  import { ObjectWrapper } from "@xyo-network/object";
9
9
  import { WasmSupport } from "@xyo-network/wasm";
@@ -84,9 +84,11 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
84
84
  const stringToHash = this.stringifyHashFields(obj);
85
85
  const b = enc.encode(stringToHash);
86
86
  const hashArray = await subtle.digest("SHA-256", b);
87
- return asHash(hashArray, 256, true);
87
+ return hexFromArrayBuffer(hashArray, { bitLength: 256 });
88
88
  } catch (ex) {
89
- console.log("Setting allowSubtle to false");
89
+ const error = ex;
90
+ console.error(`Setting allowSubtle to false [${error.message}]`);
91
+ console.log(error.stack);
90
92
  _PayloadHasher.allowSubtle = false;
91
93
  }
92
94
  }
@@ -94,7 +96,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
94
96
  if (this.wasmSupport.canUseWasm) {
95
97
  const stringToHash = this.stringifyHashFields(obj);
96
98
  try {
97
- return asHash(await sha256(stringToHash), 256, true);
99
+ return asHash(await sha256(stringToHash), true);
98
100
  } catch (ex) {
99
101
  this.wasmSupport.allowWasm = false;
100
102
  }
@@ -108,7 +110,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
108
110
  return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
109
111
  }
110
112
  static hashSync(obj) {
111
- return asHash(shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), 256, true);
113
+ return asHash(shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
112
114
  }
113
115
  static async hashes(objs) {
114
116
  return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[0-9a-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return asHash(hashArray, 256, true)\n } catch (ex) {\n console.log('Setting allowSubtle to false')\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), 256, true)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), 256, true)\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["obj","isObject"]}
1
+ {"version":3,"sources":["../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[0-9a-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["obj","isObject"]}
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
1
+ {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
1
+ {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAE,MAAM,aAAa,CAAA;AAE1C,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA0BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
1
+ {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAE9D,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IAClF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,aAAa,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAKrF,IAAI,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;WAI7E,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4BlE,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;WAIpC,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI5E,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;WAIrC,MAAM,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAIpE,6EAA6E;IAC7E,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,SAAS;IACpC,4CAA4C;IAC5C,OAAO,EAAE,CAAC;IACV,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;IAIJ,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,SAAS,EAAE,GAAG,EAAE,CAAC;WAIzC,KAAK,CAAC,CAAC,SAAS,SAAS,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAMtE,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAIhC,QAAQ,IAAI,IAAI;IAIhB,6EAA6E;IAC7E,WAAW;IACT,gEAAgE;IAChE,IAAI,UAAQ,GACX,CAAC;CAGL"}
@@ -129,9 +129,11 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
129
129
  const stringToHash = this.stringifyHashFields(obj);
130
130
  const b = enc.encode(stringToHash);
131
131
  const hashArray = await import_platform.subtle.digest("SHA-256", b);
132
- return (0, import_hex.asHash)(hashArray, 256, true);
132
+ return (0, import_hex.hexFromArrayBuffer)(hashArray, { bitLength: 256 });
133
133
  } catch (ex) {
134
- console.log("Setting allowSubtle to false");
134
+ const error = ex;
135
+ console.error(`Setting allowSubtle to false [${error.message}]`);
136
+ console.log(error.stack);
135
137
  _PayloadHasher.allowSubtle = false;
136
138
  }
137
139
  }
@@ -139,7 +141,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
139
141
  if (this.wasmSupport.canUseWasm) {
140
142
  const stringToHash = this.stringifyHashFields(obj);
141
143
  try {
142
- return (0, import_hex.asHash)(await (0, import_hash_wasm.sha256)(stringToHash), 256, true);
144
+ return (0, import_hex.asHash)(await (0, import_hash_wasm.sha256)(stringToHash), true);
143
145
  } catch (ex) {
144
146
  this.wasmSupport.allowWasm = false;
145
147
  }
@@ -153,7 +155,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
153
155
  return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
154
156
  }
155
157
  static hashSync(obj) {
156
- return (0, import_hex.asHash)((0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), 256, true);
158
+ return (0, import_hex.asHash)((0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
157
159
  }
158
160
  static async hashes(objs) {
159
161
  return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.ts","../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './model'\nexport * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[0-9a-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return asHash(hashArray, 256, true)\n } catch (ex) {\n console.log('Setting allowSubtle to false')\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), 256, true)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), 256, true)\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,IAAM,WAAW;AASV,IAAM,QAAQ,CAAC,UAAgC,SAAS,KAAK,KAAK;;;ACVzE,iBAA6B;AAC7B,sBAAuB;AACvB,IAAAA,iBAAyC;AACzC,kBAA4B;AAC5B,uBAAuB;AACvB,iBAAkB;;;ACLlB,oBAAuB;AAEhB,IAAM,oBAAoB,CAAoC,QAAW;AAC9E,MAAI,QAAQ,QAAQ,MAAM,QAAQ,GAAG;AAAG,WAAO;AAE/C,QAAM,YAAqC,CAAC;AAC5C,SAAO,QAAQ,GAAG,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AAC5C,YAAI,sBAAO,KAAK,MAAM,UAAU;AAC9B,gBAAU,GAAG,IAAI,kBAAkB,KAAgC;AAAA,IACrE,WAAW,UAAU,QAAW;AAC9B,gBAAU,GAAG,IAAI;AAAA,IACnB;AAAA,EACF,CAAC;AACD,SAAO;AACT;;;ACdA,oBAA2D;AAKpD,IAAM,SAAS,CAAsB,KAAQ,WAAgC,SAA2C;AAC7H,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO;AAAA,EACT;AAGA,QAAM,kBAAc,sBAAU,KAAK,sBAAQ;AAG3C,QAAM,iBAAa,sBAAU,KAAK,CAAC,UAAU,KAAC,wBAAS,KAAK,CAAC;AAE7D,QAAM,oBAAgB,sBAAO,aAAa,SAAS;AACnD,QAAM,uBAAmB,sBAAO,YAAY,SAAS;AAErD,QAAM,uBAAmB,yBAAU,eAAe,CAACC,SAAW,OAAOA,MAAK,WAAW,IAAI,CAAC;AAE1F,aAAO,qBAAM,CAAC,GAAG,kBAAkB,gBAAgB;AACrD;AAEO,IAAM,2BAA2B,CAAsB,QAAW;AACvE,SAAO,OAAO,KAAK,CAAC,GAAG,QAAQ,IAAI,WAAW,GAAG,GAAG,oBAAM;AAC5D;AAEO,IAAM,2BAA2B,CAAsB,QAAW;AACvE,SAAO,OAAO,KAAK,CAAC,GAAG,QAAQ,IAAI,WAAW,GAAG,GAAG,oBAAM;AAC5D;;;AC9BA,oBAAqD;AAGrD,IAAM,UAAU,CAAC,UAAmB;AAClC,aAAO,wBAAS,KAAK,IAAI,WAAW,KAAK,IAAI;AAC/C;AAEO,IAAM,aAAa,CAAkC,QAAW;AACrE,QAAM,aAAa;AAEnB,QAAM,SAA0B,CAAC;AACjC,SAAO,KAAK,GAAG,EACZ,KAAK,EACL,QAAQ,CAAC,QAAQ;AAChB,WAAO,GAAG,IAAI,QAAQ,WAAW,GAAG,CAAC;AAAA,EACvC,CAAC;AACH,SAAO;AACT;;;AHNA,IAAM,oBAAoB,IAAI,wBAAY,CAAC,QAAQ,CAAC;AAE7C,IAAM,gBAAN,MAAM,uBAAuD,6BAAiB;AAAA,EACnF,OAAO,cAAc;AAAA,EACrB,OAAgB,kBAAkB,kBAAkB,WAAW;AAAA,EAC/D,OAAgB,cAAc;AAAA,EAE9B,aAAa,cAAmC,OAAY,CAAC,GAAG,MAAmC;AAlBrG;AAmBI,UAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACjD,YAAQ,YAAM,KAAK,UAAU,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,OAAO,SAAS,OAAO,CAAC,MAA9E,mBAAiF,IAAI,CAAC,SAAS,KAAK,CAAC;AAAA,EAC/G;AAAA,EAEA,aAAa,cAAmC,OAAY,CAAC,GAAG,MAAmC;AAvBrG;AAwBI,UAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACjD,YAAQ,YAAM,KAAK,UAAU,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,MAAM,OAAO,SAAS,OAAO,CAAC,MAA7E,mBAAgF,IAAI,CAAC,SAAS,KAAK,CAAC;AAAA,EAC9G;AAAA,EAEA,aAAa,KAA0B,OAAY,CAAC,GAAG,MAAoC;AA5B7F;AA6BI,YAAQ,YAAM,KAAK,UAAU,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,OAAO,MAAM,YAAY,IAAI,MAAnE,mBAAuE;AAAA,EACjF;AAAA,EAEA,aAAa,UAA+B,KAAuB;AACjE,QAAI,eAAc,aAAa;AAC7B,UAAI;AACF,cAAM,MAAM,IAAI,YAAY;AAC5B,cAAM,eAAe,KAAK,oBAAoB,GAAG;AACjD,cAAM,IAAI,IAAI,OAAO,YAAY;AACjC,cAAM,YAAY,MAAM,uBAAO,OAAO,WAAW,CAAC;AAClD,mBAAO,mBAAO,WAAW,KAAK,IAAI;AAAA,MACpC,SAAS,IAAI;AACX,gBAAQ,IAAI,8BAA8B;AAC1C,uBAAc,cAAc;AAAA,MAC9B;AAAA,IACF;AAEA,UAAM,KAAK;AACX,QAAI,KAAK,YAAY,YAAY;AAC/B,YAAM,eAAe,KAAK,oBAAoB,GAAG;AACjD,UAAI;AACF,mBAAO,mBAAO,UAAM,yBAAO,YAAY,GAAG,KAAK,IAAI;AAAA,MACrD,SAAS,IAAI;AACX,aAAK,YAAY,YAAY;AAAA,MAC/B;AAAA,IACF;AACA,WAAO,KAAK,SAAS,GAAG;AAAA,EAC1B;AAAA,EAEA,OAAO,WAAgC,KAAW;AAChD,WAAO,WAAW,kBAAkB,yBAAyB,GAAG,CAAC,CAAC;AAAA,EACpE;AAAA,EAEA,aAAa,UAA+B,MAAiC;AAC3E,WAAO,MAAM,QAAQ,IAAI,KAAK,IAA0B,OAAO,QAAQ,CAAC,KAAK,MAAM,eAAc,UAAU,GAAG,CAAC,CAAC,CAAC;AAAA,EACnH;AAAA,EAEA,OAAO,SAA8B,KAAc;AACjD,eAAO,uBAAO,WAAAC,SAAM,QAAQ,EAAE,OAAO,KAAK,oBAAoB,GAAG,CAAC,EAAE,OAAO,EAAE,SAAS,KAAK,GAAG,KAAK,IAAI;AAAA,EACzG;AAAA,EAEA,aAAa,OAA4B,MAA4B;AACnE,WAAO,MAAM,QAAQ,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,UAAU,GAAG,CAAC,CAAC;AAAA,EACjE;AAAA;AAAA,EAGA,OAAO,YAEL,SAEA,OAAO,OACJ;AACH,WAAO,WAAW,kBAAkB,OAAO,UAAU,yBAAyB,OAAO,CAAC,CAAC;AAAA,EACzF;AAAA,EAEA,OAAO,oBAAyC,KAAQ;AACtD,WAAO,KAAK,UAAU,KAAK,WAAW,GAAG,CAAC;AAAA,EAC5C;AAAA,EAEA,aAAa,MAA2B,MAAqC;AAC3E,UAAM,SAA4B,CAAC;AACnC,UAAM,QAAQ,IAAI,KAAK,IAAI,OAAO,QAAS,OAAO,MAAM,eAAc,UAAU,GAAG,CAAC,IAAI,GAAI,CAAC;AAC7F,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,YAA2B;AAC/B,WAAO,MAAM,eAAc,UAAU,KAAK,GAAG;AAAA,EAC/C;AAAA,EAEA,WAAiB;AACf,WAAO,eAAc,SAAS,KAAK,GAAG;AAAA,EACxC;AAAA;AAAA,EAGA,YAEE,OAAO,OACJ;AACH,WAAO,eAAc,YAAY,KAAK,KAAK,IAAI;AAAA,EACjD;AACF;","names":["import_object","obj","shajs"]}
1
+ {"version":3,"sources":["../../src/index.ts","../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './model'\nexport * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[0-9a-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["import_object","obj","shajs"]}
@@ -3,7 +3,7 @@ var hexRegex = /[0-9a-f]+/i;
3
3
  var isHex = (value) => hexRegex.test(value);
4
4
 
5
5
  // src/PayloadHasher.ts
6
- import { asHash } from "@xylabs/hex";
6
+ import { asHash, hexFromArrayBuffer } from "@xylabs/hex";
7
7
  import { subtle } from "@xylabs/platform";
8
8
  import { ObjectWrapper } from "@xyo-network/object";
9
9
  import { WasmSupport } from "@xyo-network/wasm";
@@ -87,9 +87,11 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
87
87
  const stringToHash = this.stringifyHashFields(obj);
88
88
  const b = enc.encode(stringToHash);
89
89
  const hashArray = await subtle.digest("SHA-256", b);
90
- return asHash(hashArray, 256, true);
90
+ return hexFromArrayBuffer(hashArray, { bitLength: 256 });
91
91
  } catch (ex) {
92
- console.log("Setting allowSubtle to false");
92
+ const error = ex;
93
+ console.error(`Setting allowSubtle to false [${error.message}]`);
94
+ console.log(error.stack);
93
95
  _PayloadHasher.allowSubtle = false;
94
96
  }
95
97
  }
@@ -97,7 +99,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
97
99
  if (this.wasmSupport.canUseWasm) {
98
100
  const stringToHash = this.stringifyHashFields(obj);
99
101
  try {
100
- return asHash(await sha256(stringToHash), 256, true);
102
+ return asHash(await sha256(stringToHash), true);
101
103
  } catch (ex) {
102
104
  this.wasmSupport.allowWasm = false;
103
105
  }
@@ -111,7 +113,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
111
113
  return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
112
114
  }
113
115
  static hashSync(obj) {
114
- return asHash(shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), 256, true);
116
+ return asHash(shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
115
117
  }
116
118
  static async hashes(objs) {
117
119
  return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[0-9a-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return asHash(hashArray, 256, true)\n } catch (ex) {\n console.log('Setting allowSubtle to false')\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), 256, true)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), 256, true)\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["obj","isObject"]}
1
+ {"version":3,"sources":["../../src/model.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["/** @deprecated use @xylabs/hex instead */\nconst hexRegex = /[0-9a-f]+/i\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hex = string\n\n/** @deprecated use @xylabs/hex instead */\nexport type Hash = Hex\n\n/** @deprecated use @xylabs/hex instead */\nexport const isHex = (value: string): value is Hex => hexRegex.test(value)\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return hexFromArrayBuffer(hashArray, { bitLength: 256 })\n } catch (ex) {\n const error = ex as Error\n console.error(`Setting allowSubtle to false [${error.message}]`)\n console.log(error.stack)\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return asHash(await sha256(stringToHash), true)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["obj","isObject"]}
package/package.json CHANGED
@@ -10,12 +10,12 @@
10
10
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
11
11
  },
12
12
  "dependencies": {
13
- "@xylabs/hex": "^2.13.15",
14
- "@xylabs/lodash": "^2.13.15",
15
- "@xylabs/platform": "^2.13.15",
16
- "@xyo-network/object": "~2.81.8",
17
- "@xyo-network/typeof": "~2.81.8",
18
- "@xyo-network/wasm": "~2.81.8",
13
+ "@xylabs/hex": "^2.13.18",
14
+ "@xylabs/lodash": "^2.13.18",
15
+ "@xylabs/platform": "^2.13.18",
16
+ "@xyo-network/object": "~2.81.10",
17
+ "@xyo-network/typeof": "~2.81.10",
18
+ "@xyo-network/wasm": "~2.81.10",
19
19
  "hash-wasm": "^4.11.0",
20
20
  "sha.js": "^2.4.11"
21
21
  },
@@ -66,5 +66,5 @@
66
66
  "url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
67
67
  },
68
68
  "sideEffects": false,
69
- "version": "2.81.8"
69
+ "version": "2.81.10"
70
70
  }
@@ -1,4 +1,4 @@
1
- import { asHash, Hash } from '@xylabs/hex'
1
+ import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'
2
2
  import { subtle } from '@xylabs/platform'
3
3
  import { AnyObject, ObjectWrapper } from '@xyo-network/object'
4
4
  import { WasmSupport } from '@xyo-network/wasm'
@@ -37,9 +37,11 @@ export class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrappe
37
37
  const stringToHash = this.stringifyHashFields(obj)
38
38
  const b = enc.encode(stringToHash)
39
39
  const hashArray = await subtle.digest('SHA-256', b)
40
- return asHash(hashArray, 256, true)
40
+ return hexFromArrayBuffer(hashArray, { bitLength: 256 })
41
41
  } catch (ex) {
42
- console.log('Setting allowSubtle to false')
42
+ const error = ex as Error
43
+ console.error(`Setting allowSubtle to false [${error.message}]`)
44
+ console.log(error.stack)
43
45
  PayloadHasher.allowSubtle = false
44
46
  }
45
47
  }
@@ -48,7 +50,7 @@ export class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrappe
48
50
  if (this.wasmSupport.canUseWasm) {
49
51
  const stringToHash = this.stringifyHashFields(obj)
50
52
  try {
51
- return asHash(await sha256(stringToHash), 256, true)
53
+ return asHash(await sha256(stringToHash), true)
52
54
  } catch (ex) {
53
55
  this.wasmSupport.allowWasm = false
54
56
  }
@@ -65,7 +67,7 @@ export class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrappe
65
67
  }
66
68
 
67
69
  static hashSync<T extends AnyObject>(obj: T): Hash {
68
- return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), 256, true)
70
+ return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)
69
71
  }
70
72
 
71
73
  static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {