@callcium/sdk 0.9.0 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +202 -145
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +763 -667
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
- package/src/bytes.ts +9 -9
- package/src/calldata-reader.ts +14 -1
- package/src/constants.ts +85 -181
- package/src/constraint.ts +131 -94
- package/src/descriptor-coder.ts +53 -84
- package/src/descriptor.ts +65 -36
- package/src/errors.ts +12 -5
- package/src/index.ts +8 -17
- package/src/operators.ts +147 -11
- package/src/path.ts +80 -0
- package/src/policy-builder.ts +107 -44
- package/src/policy-coder.ts +102 -77
- package/src/policy-enforcer.ts +98 -128
- package/src/policy-validator.ts +70 -56
- package/src/signature.ts +21 -19
- package/src/type-desc.ts +15 -15
- package/src/types.ts +70 -3
- package/src/validation-issue.ts +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -110,7 +110,7 @@ type CalldataNavigationVariant<C extends NavigationViolationCode> = {
|
|
|
110
110
|
* A union of per-code variants, narrowable with `Extract<Violation, { code: "..." }>`.
|
|
111
111
|
*/
|
|
112
112
|
type CalldataNavigationViolation = CalldataNavigationVariant<"CALLDATA_OUT_OF_BOUNDS"> | CalldataNavigationVariant<"ARRAY_INDEX_OUT_OF_BOUNDS">;
|
|
113
|
-
/** A quantified array exceeded `
|
|
113
|
+
/** A quantified array exceeded `PolicyFormat.MAX_QUANTIFIED_ARRAY_LENGTH`. */
|
|
114
114
|
type QuantifierLimitExceededViolation = {
|
|
115
115
|
code: "QUANTIFIER_LIMIT_EXCEEDED";
|
|
116
116
|
group: number;
|
|
@@ -120,7 +120,7 @@ type QuantifierLimitExceededViolation = {
|
|
|
120
120
|
resolvedValue: Hex;
|
|
121
121
|
};
|
|
122
122
|
/**
|
|
123
|
-
* A resolved word is not the canonical encoding of its declared type
|
|
123
|
+
* A resolved word is not the canonical encoding of its declared type.
|
|
124
124
|
*
|
|
125
125
|
* `resolvedValue` is the raw 32-byte word as it appeared in calldata, before any masking.
|
|
126
126
|
*/
|
|
@@ -226,109 +226,25 @@ type DecodedPolicy = {
|
|
|
226
226
|
type IssueSeverity = "info" | "warning" | "error";
|
|
227
227
|
/** Category of a validation issue. */
|
|
228
228
|
type IssueCategory = "typeMismatch" | "contradiction" | "redundancy" | "vacuity" | "compatibility";
|
|
229
|
+
/**
|
|
230
|
+
* Machine-readable code for a policy validation issue.
|
|
231
|
+
*
|
|
232
|
+
* Each code names one finding of the semantic validator and matches the constant of the same
|
|
233
|
+
* name in the Solidity `IssueCode` library.
|
|
234
|
+
*/
|
|
235
|
+
type IssueCode = "VALUE_OP_ON_DYNAMIC" | "VALUE_OP_ON_COMPOSITE" | "NUMERIC_OP_ON_NON_NUMERIC" | "BITMASK_ON_INVALID" | "IN_ON_BOOL" | "LENGTH_ON_STATIC" | "CONTEXT_TYPE_MISMATCH" | "UNKNOWN_OPERATOR" | "NON_CANONICAL_OPERAND" | "UNNAVIGABLE_PATH" | "NESTED_QUANTIFIER" | "HINT_MISMATCH" | "EQ_NEQ_CONTRADICTION" | "CONFLICTING_EQUALITY" | "OUT_OF_PHYSICAL_BOUNDS" | "IMPOSSIBLE_GT" | "IMPOSSIBLE_LT" | "BOUNDS_EXCLUDE_EQUALITY" | "IMPOSSIBLE_RANGE" | "SET_EXCLUDES_EQUALITY" | "EMPTY_SET_INTERSECTION" | "SET_FULLY_EXCLUDED" | "LENGTH_EQ_NEQ_CONTRADICTION" | "CONFLICTING_LENGTH" | "BOUNDS_EXCLUDE_LENGTH" | "IMPOSSIBLE_LENGTH_RANGE" | "OUT_OF_PHYSICAL_LENGTH_BOUNDS" | "IMPOSSIBLE_LENGTH_GT" | "IMPOSSIBLE_LENGTH_LT" | "BITMASK_CONTRADICTION" | "BITMASK_ANY_IMPOSSIBLE" | "UNSORTED_IN_SET" | "EMPTY_GROUP" | "DOMINATED_BOUND" | "REDUNDANT_BOUND" | "SET_REDUCTION" | "SET_REDUNDANCY" | "SET_PARTIALLY_EXCLUDED" | "DOMINATED_LENGTH_BOUND" | "REDUNDANT_LENGTH_BOUND" | "REDUNDANT_BITMASK" | "DUPLICATE_CONSTRAINT" | "FUSIBLE_RANGE" | "FUSIBLE_LENGTH_RANGE" | "VACUOUS_GTE" | "VACUOUS_LTE" | "VACUOUS_LENGTH_GTE" | "VACUOUS_LENGTH_LTE" | "VACUOUS_NEGATED_RANGE" | "VACUOUS_NEGATED_LENGTH_RANGE" | "PATH_DEPTH_EXCEEDED" | "QUANTIFIER_OVER_STATIC_LIMIT" | "UNKNOWN_CONTEXT_PROPERTY" | "NEGATION_UNDER_ANY";
|
|
229
236
|
/** A single validation issue found during policy analysis. */
|
|
230
237
|
type Issue = {
|
|
231
238
|
severity: IssueSeverity;
|
|
232
239
|
category: IssueCategory;
|
|
233
240
|
groupIndex: number;
|
|
234
241
|
constraintIndex: number;
|
|
235
|
-
code:
|
|
242
|
+
code: IssueCode;
|
|
236
243
|
value1: Hex;
|
|
237
244
|
value2: Hex;
|
|
238
245
|
message: string;
|
|
239
246
|
};
|
|
240
247
|
//#endregion
|
|
241
|
-
//#region src/constraint.d.ts
|
|
242
|
-
/** Accepted scalar value types for operator arguments. */
|
|
243
|
-
type ScalarValue = bigint | number | boolean | string;
|
|
244
|
-
/**
|
|
245
|
-
* Mutable builder that accumulates operators targeting a single path.
|
|
246
|
-
* Implements the `Constraint` interface so it can be passed directly to policy builders.
|
|
247
|
-
*/
|
|
248
|
-
declare class ConstraintBuilder implements Constraint {
|
|
249
|
-
readonly scope: number;
|
|
250
|
-
readonly path: Hex;
|
|
251
|
-
readonly operators: Hex[];
|
|
252
|
-
/** @internal */
|
|
253
|
-
constructor(scope: number, path: Hex);
|
|
254
|
-
/** Push a pre-encoded operator hex string and return this for chaining. */
|
|
255
|
-
private push;
|
|
256
|
-
/** Assert the value equals `value`. */
|
|
257
|
-
eq(value: ScalarValue): this;
|
|
258
|
-
/** Assert the value does not equal `value`. */
|
|
259
|
-
neq(value: ScalarValue): this;
|
|
260
|
-
/** Assert the value equals the context property `contextPropertyId`. */
|
|
261
|
-
eqCtx(contextPropertyId: number): this;
|
|
262
|
-
/** Assert the value does not equal the context property `contextPropertyId`. */
|
|
263
|
-
neqCtx(contextPropertyId: number): this;
|
|
264
|
-
/** Assert the value is greater than `bound`. */
|
|
265
|
-
gt(bound: bigint | number): this;
|
|
266
|
-
/** Assert the value is less than `bound`. */
|
|
267
|
-
lt(bound: bigint | number): this;
|
|
268
|
-
/** Assert the value is greater than or equal to `bound`. */
|
|
269
|
-
gte(bound: bigint | number): this;
|
|
270
|
-
/** Assert the value is less than or equal to `bound`. */
|
|
271
|
-
lte(bound: bigint | number): this;
|
|
272
|
-
/**
|
|
273
|
-
* Assert the value is within [min, max] inclusive.
|
|
274
|
-
* @throws {CallciumError} If min > max.
|
|
275
|
-
*/
|
|
276
|
-
between(min: bigint | number, max: bigint | number): this;
|
|
277
|
-
/**
|
|
278
|
-
* Assert the value is a member of the set.
|
|
279
|
-
* Values are sorted and deduplicated before encoding.
|
|
280
|
-
* @throws {CallciumError} If the set is empty after deduplication.
|
|
281
|
-
*/
|
|
282
|
-
isIn(values: readonly ScalarValue[]): this;
|
|
283
|
-
/**
|
|
284
|
-
* Assert the value is not a member of the set.
|
|
285
|
-
* @throws {CallciumError} If the set is empty after deduplication.
|
|
286
|
-
*/
|
|
287
|
-
notIn(values: readonly ScalarValue[]): this;
|
|
288
|
-
/** Assert all bits in `mask` are set. */
|
|
289
|
-
bitmaskAll(mask: bigint): this;
|
|
290
|
-
/** Assert at least one bit in `mask` is set. */
|
|
291
|
-
bitmaskAny(mask: bigint): this;
|
|
292
|
-
/** Assert no bit in `mask` is set. */
|
|
293
|
-
bitmaskNone(mask: bigint): this;
|
|
294
|
-
/** Assert the runtime length equals `n`. */
|
|
295
|
-
lengthEq(n: bigint | number): this;
|
|
296
|
-
/** Assert the runtime length is greater than `n`. */
|
|
297
|
-
lengthGt(n: bigint | number): this;
|
|
298
|
-
/** Assert the runtime length is less than `n`. */
|
|
299
|
-
lengthLt(n: bigint | number): this;
|
|
300
|
-
/** Assert the runtime length is greater than or equal to `n`. */
|
|
301
|
-
lengthGte(n: bigint | number): this;
|
|
302
|
-
/** Assert the runtime length is less than or equal to `n`. */
|
|
303
|
-
lengthLte(n: bigint | number): this;
|
|
304
|
-
/**
|
|
305
|
-
* Assert the runtime length is within [min, max] inclusive.
|
|
306
|
-
* @throws {CallciumError} If min > max.
|
|
307
|
-
*/
|
|
308
|
-
lengthBetween(min: bigint | number, max: bigint | number): this;
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Target a calldata argument by path.
|
|
312
|
-
* Each argument is a big-endian uint16 step; multiple steps navigate into nested types.
|
|
313
|
-
*/
|
|
314
|
-
declare function arg(p0: number, ...rest: number[]): ConstraintBuilder;
|
|
315
|
-
/** Target the `msg.sender` context property. */
|
|
316
|
-
declare function msgSender(): ConstraintBuilder;
|
|
317
|
-
/** Target the `msg.value` context property. */
|
|
318
|
-
declare function msgValue(): ConstraintBuilder;
|
|
319
|
-
/** Target the `block.timestamp` context property. */
|
|
320
|
-
declare function blockTimestamp(): ConstraintBuilder;
|
|
321
|
-
/** Target the `block.number` context property. */
|
|
322
|
-
declare function blockNumber(): ConstraintBuilder;
|
|
323
|
-
/** Target the `block.chainid` context property. */
|
|
324
|
-
declare function chainId(): ConstraintBuilder;
|
|
325
|
-
/** Target the `tx.origin` context property. */
|
|
326
|
-
declare function txOrigin(): ConstraintBuilder;
|
|
327
|
-
/** Target the `block.basefee` context property. */
|
|
328
|
-
declare function baseFee(): ConstraintBuilder;
|
|
329
|
-
/** Target the `tx.gasprice` context property. */
|
|
330
|
-
declare function gasPrice(): ConstraintBuilder;
|
|
331
|
-
//#endregion
|
|
332
248
|
//#region src/policy-builder.d.ts
|
|
333
249
|
/** Fluent builder for constructing Callcium policies. */
|
|
334
250
|
declare class PolicyBuilder {
|
|
@@ -347,8 +263,11 @@ declare class PolicyBuilder {
|
|
|
347
263
|
/**
|
|
348
264
|
* Add a constraint to the current group.
|
|
349
265
|
* @param constraint - A `Constraint` object or a `ConstraintBuilder` instance.
|
|
266
|
+
* @throws {CallciumError} With code `OUT_OF_PHYSICAL_BOUNDS` when a numeric operand lies outside
|
|
267
|
+
* the target type's range and encodes as a value inside it. Operands are read as written, so a
|
|
268
|
+
* `Constraint` carrying encoded operator bytes is left to {@link validate}.
|
|
350
269
|
*/
|
|
351
|
-
add(constraint: Constraint
|
|
270
|
+
add(constraint: Constraint): this;
|
|
352
271
|
/** Start a new constraint group (OR branch). */
|
|
353
272
|
or(): this;
|
|
354
273
|
/**
|
|
@@ -358,6 +277,8 @@ declare class PolicyBuilder {
|
|
|
358
277
|
* @returns The policy as a 0x-prefixed hex string.
|
|
359
278
|
* @throws {CallciumError} If any group is empty.
|
|
360
279
|
* @throws {ValidationError} If validation finds any issue.
|
|
280
|
+
* @throws {CallciumError} With code `RULE_SIZE_OVERFLOW` when a rule's encoded bytes exceed the
|
|
281
|
+
* width of the rule size field.
|
|
361
282
|
*/
|
|
362
283
|
build(): Hex;
|
|
363
284
|
/**
|
|
@@ -380,12 +301,6 @@ declare class PolicyBuilder {
|
|
|
380
301
|
}
|
|
381
302
|
//#endregion
|
|
382
303
|
//#region src/policy-coder.d.ts
|
|
383
|
-
/**
|
|
384
|
-
* Parse a BE16-encoded hex path into an array of step values.
|
|
385
|
-
* @param path - 0x-prefixed hex string containing BE16-encoded path steps.
|
|
386
|
-
* @returns Array of numeric step values.
|
|
387
|
-
*/
|
|
388
|
-
declare function parsePathSteps(path: Hex): number[];
|
|
389
304
|
/**
|
|
390
305
|
* Encode a PolicyData structure into the canonical binary format.
|
|
391
306
|
* @param data - The policy data to encode.
|
|
@@ -413,6 +328,32 @@ declare const PolicyCoder: {
|
|
|
413
328
|
inspect: typeof inspect$1;
|
|
414
329
|
};
|
|
415
330
|
//#endregion
|
|
331
|
+
//#region src/path.d.ts
|
|
332
|
+
/** Reserved path step values that trigger quantified evaluation over array elements. */
|
|
333
|
+
declare const Quantifier: {
|
|
334
|
+
readonly ALL: 65535;
|
|
335
|
+
readonly ANY: 65534;
|
|
336
|
+
};
|
|
337
|
+
/** Display metadata for a quantifier step. */
|
|
338
|
+
type QuantifierInfo = {
|
|
339
|
+
label: string;
|
|
340
|
+
};
|
|
341
|
+
/** Check whether a path step is a quantifier (ALL or ANY). */
|
|
342
|
+
declare function isQuantifier(step: number): boolean;
|
|
343
|
+
/**
|
|
344
|
+
* Map a quantifier path step to its display label.
|
|
345
|
+
* @param code - Quantifier step value.
|
|
346
|
+
* @returns Display metadata for the quantifier.
|
|
347
|
+
* @throws {CallciumError} If the code is not a recognised quantifier.
|
|
348
|
+
*/
|
|
349
|
+
declare function lookupQuantifier(code: number): QuantifierInfo;
|
|
350
|
+
/**
|
|
351
|
+
* Parse a BE16-encoded hex path into an array of step values.
|
|
352
|
+
* @param path - 0x-prefixed hex string containing BE16-encoded path steps.
|
|
353
|
+
* @returns Array of numeric step values.
|
|
354
|
+
*/
|
|
355
|
+
declare function parsePathSteps(path: Hex): number[];
|
|
356
|
+
//#endregion
|
|
416
357
|
//#region src/descriptor.d.ts
|
|
417
358
|
/** Structural type information extracted from a descriptor node. */
|
|
418
359
|
type TypeInfo = {
|
|
@@ -422,8 +363,7 @@ type TypeInfo = {
|
|
|
422
363
|
};
|
|
423
364
|
/**
|
|
424
365
|
* Return the byte length of the node at `offset`.
|
|
425
|
-
*
|
|
426
|
-
* length in the lower 12 bits of the 24-bit meta field.
|
|
366
|
+
* @throws {CallciumError} When the descriptor holds no readable node at `offset`.
|
|
427
367
|
*/
|
|
428
368
|
declare function nodeLength(desc: Uint8Array, offset: number): number;
|
|
429
369
|
/**
|
|
@@ -431,7 +371,10 @@ declare function nodeLength(desc: Uint8Array, offset: number): number;
|
|
|
431
371
|
* Starts at the first field and skips `fieldIndex` nodes using `nodeLength`.
|
|
432
372
|
*/
|
|
433
373
|
declare function tupleFieldOffset(desc: Uint8Array, tupleOffset: number, fieldIndex: number): number;
|
|
434
|
-
/**
|
|
374
|
+
/**
|
|
375
|
+
* Return the declared top-level parameter count.
|
|
376
|
+
* @throws {CallciumError} When the descriptor is too short to hold a header.
|
|
377
|
+
*/
|
|
435
378
|
declare function paramCount(desc: Uint8Array): number;
|
|
436
379
|
/** Return byte offset of the N-th top-level param (0-indexed). */
|
|
437
380
|
declare function paramOffset(desc: Uint8Array, index: number): number;
|
|
@@ -440,6 +383,7 @@ declare function paramOffset(desc: Uint8Array, index: number): number;
|
|
|
440
383
|
* @param desc - Raw descriptor bytes.
|
|
441
384
|
* @param offset - Byte position of the node.
|
|
442
385
|
* @returns typeCode, isDynamic, and staticSize in bytes.
|
|
386
|
+
* @throws {CallciumError} When the descriptor holds no readable node at `offset`.
|
|
443
387
|
*/
|
|
444
388
|
declare function inspect(desc: Uint8Array, offset: number): TypeInfo;
|
|
445
389
|
/**
|
|
@@ -522,6 +466,9 @@ declare function isOpAllowed(opCode: number, typeInfo: TypeInfo): boolean;
|
|
|
522
466
|
* @returns All validation issues found, ordered by group and constraint index.
|
|
523
467
|
* @throws {CallciumError} If the descriptor is not well-formed; semantic validation is
|
|
524
468
|
* defined only over a well-formed descriptor.
|
|
469
|
+
* @throws {CallciumError} With code `EMPTY_PATH` when a constraint carries no path step, and
|
|
470
|
+
* `INVALID_HEX` or `INVALID_OPERATOR_BYTES` when an operator is not a readable encoding. Analysis
|
|
471
|
+
* is defined over canonical data, so these reject the input rather than report an issue on it.
|
|
525
472
|
*/
|
|
526
473
|
declare function validate(data: PolicyData): Issue[];
|
|
527
474
|
/** Semantic validation for policies. */
|
|
@@ -529,6 +476,115 @@ declare const PolicyValidator: {
|
|
|
529
476
|
validate: typeof validate;
|
|
530
477
|
};
|
|
531
478
|
//#endregion
|
|
479
|
+
//#region src/constraint.d.ts
|
|
480
|
+
/** Accepted scalar value types for operator arguments. */
|
|
481
|
+
type ScalarValue = bigint | boolean | string;
|
|
482
|
+
/**
|
|
483
|
+
* Extremes of the numeric operands a builder's value operators received, as written. Encoding folds
|
|
484
|
+
* a negative operand onto its unsigned alias, so the sign survives nowhere else.
|
|
485
|
+
*/
|
|
486
|
+
type OperandExtremes = {
|
|
487
|
+
/** Most negative operand written, or zero when none was negative. */leastNegative: bigint; /** Greatest operand written, or zero when none exceeded it. */
|
|
488
|
+
greatest: bigint;
|
|
489
|
+
};
|
|
490
|
+
/**
|
|
491
|
+
* Mutable builder that accumulates operators targeting a single path.
|
|
492
|
+
* Implements the `Constraint` interface so it can be passed directly to policy builders.
|
|
493
|
+
*/
|
|
494
|
+
declare class ConstraintBuilder<Operand extends ScalarValue = ScalarValue> implements Constraint {
|
|
495
|
+
readonly scope: number;
|
|
496
|
+
readonly path: Hex;
|
|
497
|
+
readonly operators: Hex[];
|
|
498
|
+
/**
|
|
499
|
+
* Extremes of the numeric operands the value operators received, as written. Only the extremes
|
|
500
|
+
* can offend: an operand folds into a target's range from below it or from above it, and
|
|
501
|
+
* whichever reaches furthest arrives first. Read it through {@link readOperandExtremes}.
|
|
502
|
+
* @internal
|
|
503
|
+
*/
|
|
504
|
+
readonly operandExtremes: OperandExtremes;
|
|
505
|
+
/** @internal */
|
|
506
|
+
constructor(scope: number, path: Hex);
|
|
507
|
+
/**
|
|
508
|
+
* Push a pre-encoded operator hex string and return this for chaining.
|
|
509
|
+
* `values` are the operands as written; the numeric ones join the record.
|
|
510
|
+
*/
|
|
511
|
+
private push;
|
|
512
|
+
/** Assert the value equals `value`. */
|
|
513
|
+
eq(value: Operand): this;
|
|
514
|
+
/** Assert the value does not equal `value`. */
|
|
515
|
+
neq(value: Operand): this;
|
|
516
|
+
/** Assert the value equals the context property `contextPropertyId`. */
|
|
517
|
+
eqCtx(contextPropertyId: number): this;
|
|
518
|
+
/** Assert the value does not equal the context property `contextPropertyId`. */
|
|
519
|
+
neqCtx(contextPropertyId: number): this;
|
|
520
|
+
/** Assert the value is greater than `bound`. */
|
|
521
|
+
gt(bound: bigint): this;
|
|
522
|
+
/** Assert the value is less than `bound`. */
|
|
523
|
+
lt(bound: bigint): this;
|
|
524
|
+
/** Assert the value is greater than or equal to `bound`. */
|
|
525
|
+
gte(bound: bigint): this;
|
|
526
|
+
/** Assert the value is less than or equal to `bound`. */
|
|
527
|
+
lte(bound: bigint): this;
|
|
528
|
+
/**
|
|
529
|
+
* Assert the value is within [min, max] inclusive.
|
|
530
|
+
* @throws {CallciumError} If min > max.
|
|
531
|
+
*/
|
|
532
|
+
between(min: bigint, max: bigint): this;
|
|
533
|
+
/**
|
|
534
|
+
* Assert the value is a member of the set.
|
|
535
|
+
* Values are sorted and deduplicated before encoding.
|
|
536
|
+
* @throws {CallciumError} If the set is empty after deduplication.
|
|
537
|
+
*/
|
|
538
|
+
isIn(values: readonly Operand[]): this;
|
|
539
|
+
/**
|
|
540
|
+
* Assert the value is not a member of the set.
|
|
541
|
+
* @throws {CallciumError} If the set is empty after deduplication.
|
|
542
|
+
*/
|
|
543
|
+
notIn(values: readonly Operand[]): this;
|
|
544
|
+
/** Assert all bits in `mask` are set. */
|
|
545
|
+
bitmaskAll(mask: bigint): this;
|
|
546
|
+
/** Assert at least one bit in `mask` is set. */
|
|
547
|
+
bitmaskAny(mask: bigint): this;
|
|
548
|
+
/** Assert no bit in `mask` is set. */
|
|
549
|
+
bitmaskNone(mask: bigint): this;
|
|
550
|
+
/** Assert the runtime length equals `length`. */
|
|
551
|
+
lengthEq(length: bigint): this;
|
|
552
|
+
/** Assert the runtime length is greater than `length`. */
|
|
553
|
+
lengthGt(length: bigint): this;
|
|
554
|
+
/** Assert the runtime length is less than `length`. */
|
|
555
|
+
lengthLt(length: bigint): this;
|
|
556
|
+
/** Assert the runtime length is greater than or equal to `length`. */
|
|
557
|
+
lengthGte(length: bigint): this;
|
|
558
|
+
/** Assert the runtime length is less than or equal to `length`. */
|
|
559
|
+
lengthLte(length: bigint): this;
|
|
560
|
+
/**
|
|
561
|
+
* Assert the runtime length is within [min, max] inclusive.
|
|
562
|
+
* @throws {CallciumError} If min > max.
|
|
563
|
+
*/
|
|
564
|
+
lengthBetween(min: bigint, max: bigint): this;
|
|
565
|
+
}
|
|
566
|
+
/**
|
|
567
|
+
* Target a calldata argument by path.
|
|
568
|
+
* Each argument is a big-endian uint16 step; multiple steps navigate into nested types.
|
|
569
|
+
*/
|
|
570
|
+
declare function arg(p0: number, ...rest: number[]): ConstraintBuilder;
|
|
571
|
+
/** Target the `msg.sender` context property. */
|
|
572
|
+
declare function msgSender(): ConstraintBuilder<Address>;
|
|
573
|
+
/** Target the `msg.value` context property. */
|
|
574
|
+
declare function msgValue(): ConstraintBuilder<bigint>;
|
|
575
|
+
/** Target the `block.timestamp` context property. */
|
|
576
|
+
declare function blockTimestamp(): ConstraintBuilder<bigint>;
|
|
577
|
+
/** Target the `block.number` context property. */
|
|
578
|
+
declare function blockNumber(): ConstraintBuilder<bigint>;
|
|
579
|
+
/** Target the `block.chainid` context property. */
|
|
580
|
+
declare function chainId(): ConstraintBuilder<bigint>;
|
|
581
|
+
/** Target the `tx.origin` context property. */
|
|
582
|
+
declare function txOrigin(): ConstraintBuilder<Address>;
|
|
583
|
+
/** Target the `block.basefee` context property. */
|
|
584
|
+
declare function baseFee(): ConstraintBuilder<bigint>;
|
|
585
|
+
/** Target the `tx.gasprice` context property. */
|
|
586
|
+
declare function gasPrice(): ConstraintBuilder<bigint>;
|
|
587
|
+
//#endregion
|
|
532
588
|
//#region src/policy-enforcer.d.ts
|
|
533
589
|
/**
|
|
534
590
|
* Check a policy against ABI-encoded call data without throwing on violations.
|
|
@@ -536,7 +592,8 @@ declare const PolicyValidator: {
|
|
|
536
592
|
* @param callData - ABI-encoded call data as 0x-prefixed hex string.
|
|
537
593
|
* @param context - Optional execution context for context-scoped rules.
|
|
538
594
|
* @returns Pass with matched group index, or fail with one violation per evaluated failing group.
|
|
539
|
-
* @throws {CallciumError} If the policy blob is structurally malformed
|
|
595
|
+
* @throws {CallciumError} If the policy blob is structurally malformed, or a context value a rule
|
|
596
|
+
* reads is not an address or an integer a 32-byte word represents.
|
|
540
597
|
*/
|
|
541
598
|
declare function check(policy: Hex, callData: Hex, context?: Context): EnforceResult;
|
|
542
599
|
/**
|
|
@@ -545,7 +602,8 @@ declare function check(policy: Hex, callData: Hex, context?: Context): EnforceRe
|
|
|
545
602
|
* @param callData - ABI-encoded call data as 0x-prefixed hex string.
|
|
546
603
|
* @param context - Optional execution context for context-scoped rules.
|
|
547
604
|
* @throws {PolicyViolationError} If the policy rejects the call data.
|
|
548
|
-
* @throws {CallciumError} If the policy blob is structurally malformed
|
|
605
|
+
* @throws {CallciumError} If the policy blob is structurally malformed, or a context value a rule
|
|
606
|
+
* reads is not an address or an integer a 32-byte word represents.
|
|
549
607
|
*/
|
|
550
608
|
declare function enforce(policy: Hex, callData: Hex, context?: Context): void;
|
|
551
609
|
/** Check and enforce policies against ABI-encoded call data. */
|
|
@@ -570,6 +628,7 @@ declare function toAddress(hex: string): Address;
|
|
|
570
628
|
* @returns Binary descriptor bytes starting with the version+paramCount header.
|
|
571
629
|
* @throws {CallciumError} With code `MALFORMED_TYPE_STRING` for malformed input.
|
|
572
630
|
* @throws {CallciumError} With code `UNKNOWN_TYPE` for unrecognised type names.
|
|
631
|
+
* @throws {CallciumError} With code `NESTING_TOO_DEEP` when composite nesting exceeds `MAX_NESTING_DEPTH`.
|
|
573
632
|
*/
|
|
574
633
|
declare function fromTypes(typesCsv: string): Uint8Array;
|
|
575
634
|
/**
|
|
@@ -589,7 +648,7 @@ declare const DescriptorCoder: {
|
|
|
589
648
|
};
|
|
590
649
|
//#endregion
|
|
591
650
|
//#region src/constants.d.ts
|
|
592
|
-
/** Binary layout constants for the Callcium policy format. */
|
|
651
|
+
/** Binary layout constants and normative limits for the Callcium policy format. */
|
|
593
652
|
declare const PolicyFormat: {
|
|
594
653
|
readonly VERSION: 2;
|
|
595
654
|
readonly VERSION_MASK: 15;
|
|
@@ -610,10 +669,11 @@ declare const PolicyFormat: {
|
|
|
610
669
|
readonly RULE_DEPTH_OFFSET: 3;
|
|
611
670
|
readonly RULE_PATH_OFFSET: 4;
|
|
612
671
|
readonly PATH_STEP_SIZE: 2;
|
|
672
|
+
readonly PATH_STEP_MAX: number;
|
|
613
673
|
readonly RULE_OPCODE_SIZE: 1;
|
|
614
674
|
readonly RULE_DATALENGTH_SIZE: 2;
|
|
615
675
|
readonly RULE_FIXED_OVERHEAD: 7;
|
|
616
|
-
readonly RULE_MIN_SIZE:
|
|
676
|
+
readonly RULE_MIN_SIZE: number;
|
|
617
677
|
readonly HINT_HEADER_SIZE: 1;
|
|
618
678
|
readonly HINT_HOP_SIZE: 8;
|
|
619
679
|
readonly HINT_HOP_INDEX_OFFSET: 4;
|
|
@@ -637,6 +697,9 @@ declare const PolicyFormat: {
|
|
|
637
697
|
readonly HINT_META_DYNAMIC_ARRAY: 16384;
|
|
638
698
|
readonly HINT_META_RESERVED_MASK: 12288;
|
|
639
699
|
readonly HINT_META_STRIDE_MASK: 4095;
|
|
700
|
+
readonly MAX_PATH_DEPTH: 32;
|
|
701
|
+
readonly MAX_QUANTIFIED_ARRAY_LENGTH: 256;
|
|
702
|
+
readonly MAX_SET_MEMBERS: number;
|
|
640
703
|
};
|
|
641
704
|
/**
|
|
642
705
|
* Extract a `{ KEY: code }` map from a table with `key` and `code` fields.
|
|
@@ -646,6 +709,12 @@ type CodeMap<T extends readonly {
|
|
|
646
709
|
readonly key: string;
|
|
647
710
|
readonly code: number;
|
|
648
711
|
}[]> = { readonly [E in T[number] as E["key"]]: E["code"] };
|
|
712
|
+
/**
|
|
713
|
+
* Render a wire code as fixed-width hex.
|
|
714
|
+
* @param code - Code value.
|
|
715
|
+
* @param byteWidth - Byte width of the field the code occupies.
|
|
716
|
+
* @returns The code as `0x`-prefixed hex, or its decimal form when no such field holds it.
|
|
717
|
+
*/
|
|
649
718
|
/** Rule scope discriminant: context (EVM environment) vs. calldata (ABI payload). */
|
|
650
719
|
declare const Scope: CodeMap<readonly [{
|
|
651
720
|
readonly key: "CONTEXT";
|
|
@@ -689,41 +758,49 @@ declare const ContextProperty: CodeMap<readonly [{
|
|
|
689
758
|
readonly key: "MSG_SENDER";
|
|
690
759
|
readonly code: 0;
|
|
691
760
|
readonly label: "msg.sender";
|
|
761
|
+
readonly contextKey: "msgSender";
|
|
692
762
|
readonly typeCode: 65;
|
|
693
763
|
}, {
|
|
694
764
|
readonly key: "MSG_VALUE";
|
|
695
765
|
readonly code: 1;
|
|
696
766
|
readonly label: "msg.value";
|
|
767
|
+
readonly contextKey: "msgValue";
|
|
697
768
|
readonly typeCode: 32;
|
|
698
769
|
}, {
|
|
699
770
|
readonly key: "BLOCK_TIMESTAMP";
|
|
700
771
|
readonly code: 2;
|
|
701
772
|
readonly label: "block.timestamp";
|
|
773
|
+
readonly contextKey: "blockTimestamp";
|
|
702
774
|
readonly typeCode: 32;
|
|
703
775
|
}, {
|
|
704
776
|
readonly key: "BLOCK_NUMBER";
|
|
705
777
|
readonly code: 3;
|
|
706
778
|
readonly label: "block.number";
|
|
779
|
+
readonly contextKey: "blockNumber";
|
|
707
780
|
readonly typeCode: 32;
|
|
708
781
|
}, {
|
|
709
782
|
readonly key: "CHAIN_ID";
|
|
710
783
|
readonly code: 4;
|
|
711
784
|
readonly label: "block.chainid";
|
|
785
|
+
readonly contextKey: "chainId";
|
|
712
786
|
readonly typeCode: 32;
|
|
713
787
|
}, {
|
|
714
788
|
readonly key: "TX_ORIGIN";
|
|
715
789
|
readonly code: 5;
|
|
716
790
|
readonly label: "tx.origin";
|
|
791
|
+
readonly contextKey: "txOrigin";
|
|
717
792
|
readonly typeCode: 65;
|
|
718
793
|
}, {
|
|
719
794
|
readonly key: "BASE_FEE";
|
|
720
795
|
readonly code: 6;
|
|
721
796
|
readonly label: "block.basefee";
|
|
797
|
+
readonly contextKey: "baseFee";
|
|
722
798
|
readonly typeCode: 32;
|
|
723
799
|
}, {
|
|
724
800
|
readonly key: "GAS_PRICE";
|
|
725
801
|
readonly code: 7;
|
|
726
802
|
readonly label: "tx.gasprice";
|
|
803
|
+
readonly contextKey: "gasPrice";
|
|
727
804
|
readonly typeCode: 32;
|
|
728
805
|
}]>;
|
|
729
806
|
/** Maximum valid context property ID. */
|
|
@@ -734,6 +811,12 @@ type ContextPropertyInfo = {
|
|
|
734
811
|
contextKey: keyof Context;
|
|
735
812
|
typeCode: number;
|
|
736
813
|
};
|
|
814
|
+
/**
|
|
815
|
+
* Look up a context property code in the assigned set.
|
|
816
|
+
* @param code - Context property ID.
|
|
817
|
+
* @returns Display metadata, or undefined when the ID names no assigned property.
|
|
818
|
+
*/
|
|
819
|
+
declare function findContextProperty(code: number): ContextPropertyInfo | undefined;
|
|
737
820
|
/**
|
|
738
821
|
* Map a context property code to its display label and ABI type code.
|
|
739
822
|
* @param code - Context property ID.
|
|
@@ -741,12 +824,6 @@ type ContextPropertyInfo = {
|
|
|
741
824
|
* @throws {CallciumError} If the code is not a recognised context property.
|
|
742
825
|
*/
|
|
743
826
|
declare function lookupContextProperty(code: number): ContextPropertyInfo;
|
|
744
|
-
/** Protocol-imposed safety limits for path depth and quantifier array size. */
|
|
745
|
-
declare const Limits: {
|
|
746
|
-
readonly MAX_PATH_DEPTH: 32;
|
|
747
|
-
readonly MAX_QUANTIFIED_ARRAY_LENGTH: 256;
|
|
748
|
-
readonly MAX_SET_MEMBERS: number;
|
|
749
|
-
};
|
|
750
827
|
/** Operand count category for operator data validation. */
|
|
751
828
|
type Operands = "single" | "range" | "variadic";
|
|
752
829
|
/** @internal */
|
|
@@ -852,29 +929,10 @@ type OpInfo = {
|
|
|
852
929
|
* @throws {CallciumError} If the base code is not a recognised operator.
|
|
853
930
|
*/
|
|
854
931
|
declare function lookupOp(code: number): OpInfo;
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
readonly label: "all";
|
|
860
|
-
}, {
|
|
861
|
-
readonly key: "ANY";
|
|
862
|
-
readonly code: 65534;
|
|
863
|
-
readonly label: "any";
|
|
864
|
-
}]>;
|
|
865
|
-
/** Display metadata for a quantifier step. */
|
|
866
|
-
type QuantifierInfo = {
|
|
867
|
-
label: string;
|
|
868
|
-
};
|
|
869
|
-
/** Check whether a path step is a quantifier (ALL or ANY). */
|
|
870
|
-
declare function isQuantifier(step: number): boolean;
|
|
871
|
-
/**
|
|
872
|
-
* Map a quantifier path step to its display label.
|
|
873
|
-
* @param code - Quantifier step value.
|
|
874
|
-
* @returns Display metadata for the quantifier.
|
|
875
|
-
* @throws {CallciumError} If the code is not a recognised quantifier.
|
|
876
|
-
*/
|
|
877
|
-
declare function lookupQuantifier(code: number): QuantifierInfo;
|
|
932
|
+
//#endregion
|
|
933
|
+
//#region src/operators.d.ts
|
|
934
|
+
/** Return true when the operator code (with or without NOT flag) is a LENGTH_* variant. */
|
|
935
|
+
declare function isLengthOp(opCode: number): boolean;
|
|
878
936
|
/** Structural category for a descriptor type code. */
|
|
879
937
|
type TypeClass = "elementary" | "tuple" | "staticArray" | "dynamicArray";
|
|
880
938
|
/** Structural classification without label. */
|
|
@@ -894,18 +952,17 @@ type TypeCodeInfo = TypeClassInfo & {
|
|
|
894
952
|
*/
|
|
895
953
|
declare function lookupTypeCode(code: number): TypeCodeInfo;
|
|
896
954
|
//#endregion
|
|
897
|
-
//#region src/operators.d.ts
|
|
898
|
-
/** Return true when the operator code (with or without NOT flag) is a LENGTH_* variant. */
|
|
899
|
-
declare function isLengthOp(opCode: number): boolean;
|
|
900
|
-
//#endregion
|
|
901
955
|
//#region src/errors.d.ts
|
|
902
956
|
/**
|
|
903
957
|
* Machine-readable error code for structural decoding and validation failures.
|
|
904
958
|
*
|
|
905
|
-
* Each code names one invariant
|
|
906
|
-
*
|
|
959
|
+
* Each code names one invariant. Where Solidity detects the same invariant, the code is its error
|
|
960
|
+
* name transliterated from `PascalCase` to `SCREAMING_SNAKE_CASE`. The codes under "Inputs and
|
|
961
|
+
* validation" have no counterpart: they name input a Solidity signature cannot express.
|
|
962
|
+
* `OUT_OF_PHYSICAL_BOUNDS` names an invariant Solidity carries twice, as the error
|
|
963
|
+
* `PolicyBuilder.OutOfPhysicalBounds` and as an issue code, so the name is shared with `IssueCode`.
|
|
907
964
|
*/
|
|
908
|
-
type CallciumErrorCode = "UNSUPPORTED_VERSION" | "MALFORMED_HEADER" | "UNEXPECTED_END" | "TRAILING_BYTES" | "EMPTY_POLICY" | "EMPTY_GROUP" | "GROUP_TOO_SMALL" | "GROUP_SIZE_MISMATCH" | "GROUP_OVERFLOW" | "RULE_TOO_SMALL" | "RULE_SIZE_MISMATCH" | "RULE_FIELD_OUT_OF_BOUNDS" | "RULE_OVERFLOW" | "EMPTY_PATH" | "MALFORMED_PATH" | "PATH_TOO_DEEP" | "PARAM_INDEX_OUT_OF_BOUNDS" | "TUPLE_FIELD_OUT_OF_BOUNDS" | "STATIC_ARRAY_INDEX_OUT_OF_BOUNDS" | "NOT_COMPOSITE" | "UNCOMPILABLE_PATH" | "QUANTIFIER_ON_NON_ARRAY" | "NESTED_QUANTIFIER" | "INVALID_SCOPE" | "INVALID_CONTEXT_PATH" | "UNKNOWN_CONTEXT_PROPERTY" | "UNKNOWN_OPERATOR" | "INVALID_OPERATOR_BYTES" | "OPERATOR_TARGET_MISMATCH" | "UNSORTED_IN_SET" | "MALFORMED_HINT" | "NO_CONSTRAINT_OPERATORS" | "DUPLICATE_PATH_IN_GROUP" | "EMPTY_SET" | "SET_TOO_LARGE" | "INVALID_RANGE" | "UNKNOWN_TYPE_CODE" | "NODE_LENGTH_TOO_SMALL" | "NODE_LENGTH_TOO_LARGE" | "NODE_OVERFLOW" | "NESTING_TOO_DEEP" | "INVALID_ARRAY_LENGTH" | "INVALID_TUPLE_FIELD_COUNT" | "STATIC_WORDS_TOO_LARGE" | "PARAM_COUNT_MISMATCH" | "TOO_MANY_PARAMS" | "MALFORMED_TYPE_STRING" | "UNKNOWN_TYPE" | "MALFORMED_SIGNATURE" | "SIGNATURE_CONTAINS_WHITESPACE" | "INVALID_FUNCTION_NAME" | "GROUP_COUNT_OVERFLOW" | "RULE_COUNT_OVERFLOW" | "RULE_SIZE_OVERFLOW" | "DESC_LENGTH_OVERFLOW" | "UNKNOWN_QUANTIFIER" | "INVALID_HEX" | "VALIDATION_ERROR";
|
|
965
|
+
type CallciumErrorCode = "UNSUPPORTED_VERSION" | "MALFORMED_HEADER" | "UNEXPECTED_END" | "TRAILING_BYTES" | "EMPTY_POLICY" | "EMPTY_GROUP" | "GROUP_TOO_SMALL" | "GROUP_SIZE_MISMATCH" | "GROUP_OVERFLOW" | "RULE_TOO_SMALL" | "RULE_SIZE_MISMATCH" | "RULE_FIELD_OUT_OF_BOUNDS" | "RULE_OVERFLOW" | "EMPTY_PATH" | "MALFORMED_PATH" | "PATH_TOO_DEEP" | "PARAM_INDEX_OUT_OF_BOUNDS" | "TUPLE_FIELD_OUT_OF_BOUNDS" | "STATIC_ARRAY_INDEX_OUT_OF_BOUNDS" | "NOT_COMPOSITE" | "UNCOMPILABLE_PATH" | "QUANTIFIER_ON_NON_ARRAY" | "NESTED_QUANTIFIER" | "INVALID_SCOPE" | "INVALID_CONTEXT_PATH" | "UNKNOWN_CONTEXT_PROPERTY" | "UNKNOWN_OPERATOR" | "INVALID_OPERATOR_BYTES" | "OPERATOR_TARGET_MISMATCH" | "UNSORTED_IN_SET" | "MALFORMED_HINT" | "NO_CONSTRAINT_OPERATORS" | "DUPLICATE_PATH_IN_GROUP" | "EMPTY_SET" | "SET_TOO_LARGE" | "INVALID_RANGE" | "OUT_OF_PHYSICAL_BOUNDS" | "UNKNOWN_TYPE_CODE" | "NODE_LENGTH_TOO_SMALL" | "NODE_LENGTH_TOO_LARGE" | "NODE_OVERFLOW" | "NESTING_TOO_DEEP" | "INVALID_ARRAY_LENGTH" | "INVALID_TUPLE_FIELD_COUNT" | "STATIC_WORDS_TOO_LARGE" | "PARAM_COUNT_MISMATCH" | "TOO_MANY_PARAMS" | "MALFORMED_TYPE_STRING" | "UNKNOWN_TYPE" | "MALFORMED_SIGNATURE" | "SIGNATURE_CONTAINS_WHITESPACE" | "INVALID_FUNCTION_NAME" | "GROUP_COUNT_OVERFLOW" | "RULE_COUNT_OVERFLOW" | "RULE_SIZE_OVERFLOW" | "DESC_LENGTH_OVERFLOW" | "UNKNOWN_QUANTIFIER" | "INVALID_HEX" | "MALFORMED_SELECTOR" | "PATH_STEP_OVERFLOW" | "OPERAND_OVERFLOW" | "CONTEXT_VALUE_OVERFLOW" | "VALIDATION_ERROR";
|
|
909
966
|
/**
|
|
910
967
|
* Thrown when a policy or descriptor blob is structurally malformed.
|
|
911
968
|
* The optional `offset` indicates the byte position in the source blob where the error was detected.
|
|
@@ -941,5 +998,5 @@ declare class PolicyViolationError extends Error {
|
|
|
941
998
|
constructor(violations: Violation[]);
|
|
942
999
|
}
|
|
943
1000
|
//#endregion
|
|
944
|
-
export { type Address, CallciumError, type CallciumErrorCode, type CalldataNavigationViolation, type Constraint, type ConstraintBuilder, type Context, ContextProperty, type ContextPropertyInfo, type DecodedGroup, type DecodedParam, type DecodedPolicy, type DecodedRule, Descriptor, DescriptorCoder, type EnforceResult, type Field, type Hex, type Issue, type IssueCategory, type
|
|
1001
|
+
export { type Address, CallciumError, type CallciumErrorCode, type CalldataNavigationViolation, type Constraint, type ConstraintBuilder, type Context, ContextProperty, type ContextPropertyInfo, type DecodedGroup, type DecodedParam, type DecodedPolicy, type DecodedRule, Descriptor, DescriptorCoder, type EnforceResult, type Field, type Hex, type Issue, type IssueCategory, type IssueCode, type IssueSeverity, MAX_CONTEXT_PROPERTY_ID, type MissingContextViolation, type MissingSelectorViolation, type NavigationViolationCode, type NonCanonicalValueViolation, Op, type OpInfo, type Operands, PolicyBuilder, PolicyCoder, type PolicyData, PolicyEnforcer, PolicyFormat, PolicyValidator, PolicyViolationError, Quantifier, type QuantifierEmptyArrayViolation, type QuantifierInfo, type QuantifierLimitExceededViolation, type ScalarValue, Scope, type ScopeInfo, type SelectorMismatchViolation, type Span, type TypeClass, type TypeClassInfo, TypeCode, type TypeCodeInfo, type TypeInfo, ValidationError, type ValueMismatchViolation, type Violation, type ViolationCode, arg, baseFee, blockNumber, blockTimestamp, bytesToHex, chainId, findContextProperty, gasPrice, hexToBytes, isLengthOp, isOpAllowed, isQuantifier, lookupContextProperty, lookupOp, lookupQuantifier, lookupScope, lookupTypeCode, msgSender, msgValue, parsePathSteps, toAddress, txOrigin };
|
|
945
1002
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/policy-builder.ts","../src/policy-coder.ts","../src/path.ts","../src/descriptor.ts","../src/policy-validator.ts","../src/constraint.ts","../src/policy-enforcer.ts","../src/bytes.ts","../src/descriptor-coder.ts","../src/constants.ts","../src/operators.ts","../src/errors.ts"],"mappings":"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"}
|