@1shotapi/ows-clear-signing 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,48 @@
1
+ import { ClearSigningValue } from "./ClearSigningValue.js";
2
+ /** ERC-7730 path roots. */
3
+ export declare enum EClearSigningPathRoot {
4
+ /** `#.` — decoded structured data. */
5
+ Data = "data",
6
+ /** `@.` — container (from / to / value / chainId). */
7
+ Container = "container",
8
+ /** `$.` — the (merged) descriptor document. */
9
+ Descriptor = "descriptor",
10
+ /** No root — relative to the enclosing group (the structured data at top level). */
11
+ Relative = "relative"
12
+ }
13
+ export declare enum EClearSigningPathTokenKind {
14
+ Name = "name",
15
+ Index = "index",
16
+ Slice = "slice",
17
+ All = "all"
18
+ }
19
+ export interface IClearSigningPathToken {
20
+ kind: EClearSigningPathTokenKind;
21
+ name?: string;
22
+ index?: number;
23
+ start?: number;
24
+ end?: number;
25
+ }
26
+ /** A value reached by a path, with the concrete (index-resolved) path used to reach it. */
27
+ export interface IClearSigningResolvedValue {
28
+ value: ClearSigningValue;
29
+ concrete: IClearSigningPathToken[];
30
+ }
31
+ /**
32
+ * Parsed ERC-7730 path. Accepts both the normative dot form (`a.[0].b`, `x.[-20:]`) and the
33
+ * bracket-attached form used in some spec examples (`recipients[0]`).
34
+ */
35
+ export declare class ClearSigningPath {
36
+ readonly root: EClearSigningPathRoot;
37
+ readonly tokens: IClearSigningPathToken[];
38
+ readonly source: string;
39
+ constructor(root: EClearSigningPathRoot, tokens: IClearSigningPathToken[], source: string);
40
+ static parse(path: string): ClearSigningPath;
41
+ private static parseBracket;
42
+ /** Walk `tokens` from `start`, expanding `[]` and array slices into multiple results. */
43
+ static walk(start: IClearSigningResolvedValue, tokens: IClearSigningPathToken[], source: string): IClearSigningResolvedValue[];
44
+ private static step;
45
+ /** Plain JSON navigation for `$.` paths over the descriptor document. */
46
+ static lookupJson(document: unknown, tokens: IClearSigningPathToken[], source: string): unknown;
47
+ }
48
+ //# sourceMappingURL=ClearSigningPath.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClearSigningPath.d.ts","sourceRoot":"","sources":["../src/ClearSigningPath.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAA0B,MAAM,wBAAwB,CAAC;AAEnF,2BAA2B;AAC3B,oBAAY,qBAAqB;IAC/B,sCAAsC;IACtC,IAAI,SAAS;IACb,sDAAsD;IACtD,SAAS,cAAc;IACvB,+CAA+C;IAC/C,UAAU,eAAe;IACzB,oFAAoF;IACpF,QAAQ,aAAa;CACtB;AAED,oBAAY,0BAA0B;IACpC,IAAI,SAAS;IACb,KAAK,UAAU;IACf,KAAK,UAAU;IACf,GAAG,QAAQ;CACZ;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,0BAA0B,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,2FAA2F;AAC3F,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,iBAAiB,CAAC;IACzB,QAAQ,EAAE,sBAAsB,EAAE,CAAC;CACpC;AAKD;;;GAGG;AACH,qBAAa,gBAAgB;aAET,IAAI,EAAE,qBAAqB;aAC3B,MAAM,EAAE,sBAAsB,EAAE;aAChC,MAAM,EAAE,MAAM;gBAFd,IAAI,EAAE,qBAAqB,EAC3B,MAAM,EAAE,sBAAsB,EAAE,EAChC,MAAM,EAAE,MAAM;IAGhC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB;IAiC5C,OAAO,CAAC,MAAM,CAAC,YAAY;IAiB3B,yFAAyF;IACzF,MAAM,CAAC,IAAI,CACT,KAAK,EAAE,0BAA0B,EACjC,MAAM,EAAE,sBAAsB,EAAE,EAChC,MAAM,EAAE,MAAM,GACb,0BAA0B,EAAE;IAY/B,OAAO,CAAC,MAAM,CAAC,IAAI;IA+DnB,yEAAyE;IACzE,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,sBAAsB,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO;CAgBhG"}
@@ -0,0 +1,178 @@
1
+ import { ClearSigningError } from "./ClearSigningError.js";
2
+ import { ClearSigningValue, EClearSigningValueKind } from "./ClearSigningValue.js";
3
+ /** ERC-7730 path roots. */
4
+ export var EClearSigningPathRoot;
5
+ (function (EClearSigningPathRoot) {
6
+ /** `#.` — decoded structured data. */
7
+ EClearSigningPathRoot["Data"] = "data";
8
+ /** `@.` — container (from / to / value / chainId). */
9
+ EClearSigningPathRoot["Container"] = "container";
10
+ /** `$.` — the (merged) descriptor document. */
11
+ EClearSigningPathRoot["Descriptor"] = "descriptor";
12
+ /** No root — relative to the enclosing group (the structured data at top level). */
13
+ EClearSigningPathRoot["Relative"] = "relative";
14
+ })(EClearSigningPathRoot || (EClearSigningPathRoot = {}));
15
+ export var EClearSigningPathTokenKind;
16
+ (function (EClearSigningPathTokenKind) {
17
+ EClearSigningPathTokenKind["Name"] = "name";
18
+ EClearSigningPathTokenKind["Index"] = "index";
19
+ EClearSigningPathTokenKind["Slice"] = "slice";
20
+ EClearSigningPathTokenKind["All"] = "all";
21
+ })(EClearSigningPathTokenKind || (EClearSigningPathTokenKind = {}));
22
+ const SEGMENT = /^([^[\]]*)((?:\[[^\]]*\])*)$/;
23
+ const BRACKET = /\[([^\]]*)\]/g;
24
+ /**
25
+ * Parsed ERC-7730 path. Accepts both the normative dot form (`a.[0].b`, `x.[-20:]`) and the
26
+ * bracket-attached form used in some spec examples (`recipients[0]`).
27
+ */
28
+ export class ClearSigningPath {
29
+ root;
30
+ tokens;
31
+ source;
32
+ constructor(root, tokens, source) {
33
+ this.root = root;
34
+ this.tokens = tokens;
35
+ this.source = source;
36
+ }
37
+ static parse(path) {
38
+ const trimmed = path.trim();
39
+ let root = EClearSigningPathRoot.Relative;
40
+ let rest = trimmed;
41
+ const rootChar = trimmed[0];
42
+ if ((rootChar === "#" || rootChar === "@" || rootChar === "$") &&
43
+ (trimmed.length === 1 || trimmed[1] === ".")) {
44
+ root =
45
+ rootChar === "#"
46
+ ? EClearSigningPathRoot.Data
47
+ : rootChar === "@"
48
+ ? EClearSigningPathRoot.Container
49
+ : EClearSigningPathRoot.Descriptor;
50
+ rest = trimmed.slice(2);
51
+ }
52
+ const tokens = [];
53
+ if (rest.length > 0) {
54
+ for (const segment of rest.split(".")) {
55
+ const match = SEGMENT.exec(segment);
56
+ if (!match || (match[1] === "" && match[2] === "")) {
57
+ throw new ClearSigningError(`Invalid path: ${path}`);
58
+ }
59
+ if (match[1]) {
60
+ tokens.push({ kind: EClearSigningPathTokenKind.Name, name: match[1] });
61
+ }
62
+ for (const bracket of match[2].matchAll(BRACKET)) {
63
+ tokens.push(ClearSigningPath.parseBracket(bracket[1], path));
64
+ }
65
+ }
66
+ }
67
+ return new ClearSigningPath(root, tokens, trimmed);
68
+ }
69
+ static parseBracket(body, path) {
70
+ const content = body.trim();
71
+ if (content === "")
72
+ return { kind: EClearSigningPathTokenKind.All };
73
+ if (/^-?\d+$/.test(content)) {
74
+ return { kind: EClearSigningPathTokenKind.Index, index: Number(content) };
75
+ }
76
+ const slice = /^(-?\d*):(-?\d*)$/.exec(content);
77
+ if (slice) {
78
+ return {
79
+ kind: EClearSigningPathTokenKind.Slice,
80
+ start: slice[1] === "" ? undefined : Number(slice[1]),
81
+ end: slice[2] === "" ? undefined : Number(slice[2]),
82
+ };
83
+ }
84
+ throw new ClearSigningError(`Invalid path selector [${body}] in ${path}`);
85
+ }
86
+ /** Walk `tokens` from `start`, expanding `[]` and array slices into multiple results. */
87
+ static walk(start, tokens, source) {
88
+ let current = [start];
89
+ for (const token of tokens) {
90
+ const next = [];
91
+ for (const item of current) {
92
+ next.push(...ClearSigningPath.step(item, token, source));
93
+ }
94
+ current = next;
95
+ }
96
+ return current;
97
+ }
98
+ static step(item, token, source) {
99
+ const { value } = item;
100
+ switch (token.kind) {
101
+ case EClearSigningPathTokenKind.Name: {
102
+ if (value.kind === EClearSigningValueKind.Struct) {
103
+ const member = value.value[token.name];
104
+ if (member)
105
+ return [{ value: member, concrete: [...item.concrete, token] }];
106
+ }
107
+ if (token.name === "length" && value.kind === EClearSigningValueKind.Array) {
108
+ return [{
109
+ value: ClearSigningValue.leaf("uint256", value.value.length),
110
+ concrete: [...item.concrete, token],
111
+ }];
112
+ }
113
+ throw new ClearSigningError(`Path not found: ${source}`);
114
+ }
115
+ case EClearSigningPathTokenKind.Index: {
116
+ if (value.kind === EClearSigningValueKind.Array) {
117
+ const elements = value.value;
118
+ const i = token.index < 0 ? elements.length + token.index : token.index;
119
+ const element = elements[i];
120
+ if (!element)
121
+ throw new ClearSigningError(`Index out of range: ${source}`);
122
+ return [{
123
+ value: element,
124
+ concrete: [...item.concrete, { kind: EClearSigningPathTokenKind.Index, index: i }],
125
+ }];
126
+ }
127
+ const i = token.index;
128
+ return [{
129
+ value: value.sliceBytes(i, i === -1 ? undefined : i + 1),
130
+ concrete: [...item.concrete, token],
131
+ }];
132
+ }
133
+ case EClearSigningPathTokenKind.All:
134
+ case EClearSigningPathTokenKind.Slice: {
135
+ if (value.kind === EClearSigningValueKind.Array) {
136
+ const elements = value.value;
137
+ const from = ClearSigningValue.sliceIndex(token.start, elements.length, 0);
138
+ const to = ClearSigningValue.sliceIndex(token.end, elements.length, elements.length);
139
+ const out = [];
140
+ for (let i = from; i < to; i++) {
141
+ out.push({
142
+ value: elements[i],
143
+ concrete: [...item.concrete, { kind: EClearSigningPathTokenKind.Index, index: i }],
144
+ });
145
+ }
146
+ return out;
147
+ }
148
+ if (token.kind === EClearSigningPathTokenKind.All) {
149
+ throw new ClearSigningError(`[] applied to non-array: ${source}`);
150
+ }
151
+ return [{
152
+ value: value.sliceBytes(token.start, token.end),
153
+ concrete: [...item.concrete, token],
154
+ }];
155
+ }
156
+ }
157
+ }
158
+ /** Plain JSON navigation for `$.` paths over the descriptor document. */
159
+ static lookupJson(document, tokens, source) {
160
+ let current = document;
161
+ for (const token of tokens) {
162
+ if (token.kind === EClearSigningPathTokenKind.Name && current && typeof current === "object") {
163
+ current = current[token.name];
164
+ }
165
+ else if (token.kind === EClearSigningPathTokenKind.Index && Array.isArray(current)) {
166
+ current = current[token.index < 0 ? current.length + token.index : token.index];
167
+ }
168
+ else {
169
+ throw new ClearSigningError(`Descriptor path not found: ${source}`);
170
+ }
171
+ if (current === undefined) {
172
+ throw new ClearSigningError(`Descriptor path not found: ${source}`);
173
+ }
174
+ }
175
+ return current;
176
+ }
177
+ }
178
+ //# sourceMappingURL=ClearSigningPath.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClearSigningPath.js","sourceRoot":"","sources":["../src/ClearSigningPath.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { type AbiFunction } from "viem";
2
+ import { EIP712EncodeTypeHash, EVMFunctionSelector, type EVMChainId, type EVMContractAddress, type HexString, type IClearSigningCalldataLookupKey, type IClearSigningEip712LookupKey } from "@1shotapi/ows-types";
3
+ import type { IClearSigningTypedData, IClearSigningTypedDataField } from "./interfaces.js";
4
+ /** ERC-7730 matching helpers shared by wallets (lookup) and resolvers (format selection). */
5
+ export declare class ClearSigningUtils {
6
+ /**
7
+ * Registry lookup key for a contract call, or `null` when there is no selector
8
+ * (plain native transfer / calldata shorter than 4 bytes).
9
+ */
10
+ static calldataLookupKey(chainId: EVMChainId, to: EVMContractAddress, data: HexString): IClearSigningCalldataLookupKey | null;
11
+ /**
12
+ * Registry lookup key for an EIP-712 message, or `null` when the domain lacks
13
+ * `chainId` / `verifyingContract` (ERC-7730 says wallets SHOULD NOT clear-sign those).
14
+ */
15
+ static eip712LookupKey(typedData: IClearSigningTypedData): IClearSigningEip712LookupKey | null;
16
+ /** `domain.chainId` as a branded chain id, or `null` when missing / invalid. */
17
+ static domainChainId(domain: Record<string, unknown>): EVMChainId | null;
18
+ /** EIP-712 `encodeType(primaryType)`: primary struct first, then referenced structs sorted by name. */
19
+ static encodeType(types: Record<string, ReadonlyArray<IClearSigningTypedDataField>>, primaryType: string): string;
20
+ static hashEncodeType(encodeType: string): EIP712EncodeTypeHash;
21
+ /**
22
+ * Canonicalize an EIP-712 `display.formats` key (registry keys are `encodeType` strings;
23
+ * tolerate stray whitespace after commas / around parentheses).
24
+ */
25
+ static normalizeEncodeType(key: string): string;
26
+ /** Parse a calldata `display.formats` key (function fragment with parameter names). */
27
+ static parseFunctionKey(key: string): AbiFunction;
28
+ /** Selector of a calldata `display.formats` key (parameter names ignored). */
29
+ static selectorForFunctionKey(key: string): EVMFunctionSelector;
30
+ }
31
+ //# sourceMappingURL=ClearSigningUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClearSigningUtils.d.ts","sourceRoot":"","sources":["../src/ClearSigningUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,MAAM,CAAC;AACd,OAAO,EAEL,oBAAoB,EAGpB,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,kBAAkB,EACvB,KAAK,SAAS,EACd,KAAK,8BAA8B,EACnC,KAAK,4BAA4B,EAClC,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EACV,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,iBAAiB,CAAC;AAIzB,6FAA6F;AAC7F,qBAAa,iBAAiB;IAC5B;;;OAGG;IACH,MAAM,CAAC,iBAAiB,CACtB,OAAO,EAAE,UAAU,EACnB,EAAE,EAAE,kBAAkB,EACtB,IAAI,EAAE,SAAS,GACd,8BAA8B,GAAG,IAAI;IASxC;;;OAGG;IACH,MAAM,CAAC,eAAe,CACpB,SAAS,EAAE,sBAAsB,GAChC,4BAA4B,GAAG,IAAI;IAqBtC,gFAAgF;IAChF,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,UAAU,GAAG,IAAI;IAYxE,uGAAuG;IACvG,MAAM,CAAC,UAAU,CACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAC,EACjE,WAAW,EAAE,MAAM,GAClB,MAAM;IAwBT,MAAM,CAAC,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,oBAAoB;IAI/D;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAI/C,uFAAuF;IACvF,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW;IAUjD,8EAA8E;IAC9E,MAAM,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,mBAAmB;CAKhE"}
@@ -0,0 +1,110 @@
1
+ import { keccak256, parseAbiItem, stringToHex, toFunctionSelector, } from "viem";
2
+ import { ChainUtils, EIP712EncodeTypeHash, EIP712TypeNameSchema, EVMContractAddressSchema, EVMFunctionSelector, } from "@1shotapi/ows-types";
3
+ import { ClearSigningError } from "./ClearSigningError.js";
4
+ const ARRAY_SUFFIXES = /(\[\d*\])+$/;
5
+ /** ERC-7730 matching helpers shared by wallets (lookup) and resolvers (format selection). */
6
+ export class ClearSigningUtils {
7
+ /**
8
+ * Registry lookup key for a contract call, or `null` when there is no selector
9
+ * (plain native transfer / calldata shorter than 4 bytes).
10
+ */
11
+ static calldataLookupKey(chainId, to, data) {
12
+ if (!/^0x[0-9a-fA-F]{8}/.test(data))
13
+ return null;
14
+ return {
15
+ chainId,
16
+ address: to,
17
+ selector: EVMFunctionSelector(data.slice(0, 10).toLowerCase()),
18
+ };
19
+ }
20
+ /**
21
+ * Registry lookup key for an EIP-712 message, or `null` when the domain lacks
22
+ * `chainId` / `verifyingContract` (ERC-7730 says wallets SHOULD NOT clear-sign those).
23
+ */
24
+ static eip712LookupKey(typedData) {
25
+ const { domain, primaryType, types } = typedData;
26
+ if (primaryType === "EIP712Domain" || !types[primaryType])
27
+ return null;
28
+ const name = EIP712TypeNameSchema.safeParse(primaryType);
29
+ const contract = EVMContractAddressSchema.safeParse(domain.verifyingContract);
30
+ const chainId = ClearSigningUtils.domainChainId(domain);
31
+ if (!name.success || !contract.success || chainId === null)
32
+ return null;
33
+ let encoded;
34
+ try {
35
+ encoded = ClearSigningUtils.encodeType(types, primaryType);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ return {
41
+ chainId,
42
+ verifyingContract: contract.data,
43
+ primaryType: name.data,
44
+ encodeTypeHash: ClearSigningUtils.hashEncodeType(encoded),
45
+ };
46
+ }
47
+ /** `domain.chainId` as a branded chain id, or `null` when missing / invalid. */
48
+ static domainChainId(domain) {
49
+ const raw = domain.chainId;
50
+ if (typeof raw !== "number" && typeof raw !== "string" && typeof raw !== "bigint") {
51
+ return null;
52
+ }
53
+ try {
54
+ return ChainUtils.asEVMChainId(raw);
55
+ }
56
+ catch {
57
+ return null;
58
+ }
59
+ }
60
+ /** EIP-712 `encodeType(primaryType)`: primary struct first, then referenced structs sorted by name. */
61
+ static encodeType(types, primaryType) {
62
+ const deps = new Set();
63
+ const visit = (typeName) => {
64
+ if (deps.has(typeName) || typeName === "EIP712Domain")
65
+ return;
66
+ const fields = types[typeName];
67
+ if (!fields)
68
+ return;
69
+ deps.add(typeName);
70
+ for (const field of fields) {
71
+ visit(field.type.replace(ARRAY_SUFFIXES, ""));
72
+ }
73
+ };
74
+ if (!types[primaryType]) {
75
+ throw new ClearSigningError(`Unknown EIP-712 type ${primaryType}`);
76
+ }
77
+ visit(primaryType);
78
+ deps.delete(primaryType);
79
+ return [primaryType, ...[...deps].sort()]
80
+ .map((name) => `${name}(${types[name].map((f) => `${f.type} ${f.name}`).join(",")})`)
81
+ .join("");
82
+ }
83
+ static hashEncodeType(encodeType) {
84
+ return EIP712EncodeTypeHash(keccak256(stringToHex(encodeType)));
85
+ }
86
+ /**
87
+ * Canonicalize an EIP-712 `display.formats` key (registry keys are `encodeType` strings;
88
+ * tolerate stray whitespace after commas / around parentheses).
89
+ */
90
+ static normalizeEncodeType(key) {
91
+ return key.replace(/\s*([(),])\s*/g, "$1").trim();
92
+ }
93
+ /** Parse a calldata `display.formats` key (function fragment with parameter names). */
94
+ static parseFunctionKey(key) {
95
+ try {
96
+ const item = parseAbiItem(`function ${key.trim()}`);
97
+ if (item.type !== "function")
98
+ throw new Error("not a function");
99
+ return item;
100
+ }
101
+ catch {
102
+ throw new ClearSigningError(`Invalid function fragment: ${key}`);
103
+ }
104
+ }
105
+ /** Selector of a calldata `display.formats` key (parameter names ignored). */
106
+ static selectorForFunctionKey(key) {
107
+ return EVMFunctionSelector(toFunctionSelector(ClearSigningUtils.parseFunctionKey(key)).toLowerCase());
108
+ }
109
+ }
110
+ //# sourceMappingURL=ClearSigningUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClearSigningUtils.js","sourceRoot":"","sources":["../src/ClearSigningUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ import { type AbiParameter } from "viem";
2
+ import { ClearSigningCanonicalString, EVMAccountAddress } from "@1shotapi/ows-types";
3
+ import type { IClearSigningTypedDataField } from "./interfaces.js";
4
+ export declare enum EClearSigningValueKind {
5
+ /** Decoded primitive: bigint (int/uint), string (address/bytes/string), boolean. */
6
+ Leaf = "leaf",
7
+ Array = "array",
8
+ Struct = "struct",
9
+ /** Literal from the descriptor (`value`, `$.` references, constant params). */
10
+ Constant = "constant"
11
+ }
12
+ /**
13
+ * Decoded structured data with its Solidity / EIP-712 type kept alongside, so path slices
14
+ * and formatters know how to interpret each value (e.g. a slice of a `uint256` vs `bytes`).
15
+ */
16
+ export declare class ClearSigningValue {
17
+ readonly kind: EClearSigningValueKind;
18
+ /** Solidity type for leaves (`uint256`, `address`, `bytes`, …); struct/array type otherwise. */
19
+ readonly type: string;
20
+ readonly value: unknown;
21
+ constructor(kind: EClearSigningValueKind,
22
+ /** Solidity type for leaves (`uint256`, `address`, `bytes`, …); struct/array type otherwise. */
23
+ type: string, value: unknown);
24
+ static constant(value: unknown): ClearSigningValue;
25
+ static leaf(type: string, value: unknown): ClearSigningValue;
26
+ static struct(type: string, members: Record<string, ClearSigningValue>): ClearSigningValue;
27
+ /** Build the `#` root from viem `decodeFunctionData` args and the function inputs. */
28
+ static fromAbiArguments(inputs: readonly AbiParameter[], args: readonly unknown[]): ClearSigningValue;
29
+ /** Build the `#` root from an EIP-712 message. */
30
+ static fromTypedData(types: Record<string, ReadonlyArray<IClearSigningTypedDataField>>, primaryType: string, message: Record<string, unknown>): ClearSigningValue;
31
+ private static fromAbi;
32
+ private static fromEip712;
33
+ private static normalizeLeaf;
34
+ get isInteger(): boolean;
35
+ /** Bytes view of a leaf, used by path slices. */
36
+ toBytes(): Uint8Array;
37
+ /** Byte slice of a leaf → `bytes` leaf (spec: slices on primitives select bytes). */
38
+ sliceBytes(start: number | undefined, end: number | undefined): ClearSigningValue;
39
+ static sliceIndex(index: number | undefined, length: number, fallback: number): number;
40
+ /** Interpret as an unsigned/signed integer (ints, byte strings, numeric constants). */
41
+ asBigInt(): bigint;
42
+ /** Interpret as an address (address leaves, ≥20-byte slices → last 20 bytes, uint → low 160 bits). */
43
+ asAddress(): EVMAccountAddress;
44
+ /** Canonical rendering of a primitive (decimal ints, `true`/`false`, strings as-is, JSON otherwise). */
45
+ static canonical(v: unknown): ClearSigningCanonicalString;
46
+ /** Canonical raw rendering (decimal ints, checksummed addresses, hex bytes, utf-8 strings). */
47
+ toRawString(): ClearSigningCanonicalString;
48
+ }
49
+ //# sourceMappingURL=ClearSigningValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClearSigningValue.d.ts","sourceRoot":"","sources":["../src/ClearSigningValue.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,MAAM,CAAC;AACd,OAAO,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAErF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iBAAiB,CAAC;AAEnE,oBAAY,sBAAsB;IAChC,oFAAoF;IACpF,IAAI,SAAS;IACb,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,+EAA+E;IAC/E,QAAQ,aAAa;CACtB;AAID;;;GAGG;AACH,qBAAa,iBAAiB;aAEV,IAAI,EAAE,sBAAsB;IAC5C,gGAAgG;aAChF,IAAI,EAAE,MAAM;aACZ,KAAK,EAAE,OAAO;gBAHd,IAAI,EAAE,sBAAsB;IAC5C,gGAAgG;IAChF,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO;IAGhC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB;IAIlD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,iBAAiB;IAQ5D,MAAM,CAAC,MAAM,CACX,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,GACzC,iBAAiB;IAIpB,sFAAsF;IACtF,MAAM,CAAC,gBAAgB,CACrB,MAAM,EAAE,SAAS,YAAY,EAAE,EAC/B,IAAI,EAAE,SAAS,OAAO,EAAE,GACvB,iBAAiB;IAQpB,kDAAkD;IAClD,MAAM,CAAC,aAAa,CAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,2BAA2B,CAAC,CAAC,EACjE,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,iBAAiB;IAIpB,OAAO,CAAC,MAAM,CAAC,OAAO;IAkCtB,OAAO,CAAC,MAAM,CAAC,UAAU;IAoCzB,OAAO,CAAC,MAAM,CAAC,aAAa;IAgC5B,IAAI,SAAS,IAAI,OAAO,CAEvB;IAED,iDAAiD;IACjD,OAAO,IAAI,UAAU;IAmBrB,qFAAqF;IACrF,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,iBAAiB;IASjF,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAMtF,uFAAuF;IACvF,QAAQ,IAAI,MAAM;IAYlB,sGAAsG;IACtG,SAAS,IAAI,iBAAiB;IAkB9B,wGAAwG;IACxG,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,2BAA2B;IAQzD,+FAA+F;IAC/F,WAAW,IAAI,2BAA2B;CAiB3C"}