@qevm/hash 5.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +34 -0
- package/lib/_version.d.ts +2 -0
- package/lib/_version.d.ts.map +1 -0
- package/lib/_version.js +5 -0
- package/lib/_version.js.map +1 -0
- package/lib/ens-normalize/decoder.d.ts +50 -0
- package/lib/ens-normalize/decoder.d.ts.map +1 -0
- package/lib/ens-normalize/decoder.js +266 -0
- package/lib/ens-normalize/decoder.js.map +1 -0
- package/lib/ens-normalize/include.d.ts +30 -0
- package/lib/ens-normalize/include.d.ts.map +1 -0
- package/lib/ens-normalize/include.js +38 -0
- package/lib/ens-normalize/include.js.map +1 -0
- package/lib/ens-normalize/lib.d.ts +31 -0
- package/lib/ens-normalize/lib.d.ts.map +1 -0
- package/lib/ens-normalize/lib.js +148 -0
- package/lib/ens-normalize/lib.js.map +1 -0
- package/lib/id.d.ts +2 -0
- package/lib/id.d.ts.map +1 -0
- package/lib/id.js +10 -0
- package/lib/id.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +17 -0
- package/lib/index.js.map +1 -0
- package/lib/message.d.ts +4 -0
- package/lib/message.d.ts.map +1 -0
- package/lib/message.js +19 -0
- package/lib/message.js.map +1 -0
- package/lib/namehash.d.ts +5 -0
- package/lib/namehash.d.ts.map +1 -0
- package/lib/namehash.js +79 -0
- package/lib/namehash.js.map +1 -0
- package/lib/typed-data.d.ts +29 -0
- package/lib/typed-data.d.ts.map +1 -0
- package/lib/typed-data.js +501 -0
- package/lib/typed-data.js.map +1 -0
- package/package.json +32 -0
- package/src.ts/_version.ts +1 -0
- package/src.ts/ens-normalize/decoder.ts +283 -0
- package/src.ts/ens-normalize/include.ts +37 -0
- package/src.ts/ens-normalize/lib.ts +140 -0
- package/src.ts/id.ts +6 -0
- package/src.ts/index.ts +24 -0
- package/src.ts/message.ts +15 -0
- package/src.ts/namehash.ts +83 -0
- package/src.ts/typed-data.ts +507 -0
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MIT License
|
|
4
|
+
*
|
|
5
|
+
* Copyright (c) 2021 Andrew Raffensperger
|
|
6
|
+
*
|
|
7
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
8
|
+
* of this software and associated documentation files (the "Software"), to deal
|
|
9
|
+
* in the Software without restriction, including without limitation the rights
|
|
10
|
+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
11
|
+
* copies of the Software, and to permit persons to whom the Software is
|
|
12
|
+
* furnished to do so, subject to the following conditions:
|
|
13
|
+
*
|
|
14
|
+
* The above copyright notice and this permission notice shall be included in all
|
|
15
|
+
* copies or substantial portions of the Software.
|
|
16
|
+
*
|
|
17
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
18
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
19
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
20
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
21
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
22
|
+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
23
|
+
* SOFTWARE.
|
|
24
|
+
*
|
|
25
|
+
* This is a near carbon-copy of the original source (link below) with the
|
|
26
|
+
* TypeScript typings added and a few tweaks to make it ES3-compatible.
|
|
27
|
+
*
|
|
28
|
+
* See: https://github.com/adraffy/ens-normalize.js
|
|
29
|
+
*/
|
|
30
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
31
|
+
exports.ens_normalize = exports.ens_normalize_post_check = void 0;
|
|
32
|
+
var strings_1 = require("@ethersproject/strings");
|
|
33
|
+
var include_js_1 = require("./include.js");
|
|
34
|
+
var r = (0, include_js_1.getData)();
|
|
35
|
+
var decoder_js_1 = require("./decoder.js");
|
|
36
|
+
// @TODO: This should be lazily loaded
|
|
37
|
+
var VALID = new Set((0, decoder_js_1.read_member_array)(r));
|
|
38
|
+
var IGNORED = new Set((0, decoder_js_1.read_member_array)(r));
|
|
39
|
+
var MAPPED = (0, decoder_js_1.read_mapped_map)(r);
|
|
40
|
+
var EMOJI_ROOT = (0, decoder_js_1.read_emoji_trie)(r);
|
|
41
|
+
//const NFC_CHECK = new Set(read_member_array(r, Array.from(VALID.values()).sort((a, b) => a - b)));
|
|
42
|
+
//const STOP = 0x2E;
|
|
43
|
+
var HYPHEN = 0x2D;
|
|
44
|
+
var UNDERSCORE = 0x5F;
|
|
45
|
+
function explode_cp(name) {
|
|
46
|
+
return (0, strings_1.toUtf8CodePoints)(name);
|
|
47
|
+
}
|
|
48
|
+
function filter_fe0f(cps) {
|
|
49
|
+
return cps.filter(function (cp) { return cp != 0xFE0F; });
|
|
50
|
+
}
|
|
51
|
+
function ens_normalize_post_check(name) {
|
|
52
|
+
for (var _i = 0, _a = name.split('.'); _i < _a.length; _i++) {
|
|
53
|
+
var label = _a[_i];
|
|
54
|
+
var cps = explode_cp(label);
|
|
55
|
+
try {
|
|
56
|
+
for (var i = cps.lastIndexOf(UNDERSCORE) - 1; i >= 0; i--) {
|
|
57
|
+
if (cps[i] !== UNDERSCORE) {
|
|
58
|
+
throw new Error("underscore only allowed at start");
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (cps.length >= 4 && cps.every(function (cp) { return cp < 0x80; }) && cps[2] === HYPHEN && cps[3] === HYPHEN) {
|
|
62
|
+
throw new Error("invalid label extension");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
throw new Error("Invalid label \"" + label + "\": " + err.message);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return name;
|
|
70
|
+
}
|
|
71
|
+
exports.ens_normalize_post_check = ens_normalize_post_check;
|
|
72
|
+
function ens_normalize(name) {
|
|
73
|
+
return ens_normalize_post_check(normalize(name, filter_fe0f));
|
|
74
|
+
}
|
|
75
|
+
exports.ens_normalize = ens_normalize;
|
|
76
|
+
function normalize(name, emoji_filter) {
|
|
77
|
+
var input = explode_cp(name).reverse(); // flip for pop
|
|
78
|
+
var output = [];
|
|
79
|
+
while (input.length) {
|
|
80
|
+
var emoji = consume_emoji_reversed(input);
|
|
81
|
+
if (emoji) {
|
|
82
|
+
output.push.apply(output, emoji_filter(emoji));
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
var cp = input.pop();
|
|
86
|
+
if (VALID.has(cp)) {
|
|
87
|
+
output.push(cp);
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (IGNORED.has(cp)) {
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
var cps = MAPPED[cp];
|
|
94
|
+
if (cps) {
|
|
95
|
+
output.push.apply(output, cps);
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
throw new Error("Disallowed codepoint: 0x" + cp.toString(16).toUpperCase());
|
|
99
|
+
}
|
|
100
|
+
return ens_normalize_post_check(nfc(String.fromCodePoint.apply(String, output)));
|
|
101
|
+
}
|
|
102
|
+
function nfc(s) {
|
|
103
|
+
return s.normalize('NFC');
|
|
104
|
+
}
|
|
105
|
+
function consume_emoji_reversed(cps, eaten) {
|
|
106
|
+
var _a;
|
|
107
|
+
var node = EMOJI_ROOT;
|
|
108
|
+
var emoji;
|
|
109
|
+
var saved;
|
|
110
|
+
var stack = [];
|
|
111
|
+
var pos = cps.length;
|
|
112
|
+
if (eaten)
|
|
113
|
+
eaten.length = 0; // clear input buffer (if needed)
|
|
114
|
+
var _loop_1 = function () {
|
|
115
|
+
var cp = cps[--pos];
|
|
116
|
+
node = (_a = node.branches.find(function (x) { return x.set.has(cp); })) === null || _a === void 0 ? void 0 : _a.node;
|
|
117
|
+
if (!node)
|
|
118
|
+
return "break";
|
|
119
|
+
if (node.save) { // remember
|
|
120
|
+
saved = cp;
|
|
121
|
+
}
|
|
122
|
+
else if (node.check) { // check exclusion
|
|
123
|
+
if (cp === saved)
|
|
124
|
+
return "break";
|
|
125
|
+
}
|
|
126
|
+
stack.push(cp);
|
|
127
|
+
if (node.fe0f) {
|
|
128
|
+
stack.push(0xFE0F);
|
|
129
|
+
if (pos > 0 && cps[pos - 1] == 0xFE0F)
|
|
130
|
+
pos--; // consume optional FE0F
|
|
131
|
+
}
|
|
132
|
+
if (node.valid) { // this is a valid emoji (so far)
|
|
133
|
+
emoji = stack.slice(); // copy stack
|
|
134
|
+
if (node.valid == 2)
|
|
135
|
+
emoji.splice(1, 1); // delete FE0F at position 1 (RGI ZWJ don't follow spec!)
|
|
136
|
+
if (eaten)
|
|
137
|
+
eaten.push.apply(eaten, cps.slice(pos).reverse()); // copy input (if needed)
|
|
138
|
+
cps.length = pos; // truncate
|
|
139
|
+
}
|
|
140
|
+
};
|
|
141
|
+
while (pos) {
|
|
142
|
+
var state_1 = _loop_1();
|
|
143
|
+
if (state_1 === "break")
|
|
144
|
+
break;
|
|
145
|
+
}
|
|
146
|
+
return emoji;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src.ts/ens-normalize/lib.ts"],"names":[],"mappings":"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"}
|
package/lib/id.d.ts
ADDED
package/lib/id.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../src.ts/id.ts"],"names":[],"mappings":"AAGA,wBAAgB,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvC"}
|
package/lib/id.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.id = void 0;
|
|
4
|
+
var keccak256_1 = require("@ethersproject/keccak256");
|
|
5
|
+
var strings_1 = require("@ethersproject/strings");
|
|
6
|
+
function id(text) {
|
|
7
|
+
return (0, keccak256_1.keccak256)((0, strings_1.toUtf8Bytes)(text));
|
|
8
|
+
}
|
|
9
|
+
exports.id = id;
|
|
10
|
+
//# sourceMappingURL=id.js.map
|
package/lib/id.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../src.ts/id.ts"],"names":[],"mappings":";;;AAAA,sDAAqD;AACrD,kDAAqD;AAErD,SAAgB,EAAE,CAAC,IAAY;IAC3B,OAAO,IAAA,qBAAS,EAAC,IAAA,qBAAW,EAAC,IAAI,CAAC,CAAC,CAAC;AACxC,CAAC;AAFD,gBAEC"}
|
package/lib/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { id } from "./id";
|
|
2
|
+
import { dnsEncode, isValidName, namehash } from "./namehash";
|
|
3
|
+
import { hashMessage, messagePrefix } from "./message";
|
|
4
|
+
import { ensNormalize } from "./namehash";
|
|
5
|
+
import { TypedDataEncoder as _TypedDataEncoder } from "./typed-data";
|
|
6
|
+
export { id, dnsEncode, namehash, isValidName, ensNormalize, messagePrefix, hashMessage, _TypedDataEncoder, };
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src.ts/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C,OAAO,EAAE,gBAAgB,IAAI,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAErE,OAAO,EACH,EAAE,EAEF,SAAS,EACT,QAAQ,EACR,WAAW,EAEX,YAAY,EAEZ,aAAa,EACb,WAAW,EAEX,iBAAiB,GACpB,CAAA"}
|
package/lib/index.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports._TypedDataEncoder = exports.hashMessage = exports.messagePrefix = exports.ensNormalize = exports.isValidName = exports.namehash = exports.dnsEncode = exports.id = void 0;
|
|
4
|
+
var id_1 = require("./id");
|
|
5
|
+
Object.defineProperty(exports, "id", { enumerable: true, get: function () { return id_1.id; } });
|
|
6
|
+
var namehash_1 = require("./namehash");
|
|
7
|
+
Object.defineProperty(exports, "dnsEncode", { enumerable: true, get: function () { return namehash_1.dnsEncode; } });
|
|
8
|
+
Object.defineProperty(exports, "isValidName", { enumerable: true, get: function () { return namehash_1.isValidName; } });
|
|
9
|
+
Object.defineProperty(exports, "namehash", { enumerable: true, get: function () { return namehash_1.namehash; } });
|
|
10
|
+
var message_1 = require("./message");
|
|
11
|
+
Object.defineProperty(exports, "hashMessage", { enumerable: true, get: function () { return message_1.hashMessage; } });
|
|
12
|
+
Object.defineProperty(exports, "messagePrefix", { enumerable: true, get: function () { return message_1.messagePrefix; } });
|
|
13
|
+
var namehash_2 = require("./namehash");
|
|
14
|
+
Object.defineProperty(exports, "ensNormalize", { enumerable: true, get: function () { return namehash_2.ensNormalize; } });
|
|
15
|
+
var typed_data_1 = require("./typed-data");
|
|
16
|
+
Object.defineProperty(exports, "_TypedDataEncoder", { enumerable: true, get: function () { return typed_data_1.TypedDataEncoder; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
package/lib/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src.ts/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;AAEb,2BAA0B;AAStB,mFATK,OAAE,OASL;AARN,uCAA8D;AAU1D,0FAVK,oBAAS,OAUL;AAET,4FAZgB,sBAAW,OAYhB;AADX,yFAX6B,mBAAQ,OAW7B;AAVZ,qCAAuD;AAgBnD,4FAhBK,qBAAW,OAgBL;AADX,8FAfkB,uBAAa,OAelB;AAbjB,uCAA0C;AAWtC,6FAXK,uBAAY,OAWL;AAThB,2CAAqE;AAcjE,kGAdyB,6BAAiB,OAczB"}
|
package/lib/message.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.d.ts","sourceRoot":"","sources":["../src.ts/message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAU,MAAM,aAAa,CAAC;AAI5C,eAAO,MAAM,aAAa,sBAAoB,CAAC;AAE/C,wBAAgB,WAAW,CAAC,OAAO,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,CAO3D"}
|
package/lib/message.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.hashMessage = exports.messagePrefix = void 0;
|
|
4
|
+
var bytes_1 = require("@qevm/bytes");
|
|
5
|
+
var keccak256_1 = require("@ethersproject/keccak256");
|
|
6
|
+
var strings_1 = require("@ethersproject/strings");
|
|
7
|
+
exports.messagePrefix = "\x19Cellframe\n";
|
|
8
|
+
function hashMessage(message) {
|
|
9
|
+
if (typeof (message) === "string") {
|
|
10
|
+
message = (0, strings_1.toUtf8Bytes)(message);
|
|
11
|
+
}
|
|
12
|
+
return (0, keccak256_1.keccak256)((0, bytes_1.concat)([
|
|
13
|
+
(0, strings_1.toUtf8Bytes)(exports.messagePrefix),
|
|
14
|
+
(0, strings_1.toUtf8Bytes)(String(message.length)),
|
|
15
|
+
message
|
|
16
|
+
]));
|
|
17
|
+
}
|
|
18
|
+
exports.hashMessage = hashMessage;
|
|
19
|
+
//# sourceMappingURL=message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message.js","sourceRoot":"","sources":["../src.ts/message.ts"],"names":[],"mappings":";;;AAAA,qCAA4C;AAC5C,sDAAqD;AACrD,kDAAqD;AAExC,QAAA,aAAa,GAAG,iBAAiB,CAAC;AAE/C,SAAgB,WAAW,CAAC,OAAuB;IAC/C,IAAI,OAAM,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE;QAAE,OAAO,GAAG,IAAA,qBAAW,EAAC,OAAO,CAAC,CAAC;KAAE;IACrE,OAAO,IAAA,qBAAS,EAAC,IAAA,cAAM,EAAC;QACpB,IAAA,qBAAW,EAAC,qBAAa,CAAC;QAC1B,IAAA,qBAAW,EAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnC,OAAO;KACV,CAAC,CAAC,CAAC;AACR,CAAC;AAPD,kCAOC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function ensNormalize(name: string): string;
|
|
2
|
+
export declare function isValidName(name: string): boolean;
|
|
3
|
+
export declare function namehash(name: string): string;
|
|
4
|
+
export declare function dnsEncode(name: string): string;
|
|
5
|
+
//# sourceMappingURL=namehash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namehash.d.ts","sourceRoot":"","sources":["../src.ts/namehash.ts"],"names":[],"mappings":"AA0CA,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKjD;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc7C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa9C"}
|
package/lib/namehash.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.dnsEncode = exports.namehash = exports.isValidName = exports.ensNormalize = void 0;
|
|
4
|
+
var bytes_1 = require("@qevm/bytes");
|
|
5
|
+
var strings_1 = require("@ethersproject/strings");
|
|
6
|
+
var keccak256_1 = require("@ethersproject/keccak256");
|
|
7
|
+
var logger_1 = require("@ethersproject/logger");
|
|
8
|
+
var _version_1 = require("./_version");
|
|
9
|
+
var logger = new logger_1.Logger(_version_1.version);
|
|
10
|
+
var lib_1 = require("./ens-normalize/lib");
|
|
11
|
+
var Zeros = new Uint8Array(32);
|
|
12
|
+
Zeros.fill(0);
|
|
13
|
+
function checkComponent(comp) {
|
|
14
|
+
if (comp.length === 0) {
|
|
15
|
+
throw new Error("invalid ENS name; empty component");
|
|
16
|
+
}
|
|
17
|
+
return comp;
|
|
18
|
+
}
|
|
19
|
+
function ensNameSplit(name) {
|
|
20
|
+
var bytes = (0, strings_1.toUtf8Bytes)((0, lib_1.ens_normalize)(name));
|
|
21
|
+
var comps = [];
|
|
22
|
+
if (name.length === 0) {
|
|
23
|
+
return comps;
|
|
24
|
+
}
|
|
25
|
+
var last = 0;
|
|
26
|
+
for (var i = 0; i < bytes.length; i++) {
|
|
27
|
+
var d = bytes[i];
|
|
28
|
+
// A separator (i.e. "."); copy this component
|
|
29
|
+
if (d === 0x2e) {
|
|
30
|
+
comps.push(checkComponent(bytes.slice(last, i)));
|
|
31
|
+
last = i + 1;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
// There was a stray separator at the end of the name
|
|
35
|
+
if (last >= bytes.length) {
|
|
36
|
+
throw new Error("invalid ENS name; empty component");
|
|
37
|
+
}
|
|
38
|
+
comps.push(checkComponent(bytes.slice(last)));
|
|
39
|
+
return comps;
|
|
40
|
+
}
|
|
41
|
+
function ensNormalize(name) {
|
|
42
|
+
return ensNameSplit(name).map(function (comp) { return (0, strings_1.toUtf8String)(comp); }).join(".");
|
|
43
|
+
}
|
|
44
|
+
exports.ensNormalize = ensNormalize;
|
|
45
|
+
function isValidName(name) {
|
|
46
|
+
try {
|
|
47
|
+
return (ensNameSplit(name).length !== 0);
|
|
48
|
+
}
|
|
49
|
+
catch (error) { }
|
|
50
|
+
return false;
|
|
51
|
+
}
|
|
52
|
+
exports.isValidName = isValidName;
|
|
53
|
+
function namehash(name) {
|
|
54
|
+
/* istanbul ignore if */
|
|
55
|
+
if (typeof (name) !== "string") {
|
|
56
|
+
logger.throwArgumentError("invalid ENS name; not a string", "name", name);
|
|
57
|
+
}
|
|
58
|
+
var result = Zeros;
|
|
59
|
+
var comps = ensNameSplit(name);
|
|
60
|
+
while (comps.length) {
|
|
61
|
+
result = (0, keccak256_1.keccak256)((0, bytes_1.concat)([result, (0, keccak256_1.keccak256)(comps.pop())]));
|
|
62
|
+
}
|
|
63
|
+
return (0, bytes_1.hexlify)(result);
|
|
64
|
+
}
|
|
65
|
+
exports.namehash = namehash;
|
|
66
|
+
function dnsEncode(name) {
|
|
67
|
+
return (0, bytes_1.hexlify)((0, bytes_1.concat)(ensNameSplit(name).map(function (comp) {
|
|
68
|
+
// DNS does not allow components over 63 bytes in length
|
|
69
|
+
if (comp.length > 63) {
|
|
70
|
+
throw new Error("invalid DNS encoded entry; length exceeds 63 bytes");
|
|
71
|
+
}
|
|
72
|
+
var bytes = new Uint8Array(comp.length + 1);
|
|
73
|
+
bytes.set(comp, 1);
|
|
74
|
+
bytes[0] = bytes.length - 1;
|
|
75
|
+
return bytes;
|
|
76
|
+
}))) + "00";
|
|
77
|
+
}
|
|
78
|
+
exports.dnsEncode = dnsEncode;
|
|
79
|
+
//# sourceMappingURL=namehash.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namehash.js","sourceRoot":"","sources":["../src.ts/namehash.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { TypedDataDomain, TypedDataField } from "@qevm/abstract-signer";
|
|
2
|
+
export declare class TypedDataEncoder {
|
|
3
|
+
readonly primaryType: string;
|
|
4
|
+
readonly types: Record<string, Array<TypedDataField>>;
|
|
5
|
+
readonly _encoderCache: Record<string, (value: any) => string>;
|
|
6
|
+
readonly _types: Record<string, string>;
|
|
7
|
+
constructor(types: Record<string, Array<TypedDataField>>);
|
|
8
|
+
getEncoder(type: string): (value: any) => string;
|
|
9
|
+
_getEncoder(type: string): (value: any) => string;
|
|
10
|
+
encodeType(name: string): string;
|
|
11
|
+
encodeData(type: string, value: any): string;
|
|
12
|
+
hashStruct(name: string, value: Record<string, any>): string;
|
|
13
|
+
encode(value: Record<string, any>): string;
|
|
14
|
+
hash(value: Record<string, any>): string;
|
|
15
|
+
_visit(type: string, value: any, callback: (type: string, data: any) => any): any;
|
|
16
|
+
visit(value: Record<string, any>, callback: (type: string, data: any) => any): any;
|
|
17
|
+
static from(types: Record<string, Array<TypedDataField>>): TypedDataEncoder;
|
|
18
|
+
static getPrimaryType(types: Record<string, Array<TypedDataField>>): string;
|
|
19
|
+
static hashStruct(name: string, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string;
|
|
20
|
+
static hashDomain(domain: TypedDataDomain): string;
|
|
21
|
+
static encode(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string;
|
|
22
|
+
static hash(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): string;
|
|
23
|
+
static resolveNames(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>, resolveName: (name: string) => Promise<string>): Promise<{
|
|
24
|
+
domain: TypedDataDomain;
|
|
25
|
+
value: any;
|
|
26
|
+
}>;
|
|
27
|
+
static getPayload(domain: TypedDataDomain, types: Record<string, Array<TypedDataField>>, value: Record<string, any>): any;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=typed-data.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typed-data.d.ts","sourceRoot":"","sources":["../src.ts/typed-data.ts"],"names":[],"mappings":"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"}
|