@xyo-network/hash 2.81.6 → 2.82.0-rc.1

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 (61) hide show
  1. package/dist/browser/PayloadHasher.d.cts +16 -5
  2. package/dist/browser/PayloadHasher.d.cts.map +1 -1
  3. package/dist/browser/PayloadHasher.d.mts +16 -5
  4. package/dist/browser/PayloadHasher.d.mts.map +1 -1
  5. package/dist/browser/PayloadHasher.d.ts +16 -5
  6. package/dist/browser/PayloadHasher.d.ts.map +1 -1
  7. package/dist/browser/index.cjs +70 -16
  8. package/dist/browser/index.cjs.map +1 -1
  9. package/dist/browser/index.d.cts +1 -0
  10. package/dist/browser/index.d.cts.map +1 -1
  11. package/dist/browser/index.d.mts +1 -0
  12. package/dist/browser/index.d.mts.map +1 -1
  13. package/dist/browser/index.d.ts +1 -0
  14. package/dist/browser/index.d.ts.map +1 -1
  15. package/dist/browser/index.js +69 -15
  16. package/dist/browser/index.js.map +1 -1
  17. package/dist/browser/model.d.cts +6 -1
  18. package/dist/browser/model.d.cts.map +1 -1
  19. package/dist/browser/model.d.mts +6 -1
  20. package/dist/browser/model.d.mts.map +1 -1
  21. package/dist/browser/model.d.ts +6 -1
  22. package/dist/browser/model.d.ts.map +1 -1
  23. package/dist/browser/toUint8Array.d.cts +4 -0
  24. package/dist/browser/toUint8Array.d.cts.map +1 -0
  25. package/dist/browser/toUint8Array.d.mts +4 -0
  26. package/dist/browser/toUint8Array.d.mts.map +1 -0
  27. package/dist/browser/toUint8Array.d.ts +4 -0
  28. package/dist/browser/toUint8Array.d.ts.map +1 -0
  29. package/dist/node/PayloadHasher.d.cts +16 -5
  30. package/dist/node/PayloadHasher.d.cts.map +1 -1
  31. package/dist/node/PayloadHasher.d.mts +16 -5
  32. package/dist/node/PayloadHasher.d.mts.map +1 -1
  33. package/dist/node/PayloadHasher.d.ts +16 -5
  34. package/dist/node/PayloadHasher.d.ts.map +1 -1
  35. package/dist/node/index.cjs +73 -17
  36. package/dist/node/index.cjs.map +1 -1
  37. package/dist/node/index.d.cts +1 -0
  38. package/dist/node/index.d.cts.map +1 -1
  39. package/dist/node/index.d.mts +1 -0
  40. package/dist/node/index.d.mts.map +1 -1
  41. package/dist/node/index.d.ts +1 -0
  42. package/dist/node/index.d.ts.map +1 -1
  43. package/dist/node/index.js +69 -15
  44. package/dist/node/index.js.map +1 -1
  45. package/dist/node/model.d.cts +6 -1
  46. package/dist/node/model.d.cts.map +1 -1
  47. package/dist/node/model.d.mts +6 -1
  48. package/dist/node/model.d.mts.map +1 -1
  49. package/dist/node/model.d.ts +6 -1
  50. package/dist/node/model.d.ts.map +1 -1
  51. package/dist/node/toUint8Array.d.cts +4 -0
  52. package/dist/node/toUint8Array.d.cts.map +1 -0
  53. package/dist/node/toUint8Array.d.mts +4 -0
  54. package/dist/node/toUint8Array.d.mts.map +1 -0
  55. package/dist/node/toUint8Array.d.ts +4 -0
  56. package/dist/node/toUint8Array.d.ts.map +1 -0
  57. package/package.json +11 -9
  58. package/src/PayloadHasher.ts +50 -15
  59. package/src/index.ts +1 -0
  60. package/src/model.ts +11 -1
  61. package/src/toUint8Array.ts +35 -0
@@ -1,6 +1,6 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { AnyObject, ObjectWrapper } from '@xyo-network/object';
2
3
  import { WasmSupport } from '@xyo-network/wasm';
3
- import { Hash } from './model';
4
4
  export declare class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {
5
5
  static allowSubtle: boolean;
6
6
  static readonly wasmInitialized: Promise<void>;
@@ -8,10 +8,15 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
8
8
  static filterExclude<T extends AnyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
9
9
  static filterInclude<T extends AnyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
10
10
  static find<T extends AnyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
11
- static hashAsync<T extends AnyObject>(obj: T): Promise<Hash>;
11
+ static hashAsync<T extends AnyObject>(obj: T, encoding?: undefined): Promise<Hash>;
12
+ static hashAsync<T extends AnyObject>(obj: T, encoding: 'buffer'): Promise<ArrayBuffer>;
13
+ static hashAsync<T extends AnyObject>(obj: T, encoding: 'hex'): Promise<Hash>;
12
14
  static hashFields<T extends AnyObject>(obj: T): T;
13
15
  static hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]>;
14
- static hashSync<T extends AnyObject>(obj: T): Hash;
16
+ /** @deprecated pass encoding [hex,buffer] */
17
+ static hashSync<T extends AnyObject>(obj: T, encoding?: undefined): Hash;
18
+ static hashSync<T extends AnyObject>(obj: T, encoding: 'buffer'): ArrayBuffer;
19
+ static hashSync<T extends AnyObject>(obj: T, encoding: 'hex'): Hash;
15
20
  static hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]>;
16
21
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
17
22
  static jsonPayload<T extends AnyObject>(
@@ -21,8 +26,14 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
21
26
  meta?: boolean): T;
22
27
  static stringifyHashFields<T extends AnyObject>(obj: T): string;
23
28
  static toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>>;
24
- hashAsync(): Promise<Hash>;
25
- hashSync(): Hash;
29
+ /** @deprecated pass encoding [hex,buffer] */
30
+ hashAsync(encoding?: undefined): Promise<Hash>;
31
+ hashAsync(encoding: 'buffer'): Promise<ArrayBuffer>;
32
+ hashAsync(encoding: 'hex'): Promise<Hash>;
33
+ /** @deprecated pass encoding [hex,buffer] */
34
+ hashSync(encoding?: undefined): Hash;
35
+ hashSync(encoding: 'buffer'): ArrayBuffer;
36
+ hashSync(encoding: 'hex'): Hash;
26
37
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
27
38
  jsonPayload(
28
39
  /** @param meta Keeps underscore (meta) fields if set to true */
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAO9B,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":"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"}
@@ -1,6 +1,6 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { AnyObject, ObjectWrapper } from '@xyo-network/object';
2
3
  import { WasmSupport } from '@xyo-network/wasm';
3
- import { Hash } from './model';
4
4
  export declare class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {
5
5
  static allowSubtle: boolean;
6
6
  static readonly wasmInitialized: Promise<void>;
@@ -8,10 +8,15 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
8
8
  static filterExclude<T extends AnyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
9
9
  static filterInclude<T extends AnyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
10
10
  static find<T extends AnyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
11
- static hashAsync<T extends AnyObject>(obj: T): Promise<Hash>;
11
+ static hashAsync<T extends AnyObject>(obj: T, encoding?: undefined): Promise<Hash>;
12
+ static hashAsync<T extends AnyObject>(obj: T, encoding: 'buffer'): Promise<ArrayBuffer>;
13
+ static hashAsync<T extends AnyObject>(obj: T, encoding: 'hex'): Promise<Hash>;
12
14
  static hashFields<T extends AnyObject>(obj: T): T;
13
15
  static hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]>;
14
- static hashSync<T extends AnyObject>(obj: T): Hash;
16
+ /** @deprecated pass encoding [hex,buffer] */
17
+ static hashSync<T extends AnyObject>(obj: T, encoding?: undefined): Hash;
18
+ static hashSync<T extends AnyObject>(obj: T, encoding: 'buffer'): ArrayBuffer;
19
+ static hashSync<T extends AnyObject>(obj: T, encoding: 'hex'): Hash;
15
20
  static hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]>;
16
21
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
17
22
  static jsonPayload<T extends AnyObject>(
@@ -21,8 +26,14 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
21
26
  meta?: boolean): T;
22
27
  static stringifyHashFields<T extends AnyObject>(obj: T): string;
23
28
  static toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>>;
24
- hashAsync(): Promise<Hash>;
25
- hashSync(): Hash;
29
+ /** @deprecated pass encoding [hex,buffer] */
30
+ hashAsync(encoding?: undefined): Promise<Hash>;
31
+ hashAsync(encoding: 'buffer'): Promise<ArrayBuffer>;
32
+ hashAsync(encoding: 'hex'): Promise<Hash>;
33
+ /** @deprecated pass encoding [hex,buffer] */
34
+ hashSync(encoding?: undefined): Hash;
35
+ hashSync(encoding: 'buffer'): ArrayBuffer;
36
+ hashSync(encoding: 'hex'): Hash;
26
37
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
27
38
  jsonPayload(
28
39
  /** @param meta Keeps underscore (meta) fields if set to true */
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAO9B,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":"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"}
@@ -1,6 +1,6 @@
1
+ import { Hash } from '@xylabs/hex';
1
2
  import { AnyObject, ObjectWrapper } from '@xyo-network/object';
2
3
  import { WasmSupport } from '@xyo-network/wasm';
3
- import { Hash } from './model';
4
4
  export declare class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {
5
5
  static allowSubtle: boolean;
6
6
  static readonly wasmInitialized: Promise<void>;
@@ -8,10 +8,15 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
8
8
  static filterExclude<T extends AnyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
9
9
  static filterInclude<T extends AnyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
10
10
  static find<T extends AnyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
11
- static hashAsync<T extends AnyObject>(obj: T): Promise<Hash>;
11
+ static hashAsync<T extends AnyObject>(obj: T, encoding?: undefined): Promise<Hash>;
12
+ static hashAsync<T extends AnyObject>(obj: T, encoding: 'buffer'): Promise<ArrayBuffer>;
13
+ static hashAsync<T extends AnyObject>(obj: T, encoding: 'hex'): Promise<Hash>;
12
14
  static hashFields<T extends AnyObject>(obj: T): T;
13
15
  static hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]>;
14
- static hashSync<T extends AnyObject>(obj: T): Hash;
16
+ /** @deprecated pass encoding [hex,buffer] */
17
+ static hashSync<T extends AnyObject>(obj: T, encoding?: undefined): Hash;
18
+ static hashSync<T extends AnyObject>(obj: T, encoding: 'buffer'): ArrayBuffer;
19
+ static hashSync<T extends AnyObject>(obj: T, encoding: 'hex'): Hash;
15
20
  static hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]>;
16
21
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
17
22
  static jsonPayload<T extends AnyObject>(
@@ -21,8 +26,14 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
21
26
  meta?: boolean): T;
22
27
  static stringifyHashFields<T extends AnyObject>(obj: T): string;
23
28
  static toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>>;
24
- hashAsync(): Promise<Hash>;
25
- hashSync(): Hash;
29
+ /** @deprecated pass encoding [hex,buffer] */
30
+ hashAsync(encoding?: undefined): Promise<Hash>;
31
+ hashAsync(encoding: 'buffer'): Promise<ArrayBuffer>;
32
+ hashAsync(encoding: 'hex'): Promise<Hash>;
33
+ /** @deprecated pass encoding [hex,buffer] */
34
+ hashSync(encoding?: undefined): Hash;
35
+ hashSync(encoding: 'buffer'): ArrayBuffer;
36
+ hashSync(encoding: 'hex'): Hash;
26
37
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
27
38
  jsonPayload(
28
39
  /** @param meta Keeps underscore (meta) fields if set to true */
@@ -1 +1 @@
1
- {"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAI/C,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAO9B,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":"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"}
@@ -34,14 +34,19 @@ __export(src_exports, {
34
34
  deepBy: () => deepBy,
35
35
  deepOmitUnderscoreFields: () => deepOmitUnderscoreFields,
36
36
  deepPickUnderscoreFields: () => deepPickUnderscoreFields,
37
+ isHex: () => isHex,
37
38
  removeEmptyFields: () => removeEmptyFields,
38
- sortFields: () => sortFields
39
+ sortFields: () => sortFields,
40
+ toUint8Array: () => toUint8Array
39
41
  });
40
42
  module.exports = __toCommonJS(src_exports);
41
43
 
44
+ // src/model.ts
45
+ var hexRegex = /[0-9a-f]+/i;
46
+ var isHex = (value) => hexRegex.test(value);
47
+
42
48
  // src/PayloadHasher.ts
43
- var import_base = require("@scure/base");
44
- var import_buffer = require("@xylabs/buffer");
49
+ var import_hex = require("@xylabs/hex");
45
50
  var import_platform = require("@xylabs/platform");
46
51
  var import_object2 = require("@xyo-network/object");
47
52
  var import_wasm = require("@xyo-network/wasm");
@@ -98,6 +103,34 @@ var sortFields = (obj) => {
98
103
  return result;
99
104
  };
100
105
 
106
+ // src/toUint8Array.ts
107
+ var import_base = require("@scure/base");
108
+ var import_assert = require("@xylabs/assert");
109
+ var import_typeof2 = require("@xyo-network/typeof");
110
+ var stringToUint8Array = (value, base = 16) => {
111
+ switch (base) {
112
+ case 16:
113
+ return import_base.base16.decode((value.startsWith("0x") ? value.slice(2) : value).toUpperCase());
114
+ case 58:
115
+ return import_base.base58.decode(value);
116
+ default:
117
+ throw Error(`Unsupported base [${base}]`);
118
+ }
119
+ };
120
+ function toUint8Array(value, padLength, base) {
121
+ if (value === void 0)
122
+ return void 0;
123
+ let result = (0, import_typeof2.ifTypeOf)("string", value, (value2) => stringToUint8Array(value2, base)) ?? value;
124
+ if (result === void 0) {
125
+ throw Error(`toUint8Array - Unknown type: ${typeof value}`);
126
+ }
127
+ if (padLength && result.length < padLength) {
128
+ result = new Uint8Array([...new Uint8Array(padLength - result.length), ...result]);
129
+ (0, import_assert.assertEx)(result?.length <= padLength, "Resulting length is greater than padLength");
130
+ }
131
+ return result;
132
+ }
133
+
101
134
  // src/PayloadHasher.ts
102
135
  var wasmSupportStatic = new import_wasm.WasmSupport(["bigInt"]);
103
136
  var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
@@ -115,14 +148,14 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
115
148
  static async find(objs = [], hash) {
116
149
  return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0];
117
150
  }
118
- static async hashAsync(obj) {
151
+ static async hashAsync(obj, encoding) {
119
152
  if (_PayloadHasher.allowSubtle) {
120
153
  try {
121
154
  const enc = new TextEncoder();
122
155
  const stringToHash = this.stringifyHashFields(obj);
123
156
  const b = enc.encode(stringToHash);
124
157
  const hashArray = await import_platform.subtle.digest("SHA-256", b);
125
- return import_base.base16.encode(import_buffer.Buffer.from(hashArray)).toLowerCase();
158
+ return encoding === "buffer" ? hashArray : (0, import_hex.asHash)(hashArray, 256, true);
126
159
  } catch (ex) {
127
160
  console.log("Setting allowSubtle to false");
128
161
  _PayloadHasher.allowSubtle = false;
@@ -132,7 +165,8 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
132
165
  if (this.wasmSupport.canUseWasm) {
133
166
  const stringToHash = this.stringifyHashFields(obj);
134
167
  try {
135
- return await (0, import_hash_wasm.sha256)(stringToHash);
168
+ const hash = (0, import_hex.asHash)(await (0, import_hash_wasm.sha256)(stringToHash), 256, true);
169
+ return encoding === "buffer" ? toUint8Array(hash) : hash;
136
170
  } catch (ex) {
137
171
  this.wasmSupport.allowWasm = false;
138
172
  }
@@ -143,13 +177,19 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
143
177
  return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)));
144
178
  }
145
179
  static async hashPairs(objs) {
146
- return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
147
- }
148
- static hashSync(obj) {
149
- return (0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex");
180
+ return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj, "hex")]));
181
+ }
182
+ static hashSync(obj, encoding) {
183
+ const buffer = (0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest();
184
+ switch (encoding) {
185
+ case "buffer":
186
+ return buffer.buffer;
187
+ default:
188
+ return (0, import_hex.asHash)(buffer.toString("hex"), 256, true);
189
+ }
150
190
  }
151
191
  static async hashes(objs) {
152
- return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
192
+ return await Promise.all(objs.map((obj) => this.hashAsync(obj, "hex")));
153
193
  }
154
194
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
155
195
  static jsonPayload(payload, meta = false) {
@@ -160,14 +200,28 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
160
200
  }
161
201
  static async toMap(objs) {
162
202
  const result = {};
163
- await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj)] = obj));
203
+ await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj, "hex")] = obj));
164
204
  return result;
165
205
  }
166
- async hashAsync() {
167
- return await _PayloadHasher.hashAsync(this.obj);
206
+ async hashAsync(encoding) {
207
+ switch (encoding) {
208
+ case "buffer":
209
+ return await _PayloadHasher.hashAsync(this.obj, encoding);
210
+ case "hex":
211
+ return await _PayloadHasher.hashAsync(this.obj, encoding);
212
+ default:
213
+ return await _PayloadHasher.hashAsync(this.obj, encoding);
214
+ }
168
215
  }
169
- hashSync() {
170
- return _PayloadHasher.hashSync(this.obj);
216
+ hashSync(encoding) {
217
+ switch (encoding) {
218
+ case "hex":
219
+ return _PayloadHasher.hashSync(this.obj, encoding);
220
+ case "buffer":
221
+ return _PayloadHasher.hashSync(this.obj, encoding);
222
+ default:
223
+ return _PayloadHasher.hashSync(this.obj, encoding);
224
+ }
171
225
  }
172
226
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
173
227
  jsonPayload(meta = false) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.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","import { base16 } from '@scure/base'\nimport { Buffer } from '@xylabs/buffer'\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 { Hash } from './model'\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 base16.encode(Buffer.from(hashArray)).toLowerCase()\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 await sha256(stringToHash)\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 shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex')\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","../../src/toUint8Array.ts"],"sourcesContent":["export * from './model'\nexport * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\nexport * from './toUint8Array'\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'\nimport { toUint8Array } from './toUint8Array'\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, encoding?: undefined): Promise<Hash>\n static async hashAsync<T extends AnyObject>(obj: T, encoding: 'buffer'): Promise<ArrayBuffer>\n static async hashAsync<T extends AnyObject>(obj: T, encoding: 'hex'): Promise<Hash>\n static async hashAsync<T extends AnyObject>(obj: T, encoding?: 'buffer' | 'hex'): Promise<Hash | ArrayBuffer> {\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 encoding === 'buffer' ? hashArray : 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 const hash = asHash(await sha256(stringToHash), 256, true)\n return encoding === 'buffer' ? toUint8Array(hash) : hash\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, 'hex')]))\n }\n\n /** @deprecated pass encoding [hex,buffer] */\n static hashSync<T extends AnyObject>(obj: T, encoding?: undefined): Hash\n static hashSync<T extends AnyObject>(obj: T, encoding: 'buffer'): ArrayBuffer\n static hashSync<T extends AnyObject>(obj: T, encoding: 'hex'): Hash\n static hashSync<T extends AnyObject>(obj: T, encoding?: 'buffer' | 'hex'): Hash | ArrayBuffer {\n const buffer = shajs('sha256').update(this.stringifyHashFields(obj)).digest()\n switch (encoding) {\n case 'buffer':\n return buffer.buffer\n default:\n return asHash(buffer.toString('hex'), 256, true)\n }\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj, 'hex')))\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, 'hex')] = obj)))\n return result\n }\n\n /** @deprecated pass encoding [hex,buffer] */\n async hashAsync(encoding?: undefined): Promise<Hash>\n async hashAsync(encoding: 'buffer'): Promise<ArrayBuffer>\n async hashAsync(encoding: 'hex'): Promise<Hash>\n async hashAsync(encoding?: 'buffer' | 'hex'): Promise<Hash | ArrayBuffer> {\n switch (encoding) {\n case 'buffer':\n return await PayloadHasher.hashAsync(this.obj, encoding)\n case 'hex':\n return await PayloadHasher.hashAsync(this.obj, encoding)\n default:\n return await PayloadHasher.hashAsync(this.obj, encoding)\n }\n }\n\n /** @deprecated pass encoding [hex,buffer] */\n hashSync(encoding?: undefined): Hash\n hashSync(encoding: 'buffer'): ArrayBuffer\n hashSync(encoding: 'hex'): Hash\n hashSync(encoding?: 'hex' | 'buffer'): Hash | ArrayBuffer {\n switch (encoding) {\n case 'hex':\n return PayloadHasher.hashSync(this.obj, encoding)\n case 'buffer':\n return PayloadHasher.hashSync(this.obj, encoding)\n default:\n return PayloadHasher.hashSync(this.obj, encoding)\n }\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","import { base16, base58 } from '@scure/base'\nimport { assertEx } from '@xylabs/assert'\nimport { ifTypeOf } from '@xyo-network/typeof'\n\nconst stringToUint8Array = (value: string, base = 16) => {\n switch (base) {\n case 16:\n return base16.decode((value.startsWith('0x') ? value.slice(2) : value).toUpperCase())\n case 58:\n return base58.decode(value)\n default:\n throw Error(`Unsupported base [${base}]`)\n }\n}\n\nexport function toUint8Array(value: undefined, padLength?: number, base?: number): undefined\nexport function toUint8Array(value: ArrayBuffer | string, padLength?: number, base?: number): Uint8Array\nexport function toUint8Array(value: ArrayBuffer | string | undefined, padLength?: number, base?: number): Uint8Array | undefined\nexport function toUint8Array(value?: ArrayBuffer | string, padLength?: number, base?: number): Uint8Array | undefined {\n if (value === undefined) return undefined\n\n let result: Uint8Array | undefined =\n ifTypeOf<string, Uint8Array>('string', value as string, (value) => stringToUint8Array(value, base)) ?? (value as Uint8Array)\n\n if (result === undefined) {\n throw Error(`toUint8Array - Unknown type: ${typeof value}`)\n }\n\n if (padLength && result.length < padLength) {\n result = new Uint8Array([...new Uint8Array(padLength - result.length), ...result])\n assertEx(result?.length <= padLength, 'Resulting length is greater than padLength')\n }\n\n return result\n}\n"],"mappings":"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","names":["import_object","obj","import_typeof","value","shajs"]}
@@ -3,4 +3,5 @@ export * from './PayloadHasher';
3
3
  export * from './removeEmptyFields';
4
4
  export * from './removeFields';
5
5
  export * from './sortFields';
6
+ export * from './toUint8Array';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA"}
@@ -3,4 +3,5 @@ export * from './PayloadHasher';
3
3
  export * from './removeEmptyFields';
4
4
  export * from './removeFields';
5
5
  export * from './sortFields';
6
+ export * from './toUint8Array';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA"}
@@ -3,4 +3,5 @@ export * from './PayloadHasher';
3
3
  export * from './removeEmptyFields';
4
4
  export * from './removeFields';
5
5
  export * from './sortFields';
6
+ export * from './toUint8Array';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAA;AACvB,cAAc,iBAAiB,CAAA;AAC/B,cAAc,qBAAqB,CAAA;AACnC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,cAAc,CAAA;AAC5B,cAAc,gBAAgB,CAAA"}
@@ -1,6 +1,9 @@
1
+ // src/model.ts
2
+ var hexRegex = /[0-9a-f]+/i;
3
+ var isHex = (value) => hexRegex.test(value);
4
+
1
5
  // src/PayloadHasher.ts
2
- import { base16 } from "@scure/base";
3
- import { Buffer } from "@xylabs/buffer";
6
+ import { asHash } from "@xylabs/hex";
4
7
  import { subtle } from "@xylabs/platform";
5
8
  import { ObjectWrapper } from "@xyo-network/object";
6
9
  import { WasmSupport } from "@xyo-network/wasm";
@@ -57,6 +60,34 @@ var sortFields = (obj) => {
57
60
  return result;
58
61
  };
59
62
 
63
+ // src/toUint8Array.ts
64
+ import { base16, base58 } from "@scure/base";
65
+ import { assertEx } from "@xylabs/assert";
66
+ import { ifTypeOf } from "@xyo-network/typeof";
67
+ var stringToUint8Array = (value, base = 16) => {
68
+ switch (base) {
69
+ case 16:
70
+ return base16.decode((value.startsWith("0x") ? value.slice(2) : value).toUpperCase());
71
+ case 58:
72
+ return base58.decode(value);
73
+ default:
74
+ throw Error(`Unsupported base [${base}]`);
75
+ }
76
+ };
77
+ function toUint8Array(value, padLength, base) {
78
+ if (value === void 0)
79
+ return void 0;
80
+ let result = ifTypeOf("string", value, (value2) => stringToUint8Array(value2, base)) ?? value;
81
+ if (result === void 0) {
82
+ throw Error(`toUint8Array - Unknown type: ${typeof value}`);
83
+ }
84
+ if (padLength && result.length < padLength) {
85
+ result = new Uint8Array([...new Uint8Array(padLength - result.length), ...result]);
86
+ assertEx(result?.length <= padLength, "Resulting length is greater than padLength");
87
+ }
88
+ return result;
89
+ }
90
+
60
91
  // src/PayloadHasher.ts
61
92
  var wasmSupportStatic = new WasmSupport(["bigInt"]);
62
93
  var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
@@ -74,14 +105,14 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
74
105
  static async find(objs = [], hash) {
75
106
  return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0];
76
107
  }
77
- static async hashAsync(obj) {
108
+ static async hashAsync(obj, encoding) {
78
109
  if (_PayloadHasher.allowSubtle) {
79
110
  try {
80
111
  const enc = new TextEncoder();
81
112
  const stringToHash = this.stringifyHashFields(obj);
82
113
  const b = enc.encode(stringToHash);
83
114
  const hashArray = await subtle.digest("SHA-256", b);
84
- return base16.encode(Buffer.from(hashArray)).toLowerCase();
115
+ return encoding === "buffer" ? hashArray : asHash(hashArray, 256, true);
85
116
  } catch (ex) {
86
117
  console.log("Setting allowSubtle to false");
87
118
  _PayloadHasher.allowSubtle = false;
@@ -91,7 +122,8 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
91
122
  if (this.wasmSupport.canUseWasm) {
92
123
  const stringToHash = this.stringifyHashFields(obj);
93
124
  try {
94
- return await sha256(stringToHash);
125
+ const hash = asHash(await sha256(stringToHash), 256, true);
126
+ return encoding === "buffer" ? toUint8Array(hash) : hash;
95
127
  } catch (ex) {
96
128
  this.wasmSupport.allowWasm = false;
97
129
  }
@@ -102,13 +134,19 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
102
134
  return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)));
103
135
  }
104
136
  static async hashPairs(objs) {
105
- return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
137
+ return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj, "hex")]));
106
138
  }
107
- static hashSync(obj) {
108
- return shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex");
139
+ static hashSync(obj, encoding) {
140
+ const buffer = shajs("sha256").update(this.stringifyHashFields(obj)).digest();
141
+ switch (encoding) {
142
+ case "buffer":
143
+ return buffer.buffer;
144
+ default:
145
+ return asHash(buffer.toString("hex"), 256, true);
146
+ }
109
147
  }
110
148
  static async hashes(objs) {
111
- return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
149
+ return await Promise.all(objs.map((obj) => this.hashAsync(obj, "hex")));
112
150
  }
113
151
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
114
152
  static jsonPayload(payload, meta = false) {
@@ -119,14 +157,28 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
119
157
  }
120
158
  static async toMap(objs) {
121
159
  const result = {};
122
- await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj)] = obj));
160
+ await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj, "hex")] = obj));
123
161
  return result;
124
162
  }
125
- async hashAsync() {
126
- return await _PayloadHasher.hashAsync(this.obj);
163
+ async hashAsync(encoding) {
164
+ switch (encoding) {
165
+ case "buffer":
166
+ return await _PayloadHasher.hashAsync(this.obj, encoding);
167
+ case "hex":
168
+ return await _PayloadHasher.hashAsync(this.obj, encoding);
169
+ default:
170
+ return await _PayloadHasher.hashAsync(this.obj, encoding);
171
+ }
127
172
  }
128
- hashSync() {
129
- return _PayloadHasher.hashSync(this.obj);
173
+ hashSync(encoding) {
174
+ switch (encoding) {
175
+ case "hex":
176
+ return _PayloadHasher.hashSync(this.obj, encoding);
177
+ case "buffer":
178
+ return _PayloadHasher.hashSync(this.obj, encoding);
179
+ default:
180
+ return _PayloadHasher.hashSync(this.obj, encoding);
181
+ }
130
182
  }
131
183
  /** @function jsonPayload Returns a clone of the payload that is JSON safe */
132
184
  jsonPayload(meta = false) {
@@ -138,7 +190,9 @@ export {
138
190
  deepBy,
139
191
  deepOmitUnderscoreFields,
140
192
  deepPickUnderscoreFields,
193
+ isHex,
141
194
  removeEmptyFields,
142
- sortFields
195
+ sortFields,
196
+ toUint8Array
143
197
  };
144
198
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { base16 } from '@scure/base'\nimport { Buffer } from '@xylabs/buffer'\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 { Hash } from './model'\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 base16.encode(Buffer.from(hashArray)).toLowerCase()\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 await sha256(stringToHash)\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 shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex')\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","../../src/toUint8Array.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'\nimport { toUint8Array } from './toUint8Array'\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, encoding?: undefined): Promise<Hash>\n static async hashAsync<T extends AnyObject>(obj: T, encoding: 'buffer'): Promise<ArrayBuffer>\n static async hashAsync<T extends AnyObject>(obj: T, encoding: 'hex'): Promise<Hash>\n static async hashAsync<T extends AnyObject>(obj: T, encoding?: 'buffer' | 'hex'): Promise<Hash | ArrayBuffer> {\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 encoding === 'buffer' ? hashArray : 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 const hash = asHash(await sha256(stringToHash), 256, true)\n return encoding === 'buffer' ? toUint8Array(hash) : hash\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, 'hex')]))\n }\n\n /** @deprecated pass encoding [hex,buffer] */\n static hashSync<T extends AnyObject>(obj: T, encoding?: undefined): Hash\n static hashSync<T extends AnyObject>(obj: T, encoding: 'buffer'): ArrayBuffer\n static hashSync<T extends AnyObject>(obj: T, encoding: 'hex'): Hash\n static hashSync<T extends AnyObject>(obj: T, encoding?: 'buffer' | 'hex'): Hash | ArrayBuffer {\n const buffer = shajs('sha256').update(this.stringifyHashFields(obj)).digest()\n switch (encoding) {\n case 'buffer':\n return buffer.buffer\n default:\n return asHash(buffer.toString('hex'), 256, true)\n }\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj, 'hex')))\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, 'hex')] = obj)))\n return result\n }\n\n /** @deprecated pass encoding [hex,buffer] */\n async hashAsync(encoding?: undefined): Promise<Hash>\n async hashAsync(encoding: 'buffer'): Promise<ArrayBuffer>\n async hashAsync(encoding: 'hex'): Promise<Hash>\n async hashAsync(encoding?: 'buffer' | 'hex'): Promise<Hash | ArrayBuffer> {\n switch (encoding) {\n case 'buffer':\n return await PayloadHasher.hashAsync(this.obj, encoding)\n case 'hex':\n return await PayloadHasher.hashAsync(this.obj, encoding)\n default:\n return await PayloadHasher.hashAsync(this.obj, encoding)\n }\n }\n\n /** @deprecated pass encoding [hex,buffer] */\n hashSync(encoding?: undefined): Hash\n hashSync(encoding: 'buffer'): ArrayBuffer\n hashSync(encoding: 'hex'): Hash\n hashSync(encoding?: 'hex' | 'buffer'): Hash | ArrayBuffer {\n switch (encoding) {\n case 'hex':\n return PayloadHasher.hashSync(this.obj, encoding)\n case 'buffer':\n return PayloadHasher.hashSync(this.obj, encoding)\n default:\n return PayloadHasher.hashSync(this.obj, encoding)\n }\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","import { base16, base58 } from '@scure/base'\nimport { assertEx } from '@xylabs/assert'\nimport { ifTypeOf } from '@xyo-network/typeof'\n\nconst stringToUint8Array = (value: string, base = 16) => {\n switch (base) {\n case 16:\n return base16.decode((value.startsWith('0x') ? value.slice(2) : value).toUpperCase())\n case 58:\n return base58.decode(value)\n default:\n throw Error(`Unsupported base [${base}]`)\n }\n}\n\nexport function toUint8Array(value: undefined, padLength?: number, base?: number): undefined\nexport function toUint8Array(value: ArrayBuffer | string, padLength?: number, base?: number): Uint8Array\nexport function toUint8Array(value: ArrayBuffer | string | undefined, padLength?: number, base?: number): Uint8Array | undefined\nexport function toUint8Array(value?: ArrayBuffer | string, padLength?: number, base?: number): Uint8Array | undefined {\n if (value === undefined) return undefined\n\n let result: Uint8Array | undefined =\n ifTypeOf<string, Uint8Array>('string', value as string, (value) => stringToUint8Array(value, base)) ?? (value as Uint8Array)\n\n if (result === undefined) {\n throw Error(`toUint8Array - Unknown type: ${typeof value}`)\n }\n\n if (padLength && result.length < padLength) {\n result = new Uint8Array([...new Uint8Array(padLength - result.length), ...result])\n assertEx(result?.length <= padLength, 'Resulting length is greater than padLength')\n }\n\n return result\n}\n"],"mappings":";AACA,IAAM,WAAW;AASV,IAAM,QAAQ,CAAC,UAAgC,SAAS,KAAK,KAAK;;;ACVzE,SAAS,cAAoB;AAC7B,SAAS,cAAc;AACvB,SAAoB,qBAAqB;AACzC,SAAS,mBAAmB;AAC5B,SAAS,cAAc;AACvB,OAAO,WAAW;;;ACLlB,SAAS,cAAc;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,QAAI,OAAO,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,SAAS,UAAU,WAAW,OAAO,QAAQ,cAAc;AAKpD,IAAM,SAAS,CAAsB,KAAQ,WAAgC,SAA2C;AAC7H,MAAI,MAAM,QAAQ,GAAG,GAAG;AACtB,WAAO;AAAA,EACT;AAGA,QAAM,cAAc,OAAU,KAAK,QAAQ;AAG3C,QAAM,aAAa,OAAU,KAAK,CAAC,UAAU,CAAC,SAAS,KAAK,CAAC;AAE7D,QAAM,gBAAgB,OAAO,aAAa,SAAS;AACnD,QAAM,mBAAmB,OAAO,YAAY,SAAS;AAErD,QAAM,mBAAmB,UAAU,eAAe,CAACA,SAAW,OAAOA,MAAK,WAAW,IAAI,CAAC;AAE1F,SAAO,MAAM,CAAC,GAAG,kBAAkB,gBAAgB;AACrD;AAEO,IAAM,2BAA2B,CAAsB,QAAW;AACvE,SAAO,OAAO,KAAK,CAAC,GAAG,QAAQ,IAAI,WAAW,GAAG,GAAG,MAAM;AAC5D;AAEO,IAAM,2BAA2B,CAAsB,QAAW;AACvE,SAAO,OAAO,KAAK,CAAC,GAAG,QAAQ,IAAI,WAAW,GAAG,GAAG,MAAM;AAC5D;;;AC9BA,SAAoB,YAAAC,iBAAiC;AAGrD,IAAM,UAAU,CAAC,UAAmB;AAClC,SAAOA,UAAS,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;;;ACjBA,SAAS,QAAQ,cAAc;AAC/B,SAAS,gBAAgB;AACzB,SAAS,gBAAgB;AAEzB,IAAM,qBAAqB,CAAC,OAAe,OAAO,OAAO;AACvD,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,aAAO,OAAO,QAAQ,MAAM,WAAW,IAAI,IAAI,MAAM,MAAM,CAAC,IAAI,OAAO,YAAY,CAAC;AAAA,IACtF,KAAK;AACH,aAAO,OAAO,OAAO,KAAK;AAAA,IAC5B;AACE,YAAM,MAAM,qBAAqB,IAAI,GAAG;AAAA,EAC5C;AACF;AAKO,SAAS,aAAa,OAA8B,WAAoB,MAAuC;AACpH,MAAI,UAAU;AAAW,WAAO;AAEhC,MAAI,SACF,SAA6B,UAAU,OAAiB,CAACC,WAAU,mBAAmBA,QAAO,IAAI,CAAC,KAAM;AAE1G,MAAI,WAAW,QAAW;AACxB,UAAM,MAAM,gCAAgC,OAAO,KAAK,EAAE;AAAA,EAC5D;AAEA,MAAI,aAAa,OAAO,SAAS,WAAW;AAC1C,aAAS,IAAI,WAAW,CAAC,GAAG,IAAI,WAAW,YAAY,OAAO,MAAM,GAAG,GAAG,MAAM,CAAC;AACjF,aAAS,QAAQ,UAAU,WAAW,4CAA4C;AAAA,EACpF;AAEA,SAAO;AACT;;;AJtBA,IAAM,oBAAoB,IAAI,YAAY,CAAC,QAAQ,CAAC;AAE7C,IAAM,gBAAN,MAAM,uBAAuD,cAAiB;AAAA,EACnF,OAAO,cAAc;AAAA,EACrB,OAAgB,kBAAkB,kBAAkB,WAAW;AAAA,EAC/D,OAAgB,cAAc;AAAA,EAE9B,aAAa,cAAmC,OAAY,CAAC,GAAG,MAAmC;AACjG,UAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACjD,YAAQ,MAAM,KAAK,UAAU,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,OAAO,SAAS,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;AAAA,EAChH;AAAA,EAEA,aAAa,cAAmC,OAAY,CAAC,GAAG,MAAmC;AACjG,UAAM,SAAS,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI;AACjD,YAAQ,MAAM,KAAK,UAAU,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,MAAM,OAAO,SAAS,OAAO,CAAC,GAAG,IAAI,CAAC,SAAS,KAAK,CAAC,CAAC;AAAA,EAC/G;AAAA,EAEA,aAAa,KAA0B,OAAY,CAAC,GAAG,MAAoC;AACzF,YAAQ,MAAM,KAAK,UAAU,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,OAAO,MAAM,YAAY,IAAI,IAAI,CAAC;AAAA,EAClF;AAAA,EAKA,aAAa,UAA+B,KAAQ,UAA0D;AAC5G,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,OAAO,OAAO,WAAW,CAAC;AAClD,eAAO,aAAa,WAAW,YAAY,OAAO,WAAW,KAAK,IAAI;AAAA,MACxE,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,cAAM,OAAO,OAAO,MAAM,OAAO,YAAY,GAAG,KAAK,IAAI;AACzD,eAAO,aAAa,WAAW,aAAa,IAAI,IAAI;AAAA,MACtD,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,KAAK,KAAK,CAAC,CAAC,CAAC;AAAA,EAC1H;AAAA,EAMA,OAAO,SAA8B,KAAQ,UAAiD;AAC5F,UAAM,SAAS,MAAM,QAAQ,EAAE,OAAO,KAAK,oBAAoB,GAAG,CAAC,EAAE,OAAO;AAC5E,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,eAAO,OAAO;AAAA,MAChB;AACE,eAAO,OAAO,OAAO,SAAS,KAAK,GAAG,KAAK,IAAI;AAAA,IACnD;AAAA,EACF;AAAA,EAEA,aAAa,OAA4B,MAA4B;AACnE,WAAO,MAAM,QAAQ,IAAI,KAAK,IAAI,CAAC,QAAQ,KAAK,UAAU,KAAK,KAAK,CAAC,CAAC;AAAA,EACxE;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,KAAK,KAAK,CAAC,IAAI,GAAI,CAAC;AACpG,WAAO;AAAA,EACT;AAAA,EAMA,MAAM,UAAU,UAA0D;AACxE,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,eAAO,MAAM,eAAc,UAAU,KAAK,KAAK,QAAQ;AAAA,MACzD,KAAK;AACH,eAAO,MAAM,eAAc,UAAU,KAAK,KAAK,QAAQ;AAAA,MACzD;AACE,eAAO,MAAM,eAAc,UAAU,KAAK,KAAK,QAAQ;AAAA,IAC3D;AAAA,EACF;AAAA,EAMA,SAAS,UAAiD;AACxD,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,eAAO,eAAc,SAAS,KAAK,KAAK,QAAQ;AAAA,MAClD,KAAK;AACH,eAAO,eAAc,SAAS,KAAK,KAAK,QAAQ;AAAA,MAClD;AACE,eAAO,eAAc,SAAS,KAAK,KAAK,QAAQ;AAAA,IACpD;AAAA,EACF;AAAA;AAAA,EAGA,YAEE,OAAO,OACJ;AACH,WAAO,eAAc,YAAY,KAAK,KAAK,IAAI;AAAA,EACjD;AACF;","names":["obj","isObject","value"]}