lim 0.28.1 → 0.28.3

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.
Files changed (258) hide show
  1. package/README.md +3 -2
  2. package/dist/base-command.d.ts +1 -0
  3. package/dist/base-command.d.ts.map +1 -1
  4. package/dist/base-command.js +10 -0
  5. package/dist/base-command.js.map +1 -1
  6. package/dist/commands/android/connect.d.ts +1 -0
  7. package/dist/commands/android/connect.d.ts.map +1 -1
  8. package/dist/commands/android/delete.d.ts +1 -0
  9. package/dist/commands/android/delete.d.ts.map +1 -1
  10. package/dist/commands/android/element-tree.d.ts +1 -0
  11. package/dist/commands/android/element-tree.d.ts.map +1 -1
  12. package/dist/commands/android/element-tree.js +1 -1
  13. package/dist/commands/android/element-tree.js.map +1 -1
  14. package/dist/commands/android/find-element.d.ts +1 -0
  15. package/dist/commands/android/find-element.d.ts.map +1 -1
  16. package/dist/commands/android/find-element.js +1 -1
  17. package/dist/commands/android/find-element.js.map +1 -1
  18. package/dist/commands/android/get.d.ts +1 -0
  19. package/dist/commands/android/get.d.ts.map +1 -1
  20. package/dist/commands/android/install-app.d.ts +1 -0
  21. package/dist/commands/android/install-app.d.ts.map +1 -1
  22. package/dist/commands/android/install-app.js +1 -1
  23. package/dist/commands/android/install-app.js.map +1 -1
  24. package/dist/commands/android/list.d.ts +1 -0
  25. package/dist/commands/android/list.d.ts.map +1 -1
  26. package/dist/commands/android/open-url.d.ts +1 -0
  27. package/dist/commands/android/open-url.d.ts.map +1 -1
  28. package/dist/commands/android/open-url.js +1 -1
  29. package/dist/commands/android/open-url.js.map +1 -1
  30. package/dist/commands/android/play-on-microphone.d.ts +1 -0
  31. package/dist/commands/android/play-on-microphone.d.ts.map +1 -1
  32. package/dist/commands/android/press-key.d.ts +1 -0
  33. package/dist/commands/android/press-key.d.ts.map +1 -1
  34. package/dist/commands/android/press-key.js +1 -1
  35. package/dist/commands/android/press-key.js.map +1 -1
  36. package/dist/commands/android/record.d.ts +1 -0
  37. package/dist/commands/android/record.d.ts.map +1 -1
  38. package/dist/commands/android/record.js +2 -2
  39. package/dist/commands/android/record.js.map +1 -1
  40. package/dist/commands/android/screenshot.d.ts +1 -0
  41. package/dist/commands/android/screenshot.d.ts.map +1 -1
  42. package/dist/commands/android/screenshot.js +1 -1
  43. package/dist/commands/android/screenshot.js.map +1 -1
  44. package/dist/commands/android/scroll.d.ts +1 -0
  45. package/dist/commands/android/scroll.d.ts.map +1 -1
  46. package/dist/commands/android/scroll.js +1 -1
  47. package/dist/commands/android/scroll.js.map +1 -1
  48. package/dist/commands/android/set-instance.d.ts +1 -0
  49. package/dist/commands/android/set-instance.d.ts.map +1 -1
  50. package/dist/commands/android/set-wifi-bandwidth.d.ts +1 -0
  51. package/dist/commands/android/set-wifi-bandwidth.d.ts.map +1 -1
  52. package/dist/commands/android/set-wifi-bandwidth.js +1 -1
  53. package/dist/commands/android/set-wifi-bandwidth.js.map +1 -1
  54. package/dist/commands/android/sync.d.ts +1 -0
  55. package/dist/commands/android/sync.d.ts.map +1 -1
  56. package/dist/commands/android/tap-element.d.ts +1 -0
  57. package/dist/commands/android/tap-element.d.ts.map +1 -1
  58. package/dist/commands/android/tap-element.js +1 -1
  59. package/dist/commands/android/tap-element.js.map +1 -1
  60. package/dist/commands/android/tap.d.ts +1 -0
  61. package/dist/commands/android/tap.d.ts.map +1 -1
  62. package/dist/commands/android/tap.js +1 -1
  63. package/dist/commands/android/tap.js.map +1 -1
  64. package/dist/commands/android/type.d.ts +1 -0
  65. package/dist/commands/android/type.d.ts.map +1 -1
  66. package/dist/commands/android/type.js +1 -1
  67. package/dist/commands/android/type.js.map +1 -1
  68. package/dist/commands/asset/delete.d.ts +1 -0
  69. package/dist/commands/asset/delete.d.ts.map +1 -1
  70. package/dist/commands/asset/list.d.ts +1 -0
  71. package/dist/commands/asset/list.d.ts.map +1 -1
  72. package/dist/commands/asset/pull.d.ts +1 -0
  73. package/dist/commands/asset/pull.d.ts.map +1 -1
  74. package/dist/commands/asset/push.d.ts +1 -0
  75. package/dist/commands/asset/push.d.ts.map +1 -1
  76. package/dist/commands/gradle/build.d.ts +1 -0
  77. package/dist/commands/gradle/build.d.ts.map +1 -1
  78. package/dist/commands/gradle/create.d.ts +1 -0
  79. package/dist/commands/gradle/create.d.ts.map +1 -1
  80. package/dist/commands/gradle/delete.d.ts +1 -0
  81. package/dist/commands/gradle/delete.d.ts.map +1 -1
  82. package/dist/commands/gradle/get.d.ts +1 -0
  83. package/dist/commands/gradle/get.d.ts.map +1 -1
  84. package/dist/commands/gradle/list.d.ts +1 -0
  85. package/dist/commands/gradle/list.d.ts.map +1 -1
  86. package/dist/commands/gradle/set-instance.d.ts +1 -0
  87. package/dist/commands/gradle/set-instance.d.ts.map +1 -1
  88. package/dist/commands/ios/app-log.d.ts +1 -0
  89. package/dist/commands/ios/app-log.d.ts.map +1 -1
  90. package/dist/commands/ios/app-log.js +1 -1
  91. package/dist/commands/ios/app-log.js.map +1 -1
  92. package/dist/commands/ios/camera.d.ts +1 -0
  93. package/dist/commands/ios/camera.d.ts.map +1 -1
  94. package/dist/commands/ios/create.d.ts +1 -0
  95. package/dist/commands/ios/create.d.ts.map +1 -1
  96. package/dist/commands/ios/delete-file.d.ts +1 -0
  97. package/dist/commands/ios/delete-file.d.ts.map +1 -1
  98. package/dist/commands/ios/delete.d.ts +1 -0
  99. package/dist/commands/ios/delete.d.ts.map +1 -1
  100. package/dist/commands/ios/element-tree.d.ts +1 -0
  101. package/dist/commands/ios/element-tree.d.ts.map +1 -1
  102. package/dist/commands/ios/element-tree.js +1 -1
  103. package/dist/commands/ios/element-tree.js.map +1 -1
  104. package/dist/commands/ios/get.d.ts +1 -0
  105. package/dist/commands/ios/get.d.ts.map +1 -1
  106. package/dist/commands/ios/info.d.ts +1 -0
  107. package/dist/commands/ios/info.d.ts.map +1 -1
  108. package/dist/commands/ios/info.js +1 -1
  109. package/dist/commands/ios/info.js.map +1 -1
  110. package/dist/commands/ios/install-app.d.ts +1 -0
  111. package/dist/commands/ios/install-app.d.ts.map +1 -1
  112. package/dist/commands/ios/install-app.js +1 -1
  113. package/dist/commands/ios/install-app.js.map +1 -1
  114. package/dist/commands/ios/keychain/generate-key.d.ts +1 -0
  115. package/dist/commands/ios/keychain/generate-key.d.ts.map +1 -1
  116. package/dist/commands/ios/keychain/restore.d.ts +1 -0
  117. package/dist/commands/ios/keychain/restore.d.ts.map +1 -1
  118. package/dist/commands/ios/keychain/save.d.ts +1 -0
  119. package/dist/commands/ios/keychain/save.d.ts.map +1 -1
  120. package/dist/commands/ios/launch-app.d.ts +1 -0
  121. package/dist/commands/ios/launch-app.d.ts.map +1 -1
  122. package/dist/commands/ios/launch-app.js +1 -1
  123. package/dist/commands/ios/launch-app.js.map +1 -1
  124. package/dist/commands/ios/list-apps.d.ts +1 -0
  125. package/dist/commands/ios/list-apps.d.ts.map +1 -1
  126. package/dist/commands/ios/list-apps.js +1 -1
  127. package/dist/commands/ios/list-apps.js.map +1 -1
  128. package/dist/commands/ios/list.d.ts +1 -0
  129. package/dist/commands/ios/list.d.ts.map +1 -1
  130. package/dist/commands/ios/ls.d.ts +22 -0
  131. package/dist/commands/ios/ls.d.ts.map +1 -0
  132. package/dist/commands/ios/ls.js +63 -0
  133. package/dist/commands/ios/ls.js.map +1 -0
  134. package/dist/commands/ios/lsof.d.ts +1 -0
  135. package/dist/commands/ios/lsof.d.ts.map +1 -1
  136. package/dist/commands/ios/maestro.d.ts +1 -0
  137. package/dist/commands/ios/maestro.d.ts.map +1 -1
  138. package/dist/commands/ios/open-url.d.ts +1 -0
  139. package/dist/commands/ios/open-url.d.ts.map +1 -1
  140. package/dist/commands/ios/open-url.js +1 -1
  141. package/dist/commands/ios/open-url.js.map +1 -1
  142. package/dist/commands/ios/perform.d.ts +1 -0
  143. package/dist/commands/ios/perform.d.ts.map +1 -1
  144. package/dist/commands/ios/perform.js +1 -1
  145. package/dist/commands/ios/perform.js.map +1 -1
  146. package/dist/commands/ios/play-on-microphone.d.ts +1 -0
  147. package/dist/commands/ios/play-on-microphone.d.ts.map +1 -1
  148. package/dist/commands/ios/press-key.d.ts +1 -0
  149. package/dist/commands/ios/press-key.d.ts.map +1 -1
  150. package/dist/commands/ios/press-key.js +1 -1
  151. package/dist/commands/ios/press-key.js.map +1 -1
  152. package/dist/commands/ios/pull-file.d.ts +1 -0
  153. package/dist/commands/ios/pull-file.d.ts.map +1 -1
  154. package/dist/commands/ios/push-file.d.ts +1 -0
  155. package/dist/commands/ios/push-file.d.ts.map +1 -1
  156. package/dist/commands/ios/record.d.ts +1 -0
  157. package/dist/commands/ios/record.d.ts.map +1 -1
  158. package/dist/commands/ios/record.js +2 -2
  159. package/dist/commands/ios/record.js.map +1 -1
  160. package/dist/commands/ios/reverse.d.ts +1 -0
  161. package/dist/commands/ios/reverse.d.ts.map +1 -1
  162. package/dist/commands/ios/screenshot.d.ts +1 -0
  163. package/dist/commands/ios/screenshot.d.ts.map +1 -1
  164. package/dist/commands/ios/screenshot.js +1 -1
  165. package/dist/commands/ios/screenshot.js.map +1 -1
  166. package/dist/commands/ios/scroll.d.ts +1 -0
  167. package/dist/commands/ios/scroll.d.ts.map +1 -1
  168. package/dist/commands/ios/scroll.js +1 -1
  169. package/dist/commands/ios/scroll.js.map +1 -1
  170. package/dist/commands/ios/set-instance.d.ts +1 -0
  171. package/dist/commands/ios/set-instance.d.ts.map +1 -1
  172. package/dist/commands/ios/set-text.d.ts +1 -0
  173. package/dist/commands/ios/set-text.d.ts.map +1 -1
  174. package/dist/commands/ios/set-text.js +1 -1
  175. package/dist/commands/ios/set-text.js.map +1 -1
  176. package/dist/commands/ios/simctl.d.ts +1 -0
  177. package/dist/commands/ios/simctl.d.ts.map +1 -1
  178. package/dist/commands/ios/stop-microphone-playback.d.ts +1 -0
  179. package/dist/commands/ios/stop-microphone-playback.d.ts.map +1 -1
  180. package/dist/commands/ios/swipe.d.ts +1 -0
  181. package/dist/commands/ios/swipe.d.ts.map +1 -1
  182. package/dist/commands/ios/swipe.js +1 -1
  183. package/dist/commands/ios/swipe.js.map +1 -1
  184. package/dist/commands/ios/sync.d.ts +1 -0
  185. package/dist/commands/ios/sync.d.ts.map +1 -1
  186. package/dist/commands/ios/syslog.d.ts +1 -0
  187. package/dist/commands/ios/syslog.d.ts.map +1 -1
  188. package/dist/commands/ios/tap-element.d.ts +1 -0
  189. package/dist/commands/ios/tap-element.d.ts.map +1 -1
  190. package/dist/commands/ios/tap-element.js +1 -1
  191. package/dist/commands/ios/tap-element.js.map +1 -1
  192. package/dist/commands/ios/tap.d.ts +1 -0
  193. package/dist/commands/ios/tap.d.ts.map +1 -1
  194. package/dist/commands/ios/tap.js +1 -1
  195. package/dist/commands/ios/tap.js.map +1 -1
  196. package/dist/commands/ios/terminate-app.d.ts +1 -0
  197. package/dist/commands/ios/terminate-app.d.ts.map +1 -1
  198. package/dist/commands/ios/terminate-app.js +1 -1
  199. package/dist/commands/ios/terminate-app.js.map +1 -1
  200. package/dist/commands/ios/toggle-keyboard.d.ts +1 -0
  201. package/dist/commands/ios/toggle-keyboard.d.ts.map +1 -1
  202. package/dist/commands/ios/toggle-keyboard.js +1 -1
  203. package/dist/commands/ios/toggle-keyboard.js.map +1 -1
  204. package/dist/commands/ios/type.d.ts +1 -0
  205. package/dist/commands/ios/type.d.ts.map +1 -1
  206. package/dist/commands/ios/type.js +1 -1
  207. package/dist/commands/ios/type.js.map +1 -1
  208. package/dist/commands/ios/xcodebuild.d.ts +1 -0
  209. package/dist/commands/ios/xcodebuild.d.ts.map +1 -1
  210. package/dist/commands/ios/xcrun.d.ts +1 -0
  211. package/dist/commands/ios/xcrun.d.ts.map +1 -1
  212. package/dist/commands/login.d.ts +1 -0
  213. package/dist/commands/login.d.ts.map +1 -1
  214. package/dist/commands/logout.d.ts +1 -0
  215. package/dist/commands/logout.d.ts.map +1 -1
  216. package/dist/commands/session/start.d.ts +1 -0
  217. package/dist/commands/session/start.d.ts.map +1 -1
  218. package/dist/commands/session/start.js +1 -34
  219. package/dist/commands/session/start.js.map +1 -1
  220. package/dist/commands/session/status.d.ts +1 -0
  221. package/dist/commands/session/status.d.ts.map +1 -1
  222. package/dist/commands/session/stop.d.ts +1 -0
  223. package/dist/commands/session/stop.d.ts.map +1 -1
  224. package/dist/commands/xcode/attach-simulator.d.ts +2 -1
  225. package/dist/commands/xcode/attach-simulator.d.ts.map +1 -1
  226. package/dist/commands/xcode/attach-simulator.js +24 -10
  227. package/dist/commands/xcode/attach-simulator.js.map +1 -1
  228. package/dist/commands/xcode/build.d.ts +1 -0
  229. package/dist/commands/xcode/build.d.ts.map +1 -1
  230. package/dist/commands/xcode/create.d.ts +1 -0
  231. package/dist/commands/xcode/create.d.ts.map +1 -1
  232. package/dist/commands/xcode/delete.d.ts +1 -0
  233. package/dist/commands/xcode/delete.d.ts.map +1 -1
  234. package/dist/commands/xcode/get.d.ts +1 -0
  235. package/dist/commands/xcode/get.d.ts.map +1 -1
  236. package/dist/commands/xcode/list.d.ts +1 -0
  237. package/dist/commands/xcode/list.d.ts.map +1 -1
  238. package/dist/commands/xcode/rbe/upload.d.ts +1 -0
  239. package/dist/commands/xcode/rbe/upload.d.ts.map +1 -1
  240. package/dist/commands/xcode/run.d.ts +1 -0
  241. package/dist/commands/xcode/run.d.ts.map +1 -1
  242. package/dist/commands/xcode/set-instance.d.ts +1 -0
  243. package/dist/commands/xcode/set-instance.d.ts.map +1 -1
  244. package/dist/commands/xcode/sync.d.ts +1 -0
  245. package/dist/commands/xcode/sync.d.ts.map +1 -1
  246. package/dist/lib/daemon.d.ts +12 -0
  247. package/dist/lib/daemon.d.ts.map +1 -1
  248. package/dist/lib/daemon.js +141 -23
  249. package/dist/lib/daemon.js.map +1 -1
  250. package/dist/lib/instance-client-factory.d.ts +15 -2
  251. package/dist/lib/instance-client-factory.d.ts.map +1 -1
  252. package/dist/lib/instance-client-factory.js +40 -4
  253. package/dist/lib/instance-client-factory.js.map +1 -1
  254. package/dist/lib/instance-client-factory.test.d.ts +2 -0
  255. package/dist/lib/instance-client-factory.test.d.ts.map +1 -0
  256. package/dist/lib/instance-client-factory.test.js +78 -0
  257. package/dist/lib/instance-client-factory.test.js.map +1 -0
  258. package/package.json +3 -3
@@ -1,4 +1,5 @@
1
1
  import Limrun, { Ios, type InstanceClient } from '@limrun/api';
2
+ import { spawnSessionDaemon } from './daemon';
2
3
  import { type LastAndroidInstance, type LastIosInstance } from './config';
3
4
  export type InstanceType = 'android' | 'ios' | 'xcode' | 'gradle';
4
5
  export interface ResolvedAndroidInstanceClient {
@@ -16,10 +17,21 @@ export interface ResolvedIosInstanceClient {
16
17
  isSession: boolean;
17
18
  }
18
19
  export declare function detectInstanceType(id: string): InstanceType;
20
+ /** Configure daemon auto-start for this invocation; wired from the --daemon and --json flags. */
21
+ export declare function setSessionAutoStart(config: {
22
+ enabled: boolean;
23
+ silent?: boolean;
24
+ }): void;
25
+ /** Injectable for tests. */
26
+ type SpawnFn = typeof spawnSessionDaemon;
19
27
  /**
20
- * Check if a daemon session is active for the given instance ID.
28
+ * Ensure a daemon session exists for the target so the command can use the
29
+ * ~50ms Unix-socket path, starting one if needed. Returns false when the
30
+ * command should fall back to a direct WebSocket instead: auto-start disabled,
31
+ * credentials not known yet (the direct path fetches and caches them, so the
32
+ * next command auto-starts), or the daemon failed to start.
21
33
  */
22
- export declare function hasActiveSession(id: string): boolean;
34
+ export declare function ensureDaemonSession(target: LastAndroidInstance | LastIosInstance, spawnFn?: SpawnFn): Promise<boolean>;
23
35
  /**
24
36
  * Send a command via the daemon session for the given instance ID.
25
37
  */
@@ -28,4 +40,5 @@ export declare function getAndroidInstanceClient(lim: Limrun, target: LastAndroi
28
40
  adbPath?: string;
29
41
  }): Promise<ResolvedAndroidInstanceClient>;
30
42
  export declare function getIosInstanceClient(lim: Limrun, target: LastIosInstance): Promise<ResolvedIosInstanceClient>;
43
+ export {};
31
44
  //# sourceMappingURL=instance-client-factory.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instance-client-factory.d.ts","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAwB,GAAG,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAAqB,KAAK,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7F,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;IAC3B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAS3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,OAAO,EAAO,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAiCxC;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,yBAAyB,CAAC,CAuBpC"}
1
+ {"version":3,"file":"instance-client-factory.d.ts","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,EAAE,EAAwB,GAAG,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAErF,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAqB,KAAK,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,UAAU,CAAC;AAE7F,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,yBAAyB;IACxC,IAAI,EAAE,KAAK,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC,cAAc,CAAC;IAC3B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAS3D;AAID,iGAAiG;AACjG,wBAAgB,mBAAmB,CAAC,MAAM,EAAE;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAExF;AAED,4BAA4B;AAC5B,KAAK,OAAO,GAAG,OAAO,kBAAkB,CAAC;AAEzC;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,mBAAmB,GAAG,eAAe,EAC7C,OAAO,GAAE,OAA4B,GACpC,OAAO,CAAC,OAAO,CAAC,CAyBlB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,OAAO,EAAO,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAO,GACjC,OAAO,CAAC,6BAA6B,CAAC,CAiCxC;AAED,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,yBAAyB,CAAC,CAuBpC"}
@@ -1,12 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.detectInstanceType = detectInstanceType;
4
- exports.hasActiveSession = hasActiveSession;
4
+ exports.setSessionAutoStart = setSessionAutoStart;
5
+ exports.ensureDaemonSession = ensureDaemonSession;
5
6
  exports.sendSessionCommand = sendSessionCommand;
6
7
  exports.getAndroidInstanceClient = getAndroidInstanceClient;
7
8
  exports.getIosInstanceClient = getIosInstanceClient;
8
9
  const api_1 = require("@limrun/api");
9
10
  const daemon_client_1 = require("./daemon-client");
11
+ const daemon_1 = require("./daemon");
10
12
  const config_1 = require("./config");
11
13
  function detectInstanceType(id) {
12
14
  const prefix = id.split('_')[0];
@@ -20,11 +22,45 @@ function detectInstanceType(id) {
20
22
  return 'gradle';
21
23
  throw new Error(`Cannot detect instance type from ID "${id}". Expected prefix "android_", "ios_", "xcode_", "sandbox_", or "gradle_".`);
22
24
  }
25
+ let sessionAutoStart = { enabled: true, silent: false };
26
+ /** Configure daemon auto-start for this invocation; wired from the --daemon and --json flags. */
27
+ function setSessionAutoStart(config) {
28
+ sessionAutoStart = { enabled: config.enabled, silent: config.silent ?? false };
29
+ }
23
30
  /**
24
- * Check if a daemon session is active for the given instance ID.
31
+ * Ensure a daemon session exists for the target so the command can use the
32
+ * ~50ms Unix-socket path, starting one if needed. Returns false when the
33
+ * command should fall back to a direct WebSocket instead: auto-start disabled,
34
+ * credentials not known yet (the direct path fetches and caches them, so the
35
+ * next command auto-starts), or the daemon failed to start.
25
36
  */
26
- function hasActiveSession(id) {
27
- return (0, daemon_client_1.isSessionActive)(id);
37
+ async function ensureDaemonSession(target, spawnFn = daemon_1.spawnSessionDaemon) {
38
+ if ((0, daemon_client_1.isSessionActive)(target.id))
39
+ return true;
40
+ if (!sessionAutoStart.enabled)
41
+ return false;
42
+ if (!target.apiUrl || !target.token)
43
+ return false;
44
+ try {
45
+ await spawnFn({
46
+ instanceId: target.id,
47
+ instanceType: target.type,
48
+ apiUrl: target.apiUrl,
49
+ adbUrl: target.type === 'android' ? target.adbWebSocketUrl : undefined,
50
+ token: target.token,
51
+ });
52
+ }
53
+ catch (err) {
54
+ if (!sessionAutoStart.silent) {
55
+ const message = err instanceof Error ? err.message : String(err);
56
+ console.error(`Could not start WebSocket daemon for ${target.id} (${message}); connecting directly.`);
57
+ }
58
+ return false;
59
+ }
60
+ if (!sessionAutoStart.silent) {
61
+ console.error(`WebSocket daemon started for ${target.id}.`);
62
+ }
63
+ return true;
28
64
  }
29
65
  /**
30
66
  * Send a command via the daemon session for the given instance ID.
@@ -1 +1 @@
1
- {"version":3,"file":"instance-client-factory.js","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"instance-client-factory.js","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=instance-client-factory.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-client-factory.test.d.ts","sourceRoot":"","sources":["../../src/lib/instance-client-factory.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const instance_client_factory_1 = require("./instance-client-factory");
4
+ const daemon_client_1 = require("./daemon-client");
5
+ jest.mock('./daemon-client', () => ({
6
+ isSessionActive: jest.fn(),
7
+ sendCommand: jest.fn(),
8
+ }));
9
+ const isSessionActiveMock = daemon_client_1.isSessionActive;
10
+ const IOS_TARGET = {
11
+ id: 'ios_euna_01m02anjqredzr42pcn8s8jx90',
12
+ type: 'ios',
13
+ apiUrl: 'https://region.limrun.com/v1/ios_x/api',
14
+ token: 'lim_st_token',
15
+ };
16
+ const ANDROID_TARGET = {
17
+ id: 'android_euna_01m02anjqredzr42pcn8s8jx90',
18
+ type: 'android',
19
+ apiUrl: 'https://region.limrun.com/v1/android_x/api',
20
+ token: 'lim_st_token',
21
+ adbWebSocketUrl: 'wss://region.limrun.com/v1/android_x/adb',
22
+ };
23
+ describe('ensureDaemonSession', () => {
24
+ let spawnFn;
25
+ let stderr;
26
+ beforeEach(() => {
27
+ isSessionActiveMock.mockReset();
28
+ isSessionActiveMock.mockReturnValue(false);
29
+ spawnFn = jest.fn().mockResolvedValue(undefined);
30
+ stderr = jest.spyOn(console, 'error').mockImplementation(() => { });
31
+ (0, instance_client_factory_1.setSessionAutoStart)({ enabled: true, silent: false });
32
+ });
33
+ afterEach(() => {
34
+ stderr.mockRestore();
35
+ (0, instance_client_factory_1.setSessionAutoStart)({ enabled: true, silent: false });
36
+ });
37
+ it('uses the existing session without spawning', async () => {
38
+ isSessionActiveMock.mockReturnValue(true);
39
+ await expect((0, instance_client_factory_1.ensureDaemonSession)(IOS_TARGET, spawnFn)).resolves.toBe(true);
40
+ expect(spawnFn).not.toHaveBeenCalled();
41
+ });
42
+ it('does not spawn when auto-start is disabled', async () => {
43
+ (0, instance_client_factory_1.setSessionAutoStart)({ enabled: false });
44
+ await expect((0, instance_client_factory_1.ensureDaemonSession)(IOS_TARGET, spawnFn)).resolves.toBe(false);
45
+ expect(spawnFn).not.toHaveBeenCalled();
46
+ });
47
+ it('does not spawn when credentials are not known yet', async () => {
48
+ const idOnly = { id: IOS_TARGET.id, type: 'ios' };
49
+ await expect((0, instance_client_factory_1.ensureDaemonSession)(idOnly, spawnFn)).resolves.toBe(false);
50
+ expect(spawnFn).not.toHaveBeenCalled();
51
+ });
52
+ it('spawns with the target credentials and announces on stderr', async () => {
53
+ await expect((0, instance_client_factory_1.ensureDaemonSession)(IOS_TARGET, spawnFn)).resolves.toBe(true);
54
+ expect(spawnFn).toHaveBeenCalledWith({
55
+ instanceId: IOS_TARGET.id,
56
+ instanceType: 'ios',
57
+ apiUrl: IOS_TARGET.apiUrl,
58
+ adbUrl: undefined,
59
+ token: IOS_TARGET.token,
60
+ });
61
+ expect(stderr).toHaveBeenCalledWith(`WebSocket daemon started for ${IOS_TARGET.id}.`);
62
+ });
63
+ it('passes the adb url for android targets', async () => {
64
+ await expect((0, instance_client_factory_1.ensureDaemonSession)(ANDROID_TARGET, spawnFn)).resolves.toBe(true);
65
+ expect(spawnFn).toHaveBeenCalledWith(expect.objectContaining({ instanceType: 'android', adbUrl: ANDROID_TARGET.adbWebSocketUrl }));
66
+ });
67
+ it('stays quiet when silent', async () => {
68
+ (0, instance_client_factory_1.setSessionAutoStart)({ enabled: true, silent: true });
69
+ await expect((0, instance_client_factory_1.ensureDaemonSession)(IOS_TARGET, spawnFn)).resolves.toBe(true);
70
+ expect(stderr).not.toHaveBeenCalled();
71
+ });
72
+ it('falls back to direct connection when the spawn fails', async () => {
73
+ spawnFn.mockRejectedValue(new Error('boom'));
74
+ await expect((0, instance_client_factory_1.ensureDaemonSession)(IOS_TARGET, spawnFn)).resolves.toBe(false);
75
+ expect(stderr).toHaveBeenCalledWith(`Could not start WebSocket daemon for ${IOS_TARGET.id} (boom); connecting directly.`);
76
+ });
77
+ });
78
+ //# sourceMappingURL=instance-client-factory.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-client-factory.test.js","sourceRoot":"","sources":["../../src/lib/instance-client-factory.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lim",
3
- "version": "0.28.1",
3
+ "version": "0.28.3",
4
4
  "description": "Use remote XCode, Gradle, iOS Simulator, Android Emulator and more to build and test apps from Linux, Windows or macOS.",
5
5
  "bin": {
6
6
  "lim": "./bin/run.js"
@@ -25,7 +25,7 @@
25
25
  "test": "jest"
26
26
  },
27
27
  "dependencies": {
28
- "@limrun/api": "^0.46.12",
28
+ "@limrun/api": "^0.46.14",
29
29
  "@oclif/core": "^4",
30
30
  "cli-progress": "^3.12.0",
31
31
  "cli-table3": "^0.6.5",
@@ -66,7 +66,7 @@
66
66
  "description": "Build Android projects on cloud gradle sandboxes"
67
67
  },
68
68
  "ios": {
69
- "description": "Execute any task on remote iOS Simulators: create, list, get, delete, info, list-apps, launch-app, terminate-app, app-log, syslog, sync, screenshot, tap, tap-element, element-tree, type, press-key, toggle-keyboard, scroll, open-url, install-app, keychain, record, perform, simctl, cp, xcrun, xcodebuild, lsof, reverse"
69
+ "description": "Execute any task on remote iOS Simulators: create, list, get, delete, info, list-apps, launch-app, terminate-app, app-log, syslog, sync, screenshot, tap, tap-element, element-tree, type, press-key, toggle-keyboard, scroll, open-url, install-app, keychain, record, perform, ls, push-file, pull-file, delete-file, simctl, cp, xcrun, xcodebuild, lsof, reverse"
70
70
  },
71
71
  "session": {
72
72
  "description": "Manage persistent background sessions for device interaction: start, status, stop. Sessions are used to execute commands on remote devices without the need to reconnect to the device after each command."