js-randomness-predictor
Version:
Predict Math.random output in Node, Deno, Bun, Chrome, Firefox, and Safari
47 lines (46 loc) • 2.01 kB
TypeScript
import { BitVec, Solver, Context, Z3HighLevel, Z3LowLevel } from "z3-solver-jsrp";
import { RUNTIMES, JAVASCRIPT_ENGINES, SERVER_RUNTIMES, BROWSER_RUNTIMES } from "./constants.js";
/*********************************************************************************************************
* INTERFACES
*********************************************************************************************************/
export interface Predictor {
sequence: number[];
predictNext(): Promise<number>;
}
export interface CliArgs {
environment: Runtime;
sequence?: number[];
predictions?: number;
export?: string;
force?: boolean;
}
/*********************************************************************************************************
* TYPES
*********************************************************************************************************/
export type Z3Api = Z3HighLevel & Z3LowLevel;
export type Runtime = (typeof RUNTIMES)[number];
export type Engine = (typeof JAVASCRIPT_ENGINES)[number];
export type ServerRuntime = (typeof SERVER_RUNTIMES)[number];
export type BrowserRuntime = (typeof BROWSER_RUNTIMES)[number];
export type Pair<T> = [T, T];
export type SymbolicXorShiftFn = (symbolicState: Pair<BitVec>) => void;
export type ConcreteXorShiftFn = (concreteState: Pair<bigint>) => void;
export type RecoverMantissaFn = (n: number) => bigint;
export type ConstrainMantissaFn = (mantissa: bigint, symbolicState: Pair<BitVec>, solver: Solver, context: Context) => void;
export type ToDoubleFn = (concreteState: Pair<bigint>) => number;
export type CliResult = {
sequence: number[];
predictions: number[];
actual: string | number[];
isCorrect?: boolean;
runtime: Runtime;
_warnings?: string[];
_info?: string[];
};
export type SolvingStrategy = {
recoverMantissa: RecoverMantissaFn;
constrainMantissa: ConstrainMantissaFn;
toDouble: ToDoubleFn;
symbolicXorShift: SymbolicXorShiftFn;
concreteXorShift: ConcreteXorShiftFn;
};