@limrun/api 0.49.3 → 0.50.1

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 (104) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/exec-client.d.mts +25 -1
  3. package/exec-client.d.mts.map +1 -1
  4. package/exec-client.d.ts +25 -1
  5. package/exec-client.d.ts.map +1 -1
  6. package/exec-client.js +362 -197
  7. package/exec-client.js.map +1 -1
  8. package/exec-client.mjs +361 -197
  9. package/exec-client.mjs.map +1 -1
  10. package/folder-sync-ignore.d.mts +15 -12
  11. package/folder-sync-ignore.d.mts.map +1 -1
  12. package/folder-sync-ignore.d.ts +15 -12
  13. package/folder-sync-ignore.d.ts.map +1 -1
  14. package/folder-sync-ignore.js +16 -19
  15. package/folder-sync-ignore.js.map +1 -1
  16. package/folder-sync-ignore.mjs +16 -19
  17. package/folder-sync-ignore.mjs.map +1 -1
  18. package/index.d.mts +1 -1
  19. package/index.d.mts.map +1 -1
  20. package/index.d.ts +1 -1
  21. package/index.d.ts.map +1 -1
  22. package/index.js.map +1 -1
  23. package/index.mjs.map +1 -1
  24. package/instance-client.d.mts +11 -0
  25. package/instance-client.d.mts.map +1 -1
  26. package/instance-client.d.ts +11 -0
  27. package/instance-client.d.ts.map +1 -1
  28. package/instance-client.js +10 -1
  29. package/instance-client.js.map +1 -1
  30. package/instance-client.mjs +7 -0
  31. package/instance-client.mjs.map +1 -1
  32. package/ios-client.d.mts +2 -33
  33. package/ios-client.d.mts.map +1 -1
  34. package/ios-client.d.ts +2 -33
  35. package/ios-client.d.ts.map +1 -1
  36. package/ios-client.js +8 -99
  37. package/ios-client.js.map +1 -1
  38. package/ios-client.mjs +4 -95
  39. package/ios-client.mjs.map +1 -1
  40. package/log-stream.d.mts +35 -0
  41. package/log-stream.d.mts.map +1 -0
  42. package/log-stream.d.ts +35 -0
  43. package/log-stream.d.ts.map +1 -0
  44. package/log-stream.js +103 -0
  45. package/log-stream.js.map +1 -0
  46. package/log-stream.mjs +99 -0
  47. package/log-stream.mjs.map +1 -0
  48. package/logcat-process.d.mts +40 -0
  49. package/logcat-process.d.mts.map +1 -0
  50. package/logcat-process.d.ts +40 -0
  51. package/logcat-process.d.ts.map +1 -0
  52. package/logcat-process.js +122 -0
  53. package/logcat-process.js.map +1 -0
  54. package/logcat-process.mjs +118 -0
  55. package/logcat-process.mjs.map +1 -0
  56. package/mise-tools.d.mts +2 -0
  57. package/mise-tools.d.mts.map +1 -0
  58. package/mise-tools.d.ts +2 -0
  59. package/mise-tools.d.ts.map +1 -0
  60. package/mise-tools.js +17 -0
  61. package/mise-tools.js.map +1 -0
  62. package/mise-tools.mjs +14 -0
  63. package/mise-tools.mjs.map +1 -0
  64. package/package.json +31 -1
  65. package/resources/daemon-client-shared.d.mts +11 -0
  66. package/resources/daemon-client-shared.d.mts.map +1 -1
  67. package/resources/daemon-client-shared.d.ts +11 -0
  68. package/resources/daemon-client-shared.d.ts.map +1 -1
  69. package/resources/daemon-client-shared.js +23 -0
  70. package/resources/daemon-client-shared.js.map +1 -1
  71. package/resources/daemon-client-shared.mjs +22 -0
  72. package/resources/daemon-client-shared.mjs.map +1 -1
  73. package/resources/gradle-instances-helpers.d.mts +12 -2
  74. package/resources/gradle-instances-helpers.d.mts.map +1 -1
  75. package/resources/gradle-instances-helpers.d.ts +12 -2
  76. package/resources/gradle-instances-helpers.d.ts.map +1 -1
  77. package/resources/gradle-instances-helpers.js +6 -0
  78. package/resources/gradle-instances-helpers.js.map +1 -1
  79. package/resources/gradle-instances-helpers.mjs +8 -2
  80. package/resources/gradle-instances-helpers.mjs.map +1 -1
  81. package/resources/xcode-instances-helpers.d.mts +6 -15
  82. package/resources/xcode-instances-helpers.d.mts.map +1 -1
  83. package/resources/xcode-instances-helpers.d.ts +6 -15
  84. package/resources/xcode-instances-helpers.d.ts.map +1 -1
  85. package/resources/xcode-instances-helpers.js +3 -18
  86. package/resources/xcode-instances-helpers.js.map +1 -1
  87. package/resources/xcode-instances-helpers.mjs +5 -20
  88. package/resources/xcode-instances-helpers.mjs.map +1 -1
  89. package/src/exec-client.ts +404 -198
  90. package/src/folder-sync-ignore.ts +21 -21
  91. package/src/index.ts +1 -0
  92. package/src/instance-client.ts +16 -0
  93. package/src/ios-client.ts +4 -129
  94. package/src/log-stream.ts +132 -0
  95. package/src/logcat-process.ts +151 -0
  96. package/src/mise-tools.ts +13 -0
  97. package/src/resources/daemon-client-shared.ts +33 -0
  98. package/src/resources/gradle-instances-helpers.ts +23 -0
  99. package/src/resources/xcode-instances-helpers.ts +13 -33
  100. package/src/version.ts +1 -1
  101. package/version.d.mts +1 -1
  102. package/version.d.ts +1 -1
  103. package/version.js +1 -1
  104. package/version.mjs +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"log-stream.mjs","sourceRoot":"","sources":["src/log-stream.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { EventEmitter } from 'events';
2
+ /**
3
+ * Handle for one logcat invocation on an Android instance.
4
+ *
5
+ * The instance runs `logcat` with the caller's arguments and serves its
6
+ * output over a per-run SSE stream (same machinery as session capture
7
+ * streams), batched every ~500ms. Lines arrive via 'lines'/'line'; 'exit'
8
+ * fires once with logcat's exit code, or -1 when stopped or the stream is
9
+ * lost.
10
+ */
11
+ export interface LogcatProcessEvents {
12
+ lines: (lines: string[]) => void;
13
+ line: (line: string) => void;
14
+ error: (error: Error) => void;
15
+ exit: (exitCode: number) => void;
16
+ }
17
+ export declare class LogcatProcess extends EventEmitter {
18
+ private readonly apiUrl;
19
+ private readonly token;
20
+ private stopStream;
21
+ private runId;
22
+ private stopped;
23
+ private exited;
24
+ private readonly exitPromise;
25
+ private settleExit;
26
+ /** @internal */
27
+ constructor(apiUrl: string, token: string, args: string[]);
28
+ on<E extends keyof LogcatProcessEvents>(event: E, listener: LogcatProcessEvents[E]): this;
29
+ once<E extends keyof LogcatProcessEvents>(event: E, listener: LogcatProcessEvents[E]): this;
30
+ off<E extends keyof LogcatProcessEvents>(event: E, listener: LogcatProcessEvents[E]): this;
31
+ /** Resolves with logcat's exit code; -1 when stopped or the stream was lost. */
32
+ wait(): Promise<number>;
33
+ /** Stop the remote logcat process and close the stream. */
34
+ stop(): void;
35
+ private deleteRun;
36
+ private finish;
37
+ private fail;
38
+ private start;
39
+ }
40
+ //# sourceMappingURL=logcat-process.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logcat-process.d.mts","sourceRoot":"","sources":["src/logcat-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAUD,qBAAa,aAAc,SAAQ,YAAY;IAU3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,UAAU,CAA0B;IAE5C,gBAAgB;gBAEG,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAC9B,IAAI,EAAE,MAAM,EAAE;IASP,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAIzF,IAAI,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3F,GAAG,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAInG,gFAAgF;IAChF,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvB,2DAA2D;IAC3D,IAAI,IAAI,IAAI;IAOZ,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,IAAI;YASE,KAAK;CA+CpB"}
@@ -0,0 +1,40 @@
1
+ import { EventEmitter } from 'events';
2
+ /**
3
+ * Handle for one logcat invocation on an Android instance.
4
+ *
5
+ * The instance runs `logcat` with the caller's arguments and serves its
6
+ * output over a per-run SSE stream (same machinery as session capture
7
+ * streams), batched every ~500ms. Lines arrive via 'lines'/'line'; 'exit'
8
+ * fires once with logcat's exit code, or -1 when stopped or the stream is
9
+ * lost.
10
+ */
11
+ export interface LogcatProcessEvents {
12
+ lines: (lines: string[]) => void;
13
+ line: (line: string) => void;
14
+ error: (error: Error) => void;
15
+ exit: (exitCode: number) => void;
16
+ }
17
+ export declare class LogcatProcess extends EventEmitter {
18
+ private readonly apiUrl;
19
+ private readonly token;
20
+ private stopStream;
21
+ private runId;
22
+ private stopped;
23
+ private exited;
24
+ private readonly exitPromise;
25
+ private settleExit;
26
+ /** @internal */
27
+ constructor(apiUrl: string, token: string, args: string[]);
28
+ on<E extends keyof LogcatProcessEvents>(event: E, listener: LogcatProcessEvents[E]): this;
29
+ once<E extends keyof LogcatProcessEvents>(event: E, listener: LogcatProcessEvents[E]): this;
30
+ off<E extends keyof LogcatProcessEvents>(event: E, listener: LogcatProcessEvents[E]): this;
31
+ /** Resolves with logcat's exit code; -1 when stopped or the stream was lost. */
32
+ wait(): Promise<number>;
33
+ /** Stop the remote logcat process and close the stream. */
34
+ stop(): void;
35
+ private deleteRun;
36
+ private finish;
37
+ private fail;
38
+ private start;
39
+ }
40
+ //# sourceMappingURL=logcat-process.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logcat-process.d.ts","sourceRoot":"","sources":["src/logcat-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IACjC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,KAAK,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAC9B,IAAI,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAUD,qBAAa,aAAc,SAAQ,YAAY;IAU3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAVxB,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkB;IAC9C,OAAO,CAAC,UAAU,CAA0B;IAE5C,gBAAgB;gBAEG,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAC9B,IAAI,EAAE,MAAM,EAAE;IASP,EAAE,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAIzF,IAAI,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAI3F,GAAG,CAAC,CAAC,SAAS,MAAM,mBAAmB,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,GAAG,IAAI;IAInG,gFAAgF;IAChF,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC;IAIvB,2DAA2D;IAC3D,IAAI,IAAI,IAAI;IAOZ,OAAO,CAAC,SAAS;IAWjB,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,IAAI;YASE,KAAK;CA+CpB"}
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LogcatProcess = void 0;
4
+ const events_1 = require("events");
5
+ const proxy_transport_1 = require("./internal/proxy-transport.js");
6
+ const session_stream_1 = require("./internal/session-stream.js");
7
+ class LogcatProcess extends events_1.EventEmitter {
8
+ /** @internal */
9
+ constructor(apiUrl, token, args) {
10
+ super();
11
+ this.apiUrl = apiUrl;
12
+ this.token = token;
13
+ this.stopStream = null;
14
+ this.runId = null;
15
+ this.stopped = false;
16
+ this.exited = false;
17
+ this.exitPromise = new Promise((resolve) => {
18
+ this.settleExit = resolve;
19
+ });
20
+ void this.start(args);
21
+ }
22
+ on(event, listener) {
23
+ return super.on(event, listener);
24
+ }
25
+ once(event, listener) {
26
+ return super.once(event, listener);
27
+ }
28
+ off(event, listener) {
29
+ return super.off(event, listener);
30
+ }
31
+ /** Resolves with logcat's exit code; -1 when stopped or the stream was lost. */
32
+ wait() {
33
+ return this.exitPromise;
34
+ }
35
+ /** Stop the remote logcat process and close the stream. */
36
+ stop() {
37
+ if (this.stopped || this.exited)
38
+ return;
39
+ this.stopped = true;
40
+ this.deleteRun(this.runId);
41
+ this.finish(-1);
42
+ }
43
+ deleteRun(runId) {
44
+ if (!runId)
45
+ return;
46
+ // Fire and forget: the server's idle sweep reaps the run if this is lost.
47
+ void proxy_transport_1.nodeProxyTransport
48
+ .fetch(`${this.apiUrl}/logcat/${runId}`, {
49
+ method: 'DELETE',
50
+ headers: { Authorization: `Bearer ${this.token}` },
51
+ })
52
+ .catch(() => { });
53
+ }
54
+ finish(code) {
55
+ if (this.exited)
56
+ return;
57
+ this.exited = true;
58
+ this.stopStream?.();
59
+ this.stopStream = null;
60
+ this.settleExit(code);
61
+ this.emit('exit', code);
62
+ }
63
+ fail(error) {
64
+ if (this.exited)
65
+ return;
66
+ // The remote process must not outlive a lost stream; the idle sweep is
67
+ // only the fallback for when this delete is lost too.
68
+ this.deleteRun(this.runId);
69
+ this.emit('error', error);
70
+ this.finish(-1);
71
+ }
72
+ async start(args) {
73
+ let id;
74
+ try {
75
+ const response = await proxy_transport_1.nodeProxyTransport.fetch(`${this.apiUrl}/logcat`, {
76
+ method: 'POST',
77
+ headers: { Authorization: `Bearer ${this.token}`, 'Content-Type': 'application/json' },
78
+ body: JSON.stringify({ args }),
79
+ });
80
+ if (!response.ok) {
81
+ const text = await response.text().catch(() => '');
82
+ throw new Error(`logcat failed to start: HTTP ${response.status}${text ? ` ${text.trim()}` : ''}`);
83
+ }
84
+ const data = (await response.json());
85
+ if (!data.id) {
86
+ throw new Error('logcat failed to start: server returned no run id');
87
+ }
88
+ id = data.id;
89
+ }
90
+ catch (err) {
91
+ this.fail(err instanceof Error ? err : new Error(String(err)));
92
+ return;
93
+ }
94
+ if (this.stopped) {
95
+ // stop() raced the POST; kill the run it just created.
96
+ this.deleteRun(id);
97
+ return;
98
+ }
99
+ this.runId = id;
100
+ this.stopStream = (0, session_stream_1.streamSessionEntries)({
101
+ url: `${this.apiUrl}/logcat/${id}/events`,
102
+ token: this.token,
103
+ onEntry: (entry) => {
104
+ if (entry.lines && entry.lines.length > 0) {
105
+ this.emit('lines', entry.lines);
106
+ for (const line of entry.lines) {
107
+ this.emit('line', line);
108
+ }
109
+ }
110
+ if (entry.error) {
111
+ this.emit('error', new Error(entry.error));
112
+ }
113
+ if (typeof entry.exitCode === 'number') {
114
+ this.finish(entry.exitCode);
115
+ }
116
+ },
117
+ onError: (error) => this.fail(error),
118
+ });
119
+ }
120
+ }
121
+ exports.LogcatProcess = LogcatProcess;
122
+ //# sourceMappingURL=logcat-process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logcat-process.js","sourceRoot":"","sources":["src/logcat-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ import { EventEmitter } from 'events';
2
+ import { nodeProxyTransport } from "./internal/proxy-transport.mjs";
3
+ import { streamSessionEntries } from "./internal/session-stream.mjs";
4
+ export class LogcatProcess extends EventEmitter {
5
+ /** @internal */
6
+ constructor(apiUrl, token, args) {
7
+ super();
8
+ this.apiUrl = apiUrl;
9
+ this.token = token;
10
+ this.stopStream = null;
11
+ this.runId = null;
12
+ this.stopped = false;
13
+ this.exited = false;
14
+ this.exitPromise = new Promise((resolve) => {
15
+ this.settleExit = resolve;
16
+ });
17
+ void this.start(args);
18
+ }
19
+ on(event, listener) {
20
+ return super.on(event, listener);
21
+ }
22
+ once(event, listener) {
23
+ return super.once(event, listener);
24
+ }
25
+ off(event, listener) {
26
+ return super.off(event, listener);
27
+ }
28
+ /** Resolves with logcat's exit code; -1 when stopped or the stream was lost. */
29
+ wait() {
30
+ return this.exitPromise;
31
+ }
32
+ /** Stop the remote logcat process and close the stream. */
33
+ stop() {
34
+ if (this.stopped || this.exited)
35
+ return;
36
+ this.stopped = true;
37
+ this.deleteRun(this.runId);
38
+ this.finish(-1);
39
+ }
40
+ deleteRun(runId) {
41
+ if (!runId)
42
+ return;
43
+ // Fire and forget: the server's idle sweep reaps the run if this is lost.
44
+ void nodeProxyTransport
45
+ .fetch(`${this.apiUrl}/logcat/${runId}`, {
46
+ method: 'DELETE',
47
+ headers: { Authorization: `Bearer ${this.token}` },
48
+ })
49
+ .catch(() => { });
50
+ }
51
+ finish(code) {
52
+ if (this.exited)
53
+ return;
54
+ this.exited = true;
55
+ this.stopStream?.();
56
+ this.stopStream = null;
57
+ this.settleExit(code);
58
+ this.emit('exit', code);
59
+ }
60
+ fail(error) {
61
+ if (this.exited)
62
+ return;
63
+ // The remote process must not outlive a lost stream; the idle sweep is
64
+ // only the fallback for when this delete is lost too.
65
+ this.deleteRun(this.runId);
66
+ this.emit('error', error);
67
+ this.finish(-1);
68
+ }
69
+ async start(args) {
70
+ let id;
71
+ try {
72
+ const response = await nodeProxyTransport.fetch(`${this.apiUrl}/logcat`, {
73
+ method: 'POST',
74
+ headers: { Authorization: `Bearer ${this.token}`, 'Content-Type': 'application/json' },
75
+ body: JSON.stringify({ args }),
76
+ });
77
+ if (!response.ok) {
78
+ const text = await response.text().catch(() => '');
79
+ throw new Error(`logcat failed to start: HTTP ${response.status}${text ? ` ${text.trim()}` : ''}`);
80
+ }
81
+ const data = (await response.json());
82
+ if (!data.id) {
83
+ throw new Error('logcat failed to start: server returned no run id');
84
+ }
85
+ id = data.id;
86
+ }
87
+ catch (err) {
88
+ this.fail(err instanceof Error ? err : new Error(String(err)));
89
+ return;
90
+ }
91
+ if (this.stopped) {
92
+ // stop() raced the POST; kill the run it just created.
93
+ this.deleteRun(id);
94
+ return;
95
+ }
96
+ this.runId = id;
97
+ this.stopStream = streamSessionEntries({
98
+ url: `${this.apiUrl}/logcat/${id}/events`,
99
+ token: this.token,
100
+ onEntry: (entry) => {
101
+ if (entry.lines && entry.lines.length > 0) {
102
+ this.emit('lines', entry.lines);
103
+ for (const line of entry.lines) {
104
+ this.emit('line', line);
105
+ }
106
+ }
107
+ if (entry.error) {
108
+ this.emit('error', new Error(entry.error));
109
+ }
110
+ if (typeof entry.exitCode === 'number') {
111
+ this.finish(entry.exitCode);
112
+ }
113
+ },
114
+ onError: (error) => this.fail(error),
115
+ });
116
+ }
117
+ }
118
+ //# sourceMappingURL=logcat-process.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logcat-process.mjs","sourceRoot":"","sources":["src/logcat-process.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function parseToolRequests(requests: string[]): Record<string, string>;
2
+ //# sourceMappingURL=mise-tools.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mise-tools.d.mts","sourceRoot":"","sources":["src/mise-tools.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY5E"}
@@ -0,0 +1,2 @@
1
+ export declare function parseToolRequests(requests: string[]): Record<string, string>;
2
+ //# sourceMappingURL=mise-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mise-tools.d.ts","sourceRoot":"","sources":["src/mise-tools.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAY5E"}
package/mise-tools.js ADDED
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseToolRequests = parseToolRequests;
4
+ function parseToolRequests(requests) {
5
+ const tools = {};
6
+ for (const request of requests) {
7
+ const at = request.lastIndexOf('@');
8
+ if (at <= 0 || !request.slice(at + 1).trim())
9
+ throw new Error(`Expected tool@version, received ${JSON.stringify(request)}.`);
10
+ const name = request.slice(0, at);
11
+ if (!/^[A-Za-z0-9][A-Za-z0-9:_./-]*$/.test(name))
12
+ throw new Error(`Invalid tool name ${JSON.stringify(name)}.`);
13
+ tools[name] = request.slice(at + 1);
14
+ }
15
+ return tools;
16
+ }
17
+ //# sourceMappingURL=mise-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mise-tools.js","sourceRoot":"","sources":["src/mise-tools.ts"],"names":[],"mappings":";;AAAA,8CAYC;AAZD,SAAgB,iBAAiB,CAAC,QAAkB;IAClD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/mise-tools.mjs ADDED
@@ -0,0 +1,14 @@
1
+ export function parseToolRequests(requests) {
2
+ const tools = {};
3
+ for (const request of requests) {
4
+ const at = request.lastIndexOf('@');
5
+ if (at <= 0 || !request.slice(at + 1).trim())
6
+ throw new Error(`Expected tool@version, received ${JSON.stringify(request)}.`);
7
+ const name = request.slice(0, at);
8
+ if (!/^[A-Za-z0-9][A-Za-z0-9:_./-]*$/.test(name))
9
+ throw new Error(`Invalid tool name ${JSON.stringify(name)}.`);
10
+ tools[name] = request.slice(at + 1);
11
+ }
12
+ return tools;
13
+ }
14
+ //# sourceMappingURL=mise-tools.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mise-tools.mjs","sourceRoot":"","sources":["src/mise-tools.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,QAAkB;IAClD,MAAM,KAAK,GAA2B,EAAE,CAAC;IACzC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE;YAC1C,MAAM,IAAI,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,qBAAqB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@limrun/api",
3
- "version": "0.49.3",
3
+ "version": "0.50.1",
4
4
  "description": "The official TypeScript library for the Limrun API",
5
5
  "author": "Limrun <contact@limrun.com>",
6
6
  "types": "./index.d.ts",
@@ -259,6 +259,36 @@
259
259
  "./ios-shim.mjs": {
260
260
  "default": "./ios-shim.mjs"
261
261
  },
262
+ "./log-stream": {
263
+ "import": "./log-stream.mjs",
264
+ "require": "./log-stream.js"
265
+ },
266
+ "./log-stream.js": {
267
+ "default": "./log-stream.js"
268
+ },
269
+ "./log-stream.mjs": {
270
+ "default": "./log-stream.mjs"
271
+ },
272
+ "./logcat-process": {
273
+ "import": "./logcat-process.mjs",
274
+ "require": "./logcat-process.js"
275
+ },
276
+ "./logcat-process.js": {
277
+ "default": "./logcat-process.js"
278
+ },
279
+ "./logcat-process.mjs": {
280
+ "default": "./logcat-process.mjs"
281
+ },
282
+ "./mise-tools": {
283
+ "import": "./mise-tools.mjs",
284
+ "require": "./mise-tools.js"
285
+ },
286
+ "./mise-tools.js": {
287
+ "default": "./mise-tools.js"
288
+ },
289
+ "./mise-tools.mjs": {
290
+ "default": "./mise-tools.mjs"
291
+ },
262
292
  "./pagination": {
263
293
  "import": "./pagination.mjs",
264
294
  "require": "./pagination.js"
@@ -1,3 +1,4 @@
1
+ import { type ExecOptions } from "../exec-client.mjs";
1
2
  export type LogLevel = 'none' | 'error' | 'warn' | 'info' | 'debug';
2
3
  export interface BuildLog {
3
4
  /** Exec ID assigned by the build daemon, e.g. build-1776140344112378000. */
@@ -77,4 +78,14 @@ export declare function mintAssetUploadUrls(assets: {
77
78
  } & AssetUploadOptions) => Promise<AssetUploadUrls>;
78
79
  }, name: string, ttl?: string, uploadOptions?: AssetUploadOptions): Promise<AssetUploadUrls>;
79
80
  export declare function createDaemonLogger(prefix: string, logLevel: LogLevel): (level: "debug" | "info" | "warn" | "error", msg: string) => void;
81
+ export type BuildRunOptions = {
82
+ /** Working directory relative to the synced workspace. Defaults to ".". */
83
+ cwd?: string;
84
+ /** Extra KEY=VALUE entries. Sandbox paths remain managed; the last repeated user entry wins. */
85
+ env?: string[];
86
+ /** Command timeout in seconds, from 1 to 21600. Defaults to 3600. */
87
+ timeoutSeconds?: number;
88
+ };
89
+ /** Create the shared shell command runner for build sandboxes. */
90
+ export declare function createBuildRun(execOptions: ExecOptions): (commandLine: string, options?: BuildRunOptions) => import("../exec-client.mjs").ExecChildProcess;
80
91
  //# sourceMappingURL=daemon-client-shared.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-client-shared.d.mts","sourceRoot":"","sources":["../src/resources/daemon-client-shared.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAWpE,MAAM,WAAW,QAAQ;IACvB,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IAEX,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;IAEf,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAM7C;AAED,MAAM,MAAM,UAAU,GAAG;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IACN,WAAW,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACtG,EACD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,IAG3D,OAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,KAAK,MAAM,UAQhE"}
1
+ {"version":3,"file":"daemon-client-shared.d.mts","sourceRoot":"","sources":["../src/resources/daemon-client-shared.ts"],"names":[],"mappings":"AAMA,OAAO,EAAQ,KAAK,WAAW,EAAuB,2BAAuB;AAE7E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAWpE,MAAM,WAAW,QAAQ;IACvB,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IAEX,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;IAEf,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAM7C;AAED,MAAM,MAAM,UAAU,GAAG;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IACN,WAAW,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACtG,EACD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,IAG3D,OAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,KAAK,MAAM,UAQhE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,IAC7C,aAAa,MAAM,EAAE,UAAU,eAAe,mDAmBvD"}
@@ -1,3 +1,4 @@
1
+ import { type ExecOptions } from "../exec-client.js";
1
2
  export type LogLevel = 'none' | 'error' | 'warn' | 'info' | 'debug';
2
3
  export interface BuildLog {
3
4
  /** Exec ID assigned by the build daemon, e.g. build-1776140344112378000. */
@@ -77,4 +78,14 @@ export declare function mintAssetUploadUrls(assets: {
77
78
  } & AssetUploadOptions) => Promise<AssetUploadUrls>;
78
79
  }, name: string, ttl?: string, uploadOptions?: AssetUploadOptions): Promise<AssetUploadUrls>;
79
80
  export declare function createDaemonLogger(prefix: string, logLevel: LogLevel): (level: "debug" | "info" | "warn" | "error", msg: string) => void;
81
+ export type BuildRunOptions = {
82
+ /** Working directory relative to the synced workspace. Defaults to ".". */
83
+ cwd?: string;
84
+ /** Extra KEY=VALUE entries. Sandbox paths remain managed; the last repeated user entry wins. */
85
+ env?: string[];
86
+ /** Command timeout in seconds, from 1 to 21600. Defaults to 3600. */
87
+ timeoutSeconds?: number;
88
+ };
89
+ /** Create the shared shell command runner for build sandboxes. */
90
+ export declare function createBuildRun(execOptions: ExecOptions): (commandLine: string, options?: BuildRunOptions) => import("../exec-client.js").ExecChildProcess;
80
91
  //# sourceMappingURL=daemon-client-shared.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-client-shared.d.ts","sourceRoot":"","sources":["../src/resources/daemon-client-shared.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAWpE,MAAM,WAAW,QAAQ;IACvB,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IAEX,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;IAEf,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAM7C;AAED,MAAM,MAAM,UAAU,GAAG;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IACN,WAAW,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACtG,EACD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,IAG3D,OAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,KAAK,MAAM,UAQhE"}
1
+ {"version":3,"file":"daemon-client-shared.d.ts","sourceRoot":"","sources":["../src/resources/daemon-client-shared.ts"],"names":[],"mappings":"AAMA,OAAO,EAAQ,KAAK,WAAW,EAAuB,0BAAuB;AAE7E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAWpE,MAAM,WAAW,QAAQ;IACvB,4EAA4E;IAC5E,EAAE,EAAE,MAAM,CAAC;IAEX,wFAAwF;IACxF,MAAM,EAAE,MAAM,CAAC;IAEf,+EAA+E;IAC/E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,CAAC;IAEzB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAM7C;AAED,MAAM,MAAM,UAAU,GAAG;IACvB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,YAAY,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAC;IAAC,iBAAiB,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjG;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,iDAAiD;IACjD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAE9C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE;IACN,WAAW,EAAE,CAAC,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,kBAAkB,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;CACtG,EACD,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,kBAAkB,GACjC,OAAO,CAAC,eAAe,CAAC,CAQ1B;AAID,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,IAG3D,OAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,KAAK,MAAM,UAQhE;AAED,MAAM,MAAM,eAAe,GAAG;IAC5B,2EAA2E;IAC3E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gGAAgG;IAChG,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,qEAAqE;IACrE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,kEAAkE;AAClE,wBAAgB,cAAc,CAAC,WAAW,EAAE,WAAW,IAC7C,aAAa,MAAM,EAAE,UAAU,eAAe,kDAmBvD"}
@@ -6,10 +6,12 @@ exports.DEFAULT_BUILD_ASSET_TTL = void 0;
6
6
  exports.deriveBasisCache = deriveBasisCache;
7
7
  exports.mintAssetUploadUrls = mintAssetUploadUrls;
8
8
  exports.createDaemonLogger = createDaemonLogger;
9
+ exports.createBuildRun = createBuildRun;
9
10
  const tslib_1 = require("../internal/tslib.js");
10
11
  const os_1 = tslib_1.__importDefault(require("os"));
11
12
  const path_1 = tslib_1.__importDefault(require("path"));
12
13
  const crypto_1 = tslib_1.__importDefault(require("crypto"));
14
+ const exec_client_1 = require("../exec-client.js");
13
15
  /**
14
16
  * Derives the client-side folder-sync cache location for a local project.
15
17
  * The key format is a compatibility contract: changing it orphans every
@@ -58,4 +60,25 @@ function createDaemonLogger(prefix, logLevel) {
58
60
  }
59
61
  };
60
62
  }
63
+ /** Create the shared shell command runner for build sandboxes. */
64
+ function createBuildRun(execOptions) {
65
+ return (commandLine, options) => {
66
+ if (commandLine.trim() === '')
67
+ throw new Error('commandLine must not be empty');
68
+ if (options?.timeoutSeconds !== undefined &&
69
+ (!Number.isInteger(options.timeoutSeconds) ||
70
+ options.timeoutSeconds < 1 ||
71
+ options.timeoutSeconds > 21600)) {
72
+ throw new Error('timeoutSeconds must be an integer between 1 and 21600');
73
+ }
74
+ const request = {
75
+ command: 'run',
76
+ commandLine,
77
+ cwd: options?.cwd ?? '.',
78
+ ...(options?.env?.length && { env: options.env }),
79
+ ...(options?.timeoutSeconds !== undefined && { timeoutSeconds: options.timeoutSeconds }),
80
+ };
81
+ return (0, exec_client_1.exec)(request, execOptions);
82
+ };
83
+ }
61
84
  //# sourceMappingURL=daemon-client-shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-client-shared.js","sourceRoot":"","sources":["../src/resources/daemon-client-shared.ts"],"names":[],"mappings":";AAAA,6EAA6E;AAC7E,2BAA2B;;;AA+C3B,4CASC;AA+CD,kDAeC;AAID,gDAWC;;AAnID,oDAAoB;AACpB,wDAAwB;AACxB,4DAA4B;AAqC5B;;;;;GAKG;AACH,SAAgB,gBAAgB,CAC9B,aAAqB,EACrB,QAAiB;IAEjB,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,cAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,gBAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,iBAAiB,UAAU,IAAI,IAAI,EAAE,CAAC;IACvD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,IAAI,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AACnF,CAAC;AAiCD;;;;;GAKG;AACU,QAAA,uBAAuB,GAAG,MAAM,CAAC;AAE9C;;;;;GAKG;AACH,SAAgB,mBAAmB,CACjC,MAEC,EACD,IAAY,EACZ,GAAY,EACZ,aAAkC;IAElC,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,+BAAuB,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACvG,MAAM,OAAO,GAAG,0CAA0C,IAAI,MAC5D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GACvC,EAAE,CAAC;QACH,8DAA8D;QAC9D,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,SAAS,GAAe,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzE,SAAgB,kBAAkB,CAAC,MAAc,EAAE,QAAkB;IACnE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7E,OAAO,CAAC,KAA0C,EAAE,GAAW,EAAE,EAAE;QACjE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO;QAC9B,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"daemon-client-shared.js","sourceRoot":"","sources":["../src/resources/daemon-client-shared.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@
3
3
  import os from 'os';
4
4
  import path from 'path';
5
5
  import crypto from 'crypto';
6
+ import { exec } from "../exec-client.mjs";
6
7
  /**
7
8
  * Derives the client-side folder-sync cache location for a local project.
8
9
  * The key format is a compatibility contract: changing it orphans every
@@ -51,4 +52,25 @@ export function createDaemonLogger(prefix, logLevel) {
51
52
  }
52
53
  };
53
54
  }
55
+ /** Create the shared shell command runner for build sandboxes. */
56
+ export function createBuildRun(execOptions) {
57
+ return (commandLine, options) => {
58
+ if (commandLine.trim() === '')
59
+ throw new Error('commandLine must not be empty');
60
+ if (options?.timeoutSeconds !== undefined &&
61
+ (!Number.isInteger(options.timeoutSeconds) ||
62
+ options.timeoutSeconds < 1 ||
63
+ options.timeoutSeconds > 21600)) {
64
+ throw new Error('timeoutSeconds must be an integer between 1 and 21600');
65
+ }
66
+ const request = {
67
+ command: 'run',
68
+ commandLine,
69
+ cwd: options?.cwd ?? '.',
70
+ ...(options?.env?.length && { env: options.env }),
71
+ ...(options?.timeoutSeconds !== undefined && { timeoutSeconds: options.timeoutSeconds }),
72
+ };
73
+ return exec(request, execOptions);
74
+ };
75
+ }
54
76
  //# sourceMappingURL=daemon-client-shared.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"daemon-client-shared.mjs","sourceRoot":"","sources":["../src/resources/daemon-client-shared.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,2BAA2B;AAE3B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,QAAQ,CAAC;AAqC5B;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,aAAqB,EACrB,QAAiB;IAEjB,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtF,MAAM,QAAQ,GAAG,iBAAiB,UAAU,IAAI,IAAI,EAAE,CAAC;IACvD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AACnF,CAAC;AAiCD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,MAAM,CAAC;AAE9C;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAEC,EACD,IAAY,EACZ,GAAY,EACZ,aAAkC;IAElC,OAAO,MAAM,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,uBAAuB,EAAE,GAAG,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACvG,MAAM,OAAO,GAAG,0CAA0C,IAAI,MAC5D,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GACvC,EAAE,CAAC;QACH,8DAA8D;QAC9D,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,SAAS,GAAe,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAEzE,MAAM,UAAU,kBAAkB,CAAC,MAAc,EAAE,QAAkB;IACnE,MAAM,SAAS,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,CAAC,KAAe,EAAE,EAAE,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7E,OAAO,CAAC,KAA0C,EAAE,GAAW,EAAE,EAAE;QACjE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YAAE,OAAO;QAC9B,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YAC1C,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"daemon-client-shared.mjs","sourceRoot":"","sources":["../src/resources/daemon-client-shared.ts"],"names":[],"mappings":"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"}