{"version":3,"sources":["../src/index.ts","../src/BezierMouse.ts","../src/utils.ts"],"sourcesContent":["export { BezierMouse } from \"./BezierMouse.js\";\nexport { BezierMouse as default } from \"./BezierMouse.js\";\nexport type { Point, BezierMouseOptions, ClickType } from \"./types.js\";\nexport { default as utils } from \"./utils.js\";\n","import { Bezier } from \"bezier-js\";\nimport utils from \"./utils.js\";\nimport type { Point, BezierMouseOptions, ClickType } from \"./types.js\";\n\nconst { abs, ceil } = Math;\n\ntype NutJsModule = typeof import(\"@nut-tree/nut-js\");\n\nexport class BezierMouse {\n  private mouseSpeed: number;\n  private nutJsModule: NutJsModule | null = null;\n\n  constructor(mouseSpeed: number = 100) {\n    this.mouseSpeed = mouseSpeed;\n  }\n\n  private async getNutJs(): Promise<NutJsModule> {\n    if (!this.nutJsModule) {\n      try {\n        this.nutJsModule = await import(\"@nut-tree/nut-js\");\n        this.nutJsModule.mouse.config.mouseSpeed = this.mouseSpeed;\n      } catch {\n        throw new Error(\n          \"bezier-mouse-js: @nut-tree/nut-js is required for mouse control methods. \" +\n            \"Install it with: npm install @nut-tree/nut-js\"\n        );\n      }\n    }\n    return this.nutJsModule;\n  }\n\n  async moveAndClick(\n    initPos: Point,\n    finPos: Point,\n    clickType: ClickType = \"LEFT\",\n    opts: BezierMouseOptions = {}\n  ): Promise<void> {\n    const nut = await this.getNutJs();\n    await this.move(initPos, finPos, opts);\n    await nut.mouse.click(nut.Button[clickType]);\n  }\n\n  async moveAndDoubleClick(\n    initPos: Point,\n    finPos: Point,\n    clickType: ClickType = \"LEFT\",\n    opts: BezierMouseOptions = {}\n  ): Promise<void> {\n    const nut = await this.getNutJs();\n    await this.move(initPos, finPos, opts);\n    await nut.mouse.doubleClick(nut.Button[clickType]);\n  }\n\n  async move(\n    initPos: Point,\n    finPos: Point,\n    opts: BezierMouseOptions = {}\n  ): Promise<void> {\n    const nut = await this.getNutJs();\n    let finishPosition = finPos;\n    if (!opts.preciseClick) {\n      const deviation = 5;\n      const randDeviation = () => utils.randint(deviation / 2, deviation);\n      const region = new nut.Region(\n        finPos.x,\n        finPos.y,\n        randDeviation(),\n        randDeviation()\n      );\n      finishPosition = await nut.randomPointIn(region);\n    }\n    const path = this.bezierCurveTo(initPos, finishPosition, opts);\n    const nutPoints = path.map((p) => new nut.Point(p.x, p.y));\n    await nut.mouse.move(nutPoints);\n  }\n\n  bezierCurveTo(\n    initPos: Point,\n    finPos: Point,\n    opts: BezierMouseOptions = {}\n  ): Point[] {\n    const curve = this.cubicBezierCurve(initPos, finPos, opts);\n    const LUT = curve.getLUT(opts.steps || 100);\n    return LUT.map((point) => ({ x: point.x, y: point.y }));\n  }\n\n  cubicBezierCurve(\n    initPos: Point,\n    finPos: Point,\n    opts: BezierMouseOptions = {}\n  ): Bezier {\n    const cntlPt1 = this.getBezierControlPoint(initPos, finPos, opts);\n    const cntlPt2 = this.getBezierControlPoint(initPos, finPos, opts);\n    return new Bezier([initPos, cntlPt1, cntlPt2, finPos]);\n  }\n\n  getBezierControlPoint(\n    initPos: Point,\n    finPos: Point,\n    opts: BezierMouseOptions = {}\n  ): Point {\n    const { deviation = 20, flip = false } = opts;\n    const deltaX = abs(ceil(finPos.x) - ceil(initPos.x));\n    const deltaY = abs(ceil(finPos.y) - ceil(initPos.y));\n    const randDeviation = () => utils.randint(deviation / 2, deviation);\n    const refPointX = flip ? initPos.x : finPos.x;\n    const refPointY = flip ? initPos.y : finPos.y;\n    return {\n      x: refPointX + utils.choice([-1, 1]) * deltaX * 0.01 * randDeviation(),\n      y: refPointY + utils.choice([-1, 1]) * deltaY * 0.01 * randDeviation(),\n    };\n  }\n}\n","const { floor, random } = Math;\n\nfunction choice<T>(items: T[]): T {\n  return items[floor(random() * items.length)];\n}\n\nfunction randint(min: number, max: number): number {\n  return floor(random() * (max - min + 1)) + min;\n}\n\nconst utils = { choice, randint };\nexport default utils;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,uBAAuB;;;ACAvB,IAAM,EAAE,OAAO,OAAO,IAAI;AAE1B,SAAS,OAAU,OAAe;AAChC,SAAO,MAAM,MAAM,OAAO,IAAI,MAAM,MAAM,CAAC;AAC7C;AAEA,SAAS,QAAQ,KAAa,KAAqB;AACjD,SAAO,MAAM,OAAO,KAAK,MAAM,MAAM,EAAE,IAAI;AAC7C;AAEA,IAAM,QAAQ,EAAE,QAAQ,QAAQ;AAChC,IAAO,gBAAQ;;;ADPf,IAAM,EAAE,KAAK,KAAK,IAAI;AAIf,IAAM,cAAN,MAAkB;AAAA,EAIvB,YAAY,aAAqB,KAAK;AAFtC,SAAQ,cAAkC;AAGxC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,MAAc,WAAiC;AAC7C,QAAI,CAAC,KAAK,aAAa;AACrB,UAAI;AACF,aAAK,cAAc,MAAM,OAAO,kBAAkB;AAClD,aAAK,YAAY,MAAM,OAAO,aAAa,KAAK;AAAA,MAClD,QAAQ;AACN,cAAM,IAAI;AAAA,UACR;AAAA,QAEF;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,aACJ,SACA,QACA,YAAuB,QACvB,OAA2B,CAAC,GACb;AACf,UAAM,MAAM,MAAM,KAAK,SAAS;AAChC,UAAM,KAAK,KAAK,SAAS,QAAQ,IAAI;AACrC,UAAM,IAAI,MAAM,MAAM,IAAI,OAAO,SAAS,CAAC;AAAA,EAC7C;AAAA,EAEA,MAAM,mBACJ,SACA,QACA,YAAuB,QACvB,OAA2B,CAAC,GACb;AACf,UAAM,MAAM,MAAM,KAAK,SAAS;AAChC,UAAM,KAAK,KAAK,SAAS,QAAQ,IAAI;AACrC,UAAM,IAAI,MAAM,YAAY,IAAI,OAAO,SAAS,CAAC;AAAA,EACnD;AAAA,EAEA,MAAM,KACJ,SACA,QACA,OAA2B,CAAC,GACb;AACf,UAAM,MAAM,MAAM,KAAK,SAAS;AAChC,QAAI,iBAAiB;AACrB,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,YAAY;AAClB,YAAM,gBAAgB,MAAM,cAAM,QAAQ,YAAY,GAAG,SAAS;AAClE,YAAM,SAAS,IAAI,IAAI;AAAA,QACrB,OAAO;AAAA,QACP,OAAO;AAAA,QACP,cAAc;AAAA,QACd,cAAc;AAAA,MAChB;AACA,uBAAiB,MAAM,IAAI,cAAc,MAAM;AAAA,IACjD;AACA,UAAM,OAAO,KAAK,cAAc,SAAS,gBAAgB,IAAI;AAC7D,UAAM,YAAY,KAAK,IAAI,CAAC,MAAM,IAAI,IAAI,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;AACzD,UAAM,IAAI,MAAM,KAAK,SAAS;AAAA,EAChC;AAAA,EAEA,cACE,SACA,QACA,OAA2B,CAAC,GACnB;AACT,UAAM,QAAQ,KAAK,iBAAiB,SAAS,QAAQ,IAAI;AACzD,UAAM,MAAM,MAAM,OAAO,KAAK,SAAS,GAAG;AAC1C,WAAO,IAAI,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,GAAG,GAAG,MAAM,EAAE,EAAE;AAAA,EACxD;AAAA,EAEA,iBACE,SACA,QACA,OAA2B,CAAC,GACpB;AACR,UAAM,UAAU,KAAK,sBAAsB,SAAS,QAAQ,IAAI;AAChE,UAAM,UAAU,KAAK,sBAAsB,SAAS,QAAQ,IAAI;AAChE,WAAO,IAAI,wBAAO,CAAC,SAAS,SAAS,SAAS,MAAM,CAAC;AAAA,EACvD;AAAA,EAEA,sBACE,SACA,QACA,OAA2B,CAAC,GACrB;AACP,UAAM,EAAE,YAAY,IAAI,OAAO,MAAM,IAAI;AACzC,UAAM,SAAS,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AACnD,UAAM,SAAS,IAAI,KAAK,OAAO,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC;AACnD,UAAM,gBAAgB,MAAM,cAAM,QAAQ,YAAY,GAAG,SAAS;AAClE,UAAM,YAAY,OAAO,QAAQ,IAAI,OAAO;AAC5C,UAAM,YAAY,OAAO,QAAQ,IAAI,OAAO;AAC5C,WAAO;AAAA,MACL,GAAG,YAAY,cAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,OAAO,cAAc;AAAA,MACrE,GAAG,YAAY,cAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,SAAS,OAAO,cAAc;AAAA,IACvE;AAAA,EACF;AACF;","names":[]}