@phigon/observer 8.1.0 → 8.3.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 (309) hide show
  1. package/README.md +244 -18
  2. package/dist/bin/guardian-runner-darwin-amd64 +0 -0
  3. package/dist/bin/guardian-runner-darwin-arm64 +0 -0
  4. package/dist/bin/guardian-runner-linux-amd64 +0 -0
  5. package/dist/bin/guardian-runner-linux-arm64 +0 -0
  6. package/dist/bin/guardian-runner-windows-amd64.exe +0 -0
  7. package/dist/bin/guardian-runner-windows-arm64.exe +0 -0
  8. package/dist/src/abortable-delay.d.ts +10 -0
  9. package/dist/src/abortable-delay.d.ts.map +1 -0
  10. package/dist/src/abortable-delay.js +21 -0
  11. package/dist/src/abortable-delay.js.map +1 -0
  12. package/dist/src/action-policy.d.ts.map +1 -1
  13. package/dist/src/action-policy.js +4 -2
  14. package/dist/src/action-policy.js.map +1 -1
  15. package/dist/src/activity/adapters/claude.d.ts.map +1 -1
  16. package/dist/src/activity/adapters/claude.js +28 -2
  17. package/dist/src/activity/adapters/claude.js.map +1 -1
  18. package/dist/src/activity/adapters/cline-task.d.ts +7 -0
  19. package/dist/src/activity/adapters/cline-task.d.ts.map +1 -0
  20. package/dist/src/activity/adapters/cline-task.js +197 -0
  21. package/dist/src/activity/adapters/cline-task.js.map +1 -0
  22. package/dist/src/activity/adapters/cline.d.ts +3 -0
  23. package/dist/src/activity/adapters/cline.d.ts.map +1 -0
  24. package/dist/src/activity/adapters/cline.js +102 -0
  25. package/dist/src/activity/adapters/cline.js.map +1 -0
  26. package/dist/src/activity/adapters/codex.d.ts.map +1 -1
  27. package/dist/src/activity/adapters/codex.js +76 -0
  28. package/dist/src/activity/adapters/codex.js.map +1 -1
  29. package/dist/src/activity/adapters/copilot-chat.d.ts +3 -0
  30. package/dist/src/activity/adapters/copilot-chat.d.ts.map +1 -0
  31. package/dist/src/activity/adapters/copilot-chat.js +176 -0
  32. package/dist/src/activity/adapters/copilot-chat.js.map +1 -0
  33. package/dist/src/activity/adapters/copilot.d.ts +2 -1
  34. package/dist/src/activity/adapters/copilot.d.ts.map +1 -1
  35. package/dist/src/activity/adapters/copilot.js +173 -2
  36. package/dist/src/activity/adapters/copilot.js.map +1 -1
  37. package/dist/src/activity/adapters/cursor.d.ts +3 -0
  38. package/dist/src/activity/adapters/cursor.d.ts.map +1 -0
  39. package/dist/src/activity/adapters/cursor.js +86 -0
  40. package/dist/src/activity/adapters/cursor.js.map +1 -0
  41. package/dist/src/activity/adapters/factory-droid.d.ts +3 -0
  42. package/dist/src/activity/adapters/factory-droid.d.ts.map +1 -0
  43. package/dist/src/activity/adapters/factory-droid.js +126 -0
  44. package/dist/src/activity/adapters/factory-droid.js.map +1 -0
  45. package/dist/src/activity/adapters/gemini.d.ts +3 -0
  46. package/dist/src/activity/adapters/gemini.d.ts.map +1 -0
  47. package/dist/src/activity/adapters/gemini.js +177 -0
  48. package/dist/src/activity/adapters/gemini.js.map +1 -0
  49. package/dist/src/activity/adapters/goose.d.ts +3 -0
  50. package/dist/src/activity/adapters/goose.d.ts.map +1 -0
  51. package/dist/src/activity/adapters/goose.js +116 -0
  52. package/dist/src/activity/adapters/goose.js.map +1 -0
  53. package/dist/src/activity/adapters/kiro.d.ts +3 -0
  54. package/dist/src/activity/adapters/kiro.d.ts.map +1 -0
  55. package/dist/src/activity/adapters/kiro.js +47 -0
  56. package/dist/src/activity/adapters/kiro.js.map +1 -0
  57. package/dist/src/activity/adapters/openai-compatible.d.ts.map +1 -1
  58. package/dist/src/activity/adapters/openai-compatible.js +9 -1
  59. package/dist/src/activity/adapters/openai-compatible.js.map +1 -1
  60. package/dist/src/activity/adapters/opencode.d.ts.map +1 -1
  61. package/dist/src/activity/adapters/opencode.js +108 -1
  62. package/dist/src/activity/adapters/opencode.js.map +1 -1
  63. package/dist/src/activity/adapters/zed.d.ts +3 -0
  64. package/dist/src/activity/adapters/zed.d.ts.map +1 -0
  65. package/dist/src/activity/adapters/zed.js +134 -0
  66. package/dist/src/activity/adapters/zed.js.map +1 -0
  67. package/dist/src/activity/collector.d.ts +43 -1
  68. package/dist/src/activity/collector.d.ts.map +1 -1
  69. package/dist/src/activity/collector.js +490 -77
  70. package/dist/src/activity/collector.js.map +1 -1
  71. package/dist/src/activity/goose-sqlite-source.d.ts +33 -0
  72. package/dist/src/activity/goose-sqlite-source.d.ts.map +1 -0
  73. package/dist/src/activity/goose-sqlite-source.js +274 -0
  74. package/dist/src/activity/goose-sqlite-source.js.map +1 -0
  75. package/dist/src/activity/index.d.ts +3 -0
  76. package/dist/src/activity/index.d.ts.map +1 -1
  77. package/dist/src/activity/index.js +3 -0
  78. package/dist/src/activity/index.js.map +1 -1
  79. package/dist/src/activity/ingest.d.ts +9 -0
  80. package/dist/src/activity/ingest.d.ts.map +1 -1
  81. package/dist/src/activity/ingest.js +94 -4
  82. package/dist/src/activity/ingest.js.map +1 -1
  83. package/dist/src/activity/json-document-source.d.ts +151 -0
  84. package/dist/src/activity/json-document-source.d.ts.map +1 -0
  85. package/dist/src/activity/json-document-source.js +586 -0
  86. package/dist/src/activity/json-document-source.js.map +1 -0
  87. package/dist/src/activity/native-capabilities.d.ts.map +1 -1
  88. package/dist/src/activity/native-capabilities.js +8 -12
  89. package/dist/src/activity/native-capabilities.js.map +1 -1
  90. package/dist/src/activity/normalize.d.ts.map +1 -1
  91. package/dist/src/activity/normalize.js +64 -6
  92. package/dist/src/activity/normalize.js.map +1 -1
  93. package/dist/src/activity/opencode-message-tables.d.ts +87 -0
  94. package/dist/src/activity/opencode-message-tables.d.ts.map +1 -0
  95. package/dist/src/activity/opencode-message-tables.js +546 -0
  96. package/dist/src/activity/opencode-message-tables.js.map +1 -0
  97. package/dist/src/activity/opencode-sqlite-source.d.ts +7 -0
  98. package/dist/src/activity/opencode-sqlite-source.d.ts.map +1 -1
  99. package/dist/src/activity/opencode-sqlite-source.js +154 -63
  100. package/dist/src/activity/opencode-sqlite-source.js.map +1 -1
  101. package/dist/src/activity/source-reader.d.ts +60 -4
  102. package/dist/src/activity/source-reader.d.ts.map +1 -1
  103. package/dist/src/activity/source-reader.js +593 -75
  104. package/dist/src/activity/source-reader.js.map +1 -1
  105. package/dist/src/activity/sqlite-connections.d.ts +77 -0
  106. package/dist/src/activity/sqlite-connections.d.ts.map +1 -0
  107. package/dist/src/activity/sqlite-connections.js +220 -0
  108. package/dist/src/activity/sqlite-connections.js.map +1 -0
  109. package/dist/src/activity/zed-sqlite-source.d.ts +65 -0
  110. package/dist/src/activity/zed-sqlite-source.d.ts.map +1 -0
  111. package/dist/src/activity/zed-sqlite-source.js +547 -0
  112. package/dist/src/activity/zed-sqlite-source.js.map +1 -0
  113. package/dist/src/agent-action-executor.d.ts +18 -1
  114. package/dist/src/agent-action-executor.d.ts.map +1 -1
  115. package/dist/src/agent-action-executor.js +113 -58
  116. package/dist/src/agent-action-executor.js.map +1 -1
  117. package/dist/src/agentic-guardian.d.ts.map +1 -1
  118. package/dist/src/agentic-guardian.js +6 -5
  119. package/dist/src/agentic-guardian.js.map +1 -1
  120. package/dist/src/atomic-replace.d.ts +7 -0
  121. package/dist/src/atomic-replace.d.ts.map +1 -1
  122. package/dist/src/atomic-replace.js +28 -3
  123. package/dist/src/atomic-replace.js.map +1 -1
  124. package/dist/src/bridge-journal.d.ts +32 -0
  125. package/dist/src/bridge-journal.d.ts.map +1 -0
  126. package/dist/src/bridge-journal.js +113 -0
  127. package/dist/src/bridge-journal.js.map +1 -0
  128. package/dist/src/cli.d.ts +7 -1
  129. package/dist/src/cli.d.ts.map +1 -1
  130. package/dist/src/cli.js +534 -50
  131. package/dist/src/cli.js.map +1 -1
  132. package/dist/src/collection-notice.d.ts +34 -0
  133. package/dist/src/collection-notice.d.ts.map +1 -0
  134. package/dist/src/collection-notice.js +73 -0
  135. package/dist/src/collection-notice.js.map +1 -0
  136. package/dist/src/config.d.ts +39 -0
  137. package/dist/src/config.d.ts.map +1 -1
  138. package/dist/src/config.js +187 -36
  139. package/dist/src/config.js.map +1 -1
  140. package/dist/src/connection-config.d.ts.map +1 -1
  141. package/dist/src/connection-config.js +5 -0
  142. package/dist/src/connection-config.js.map +1 -1
  143. package/dist/src/content-redaction.d.ts +17 -1
  144. package/dist/src/content-redaction.d.ts.map +1 -1
  145. package/dist/src/content-redaction.js +51 -3
  146. package/dist/src/content-redaction.js.map +1 -1
  147. package/dist/src/credential-store.d.ts +20 -1
  148. package/dist/src/credential-store.d.ts.map +1 -1
  149. package/dist/src/credential-store.js +29 -4
  150. package/dist/src/credential-store.js.map +1 -1
  151. package/dist/src/custom-agent-registry.d.ts.map +1 -1
  152. package/dist/src/custom-agent-registry.js +2 -1
  153. package/dist/src/custom-agent-registry.js.map +1 -1
  154. package/dist/src/discovery/adapters/generic.d.ts.map +1 -1
  155. package/dist/src/discovery/adapters/generic.js +160 -2
  156. package/dist/src/discovery/adapters/generic.js.map +1 -1
  157. package/dist/src/discovery/engine.d.ts +7 -1
  158. package/dist/src/discovery/engine.d.ts.map +1 -1
  159. package/dist/src/discovery/engine.js +21 -16
  160. package/dist/src/discovery/engine.js.map +1 -1
  161. package/dist/src/discovery/known-agent.d.ts +7 -0
  162. package/dist/src/discovery/known-agent.d.ts.map +1 -1
  163. package/dist/src/discovery/known-agent.js +9 -4
  164. package/dist/src/discovery/known-agent.js.map +1 -1
  165. package/dist/src/discovery/system-evidence.d.ts +40 -1
  166. package/dist/src/discovery/system-evidence.d.ts.map +1 -1
  167. package/dist/src/discovery/system-evidence.js +189 -16
  168. package/dist/src/discovery/system-evidence.js.map +1 -1
  169. package/dist/src/doctor-check.d.ts +51 -0
  170. package/dist/src/doctor-check.d.ts.map +1 -0
  171. package/dist/src/doctor-check.js +174 -0
  172. package/dist/src/doctor-check.js.map +1 -0
  173. package/dist/src/enroll.d.ts +86 -0
  174. package/dist/src/enroll.d.ts.map +1 -0
  175. package/dist/src/enroll.js +245 -0
  176. package/dist/src/enroll.js.map +1 -0
  177. package/dist/src/entry.d.ts +3 -0
  178. package/dist/src/entry.d.ts.map +1 -0
  179. package/dist/src/entry.js +14 -0
  180. package/dist/src/entry.js.map +1 -0
  181. package/dist/src/event-queue.d.ts +13 -1
  182. package/dist/src/event-queue.d.ts.map +1 -1
  183. package/dist/src/event-queue.js +137 -42
  184. package/dist/src/event-queue.js.map +1 -1
  185. package/dist/src/event-spool.d.ts +61 -3
  186. package/dist/src/event-spool.d.ts.map +1 -1
  187. package/dist/src/event-spool.js +341 -44
  188. package/dist/src/event-spool.js.map +1 -1
  189. package/dist/src/generated/phigon/v1/identity_pb.d.ts +7 -0
  190. package/dist/src/generated/phigon/v1/identity_pb.d.ts.map +1 -1
  191. package/dist/src/generated/phigon/v1/identity_pb.js +1 -1
  192. package/dist/src/generated/phigon/v1/identity_pb.js.map +1 -1
  193. package/dist/src/guardian-containment.d.ts +2 -6
  194. package/dist/src/guardian-containment.d.ts.map +1 -1
  195. package/dist/src/guardian-containment.js +12 -63
  196. package/dist/src/guardian-containment.js.map +1 -1
  197. package/dist/src/guardian-decision-journal.d.ts.map +1 -1
  198. package/dist/src/guardian-decision-journal.js +4 -19
  199. package/dist/src/guardian-decision-journal.js.map +1 -1
  200. package/dist/src/guardian-managed-exec.d.ts.map +1 -1
  201. package/dist/src/guardian-managed-exec.js +6 -18
  202. package/dist/src/guardian-managed-exec.js.map +1 -1
  203. package/dist/src/guardian-model-bridge.d.ts.map +1 -1
  204. package/dist/src/guardian-model-bridge.js +2 -1
  205. package/dist/src/guardian-model-bridge.js.map +1 -1
  206. package/dist/src/guardian-native.d.ts +0 -1
  207. package/dist/src/guardian-native.d.ts.map +1 -1
  208. package/dist/src/guardian-native.js +0 -6
  209. package/dist/src/guardian-native.js.map +1 -1
  210. package/dist/src/guardian-process-monitor.d.ts +4 -0
  211. package/dist/src/guardian-process-monitor.d.ts.map +1 -1
  212. package/dist/src/guardian-process-monitor.js +82 -26
  213. package/dist/src/guardian-process-monitor.js.map +1 -1
  214. package/dist/src/health.d.ts +19 -1
  215. package/dist/src/health.d.ts.map +1 -1
  216. package/dist/src/health.js +22 -1
  217. package/dist/src/health.js.map +1 -1
  218. package/dist/src/historical-identity-store.d.ts +8 -1
  219. package/dist/src/historical-identity-store.d.ts.map +1 -1
  220. package/dist/src/historical-identity-store.js +28 -10
  221. package/dist/src/historical-identity-store.js.map +1 -1
  222. package/dist/src/index.d.ts +2 -0
  223. package/dist/src/index.d.ts.map +1 -1
  224. package/dist/src/index.js +2 -0
  225. package/dist/src/index.js.map +1 -1
  226. package/dist/src/installation.d.ts +2 -0
  227. package/dist/src/installation.d.ts.map +1 -1
  228. package/dist/src/installation.js +6 -3
  229. package/dist/src/installation.js.map +1 -1
  230. package/dist/src/instance-lock.d.ts +45 -0
  231. package/dist/src/instance-lock.d.ts.map +1 -0
  232. package/dist/src/instance-lock.js +243 -0
  233. package/dist/src/instance-lock.js.map +1 -0
  234. package/dist/src/machine-command-executor.d.ts +22 -7
  235. package/dist/src/machine-command-executor.d.ts.map +1 -1
  236. package/dist/src/machine-command-executor.js +80 -19
  237. package/dist/src/machine-command-executor.js.map +1 -1
  238. package/dist/src/node-version.d.ts +8 -0
  239. package/dist/src/node-version.d.ts.map +1 -0
  240. package/dist/src/node-version.js +17 -0
  241. package/dist/src/node-version.js.map +1 -0
  242. package/dist/src/observer-log.d.ts +50 -0
  243. package/dist/src/observer-log.d.ts.map +1 -0
  244. package/dist/src/observer-log.js +141 -0
  245. package/dist/src/observer-log.js.map +1 -0
  246. package/dist/src/pair.d.ts +68 -1
  247. package/dist/src/pair.d.ts.map +1 -1
  248. package/dist/src/pair.js +204 -65
  249. package/dist/src/pair.js.map +1 -1
  250. package/dist/src/private-directory.d.ts +10 -0
  251. package/dist/src/private-directory.d.ts.map +1 -0
  252. package/dist/src/private-directory.js +66 -0
  253. package/dist/src/private-directory.js.map +1 -0
  254. package/dist/src/process-tree.d.ts +73 -0
  255. package/dist/src/process-tree.d.ts.map +1 -0
  256. package/dist/src/process-tree.js +256 -0
  257. package/dist/src/process-tree.js.map +1 -0
  258. package/dist/src/proxy.d.ts +68 -0
  259. package/dist/src/proxy.d.ts.map +1 -0
  260. package/dist/src/proxy.js +209 -0
  261. package/dist/src/proxy.js.map +1 -0
  262. package/dist/src/purge.d.ts +17 -0
  263. package/dist/src/purge.d.ts.map +1 -0
  264. package/dist/src/purge.js +84 -0
  265. package/dist/src/purge.js.map +1 -0
  266. package/dist/src/remove-machine.d.ts +5 -1
  267. package/dist/src/remove-machine.d.ts.map +1 -1
  268. package/dist/src/remove-machine.js +28 -14
  269. package/dist/src/remove-machine.js.map +1 -1
  270. package/dist/src/server-authority.d.ts +29 -0
  271. package/dist/src/server-authority.d.ts.map +1 -0
  272. package/dist/src/server-authority.js +106 -0
  273. package/dist/src/server-authority.js.map +1 -0
  274. package/dist/src/server-clock.d.ts +32 -0
  275. package/dist/src/server-clock.d.ts.map +1 -0
  276. package/dist/src/server-clock.js +72 -0
  277. package/dist/src/server-clock.js.map +1 -0
  278. package/dist/src/service-command.d.ts +20 -0
  279. package/dist/src/service-command.d.ts.map +1 -0
  280. package/dist/src/service-command.js +136 -0
  281. package/dist/src/service-command.js.map +1 -0
  282. package/dist/src/service.d.ts +98 -0
  283. package/dist/src/service.d.ts.map +1 -0
  284. package/dist/src/service.js +472 -0
  285. package/dist/src/service.js.map +1 -0
  286. package/dist/src/stream-client.d.ts +21 -1
  287. package/dist/src/stream-client.d.ts.map +1 -1
  288. package/dist/src/stream-client.js +137 -24
  289. package/dist/src/stream-client.js.map +1 -1
  290. package/dist/src/stream-state.d.ts +2 -0
  291. package/dist/src/stream-state.d.ts.map +1 -1
  292. package/dist/src/stream-state.js +5 -2
  293. package/dist/src/stream-state.js.map +1 -1
  294. package/dist/src/system-inspection.d.ts +78 -0
  295. package/dist/src/system-inspection.d.ts.map +1 -0
  296. package/dist/src/system-inspection.js +281 -0
  297. package/dist/src/system-inspection.js.map +1 -0
  298. package/dist/src/update.d.ts.map +1 -1
  299. package/dist/src/update.js +9 -3
  300. package/dist/src/update.js.map +1 -1
  301. package/dist/src/user-notices.d.ts +64 -0
  302. package/dist/src/user-notices.d.ts.map +1 -0
  303. package/dist/src/user-notices.js +141 -0
  304. package/dist/src/user-notices.js.map +1 -0
  305. package/package.json +7 -7
  306. package/dist/src/windows-process.d.ts +0 -7
  307. package/dist/src/windows-process.d.ts.map +0 -1
  308. package/dist/src/windows-process.js +0 -18
  309. package/dist/src/windows-process.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/pair.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pair.js","sourceRoot":"","sources":["../../src/pair.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * The current account's SID from whoami. A name built from USERDOMAIN and
3
+ * USERNAME does not resolve for every account: services that run as
4
+ * LocalSystem or a virtual account see names icacls cannot look up.
5
+ */
6
+ export declare function currentUserSID(): string | undefined;
7
+ /** Restrict an existing directory to its owner on every platform. */
8
+ export declare function makeDirectoryPrivate(path: string): Promise<void>;
9
+ export declare function makeDirectoryPrivateSync(path: string): void;
10
+ //# sourceMappingURL=private-directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-directory.d.ts","sourceRoot":"","sources":["../../src/private-directory.ts"],"names":[],"mappings":"AAaA;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,SAAS,CAkBnD;AAuBD,qEAAqE;AACrE,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGtE;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAG3D"}
@@ -0,0 +1,66 @@
1
+ import { execFileSync } from "node:child_process";
2
+ import { chmodSync } from "node:fs";
3
+ import { chmod } from "node:fs/promises";
4
+ import { join, resolve } from "node:path";
5
+ // chmod only changes the read-only flag on Windows, so the credential store and
6
+ // event spool would otherwise rely on the profile folder's default ACL. Owner
7
+ // and SYSTEM keep access; files created inside inherit the restriction.
8
+ const restricted = new Set();
9
+ // The account this process runs as, by security identifier: null when
10
+ // Windows would not say.
11
+ let processUserSID;
12
+ /**
13
+ * The current account's SID from whoami. A name built from USERDOMAIN and
14
+ * USERNAME does not resolve for every account: services that run as
15
+ * LocalSystem or a virtual account see names icacls cannot look up.
16
+ */
17
+ export function currentUserSID() {
18
+ if (processUserSID === undefined) {
19
+ processUserSID = null;
20
+ try {
21
+ // By full path: Git for Windows puts another whoami on PATH.
22
+ const whoami = join(process.env["SystemRoot"] ?? "C:\\Windows", "System32", "whoami.exe");
23
+ const output = execFileSync(whoami, ["/user", "/fo", "csv", "/nh"], {
24
+ encoding: "utf8",
25
+ windowsHide: true,
26
+ stdio: ["ignore", "pipe", "ignore"],
27
+ timeout: 15_000,
28
+ });
29
+ processUserSID = /"(S-1-[0-9]+(?:-[0-9]+){1,15})"\s*$/u.exec(output.trim())?.[1] ?? null;
30
+ }
31
+ catch {
32
+ // Fall back to the account name below.
33
+ }
34
+ }
35
+ return processUserSID ?? undefined;
36
+ }
37
+ function restrictWindowsDirectory(path) {
38
+ const key = resolve(path).toLowerCase();
39
+ if (restricted.has(key))
40
+ return;
41
+ const sid = currentUserSID();
42
+ const owner = sid === undefined
43
+ ? `${process.env["USERDOMAIN"] ?? ""}\\${process.env["USERNAME"] ?? ""}`
44
+ : `*${sid}`;
45
+ try {
46
+ execFileSync("icacls", [resolve(path), "/inheritance:r", "/grant:r", `${owner}:(OI)(CI)F`, "/grant:r", "*S-1-5-18:(OI)(CI)F"], { windowsHide: true, stdio: "ignore", timeout: 15_000 });
47
+ }
48
+ catch {
49
+ // Storing a credential or activity under an open ACL would defeat the
50
+ // point of this directory, so refuse instead of continuing silently.
51
+ throw new Error("Could not restrict the Phigon data directory to the current user. Choose a data directory on an NTFS drive that you own.");
52
+ }
53
+ restricted.add(key);
54
+ }
55
+ /** Restrict an existing directory to its owner on every platform. */
56
+ export async function makeDirectoryPrivate(path) {
57
+ await chmod(path, 0o700);
58
+ if (process.platform === "win32")
59
+ restrictWindowsDirectory(path);
60
+ }
61
+ export function makeDirectoryPrivateSync(path) {
62
+ chmodSync(path, 0o700);
63
+ if (process.platform === "win32")
64
+ restrictWindowsDirectory(path);
65
+ }
66
+ //# sourceMappingURL=private-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-directory.js","sourceRoot":"","sources":["../../src/private-directory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /** One exact process lifetime: a PID alone is never an identity. */
2
+ export type ExactProcess = Readonly<{
3
+ processId: number;
4
+ startedAt: Date;
5
+ }>;
6
+ export type TreeStopMode = "stop" | "kill";
7
+ export type TreeStopOutcome = Readonly<{
8
+ outcome: "stale" | "exited" | "access_denied" | "graceful_unsupported" | "console_shared" | "self_target";
9
+ }> | Readonly<{
10
+ outcome: "failed";
11
+ code: string;
12
+ }> | Readonly<{
13
+ outcome: "dispatched";
14
+ rootRunning: boolean;
15
+ /** Verified descendants that were signalled. */
16
+ descendants: number;
17
+ /** Signalled descendants still running at the end of the wait. */
18
+ descendantsRunning: number;
19
+ /** Running descendants the OS would not let the observer stop. */
20
+ descendantsDenied: number;
21
+ }>;
22
+ /** Stops one exact process and the descendants it started. */
23
+ export interface ProcessTreeControl {
24
+ stop(target: ExactProcess, mode: TreeStopMode): Promise<TreeStopOutcome>;
25
+ }
26
+ export type TreeStopReceipt = Readonly<{
27
+ state: "succeeded" | "failed" | "rejected";
28
+ code: string;
29
+ detail: string;
30
+ targetStillRunning: boolean;
31
+ }>;
32
+ /** Plain-language receipts; detail stays within the 256-character journal bound. */
33
+ export declare function describeTreeOutcome(outcome: TreeStopOutcome, graceful: boolean): TreeStopReceipt;
34
+ export declare function defaultProcessTreeControl(platform?: NodeJS.Platform): ProcessTreeControl;
35
+ export type ProcessRow = Readonly<{
36
+ processId: number;
37
+ parentId: number;
38
+ startedAt: number;
39
+ zombie: boolean;
40
+ }>;
41
+ type Signal = "SIGTERM" | "SIGKILL" | 0;
42
+ /**
43
+ * Linux and macOS: one process-table snapshot verifies the root's start time
44
+ * immediately before signalling, and finds descendants whose start is not
45
+ * earlier than their parent's (a stale parent PID cannot adopt them). The
46
+ * observer and everything it started are never members.
47
+ */
48
+ export declare class UnixProcessTreeControl implements ProcessTreeControl {
49
+ #private;
50
+ constructor(options?: Readonly<{
51
+ list?: () => Promise<ReadonlyMap<number, ProcessRow>>;
52
+ signal?: (processId: number, signal: Signal) => void;
53
+ sleep?: (milliseconds: number) => Promise<void>;
54
+ observerProcessId?: number;
55
+ clock?: () => number;
56
+ }>);
57
+ stop(target: ExactProcess, mode: TreeStopMode): Promise<TreeStopOutcome>;
58
+ }
59
+ export declare function descendantsOf(table: ReadonlyMap<number, ProcessRow>, root: ProcessRow, observerProcessId: number): ProcessRow[];
60
+ export declare function readUnixProcessTable(): Promise<ReadonlyMap<number, ProcessRow>>;
61
+ export declare function parseUnixProcessTable(stdout: string): ReadonlyMap<number, ProcessRow>;
62
+ /**
63
+ * Windows: the native helper holds a handle to every member while it works,
64
+ * so no member's PID can be recycled before the report is written.
65
+ */
66
+ export declare class WindowsProcessTreeControl implements ProcessTreeControl {
67
+ #private;
68
+ constructor(run?: (args: readonly string[]) => Promise<string>);
69
+ stop(target: ExactProcess, mode: TreeStopMode): Promise<TreeStopOutcome>;
70
+ }
71
+ export declare function parseTreeReport(stdout: string): TreeStopOutcome;
72
+ export {};
73
+ //# sourceMappingURL=process-tree.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-tree.d.ts","sourceRoot":"","sources":["../../src/process-tree.ts"],"names":[],"mappings":"AAGA,oEAAoE;AACpE,MAAM,MAAM,YAAY,GAAG,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,CAAC,CAAC;AAC5E,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,eAAe,GACvB,QAAQ,CAAC;IAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,eAAe,GAAG,sBAAsB,GAAG,gBAAgB,GAAG,aAAa,CAAA;CAAE,CAAC,GACvH,QAAQ,CAAC;IAAE,OAAO,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC7C,QAAQ,CAAC;IACT,OAAO,EAAE,YAAY,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kEAAkE;IAClE,iBAAiB,EAAE,MAAM,CAAC;CAC3B,CAAC,CAAC;AAEL,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC1E;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;IACrC,KAAK,EAAE,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC,CAAC;AAEH,oFAAoF;AACpF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,GAAG,eAAe,CAkChG;AAED,wBAAgB,yBAAyB,CAAC,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,kBAAkB,CAE1G;AAMD,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAAC;AAC/G,KAAK,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC;AAExC;;;;;GAKG;AACH,qBAAa,sBAAuB,YAAW,kBAAkB;;gBAOnD,OAAO,GAAE,QAAQ,CAAC;QAC5B,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;QACrD,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,MAAM,CAAC;KACtB,CAAM;IAQD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;CAuD/E;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,GAAG,UAAU,EAAE,CAwB/H;AAMD,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAQrF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,CAWrF;AAED;;;GAGG;AACH,qBAAa,yBAA0B,YAAW,kBAAkB;;gBAGtD,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,KAAK,OAAO,CAAC,MAAM,CAAC;IAIxD,IAAI,CAAC,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;CAgB/E;AAQD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,eAAe,CAuB/D"}
@@ -0,0 +1,256 @@
1
+ import { execFile } from "node:child_process";
2
+ import { guardianRunnerPath } from "./guardian-native.js";
3
+ /** Plain-language receipts; detail stays within the 256-character journal bound. */
4
+ export function describeTreeOutcome(outcome, graceful) {
5
+ const receipt = (state, code, detail, targetStillRunning) => ({ state, code, detail, targetStillRunning });
6
+ switch (outcome.outcome) {
7
+ case "stale":
8
+ return receipt("rejected", "stale_target", "The process ID now belongs to a different process. Nothing was signalled.", false);
9
+ case "exited":
10
+ return receipt("rejected", "target_already_stopped", "The agent process had already exited. Nothing was signalled.", false);
11
+ case "self_target":
12
+ return receipt("rejected", "self_target_rejected", "Observer refuses to terminate its own process.", true);
13
+ case "access_denied":
14
+ return receipt("failed", "access_denied", "The operating system denied permission to stop this process. It may run as another user or as administrator. It is still running.", true);
15
+ case "graceful_unsupported":
16
+ return receipt("rejected", "graceful_stop_unsupported", "This agent has no window to close and no terminal to press Ctrl+C in, so a graceful stop is not possible. Nothing was sent. Use force stop instead.", true);
17
+ case "console_shared":
18
+ return receipt("rejected", "terminal_shared", "Other programs share this agent's terminal, and Ctrl+C would reach them too. Nothing was sent. Use force stop instead.", true);
19
+ case "failed":
20
+ return receipt("failed", "os_dispatch_failed", `The operating system could not complete the request (${outcome.code}). The agent may still be running.`, true);
21
+ case "dispatched": {
22
+ if (outcome.rootRunning) {
23
+ return receipt("failed", "process_still_running", graceful
24
+ ? "The stop request was sent, but the agent is still running after 5 seconds. It was not escalated; use force stop if needed."
25
+ : "Force stop was sent, but the agent still reports running.", true);
26
+ }
27
+ const remaining = outcome.descendantsRunning + outcome.descendantsDenied;
28
+ if (remaining > 0) {
29
+ return receipt("succeeded", "process_stopped_children_running", `The agent process exited, but ${remaining} of its child processes ${remaining === 1 ? "is" : "are"} still running.`, false);
30
+ }
31
+ return receipt("succeeded", "process_stopped", outcome.descendants > 0
32
+ ? `The agent process and its ${outcome.descendants} child ${outcome.descendants === 1 ? "process" : "processes"} exited.`
33
+ : "The agent process exited.", false);
34
+ }
35
+ }
36
+ }
37
+ export function defaultProcessTreeControl(platform = process.platform) {
38
+ return platform === "win32" ? new WindowsProcessTreeControl() : new UnixProcessTreeControl();
39
+ }
40
+ const maxDescendants = 1024;
41
+ // Graceful stop gives the agent time to save state; force stop is immediate.
42
+ const exitWait = { stop: 5_000, kill: 3_000 };
43
+ /**
44
+ * Linux and macOS: one process-table snapshot verifies the root's start time
45
+ * immediately before signalling, and finds descendants whose start is not
46
+ * earlier than their parent's (a stale parent PID cannot adopt them). The
47
+ * observer and everything it started are never members.
48
+ */
49
+ export class UnixProcessTreeControl {
50
+ #list;
51
+ #signal;
52
+ #sleep;
53
+ #observerProcessId;
54
+ #clock;
55
+ constructor(options = {}) {
56
+ this.#list = options.list ?? readUnixProcessTable;
57
+ this.#signal = options.signal ?? ((processId, signal) => { process.kill(processId, signal); });
58
+ this.#sleep = options.sleep ?? ((milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds)));
59
+ this.#observerProcessId = options.observerProcessId ?? process.pid;
60
+ this.#clock = options.clock ?? Date.now;
61
+ }
62
+ async stop(target, mode) {
63
+ if (target.processId === this.#observerProcessId)
64
+ return { outcome: "self_target" };
65
+ let table;
66
+ try {
67
+ table = await this.#list();
68
+ }
69
+ catch {
70
+ return { outcome: "failed", code: "process_table_unavailable" };
71
+ }
72
+ const root = table.get(target.processId);
73
+ if (root === undefined || root.zombie)
74
+ return { outcome: "exited" };
75
+ if (!sameStart(root.startedAt, target.startedAt.getTime()))
76
+ return { outcome: "stale" };
77
+ const descendants = descendantsOf(table, root, this.#observerProcessId);
78
+ const signal = mode === "stop" ? "SIGTERM" : "SIGKILL";
79
+ try {
80
+ this.#signal(root.processId, signal);
81
+ }
82
+ catch (error) {
83
+ const code = error.code;
84
+ if (code === "ESRCH")
85
+ return { outcome: "exited" };
86
+ if (code === "EPERM")
87
+ return { outcome: "access_denied" };
88
+ return { outcome: "failed", code: String(code ?? "unknown").slice(0, 32) };
89
+ }
90
+ const denied = new Set();
91
+ for (const descendant of descendants) {
92
+ try {
93
+ this.#signal(descendant.processId, signal);
94
+ }
95
+ catch (error) {
96
+ if (error.code === "EPERM")
97
+ denied.add(descendant.processId);
98
+ }
99
+ }
100
+ const members = [root, ...descendants];
101
+ const deadline = this.#clock() + exitWait[mode];
102
+ while (this.#clock() < deadline && members.some((member) => this.#alive(member.processId))) {
103
+ await this.#sleep(100);
104
+ }
105
+ // A final snapshot tells an exited process from a zombie or a reused PID.
106
+ let after;
107
+ try {
108
+ after = await this.#list();
109
+ }
110
+ catch {
111
+ after = undefined;
112
+ }
113
+ const running = (member) => {
114
+ if (after === undefined)
115
+ return this.#alive(member.processId);
116
+ const current = after.get(member.processId);
117
+ return current !== undefined && !current.zombie && sameStart(current.startedAt, member.startedAt);
118
+ };
119
+ const stillRunning = descendants.filter(running);
120
+ return {
121
+ outcome: "dispatched",
122
+ rootRunning: running(root),
123
+ descendants: descendants.length,
124
+ // Counted separately so a receipt can say why a child survived.
125
+ descendantsRunning: stillRunning.filter((member) => !denied.has(member.processId)).length,
126
+ descendantsDenied: stillRunning.filter((member) => denied.has(member.processId)).length,
127
+ };
128
+ }
129
+ #alive(processId) {
130
+ try {
131
+ this.#signal(processId, 0);
132
+ return true;
133
+ }
134
+ catch (error) {
135
+ return error.code === "EPERM";
136
+ }
137
+ }
138
+ }
139
+ export function descendantsOf(table, root, observerProcessId) {
140
+ const children = new Map();
141
+ for (const row of table.values()) {
142
+ if (row.processId === row.parentId)
143
+ continue;
144
+ const siblings = children.get(row.parentId) ?? [];
145
+ siblings.push(row);
146
+ children.set(row.parentId, siblings);
147
+ }
148
+ const found = [];
149
+ const seen = new Set([root.processId]);
150
+ const queue = [root];
151
+ for (let index = 0; index < queue.length && found.length < maxDescendants; index++) {
152
+ const parent = queue[index];
153
+ for (const child of children.get(parent.processId) ?? []) {
154
+ if (seen.has(child.processId) || child.processId <= 1 || child.processId === observerProcessId)
155
+ continue;
156
+ seen.add(child.processId);
157
+ // ps start times have one-second resolution.
158
+ if (child.zombie || child.startedAt < parent.startedAt - 999)
159
+ continue;
160
+ found.push(child);
161
+ queue.push(child);
162
+ if (found.length >= maxDescendants)
163
+ break;
164
+ }
165
+ }
166
+ return found;
167
+ }
168
+ function sameStart(observed, expected) {
169
+ return Math.abs(observed - expected) < 1_000;
170
+ }
171
+ export async function readUnixProcessTable() {
172
+ const stdout = await new Promise((resolve, reject) => execFile("ps", ["-A", "-o", "pid=,ppid=,stat=,lstart="], { timeout: 3_000, maxBuffer: 8 << 20, encoding: "utf8", env: { ...process.env, LANG: "C", LC_ALL: "C" } }, (error, output) => error ? reject(error) : resolve(output)));
173
+ return parseUnixProcessTable(stdout);
174
+ }
175
+ export function parseUnixProcessTable(stdout) {
176
+ const table = new Map();
177
+ for (const line of stdout.split(/\r?\n/u)) {
178
+ const match = /^\s*(\d+)\s+(\d+)\s+(\S+)\s+(\S+\s+\S+\s+\d{1,2}\s+\d{2}:\d{2}:\d{2}\s+\d{4})\s*$/u.exec(line);
179
+ if (match === null)
180
+ continue;
181
+ const processId = Number(match[1]);
182
+ const startedAt = Date.parse(match[4]);
183
+ if (!Number.isSafeInteger(processId) || processId < 1 || !Number.isFinite(startedAt))
184
+ continue;
185
+ table.set(processId, { processId, parentId: Number(match[2]), startedAt, zombie: match[3].startsWith("Z") });
186
+ }
187
+ return table;
188
+ }
189
+ /**
190
+ * Windows: the native helper holds a handle to every member while it works,
191
+ * so no member's PID can be recycled before the report is written.
192
+ */
193
+ export class WindowsProcessTreeControl {
194
+ #run;
195
+ constructor(run) {
196
+ this.#run = run ?? runGuardianHelper;
197
+ }
198
+ async stop(target, mode) {
199
+ let stdout;
200
+ try {
201
+ stdout = await this.#run([
202
+ "--kill-pid", String(target.processId),
203
+ "--started-at", target.startedAt.toISOString(),
204
+ "--tree", ...(mode === "stop" ? ["--graceful"] : []),
205
+ ]);
206
+ }
207
+ catch (error) {
208
+ const code = error.killed === true
209
+ ? "helper_timeout"
210
+ : `helper_${String(error.code ?? "failed")}`;
211
+ return { outcome: "failed", code: code.slice(0, 32) };
212
+ }
213
+ return parseTreeReport(stdout);
214
+ }
215
+ }
216
+ function runGuardianHelper(args) {
217
+ return new Promise((resolve, reject) => execFile(guardianRunnerPath(), args, {
218
+ windowsHide: true, timeout: 20_000, maxBuffer: 16 << 10, encoding: "utf8",
219
+ }, (error, stdout) => error ? reject(error) : resolve(stdout)));
220
+ }
221
+ export function parseTreeReport(stdout) {
222
+ let value;
223
+ try {
224
+ value = JSON.parse(stdout.trim());
225
+ }
226
+ catch {
227
+ return { outcome: "failed", code: "helper_report_invalid" };
228
+ }
229
+ if (value === null || typeof value !== "object")
230
+ return { outcome: "failed", code: "helper_report_invalid" };
231
+ const report = value;
232
+ const count = (key) => {
233
+ const item = report[key];
234
+ return typeof item === "number" && Number.isSafeInteger(item) && item >= 0 ? item : 0;
235
+ };
236
+ switch (report["outcome"]) {
237
+ case "stale":
238
+ case "exited":
239
+ case "access_denied":
240
+ case "graceful_unsupported":
241
+ case "console_shared":
242
+ case "self_target":
243
+ return { outcome: report["outcome"] };
244
+ case "dispatched":
245
+ return {
246
+ outcome: "dispatched",
247
+ rootRunning: report["root_running"] === true,
248
+ descendants: count("descendants"),
249
+ descendantsRunning: count("descendants_running"),
250
+ descendantsDenied: count("descendants_denied"),
251
+ };
252
+ default:
253
+ return { outcome: "failed", code: `helper_${String(report["outcome"] ?? "invalid")}`.slice(0, 32) };
254
+ }
255
+ }
256
+ //# sourceMappingURL=process-tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-tree.js","sourceRoot":"","sources":["../../src/process-tree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type { Socket } from "node:net";
2
+ /**
3
+ * Corporate proxies. The observer's HTTPS calls (pairing, removal, update
4
+ * checks, Guardian and the doctor probe) use `fetch`, which ignores
5
+ * HTTPS_PROXY unless Node.js is told to read it, and the telemetry stream
6
+ * uses @grpc/grpc-js, which reads only the lowercase names. This module
7
+ * points both at the same proxy, using what Node.js offers natively.
8
+ *
9
+ * HTTPS goes through the proxy as a CONNECT tunnel, and TLS is negotiated
10
+ * with the server itself inside it, so the usual certificate checks,
11
+ * including an authority pinned for a company's own server, still apply.
12
+ */
13
+ export type ProxySettings = Readonly<{
14
+ https?: URL;
15
+ http?: URL;
16
+ /** NO_PROXY as written: comma- or space-separated host names. */
17
+ noProxy: string;
18
+ }>;
19
+ /** Reads HTTPS_PROXY, HTTP_PROXY and NO_PROXY (either case) from `environment`. */
20
+ export declare function proxySettings(environment: NodeJS.ProcessEnv): ProxySettings;
21
+ /**
22
+ * The proxy `target` goes through, or undefined to connect directly. It
23
+ * follows Node.js: an entry matches its host and every host under it
24
+ * (`example.com`, `.example.com` and `*.example.com` all cover
25
+ * `a.example.com`), `*` matches everything, and `host:port` only that port.
26
+ */
27
+ export declare function proxyForUrl(target: URL, settings: ProxySettings): URL | undefined;
28
+ /**
29
+ * NO_PROXY in the form @grpc/grpc-js reads, which matches plain host name
30
+ * endings only: `*.example.com` and `.example.com` become `example.com`, and
31
+ * an entry for another port is left out because the stream cannot check
32
+ * ports.
33
+ */
34
+ export declare function grpcNoProxy(noProxy: string, streamPort: number): string;
35
+ /** Whether NO_PROXY turns the proxy off for every host, which grpc-js cannot express. */
36
+ export declare function noProxyForAll(environment: NodeJS.ProcessEnv): boolean;
37
+ type SetGlobalProxy = (environment: NodeJS.ProcessEnv) => () => void;
38
+ export type ProxySetup = Readonly<{
39
+ /** Puts back the global agents and the variables changed for the stream. */
40
+ restore: () => void;
41
+ /** A plain sentence to show when part of the setup could not be applied. */
42
+ notice?: string;
43
+ }>;
44
+ export type ProxySetupOptions = Readonly<{
45
+ /** `http.setGlobalProxyFromEnv`, Node.js 24.14 and newer. */
46
+ setGlobalProxyFromEnv?: SetGlobalProxy | undefined;
47
+ /** The environment @grpc/grpc-js reads: process.env. */
48
+ processEnvironment?: NodeJS.ProcessEnv;
49
+ /** Whether Node.js already applied the proxy variables when it started. */
50
+ startedWithEnvProxy?: boolean;
51
+ nodeVersion?: string;
52
+ /** The telemetry endpoint, to keep NO_PROXY port entries for it. */
53
+ streamUrl?: URL;
54
+ }>;
55
+ /**
56
+ * Sends `fetch` (and `http`/`https` requests) through the proxy that
57
+ * `environment` names, and gives the telemetry stream the same proxy and
58
+ * NO_PROXY list. Does nothing when no proxy is set.
59
+ */
60
+ export declare function useProxyFromEnvironment(environment: NodeJS.ProcessEnv, options?: ProxySetupOptions): ProxySetup;
61
+ /**
62
+ * Opens a CONNECT tunnel through `proxy` to `host:port`, for a raw TLS
63
+ * connection that `fetch` does not cover. Messages name the proxy by host
64
+ * only, never with its credentials.
65
+ */
66
+ export declare function connectThroughProxy(proxy: URL, host: string, port: number, timeoutMs?: number): Promise<Socket>;
67
+ export {};
68
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/proxy.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;;;;;;;;;GAUG;AACH,MAAM,MAAM,aAAa,GAAG,QAAQ,CAAC;IACnC,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAuCH,mFAAmF;AACnF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,GAAG,aAAa,CAQ3E;AAaD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,GAAG,GAAG,GAAG,SAAS,CAYjF;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM,CAKvE;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,GAAG,OAAO,CAGrE;AAED,KAAK,cAAc,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,UAAU,KAAK,MAAM,IAAI,CAAC;AAErE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC;IAChC,4EAA4E;IAC5E,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,4EAA4E;IAC5E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IACvC,6DAA6D;IAC7D,qBAAqB,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACnD,wDAAwD;IACxD,kBAAkB,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACvC,2EAA2E;IAC3E,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oEAAoE;IACpE,SAAS,CAAC,EAAE,GAAG,CAAC;CACjB,CAAC,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,CAAC,UAAU,EAC9B,OAAO,GAAE,iBAAsB,GAC9B,UAAU,CA0DZ;AAOD;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,GAAG,EACV,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,SAAS,SAAS,GACjB,OAAO,CAAC,MAAM,CAAC,CAoCjB"}