@xyo-network/hash 2.79.3 → 2.79.5
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/index.cjs +1 -1
- package/dist/node/index.cjs +189 -0
- package/dist/node/index.cjs.map +1 -0
- package/dist/node/index.js +28 -70
- package/dist/node/index.js.map +1 -1
- package/package.json +15 -15
- package/dist/node/index.mjs +0 -147
- package/dist/node/index.mjs.map +0 -1
package/dist/browser/index.cjs
CHANGED
|
@@ -46,7 +46,7 @@ var import_platform = require("@xylabs/platform");
|
|
|
46
46
|
var import_object2 = require("@xyo-network/object");
|
|
47
47
|
var import_wasm = require("@xyo-network/wasm");
|
|
48
48
|
var import_hash_wasm = require("hash-wasm");
|
|
49
|
-
var import_sha = __toESM(require("sha.js"));
|
|
49
|
+
var import_sha = __toESM(require("sha.js"), 1);
|
|
50
50
|
|
|
51
51
|
// src/removeEmptyFields.ts
|
|
52
52
|
var import_typeof = require("@xyo-network/typeof");
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/index.ts
|
|
31
|
+
var src_exports = {};
|
|
32
|
+
__export(src_exports, {
|
|
33
|
+
PayloadHasher: () => PayloadHasher,
|
|
34
|
+
deepBy: () => deepBy,
|
|
35
|
+
deepOmitUnderscoreFields: () => deepOmitUnderscoreFields,
|
|
36
|
+
deepPickUnderscoreFields: () => deepPickUnderscoreFields,
|
|
37
|
+
removeEmptyFields: () => removeEmptyFields,
|
|
38
|
+
sortFields: () => sortFields
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(src_exports);
|
|
41
|
+
|
|
42
|
+
// src/PayloadHasher.ts
|
|
43
|
+
var import_base = require("@scure/base");
|
|
44
|
+
var import_buffer = require("@xylabs/buffer");
|
|
45
|
+
var import_platform = require("@xylabs/platform");
|
|
46
|
+
var import_object2 = require("@xyo-network/object");
|
|
47
|
+
var import_wasm = require("@xyo-network/wasm");
|
|
48
|
+
var import_hash_wasm = require("hash-wasm");
|
|
49
|
+
var import_sha = __toESM(require("sha.js"), 1);
|
|
50
|
+
|
|
51
|
+
// src/removeEmptyFields.ts
|
|
52
|
+
var import_typeof = require("@xyo-network/typeof");
|
|
53
|
+
var removeEmptyFields = (obj) => {
|
|
54
|
+
if (obj === null || Array.isArray(obj))
|
|
55
|
+
return obj;
|
|
56
|
+
const newObject = {};
|
|
57
|
+
Object.entries(obj).forEach(([key, value]) => {
|
|
58
|
+
if ((0, import_typeof.typeOf)(value) === "object") {
|
|
59
|
+
newObject[key] = removeEmptyFields(value);
|
|
60
|
+
} else if (value !== void 0) {
|
|
61
|
+
newObject[key] = value;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return newObject;
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// src/removeFields.ts
|
|
68
|
+
var import_lodash = require("@xylabs/lodash");
|
|
69
|
+
var deepBy = (obj, predicate, func) => {
|
|
70
|
+
if (Array.isArray(obj)) {
|
|
71
|
+
return obj;
|
|
72
|
+
}
|
|
73
|
+
const onlyObjects = (0, import_lodash.pickBy)(obj, import_lodash.isObject);
|
|
74
|
+
const nonObjects = (0, import_lodash.pickBy)(obj, (value) => !(0, import_lodash.isObject)(value));
|
|
75
|
+
const pickedObjects = (0, import_lodash.omitBy)(onlyObjects, predicate);
|
|
76
|
+
const pickedNonObjects = (0, import_lodash.omitBy)(nonObjects, predicate);
|
|
77
|
+
const processedObjects = (0, import_lodash.mapValues)(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
|
|
78
|
+
return (0, import_lodash.merge)({}, pickedNonObjects, processedObjects);
|
|
79
|
+
};
|
|
80
|
+
var deepOmitUnderscoreFields = (obj) => {
|
|
81
|
+
return deepBy(obj, (_, key) => key.startsWith("_"), import_lodash.omitBy);
|
|
82
|
+
};
|
|
83
|
+
var deepPickUnderscoreFields = (obj) => {
|
|
84
|
+
return deepBy(obj, (_, key) => key.startsWith("_"), import_lodash.pickBy);
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
// src/sortFields.ts
|
|
88
|
+
var import_object = require("@xyo-network/object");
|
|
89
|
+
var subSort = (value) => {
|
|
90
|
+
return (0, import_object.isObject)(value) ? sortFields(value) : value;
|
|
91
|
+
};
|
|
92
|
+
var sortFields = (obj) => {
|
|
93
|
+
const stringyObj = obj;
|
|
94
|
+
const result = {};
|
|
95
|
+
Object.keys(obj).sort().forEach((key) => {
|
|
96
|
+
result[key] = subSort(stringyObj[key]);
|
|
97
|
+
});
|
|
98
|
+
return result;
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
// src/PayloadHasher.ts
|
|
102
|
+
var wasmSupportStatic = new import_wasm.WasmSupport(["bigInt"]);
|
|
103
|
+
var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
104
|
+
static allowSubtle = true;
|
|
105
|
+
static wasmInitialized = wasmSupportStatic.initialize();
|
|
106
|
+
static wasmSupport = wasmSupportStatic;
|
|
107
|
+
static async filterExclude(objs = [], hash) {
|
|
108
|
+
var _a;
|
|
109
|
+
const hashes = Array.isArray(hash) ? hash : [hash];
|
|
110
|
+
return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
|
|
111
|
+
}
|
|
112
|
+
static async filterInclude(objs = [], hash) {
|
|
113
|
+
var _a;
|
|
114
|
+
const hashes = Array.isArray(hash) ? hash : [hash];
|
|
115
|
+
return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
|
|
116
|
+
}
|
|
117
|
+
static async find(objs = [], hash) {
|
|
118
|
+
var _a;
|
|
119
|
+
return (_a = (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
|
|
120
|
+
}
|
|
121
|
+
static async hashAsync(obj) {
|
|
122
|
+
if (_PayloadHasher.allowSubtle) {
|
|
123
|
+
try {
|
|
124
|
+
const enc = new TextEncoder();
|
|
125
|
+
const stringToHash = this.stringifyHashFields(obj);
|
|
126
|
+
const b = enc.encode(stringToHash);
|
|
127
|
+
const hashArray = await import_platform.subtle.digest("SHA-256", b);
|
|
128
|
+
return import_base.base16.encode(import_buffer.Buffer.from(hashArray)).toLowerCase();
|
|
129
|
+
} catch (ex) {
|
|
130
|
+
console.log("Setting allowSubtle to false");
|
|
131
|
+
_PayloadHasher.allowSubtle = false;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
await this.wasmInitialized;
|
|
135
|
+
if (this.wasmSupport.canUseWasm) {
|
|
136
|
+
const stringToHash = this.stringifyHashFields(obj);
|
|
137
|
+
try {
|
|
138
|
+
return await (0, import_hash_wasm.sha256)(stringToHash);
|
|
139
|
+
} catch (ex) {
|
|
140
|
+
this.wasmSupport.allowWasm = false;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return this.hashSync(obj);
|
|
144
|
+
}
|
|
145
|
+
static hashFields(obj) {
|
|
146
|
+
return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)));
|
|
147
|
+
}
|
|
148
|
+
static async hashPairs(objs) {
|
|
149
|
+
return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
|
|
150
|
+
}
|
|
151
|
+
static hashSync(obj) {
|
|
152
|
+
return (0, import_sha.default)("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex");
|
|
153
|
+
}
|
|
154
|
+
static async hashes(objs) {
|
|
155
|
+
return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
|
|
156
|
+
}
|
|
157
|
+
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
158
|
+
static jsonPayload(payload, meta = false) {
|
|
159
|
+
return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)));
|
|
160
|
+
}
|
|
161
|
+
static stringifyHashFields(obj) {
|
|
162
|
+
return JSON.stringify(this.hashFields(obj));
|
|
163
|
+
}
|
|
164
|
+
static async toMap(objs) {
|
|
165
|
+
const result = {};
|
|
166
|
+
await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj)] = obj));
|
|
167
|
+
return result;
|
|
168
|
+
}
|
|
169
|
+
async hashAsync() {
|
|
170
|
+
return await _PayloadHasher.hashAsync(this.obj);
|
|
171
|
+
}
|
|
172
|
+
hashSync() {
|
|
173
|
+
return _PayloadHasher.hashSync(this.obj);
|
|
174
|
+
}
|
|
175
|
+
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
176
|
+
jsonPayload(meta = false) {
|
|
177
|
+
return _PayloadHasher.jsonPayload(this.obj, meta);
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
181
|
+
0 && (module.exports = {
|
|
182
|
+
PayloadHasher,
|
|
183
|
+
deepBy,
|
|
184
|
+
deepOmitUnderscoreFields,
|
|
185
|
+
deepPickUnderscoreFields,
|
|
186
|
+
removeEmptyFields,
|
|
187
|
+
sortFields
|
|
188
|
+
});
|
|
189
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/index.ts","../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["export * from './model'\nexport * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { base16 } from '@scure/base'\nimport { Buffer } from '@xylabs/buffer'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { Hash } from './model'\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return base16.encode(Buffer.from(hashArray)).toLowerCase()\n } catch (ex) {\n console.log('Setting allowSubtle to false')\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return await sha256(stringToHash)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex')\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["import_object","obj","shajs"]}
|
package/dist/node/index.js
CHANGED
|
@@ -1,61 +1,20 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __create = Object.create;
|
|
3
|
-
var __defProp = Object.defineProperty;
|
|
4
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __export = (target, all) => {
|
|
9
|
-
for (var name in all)
|
|
10
|
-
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
-
};
|
|
12
|
-
var __copyProps = (to, from, except, desc) => {
|
|
13
|
-
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
-
for (let key of __getOwnPropNames(from))
|
|
15
|
-
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
-
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
-
}
|
|
18
|
-
return to;
|
|
19
|
-
};
|
|
20
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
-
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
-
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
-
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
-
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
-
mod
|
|
27
|
-
));
|
|
28
|
-
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
-
|
|
30
|
-
// src/index.ts
|
|
31
|
-
var src_exports = {};
|
|
32
|
-
__export(src_exports, {
|
|
33
|
-
PayloadHasher: () => PayloadHasher,
|
|
34
|
-
deepBy: () => deepBy,
|
|
35
|
-
deepOmitUnderscoreFields: () => deepOmitUnderscoreFields,
|
|
36
|
-
deepPickUnderscoreFields: () => deepPickUnderscoreFields,
|
|
37
|
-
removeEmptyFields: () => removeEmptyFields,
|
|
38
|
-
sortFields: () => sortFields
|
|
39
|
-
});
|
|
40
|
-
module.exports = __toCommonJS(src_exports);
|
|
41
|
-
|
|
42
1
|
// src/PayloadHasher.ts
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
2
|
+
import { base16 } from "@scure/base";
|
|
3
|
+
import { Buffer } from "@xylabs/buffer";
|
|
4
|
+
import { subtle } from "@xylabs/platform";
|
|
5
|
+
import { ObjectWrapper } from "@xyo-network/object";
|
|
6
|
+
import { WasmSupport } from "@xyo-network/wasm";
|
|
7
|
+
import { sha256 } from "hash-wasm";
|
|
8
|
+
import shajs from "sha.js";
|
|
50
9
|
|
|
51
10
|
// src/removeEmptyFields.ts
|
|
52
|
-
|
|
11
|
+
import { typeOf } from "@xyo-network/typeof";
|
|
53
12
|
var removeEmptyFields = (obj) => {
|
|
54
13
|
if (obj === null || Array.isArray(obj))
|
|
55
14
|
return obj;
|
|
56
15
|
const newObject = {};
|
|
57
16
|
Object.entries(obj).forEach(([key, value]) => {
|
|
58
|
-
if (
|
|
17
|
+
if (typeOf(value) === "object") {
|
|
59
18
|
newObject[key] = removeEmptyFields(value);
|
|
60
19
|
} else if (value !== void 0) {
|
|
61
20
|
newObject[key] = value;
|
|
@@ -65,29 +24,29 @@ var removeEmptyFields = (obj) => {
|
|
|
65
24
|
};
|
|
66
25
|
|
|
67
26
|
// src/removeFields.ts
|
|
68
|
-
|
|
27
|
+
import { isObject, mapValues, merge, omitBy, pickBy } from "@xylabs/lodash";
|
|
69
28
|
var deepBy = (obj, predicate, func) => {
|
|
70
29
|
if (Array.isArray(obj)) {
|
|
71
30
|
return obj;
|
|
72
31
|
}
|
|
73
|
-
const onlyObjects =
|
|
74
|
-
const nonObjects =
|
|
75
|
-
const pickedObjects =
|
|
76
|
-
const pickedNonObjects =
|
|
77
|
-
const processedObjects =
|
|
78
|
-
return
|
|
32
|
+
const onlyObjects = pickBy(obj, isObject);
|
|
33
|
+
const nonObjects = pickBy(obj, (value) => !isObject(value));
|
|
34
|
+
const pickedObjects = omitBy(onlyObjects, predicate);
|
|
35
|
+
const pickedNonObjects = omitBy(nonObjects, predicate);
|
|
36
|
+
const processedObjects = mapValues(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
|
|
37
|
+
return merge({}, pickedNonObjects, processedObjects);
|
|
79
38
|
};
|
|
80
39
|
var deepOmitUnderscoreFields = (obj) => {
|
|
81
|
-
return deepBy(obj, (_, key) => key.startsWith("_"),
|
|
40
|
+
return deepBy(obj, (_, key) => key.startsWith("_"), omitBy);
|
|
82
41
|
};
|
|
83
42
|
var deepPickUnderscoreFields = (obj) => {
|
|
84
|
-
return deepBy(obj, (_, key) => key.startsWith("_"),
|
|
43
|
+
return deepBy(obj, (_, key) => key.startsWith("_"), pickBy);
|
|
85
44
|
};
|
|
86
45
|
|
|
87
46
|
// src/sortFields.ts
|
|
88
|
-
|
|
47
|
+
import { isObject as isObject2 } from "@xyo-network/object";
|
|
89
48
|
var subSort = (value) => {
|
|
90
|
-
return (
|
|
49
|
+
return isObject2(value) ? sortFields(value) : value;
|
|
91
50
|
};
|
|
92
51
|
var sortFields = (obj) => {
|
|
93
52
|
const stringyObj = obj;
|
|
@@ -99,8 +58,8 @@ var sortFields = (obj) => {
|
|
|
99
58
|
};
|
|
100
59
|
|
|
101
60
|
// src/PayloadHasher.ts
|
|
102
|
-
var wasmSupportStatic = new
|
|
103
|
-
var PayloadHasher = class _PayloadHasher extends
|
|
61
|
+
var wasmSupportStatic = new WasmSupport(["bigInt"]);
|
|
62
|
+
var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
104
63
|
static allowSubtle = true;
|
|
105
64
|
static wasmInitialized = wasmSupportStatic.initialize();
|
|
106
65
|
static wasmSupport = wasmSupportStatic;
|
|
@@ -124,8 +83,8 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
124
83
|
const enc = new TextEncoder();
|
|
125
84
|
const stringToHash = this.stringifyHashFields(obj);
|
|
126
85
|
const b = enc.encode(stringToHash);
|
|
127
|
-
const hashArray = await
|
|
128
|
-
return
|
|
86
|
+
const hashArray = await subtle.digest("SHA-256", b);
|
|
87
|
+
return base16.encode(Buffer.from(hashArray)).toLowerCase();
|
|
129
88
|
} catch (ex) {
|
|
130
89
|
console.log("Setting allowSubtle to false");
|
|
131
90
|
_PayloadHasher.allowSubtle = false;
|
|
@@ -135,7 +94,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
135
94
|
if (this.wasmSupport.canUseWasm) {
|
|
136
95
|
const stringToHash = this.stringifyHashFields(obj);
|
|
137
96
|
try {
|
|
138
|
-
return await
|
|
97
|
+
return await sha256(stringToHash);
|
|
139
98
|
} catch (ex) {
|
|
140
99
|
this.wasmSupport.allowWasm = false;
|
|
141
100
|
}
|
|
@@ -149,7 +108,7 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
149
108
|
return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
|
|
150
109
|
}
|
|
151
110
|
static hashSync(obj) {
|
|
152
|
-
return (
|
|
111
|
+
return shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex");
|
|
153
112
|
}
|
|
154
113
|
static async hashes(objs) {
|
|
155
114
|
return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
|
|
@@ -177,13 +136,12 @@ var PayloadHasher = class _PayloadHasher extends import_object2.ObjectWrapper {
|
|
|
177
136
|
return _PayloadHasher.jsonPayload(this.obj, meta);
|
|
178
137
|
}
|
|
179
138
|
};
|
|
180
|
-
|
|
181
|
-
0 && (module.exports = {
|
|
139
|
+
export {
|
|
182
140
|
PayloadHasher,
|
|
183
141
|
deepBy,
|
|
184
142
|
deepOmitUnderscoreFields,
|
|
185
143
|
deepPickUnderscoreFields,
|
|
186
144
|
removeEmptyFields,
|
|
187
145
|
sortFields
|
|
188
|
-
}
|
|
146
|
+
};
|
|
189
147
|
//# sourceMappingURL=index.js.map
|
package/dist/node/index.js.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 './model'\nexport * from './PayloadHasher'\nexport * from './removeEmptyFields'\nexport * from './removeFields'\nexport * from './sortFields'\n","import { base16 } from '@scure/base'\nimport { Buffer } from '@xylabs/buffer'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { Hash } from './model'\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return base16.encode(Buffer.from(hashArray)).toLowerCase()\n } catch (ex) {\n console.log('Setting allowSubtle to false')\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return await sha256(stringToHash)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex')\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["import_object","obj","shajs"]}
|
|
1
|
+
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { base16 } from '@scure/base'\nimport { Buffer } from '@xylabs/buffer'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { Hash } from './model'\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return base16.encode(Buffer.from(hashArray)).toLowerCase()\n } catch (ex) {\n console.log('Setting allowSubtle to false')\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return await sha256(stringToHash)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex')\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["obj","isObject"]}
|
package/package.json
CHANGED
|
@@ -11,13 +11,13 @@
|
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@scure/base": "^1.1.3",
|
|
14
|
-
"@xylabs/buffer": "^2.13.
|
|
15
|
-
"@xylabs/lodash": "^2.13.
|
|
16
|
-
"@xylabs/platform": "^2.13.
|
|
17
|
-
"@xyo-network/object": "~2.79.
|
|
18
|
-
"@xyo-network/typeof": "~2.79.
|
|
19
|
-
"@xyo-network/wasm": "~2.79.
|
|
20
|
-
"hash-wasm": "^4.
|
|
14
|
+
"@xylabs/buffer": "^2.13.8",
|
|
15
|
+
"@xylabs/lodash": "^2.13.8",
|
|
16
|
+
"@xylabs/platform": "^2.13.8",
|
|
17
|
+
"@xyo-network/object": "~2.79.5",
|
|
18
|
+
"@xyo-network/typeof": "~2.79.5",
|
|
19
|
+
"@xyo-network/wasm": "~2.79.5",
|
|
20
|
+
"hash-wasm": "^4.11.0",
|
|
21
21
|
"sha.js": "^2.4.11"
|
|
22
22
|
},
|
|
23
23
|
"description": "Primary SDK for using XYO Protocol 2.0",
|
|
@@ -27,7 +27,6 @@
|
|
|
27
27
|
"@xylabs/tsconfig": "^3.1.21",
|
|
28
28
|
"typescript": "^5.2.2"
|
|
29
29
|
},
|
|
30
|
-
"docs": "dist/docs.json",
|
|
31
30
|
"exports": {
|
|
32
31
|
".": {
|
|
33
32
|
"browser": {
|
|
@@ -42,19 +41,21 @@
|
|
|
42
41
|
},
|
|
43
42
|
"node": {
|
|
44
43
|
"require": {
|
|
45
|
-
"types": "./dist/node/index.d.
|
|
46
|
-
"default": "./dist/node/index.
|
|
44
|
+
"types": "./dist/node/index.d.cts",
|
|
45
|
+
"default": "./dist/node/index.cjs"
|
|
47
46
|
},
|
|
48
47
|
"import": {
|
|
49
48
|
"types": "./dist/node/index.d.mts",
|
|
50
|
-
"default": "./dist/node/index.
|
|
49
|
+
"default": "./dist/node/index.js"
|
|
51
50
|
}
|
|
52
51
|
}
|
|
53
52
|
},
|
|
54
53
|
"./package.json": "./package.json"
|
|
55
54
|
},
|
|
56
|
-
"main": "dist/node/index.
|
|
57
|
-
"module": "dist/node/index.
|
|
55
|
+
"main": "dist/node/index.cjs",
|
|
56
|
+
"module": "dist/node/index.js",
|
|
57
|
+
"types": "dist/node/index.d.mts",
|
|
58
|
+
"type": "module",
|
|
58
59
|
"homepage": "https://xyo.network",
|
|
59
60
|
"license": "LGPL-3.0-or-later",
|
|
60
61
|
"publishConfig": {
|
|
@@ -65,6 +66,5 @@
|
|
|
65
66
|
"url": "https://github.com/XYOracleNetwork/sdk-xyo-client-js.git"
|
|
66
67
|
},
|
|
67
68
|
"sideEffects": false,
|
|
68
|
-
"
|
|
69
|
-
"version": "2.79.3"
|
|
69
|
+
"version": "2.79.5"
|
|
70
70
|
}
|
package/dist/node/index.mjs
DELETED
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
// src/PayloadHasher.ts
|
|
2
|
-
import { base16 } from "@scure/base";
|
|
3
|
-
import { Buffer } from "@xylabs/buffer";
|
|
4
|
-
import { subtle } from "@xylabs/platform";
|
|
5
|
-
import { ObjectWrapper } from "@xyo-network/object";
|
|
6
|
-
import { WasmSupport } from "@xyo-network/wasm";
|
|
7
|
-
import { sha256 } from "hash-wasm";
|
|
8
|
-
import shajs from "sha.js";
|
|
9
|
-
|
|
10
|
-
// src/removeEmptyFields.ts
|
|
11
|
-
import { typeOf } from "@xyo-network/typeof";
|
|
12
|
-
var removeEmptyFields = (obj) => {
|
|
13
|
-
if (obj === null || Array.isArray(obj))
|
|
14
|
-
return obj;
|
|
15
|
-
const newObject = {};
|
|
16
|
-
Object.entries(obj).forEach(([key, value]) => {
|
|
17
|
-
if (typeOf(value) === "object") {
|
|
18
|
-
newObject[key] = removeEmptyFields(value);
|
|
19
|
-
} else if (value !== void 0) {
|
|
20
|
-
newObject[key] = value;
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
return newObject;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
// src/removeFields.ts
|
|
27
|
-
import { isObject, mapValues, merge, omitBy, pickBy } from "@xylabs/lodash";
|
|
28
|
-
var deepBy = (obj, predicate, func) => {
|
|
29
|
-
if (Array.isArray(obj)) {
|
|
30
|
-
return obj;
|
|
31
|
-
}
|
|
32
|
-
const onlyObjects = pickBy(obj, isObject);
|
|
33
|
-
const nonObjects = pickBy(obj, (value) => !isObject(value));
|
|
34
|
-
const pickedObjects = omitBy(onlyObjects, predicate);
|
|
35
|
-
const pickedNonObjects = omitBy(nonObjects, predicate);
|
|
36
|
-
const processedObjects = mapValues(pickedObjects, (obj2) => deepBy(obj2, predicate, func));
|
|
37
|
-
return merge({}, pickedNonObjects, processedObjects);
|
|
38
|
-
};
|
|
39
|
-
var deepOmitUnderscoreFields = (obj) => {
|
|
40
|
-
return deepBy(obj, (_, key) => key.startsWith("_"), omitBy);
|
|
41
|
-
};
|
|
42
|
-
var deepPickUnderscoreFields = (obj) => {
|
|
43
|
-
return deepBy(obj, (_, key) => key.startsWith("_"), pickBy);
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
// src/sortFields.ts
|
|
47
|
-
import { isObject as isObject2 } from "@xyo-network/object";
|
|
48
|
-
var subSort = (value) => {
|
|
49
|
-
return isObject2(value) ? sortFields(value) : value;
|
|
50
|
-
};
|
|
51
|
-
var sortFields = (obj) => {
|
|
52
|
-
const stringyObj = obj;
|
|
53
|
-
const result = {};
|
|
54
|
-
Object.keys(obj).sort().forEach((key) => {
|
|
55
|
-
result[key] = subSort(stringyObj[key]);
|
|
56
|
-
});
|
|
57
|
-
return result;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
// src/PayloadHasher.ts
|
|
61
|
-
var wasmSupportStatic = new WasmSupport(["bigInt"]);
|
|
62
|
-
var PayloadHasher = class _PayloadHasher extends ObjectWrapper {
|
|
63
|
-
static allowSubtle = true;
|
|
64
|
-
static wasmInitialized = wasmSupportStatic.initialize();
|
|
65
|
-
static wasmSupport = wasmSupportStatic;
|
|
66
|
-
static async filterExclude(objs = [], hash) {
|
|
67
|
-
var _a;
|
|
68
|
-
const hashes = Array.isArray(hash) ? hash : [hash];
|
|
69
|
-
return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
|
|
70
|
-
}
|
|
71
|
-
static async filterInclude(objs = [], hash) {
|
|
72
|
-
var _a;
|
|
73
|
-
const hashes = Array.isArray(hash) ? hash : [hash];
|
|
74
|
-
return (_a = (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))) == null ? void 0 : _a.map((pair) => pair[0]);
|
|
75
|
-
}
|
|
76
|
-
static async find(objs = [], hash) {
|
|
77
|
-
var _a;
|
|
78
|
-
return (_a = (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)) == null ? void 0 : _a[0];
|
|
79
|
-
}
|
|
80
|
-
static async hashAsync(obj) {
|
|
81
|
-
if (_PayloadHasher.allowSubtle) {
|
|
82
|
-
try {
|
|
83
|
-
const enc = new TextEncoder();
|
|
84
|
-
const stringToHash = this.stringifyHashFields(obj);
|
|
85
|
-
const b = enc.encode(stringToHash);
|
|
86
|
-
const hashArray = await subtle.digest("SHA-256", b);
|
|
87
|
-
return base16.encode(Buffer.from(hashArray)).toLowerCase();
|
|
88
|
-
} catch (ex) {
|
|
89
|
-
console.log("Setting allowSubtle to false");
|
|
90
|
-
_PayloadHasher.allowSubtle = false;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
await this.wasmInitialized;
|
|
94
|
-
if (this.wasmSupport.canUseWasm) {
|
|
95
|
-
const stringToHash = this.stringifyHashFields(obj);
|
|
96
|
-
try {
|
|
97
|
-
return await sha256(stringToHash);
|
|
98
|
-
} catch (ex) {
|
|
99
|
-
this.wasmSupport.allowWasm = false;
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
return this.hashSync(obj);
|
|
103
|
-
}
|
|
104
|
-
static hashFields(obj) {
|
|
105
|
-
return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)));
|
|
106
|
-
}
|
|
107
|
-
static async hashPairs(objs) {
|
|
108
|
-
return await Promise.all(objs.map(async (obj) => [obj, await _PayloadHasher.hashAsync(obj)]));
|
|
109
|
-
}
|
|
110
|
-
static hashSync(obj) {
|
|
111
|
-
return shajs("sha256").update(this.stringifyHashFields(obj)).digest().toString("hex");
|
|
112
|
-
}
|
|
113
|
-
static async hashes(objs) {
|
|
114
|
-
return await Promise.all(objs.map((obj) => this.hashAsync(obj)));
|
|
115
|
-
}
|
|
116
|
-
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
117
|
-
static jsonPayload(payload, meta = false) {
|
|
118
|
-
return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)));
|
|
119
|
-
}
|
|
120
|
-
static stringifyHashFields(obj) {
|
|
121
|
-
return JSON.stringify(this.hashFields(obj));
|
|
122
|
-
}
|
|
123
|
-
static async toMap(objs) {
|
|
124
|
-
const result = {};
|
|
125
|
-
await Promise.all(objs.map(async (obj) => result[await _PayloadHasher.hashAsync(obj)] = obj));
|
|
126
|
-
return result;
|
|
127
|
-
}
|
|
128
|
-
async hashAsync() {
|
|
129
|
-
return await _PayloadHasher.hashAsync(this.obj);
|
|
130
|
-
}
|
|
131
|
-
hashSync() {
|
|
132
|
-
return _PayloadHasher.hashSync(this.obj);
|
|
133
|
-
}
|
|
134
|
-
/** @function jsonPayload Returns a clone of the payload that is JSON safe */
|
|
135
|
-
jsonPayload(meta = false) {
|
|
136
|
-
return _PayloadHasher.jsonPayload(this.obj, meta);
|
|
137
|
-
}
|
|
138
|
-
};
|
|
139
|
-
export {
|
|
140
|
-
PayloadHasher,
|
|
141
|
-
deepBy,
|
|
142
|
-
deepOmitUnderscoreFields,
|
|
143
|
-
deepPickUnderscoreFields,
|
|
144
|
-
removeEmptyFields,
|
|
145
|
-
sortFields
|
|
146
|
-
};
|
|
147
|
-
//# sourceMappingURL=index.mjs.map
|
package/dist/node/index.mjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/PayloadHasher.ts","../../src/removeEmptyFields.ts","../../src/removeFields.ts","../../src/sortFields.ts"],"sourcesContent":["import { base16 } from '@scure/base'\nimport { Buffer } from '@xylabs/buffer'\nimport { subtle } from '@xylabs/platform'\nimport { AnyObject, ObjectWrapper } from '@xyo-network/object'\nimport { WasmSupport } from '@xyo-network/wasm'\nimport { sha256 } from 'hash-wasm'\nimport shajs from 'sha.js'\n\nimport { Hash } from './model'\nimport { removeEmptyFields } from './removeEmptyFields'\nimport { deepOmitUnderscoreFields } from './removeFields'\nimport { sortFields } from './sortFields'\n\nconst wasmSupportStatic = new WasmSupport(['bigInt'])\n\nexport class PayloadHasher<T extends AnyObject = AnyObject> extends ObjectWrapper<T> {\n static allowSubtle = true\n static readonly wasmInitialized = wasmSupportStatic.initialize()\n static readonly wasmSupport = wasmSupportStatic\n\n static async filterExclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => !hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async filterInclude<T extends AnyObject>(objs: T[] = [], hash: Hash[] | Hash): Promise<T[]> {\n const hashes = Array.isArray(hash) ? hash : [hash]\n return (await this.hashPairs(objs)).filter(([_, objHash]) => hashes.includes(objHash))?.map((pair) => pair[0])\n }\n\n static async find<T extends AnyObject>(objs: T[] = [], hash: Hash): Promise<T | undefined> {\n return (await this.hashPairs(objs)).find(([_, objHash]) => objHash === hash)?.[0]\n }\n\n static async hashAsync<T extends AnyObject>(obj: T): Promise<Hash> {\n if (PayloadHasher.allowSubtle) {\n try {\n const enc = new TextEncoder()\n const stringToHash = this.stringifyHashFields(obj)\n const b = enc.encode(stringToHash)\n const hashArray = await subtle.digest('SHA-256', b)\n return base16.encode(Buffer.from(hashArray)).toLowerCase()\n } catch (ex) {\n console.log('Setting allowSubtle to false')\n PayloadHasher.allowSubtle = false\n }\n }\n\n await this.wasmInitialized\n if (this.wasmSupport.canUseWasm) {\n const stringToHash = this.stringifyHashFields(obj)\n try {\n return await sha256(stringToHash)\n } catch (ex) {\n this.wasmSupport.allowWasm = false\n }\n }\n return this.hashSync(obj)\n }\n\n static hashFields<T extends AnyObject>(obj: T): T {\n return sortFields(removeEmptyFields(deepOmitUnderscoreFields(obj)))\n }\n\n static async hashPairs<T extends AnyObject>(objs: T[]): Promise<[T, Hash][]> {\n return await Promise.all(objs.map<Promise<[T, string]>>(async (obj) => [obj, await PayloadHasher.hashAsync(obj)]))\n }\n\n static hashSync<T extends AnyObject>(obj: T): Hash {\n return shajs('sha256').update(this.stringifyHashFields(obj)).digest().toString('hex')\n }\n\n static async hashes<T extends AnyObject>(objs: T[]): Promise<Hash[]> {\n return await Promise.all(objs.map((obj) => this.hashAsync(obj)))\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n static jsonPayload<T extends AnyObject>(\n /** @param payload The payload to process */\n payload: T,\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return sortFields(removeEmptyFields(meta ? payload : deepOmitUnderscoreFields(payload)))\n }\n\n static stringifyHashFields<T extends AnyObject>(obj: T) {\n return JSON.stringify(this.hashFields(obj))\n }\n\n static async toMap<T extends AnyObject>(objs: T[]): Promise<Record<Hash, T>> {\n const result: Record<string, T> = {}\n await Promise.all(objs.map(async (obj) => (result[await PayloadHasher.hashAsync(obj)] = obj)))\n return result\n }\n\n async hashAsync(): Promise<Hash> {\n return await PayloadHasher.hashAsync(this.obj)\n }\n\n hashSync(): Hash {\n return PayloadHasher.hashSync(this.obj)\n }\n\n /** @function jsonPayload Returns a clone of the payload that is JSON safe */\n jsonPayload(\n /** @param meta Keeps underscore (meta) fields if set to true */\n meta = false,\n ): T {\n return PayloadHasher.jsonPayload(this.obj, meta)\n }\n}\n","import { typeOf } from '@xyo-network/typeof'\n\nexport const removeEmptyFields = <T extends Record<string, unknown>>(obj: T) => {\n if (obj === null || Array.isArray(obj)) return obj\n\n const newObject: Record<string, unknown> = {}\n Object.entries(obj).forEach(([key, value]) => {\n if (typeOf(value) === 'object') {\n newObject[key] = removeEmptyFields(value as Record<string, unknown>)\n } else if (value !== undefined) {\n newObject[key] = value\n }\n })\n return newObject as T\n}\n","import { isObject, mapValues, merge, omitBy, pickBy } from '@xylabs/lodash'\nimport { AnyObject } from '@xyo-network/object'\n// eslint-disable-next-line no-restricted-imports\nimport type { ValueKeyIteratee } from 'lodash'\n\nexport const deepBy = <T extends AnyObject>(obj: T, predicate: ValueKeyIteratee<T>, func: typeof omitBy | typeof pickBy): T => {\n if (Array.isArray(obj)) {\n return obj\n }\n\n //pick the child objects\n const onlyObjects = pickBy<T>(obj, isObject)\n\n //pick the child non-objects\n const nonObjects = pickBy<T>(obj, (value) => !isObject(value))\n\n const pickedObjects = omitBy(onlyObjects, predicate)\n const pickedNonObjects = omitBy(nonObjects, predicate)\n\n const processedObjects = mapValues(pickedObjects, (obj: T) => deepBy(obj, predicate, func))\n\n return merge({}, pickedNonObjects, processedObjects) as T\n}\n\nexport const deepOmitUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), omitBy)\n}\n\nexport const deepPickUnderscoreFields = <T extends AnyObject>(obj: T) => {\n return deepBy(obj, (_, key) => key.startsWith('_'), pickBy)\n}\n","import { AnyObject, isObject, StringKeyObject } from '@xyo-network/object'\n\n//if an object, sub-sort\nconst subSort = (value: unknown) => {\n return isObject(value) ? sortFields(value) : value\n}\n\nexport const sortFields = <T extends AnyObject = AnyObject>(obj: T) => {\n const stringyObj = obj as StringKeyObject\n\n const result: StringKeyObject = {}\n Object.keys(obj)\n .sort()\n .forEach((key) => {\n result[key] = subSort(stringyObj[key])\n })\n return result as T\n}\n"],"mappings":"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","names":["obj","isObject"]}
|