@ledgerhq/speculos-device-controller 0.0.0-test-new-attestation-20251203154737 → 0.0.0-trusted-names-native-transfer-1-20260121120757
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/lib/cjs/package.json +8 -8
- package/lib/cjs/src/api/DeviceController.js +1 -1
- package/lib/cjs/src/api/DeviceController.js.map +1 -1
- package/lib/cjs/src/api/DeviceController.test.js.map +2 -2
- package/lib/cjs/src/internal/adapters/DefaultButtonController.test.js.map +2 -2
- package/lib/cjs/src/internal/adapters/DefaultTouchController.test.js.map +1 -1
- package/lib/cjs/src/internal/use-cases/buttonUseCases.test.js.map +2 -2
- package/lib/cjs/src/internal/use-cases/touchUseCases.js +1 -1
- package/lib/cjs/src/internal/use-cases/touchUseCases.js.map +2 -2
- package/lib/cjs/src/internal/utils/axisClamp.test.js.map +2 -2
- package/lib/esm/package.json +8 -8
- package/lib/esm/src/api/DeviceController.js +1 -1
- package/lib/esm/src/api/DeviceController.js.map +1 -1
- package/lib/esm/src/api/DeviceController.test.js.map +2 -2
- package/lib/esm/src/internal/adapters/DefaultButtonController.test.js.map +2 -2
- package/lib/esm/src/internal/adapters/DefaultTouchController.test.js.map +1 -1
- package/lib/esm/src/internal/use-cases/buttonUseCases.test.js.map +2 -2
- package/lib/esm/src/internal/use-cases/touchUseCases.js +1 -1
- package/lib/esm/src/internal/use-cases/touchUseCases.js.map +2 -2
- package/lib/esm/src/internal/utils/axisClamp.test.js.map +2 -2
- package/lib/types/src/api/DeviceController.d.ts +2 -2
- package/lib/types/src/api/DeviceController.d.ts.map +1 -1
- package/lib/types/src/internal/use-cases/touchUseCases.d.ts +1 -1
- package/lib/types/src/internal/use-cases/touchUseCases.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +9 -9
package/lib/cjs/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
|
-
"@ledgerhq/device-management-kit": "workspace
|
|
3
|
+
"@ledgerhq/device-management-kit": "workspace:*",
|
|
4
4
|
"@sentry/minimal": "catalog:",
|
|
5
5
|
"axios": "catalog:"
|
|
6
6
|
},
|
|
7
7
|
"devDependencies": {
|
|
8
|
-
"@ledgerhq/eslint-config-dsdk": "workspace
|
|
9
|
-
"@ledgerhq/ldmk-tool": "workspace
|
|
10
|
-
"@ledgerhq/prettier-config-dsdk": "workspace
|
|
11
|
-
"@ledgerhq/tsconfig-dsdk": "workspace
|
|
12
|
-
"@ledgerhq/vitest-config-dmk": "workspace
|
|
8
|
+
"@ledgerhq/eslint-config-dsdk": "workspace:*",
|
|
9
|
+
"@ledgerhq/ldmk-tool": "workspace:*",
|
|
10
|
+
"@ledgerhq/prettier-config-dsdk": "workspace:*",
|
|
11
|
+
"@ledgerhq/tsconfig-dsdk": "workspace:*",
|
|
12
|
+
"@ledgerhq/vitest-config-dmk": "workspace:*",
|
|
13
13
|
"ts-node": "catalog:"
|
|
14
14
|
},
|
|
15
15
|
"exports": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"license": "Apache-2.0",
|
|
31
31
|
"name": "@ledgerhq/speculos-device-controller",
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@ledgerhq/device-management-kit": "workspace
|
|
33
|
+
"@ledgerhq/device-management-kit": "workspace:*"
|
|
34
34
|
},
|
|
35
35
|
"private": false,
|
|
36
36
|
"repository": {
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
54
54
|
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
|
|
55
55
|
},
|
|
56
|
-
"version": "0.0.0-
|
|
56
|
+
"version": "0.0.0-trusted-names-native-transfer-1-20260121120757"
|
|
57
57
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var l=Object.defineProperty;var v=Object.getOwnPropertyDescriptor;var d=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var C=(n,o)=>{for(var i in o)l(n,i,{get:o[i],enumerable:!0})},g=(n,o,i,s)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of d(o))!y.call(n,t)&&t!==i&&l(n,t,{get:()=>o[t],enumerable:!(s=v(o,t))||s.enumerable});return n};var P=n=>g(l({},"__esModule",{value:!0}),n);var D={};C(D,{deviceControllerClientFactory:()=>B});module.exports=P(D);var p=require("../internal/config/defaultScreens"),u=require("../../src/internal/di"),c=require("../../src/internal/use-cases/buttonUseCases"),e=require("../../src/internal/use-cases/touchUseCases");const B=(n,o={})=>{const i={screens:o.screens??p.DEFAULT_SCREENS,timeoutMs:o.timeoutMs,clientHeader:o.clientHeader},{buttons:s,touch:t}=(0,u.createDefaultControllers)(n,i),a=(0,c.pressButtons)(s);return{buttonFactory:()=>({press:r=>s.press(r),left:()=>a.left(),right:()=>a.right(),both:()=>a.both(),pressSequence:(r,m)=>(0,c.pressSequence)(s,r,m)}),tapFactory:r=>({tapQuick:(0,e.tapQuick)(t,r),tapLong:(0,e.tapLong)(t,r),sign:(0,e.sign)(t,r),reject:(0,e.reject)(t,r),navigateNext:(0,e.navigateNext)(t,r),navigatePrevious:(0,e.navigatePrevious)(t,r),mainButton:(0,e.mainButton)(t,r),secondaryButton:(0,e.secondaryButton)(t,r)})}};0&&(module.exports={deviceControllerClientFactory});
|
|
2
2
|
//# sourceMappingURL=DeviceController.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/DeviceController.ts"],
|
|
4
|
-
"sourcesContent": ["import { DEFAULT_SCREENS } from \"@internal/config/defaultScreens\";\nimport type { ButtonController } from \"@internal/core/ButtonController\";\nimport type {\n ButtonKey,\n DeviceControllerOptions,\n DeviceScreens,\n PercentCoordinates,\n} from \"@internal/core/types\";\nimport { createDefaultControllers } from \"@root/src/internal/di\";\nimport {\n pressButtons,\n pressSequence,\n} from \"@root/src/internal/use-cases/buttonUseCases\";\nimport {\n mainButton,\n navigateNext,\n navigatePrevious,\n reject,\n secondaryButton,\n sign,\n tapLong,\n tapQuick,\n} from \"@root/src/internal/use-cases/touchUseCases\";\n\nexport type ButtonFactory = () => ButtonController & {\n left(): Promise<void>;\n right(): Promise<void>;\n both(): Promise<void>;\n pressSequence(keys: ButtonKey[], delayMs?: number): Promise<void>;\n};\n\nexport type TapFactory = (deviceKey: string) => {\n tapQuick: (point: PercentCoordinates) => Promise<void>;\n tapLong: (point: PercentCoordinates) => Promise<void>;\n sign: () => Promise<void>;\n reject: () => Promise<void>;\n navigateNext: () => Promise<void>;\n navigatePrevious: () => Promise<void>;\n mainButton: () => Promise<void>;\n secondaryButton: () => Promise<void>;\n};\n\nexport type DeviceControllerClientFactory = (\n baseURL: string,\n opts?: {\n timeoutMs?: number;\n clientHeader?: string;\n screens?: DeviceScreens<string>;\n },\n) => DeviceControllerClient;\n\nexport type DeviceControllerClient = {\n buttonFactory: ButtonFactory;\n tapFactory: TapFactory;\n};\n\nexport const deviceControllerClientFactory: DeviceControllerClientFactory = (\n baseURL,\n opts = {},\n) => {\n const resolved: DeviceControllerOptions = {\n screens: opts.screens ?? DEFAULT_SCREENS,\n timeoutMs: opts.timeoutMs,\n clientHeader: opts.clientHeader,\n };\n\n const { buttons, touch } = createDefaultControllers(baseURL, resolved);\n const press = pressButtons(buttons);\n\n return {\n buttonFactory: () => ({\n press: (key) => buttons.press(key),\n left: () => press.left(),\n right: () => press.right(),\n both: () => press.both(),\n pressSequence: (keys, delayMs) => pressSequence(buttons, keys, delayMs),\n }),\n tapFactory: (key) => ({\n tapQuick: tapQuick(touch, key),\n tapLong: tapLong(touch, key),\n sign: sign(touch, key),\n reject: reject(touch, key),\n navigateNext: navigateNext(touch, key),\n navigatePrevious: navigatePrevious(touch, key),\n mainButton: mainButton(touch, key),\n secondaryButton: secondaryButton(touch, key),\n }),\n };\n};\n\nexport type {\n ButtonKey,\n DeviceControllerOptions,\n DeviceScreens,\n PercentCoordinates,\n};\n"],
|
|
4
|
+
"sourcesContent": ["import { DEFAULT_SCREENS } from \"@internal/config/defaultScreens\";\nimport type { ButtonController } from \"@internal/core/ButtonController\";\nimport type {\n ButtonKey,\n DeviceControllerOptions,\n DeviceScreens,\n PercentCoordinates,\n} from \"@internal/core/types\";\nimport { createDefaultControllers } from \"@root/src/internal/di\";\nimport {\n pressButtons,\n pressSequence,\n} from \"@root/src/internal/use-cases/buttonUseCases\";\nimport {\n mainButton,\n navigateNext,\n navigatePrevious,\n reject,\n secondaryButton,\n sign,\n tapLong,\n tapQuick,\n} from \"@root/src/internal/use-cases/touchUseCases\";\n\nexport type ButtonFactory = () => ButtonController & {\n left(): Promise<void>;\n right(): Promise<void>;\n both(): Promise<void>;\n pressSequence(keys: ButtonKey[], delayMs?: number): Promise<void>;\n};\n\nexport type TapFactory = (deviceKey: string) => {\n tapQuick: (point: PercentCoordinates) => Promise<void>;\n tapLong: (point: PercentCoordinates, delayMs?: number) => Promise<void>;\n sign: (delayMs?: number) => Promise<void>;\n reject: () => Promise<void>;\n navigateNext: () => Promise<void>;\n navigatePrevious: () => Promise<void>;\n mainButton: () => Promise<void>;\n secondaryButton: () => Promise<void>;\n};\n\nexport type DeviceControllerClientFactory = (\n baseURL: string,\n opts?: {\n timeoutMs?: number;\n clientHeader?: string;\n screens?: DeviceScreens<string>;\n },\n) => DeviceControllerClient;\n\nexport type DeviceControllerClient = {\n buttonFactory: ButtonFactory;\n tapFactory: TapFactory;\n};\n\nexport const deviceControllerClientFactory: DeviceControllerClientFactory = (\n baseURL,\n opts = {},\n) => {\n const resolved: DeviceControllerOptions = {\n screens: opts.screens ?? DEFAULT_SCREENS,\n timeoutMs: opts.timeoutMs,\n clientHeader: opts.clientHeader,\n };\n\n const { buttons, touch } = createDefaultControllers(baseURL, resolved);\n const press = pressButtons(buttons);\n\n return {\n buttonFactory: () => ({\n press: (key) => buttons.press(key),\n left: () => press.left(),\n right: () => press.right(),\n both: () => press.both(),\n pressSequence: (keys, delayMs) => pressSequence(buttons, keys, delayMs),\n }),\n tapFactory: (key) => ({\n tapQuick: tapQuick(touch, key),\n tapLong: tapLong(touch, key),\n sign: sign(touch, key),\n reject: reject(touch, key),\n navigateNext: navigateNext(touch, key),\n navigatePrevious: navigatePrevious(touch, key),\n mainButton: mainButton(touch, key),\n secondaryButton: secondaryButton(touch, key),\n }),\n };\n};\n\nexport type {\n ButtonKey,\n DeviceControllerOptions,\n DeviceScreens,\n PercentCoordinates,\n};\n"],
|
|
5
5
|
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,mCAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgC,2CAQhCC,EAAyC,iCACzCC,EAGO,uDACPC,EASO,sDAkCA,MAAML,EAA+D,CAC1EM,EACAC,EAAO,CAAC,IACL,CACH,MAAMC,EAAoC,CACxC,QAASD,EAAK,SAAW,kBACzB,UAAWA,EAAK,UAChB,aAAcA,EAAK,YACrB,EAEM,CAAE,QAAAE,EAAS,MAAAC,CAAM,KAAI,4BAAyBJ,EAASE,CAAQ,EAC/DG,KAAQ,gBAAaF,CAAO,EAElC,MAAO,CACL,cAAe,KAAO,CACpB,MAAQG,GAAQH,EAAQ,MAAMG,CAAG,EACjC,KAAM,IAAMD,EAAM,KAAK,EACvB,MAAO,IAAMA,EAAM,MAAM,EACzB,KAAM,IAAMA,EAAM,KAAK,EACvB,cAAe,CAACE,EAAMC,OAAY,iBAAcL,EAASI,EAAMC,CAAO,CACxE,GACA,WAAaF,IAAS,CACpB,YAAU,YAASF,EAAOE,CAAG,EAC7B,WAAS,WAAQF,EAAOE,CAAG,EAC3B,QAAM,QAAKF,EAAOE,CAAG,EACrB,UAAQ,UAAOF,EAAOE,CAAG,EACzB,gBAAc,gBAAaF,EAAOE,CAAG,EACrC,oBAAkB,oBAAiBF,EAAOE,CAAG,EAC7C,cAAY,cAAWF,EAAOE,CAAG,EACjC,mBAAiB,mBAAgBF,EAAOE,CAAG,CAC7C,EACF,CACF",
|
|
6
6
|
"names": ["DeviceController_exports", "__export", "deviceControllerClientFactory", "__toCommonJS", "import_defaultScreens", "import_di", "import_buttonUseCases", "import_touchUseCases", "baseURL", "opts", "resolved", "buttons", "touch", "press", "key", "keys", "delayMs"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/DeviceController.test.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { DeviceScreens } from \"@internal/core/types\";\n\nimport { deviceControllerClientFactory } from \"./DeviceController\";\n\ndescribe(\"deviceControllerClientFactory\", () => {\n it(\"returns a DeviceControllerdeviceClient with the expected shape\", () => {\n const deviceClient = deviceControllerClientFactory(\"http://localhost:0\");\n\n expect(deviceClient).toBeDefined();\n expect(deviceClient).toHaveProperty(\"buttonFactory\");\n expect(deviceClient).toHaveProperty(\"tapFactory\");\n\n const deviceButtons = deviceClient.buttonFactory();\n\n // button surfaces\n expect(typeof deviceButtons.press).toBe(\"function\");\n expect(typeof deviceButtons.left).toBe(\"function\");\n expect(typeof deviceButtons.right).toBe(\"function\");\n expect(typeof deviceButtons.both).toBe(\"function\");\n expect(typeof deviceButtons.pressSequence).toBe(\"function\");\n\n const deviceTaps = deviceClient.tapFactory(\"flex\");\n\n // tap surfaces\n expect(typeof deviceTaps.tapQuick).toBe(\"function\");\n expect(typeof deviceTaps.tapLong).toBe(\"function\");\n });\n\n it(\"does not throw when created with custom options\", () => {\n const screens: DeviceScreens<string> = {\n custom: { width: 128, height: 64 },\n stax: { width: 400, height: 672 },\n };\n const deviceClient = deviceControllerClientFactory(\"http://127.0.0.1:0\", {\n clientHeader: \"test-suite\",\n timeoutMs: 200,\n screens,\n });\n expect(deviceClient).toBeTruthy();\n });\n\n it(\"creates independent instances (no accidental shared state)\", () => {\n const a = deviceControllerClientFactory(\"http://localhost:0\");\n const b = deviceControllerClientFactory(\"http://localhost:0\");\n\n expect(a).not.toBe(b);\n expect(a.buttonFactory().press).not.toBe(b.buttonFactory().press);\n expect(a.tapFactory(\"flex\").tapQuick).not.toBe(\n b.tapFactory(\"flex\").tapQuick,\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "aAEA,IAAAA,EAA8C,8BAE9C,SAAS,gCAAiC,IAAM,CAC9C,GAAG,iEAAkE,IAAM,CACzE,MAAMC,KAAe,iCAA8B,oBAAoB,EAEvE,OAAOA,CAAY,EAAE,YAAY,EACjC,OAAOA,CAAY,EAAE,eAAe,eAAe,EACnD,OAAOA,CAAY,EAAE,eAAe,YAAY,EAEhD,MAAMC,EAAgBD,EAAa,cAAc,EAGjD,OAAO,OAAOC,EAAc,KAAK,EAAE,KAAK,UAAU,EAClD,OAAO,OAAOA,EAAc,IAAI,EAAE,KAAK,UAAU,EACjD,OAAO,OAAOA,EAAc,KAAK,EAAE,KAAK,UAAU,EAClD,OAAO,OAAOA,EAAc,IAAI,EAAE,KAAK,UAAU,EACjD,OAAO,OAAOA,EAAc,aAAa,EAAE,KAAK,UAAU,EAE1D,MAAMC,EAAaF,EAAa,WAAW,MAAM,EAGjD,OAAO,OAAOE,EAAW,QAAQ,EAAE,KAAK,UAAU,EAClD,OAAO,OAAOA,EAAW,OAAO,EAAE,KAAK,UAAU,CACnD,CAAC,EAED,GAAG,kDAAmD,IAAM,CAK1D,MAAMF,KAAe,iCAA8B,qBAAsB,CACvE,aAAc,aACd,UAAW,IACX,QAPqC,CACrC,OAAQ,CAAE,MAAO,IAAK,OAAQ,EAAG,EACjC,KAAM,CAAE,MAAO,IAAK,OAAQ,GAAI,CAClC,CAKA,CAAC,EACD,OAAOA,CAAY,EAAE,WAAW,CAClC,CAAC,EAED,GAAG,6DAA8D,IAAM,CACrE,MAAMG,KAAI,iCAA8B,oBAAoB,EACtDC,KAAI,iCAA8B,oBAAoB,EAE5D,OAAOD,CAAC,EAAE,IAAI,KAAKC,CAAC,EACpB,OAAOD,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,KAAKC,EAAE,cAAc,EAAE,KAAK,EAChE,OAAOD,EAAE,WAAW,MAAM,EAAE,QAAQ,EAAE,IAAI,KACxCC,EAAE,WAAW,MAAM,EAAE,QACvB,CACF,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["import_DeviceController", "deviceClient", "deviceButtons", "deviceTaps", "a", "b"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/adapters/DefaultButtonController.test.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { AxiosInstance } from \"axios\";\n\nimport type { ButtonKey } from \"@internal/core/types\";\n\nimport { DefaultButtonController } from \"./DefaultButtonController\";\n\ndescribe(\"DefaultButtonController\", () => {\n let postMock: ReturnType<typeof vi.fn>;\n let axiosFake: AxiosInstance;\n let controller: DefaultButtonController;\n\n beforeEach(() => {\n postMock = vi.fn().mockResolvedValue({ status: 200, data: {} });\n axiosFake = { post: postMock } as unknown as AxiosInstance;\n controller = new DefaultButtonController(axiosFake);\n });\n\n const keys: ButtonKey[] = [\"left\", \"right\", \"both\"];\n\n it.each<ButtonKey>(keys)(\n \"press(%s) posts expected payload\",\n async (key: ButtonKey) => {\n await controller.press(key);\n\n expect(postMock).toHaveBeenCalledTimes(1);\n expect(postMock).toHaveBeenCalledWith(`/button/${key}`, {\n action: \"press-and-release\",\n });\n },\n );\n\n it(\"propagates HTTP errors\", async () => {\n const error = new Error(\"oups\");\n postMock.mockRejectedValueOnce(error);\n\n await expect(controller.press(\"left\" as ButtonKey)).rejects.toBe(error);\n });\n});\n"],
|
|
5
|
+
"mappings": "aAIA,IAAAA,EAAwC,qCAExC,SAAS,0BAA2B,IAAM,CACxC,IAAIC,EACAC,EACAC,EAEJ,WAAW,IAAM,CACfF,EAAW,GAAG,GAAG,EAAE,kBAAkB,CAAE,OAAQ,IAAK,KAAM,CAAC,CAAE,CAAC,EAC9DC,EAAY,CAAE,KAAMD,CAAS,EAC7BE,EAAa,IAAI,0BAAwBD,CAAS,CACpD,CAAC,EAED,MAAME,EAAoB,CAAC,OAAQ,QAAS,MAAM,EAElD,GAAG,KAAgBA,CAAI,EACrB,mCACA,MAAOC,GAAmB,CACxB,MAAMF,EAAW,MAAME,CAAG,EAE1B,OAAOJ,CAAQ,EAAE,sBAAsB,CAAC,EACxC,OAAOA,CAAQ,EAAE,qBAAqB,WAAWI,CAAG,GAAI,CACtD,OAAQ,mBACV,CAAC,CACH,CACF,EAEA,GAAG,yBAA0B,SAAY,CACvC,MAAMC,EAAQ,IAAI,MAAM,MAAM,EAC9BL,EAAS,sBAAsBK,CAAK,EAEpC,MAAM,OAAOH,EAAW,MAAM,MAAmB,CAAC,EAAE,QAAQ,KAAKG,CAAK,CACxE,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["import_DefaultButtonController", "postMock", "axiosFake", "controller", "keys", "key", "error"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/adapters/DefaultTouchController.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport type { AxiosInstance } from \"axios\";\n\nimport type { PercentCoordinates } from \"../core/types\";\nimport { DefaultTouchController } from \"./DefaultTouchController\";\n\ndescribe(\"DefaultTouchController\", () => {\n let postMock: ReturnType<typeof vi.fn>;\n let axiosFake: AxiosInstance;\n\n const axisA = {\n xy: vi.fn((xPct: number, yPct: number) => ({\n x: Math.round(xPct * 10),\n y: Math.round(yPct * 20),\n })),\n };\n const axisB = {\n xy: vi.fn((xPct: number, yPct: number) => ({\n x: Math.round(100 + xPct),\n y: Math.round(200 + yPct),\n })),\n };\n let axesFake: Record<\n string,\n { xy: (x: number, y: number) => { x: number; y: number } }\n >;\n\n let controller: DefaultTouchController<string>;\n\n beforeEach(() => {\n postMock = vi.fn().mockResolvedValue({ status: 200, data: {} });\n axiosFake = { post: postMock } as unknown as AxiosInstance;\n\n axisA.xy.mockClear();\n axisB.xy.mockClear();\n\n axesFake = { devA: axisA, devB: axisB };\n controller = new DefaultTouchController(axiosFake, axesFake as any);\n });\n\n const point: PercentCoordinates = { x: 12, y: 45 };\n\n it(\"tapAndRelease: converts percent to absolute via axes and POSTs expected body\", async () => {\n await controller.tapAndRelease(\"devA\", point);\n\n expect(axisA.xy).toHaveBeenCalledTimes(1);\n expect(axisA.xy).toHaveBeenCalledWith(point.x, point.y);\n\n const expectedAbs = (axisA.xy.mock.results as any)[0].value;\n expect(postMock).toHaveBeenCalledTimes(1);\n expect(postMock).toHaveBeenCalledWith(\"/finger\", {\n action: \"press-and-release\",\n ...expectedAbs,\n });\n });\n\n it(\"tap: converts via axes and POSTs action 'press'\", async () => {\n await controller.tap(\"devB\", point);\n\n expect(axisB.xy).toHaveBeenCalledWith(point.x, point.y);\n const expectedAbs = axisB.xy.mock.results[0]?.value;\n\n expect(postMock).toHaveBeenCalledWith(\"/finger\", {\n action: \"press\",\n ...expectedAbs,\n });\n });\n\n it(\"release: converts via axes and POSTs action 'release'\", async () => {\n await controller.release(\"devA\", point);\n\n const expectedAbs = axisA.xy.mock.results[0]!.value;\n expect(postMock).toHaveBeenCalledWith(\"/finger\", {\n action: \"release\",\n ...expectedAbs,\n });\n });\n\n it(\"throws an error when device key is unknown\", async () => {\n await expect(controller.tap(\"unknownDevice\" as any, point)).rejects.toThrow(\n /\\[Touch] Unknown device key \"unknownDevice\".*Known keys: devA, devB/,\n );\n expect(postMock).not.toHaveBeenCalled();\n });\n\n it(\"propagates HTTP errors from axios client\", async () => {\n const boom = new Error(\"backend down\");\n postMock.mockRejectedValueOnce(boom);\n\n await expect(controller.tapAndRelease(\"devA\", point)).rejects.toBe(boom);\n });\n});\n\ndescribe(\"percent validation\", () => {\n let controller: DefaultTouchController<string>;\n let postMock: ReturnType<typeof vi.fn>;\n let axiosFake: AxiosInstance;\n\n const axis = {\n xy: vi.fn((xPct: number, yPct: number) => ({ x: xPct, y: yPct })),\n };\n const axesFake = { devA: axis };\n\n beforeEach(() => {\n postMock = vi.fn().mockResolvedValue({ status: 200, data: {} });\n axiosFake = { post: postMock } as unknown as AxiosInstance;\n axis.xy.mockClear();\n controller = new DefaultTouchController(axiosFake, axesFake as any);\n });\n\n it(\"accepts boundary values 0 and 100\", async () => {\n await controller.tapAndRelease(\"devA\", { x: 0, y: 100 });\n await controller.tap(\"devA\", { x: 100, y: 0 });\n await controller.release(\"devA\", { x: 50, y: 99 });\n\n // should have sent 3 HTTP calls if all accepted\n expect(postMock).toHaveBeenCalledTimes(3);\n });\n\n it(\"rejects values outside [0, 100], non-finite, negative and non-integer\", async () => {\n const badPoints = [\n { x: 140, y: 50 },\n { x: -1, y: 50 },\n { x: 50, y: 120 },\n { x: 50, y: -0.01 },\n ];\n\n for (const p of badPoints) {\n await expect(\n controller.tapAndRelease(\"devA\", p as any),\n ).rejects.toThrow();\n }\n\n // no HTTP calls should be made for invalid input\n expect(postMock).not.toHaveBeenCalled();\n });\n\n it(\"rejects NaN or non-finite values\", async () => {\n const badPoints = [\n { x: Number.NaN, y: 50 },\n { x: 50, y: Number.NaN },\n { x: Number.POSITIVE_INFINITY, y: 10 },\n { x: 10, y: Number.NEGATIVE_INFINITY },\n ];\n\n for (const p of badPoints) {\n await expect(controller.tap(\"devA\", p as any)).rejects.toThrow(\n /percent/i,\n );\n }\n expect(postMock).not.toHaveBeenCalled();\n });\n});\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["import_DefaultTouchController", "postMock", "axiosFake", "axisA", "xPct", "yPct", "axisB", "axesFake", "controller", "point", "expectedAbs", "boom", "axis", "badPoints", "p"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/buttonUseCases.test.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { pressButtons, pressSequence } from \"./buttonUseCases\";\n\ntype ButtonKey = \"left\" | \"right\" | \"both\";\ntype ButtonController = { press: (k: ButtonKey) => Promise<void> };\n\nconst tick = () => Promise.resolve();\n\ndescribe(\"buttonUsecases\", () => {\n let controller: ButtonController & { press: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n controller = {\n press: vi.fn(() => Promise.resolve()),\n };\n });\n\n afterEach(() => {\n vi.useRealTimers();\n vi.restoreAllMocks();\n });\n\n describe(\"pressButtons\", () => {\n it(\"returns functions that call controller.press with the correct keys\", async () => {\n const api = pressButtons(controller);\n\n await api.left();\n await api.right();\n await api.both();\n\n expect(controller.press).toHaveBeenCalledTimes(3);\n expect(controller.press).toHaveBeenNthCalledWith(1, \"left\");\n expect(controller.press).toHaveBeenNthCalledWith(2, \"right\");\n expect(controller.press).toHaveBeenNthCalledWith(3, \"both\");\n });\n });\n\n describe(\"pressSequence\", () => {\n it(\"presses keys in order and waits the default 200ms after each key (including last)\", async () => {\n vi.useFakeTimers();\n const timeoutSpy = vi.spyOn(globalThis, \"setTimeout\");\n const keys: ButtonKey[] = [\"left\", \"right\", \"both\"];\n\n const promise = pressSequence(controller, keys); // delay = 200\n\n // first press happens immediately (sync call of controller.press)\n expect(controller.press).toHaveBeenCalledTimes(1);\n expect(controller.press).toHaveBeenNthCalledWith(1, \"left\");\n\n // timeout is scheduled after the awaited press resolves\n await tick();\n expect(timeoutSpy).toHaveBeenCalledTimes(1);\n expect(timeoutSpy).toHaveBeenLastCalledWith(expect.any(Function), 200);\n\n // first delay elapse -> second press\n await vi.advanceTimersByTimeAsync(200);\n await tick();\n expect(controller.press).toHaveBeenCalledTimes(2);\n expect(controller.press).toHaveBeenNthCalledWith(2, \"right\");\n\n // next delay -> third press\n await vi.advanceTimersByTimeAsync(200);\n await tick();\n expect(controller.press).toHaveBeenCalledTimes(3);\n expect(controller.press).toHaveBeenNthCalledWith(3, \"both\");\n\n // final post-press delay\n await vi.advanceTimersByTimeAsync(200);\n await expect(promise).resolves.toBeUndefined();\n });\n\n it(\"uses the provided custom delay\", async () => {\n vi.useFakeTimers();\n const timeoutSpy = vi.spyOn(globalThis, \"setTimeout\");\n const keys: ButtonKey[] = [\"left\", \"right\"];\n\n const promise = pressSequence(controller, keys, 75);\n\n await tick();\n expect(timeoutSpy).toHaveBeenCalledTimes(1);\n expect(timeoutSpy).toHaveBeenLastCalledWith(expect.any(Function), 75);\n\n await vi.advanceTimersByTimeAsync(75);\n await tick();\n expect(timeoutSpy).toHaveBeenCalledTimes(2);\n expect(timeoutSpy).toHaveBeenLastCalledWith(expect.any(Function), 75);\n\n await vi.advanceTimersByTimeAsync(75);\n await expect(promise).resolves.toBeUndefined();\n });\n\n it(\"rejects if a press fails and stops processing subsequent keys\", async () => {\n vi.useFakeTimers();\n\n const err = new Error(\"oups\");\n controller.press\n .mockResolvedValueOnce(undefined) // first ok\n .mockRejectedValueOnce(err); // second fails\n\n const keys: ButtonKey[] = [\"left\", \"right\", \"both\"];\n\n const p = pressSequence(controller, keys, 50);\n\n const assertion = expect(p).rejects.toThrow(\"oups\");\n\n await Promise.resolve(); // let first setTimeout schedule\n await vi.advanceTimersByTimeAsync(50);\n await Promise.resolve();\n\n await assertion;\n\n expect(controller.press).toHaveBeenCalledTimes(2);\n expect(controller.press).toHaveBeenNthCalledWith(1, \"left\");\n expect(controller.press).toHaveBeenNthCalledWith(2, \"right\");\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_buttonUseCases", "tick", "controller", "api", "timeoutSpy", "promise", "err", "p", "assertion"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var s=Object.defineProperty;var
|
|
1
|
+
"use strict";var s=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var K=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var y=(e,t)=>{for(var n in t)s(e,n,{get:t[n],enumerable:!0})},p=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of K(t))!l.call(e,o)&&o!==n&&s(e,o,{get:()=>t[o],enumerable:!(a=x(t,o))||a.enumerable});return e};var u=e=>p(s({},"__esModule",{value:!0}),e);var h={};y(h,{mainButton:()=>w,navigateNext:()=>C,navigatePrevious:()=>T,reject:()=>g,secondaryButton:()=>m,sign:()=>d,tapLong:()=>i,tapQuick:()=>r});module.exports=u(h);const c=5e3,i=(e,t)=>async(n,a=c)=>{await e.tap(t,n),await new Promise(o=>setTimeout(o,a)),await e.release(t,n)},r=(e,t)=>async n=>await e.tapAndRelease(t,n),d=(e,t)=>async(n=c)=>await i(e,t)({x:85,y:80},n),g=(e,t)=>async()=>await r(e,t)({x:20,y:90}),C=(e,t)=>async()=>await r(e,t)({x:90,y:90}),T=(e,t)=>async()=>await r(e,t)({x:45,y:90}),w=(e,t)=>async()=>await r(e,t)({x:50,y:80}),m=(e,t)=>async()=>await r(e,t)({x:50,y:90});0&&(module.exports={mainButton,navigateNext,navigatePrevious,reject,secondaryButton,sign,tapLong,tapQuick});
|
|
2
2
|
//# sourceMappingURL=touchUseCases.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/touchUseCases.ts"],
|
|
4
|
-
"sourcesContent": ["import type { PercentCoordinates } from \"@internal/core/types\";\nimport { type TouchController } from \"@root/src/internal/core/TouchController\";\n\nconst TAP_LONG_TIME_MS = 5000;\n\nexport const tapLong =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (point: PercentCoordinates, delayMs: number = TAP_LONG_TIME_MS) => {\n await touch.tap(deviceKey, point);\n await new Promise((r) => setTimeout(r, delayMs));\n await touch.release(deviceKey, point);\n };\n\nexport const tapQuick =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (point: PercentCoordinates) =>\n await touch.tapAndRelease(deviceKey, point);\n\nexport const sign =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapLong(touch, deviceKey)({ x: 85, y: 80 });\n\nexport const reject =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 20, y: 90 });\n\nexport const navigateNext =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 90, y: 90 });\n\nexport const navigatePrevious =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 45, y: 90 });\n\nexport const mainButton =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 50, y: 80 });\n\nexport const secondaryButton =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 50, y: 90 });\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,iBAAAC,EAAA,qBAAAC,EAAA,WAAAC,EAAA,oBAAAC,EAAA,SAAAC,EAAA,YAAAC,EAAA,aAAAC,IAAA,eAAAC,EAAAV,GAGA,MAAMW,EAAmB,IAEZH,EACX,CAAmBI,EAA2BC,IAC9C,MAAOC,EAA2BC,EAAkBJ,IAAqB,CACvE,MAAMC,EAAM,IAAIC,EAAWC,CAAK,EAChC,MAAM,IAAI,QAASE,GAAM,WAAWA,EAAGD,CAAO,CAAC,EAC/C,MAAMH,EAAM,QAAQC,EAAWC,CAAK,CACtC,EAEWL,EACX,CAAmBG,EAA2BC,IAC9C,MAAOC,GACL,MAAMF,EAAM,cAAcC,EAAWC,CAAK,EAEjCP,EACX,CAAmBK,EAA2BC,IAC9C,
|
|
4
|
+
"sourcesContent": ["import type { PercentCoordinates } from \"@internal/core/types\";\nimport { type TouchController } from \"@root/src/internal/core/TouchController\";\n\nconst TAP_LONG_TIME_MS = 5000;\n\nexport const tapLong =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (point: PercentCoordinates, delayMs: number = TAP_LONG_TIME_MS) => {\n await touch.tap(deviceKey, point);\n await new Promise((r) => setTimeout(r, delayMs));\n await touch.release(deviceKey, point);\n };\n\nexport const tapQuick =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (point: PercentCoordinates) =>\n await touch.tapAndRelease(deviceKey, point);\n\nexport const sign =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (delayMs: number = TAP_LONG_TIME_MS) =>\n await tapLong(touch, deviceKey)({ x: 85, y: 80 }, delayMs);\n\nexport const reject =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 20, y: 90 });\n\nexport const navigateNext =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 90, y: 90 });\n\nexport const navigatePrevious =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 45, y: 90 });\n\nexport const mainButton =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 50, y: 80 });\n\nexport const secondaryButton =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 50, y: 90 });\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,EAAA,iBAAAC,EAAA,qBAAAC,EAAA,WAAAC,EAAA,oBAAAC,EAAA,SAAAC,EAAA,YAAAC,EAAA,aAAAC,IAAA,eAAAC,EAAAV,GAGA,MAAMW,EAAmB,IAEZH,EACX,CAAmBI,EAA2BC,IAC9C,MAAOC,EAA2BC,EAAkBJ,IAAqB,CACvE,MAAMC,EAAM,IAAIC,EAAWC,CAAK,EAChC,MAAM,IAAI,QAASE,GAAM,WAAWA,EAAGD,CAAO,CAAC,EAC/C,MAAMH,EAAM,QAAQC,EAAWC,CAAK,CACtC,EAEWL,EACX,CAAmBG,EAA2BC,IAC9C,MAAOC,GACL,MAAMF,EAAM,cAAcC,EAAWC,CAAK,EAEjCP,EACX,CAAmBK,EAA2BC,IAC9C,MAAOE,EAAkBJ,IACvB,MAAMH,EAAQI,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,EAAGE,CAAO,EAEhDV,EACX,CAAmBO,EAA2BC,IAC9C,SACE,MAAMJ,EAASG,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC,EAExCV,EACX,CAAmBS,EAA2BC,IAC9C,SACE,MAAMJ,EAASG,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC,EAExCT,EACX,CAAmBQ,EAA2BC,IAC9C,SACE,MAAMJ,EAASG,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC,EAExCX,EACX,CAAmBU,EAA2BC,IAC9C,SACE,MAAMJ,EAASG,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC,EAExCP,EACX,CAAmBM,EAA2BC,IAC9C,SACE,MAAMJ,EAASG,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC",
|
|
6
6
|
"names": ["touchUseCases_exports", "__export", "mainButton", "navigateNext", "navigatePrevious", "reject", "secondaryButton", "sign", "tapLong", "tapQuick", "__toCommonJS", "TAP_LONG_TIME_MS", "touch", "deviceKey", "point", "delayMs", "r"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/utils/axisClamp.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport type { DeviceScreens, Percent } from \"@internal/core/types\";\n\nimport { type AxisMap, clampValue, createAxes, createAxis } from \"./axisClamp\";\n\nconst p = (n: number) => n as unknown as Percent;\n\ndescribe(\"axisClamp helpers\", () => {\n describe(\"clampValue\", () => {\n it(\"floors and clamps to [0, width]\", () => {\n const clamp = clampValue(200);\n\n expect(clamp(p(0))).toBe(0);\n expect(clamp(p(50))).toBe(100); // 200 * 0.5 = 100\n expect(clamp(p(50.4))).toBe(100); // floor(200 * 0.504) = 100\n expect(clamp(p(50.5))).toBe(101); // floor(200 * 0.505) = 101\n expect(clamp(p(100))).toBe(200);\n expect(clamp(p(150))).toBe(200); // clamped\n expect(clamp(p(-10))).toBe(0); // clamped\n });\n });\n\n describe(\"createAxis\", () => {\n it(\"exposes vw, vh and xy with consistent flooring + clamping\", () => {\n const axis = createAxis(300, 200);\n\n // vw / vh\n expect(axis.vw(p(25))).toBe(75); // 300 * 0.25\n expect(axis.vh(p(75))).toBe(150); // 200 * 0.75\n\n // xy nominal\n expect(axis.xy(p(10), p(90))).toEqual({ x: 30, y: 180 });\n\n // xy clamps both axes\n expect(axis.xy(p(150), p(-20))).toEqual({ x: 300, y: 0 });\n\n // flooring behavior with fractional percent\n const xy = axis.xy(p(33.4), p(66.6));\n expect(xy.x).toBe(Math.floor(300 * 0.334));\n expect(xy.y).toBe(Math.floor(200 * 0.666));\n });\n });\n\n describe(\"createAxes\", () => {\n it(\"creates an AxisMap for all device keys with matching dimensions\", () => {\n const screens: DeviceScreens<\"devA\" | \"devB\"> = {\n devA: { width: 200, height: 100 } as any,\n devB: { width: 320, height: 480 } as any,\n };\n\n const axes: AxisMap<\"devA\" | \"devB\"> = createAxes(screens);\n\n // contains both keys\n expect(Object.keys(axes).sort()).toEqual([\"devA\", \"devB\"]);\n\n // devA\n expect(axes.devA.vw(p(100))).toBe(200);\n expect(axes.devA.vh(p(100))).toBe(100);\n expect(axes.devA.xy(p(120), p(-10))).toEqual({ x: 200, y: 0 });\n\n // devB\n expect(axes.devB.vw(p(50))).toBe(160);\n expect(axes.devB.vh(p(50))).toBe(240);\n expect(axes.devB.xy(p(33.3), p(66.7))).toEqual({\n x: Math.floor(320 * 0.333),\n y: Math.floor(480 * 0.667),\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAKA,IAAAA,EAAiE,uBAEjE,MAAMC,EAAKC,GAAcA,EAEzB,SAAS,oBAAqB,IAAM,CAClC,SAAS,aAAc,IAAM,CAC3B,GAAG,kCAAmC,IAAM,CAC1C,MAAMC,KAAQ,cAAW,GAAG,EAE5B,OAAOA,EAAMF,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAC1B,OAAOE,EAAMF,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EAC7B,OAAOE,EAAMF,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,EAC/B,OAAOE,EAAMF,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,EAC/B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAC9B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAC9B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAC9B,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,4DAA6D,IAAM,CACpE,MAAMG,KAAO,cAAW,IAAK,GAAG,EAGhC,OAAOA,EAAK,GAAGH,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAC9B,OAAOG,EAAK,GAAGH,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EAG/B,OAAOG,EAAK,GAAGH,EAAE,EAAE,EAAGA,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,GAAI,EAAG,GAAI,CAAC,EAGvD,OAAOG,EAAK,GAAGH,EAAE,GAAG,EAAGA,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,IAAK,EAAG,CAAE,CAAC,EAGxD,MAAMI,EAAKD,EAAK,GAAGH,EAAE,IAAI,EAAGA,EAAE,IAAI,CAAC,EACnC,OAAOI,EAAG,CAAC,EAAE,KAAK,KAAK,MAAM,IAAM,IAAK,CAAC,EACzC,OAAOA,EAAG,CAAC,EAAE,KAAK,KAAK,MAAM,IAAM,IAAK,CAAC,CAC3C,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,kEAAmE,IAAM,CAM1E,MAAMC,KAAiC,cALS,CAC9C,KAAM,CAAE,MAAO,IAAK,OAAQ,GAAI,EAChC,KAAM,CAAE,MAAO,IAAK,OAAQ,GAAI,CAClC,CAEyD,EAGzD,OAAO,OAAO,KAAKA,CAAI,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAQ,MAAM,CAAC,EAGzD,OAAOA,EAAK,KAAK,GAAGL,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EACrC,OAAOK,EAAK,KAAK,GAAGL,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EACrC,OAAOK,EAAK,KAAK,GAAGL,EAAE,GAAG,EAAGA,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,IAAK,EAAG,CAAE,CAAC,EAG7D,OAAOK,EAAK,KAAK,GAAGL,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EACpC,OAAOK,EAAK,KAAK,GAAGL,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EACpC,OAAOK,EAAK,KAAK,GAAGL,EAAE,IAAI,EAAGA,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAC7C,EAAG,KAAK,MAAM,IAAM,IAAK,EACzB,EAAG,KAAK,MAAM,IAAM,IAAK,CAC3B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["import_axisClamp", "p", "n", "clamp", "axis", "xy", "axes"]
|
|
7
7
|
}
|
package/lib/esm/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"dependencies": {
|
|
3
|
-
"@ledgerhq/device-management-kit": "workspace
|
|
3
|
+
"@ledgerhq/device-management-kit": "workspace:*",
|
|
4
4
|
"@sentry/minimal": "catalog:",
|
|
5
5
|
"axios": "catalog:"
|
|
6
6
|
},
|
|
7
7
|
"devDependencies": {
|
|
8
|
-
"@ledgerhq/eslint-config-dsdk": "workspace
|
|
9
|
-
"@ledgerhq/ldmk-tool": "workspace
|
|
10
|
-
"@ledgerhq/prettier-config-dsdk": "workspace
|
|
11
|
-
"@ledgerhq/tsconfig-dsdk": "workspace
|
|
12
|
-
"@ledgerhq/vitest-config-dmk": "workspace
|
|
8
|
+
"@ledgerhq/eslint-config-dsdk": "workspace:*",
|
|
9
|
+
"@ledgerhq/ldmk-tool": "workspace:*",
|
|
10
|
+
"@ledgerhq/prettier-config-dsdk": "workspace:*",
|
|
11
|
+
"@ledgerhq/tsconfig-dsdk": "workspace:*",
|
|
12
|
+
"@ledgerhq/vitest-config-dmk": "workspace:*",
|
|
13
13
|
"ts-node": "catalog:"
|
|
14
14
|
},
|
|
15
15
|
"exports": {
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"license": "Apache-2.0",
|
|
31
31
|
"name": "@ledgerhq/speculos-device-controller",
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"@ledgerhq/device-management-kit": "workspace
|
|
33
|
+
"@ledgerhq/device-management-kit": "workspace:*"
|
|
34
34
|
},
|
|
35
35
|
"private": false,
|
|
36
36
|
"repository": {
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"watch:builds": "pnpm ldmk-tool watch --entryPoints index.ts,src/**/*.ts --tsconfig tsconfig.prod.json",
|
|
54
54
|
"watch:types": "concurrently \"tsc --watch -p tsconfig.prod.json\" \"tsc-alias --watch -p tsconfig.prod.json\""
|
|
55
55
|
},
|
|
56
|
-
"version": "0.0.0-
|
|
56
|
+
"version": "0.0.0-trusted-names-native-transfer-1-20260121120757"
|
|
57
57
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{DEFAULT_SCREENS as a}from"../internal/config/defaultScreens";import{createDefaultControllers as
|
|
1
|
+
import{DEFAULT_SCREENS as a}from"../internal/config/defaultScreens";import{createDefaultControllers as l}from"../../src/internal/di";import{pressButtons as p,pressSequence as u}from"../../src/internal/use-cases/buttonUseCases";import{mainButton as m,navigateNext as v,navigatePrevious as d,reject as y,secondaryButton as C,sign as g,tapLong as P,tapQuick as B}from"../../src/internal/use-cases/touchUseCases";const x=(i,o={})=>{const s={screens:o.screens??a,timeoutMs:o.timeoutMs,clientHeader:o.clientHeader},{buttons:r,touch:t}=l(i,s),n=p(r);return{buttonFactory:()=>({press:e=>r.press(e),left:()=>n.left(),right:()=>n.right(),both:()=>n.both(),pressSequence:(e,c)=>u(r,e,c)}),tapFactory:e=>({tapQuick:B(t,e),tapLong:P(t,e),sign:g(t,e),reject:y(t,e),navigateNext:v(t,e),navigatePrevious:d(t,e),mainButton:m(t,e),secondaryButton:C(t,e)})}};export{x as deviceControllerClientFactory};
|
|
2
2
|
//# sourceMappingURL=DeviceController.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/DeviceController.ts"],
|
|
4
|
-
"sourcesContent": ["import { DEFAULT_SCREENS } from \"@internal/config/defaultScreens\";\nimport type { ButtonController } from \"@internal/core/ButtonController\";\nimport type {\n ButtonKey,\n DeviceControllerOptions,\n DeviceScreens,\n PercentCoordinates,\n} from \"@internal/core/types\";\nimport { createDefaultControllers } from \"@root/src/internal/di\";\nimport {\n pressButtons,\n pressSequence,\n} from \"@root/src/internal/use-cases/buttonUseCases\";\nimport {\n mainButton,\n navigateNext,\n navigatePrevious,\n reject,\n secondaryButton,\n sign,\n tapLong,\n tapQuick,\n} from \"@root/src/internal/use-cases/touchUseCases\";\n\nexport type ButtonFactory = () => ButtonController & {\n left(): Promise<void>;\n right(): Promise<void>;\n both(): Promise<void>;\n pressSequence(keys: ButtonKey[], delayMs?: number): Promise<void>;\n};\n\nexport type TapFactory = (deviceKey: string) => {\n tapQuick: (point: PercentCoordinates) => Promise<void>;\n tapLong: (point: PercentCoordinates) => Promise<void>;\n sign: () => Promise<void>;\n reject: () => Promise<void>;\n navigateNext: () => Promise<void>;\n navigatePrevious: () => Promise<void>;\n mainButton: () => Promise<void>;\n secondaryButton: () => Promise<void>;\n};\n\nexport type DeviceControllerClientFactory = (\n baseURL: string,\n opts?: {\n timeoutMs?: number;\n clientHeader?: string;\n screens?: DeviceScreens<string>;\n },\n) => DeviceControllerClient;\n\nexport type DeviceControllerClient = {\n buttonFactory: ButtonFactory;\n tapFactory: TapFactory;\n};\n\nexport const deviceControllerClientFactory: DeviceControllerClientFactory = (\n baseURL,\n opts = {},\n) => {\n const resolved: DeviceControllerOptions = {\n screens: opts.screens ?? DEFAULT_SCREENS,\n timeoutMs: opts.timeoutMs,\n clientHeader: opts.clientHeader,\n };\n\n const { buttons, touch } = createDefaultControllers(baseURL, resolved);\n const press = pressButtons(buttons);\n\n return {\n buttonFactory: () => ({\n press: (key) => buttons.press(key),\n left: () => press.left(),\n right: () => press.right(),\n both: () => press.both(),\n pressSequence: (keys, delayMs) => pressSequence(buttons, keys, delayMs),\n }),\n tapFactory: (key) => ({\n tapQuick: tapQuick(touch, key),\n tapLong: tapLong(touch, key),\n sign: sign(touch, key),\n reject: reject(touch, key),\n navigateNext: navigateNext(touch, key),\n navigatePrevious: navigatePrevious(touch, key),\n mainButton: mainButton(touch, key),\n secondaryButton: secondaryButton(touch, key),\n }),\n };\n};\n\nexport type {\n ButtonKey,\n DeviceControllerOptions,\n DeviceScreens,\n PercentCoordinates,\n};\n"],
|
|
4
|
+
"sourcesContent": ["import { DEFAULT_SCREENS } from \"@internal/config/defaultScreens\";\nimport type { ButtonController } from \"@internal/core/ButtonController\";\nimport type {\n ButtonKey,\n DeviceControllerOptions,\n DeviceScreens,\n PercentCoordinates,\n} from \"@internal/core/types\";\nimport { createDefaultControllers } from \"@root/src/internal/di\";\nimport {\n pressButtons,\n pressSequence,\n} from \"@root/src/internal/use-cases/buttonUseCases\";\nimport {\n mainButton,\n navigateNext,\n navigatePrevious,\n reject,\n secondaryButton,\n sign,\n tapLong,\n tapQuick,\n} from \"@root/src/internal/use-cases/touchUseCases\";\n\nexport type ButtonFactory = () => ButtonController & {\n left(): Promise<void>;\n right(): Promise<void>;\n both(): Promise<void>;\n pressSequence(keys: ButtonKey[], delayMs?: number): Promise<void>;\n};\n\nexport type TapFactory = (deviceKey: string) => {\n tapQuick: (point: PercentCoordinates) => Promise<void>;\n tapLong: (point: PercentCoordinates, delayMs?: number) => Promise<void>;\n sign: (delayMs?: number) => Promise<void>;\n reject: () => Promise<void>;\n navigateNext: () => Promise<void>;\n navigatePrevious: () => Promise<void>;\n mainButton: () => Promise<void>;\n secondaryButton: () => Promise<void>;\n};\n\nexport type DeviceControllerClientFactory = (\n baseURL: string,\n opts?: {\n timeoutMs?: number;\n clientHeader?: string;\n screens?: DeviceScreens<string>;\n },\n) => DeviceControllerClient;\n\nexport type DeviceControllerClient = {\n buttonFactory: ButtonFactory;\n tapFactory: TapFactory;\n};\n\nexport const deviceControllerClientFactory: DeviceControllerClientFactory = (\n baseURL,\n opts = {},\n) => {\n const resolved: DeviceControllerOptions = {\n screens: opts.screens ?? DEFAULT_SCREENS,\n timeoutMs: opts.timeoutMs,\n clientHeader: opts.clientHeader,\n };\n\n const { buttons, touch } = createDefaultControllers(baseURL, resolved);\n const press = pressButtons(buttons);\n\n return {\n buttonFactory: () => ({\n press: (key) => buttons.press(key),\n left: () => press.left(),\n right: () => press.right(),\n both: () => press.both(),\n pressSequence: (keys, delayMs) => pressSequence(buttons, keys, delayMs),\n }),\n tapFactory: (key) => ({\n tapQuick: tapQuick(touch, key),\n tapLong: tapLong(touch, key),\n sign: sign(touch, key),\n reject: reject(touch, key),\n navigateNext: navigateNext(touch, key),\n navigatePrevious: navigatePrevious(touch, key),\n mainButton: mainButton(touch, key),\n secondaryButton: secondaryButton(touch, key),\n }),\n };\n};\n\nexport type {\n ButtonKey,\n DeviceControllerOptions,\n DeviceScreens,\n PercentCoordinates,\n};\n"],
|
|
5
5
|
"mappings": "AAAA,OAAS,mBAAAA,MAAuB,kCAQhC,OAAS,4BAAAC,MAAgC,wBACzC,OACE,gBAAAC,EACA,iBAAAC,MACK,8CACP,OACE,cAAAC,EACA,gBAAAC,EACA,oBAAAC,EACA,UAAAC,EACA,mBAAAC,EACA,QAAAC,EACA,WAAAC,EACA,YAAAC,MACK,6CAkCA,MAAMC,EAA+D,CAC1EC,EACAC,EAAO,CAAC,IACL,CACH,MAAMC,EAAoC,CACxC,QAASD,EAAK,SAAWd,EACzB,UAAWc,EAAK,UAChB,aAAcA,EAAK,YACrB,EAEM,CAAE,QAAAE,EAAS,MAAAC,CAAM,EAAIhB,EAAyBY,EAASE,CAAQ,EAC/DG,EAAQhB,EAAac,CAAO,EAElC,MAAO,CACL,cAAe,KAAO,CACpB,MAAQG,GAAQH,EAAQ,MAAMG,CAAG,EACjC,KAAM,IAAMD,EAAM,KAAK,EACvB,MAAO,IAAMA,EAAM,MAAM,EACzB,KAAM,IAAMA,EAAM,KAAK,EACvB,cAAe,CAACE,EAAMC,IAAYlB,EAAca,EAASI,EAAMC,CAAO,CACxE,GACA,WAAaF,IAAS,CACpB,SAAUR,EAASM,EAAOE,CAAG,EAC7B,QAAST,EAAQO,EAAOE,CAAG,EAC3B,KAAMV,EAAKQ,EAAOE,CAAG,EACrB,OAAQZ,EAAOU,EAAOE,CAAG,EACzB,aAAcd,EAAaY,EAAOE,CAAG,EACrC,iBAAkBb,EAAiBW,EAAOE,CAAG,EAC7C,WAAYf,EAAWa,EAAOE,CAAG,EACjC,gBAAiBX,EAAgBS,EAAOE,CAAG,CAC7C,EACF,CACF",
|
|
6
6
|
"names": ["DEFAULT_SCREENS", "createDefaultControllers", "pressButtons", "pressSequence", "mainButton", "navigateNext", "navigatePrevious", "reject", "secondaryButton", "sign", "tapLong", "tapQuick", "deviceControllerClientFactory", "baseURL", "opts", "resolved", "buttons", "touch", "press", "key", "keys", "delayMs"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/DeviceController.test.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { DeviceScreens } from \"@internal/core/types\";\n\nimport { deviceControllerClientFactory } from \"./DeviceController\";\n\ndescribe(\"deviceControllerClientFactory\", () => {\n it(\"returns a DeviceControllerdeviceClient with the expected shape\", () => {\n const deviceClient = deviceControllerClientFactory(\"http://localhost:0\");\n\n expect(deviceClient).toBeDefined();\n expect(deviceClient).toHaveProperty(\"buttonFactory\");\n expect(deviceClient).toHaveProperty(\"tapFactory\");\n\n const deviceButtons = deviceClient.buttonFactory();\n\n // button surfaces\n expect(typeof deviceButtons.press).toBe(\"function\");\n expect(typeof deviceButtons.left).toBe(\"function\");\n expect(typeof deviceButtons.right).toBe(\"function\");\n expect(typeof deviceButtons.both).toBe(\"function\");\n expect(typeof deviceButtons.pressSequence).toBe(\"function\");\n\n const deviceTaps = deviceClient.tapFactory(\"flex\");\n\n // tap surfaces\n expect(typeof deviceTaps.tapQuick).toBe(\"function\");\n expect(typeof deviceTaps.tapLong).toBe(\"function\");\n });\n\n it(\"does not throw when created with custom options\", () => {\n const screens: DeviceScreens<string> = {\n custom: { width: 128, height: 64 },\n stax: { width: 400, height: 672 },\n };\n const deviceClient = deviceControllerClientFactory(\"http://127.0.0.1:0\", {\n clientHeader: \"test-suite\",\n timeoutMs: 200,\n screens,\n });\n expect(deviceClient).toBeTruthy();\n });\n\n it(\"creates independent instances (no accidental shared state)\", () => {\n const a = deviceControllerClientFactory(\"http://localhost:0\");\n const b = deviceControllerClientFactory(\"http://localhost:0\");\n\n expect(a).not.toBe(b);\n expect(a.buttonFactory().press).not.toBe(b.buttonFactory().press);\n expect(a.tapFactory(\"flex\").tapQuick).not.toBe(\n b.tapFactory(\"flex\").tapQuick,\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "AAEA,OAAS,iCAAAA,MAAqC,qBAE9C,SAAS,gCAAiC,IAAM,CAC9C,GAAG,iEAAkE,IAAM,CACzE,MAAMC,EAAeD,EAA8B,oBAAoB,EAEvE,OAAOC,CAAY,EAAE,YAAY,EACjC,OAAOA,CAAY,EAAE,eAAe,eAAe,EACnD,OAAOA,CAAY,EAAE,eAAe,YAAY,EAEhD,MAAMC,EAAgBD,EAAa,cAAc,EAGjD,OAAO,OAAOC,EAAc,KAAK,EAAE,KAAK,UAAU,EAClD,OAAO,OAAOA,EAAc,IAAI,EAAE,KAAK,UAAU,EACjD,OAAO,OAAOA,EAAc,KAAK,EAAE,KAAK,UAAU,EAClD,OAAO,OAAOA,EAAc,IAAI,EAAE,KAAK,UAAU,EACjD,OAAO,OAAOA,EAAc,aAAa,EAAE,KAAK,UAAU,EAE1D,MAAMC,EAAaF,EAAa,WAAW,MAAM,EAGjD,OAAO,OAAOE,EAAW,QAAQ,EAAE,KAAK,UAAU,EAClD,OAAO,OAAOA,EAAW,OAAO,EAAE,KAAK,UAAU,CACnD,CAAC,EAED,GAAG,kDAAmD,IAAM,CAK1D,MAAMF,EAAeD,EAA8B,qBAAsB,CACvE,aAAc,aACd,UAAW,IACX,QAPqC,CACrC,OAAQ,CAAE,MAAO,IAAK,OAAQ,EAAG,EACjC,KAAM,CAAE,MAAO,IAAK,OAAQ,GAAI,CAClC,CAKA,CAAC,EACD,OAAOC,CAAY,EAAE,WAAW,CAClC,CAAC,EAED,GAAG,6DAA8D,IAAM,CACrE,MAAMG,EAAIJ,EAA8B,oBAAoB,EACtDK,EAAIL,EAA8B,oBAAoB,EAE5D,OAAOI,CAAC,EAAE,IAAI,KAAKC,CAAC,EACpB,OAAOD,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,KAAKC,EAAE,cAAc,EAAE,KAAK,EAChE,OAAOD,EAAE,WAAW,MAAM,EAAE,QAAQ,EAAE,IAAI,KACxCC,EAAE,WAAW,MAAM,EAAE,QACvB,CACF,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["deviceControllerClientFactory", "deviceClient", "deviceButtons", "deviceTaps", "a", "b"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/adapters/DefaultButtonController.test.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { AxiosInstance } from \"axios\";\n\nimport type { ButtonKey } from \"@internal/core/types\";\n\nimport { DefaultButtonController } from \"./DefaultButtonController\";\n\ndescribe(\"DefaultButtonController\", () => {\n let postMock: ReturnType<typeof vi.fn>;\n let axiosFake: AxiosInstance;\n let controller: DefaultButtonController;\n\n beforeEach(() => {\n postMock = vi.fn().mockResolvedValue({ status: 200, data: {} });\n axiosFake = { post: postMock } as unknown as AxiosInstance;\n controller = new DefaultButtonController(axiosFake);\n });\n\n const keys: ButtonKey[] = [\"left\", \"right\", \"both\"];\n\n it.each<ButtonKey>(keys)(\n \"press(%s) posts expected payload\",\n async (key: ButtonKey) => {\n await controller.press(key);\n\n expect(postMock).toHaveBeenCalledTimes(1);\n expect(postMock).toHaveBeenCalledWith(`/button/${key}`, {\n action: \"press-and-release\",\n });\n },\n );\n\n it(\"propagates HTTP errors\", async () => {\n const error = new Error(\"oups\");\n postMock.mockRejectedValueOnce(error);\n\n await expect(controller.press(\"left\" as ButtonKey)).rejects.toBe(error);\n });\n});\n"],
|
|
5
|
+
"mappings": "AAIA,OAAS,2BAAAA,MAA+B,4BAExC,SAAS,0BAA2B,IAAM,CACxC,IAAIC,EACAC,EACAC,EAEJ,WAAW,IAAM,CACfF,EAAW,GAAG,GAAG,EAAE,kBAAkB,CAAE,OAAQ,IAAK,KAAM,CAAC,CAAE,CAAC,EAC9DC,EAAY,CAAE,KAAMD,CAAS,EAC7BE,EAAa,IAAIH,EAAwBE,CAAS,CACpD,CAAC,EAED,MAAME,EAAoB,CAAC,OAAQ,QAAS,MAAM,EAElD,GAAG,KAAgBA,CAAI,EACrB,mCACA,MAAOC,GAAmB,CACxB,MAAMF,EAAW,MAAME,CAAG,EAE1B,OAAOJ,CAAQ,EAAE,sBAAsB,CAAC,EACxC,OAAOA,CAAQ,EAAE,qBAAqB,WAAWI,CAAG,GAAI,CACtD,OAAQ,mBACV,CAAC,CACH,CACF,EAEA,GAAG,yBAA0B,SAAY,CACvC,MAAMC,EAAQ,IAAI,MAAM,MAAM,EAC9BL,EAAS,sBAAsBK,CAAK,EAEpC,MAAM,OAAOH,EAAW,MAAM,MAAmB,CAAC,EAAE,QAAQ,KAAKG,CAAK,CACxE,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["DefaultButtonController", "postMock", "axiosFake", "controller", "keys", "key", "error"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/adapters/DefaultTouchController.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n/* eslint-disable @typescript-eslint/no-unsafe-member-access */\nimport type { AxiosInstance } from \"axios\";\n\nimport type { PercentCoordinates } from \"../core/types\";\nimport { DefaultTouchController } from \"./DefaultTouchController\";\n\ndescribe(\"DefaultTouchController\", () => {\n let postMock: ReturnType<typeof vi.fn>;\n let axiosFake: AxiosInstance;\n\n const axisA = {\n xy: vi.fn((xPct: number, yPct: number) => ({\n x: Math.round(xPct * 10),\n y: Math.round(yPct * 20),\n })),\n };\n const axisB = {\n xy: vi.fn((xPct: number, yPct: number) => ({\n x: Math.round(100 + xPct),\n y: Math.round(200 + yPct),\n })),\n };\n let axesFake: Record<\n string,\n { xy: (x: number, y: number) => { x: number; y: number } }\n >;\n\n let controller: DefaultTouchController<string>;\n\n beforeEach(() => {\n postMock = vi.fn().mockResolvedValue({ status: 200, data: {} });\n axiosFake = { post: postMock } as unknown as AxiosInstance;\n\n axisA.xy.mockClear();\n axisB.xy.mockClear();\n\n axesFake = { devA: axisA, devB: axisB };\n controller = new DefaultTouchController(axiosFake, axesFake as any);\n });\n\n const point: PercentCoordinates = { x: 12, y: 45 };\n\n it(\"tapAndRelease: converts percent to absolute via axes and POSTs expected body\", async () => {\n await controller.tapAndRelease(\"devA\", point);\n\n expect(axisA.xy).toHaveBeenCalledTimes(1);\n expect(axisA.xy).toHaveBeenCalledWith(point.x, point.y);\n\n const expectedAbs = (axisA.xy.mock.results as any)[0].value;\n expect(postMock).toHaveBeenCalledTimes(1);\n expect(postMock).toHaveBeenCalledWith(\"/finger\", {\n action: \"press-and-release\",\n ...expectedAbs,\n });\n });\n\n it(\"tap: converts via axes and POSTs action 'press'\", async () => {\n await controller.tap(\"devB\", point);\n\n expect(axisB.xy).toHaveBeenCalledWith(point.x, point.y);\n const expectedAbs = axisB.xy.mock.results[0]?.value;\n\n expect(postMock).toHaveBeenCalledWith(\"/finger\", {\n action: \"press\",\n ...expectedAbs,\n });\n });\n\n it(\"release: converts via axes and POSTs action 'release'\", async () => {\n await controller.release(\"devA\", point);\n\n const expectedAbs = axisA.xy.mock.results[0]!.value;\n expect(postMock).toHaveBeenCalledWith(\"/finger\", {\n action: \"release\",\n ...expectedAbs,\n });\n });\n\n it(\"throws an error when device key is unknown\", async () => {\n await expect(controller.tap(\"unknownDevice\" as any, point)).rejects.toThrow(\n /\\[Touch] Unknown device key \"unknownDevice\".*Known keys: devA, devB/,\n );\n expect(postMock).not.toHaveBeenCalled();\n });\n\n it(\"propagates HTTP errors from axios client\", async () => {\n const boom = new Error(\"backend down\");\n postMock.mockRejectedValueOnce(boom);\n\n await expect(controller.tapAndRelease(\"devA\", point)).rejects.toBe(boom);\n });\n});\n\ndescribe(\"percent validation\", () => {\n let controller: DefaultTouchController<string>;\n let postMock: ReturnType<typeof vi.fn>;\n let axiosFake: AxiosInstance;\n\n const axis = {\n xy: vi.fn((xPct: number, yPct: number) => ({ x: xPct, y: yPct })),\n };\n const axesFake = { devA: axis };\n\n beforeEach(() => {\n postMock = vi.fn().mockResolvedValue({ status: 200, data: {} });\n axiosFake = { post: postMock } as unknown as AxiosInstance;\n axis.xy.mockClear();\n controller = new DefaultTouchController(axiosFake, axesFake as any);\n });\n\n it(\"accepts boundary values 0 and 100\", async () => {\n await controller.tapAndRelease(\"devA\", { x: 0, y: 100 });\n await controller.tap(\"devA\", { x: 100, y: 0 });\n await controller.release(\"devA\", { x: 50, y: 99 });\n\n // should have sent 3 HTTP calls if all accepted\n expect(postMock).toHaveBeenCalledTimes(3);\n });\n\n it(\"rejects values outside [0, 100], non-finite, negative and non-integer\", async () => {\n const badPoints = [\n { x: 140, y: 50 },\n { x: -1, y: 50 },\n { x: 50, y: 120 },\n { x: 50, y: -0.01 },\n ];\n\n for (const p of badPoints) {\n await expect(\n controller.tapAndRelease(\"devA\", p as any),\n ).rejects.toThrow();\n }\n\n // no HTTP calls should be made for invalid input\n expect(postMock).not.toHaveBeenCalled();\n });\n\n it(\"rejects NaN or non-finite values\", async () => {\n const badPoints = [\n { x: Number.NaN, y: 50 },\n { x: 50, y: Number.NaN },\n { x: Number.POSITIVE_INFINITY, y: 10 },\n { x: 10, y: Number.NEGATIVE_INFINITY },\n ];\n\n for (const p of badPoints) {\n await expect(controller.tap(\"devA\", p as any)).rejects.toThrow(\n /percent/i,\n );\n }\n expect(postMock).not.toHaveBeenCalled();\n });\n});\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["DefaultTouchController", "postMock", "axiosFake", "axisA", "xPct", "yPct", "axisB", "axesFake", "controller", "point", "expectedAbs", "boom", "axis", "badPoints", "p"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/buttonUseCases.test.ts"],
|
|
4
|
-
"sourcesContent": ["
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import { pressButtons, pressSequence } from \"./buttonUseCases\";\n\ntype ButtonKey = \"left\" | \"right\" | \"both\";\ntype ButtonController = { press: (k: ButtonKey) => Promise<void> };\n\nconst tick = () => Promise.resolve();\n\ndescribe(\"buttonUsecases\", () => {\n let controller: ButtonController & { press: ReturnType<typeof vi.fn> };\n\n beforeEach(() => {\n controller = {\n press: vi.fn(() => Promise.resolve()),\n };\n });\n\n afterEach(() => {\n vi.useRealTimers();\n vi.restoreAllMocks();\n });\n\n describe(\"pressButtons\", () => {\n it(\"returns functions that call controller.press with the correct keys\", async () => {\n const api = pressButtons(controller);\n\n await api.left();\n await api.right();\n await api.both();\n\n expect(controller.press).toHaveBeenCalledTimes(3);\n expect(controller.press).toHaveBeenNthCalledWith(1, \"left\");\n expect(controller.press).toHaveBeenNthCalledWith(2, \"right\");\n expect(controller.press).toHaveBeenNthCalledWith(3, \"both\");\n });\n });\n\n describe(\"pressSequence\", () => {\n it(\"presses keys in order and waits the default 200ms after each key (including last)\", async () => {\n vi.useFakeTimers();\n const timeoutSpy = vi.spyOn(globalThis, \"setTimeout\");\n const keys: ButtonKey[] = [\"left\", \"right\", \"both\"];\n\n const promise = pressSequence(controller, keys); // delay = 200\n\n // first press happens immediately (sync call of controller.press)\n expect(controller.press).toHaveBeenCalledTimes(1);\n expect(controller.press).toHaveBeenNthCalledWith(1, \"left\");\n\n // timeout is scheduled after the awaited press resolves\n await tick();\n expect(timeoutSpy).toHaveBeenCalledTimes(1);\n expect(timeoutSpy).toHaveBeenLastCalledWith(expect.any(Function), 200);\n\n // first delay elapse -> second press\n await vi.advanceTimersByTimeAsync(200);\n await tick();\n expect(controller.press).toHaveBeenCalledTimes(2);\n expect(controller.press).toHaveBeenNthCalledWith(2, \"right\");\n\n // next delay -> third press\n await vi.advanceTimersByTimeAsync(200);\n await tick();\n expect(controller.press).toHaveBeenCalledTimes(3);\n expect(controller.press).toHaveBeenNthCalledWith(3, \"both\");\n\n // final post-press delay\n await vi.advanceTimersByTimeAsync(200);\n await expect(promise).resolves.toBeUndefined();\n });\n\n it(\"uses the provided custom delay\", async () => {\n vi.useFakeTimers();\n const timeoutSpy = vi.spyOn(globalThis, \"setTimeout\");\n const keys: ButtonKey[] = [\"left\", \"right\"];\n\n const promise = pressSequence(controller, keys, 75);\n\n await tick();\n expect(timeoutSpy).toHaveBeenCalledTimes(1);\n expect(timeoutSpy).toHaveBeenLastCalledWith(expect.any(Function), 75);\n\n await vi.advanceTimersByTimeAsync(75);\n await tick();\n expect(timeoutSpy).toHaveBeenCalledTimes(2);\n expect(timeoutSpy).toHaveBeenLastCalledWith(expect.any(Function), 75);\n\n await vi.advanceTimersByTimeAsync(75);\n await expect(promise).resolves.toBeUndefined();\n });\n\n it(\"rejects if a press fails and stops processing subsequent keys\", async () => {\n vi.useFakeTimers();\n\n const err = new Error(\"oups\");\n controller.press\n .mockResolvedValueOnce(undefined) // first ok\n .mockRejectedValueOnce(err); // second fails\n\n const keys: ButtonKey[] = [\"left\", \"right\", \"both\"];\n\n const p = pressSequence(controller, keys, 50);\n\n const assertion = expect(p).rejects.toThrow(\"oups\");\n\n await Promise.resolve(); // let first setTimeout schedule\n await vi.advanceTimersByTimeAsync(50);\n await Promise.resolve();\n\n await assertion;\n\n expect(controller.press).toHaveBeenCalledTimes(2);\n expect(controller.press).toHaveBeenNthCalledWith(1, \"left\");\n expect(controller.press).toHaveBeenNthCalledWith(2, \"right\");\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["pressButtons", "pressSequence", "tick", "controller", "api", "timeoutSpy", "promise", "err", "p", "assertion"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const
|
|
1
|
+
const r=5e3,c=(t,e)=>async(n,a=r)=>{await t.tap(e,n),await new Promise(s=>setTimeout(s,a)),await t.release(e,n)},o=(t,e)=>async n=>await t.tapAndRelease(e,n),i=(t,e)=>async(n=r)=>await c(t,e)({x:85,y:80},n),x=(t,e)=>async()=>await o(t,e)({x:20,y:90}),K=(t,e)=>async()=>await o(t,e)({x:90,y:90}),l=(t,e)=>async()=>await o(t,e)({x:45,y:90}),y=(t,e)=>async()=>await o(t,e)({x:50,y:80}),p=(t,e)=>async()=>await o(t,e)({x:50,y:90});export{y as mainButton,K as navigateNext,l as navigatePrevious,x as reject,p as secondaryButton,i as sign,c as tapLong,o as tapQuick};
|
|
2
2
|
//# sourceMappingURL=touchUseCases.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/use-cases/touchUseCases.ts"],
|
|
4
|
-
"sourcesContent": ["import type { PercentCoordinates } from \"@internal/core/types\";\nimport { type TouchController } from \"@root/src/internal/core/TouchController\";\n\nconst TAP_LONG_TIME_MS = 5000;\n\nexport const tapLong =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (point: PercentCoordinates, delayMs: number = TAP_LONG_TIME_MS) => {\n await touch.tap(deviceKey, point);\n await new Promise((r) => setTimeout(r, delayMs));\n await touch.release(deviceKey, point);\n };\n\nexport const tapQuick =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (point: PercentCoordinates) =>\n await touch.tapAndRelease(deviceKey, point);\n\nexport const sign =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapLong(touch, deviceKey)({ x: 85, y: 80 });\n\nexport const reject =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 20, y: 90 });\n\nexport const navigateNext =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 90, y: 90 });\n\nexport const navigatePrevious =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 45, y: 90 });\n\nexport const mainButton =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 50, y: 80 });\n\nexport const secondaryButton =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 50, y: 90 });\n"],
|
|
5
|
-
"mappings": "AAGA,MAAMA,EAAmB,IAEZC,EACX,CAAmBC,EAA2BC,IAC9C,MAAOC,EAA2BC,EAAkBL,IAAqB,CACvE,MAAME,EAAM,IAAIC,EAAWC,CAAK,EAChC,MAAM,IAAI,QAASE,GAAM,WAAWA,EAAGD,CAAO,CAAC,EAC/C,MAAMH,EAAM,QAAQC,EAAWC,CAAK,CACtC,EAEWG,EACX,CAAmBL,EAA2BC,IAC9C,MAAOC,GACL,MAAMF,EAAM,cAAcC,EAAWC,CAAK,EAEjCI,EACX,CAAmBN,EAA2BC,IAC9C,
|
|
4
|
+
"sourcesContent": ["import type { PercentCoordinates } from \"@internal/core/types\";\nimport { type TouchController } from \"@root/src/internal/core/TouchController\";\n\nconst TAP_LONG_TIME_MS = 5000;\n\nexport const tapLong =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (point: PercentCoordinates, delayMs: number = TAP_LONG_TIME_MS) => {\n await touch.tap(deviceKey, point);\n await new Promise((r) => setTimeout(r, delayMs));\n await touch.release(deviceKey, point);\n };\n\nexport const tapQuick =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (point: PercentCoordinates) =>\n await touch.tapAndRelease(deviceKey, point);\n\nexport const sign =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async (delayMs: number = TAP_LONG_TIME_MS) =>\n await tapLong(touch, deviceKey)({ x: 85, y: 80 }, delayMs);\n\nexport const reject =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 20, y: 90 });\n\nexport const navigateNext =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 90, y: 90 });\n\nexport const navigatePrevious =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 45, y: 90 });\n\nexport const mainButton =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 50, y: 80 });\n\nexport const secondaryButton =\n <K extends string>(touch: TouchController<K>, deviceKey: K) =>\n async () =>\n await tapQuick(touch, deviceKey)({ x: 50, y: 90 });\n"],
|
|
5
|
+
"mappings": "AAGA,MAAMA,EAAmB,IAEZC,EACX,CAAmBC,EAA2BC,IAC9C,MAAOC,EAA2BC,EAAkBL,IAAqB,CACvE,MAAME,EAAM,IAAIC,EAAWC,CAAK,EAChC,MAAM,IAAI,QAASE,GAAM,WAAWA,EAAGD,CAAO,CAAC,EAC/C,MAAMH,EAAM,QAAQC,EAAWC,CAAK,CACtC,EAEWG,EACX,CAAmBL,EAA2BC,IAC9C,MAAOC,GACL,MAAMF,EAAM,cAAcC,EAAWC,CAAK,EAEjCI,EACX,CAAmBN,EAA2BC,IAC9C,MAAOE,EAAkBL,IACvB,MAAMC,EAAQC,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,EAAGE,CAAO,EAEhDI,EACX,CAAmBP,EAA2BC,IAC9C,SACE,MAAMI,EAASL,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC,EAExCO,EACX,CAAmBR,EAA2BC,IAC9C,SACE,MAAMI,EAASL,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC,EAExCQ,EACX,CAAmBT,EAA2BC,IAC9C,SACE,MAAMI,EAASL,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC,EAExCS,EACX,CAAmBV,EAA2BC,IAC9C,SACE,MAAMI,EAASL,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC,EAExCU,EACX,CAAmBX,EAA2BC,IAC9C,SACE,MAAMI,EAASL,EAAOC,CAAS,EAAE,CAAE,EAAG,GAAI,EAAG,EAAG,CAAC",
|
|
6
6
|
"names": ["TAP_LONG_TIME_MS", "tapLong", "touch", "deviceKey", "point", "delayMs", "r", "tapQuick", "sign", "reject", "navigateNext", "navigatePrevious", "mainButton", "secondaryButton"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/utils/axisClamp.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/no-unsafe-assignment */\n\nimport type { DeviceScreens, Percent } from \"@internal/core/types\";\n\nimport { type AxisMap, clampValue, createAxes, createAxis } from \"./axisClamp\";\n\nconst p = (n: number) => n as unknown as Percent;\n\ndescribe(\"axisClamp helpers\", () => {\n describe(\"clampValue\", () => {\n it(\"floors and clamps to [0, width]\", () => {\n const clamp = clampValue(200);\n\n expect(clamp(p(0))).toBe(0);\n expect(clamp(p(50))).toBe(100); // 200 * 0.5 = 100\n expect(clamp(p(50.4))).toBe(100); // floor(200 * 0.504) = 100\n expect(clamp(p(50.5))).toBe(101); // floor(200 * 0.505) = 101\n expect(clamp(p(100))).toBe(200);\n expect(clamp(p(150))).toBe(200); // clamped\n expect(clamp(p(-10))).toBe(0); // clamped\n });\n });\n\n describe(\"createAxis\", () => {\n it(\"exposes vw, vh and xy with consistent flooring + clamping\", () => {\n const axis = createAxis(300, 200);\n\n // vw / vh\n expect(axis.vw(p(25))).toBe(75); // 300 * 0.25\n expect(axis.vh(p(75))).toBe(150); // 200 * 0.75\n\n // xy nominal\n expect(axis.xy(p(10), p(90))).toEqual({ x: 30, y: 180 });\n\n // xy clamps both axes\n expect(axis.xy(p(150), p(-20))).toEqual({ x: 300, y: 0 });\n\n // flooring behavior with fractional percent\n const xy = axis.xy(p(33.4), p(66.6));\n expect(xy.x).toBe(Math.floor(300 * 0.334));\n expect(xy.y).toBe(Math.floor(200 * 0.666));\n });\n });\n\n describe(\"createAxes\", () => {\n it(\"creates an AxisMap for all device keys with matching dimensions\", () => {\n const screens: DeviceScreens<\"devA\" | \"devB\"> = {\n devA: { width: 200, height: 100 } as any,\n devB: { width: 320, height: 480 } as any,\n };\n\n const axes: AxisMap<\"devA\" | \"devB\"> = createAxes(screens);\n\n // contains both keys\n expect(Object.keys(axes).sort()).toEqual([\"devA\", \"devB\"]);\n\n // devA\n expect(axes.devA.vw(p(100))).toBe(200);\n expect(axes.devA.vh(p(100))).toBe(100);\n expect(axes.devA.xy(p(120), p(-10))).toEqual({ x: 200, y: 0 });\n\n // devB\n expect(axes.devB.vw(p(50))).toBe(160);\n expect(axes.devB.vh(p(50))).toBe(240);\n expect(axes.devB.xy(p(33.3), p(66.7))).toEqual({\n x: Math.floor(320 * 0.333),\n y: Math.floor(480 * 0.667),\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAKA,OAAuB,cAAAA,EAAY,cAAAC,EAAY,cAAAC,MAAkB,cAEjE,MAAMC,EAAKC,GAAcA,EAEzB,SAAS,oBAAqB,IAAM,CAClC,SAAS,aAAc,IAAM,CAC3B,GAAG,kCAAmC,IAAM,CAC1C,MAAMC,EAAQL,EAAW,GAAG,EAE5B,OAAOK,EAAMF,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAC1B,OAAOE,EAAMF,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EAC7B,OAAOE,EAAMF,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,EAC/B,OAAOE,EAAMF,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,GAAG,EAC/B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAC9B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EAC9B,OAAOE,EAAMF,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAC9B,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,4DAA6D,IAAM,CACpE,MAAMG,EAAOJ,EAAW,IAAK,GAAG,EAGhC,OAAOI,EAAK,GAAGH,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,EAC9B,OAAOG,EAAK,GAAGH,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EAG/B,OAAOG,EAAK,GAAGH,EAAE,EAAE,EAAGA,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,GAAI,EAAG,GAAI,CAAC,EAGvD,OAAOG,EAAK,GAAGH,EAAE,GAAG,EAAGA,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,IAAK,EAAG,CAAE,CAAC,EAGxD,MAAMI,EAAKD,EAAK,GAAGH,EAAE,IAAI,EAAGA,EAAE,IAAI,CAAC,EACnC,OAAOI,EAAG,CAAC,EAAE,KAAK,KAAK,MAAM,IAAM,IAAK,CAAC,EACzC,OAAOA,EAAG,CAAC,EAAE,KAAK,KAAK,MAAM,IAAM,IAAK,CAAC,CAC3C,CAAC,CACH,CAAC,EAED,SAAS,aAAc,IAAM,CAC3B,GAAG,kEAAmE,IAAM,CAM1E,MAAMC,EAAiCP,EALS,CAC9C,KAAM,CAAE,MAAO,IAAK,OAAQ,GAAI,EAChC,KAAM,CAAE,MAAO,IAAK,OAAQ,GAAI,CAClC,CAEyD,EAGzD,OAAO,OAAO,KAAKO,CAAI,EAAE,KAAK,CAAC,EAAE,QAAQ,CAAC,OAAQ,MAAM,CAAC,EAGzD,OAAOA,EAAK,KAAK,GAAGL,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EACrC,OAAOK,EAAK,KAAK,GAAGL,EAAE,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,EACrC,OAAOK,EAAK,KAAK,GAAGL,EAAE,GAAG,EAAGA,EAAE,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAE,EAAG,IAAK,EAAG,CAAE,CAAC,EAG7D,OAAOK,EAAK,KAAK,GAAGL,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EACpC,OAAOK,EAAK,KAAK,GAAGL,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,GAAG,EACpC,OAAOK,EAAK,KAAK,GAAGL,EAAE,IAAI,EAAGA,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,CAC7C,EAAG,KAAK,MAAM,IAAM,IAAK,EACzB,EAAG,KAAK,MAAM,IAAM,IAAK,CAC3B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
6
|
"names": ["clampValue", "createAxes", "createAxis", "p", "n", "clamp", "axis", "xy", "axes"]
|
|
7
7
|
}
|
|
@@ -8,8 +8,8 @@ export type ButtonFactory = () => ButtonController & {
|
|
|
8
8
|
};
|
|
9
9
|
export type TapFactory = (deviceKey: string) => {
|
|
10
10
|
tapQuick: (point: PercentCoordinates) => Promise<void>;
|
|
11
|
-
tapLong: (point: PercentCoordinates) => Promise<void>;
|
|
12
|
-
sign: () => Promise<void>;
|
|
11
|
+
tapLong: (point: PercentCoordinates, delayMs?: number) => Promise<void>;
|
|
12
|
+
sign: (delayMs?: number) => Promise<void>;
|
|
13
13
|
reject: () => Promise<void>;
|
|
14
14
|
navigateNext: () => Promise<void>;
|
|
15
15
|
navigatePrevious: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceController.d.ts","sourceRoot":"","sources":["../../../../src/api/DeviceController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EACV,SAAS,EACT,uBAAuB,EACvB,aAAa,EACb,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAiB9B,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,GAAG;IACnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"DeviceController.d.ts","sourceRoot":"","sources":["../../../../src/api/DeviceController.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACxE,OAAO,KAAK,EACV,SAAS,EACT,uBAAuB,EACvB,aAAa,EACb,kBAAkB,EACnB,MAAM,sBAAsB,CAAC;AAiB9B,MAAM,MAAM,aAAa,GAAG,MAAM,gBAAgB,GAAG;IACnD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,MAAM,KAAK;IAC9C,QAAQ,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvD,OAAO,EAAE,CAAC,KAAK,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,UAAU,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC,eAAe,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,6BAA6B,GAAG,CAC1C,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;IACL,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CACjC,KACE,sBAAsB,CAAC;AAE5B,MAAM,MAAM,sBAAsB,GAAG;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,6BAgC3C,CAAC;AAEF,YAAY,EACV,SAAS,EACT,uBAAuB,EACvB,aAAa,EACb,kBAAkB,GACnB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import type { PercentCoordinates } from "../core/types";
|
|
|
2
2
|
import { type TouchController } from "../../../src/internal/core/TouchController";
|
|
3
3
|
export declare const tapLong: <K extends string>(touch: TouchController<K>, deviceKey: K) => (point: PercentCoordinates, delayMs?: number) => Promise<void>;
|
|
4
4
|
export declare const tapQuick: <K extends string>(touch: TouchController<K>, deviceKey: K) => (point: PercentCoordinates) => Promise<void>;
|
|
5
|
-
export declare const sign: <K extends string>(touch: TouchController<K>, deviceKey: K) => () => Promise<void>;
|
|
5
|
+
export declare const sign: <K extends string>(touch: TouchController<K>, deviceKey: K) => (delayMs?: number) => Promise<void>;
|
|
6
6
|
export declare const reject: <K extends string>(touch: TouchController<K>, deviceKey: K) => () => Promise<void>;
|
|
7
7
|
export declare const navigateNext: <K extends string>(touch: TouchController<K>, deviceKey: K) => () => Promise<void>;
|
|
8
8
|
export declare const navigatePrevious: <K extends string>(touch: TouchController<K>, deviceKey: K) => () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"touchUseCases.d.ts","sourceRoot":"","sources":["../../../../../src/internal/use-cases/touchUseCases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAI/E,eAAO,MAAM,OAAO,GACjB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MACnD,OAAO,kBAAkB,EAAE,UAAS,MAAyB,kBAInE,CAAC;AAEJ,eAAO,MAAM,QAAQ,GAClB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MACnD,OAAO,kBAAkB,kBACa,CAAC;AAEhD,eAAO,MAAM,IAAI,GACd,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"touchUseCases.d.ts","sourceRoot":"","sources":["../../../../../src/internal/use-cases/touchUseCases.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,yCAAyC,CAAC;AAI/E,eAAO,MAAM,OAAO,GACjB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MACnD,OAAO,kBAAkB,EAAE,UAAS,MAAyB,kBAInE,CAAC;AAEJ,eAAO,MAAM,QAAQ,GAClB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MACnD,OAAO,kBAAkB,kBACa,CAAC;AAEhD,eAAO,MAAM,IAAI,GACd,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,MACnD,UAAS,MAAyB,kBACmB,CAAC;AAE/D,eAAO,MAAM,MAAM,GAChB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,wBAEN,CAAC;AAEvD,eAAO,MAAM,YAAY,GACtB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,wBAEN,CAAC;AAEvD,eAAO,MAAM,gBAAgB,GAC1B,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,wBAEN,CAAC;AAEvD,eAAO,MAAM,UAAU,GACpB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,wBAEN,CAAC;AAEvD,eAAO,MAAM,eAAe,GACzB,CAAC,SAAS,MAAM,EAAE,OAAO,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,wBAEN,CAAC"}
|