@limrun/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +670 -0
  2. package/bin/dev.js +16 -0
  3. package/bin/run.js +8 -0
  4. package/dist/base-command.d.ts +17 -0
  5. package/dist/base-command.d.ts.map +1 -0
  6. package/dist/base-command.js +111 -0
  7. package/dist/base-command.js.map +1 -0
  8. package/dist/commands/build.d.ts +20 -0
  9. package/dist/commands/build.d.ts.map +1 -0
  10. package/dist/commands/build.js +83 -0
  11. package/dist/commands/build.js.map +1 -0
  12. package/dist/commands/connect/android.d.ts +15 -0
  13. package/dist/commands/connect/android.d.ts.map +1 -0
  14. package/dist/commands/connect/android.js +80 -0
  15. package/dist/commands/connect/android.js.map +1 -0
  16. package/dist/commands/delete/android.d.ts +14 -0
  17. package/dist/commands/delete/android.d.ts.map +1 -0
  18. package/dist/commands/delete/android.js +22 -0
  19. package/dist/commands/delete/android.js.map +1 -0
  20. package/dist/commands/delete/asset.d.ts +14 -0
  21. package/dist/commands/delete/asset.d.ts.map +1 -0
  22. package/dist/commands/delete/asset.js +22 -0
  23. package/dist/commands/delete/asset.js.map +1 -0
  24. package/dist/commands/delete/index.d.ts +14 -0
  25. package/dist/commands/delete/index.d.ts.map +1 -0
  26. package/dist/commands/delete/index.js +47 -0
  27. package/dist/commands/delete/index.js.map +1 -0
  28. package/dist/commands/delete/ios.d.ts +14 -0
  29. package/dist/commands/delete/ios.d.ts.map +1 -0
  30. package/dist/commands/delete/ios.js +24 -0
  31. package/dist/commands/delete/ios.js.map +1 -0
  32. package/dist/commands/delete/xcode.d.ts +14 -0
  33. package/dist/commands/delete/xcode.d.ts.map +1 -0
  34. package/dist/commands/delete/xcode.js +22 -0
  35. package/dist/commands/delete/xcode.js.map +1 -0
  36. package/dist/commands/exec/element-tree.d.ts +14 -0
  37. package/dist/commands/exec/element-tree.d.ts.map +1 -0
  38. package/dist/commands/exec/element-tree.js +51 -0
  39. package/dist/commands/exec/element-tree.js.map +1 -0
  40. package/dist/commands/exec/install-app.d.ts +16 -0
  41. package/dist/commands/exec/install-app.d.ts.map +1 -0
  42. package/dist/commands/exec/install-app.js +75 -0
  43. package/dist/commands/exec/install-app.js.map +1 -0
  44. package/dist/commands/exec/launch-app.d.ts +16 -0
  45. package/dist/commands/exec/launch-app.d.ts.map +1 -0
  46. package/dist/commands/exec/launch-app.js +49 -0
  47. package/dist/commands/exec/launch-app.js.map +1 -0
  48. package/dist/commands/exec/list-apps.d.ts +14 -0
  49. package/dist/commands/exec/list-apps.d.ts.map +1 -0
  50. package/dist/commands/exec/list-apps.js +45 -0
  51. package/dist/commands/exec/list-apps.js.map +1 -0
  52. package/dist/commands/exec/log.d.ts +17 -0
  53. package/dist/commands/exec/log.d.ts.map +1 -0
  54. package/dist/commands/exec/log.js +80 -0
  55. package/dist/commands/exec/log.js.map +1 -0
  56. package/dist/commands/exec/open-url.d.ts +15 -0
  57. package/dist/commands/exec/open-url.d.ts.map +1 -0
  58. package/dist/commands/exec/open-url.js +35 -0
  59. package/dist/commands/exec/open-url.js.map +1 -0
  60. package/dist/commands/exec/press-key.d.ts +16 -0
  61. package/dist/commands/exec/press-key.d.ts.map +1 -0
  62. package/dist/commands/exec/press-key.js +41 -0
  63. package/dist/commands/exec/press-key.js.map +1 -0
  64. package/dist/commands/exec/record.d.ts +17 -0
  65. package/dist/commands/exec/record.d.ts.map +1 -0
  66. package/dist/commands/exec/record.js +78 -0
  67. package/dist/commands/exec/record.js.map +1 -0
  68. package/dist/commands/exec/screenshot.d.ts +15 -0
  69. package/dist/commands/exec/screenshot.d.ts.map +1 -0
  70. package/dist/commands/exec/screenshot.js +65 -0
  71. package/dist/commands/exec/screenshot.js.map +1 -0
  72. package/dist/commands/exec/scroll.d.ts +16 -0
  73. package/dist/commands/exec/scroll.d.ts.map +1 -0
  74. package/dist/commands/exec/scroll.js +50 -0
  75. package/dist/commands/exec/scroll.js.map +1 -0
  76. package/dist/commands/exec/tap-element.d.ts +18 -0
  77. package/dist/commands/exec/tap-element.d.ts.map +1 -0
  78. package/dist/commands/exec/tap-element.js +91 -0
  79. package/dist/commands/exec/tap-element.js.map +1 -0
  80. package/dist/commands/exec/tap.d.ts +22 -0
  81. package/dist/commands/exec/tap.d.ts.map +1 -0
  82. package/dist/commands/exec/tap.js +41 -0
  83. package/dist/commands/exec/tap.js.map +1 -0
  84. package/dist/commands/exec/terminate-app.d.ts +15 -0
  85. package/dist/commands/exec/terminate-app.d.ts.map +1 -0
  86. package/dist/commands/exec/terminate-app.js +39 -0
  87. package/dist/commands/exec/terminate-app.js.map +1 -0
  88. package/dist/commands/exec/type.d.ts +16 -0
  89. package/dist/commands/exec/type.d.ts.map +1 -0
  90. package/dist/commands/exec/type.js +43 -0
  91. package/dist/commands/exec/type.js.map +1 -0
  92. package/dist/commands/get/android.d.ts +19 -0
  93. package/dist/commands/get/android.d.ts.map +1 -0
  94. package/dist/commands/get/android.js +69 -0
  95. package/dist/commands/get/android.js.map +1 -0
  96. package/dist/commands/get/asset.d.ts +18 -0
  97. package/dist/commands/get/asset.d.ts.map +1 -0
  98. package/dist/commands/get/asset.js +74 -0
  99. package/dist/commands/get/asset.js.map +1 -0
  100. package/dist/commands/get/ios.d.ts +19 -0
  101. package/dist/commands/get/ios.d.ts.map +1 -0
  102. package/dist/commands/get/ios.js +69 -0
  103. package/dist/commands/get/ios.js.map +1 -0
  104. package/dist/commands/get/xcode.d.ts +17 -0
  105. package/dist/commands/get/xcode.d.ts.map +1 -0
  106. package/dist/commands/get/xcode.js +65 -0
  107. package/dist/commands/get/xcode.js.map +1 -0
  108. package/dist/commands/login.d.ts +7 -0
  109. package/dist/commands/login.d.ts.map +1 -0
  110. package/dist/commands/login.js +18 -0
  111. package/dist/commands/login.js.map +1 -0
  112. package/dist/commands/logout.d.ts +7 -0
  113. package/dist/commands/logout.d.ts.map +1 -0
  114. package/dist/commands/logout.js +14 -0
  115. package/dist/commands/logout.js.map +1 -0
  116. package/dist/commands/pull.d.ts +16 -0
  117. package/dist/commands/pull.d.ts.map +1 -0
  118. package/dist/commands/pull.js +71 -0
  119. package/dist/commands/pull.js.map +1 -0
  120. package/dist/commands/push.d.ts +15 -0
  121. package/dist/commands/push.d.ts.map +1 -0
  122. package/dist/commands/push.js +40 -0
  123. package/dist/commands/push.js.map +1 -0
  124. package/dist/commands/run/android.d.ts +24 -0
  125. package/dist/commands/run/android.d.ts.map +1 -0
  126. package/dist/commands/run/android.js +183 -0
  127. package/dist/commands/run/android.js.map +1 -0
  128. package/dist/commands/run/ios.d.ts +23 -0
  129. package/dist/commands/run/ios.d.ts.map +1 -0
  130. package/dist/commands/run/ios.js +129 -0
  131. package/dist/commands/run/ios.js.map +1 -0
  132. package/dist/commands/run/xcode.d.ts +19 -0
  133. package/dist/commands/run/xcode.d.ts.map +1 -0
  134. package/dist/commands/run/xcode.js +81 -0
  135. package/dist/commands/run/xcode.js.map +1 -0
  136. package/dist/commands/session/start.d.ts +15 -0
  137. package/dist/commands/session/start.d.ts.map +1 -0
  138. package/dist/commands/session/start.js +97 -0
  139. package/dist/commands/session/start.js.map +1 -0
  140. package/dist/commands/session/status.d.ts +11 -0
  141. package/dist/commands/session/status.d.ts.map +1 -0
  142. package/dist/commands/session/status.js +64 -0
  143. package/dist/commands/session/status.js.map +1 -0
  144. package/dist/commands/session/stop.d.ts +15 -0
  145. package/dist/commands/session/stop.d.ts.map +1 -0
  146. package/dist/commands/session/stop.js +67 -0
  147. package/dist/commands/session/stop.js.map +1 -0
  148. package/dist/commands/sync.d.ts +19 -0
  149. package/dist/commands/sync.d.ts.map +1 -0
  150. package/dist/commands/sync.js +80 -0
  151. package/dist/commands/sync.js.map +1 -0
  152. package/dist/index.d.ts +2 -0
  153. package/dist/index.d.ts.map +1 -0
  154. package/dist/index.js +6 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/lib/auth.d.ts +2 -0
  157. package/dist/lib/auth.d.ts.map +1 -0
  158. package/dist/lib/auth.js +60 -0
  159. package/dist/lib/auth.js.map +1 -0
  160. package/dist/lib/config.d.ts +21 -0
  161. package/dist/lib/config.d.ts.map +1 -0
  162. package/dist/lib/config.js +101 -0
  163. package/dist/lib/config.js.map +1 -0
  164. package/dist/lib/daemon-client.d.ts +9 -0
  165. package/dist/lib/daemon-client.d.ts.map +1 -0
  166. package/dist/lib/daemon-client.js +81 -0
  167. package/dist/lib/daemon-client.js.map +1 -0
  168. package/dist/lib/daemon.d.ts +40 -0
  169. package/dist/lib/daemon.d.ts.map +1 -0
  170. package/dist/lib/daemon.js +427 -0
  171. package/dist/lib/daemon.js.map +1 -0
  172. package/dist/lib/formatting.d.ts +3 -0
  173. package/dist/lib/formatting.d.ts.map +1 -0
  174. package/dist/lib/formatting.js +31 -0
  175. package/dist/lib/formatting.js.map +1 -0
  176. package/dist/lib/instance-client-factory.d.ts +23 -0
  177. package/dist/lib/instance-client-factory.d.ts.map +1 -0
  178. package/dist/lib/instance-client-factory.js +62 -0
  179. package/dist/lib/instance-client-factory.js.map +1 -0
  180. package/package.json +55 -0
@@ -0,0 +1,40 @@
1
+ import { type InstanceType } from './instance-client-factory';
2
+ declare const SESSIONS_ROOT: string;
3
+ export { SESSIONS_ROOT };
4
+ export declare function sessionDir(instanceId: string): string;
5
+ export declare function socketPath(instanceId: string): string;
6
+ export declare function pidFile(instanceId: string): string;
7
+ export declare function stateFile(instanceId: string): string;
8
+ export interface SessionState {
9
+ instanceId: string;
10
+ instanceType: InstanceType;
11
+ apiUrl: string;
12
+ adbUrl?: string;
13
+ token: string;
14
+ }
15
+ export declare function saveState(instanceId: string, state: SessionState): void;
16
+ export declare function loadState(instanceId: string): SessionState | null;
17
+ export declare function clearSession(instanceId: string): void;
18
+ export declare function isDaemonRunning(instanceId: string): boolean;
19
+ export declare function getDaemonPid(instanceId: string): number | null;
20
+ /**
21
+ * List all instance IDs that have an active daemon running.
22
+ */
23
+ export declare function listActiveSessions(): {
24
+ instanceId: string;
25
+ pid: number;
26
+ }[];
27
+ export interface DaemonRequest {
28
+ command: string;
29
+ args: unknown[];
30
+ }
31
+ export interface DaemonResponse {
32
+ type: 'stdout' | 'stderr' | 'result' | 'done';
33
+ data?: unknown;
34
+ exitCode?: number;
35
+ }
36
+ /**
37
+ * Start the daemon server. The instance ID is read from LIM_DAEMON_INSTANCE_ID env var.
38
+ */
39
+ export declare function startDaemonServer(): void;
40
+ //# sourceMappingURL=daemon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAO9D,QAAA,MAAM,aAAa,QAA8C,CAAC;AAElE,OAAO,EAAE,aAAa,EAAE,CAAC;AASzB,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAEpD;AAID,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAQD,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI,CAGvE;AAED,wBAAgB,SAAS,CAAC,UAAU,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAQjE;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAcrD;AAID,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAkB3D;AAED,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAAE,CAqC1E;AAID,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;IAC9C,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,IAAI,CA6QxC"}
@@ -0,0 +1,427 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SESSIONS_ROOT = void 0;
7
+ exports.sessionDir = sessionDir;
8
+ exports.socketPath = socketPath;
9
+ exports.pidFile = pidFile;
10
+ exports.stateFile = stateFile;
11
+ exports.saveState = saveState;
12
+ exports.loadState = loadState;
13
+ exports.clearSession = clearSession;
14
+ exports.isDaemonRunning = isDaemonRunning;
15
+ exports.getDaemonPid = getDaemonPid;
16
+ exports.listActiveSessions = listActiveSessions;
17
+ exports.startDaemonServer = startDaemonServer;
18
+ const net_1 = __importDefault(require("net"));
19
+ const fs_1 = __importDefault(require("fs"));
20
+ const path_1 = __importDefault(require("path"));
21
+ const os_1 = __importDefault(require("os"));
22
+ const api_1 = require("@limrun/api");
23
+ // Unix sockets have a 104-108 byte path limit depending on OS.
24
+ // macOS tmpdir is long (~50 chars), instance IDs are ~40 chars.
25
+ // We use ~/.lim/sessions/ (shorter) and a short hash of the instance ID for the dir name.
26
+ const crypto_1 = __importDefault(require("crypto"));
27
+ const SESSIONS_ROOT = path_1.default.join(os_1.default.homedir(), '.lim', 'sessions');
28
+ exports.SESSIONS_ROOT = SESSIONS_ROOT;
29
+ // ---------- Per-instance paths ----------
30
+ /** Short 8-char hash of the instance ID to keep socket path under 104 bytes. */
31
+ function sessionKey(instanceId) {
32
+ return crypto_1.default.createHash('sha1').update(instanceId).digest('hex').slice(0, 8);
33
+ }
34
+ function sessionDir(instanceId) {
35
+ return path_1.default.join(SESSIONS_ROOT, sessionKey(instanceId));
36
+ }
37
+ function socketPath(instanceId) {
38
+ return path_1.default.join(sessionDir(instanceId), 's.sock');
39
+ }
40
+ function pidFile(instanceId) {
41
+ return path_1.default.join(sessionDir(instanceId), 'd.pid');
42
+ }
43
+ function stateFile(instanceId) {
44
+ return path_1.default.join(sessionDir(instanceId), 'state.json');
45
+ }
46
+ function ensureDir(dir) {
47
+ if (!fs_1.default.existsSync(dir)) {
48
+ fs_1.default.mkdirSync(dir, { recursive: true, mode: 0o700 });
49
+ }
50
+ }
51
+ function saveState(instanceId, state) {
52
+ ensureDir(sessionDir(instanceId));
53
+ fs_1.default.writeFileSync(stateFile(instanceId), JSON.stringify(state, null, 2), { mode: 0o600 });
54
+ }
55
+ function loadState(instanceId) {
56
+ const p = stateFile(instanceId);
57
+ if (!fs_1.default.existsSync(p))
58
+ return null;
59
+ try {
60
+ return JSON.parse(fs_1.default.readFileSync(p, 'utf-8'));
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ function clearSession(instanceId) {
67
+ const dir = sessionDir(instanceId);
68
+ try {
69
+ fs_1.default.unlinkSync(path_1.default.join(dir, 'state.json'));
70
+ }
71
+ catch { }
72
+ try {
73
+ fs_1.default.unlinkSync(path_1.default.join(dir, 's.sock'));
74
+ }
75
+ catch { }
76
+ try {
77
+ fs_1.default.unlinkSync(path_1.default.join(dir, 'd.pid'));
78
+ }
79
+ catch { }
80
+ try {
81
+ fs_1.default.rmdirSync(dir);
82
+ }
83
+ catch { }
84
+ }
85
+ // ---------- Daemon lifecycle helpers ----------
86
+ function isDaemonRunning(instanceId) {
87
+ const pf = pidFile(instanceId);
88
+ if (!fs_1.default.existsSync(pf))
89
+ return false;
90
+ const pid = parseInt(fs_1.default.readFileSync(pf, 'utf-8').trim(), 10);
91
+ if (isNaN(pid))
92
+ return false;
93
+ try {
94
+ process.kill(pid, 0);
95
+ return true;
96
+ }
97
+ catch {
98
+ // Process gone — clean up stale files
99
+ try {
100
+ fs_1.default.unlinkSync(pf);
101
+ }
102
+ catch { }
103
+ try {
104
+ fs_1.default.unlinkSync(socketPath(instanceId));
105
+ }
106
+ catch { }
107
+ return false;
108
+ }
109
+ }
110
+ function getDaemonPid(instanceId) {
111
+ const pf = pidFile(instanceId);
112
+ if (!fs_1.default.existsSync(pf))
113
+ return null;
114
+ const pid = parseInt(fs_1.default.readFileSync(pf, 'utf-8').trim(), 10);
115
+ return isNaN(pid) ? null : pid;
116
+ }
117
+ /**
118
+ * List all instance IDs that have an active daemon running.
119
+ */
120
+ function listActiveSessions() {
121
+ if (!fs_1.default.existsSync(SESSIONS_ROOT))
122
+ return [];
123
+ const results = [];
124
+ for (const entry of fs_1.default.readdirSync(SESSIONS_ROOT)) {
125
+ const dir = path_1.default.join(SESSIONS_ROOT, entry);
126
+ if (!fs_1.default.statSync(dir).isDirectory())
127
+ continue;
128
+ const pf = path_1.default.join(dir, 'd.pid');
129
+ if (!fs_1.default.existsSync(pf))
130
+ continue;
131
+ const pid = parseInt(fs_1.default.readFileSync(pf, 'utf-8').trim(), 10);
132
+ if (isNaN(pid))
133
+ continue;
134
+ // Read state.json to get the actual instance ID (dir name is a hash)
135
+ const sf = path_1.default.join(dir, 'state.json');
136
+ let instanceId = entry; // fallback to hash
137
+ try {
138
+ const state = JSON.parse(fs_1.default.readFileSync(sf, 'utf-8'));
139
+ if (state.instanceId)
140
+ instanceId = state.instanceId;
141
+ }
142
+ catch { }
143
+ try {
144
+ process.kill(pid, 0);
145
+ results.push({ instanceId, pid });
146
+ }
147
+ catch {
148
+ // Stale — clean up
149
+ try {
150
+ fs_1.default.unlinkSync(pf);
151
+ }
152
+ catch { }
153
+ try {
154
+ fs_1.default.unlinkSync(path_1.default.join(dir, 's.sock'));
155
+ }
156
+ catch { }
157
+ try {
158
+ fs_1.default.unlinkSync(sf);
159
+ }
160
+ catch { }
161
+ try {
162
+ fs_1.default.rmdirSync(dir);
163
+ }
164
+ catch { }
165
+ }
166
+ }
167
+ return results;
168
+ }
169
+ // ---------- Daemon server ----------
170
+ /**
171
+ * Start the daemon server. The instance ID is read from LIM_DAEMON_INSTANCE_ID env var.
172
+ */
173
+ function startDaemonServer() {
174
+ const instanceId = process.env.LIM_DAEMON_INSTANCE_ID;
175
+ if (!instanceId) {
176
+ console.error('LIM_DAEMON_INSTANCE_ID env var is required');
177
+ process.exit(1);
178
+ }
179
+ const dir = sessionDir(instanceId);
180
+ const sock = socketPath(instanceId);
181
+ const pid = pidFile(instanceId);
182
+ ensureDir(dir);
183
+ // Clean up stale socket
184
+ try {
185
+ fs_1.default.unlinkSync(sock);
186
+ }
187
+ catch { }
188
+ let instanceClient = null;
189
+ let instanceType = null;
190
+ async function getClient() {
191
+ if (instanceClient && instanceType) {
192
+ return { type: instanceType, client: instanceClient };
193
+ }
194
+ const state = loadState(instanceId);
195
+ if (!state)
196
+ throw new Error('No active session state found.');
197
+ instanceType = state.instanceType;
198
+ if (state.instanceType === 'android') {
199
+ instanceClient = await (0, api_1.createInstanceClient)({
200
+ apiUrl: state.apiUrl,
201
+ adbUrl: state.adbUrl,
202
+ token: state.token,
203
+ });
204
+ }
205
+ else {
206
+ instanceClient = await api_1.Ios.createInstanceClient({
207
+ apiUrl: state.apiUrl,
208
+ token: state.token,
209
+ });
210
+ }
211
+ return { type: instanceType, client: instanceClient };
212
+ }
213
+ function disconnectClient() {
214
+ if (instanceClient) {
215
+ try {
216
+ instanceClient.disconnect();
217
+ }
218
+ catch { }
219
+ instanceClient = null;
220
+ instanceType = null;
221
+ }
222
+ }
223
+ function send(socket, resp) {
224
+ try {
225
+ socket.write(JSON.stringify(resp) + '\n');
226
+ }
227
+ catch { }
228
+ }
229
+ async function dispatch(socket, req) {
230
+ const { command, args } = req;
231
+ try {
232
+ if (command === 'ping') {
233
+ send(socket, { type: 'result', data: 'pong' });
234
+ send(socket, { type: 'done', exitCode: 0 });
235
+ return;
236
+ }
237
+ if (command === 'shutdown') {
238
+ disconnectClient();
239
+ send(socket, { type: 'result', data: 'daemon shutting down' });
240
+ send(socket, { type: 'done', exitCode: 0 });
241
+ cleanup();
242
+ process.exit(0);
243
+ }
244
+ if (command === 'status') {
245
+ const state = loadState(instanceId);
246
+ send(socket, {
247
+ type: 'result',
248
+ data: state ?
249
+ { ...state, daemonPid: process.pid, connected: !!instanceClient }
250
+ : { daemonPid: process.pid, connected: false },
251
+ });
252
+ send(socket, { type: 'done', exitCode: 0 });
253
+ return;
254
+ }
255
+ // All other commands need an instance client
256
+ const { type, client } = await getClient();
257
+ let result;
258
+ switch (command) {
259
+ case 'screenshot':
260
+ result = await client.screenshot();
261
+ break;
262
+ case 'tap':
263
+ if (type === 'ios') {
264
+ await client.tap(args[0], args[1]);
265
+ }
266
+ else {
267
+ await client.tap({ x: args[0], y: args[1] });
268
+ }
269
+ result = { tapped: true, x: args[0], y: args[1] };
270
+ break;
271
+ case 'tap-element':
272
+ if (type === 'ios') {
273
+ result = await client.tapElement(args[0]);
274
+ }
275
+ else {
276
+ result = await client.tap({ selector: args[0] });
277
+ }
278
+ break;
279
+ case 'type':
280
+ if (type === 'ios') {
281
+ await client.typeText(args[0], args[1]);
282
+ }
283
+ else {
284
+ await client.setText(undefined, args[0]);
285
+ }
286
+ result = { typed: true };
287
+ break;
288
+ case 'press-key':
289
+ await client.pressKey(args[0], args[1]);
290
+ result = { pressed: true, key: args[0] };
291
+ break;
292
+ case 'scroll':
293
+ if (type === 'ios') {
294
+ await client.scroll(args[0], args[1]);
295
+ }
296
+ else {
297
+ await client.scrollScreen(args[0], args[1]);
298
+ }
299
+ result = { scrolled: true, direction: args[0] };
300
+ break;
301
+ case 'element-tree':
302
+ if (type === 'ios') {
303
+ result = await client.elementTree();
304
+ }
305
+ else {
306
+ result = await client.getElementTree();
307
+ }
308
+ break;
309
+ case 'open-url':
310
+ await client.openUrl(args[0]);
311
+ result = { opened: true, url: args[0] };
312
+ break;
313
+ case 'launch-app':
314
+ if (type !== 'ios')
315
+ throw new Error('launch-app is only supported on iOS instances');
316
+ await client.launchApp(args[0], args[1]);
317
+ result = { launched: true, bundleId: args[0] };
318
+ break;
319
+ case 'terminate-app':
320
+ if (type !== 'ios')
321
+ throw new Error('terminate-app is only supported on iOS instances');
322
+ await client.terminateApp(args[0]);
323
+ result = { terminated: true, bundleId: args[0] };
324
+ break;
325
+ case 'list-apps':
326
+ if (type !== 'ios')
327
+ throw new Error('list-apps is only supported on iOS instances');
328
+ result = await client.listApps();
329
+ break;
330
+ case 'install-app':
331
+ if (type === 'ios') {
332
+ result = await client.installApp(args[0], args[1]);
333
+ }
334
+ else {
335
+ await client.sendAsset(args[0]);
336
+ result = { sent: true };
337
+ }
338
+ break;
339
+ case 'start-recording':
340
+ await client.startRecording(args[0] ? { quality: args[0] } : undefined);
341
+ result = { recording: true };
342
+ break;
343
+ case 'stop-recording':
344
+ result = await client.stopRecording(args[0] || {});
345
+ break;
346
+ case 'app-log-tail':
347
+ if (type !== 'ios')
348
+ throw new Error('log is only supported on iOS instances');
349
+ result = await client.appLogTail(args[0], args[1] || 100);
350
+ break;
351
+ default:
352
+ throw new Error(`Unknown command: ${command}`);
353
+ }
354
+ send(socket, { type: 'result', data: result });
355
+ send(socket, { type: 'done', exitCode: 0 });
356
+ }
357
+ catch (err) {
358
+ send(socket, { type: 'stderr', data: err.message || String(err) });
359
+ send(socket, { type: 'done', exitCode: 1 });
360
+ }
361
+ }
362
+ const server = net_1.default.createServer((socket) => {
363
+ let buffer = '';
364
+ socket.on('data', (chunk) => {
365
+ buffer += chunk.toString();
366
+ let idx;
367
+ while ((idx = buffer.indexOf('\n')) !== -1) {
368
+ const line = buffer.slice(0, idx).trim();
369
+ buffer = buffer.slice(idx + 1);
370
+ if (!line)
371
+ continue;
372
+ try {
373
+ const req = JSON.parse(line);
374
+ dispatch(socket, req).catch((err) => {
375
+ send(socket, { type: 'stderr', data: err.message || String(err) });
376
+ send(socket, { type: 'done', exitCode: 1 });
377
+ });
378
+ }
379
+ catch {
380
+ send(socket, { type: 'stderr', data: 'Invalid JSON request' });
381
+ send(socket, { type: 'done', exitCode: 1 });
382
+ }
383
+ }
384
+ });
385
+ socket.on('error', () => { });
386
+ });
387
+ function cleanup() {
388
+ try {
389
+ fs_1.default.unlinkSync(sock);
390
+ }
391
+ catch { }
392
+ try {
393
+ fs_1.default.unlinkSync(pid);
394
+ }
395
+ catch { }
396
+ }
397
+ function shutdown() {
398
+ disconnectClient();
399
+ server.close();
400
+ cleanup();
401
+ process.exit(0);
402
+ }
403
+ process.on('SIGTERM', shutdown);
404
+ process.on('SIGINT', shutdown);
405
+ process.on('uncaughtException', (err) => {
406
+ console.error('Daemon uncaught exception:', err);
407
+ shutdown();
408
+ });
409
+ server.listen(sock, () => {
410
+ fs_1.default.writeFileSync(pid, String(process.pid), { mode: 0o600 });
411
+ try {
412
+ fs_1.default.chmodSync(sock, 0o600);
413
+ }
414
+ catch { }
415
+ console.error(`lim daemon started for ${instanceId} (pid ${process.pid})`);
416
+ });
417
+ server.on('error', (err) => {
418
+ console.error('Daemon server error:', err);
419
+ cleanup();
420
+ process.exit(1);
421
+ });
422
+ }
423
+ // Entry point when run directly as a subprocess
424
+ if (require.main === module) {
425
+ startDaemonServer();
426
+ }
427
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function renderTable(headers: string[], rows: string[][]): string;
2
+ export declare function parseLabels(labels: string[] | undefined): Record<string, string> | undefined;
3
+ //# sourceMappingURL=formatting.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/lib/formatting.ts"],"names":[],"mappings":"AAEA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CASvE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAU5F"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.renderTable = renderTable;
7
+ exports.parseLabels = parseLabels;
8
+ const cli_table3_1 = __importDefault(require("cli-table3"));
9
+ function renderTable(headers, rows) {
10
+ const table = new cli_table3_1.default({
11
+ head: headers,
12
+ style: { head: ['cyan'] },
13
+ });
14
+ for (const row of rows) {
15
+ table.push(row);
16
+ }
17
+ return table.toString();
18
+ }
19
+ function parseLabels(labels) {
20
+ if (!labels || labels.length === 0)
21
+ return undefined;
22
+ const result = {};
23
+ for (const l of labels) {
24
+ const eqIdx = l.indexOf('=');
25
+ if (eqIdx > 0) {
26
+ result[l.slice(0, eqIdx)] = l.slice(eqIdx + 1);
27
+ }
28
+ }
29
+ return Object.keys(result).length > 0 ? result : undefined;
30
+ }
31
+ //# sourceMappingURL=formatting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/lib/formatting.ts"],"names":[],"mappings":";;;;;AAEA,kCASC;AAED,kCAUC;AAvBD,4DAA+B;AAE/B,SAAgB,WAAW,CAAC,OAAiB,EAAE,IAAgB;IAC7D,MAAM,KAAK,GAAG,IAAI,oBAAK,CAAC;QACtB,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,MAAM,CAAC,EAAE;KAC1B,CAAC,CAAC;IACH,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC;AAED,SAAgB,WAAW,CAAC,MAA4B;IACtD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACrD,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACd,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACjD,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,23 @@
1
+ import Limrun, { Ios, type InstanceClient } from '@limrun/api';
2
+ export type InstanceType = 'android' | 'ios' | 'xcode';
3
+ export interface ResolvedInstanceClient {
4
+ type: InstanceType;
5
+ client: InstanceClient | Ios.InstanceClient;
6
+ disconnect: () => void;
7
+ /** True if the client is backed by a daemon session (don't disconnect). */
8
+ isSession: boolean;
9
+ }
10
+ export declare function detectInstanceType(id: string): InstanceType;
11
+ /**
12
+ * Check if a daemon session is active for the given instance ID.
13
+ */
14
+ export declare function hasActiveSession(id: string): boolean;
15
+ /**
16
+ * Send a command via the daemon session for the given instance ID.
17
+ */
18
+ export declare function sendSessionCommand(instanceId: string, command: string, args?: unknown[]): Promise<unknown>;
19
+ /**
20
+ * Create a direct instance client (no daemon). Used when no session is active.
21
+ */
22
+ export declare function getInstanceClient(lim: Limrun, id: string): Promise<ResolvedInstanceClient>;
23
+ //# sourceMappingURL=instance-client-factory.d.ts.map
@@ -0,0 +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;AAGrF,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,KAAK,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,YAAY,CAAC;IACnB,MAAM,EAAE,cAAc,GAAG,GAAG,CAAC,cAAc,CAAC;IAC5C,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,CAQ3D;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,GACnB,OAAO,CAAC,OAAO,CAAC,CAElB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA8BhG"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.detectInstanceType = detectInstanceType;
4
+ exports.hasActiveSession = hasActiveSession;
5
+ exports.sendSessionCommand = sendSessionCommand;
6
+ exports.getInstanceClient = getInstanceClient;
7
+ const api_1 = require("@limrun/api");
8
+ const daemon_client_1 = require("./daemon-client");
9
+ function detectInstanceType(id) {
10
+ const prefix = id.split('_')[0];
11
+ if (prefix === 'android')
12
+ return 'android';
13
+ if (prefix === 'ios')
14
+ return 'ios';
15
+ if (prefix === 'xcode')
16
+ return 'xcode';
17
+ throw new Error(`Cannot detect instance type from ID "${id}". Expected prefix "android_", "ios_", or "xcode_".`);
18
+ }
19
+ /**
20
+ * Check if a daemon session is active for the given instance ID.
21
+ */
22
+ function hasActiveSession(id) {
23
+ return (0, daemon_client_1.isSessionActive)(id);
24
+ }
25
+ /**
26
+ * Send a command via the daemon session for the given instance ID.
27
+ */
28
+ function sendSessionCommand(instanceId, command, args = []) {
29
+ return (0, daemon_client_1.sendCommand)(instanceId, command, args);
30
+ }
31
+ /**
32
+ * Create a direct instance client (no daemon). Used when no session is active.
33
+ */
34
+ async function getInstanceClient(lim, id) {
35
+ const type = detectInstanceType(id);
36
+ if (type === 'android') {
37
+ const instance = await lim.androidInstances.get(id);
38
+ const apiUrl = instance.status.apiUrl;
39
+ const token = instance.status.token;
40
+ if (!apiUrl) {
41
+ throw new Error(`Android instance ${id} does not have an apiUrl. Is it ready?`);
42
+ }
43
+ const client = await (0, api_1.createInstanceClient)({
44
+ apiUrl,
45
+ adbUrl: instance.status.adbWebSocketUrl,
46
+ token,
47
+ });
48
+ return { type, client, disconnect: () => client.disconnect(), isSession: false };
49
+ }
50
+ if (type === 'ios') {
51
+ const instance = await lim.iosInstances.get(id);
52
+ const apiUrl = instance.status.apiUrl;
53
+ const token = instance.status.token;
54
+ if (!apiUrl) {
55
+ throw new Error(`iOS instance ${id} does not have an apiUrl. Is it ready?`);
56
+ }
57
+ const client = await api_1.Ios.createInstanceClient({ apiUrl, token });
58
+ return { type, client, disconnect: () => client.disconnect(), isSession: false };
59
+ }
60
+ throw new Error(`Cannot create instance client for type "${type}". Only android and ios are supported.`);
61
+ }
62
+ //# sourceMappingURL=instance-client-factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance-client-factory.js","sourceRoot":"","sources":["../../src/lib/instance-client-factory.ts"],"names":[],"mappings":";;AAaA,gDAQC;AAKD,4CAEC;AAKD,gDAMC;AAKD,8CA8BC;AA1ED,qCAAqF;AACrF,mDAA+D;AAY/D,SAAgB,kBAAkB,CAAC,EAAU;IAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,MAAM,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IACnC,IAAI,MAAM,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACvC,MAAM,IAAI,KAAK,CACb,wCAAwC,EAAE,qDAAqD,CAChG,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,EAAU;IACzC,OAAO,IAAA,+BAAe,EAAC,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,SAAgB,kBAAkB,CAChC,UAAkB,EAClB,OAAe,EACf,OAAkB,EAAE;IAEpB,OAAO,IAAA,2BAAW,EAAC,UAAU,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,iBAAiB,CAAC,GAAW,EAAE,EAAU;IAC7D,MAAM,IAAI,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAEpC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,EAAE,wCAAwC,CAAC,CAAC;QAClF,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAA,0BAAoB,EAAC;YACxC,MAAM;YACN,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,eAAe;YACvC,KAAK;SACN,CAAC,CAAC;QACH,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACnB,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;QACtC,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,wCAAwC,CAAC,CAAC;QAC9E,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,SAAG,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IACnF,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,2CAA2C,IAAI,wCAAwC,CAAC,CAAC;AAC3G,CAAC"}