@indigoai-us/hq-cloud 6.18.23 → 6.18.25

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.
@@ -0,0 +1,23 @@
1
+ export interface WatchParentStdin {
2
+ readonly isTTY?: boolean;
3
+ on(event: "end", listener: () => void): unknown;
4
+ off(event: "end", listener: () => void): unknown;
5
+ resume(): unknown;
6
+ }
7
+ export interface WatchParentExitOptions {
8
+ parentPid: number;
9
+ initialParentPid: number;
10
+ onParentExit: () => void;
11
+ platform?: NodeJS.Platform;
12
+ getParentPid?: () => number;
13
+ parentExists?: (pid: number) => boolean;
14
+ stdin?: WatchParentStdin;
15
+ intervalMs?: number;
16
+ }
17
+ export interface WatchParentExitMonitor {
18
+ stop(): void;
19
+ }
20
+ export declare const WATCH_PARENT_CHECK_INTERVAL_MS = 1000;
21
+ /** Stop an opted-in watch runner when its recorded launcher exits. */
22
+ export declare function startWatchParentExitMonitor(options: WatchParentExitOptions): WatchParentExitMonitor;
23
+ //# sourceMappingURL=watch-parent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-parent.d.ts","sourceRoot":"","sources":["../src/watch-parent.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IAChD,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IACjD,MAAM,IAAI,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACxC,KAAK,CAAC,EAAE,gBAAgB,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,IAAI,IAAI,CAAC;CACd;AAED,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AAWpD,sEAAsE;AACtE,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,sBAAsB,GAC9B,sBAAsB,CAoCxB"}
@@ -0,0 +1,52 @@
1
+ export const WATCH_PARENT_CHECK_INTERVAL_MS = 1_000;
2
+ function processExists(pid) {
3
+ try {
4
+ process.kill(pid, 0);
5
+ return true;
6
+ }
7
+ catch (error) {
8
+ return error.code !== "ESRCH";
9
+ }
10
+ }
11
+ /** Stop an opted-in watch runner when its recorded launcher exits. */
12
+ export function startWatchParentExitMonitor(options) {
13
+ const platform = options.platform ?? process.platform;
14
+ const getParentPid = options.getParentPid ?? (() => process.ppid);
15
+ const parentExists = options.parentExists ?? processExists;
16
+ let stopped = false;
17
+ let notified = false;
18
+ const notify = () => {
19
+ if (notified)
20
+ return;
21
+ notified = true;
22
+ options.onParentExit();
23
+ };
24
+ const check = () => {
25
+ if (stopped || notified)
26
+ return;
27
+ const reparented = platform !== "win32" && getParentPid() !== options.initialParentPid;
28
+ if (reparented || !parentExists(options.parentPid))
29
+ notify();
30
+ };
31
+ const timer = setInterval(check, options.intervalMs ?? WATCH_PARENT_CHECK_INTERVAL_MS);
32
+ timer.unref();
33
+ const stdin = options.stdin ?? process.stdin;
34
+ const onStdinEnd = () => check();
35
+ const watchStdin = stdin.isTTY !== true;
36
+ if (watchStdin) {
37
+ stdin.on("end", onStdinEnd);
38
+ stdin.resume();
39
+ }
40
+ check();
41
+ return {
42
+ stop() {
43
+ if (stopped)
44
+ return;
45
+ stopped = true;
46
+ clearInterval(timer);
47
+ if (watchStdin)
48
+ stdin.off("end", onStdinEnd);
49
+ },
50
+ };
51
+ }
52
+ //# sourceMappingURL=watch-parent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-parent.js","sourceRoot":"","sources":["../src/watch-parent.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,8BAA8B,GAAG,KAAK,CAAC;AAEpD,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAQ,KAA+B,CAAC,IAAI,KAAK,OAAO,CAAC;IAC3D,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,2BAA2B,CACzC,OAA+B;IAE/B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACtD,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAClE,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,aAAa,CAAC;IAC3D,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,QAAQ,GAAG,KAAK,CAAC;IACrB,MAAM,MAAM,GAAG,GAAS,EAAE;QACxB,IAAI,QAAQ;YAAE,OAAO;QACrB,QAAQ,GAAG,IAAI,CAAC;QAChB,OAAO,CAAC,YAAY,EAAE,CAAC;IACzB,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,OAAO,IAAI,QAAQ;YAAE,OAAO;QAChC,MAAM,UAAU,GAAG,QAAQ,KAAK,OAAO,IAAI,YAAY,EAAE,KAAK,OAAO,CAAC,gBAAgB,CAAC;QACvF,IAAI,UAAU,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;YAAE,MAAM,EAAE,CAAC;IAC/D,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,IAAI,8BAA8B,CAAC,CAAC;IACvF,KAAK,CAAC,KAAK,EAAE,CAAC;IACd,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC;IAC7C,MAAM,UAAU,GAAG,GAAS,EAAE,CAAC,KAAK,EAAE,CAAC;IACvC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;IACxC,IAAI,UAAU,EAAE,CAAC;QACf,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5B,KAAK,CAAC,MAAM,EAAE,CAAC;IACjB,CAAC;IACD,KAAK,EAAE,CAAC;IAER,OAAO;QACL,IAAI;YACF,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,aAAa,CAAC,KAAK,CAAC,CAAC;YACrB,IAAI,UAAU;gBAAE,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=watch-parent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-parent.test.d.ts","sourceRoot":"","sources":["../src/watch-parent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,131 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { startWatchParentExitMonitor } from "./watch-parent.js";
3
+ describe("watch parent exit monitor", () => {
4
+ it("requests graceful stop when a Unix child is reparented", () => {
5
+ const onParentExit = vi.fn();
6
+ const monitor = startWatchParentExitMonitor({
7
+ parentPid: 42,
8
+ initialParentPid: 42,
9
+ platform: "darwin",
10
+ getParentPid: () => 1,
11
+ parentExists: () => true,
12
+ onParentExit,
13
+ intervalMs: 60_000,
14
+ });
15
+ expect(onParentExit).toHaveBeenCalledOnce();
16
+ monitor.stop();
17
+ });
18
+ it("watches the explicitly recorded launcher until it exits", () => {
19
+ const onParentExit = vi.fn();
20
+ let parentAlive = true;
21
+ const parentExists = vi.fn(() => parentAlive);
22
+ vi.useFakeTimers();
23
+ const monitor = startWatchParentExitMonitor({
24
+ parentPid: 9001,
25
+ initialParentPid: 42,
26
+ platform: "linux",
27
+ getParentPid: () => 42,
28
+ parentExists,
29
+ stdin: { isTTY: true, on: vi.fn(), off: vi.fn(), resume: vi.fn() },
30
+ onParentExit,
31
+ intervalMs: 1_000,
32
+ });
33
+ expect(parentExists).toHaveBeenLastCalledWith(9001);
34
+ expect(onParentExit).not.toHaveBeenCalled();
35
+ parentAlive = false;
36
+ vi.advanceTimersByTime(1_000);
37
+ expect(onParentExit).toHaveBeenCalledOnce();
38
+ monitor.stop();
39
+ vi.useRealTimers();
40
+ });
41
+ it("uses the recorded parent's liveness on Windows", () => {
42
+ const onParentExit = vi.fn();
43
+ const monitor = startWatchParentExitMonitor({
44
+ parentPid: 42,
45
+ initialParentPid: 42,
46
+ platform: "win32",
47
+ getParentPid: () => 42,
48
+ parentExists: () => false,
49
+ onParentExit,
50
+ intervalMs: 60_000,
51
+ });
52
+ expect(onParentExit).toHaveBeenCalledOnce();
53
+ monitor.stop();
54
+ });
55
+ it("checks liveness on the bounded polling interval", () => {
56
+ vi.useFakeTimers();
57
+ const onParentExit = vi.fn();
58
+ const parentExists = vi.fn(() => true);
59
+ const monitor = startWatchParentExitMonitor({
60
+ parentPid: 42,
61
+ initialParentPid: 42,
62
+ platform: "linux",
63
+ getParentPid: () => 42,
64
+ parentExists,
65
+ stdin: { isTTY: true, on: vi.fn(), off: vi.fn(), resume: vi.fn() },
66
+ onParentExit,
67
+ intervalMs: 1_000,
68
+ });
69
+ parentExists.mockReturnValue(false);
70
+ vi.advanceTimersByTime(1_000);
71
+ expect(onParentExit).toHaveBeenCalledOnce();
72
+ monitor.stop();
73
+ vi.useRealTimers();
74
+ });
75
+ it("checks parent liveness on stdin EOF and leaves a live parent alone", () => {
76
+ const onParentExit = vi.fn();
77
+ let onEnd;
78
+ const stdin = {
79
+ isTTY: false,
80
+ on: vi.fn((event, handler) => {
81
+ if (event === "end")
82
+ onEnd = handler;
83
+ return stdin;
84
+ }),
85
+ off: vi.fn(),
86
+ resume: vi.fn(),
87
+ };
88
+ const parentExists = vi.fn(() => true);
89
+ const monitor = startWatchParentExitMonitor({
90
+ parentPid: 42,
91
+ initialParentPid: 42,
92
+ platform: "linux",
93
+ getParentPid: () => 42,
94
+ parentExists,
95
+ stdin,
96
+ onParentExit,
97
+ intervalMs: 60_000,
98
+ });
99
+ onEnd?.();
100
+ expect(parentExists).toHaveBeenCalled();
101
+ expect(onParentExit).not.toHaveBeenCalled();
102
+ expect(stdin.resume).toHaveBeenCalledOnce();
103
+ monitor.stop();
104
+ });
105
+ it("stops on stdin EOF when the recorded parent has exited", () => {
106
+ const onParentExit = vi.fn();
107
+ let onEnd;
108
+ let parentAlive = true;
109
+ const stdin = {
110
+ isTTY: false,
111
+ on: (_event, handler) => { onEnd = handler; },
112
+ off: vi.fn(),
113
+ resume: vi.fn(),
114
+ };
115
+ const monitor = startWatchParentExitMonitor({
116
+ parentPid: 42,
117
+ initialParentPid: 42,
118
+ platform: "linux",
119
+ getParentPid: () => 42,
120
+ parentExists: () => parentAlive,
121
+ stdin,
122
+ onParentExit,
123
+ intervalMs: 60_000,
124
+ });
125
+ parentAlive = false;
126
+ onEnd?.();
127
+ expect(onParentExit).toHaveBeenCalledOnce();
128
+ monitor.stop();
129
+ });
130
+ });
131
+ //# sourceMappingURL=watch-parent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch-parent.test.js","sourceRoot":"","sources":["../src/watch-parent.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@indigoai-us/hq-cloud",
3
- "version": "6.18.23",
3
+ "version": "6.18.25",
4
4
  "description": "HQ by Indigo cloud sync engine — bidirectional S3 sync for mobile access",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",