@xyo-network/hash 2.89.0-rc.7 → 2.89.0-rc.9
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 +5 -3
- package/dist/browser/PayloadHasher.d.cts.map +1 -1
- package/dist/browser/PayloadHasher.d.mts +5 -3
- package/dist/browser/PayloadHasher.d.mts.map +1 -1
- package/dist/browser/PayloadHasher.d.ts +5 -3
- package/dist/browser/PayloadHasher.d.ts.map +1 -1
- package/dist/browser/index.cjs +8 -4
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +8 -4
- package/dist/browser/index.js.map +1 -1
- package/dist/node/PayloadHasher.d.cts +5 -3
- package/dist/node/PayloadHasher.d.cts.map +1 -1
- package/dist/node/PayloadHasher.d.mts +5 -3
- package/dist/node/PayloadHasher.d.mts.map +1 -1
- package/dist/node/PayloadHasher.d.ts +5 -3
- package/dist/node/PayloadHasher.d.ts.map +1 -1
- package/dist/node/index.cjs +8 -4
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +8 -4
- package/dist/node/index.js.map +1 -1
- package/package.json +8 -8
- package/src/PayloadHasher.ts +9 -4
|
@@ -5,9 +5,9 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
5
5
|
static allowSubtle: boolean;
|
|
6
6
|
static readonly wasmInitialized: Promise<void>;
|
|
7
7
|
static readonly wasmSupport: WasmSupport;
|
|
8
|
-
static
|
|
9
|
-
static
|
|
10
|
-
static
|
|
8
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
9
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
10
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
11
11
|
/**
|
|
12
12
|
* Asynchronously hashes a payload
|
|
13
13
|
* @param obj A payload
|
|
@@ -39,6 +39,8 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
39
39
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
40
40
|
* @returns Returns a clone of the payload that is JSON safe
|
|
41
41
|
*/
|
|
42
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
|
+
/** @deprecated us json instead */
|
|
42
44
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
45
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
46
|
hash(): Promise<Hash>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIlG;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAI/D,kCAAkC;IAClC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
|
@@ -5,9 +5,9 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
5
5
|
static allowSubtle: boolean;
|
|
6
6
|
static readonly wasmInitialized: Promise<void>;
|
|
7
7
|
static readonly wasmSupport: WasmSupport;
|
|
8
|
-
static
|
|
9
|
-
static
|
|
10
|
-
static
|
|
8
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
9
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
10
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
11
11
|
/**
|
|
12
12
|
* Asynchronously hashes a payload
|
|
13
13
|
* @param obj A payload
|
|
@@ -39,6 +39,8 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
39
39
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
40
40
|
* @returns Returns a clone of the payload that is JSON safe
|
|
41
41
|
*/
|
|
42
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
|
+
/** @deprecated us json instead */
|
|
42
44
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
45
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
46
|
hash(): Promise<Hash>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIlG;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAI/D,kCAAkC;IAClC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
|
@@ -5,9 +5,9 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
5
5
|
static allowSubtle: boolean;
|
|
6
6
|
static readonly wasmInitialized: Promise<void>;
|
|
7
7
|
static readonly wasmSupport: WasmSupport;
|
|
8
|
-
static
|
|
9
|
-
static
|
|
10
|
-
static
|
|
8
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
9
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
10
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
11
11
|
/**
|
|
12
12
|
* Asynchronously hashes a payload
|
|
13
13
|
* @param obj A payload
|
|
@@ -39,6 +39,8 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
39
39
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
40
40
|
* @returns Returns a clone of the payload that is JSON safe
|
|
41
41
|
*/
|
|
42
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
|
+
/** @deprecated us json instead */
|
|
42
44
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
45
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
46
|
hash(): Promise<Hash>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIlG;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAI/D,kCAAkC;IAClC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
package/dist/browser/index.cjs
CHANGED
|
@@ -117,19 +117,19 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
117
117
|
static allowSubtle = true;
|
|
118
118
|
static wasmInitialized = wasmSupportStatic.initialize();
|
|
119
119
|
static wasmSupport = wasmSupportStatic;
|
|
120
|
-
static async
|
|
120
|
+
static async filterExcludeByHash(objs = [], hash) {
|
|
121
121
|
const hashes = Array.isArray(hash) ? hash : [
|
|
122
122
|
hash
|
|
123
123
|
];
|
|
124
124
|
return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0]);
|
|
125
125
|
}
|
|
126
|
-
static async
|
|
126
|
+
static async filterIncludeByHash(objs = [], hash) {
|
|
127
127
|
const hashes = Array.isArray(hash) ? hash : [
|
|
128
128
|
hash
|
|
129
129
|
];
|
|
130
130
|
return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0]);
|
|
131
131
|
}
|
|
132
|
-
static async
|
|
132
|
+
static async findByHash(objs = [], hash) {
|
|
133
133
|
return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0];
|
|
134
134
|
}
|
|
135
135
|
/**
|
|
@@ -201,9 +201,13 @@ var PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
201
201
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
202
202
|
* @returns Returns a clone of the payload that is JSON safe
|
|
203
203
|
*/
|
|
204
|
-
static
|
|
204
|
+
static json(payload, meta = false) {
|
|
205
205
|
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, "_")));
|
|
206
206
|
}
|
|
207
|
+
/** @deprecated us json instead */
|
|
208
|
+
static jsonPayload(payload, meta = false) {
|
|
209
|
+
return this.json(payload, meta);
|
|
210
|
+
}
|
|
207
211
|
static stringifyHashFields(obj) {
|
|
208
212
|
return JSON.stringify(this.hashFields(obj));
|
|
209
213
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> 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 EmptyObject>(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 EmptyObject>(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 EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(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 {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(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 deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/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 EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n"],"mappings":"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","names":["import_object","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowSubtle","wasmInitialized","initialize","wasmSupport","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","obj","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","jsonPayload","payload","meta","JSON","stringify"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExcludeByHash<T extends EmptyObject>(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 filterIncludeByHash<T extends EmptyObject>(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 findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(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 {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(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 deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/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 EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n"],"mappings":"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","names":["import_object","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowSubtle","wasmInitialized","initialize","wasmSupport","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","json","payload","meta","jsonPayload","JSON","stringify"]}
|
package/dist/browser/index.js
CHANGED
|
@@ -78,19 +78,19 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
78
78
|
static allowSubtle = true;
|
|
79
79
|
static wasmInitialized = wasmSupportStatic.initialize();
|
|
80
80
|
static wasmSupport = wasmSupportStatic;
|
|
81
|
-
static async
|
|
81
|
+
static async filterExcludeByHash(objs = [], hash) {
|
|
82
82
|
const hashes = Array.isArray(hash) ? hash : [
|
|
83
83
|
hash
|
|
84
84
|
];
|
|
85
85
|
return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0]);
|
|
86
86
|
}
|
|
87
|
-
static async
|
|
87
|
+
static async filterIncludeByHash(objs = [], hash) {
|
|
88
88
|
const hashes = Array.isArray(hash) ? hash : [
|
|
89
89
|
hash
|
|
90
90
|
];
|
|
91
91
|
return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0]);
|
|
92
92
|
}
|
|
93
|
-
static async
|
|
93
|
+
static async findByHash(objs = [], hash) {
|
|
94
94
|
return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0];
|
|
95
95
|
}
|
|
96
96
|
/**
|
|
@@ -162,9 +162,13 @@ var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
162
162
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
163
163
|
* @returns Returns a clone of the payload that is JSON safe
|
|
164
164
|
*/
|
|
165
|
-
static
|
|
165
|
+
static json(payload, meta = false) {
|
|
166
166
|
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, "_")));
|
|
167
167
|
}
|
|
168
|
+
/** @deprecated us json instead */
|
|
169
|
+
static jsonPayload(payload, meta = false) {
|
|
170
|
+
return this.json(payload, meta);
|
|
171
|
+
}
|
|
168
172
|
static stringifyHashFields(obj) {
|
|
169
173
|
return JSON.stringify(this.hashFields(obj));
|
|
170
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> 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 EmptyObject>(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 EmptyObject>(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 EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(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 {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(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 deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/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 EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n"],"mappings":"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","names":["asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowSubtle","wasmInitialized","initialize","wasmSupport","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","obj","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","jsonPayload","payload","meta","JSON","stringify"]}
|
|
1
|
+
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExcludeByHash<T extends EmptyObject>(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 filterIncludeByHash<T extends EmptyObject>(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 findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(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 {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(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 deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/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 EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n"],"mappings":"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","names":["asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","allowSubtle","wasmInitialized","initialize","wasmSupport","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","json","payload","meta","jsonPayload","JSON","stringify"]}
|
|
@@ -5,9 +5,9 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
5
5
|
static allowSubtle: boolean;
|
|
6
6
|
static readonly wasmInitialized: Promise<void>;
|
|
7
7
|
static readonly wasmSupport: WasmSupport;
|
|
8
|
-
static
|
|
9
|
-
static
|
|
10
|
-
static
|
|
8
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
9
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
10
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
11
11
|
/**
|
|
12
12
|
* Asynchronously hashes a payload
|
|
13
13
|
* @param obj A payload
|
|
@@ -39,6 +39,8 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
39
39
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
40
40
|
* @returns Returns a clone of the payload that is JSON safe
|
|
41
41
|
*/
|
|
42
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
|
+
/** @deprecated us json instead */
|
|
42
44
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
45
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
46
|
hash(): Promise<Hash>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIlG;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAI/D,kCAAkC;IAClC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
|
@@ -5,9 +5,9 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
5
5
|
static allowSubtle: boolean;
|
|
6
6
|
static readonly wasmInitialized: Promise<void>;
|
|
7
7
|
static readonly wasmSupport: WasmSupport;
|
|
8
|
-
static
|
|
9
|
-
static
|
|
10
|
-
static
|
|
8
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
9
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
10
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
11
11
|
/**
|
|
12
12
|
* Asynchronously hashes a payload
|
|
13
13
|
* @param obj A payload
|
|
@@ -39,6 +39,8 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
39
39
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
40
40
|
* @returns Returns a clone of the payload that is JSON safe
|
|
41
41
|
*/
|
|
42
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
|
+
/** @deprecated us json instead */
|
|
42
44
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
45
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
46
|
hash(): Promise<Hash>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIlG;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAI/D,kCAAkC;IAClC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
|
@@ -5,9 +5,9 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
5
5
|
static allowSubtle: boolean;
|
|
6
6
|
static readonly wasmInitialized: Promise<void>;
|
|
7
7
|
static readonly wasmSupport: WasmSupport;
|
|
8
|
-
static
|
|
9
|
-
static
|
|
10
|
-
static
|
|
8
|
+
static filterExcludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
9
|
+
static filterIncludeByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash[] | Hash): Promise<T[]>;
|
|
10
|
+
static findByHash<T extends EmptyObject>(objs: T[] | undefined, hash: Hash): Promise<T | undefined>;
|
|
11
11
|
/**
|
|
12
12
|
* Asynchronously hashes a payload
|
|
13
13
|
* @param obj A payload
|
|
@@ -39,6 +39,8 @@ export declare class PayloadHasher<T extends EmptyObject = EmptyObject> extends
|
|
|
39
39
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
40
40
|
* @returns Returns a clone of the payload that is JSON safe
|
|
41
41
|
*/
|
|
42
|
+
static json<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
|
+
/** @deprecated us json instead */
|
|
42
44
|
static jsonPayload<T extends EmptyObject>(payload: T, meta?: boolean): T;
|
|
43
45
|
static stringifyHashFields<T extends EmptyObject>(obj: T): string;
|
|
44
46
|
hash(): Promise<Hash>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,
|
|
1
|
+
{"version":3,"file":"PayloadHasher.d.ts","sourceRoot":"","sources":["../../src/PayloadHasher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,IAAI,EAAsB,MAAM,aAAa,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE3D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAU/C,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,aAAa,CAAC,CAAC,CAAC;IACtF,MAAM,CAAC,WAAW,UAAO;IACzB,MAAM,CAAC,QAAQ,CAAC,eAAe,gBAAiC;IAChE,MAAM,CAAC,QAAQ,CAAC,WAAW,cAAoB;WAElC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;WAK7F,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,iBAAU,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIlG;;;;OAIG;WACU,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IA4B/D,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC;IAInD;;;;OAIG;WACU,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IAI9E;;;;OAIG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;IAIpD;;;;OAIG;WACU,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,SAAS,CAAC;IAInF;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAI/D,kCAAkC;IAClC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,UAAQ,GAAG,CAAC;IAItE,MAAM,CAAC,mBAAmB,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,EAAE,CAAC;IAIlD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAI3B,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,WAAW,CAAC,IAAI,UAAQ,GAAG,CAAC;CAG7B"}
|
package/dist/node/index.cjs
CHANGED
|
@@ -116,21 +116,21 @@ var wasmSupportStatic = new import_wasm.WasmSupport([
|
|
|
116
116
|
"bigInt"
|
|
117
117
|
]);
|
|
118
118
|
var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
119
|
-
static async
|
|
119
|
+
static async filterExcludeByHash(objs = [], hash) {
|
|
120
120
|
var _a;
|
|
121
121
|
const hashes = Array.isArray(hash) ? hash : [
|
|
122
122
|
hash
|
|
123
123
|
];
|
|
124
124
|
return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
|
|
125
125
|
}
|
|
126
|
-
static async
|
|
126
|
+
static async filterIncludeByHash(objs = [], hash) {
|
|
127
127
|
var _a;
|
|
128
128
|
const hashes = Array.isArray(hash) ? hash : [
|
|
129
129
|
hash
|
|
130
130
|
];
|
|
131
131
|
return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
|
|
132
132
|
}
|
|
133
|
-
static async
|
|
133
|
+
static async findByHash(objs = [], hash) {
|
|
134
134
|
var _a;
|
|
135
135
|
return (_a = (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
|
|
136
136
|
}
|
|
@@ -203,9 +203,13 @@ var _PayloadHasher = class _PayloadHasher extends import_object3.ObjectWrapper {
|
|
|
203
203
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
204
204
|
* @returns Returns a clone of the payload that is JSON safe
|
|
205
205
|
*/
|
|
206
|
-
static
|
|
206
|
+
static json(payload, meta = false) {
|
|
207
207
|
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, "_")));
|
|
208
208
|
}
|
|
209
|
+
/** @deprecated us json instead */
|
|
210
|
+
static jsonPayload(payload, meta = false) {
|
|
211
|
+
return this.json(payload, meta);
|
|
212
|
+
}
|
|
209
213
|
static stringifyHashFields(obj) {
|
|
210
214
|
return JSON.stringify(this.hashFields(obj));
|
|
211
215
|
}
|
package/dist/node/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> 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 EmptyObject>(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 EmptyObject>(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 EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(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 {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(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 deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/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 EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n"],"mappings":"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","names":["import_object","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","obj","allowSubtle","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","wasmInitialized","wasmSupport","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","jsonPayload","payload","meta","JSON","stringify","initialize"]}
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExcludeByHash<T extends EmptyObject>(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 filterIncludeByHash<T extends EmptyObject>(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 findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(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 {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(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 deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/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 EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n"],"mappings":"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","names":["import_object","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","import_object","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","allowSubtle","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","wasmInitialized","wasmSupport","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","json","payload","meta","jsonPayload","JSON","stringify","initialize"]}
|
package/dist/node/index.js
CHANGED
|
@@ -77,21 +77,21 @@ var wasmSupportStatic = new WasmSupport([
|
|
|
77
77
|
"bigInt"
|
|
78
78
|
]);
|
|
79
79
|
var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
80
|
-
static async
|
|
80
|
+
static async filterExcludeByHash(objs = [], hash) {
|
|
81
81
|
var _a;
|
|
82
82
|
const hashes = Array.isArray(hash) ? hash : [
|
|
83
83
|
hash
|
|
84
84
|
];
|
|
85
85
|
return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
|
|
86
86
|
}
|
|
87
|
-
static async
|
|
87
|
+
static async filterIncludeByHash(objs = [], hash) {
|
|
88
88
|
var _a;
|
|
89
89
|
const hashes = Array.isArray(hash) ? hash : [
|
|
90
90
|
hash
|
|
91
91
|
];
|
|
92
92
|
return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
|
|
93
93
|
}
|
|
94
|
-
static async
|
|
94
|
+
static async findByHash(objs = [], hash) {
|
|
95
95
|
var _a;
|
|
96
96
|
return (_a = (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
|
|
97
97
|
}
|
|
@@ -164,9 +164,13 @@ var _PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
|
164
164
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
165
165
|
* @returns Returns a clone of the payload that is JSON safe
|
|
166
166
|
*/
|
|
167
|
-
static
|
|
167
|
+
static json(payload, meta = false) {
|
|
168
168
|
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, "_")));
|
|
169
169
|
}
|
|
170
|
+
/** @deprecated us json instead */
|
|
171
|
+
static jsonPayload(payload, meta = false) {
|
|
172
|
+
return this.json(payload, meta);
|
|
173
|
+
}
|
|
170
174
|
static stringifyHashFields(obj) {
|
|
171
175
|
return JSON.stringify(this.hashFields(obj));
|
|
172
176
|
}
|
package/dist/node/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> 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 EmptyObject>(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 EmptyObject>(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 EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(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 {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(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 deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/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 EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n"],"mappings":"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","names":["asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","filterExclude","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterInclude","find","obj","allowSubtle","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","wasmInitialized","wasmSupport","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","jsonPayload","payload","meta","JSON","stringify","initialize"]}
|
|
1
|
+
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { asHash, Hash, hexFromArrayBuffer } from '@xylabs/hex'\nimport { EmptyObject, ObjectWrapper } from '@xylabs/object'\nimport { subtle } from '@xylabs/platform'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitPrefixedFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExcludeByHash<T extends EmptyObject>(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 filterIncludeByHash<T extends EmptyObject>(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 findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n /**\n * Asynchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static async hash<T extends EmptyObject>(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 {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends EmptyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitPrefixedFields(obj, '_')))\n }\n\n /**\n * Creates an array of payload/hash tuples based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload/hash tuples\n */\n static async hashPairs<T extends EmptyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hash(obj)]))\n }\n\n /**\n * Synchronously hashes a payload\n * @param obj A payload\n * @returns The payload hash\n */\n static hashSync<T extends EmptyObject>(obj: T): Hash {\n return asHash(shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex'), true)\n }\n\n /**\n * Creates an array of payload hashes based on the payloads passed in\n * @param objs Any array of payloads\n * @returns An array of payload hashes\n */\n static async hashes<T extends EmptyObject>(objs?: T[]): Promise<Hash[] | undefined> {\n return objs ? await Promise.all(objs.map((obj) => this.hash(obj))) : undefined\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param obj A payload\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n static json<T extends EmptyObject>(payload: T, meta = false): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))\n }\n\n /** @deprecated us json instead */\n static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {\n return this.json(payload, meta)\n }\n\n static stringifyHashFields<T extends EmptyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n async hash(): Promise<Hash> {\n return await PayloadHasher.hash(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /**\n * Returns a clone of the payload that is JSON safe\n * @param meta Keeps underscore (meta) fields if set to true\n * @returns Returns a clone of the payload that is JSON safe\n */\n jsonPayload(meta = false): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { AnyObject, EmptyObject } from '@xylabs/object'\nimport { typeOf } from '@xylabs/typeof'\n\nexport const removeEmptyFields = <T extends EmptyObject>(obj: T): T => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: AnyObject = {}\n for (const [key, value] of Object.entries(obj)) {\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 { assertEx } from '@xylabs/assert'\nimport { mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { EmptyObject, isObject } from '@xylabs/object'\n// eslint-disable-next-line no-restricted-imports\ntype ValueKeyIteratee<T> = (value: T, key: string) => unknown\n\nexport const deepBy = <T extends EmptyObject>(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 deepOmitPrefixedFields = <T extends EmptyObject>(obj: T, prefix: string): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith(prefix)\n },\n omitBy,\n )\n}\n\nexport const deepPickUnderscoreFields = <T extends EmptyObject>(obj: T): T => {\n return deepBy(\n obj,\n (_, key) => {\n assertEx(typeof key === 'string', () => `Invalid key type [${key}, ${typeof key}]`)\n return key.startsWith('_')\n },\n pickBy,\n )\n}\n","import { AnyObject, EmptyObject, isObject } from '@xylabs/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 EmptyObject>(obj: T) => {\n const result: AnyObject = {}\n const keys = Object.keys(obj) as (keyof T)[]\n for (const key of keys.sort()) {\n result[key] = subSort(obj[key])\n }\n return result as T\n}\n"],"mappings":"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","names":["asHash","hexFromArrayBuffer","ObjectWrapper","subtle","WasmSupport","sha256","shajs","typeOf","removeEmptyFields","obj","Array","isArray","newObject","key","value","Object","entries","typeOf","undefined","assertEx","mapValues","merge","omitBy","pickBy","isObject","deepBy","obj","predicate","func","Array","isArray","onlyObjects","pickBy","isObject","nonObjects","value","pickedObjects","omitBy","pickedNonObjects","processedObjects","mapValues","merge","deepOmitPrefixedFields","prefix","_","key","assertEx","startsWith","deepPickUnderscoreFields","isObject","subSort","value","isObject","sortFields","obj","result","keys","Object","key","sort","wasmSupportStatic","WasmSupport","PayloadHasher","ObjectWrapper","filterExcludeByHash","objs","hash","hashes","Array","isArray","hashPairs","filter","_","objHash","includes","map","pair","filterIncludeByHash","findByHash","find","obj","allowSubtle","enc","TextEncoder","stringToHash","stringifyHashFields","b","encode","hashArray","subtle","digest","hexFromArrayBuffer","bitLength","ex","error","console","message","log","stack","wasmInitialized","wasmSupport","canUseWasm","asHash","sha256","allowWasm","hashSync","hashFields","sortFields","removeEmptyFields","deepOmitPrefixedFields","Promise","all","shajs","update","toString","undefined","json","payload","meta","jsonPayload","JSON","stringify","initialize"]}
|
package/package.json
CHANGED
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js/issues"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"@xylabs/assert": "^2.
|
|
14
|
-
"@xylabs/hex": "^2.
|
|
15
|
-
"@xylabs/lodash": "^2.
|
|
16
|
-
"@xylabs/object": "^2.
|
|
17
|
-
"@xylabs/platform": "^2.
|
|
18
|
-
"@xylabs/typeof": "^2.
|
|
19
|
-
"@xyo-network/wasm": "~2.89.0-rc.
|
|
13
|
+
"@xylabs/assert": "^2.14.0",
|
|
14
|
+
"@xylabs/hex": "^2.14.0",
|
|
15
|
+
"@xylabs/lodash": "^2.14.0",
|
|
16
|
+
"@xylabs/object": "^2.89.0",
|
|
17
|
+
"@xylabs/platform": "^2.14.0",
|
|
18
|
+
"@xylabs/typeof": "^2.14.0",
|
|
19
|
+
"@xyo-network/wasm": "~2.89.0-rc.9",
|
|
20
20
|
"hash-wasm": "^4.11.0",
|
|
21
21
|
"sha.js": "^2.4.11"
|
|
22
22
|
},
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
66
66
|
},
|
|
67
67
|
"sideEffects": false,
|
|
68
|
-
"version": "2.89.0-rc.
|
|
68
|
+
"version": "2.89.0-rc.9",
|
|
69
69
|
"type": "module",
|
|
70
70
|
"stableVersion": "2.88.3"
|
|
71
71
|
}
|
package/src/PayloadHasher.ts
CHANGED
|
@@ -16,17 +16,17 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
16
16
|
static readonly wasmInitialized = wasmSupportStatic.initialize()
|
|
17
17
|
static readonly wasmSupport = wasmSupportStatic
|
|
18
18
|
|
|
19
|
-
static async
|
|
19
|
+
static async filterExcludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {
|
|
20
20
|
const hashes = Array.isArray(hash) ? hash : [hash]
|
|
21
21
|
return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
static async
|
|
24
|
+
static async filterIncludeByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {
|
|
25
25
|
const hashes = Array.isArray(hash) ? hash : [hash]
|
|
26
26
|
return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
static async
|
|
29
|
+
static async findByHash<T extends EmptyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {
|
|
30
30
|
return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]
|
|
31
31
|
}
|
|
32
32
|
|
|
@@ -100,10 +100,15 @@ export class PayloadHasher<T extends EmptyObject = EmptyObject> extends ObjectWr
|
|
|
100
100
|
* @param meta Keeps underscore (meta) fields if set to true
|
|
101
101
|
* @returns Returns a clone of the payload that is JSON safe
|
|
102
102
|
*/
|
|
103
|
-
static
|
|
103
|
+
static json<T extends EmptyObject>(payload: T, meta = false): T {
|
|
104
104
|
return sortFields(removeEmptyFields(meta ? payload : deepOmitPrefixedFields(payload, '_')))
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
/** @deprecated us json instead */
|
|
108
|
+
static jsonPayload<T extends EmptyObject>(payload: T, meta = false): T {
|
|
109
|
+
return this.json(payload, meta)
|
|
110
|
+
}
|
|
111
|
+
|
|
107
112
|
static stringifyHashFields<T extends EmptyObject>(obj: T) {
|
|
108
113
|
return JSON.stringify(this.hashFields(obj))
|
|
109
114
|
}
|