@xyo-network/hash 2.82.0-rc.1 → 2.82.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/PayloadHasher.d.cts +4 -15
- package/dist/browser/PayloadHasher.d.cts.map +1 -1
- package/dist/browser/PayloadHasher.d.mts +4 -15
- package/dist/browser/PayloadHasher.d.mts.map +1 -1
- package/dist/browser/PayloadHasher.d.ts +4 -15
- package/dist/browser/PayloadHasher.d.ts.map +1 -1
- package/dist/browser/index.cjs +17 -65
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.d.cts +0 -1
- package/dist/browser/index.d.cts.map +1 -1
- package/dist/browser/index.d.mts +0 -1
- package/dist/browser/index.d.mts.map +1 -1
- package/dist/browser/index.d.ts +0 -1
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +17 -65
- package/dist/browser/index.js.map +1 -1
- package/dist/node/PayloadHasher.d.cts +4 -15
- package/dist/node/PayloadHasher.d.cts.map +1 -1
- package/dist/node/PayloadHasher.d.mts +4 -15
- package/dist/node/PayloadHasher.d.mts.map +1 -1
- package/dist/node/PayloadHasher.d.ts +4 -15
- package/dist/node/PayloadHasher.d.ts.map +1 -1
- package/dist/node/index.cjs +18 -67
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.d.cts +0 -1
- package/dist/node/index.d.cts.map +1 -1
- package/dist/node/index.d.mts +0 -1
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.d.ts +0 -1
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +17 -65
- package/dist/node/index.js.map +1 -1
- package/package.json +7 -10
- package/src/PayloadHasher.ts +16 -51
- package/src/index.ts +0 -1
- package/dist/browser/toUint8Array.d.cts +0 -4
- package/dist/browser/toUint8Array.d.cts.map +0 -1
- package/dist/browser/toUint8Array.d.mts +0 -4
- package/dist/browser/toUint8Array.d.mts.map +0 -1
- package/dist/browser/toUint8Array.d.ts +0 -4
- package/dist/browser/toUint8Array.d.ts.map +0 -1
- package/dist/node/toUint8Array.d.cts +0 -4
- package/dist/node/toUint8Array.d.cts.map +0 -1
- package/dist/node/toUint8Array.d.mts +0 -4
- package/dist/node/toUint8Array.d.mts.map +0 -1
- package/dist/node/toUint8Array.d.ts +0 -4
- package/dist/node/toUint8Array.d.ts.map +0 -1
- package/src/toUint8Array.ts +0 -35
|
@@ -8,15 +8,10 @@ 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
|
|
12
|
-
static hashAsync<T extends AnyObject>(obj: T, encoding: 'buffer'): Promise<ArrayBuffer>;
|
|
13
|
-
static hashAsync<T extends AnyObject>(obj: T, encoding: 'hex'): Promise<Hash>;
|
|
11
|
+
static hashAsync<T extends AnyObject>(obj: T): Promise<Hash>;
|
|
14
12
|
static hashFields<T extends AnyObject>(obj: T): T;
|
|
15
13
|
static hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]>;
|
|
16
|
-
|
|
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;
|
|
14
|
+
static hashSync<T extends AnyObject>(obj: T): Hash;
|
|
20
15
|
static hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]>;
|
|
21
16
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
22
17
|
static jsonPayload<T extends AnyObject>(
|
|
@@ -26,14 +21,8 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
|
|
|
26
21
|
meta?: boolean): T;
|
|
27
22
|
static stringifyHashFields<T extends AnyObject>(obj: T): string;
|
|
28
23
|
static toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
29
|
-
|
|
30
|
-
|
|
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;
|
|
24
|
+
hashAsync(): Promise<Hash>;
|
|
25
|
+
hashSync(): Hash;
|
|
37
26
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
38
27
|
jsonPayload(
|
|
39
28
|
/** @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":"AAAA,OAAO,EAAU,IAAI,
|
|
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"}
|
|
@@ -8,15 +8,10 @@ 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
|
|
12
|
-
static hashAsync<T extends AnyObject>(obj: T, encoding: 'buffer'): Promise<ArrayBuffer>;
|
|
13
|
-
static hashAsync<T extends AnyObject>(obj: T, encoding: 'hex'): Promise<Hash>;
|
|
11
|
+
static hashAsync<T extends AnyObject>(obj: T): Promise<Hash>;
|
|
14
12
|
static hashFields<T extends AnyObject>(obj: T): T;
|
|
15
13
|
static hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]>;
|
|
16
|
-
|
|
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;
|
|
14
|
+
static hashSync<T extends AnyObject>(obj: T): Hash;
|
|
20
15
|
static hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]>;
|
|
21
16
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
22
17
|
static jsonPayload<T extends AnyObject>(
|
|
@@ -26,14 +21,8 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
|
|
|
26
21
|
meta?: boolean): T;
|
|
27
22
|
static stringifyHashFields<T extends AnyObject>(obj: T): string;
|
|
28
23
|
static toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
29
|
-
|
|
30
|
-
|
|
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;
|
|
24
|
+
hashAsync(): Promise<Hash>;
|
|
25
|
+
hashSync(): Hash;
|
|
37
26
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
38
27
|
jsonPayload(
|
|
39
28
|
/** @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":"AAAA,OAAO,EAAU,IAAI,
|
|
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"}
|
|
@@ -8,15 +8,10 @@ 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
|
|
12
|
-
static hashAsync<T extends AnyObject>(obj: T, encoding: 'buffer'): Promise<ArrayBuffer>;
|
|
13
|
-
static hashAsync<T extends AnyObject>(obj: T, encoding: 'hex'): Promise<Hash>;
|
|
11
|
+
static hashAsync<T extends AnyObject>(obj: T): Promise<Hash>;
|
|
14
12
|
static hashFields<T extends AnyObject>(obj: T): T;
|
|
15
13
|
static hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]>;
|
|
16
|
-
|
|
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;
|
|
14
|
+
static hashSync<T extends AnyObject>(obj: T): Hash;
|
|
20
15
|
static hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]>;
|
|
21
16
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
22
17
|
static jsonPayload<T extends AnyObject>(
|
|
@@ -26,14 +21,8 @@ export declare class PayloadHasher<T extends AnyObject = AnyObject> extends Obje
|
|
|
26
21
|
meta?: boolean): T;
|
|
27
22
|
static stringifyHashFields<T extends AnyObject>(obj: T): string;
|
|
28
23
|
static toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>>;
|
|
29
|
-
|
|
30
|
-
|
|
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;
|
|
24
|
+
hashAsync(): Promise<Hash>;
|
|
25
|
+
hashSync(): Hash;
|
|
37
26
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
38
27
|
jsonPayload(
|
|
39
28
|
/** @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":"AAAA,OAAO,EAAU,IAAI,
|
|
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"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -36,8 +36,7 @@ __export(src_exports, {
|
|
|
36
36
|
deepPickUnderscoreFields: () => deepPickUnderscoreFields,
|
|
37
37
|
isHex: () => isHex,
|
|
38
38
|
removeEmptyFields: () => removeEmptyFields,
|
|
39
|
-
sortFields: () => sortFields
|
|
40
|
-
toUint8Array: () => toUint8Array
|
|
39
|
+
sortFields: () => sortFields
|
|
41
40
|
});
|
|
42
41
|
module.exports = __toCommonJS(src_exports);
|
|
43
42
|
|
|
@@ -103,34 +102,6 @@ var sortFields = (obj) => {
|
|
|
103
102
|
return result;
|
|
104
103
|
};
|
|
105
104
|
|
|
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
|
-
|
|
134
105
|
// src/PayloadHasher.ts
|
|
135
106
|
var wasmSupportStatic = new import_wasm.WasmSupport(["bigInt"]);
|
|
136
107
|
var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
@@ -148,16 +119,18 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
148
119
|
static async find(objs = [], hash) {
|
|
149
120
|
return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0];
|
|
150
121
|
}
|
|
151
|
-
static async hashAsync(obj
|
|
122
|
+
static async hashAsync(obj) {
|
|
152
123
|
if (_PayloadHasher.allowSubtle) {
|
|
153
124
|
try {
|
|
154
125
|
const enc = new TextEncoder();
|
|
155
126
|
const stringToHash = this.stringifyHashFields(obj);
|
|
156
127
|
const b = enc.encode(stringToHash);
|
|
157
128
|
const hashArray = await import_platform.subtle.digest("SHA-256", b);
|
|
158
|
-
return
|
|
129
|
+
return (0, import_hex.hexFromArrayBuffer)(hashArray, { bitLength: 256 });
|
|
159
130
|
} catch (ex) {
|
|
160
|
-
|
|
131
|
+
const error = ex;
|
|
132
|
+
console.error(`Setting allowSubtle to false [${error.message}]`);
|
|
133
|
+
console.log(error.stack);
|
|
161
134
|
_PayloadHasher.allowSubtle = false;
|
|
162
135
|
}
|
|
163
136
|
}
|
|
@@ -165,8 +138,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
165
138
|
if (this.wasmSupport.canUseWasm) {
|
|
166
139
|
const stringToHash = this.stringifyHashFields(obj);
|
|
167
140
|
try {
|
|
168
|
-
|
|
169
|
-
return encoding === "buffer" ? toUint8Array(hash) : hash;
|
|
141
|
+
return (0, import_hex.asHash)(await (0, import_hash_wasm.sha256)(stringToHash), true);
|
|
170
142
|
} catch (ex) {
|
|
171
143
|
this.wasmSupport.allowWasm = false;
|
|
172
144
|
}
|
|
@@ -177,19 +149,13 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
177
149
|
return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)));
|
|
178
150
|
}
|
|
179
151
|
static async hashPairs(objs) {
|
|
180
|
-
return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj
|
|
181
|
-
}
|
|
182
|
-
static hashSync(obj
|
|
183
|
-
|
|
184
|
-
switch (encoding) {
|
|
185
|
-
case "buffer":
|
|
186
|
-
return buffer.buffer;
|
|
187
|
-
default:
|
|
188
|
-
return (0, import_hex.asHash)(buffer.toString("hex"), 256, true);
|
|
189
|
-
}
|
|
152
|
+
return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
|
|
153
|
+
}
|
|
154
|
+
static hashSync(obj) {
|
|
155
|
+
return (0, import_hex.asHash)((0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
|
|
190
156
|
}
|
|
191
157
|
static async hashes(objs) {
|
|
192
|
-
return await Promise.all(objs.map((obj) => this.hashAsync(obj
|
|
158
|
+
return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
|
|
193
159
|
}
|
|
194
160
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
195
161
|
static jsonPayload(payload, meta = false) {
|
|
@@ -200,28 +166,14 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
200
166
|
}
|
|
201
167
|
static async toMap(objs) {
|
|
202
168
|
const result = {};
|
|
203
|
-
await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj
|
|
169
|
+
await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj)] = obj));
|
|
204
170
|
return result;
|
|
205
171
|
}
|
|
206
|
-
async hashAsync(
|
|
207
|
-
|
|
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
|
-
}
|
|
172
|
+
async hashAsync() {
|
|
173
|
+
return await _PayloadHasher.hashAsync(this.obj);
|
|
215
174
|
}
|
|
216
|
-
hashSync(
|
|
217
|
-
|
|
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
|
-
}
|
|
175
|
+
hashSync() {
|
|
176
|
+
return _PayloadHasher.hashSync(this.obj);
|
|
225
177
|
}
|
|
226
178
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
227
179
|
jsonPayload(meta = false) {
|
|
@@ -1 +1 @@
|
|
|
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"]}
|
|
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"]}
|
package/dist/browser/index.d.cts
CHANGED
|
@@ -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"}
|
package/dist/browser/index.d.mts
CHANGED
|
@@ -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"}
|
package/dist/browser/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/browser/index.js
CHANGED
|
@@ -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";
|
|
@@ -60,34 +60,6 @@ var sortFields = (obj) => {
|
|
|
60
60
|
return result;
|
|
61
61
|
};
|
|
62
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
|
-
|
|
91
63
|
// src/PayloadHasher.ts
|
|
92
64
|
var wasmSupportStatic = new WasmSupport(["bigInt"]);
|
|
93
65
|
var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
@@ -105,16 +77,18 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
105
77
|
static async find(objs = [], hash) {
|
|
106
78
|
return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0];
|
|
107
79
|
}
|
|
108
|
-
static async hashAsync(obj
|
|
80
|
+
static async hashAsync(obj) {
|
|
109
81
|
if (_PayloadHasher.allowSubtle) {
|
|
110
82
|
try {
|
|
111
83
|
const enc = new TextEncoder();
|
|
112
84
|
const stringToHash = this.stringifyHashFields(obj);
|
|
113
85
|
const b = enc.encode(stringToHash);
|
|
114
86
|
const hashArray = await subtle.digest("SHA-256", b);
|
|
115
|
-
return
|
|
87
|
+
return hexFromArrayBuffer(hashArray, { bitLength: 256 });
|
|
116
88
|
} catch (ex) {
|
|
117
|
-
|
|
89
|
+
const error = ex;
|
|
90
|
+
console.error(`Setting allowSubtle to false [${error.message}]`);
|
|
91
|
+
console.log(error.stack);
|
|
118
92
|
_PayloadHasher.allowSubtle = false;
|
|
119
93
|
}
|
|
120
94
|
}
|
|
@@ -122,8 +96,7 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
122
96
|
if (this.wasmSupport.canUseWasm) {
|
|
123
97
|
const stringToHash = this.stringifyHashFields(obj);
|
|
124
98
|
try {
|
|
125
|
-
|
|
126
|
-
return encoding === "buffer" ? toUint8Array(hash) : hash;
|
|
99
|
+
return asHash(await sha256(stringToHash), true);
|
|
127
100
|
} catch (ex) {
|
|
128
101
|
this.wasmSupport.allowWasm = false;
|
|
129
102
|
}
|
|
@@ -134,19 +107,13 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
134
107
|
return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)));
|
|
135
108
|
}
|
|
136
109
|
static async hashPairs(objs) {
|
|
137
|
-
return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj
|
|
110
|
+
return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
|
|
138
111
|
}
|
|
139
|
-
static hashSync(obj
|
|
140
|
-
|
|
141
|
-
switch (encoding) {
|
|
142
|
-
case "buffer":
|
|
143
|
-
return buffer.buffer;
|
|
144
|
-
default:
|
|
145
|
-
return asHash(buffer.toString("hex"), 256, true);
|
|
146
|
-
}
|
|
112
|
+
static hashSync(obj) {
|
|
113
|
+
return asHash(shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex"), true);
|
|
147
114
|
}
|
|
148
115
|
static async hashes(objs) {
|
|
149
|
-
return await Promise.all(objs.map((obj) => this.hashAsync(obj
|
|
116
|
+
return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
|
|
150
117
|
}
|
|
151
118
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
152
119
|
static jsonPayload(payload, meta = false) {
|
|
@@ -157,28 +124,14 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
157
124
|
}
|
|
158
125
|
static async toMap(objs) {
|
|
159
126
|
const result = {};
|
|
160
|
-
await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj
|
|
127
|
+
await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj)] = obj));
|
|
161
128
|
return result;
|
|
162
129
|
}
|
|
163
|
-
async hashAsync(
|
|
164
|
-
|
|
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
|
-
}
|
|
130
|
+
async hashAsync() {
|
|
131
|
+
return await _PayloadHasher.hashAsync(this.obj);
|
|
172
132
|
}
|
|
173
|
-
hashSync(
|
|
174
|
-
|
|
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
|
-
}
|
|
133
|
+
hashSync() {
|
|
134
|
+
return _PayloadHasher.hashSync(this.obj);
|
|
182
135
|
}
|
|
183
136
|
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
184
137
|
jsonPayload(meta = false) {
|
|
@@ -192,7 +145,6 @@ export {
|
|
|
192
145
|
deepPickUnderscoreFields,
|
|
193
146
|
isHex,
|
|
194
147
|
removeEmptyFields,
|
|
195
|
-
sortFields
|
|
196
|
-
toUint8Array
|
|
148
|
+
sortFields
|
|
197
149
|
};
|
|
198
150
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
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":"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","names":["obj","isObject","value"]}
|
|
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"]}
|