token-goat 2.9.29 → 2.9.31

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 (197) hide show
  1. package/README.md +53 -42
  2. package/SECURITY.md +37 -11
  3. package/THIRD_PARTY_NOTICES.md +41 -4
  4. package/dist/native/linux-arm64/tg-hook +0 -0
  5. package/dist/native/linux-x64/tg-hook +0 -0
  6. package/dist/native/win32-arm64/tg-hook.exe +0 -0
  7. package/dist/native/win32-x64/tg-hook.exe +0 -0
  8. package/dist/ort-wasm-simd-threaded.mjs +59 -0
  9. package/dist/{token-goat-chunk-SE6E4BKJ.mjs → token-goat-chunk-25TRAWET.mjs} +23 -6
  10. package/dist/token-goat-chunk-2KXO6V2B.mjs +203 -0
  11. package/dist/{token-goat-chunk-UXSXQQIY.mjs → token-goat-chunk-2M7E4PF7.mjs} +43 -14
  12. package/dist/token-goat-chunk-2UPZGKKY.mjs +188 -0
  13. package/dist/token-goat-chunk-2WLPWKHV.mjs +135 -0
  14. package/dist/token-goat-chunk-2XBMMDBD.mjs +126 -0
  15. package/dist/token-goat-chunk-32ZOY4N5.mjs +23 -0
  16. package/dist/token-goat-chunk-3EZRNKTK.mjs +188 -0
  17. package/dist/token-goat-chunk-4ADZHI7J.mjs +63 -0
  18. package/dist/token-goat-chunk-4GBVPH3D.mjs +242 -0
  19. package/dist/{token-goat-chunk-2WOUYWLM.mjs → token-goat-chunk-4GILLLWY.mjs} +34 -7
  20. package/dist/token-goat-chunk-4NAPX7BA.mjs +90 -0
  21. package/dist/{token-goat-chunk-NMBWLRHW.mjs → token-goat-chunk-4SC7UJYV.mjs} +9981 -11563
  22. package/dist/token-goat-chunk-4SMRO4TO.mjs +366 -0
  23. package/dist/{token-goat-chunk-O6I2XU4P.mjs → token-goat-chunk-4ZBFWLXF.mjs} +310 -441
  24. package/dist/token-goat-chunk-57BIAXJL.mjs +286 -0
  25. package/dist/token-goat-chunk-5AC66HNP.mjs +115 -0
  26. package/dist/token-goat-chunk-5IMLKSOP.mjs +145 -0
  27. package/dist/token-goat-chunk-5RG5SBL6.mjs +221 -0
  28. package/dist/{token-goat-chunk-RRNZMM3A.mjs → token-goat-chunk-5Y6ZYL6U.mjs} +21 -2
  29. package/dist/token-goat-chunk-646E6U44.mjs +398 -0
  30. package/dist/token-goat-chunk-65N4RHP4.mjs +33 -0
  31. package/dist/{token-goat-chunk-6AK46ZT7.mjs → token-goat-chunk-6DG6HWP3.mjs} +13 -3
  32. package/dist/token-goat-chunk-6ENQSNRZ.mjs +573 -0
  33. package/dist/token-goat-chunk-6ZY4GNF2.mjs +91 -0
  34. package/dist/{token-goat-chunk-E5TK5DNO.mjs → token-goat-chunk-76FGDLRO.mjs} +574 -340
  35. package/dist/{token-goat-chunk-TGOXNAHW.mjs → token-goat-chunk-7EZTZOMC.mjs} +780 -767
  36. package/dist/token-goat-chunk-7MAOA6X4.mjs +3647 -0
  37. package/dist/token-goat-chunk-7R2ZVVAX.mjs +218 -0
  38. package/dist/{token-goat-chunk-TCQANXYC.mjs → token-goat-chunk-AM5V6GSX.mjs} +18 -2
  39. package/dist/token-goat-chunk-AUNGYYQX.mjs +184 -0
  40. package/dist/token-goat-chunk-AUQYRMMH.mjs +2985 -0
  41. package/dist/token-goat-chunk-B3PEKBYG.mjs +128 -0
  42. package/dist/{token-goat-chunk-KOPIR3KZ.mjs → token-goat-chunk-BA4HI6BW.mjs} +1910 -165
  43. package/dist/{token-goat-chunk-52NSDWYY.mjs → token-goat-chunk-BFCWY73P.mjs} +58 -20
  44. package/dist/token-goat-chunk-BPGCUMR7.mjs +30 -0
  45. package/dist/token-goat-chunk-BWGFUZZE.mjs +25 -0
  46. package/dist/token-goat-chunk-C75NA7PL.mjs +322 -0
  47. package/dist/token-goat-chunk-CBIQ7WTD.mjs +87 -0
  48. package/dist/token-goat-chunk-CETM74KC.mjs +307 -0
  49. package/dist/token-goat-chunk-CIMQ2BB3.mjs +233 -0
  50. package/dist/{token-goat-chunk-DNSPXQXQ.mjs → token-goat-chunk-CJLS3CDL.mjs} +70 -18
  51. package/dist/{token-goat-chunk-MELOKFDJ.mjs → token-goat-chunk-CO3UYX6G.mjs} +7 -1
  52. package/dist/token-goat-chunk-COPNXRJM.mjs +154 -0
  53. package/dist/token-goat-chunk-CSJ5L3NL.mjs +479 -0
  54. package/dist/token-goat-chunk-CVCEVUGK.mjs +315 -0
  55. package/dist/token-goat-chunk-CXHOFN7R.mjs +371 -0
  56. package/dist/token-goat-chunk-D735C4QM.mjs +603 -0
  57. package/dist/{token-goat-chunk-E4ZOJIZK.mjs → token-goat-chunk-DGS2LVNA.mjs} +70 -160
  58. package/dist/{token-goat-chunk-L7H3U27L.mjs → token-goat-chunk-DOWRSMWO.mjs} +1 -1
  59. package/dist/token-goat-chunk-E45INMY3.mjs +71 -0
  60. package/dist/token-goat-chunk-EC5F37F4.mjs +244 -0
  61. package/dist/{token-goat-chunk-XTQAOTSO.mjs → token-goat-chunk-EDBDRVH5.mjs} +4 -1
  62. package/dist/token-goat-chunk-EELTBKDM.mjs +613 -0
  63. package/dist/token-goat-chunk-EVMZJ27Z.mjs +147 -0
  64. package/dist/token-goat-chunk-EXKGNHEG.mjs +2096 -0
  65. package/dist/{token-goat-chunk-YOOVFPTP.mjs → token-goat-chunk-F4HYL64R.mjs} +12 -2
  66. package/dist/token-goat-chunk-F6PAUIEK.mjs +624 -0
  67. package/dist/token-goat-chunk-FDSREWLX.mjs +692 -0
  68. package/dist/{token-goat-chunk-NMTKNYGF.mjs → token-goat-chunk-FNFBKLRD.mjs} +74 -9
  69. package/dist/token-goat-chunk-G5PJ7AGM.mjs +36 -0
  70. package/dist/token-goat-chunk-GGGG7RWB.mjs +236 -0
  71. package/dist/{token-goat-chunk-TDUT2CL6.mjs → token-goat-chunk-GL3ETKSC.mjs} +276 -19
  72. package/dist/{token-goat-chunk-7CPMDFGB.mjs → token-goat-chunk-GVB2MUST.mjs} +265 -1567
  73. package/dist/token-goat-chunk-GWFLAUMQ.mjs +307 -0
  74. package/dist/token-goat-chunk-HAVAOB3S.mjs +87 -0
  75. package/dist/token-goat-chunk-HLPW63A7.mjs +48 -0
  76. package/dist/token-goat-chunk-HU4TORC5.mjs +1377 -0
  77. package/dist/token-goat-chunk-I7VKZZAW.mjs +35 -0
  78. package/dist/token-goat-chunk-IA6XSPE3.mjs +218 -0
  79. package/dist/token-goat-chunk-IAGXMHIK.mjs +863 -0
  80. package/dist/{token-goat-chunk-435UQTKD.mjs → token-goat-chunk-IK2DRMFX.mjs} +129 -74
  81. package/dist/{token-goat-chunk-ZER6EAXZ.mjs → token-goat-chunk-INNPTRUX.mjs} +2954 -2783
  82. package/dist/token-goat-chunk-JJ5BX4F4.mjs +129 -0
  83. package/dist/token-goat-chunk-JVFSHVFJ.mjs +129 -0
  84. package/dist/token-goat-chunk-KGEFFSHD.mjs +50 -0
  85. package/dist/token-goat-chunk-KKUFXAPD.mjs +25 -0
  86. package/dist/token-goat-chunk-KQBLRPBN.mjs +433 -0
  87. package/dist/token-goat-chunk-LCNQ2CNN.mjs +497 -0
  88. package/dist/token-goat-chunk-M3LFJDPU.mjs +58 -0
  89. package/dist/token-goat-chunk-M52KPT3C.mjs +87 -0
  90. package/dist/token-goat-chunk-MBEG42H7.mjs +150 -0
  91. package/dist/{token-goat-chunk-EVC4TOLE.mjs → token-goat-chunk-METECDOH.mjs} +3 -12
  92. package/dist/{token-goat-chunk-2AWQ2R5X.mjs → token-goat-chunk-MHX7XCC3.mjs} +3 -2
  93. package/dist/token-goat-chunk-MNWKPRAL.mjs +13 -0
  94. package/dist/token-goat-chunk-N5LSOVSU.mjs +137 -0
  95. package/dist/{token-goat-chunk-DPNLUJWB.mjs → token-goat-chunk-N5MMR2IW.mjs} +30 -8
  96. package/dist/token-goat-chunk-N7B3JQ2C.mjs +160 -0
  97. package/dist/{token-goat-chunk-VMFWNHGR.mjs → token-goat-chunk-NISNMD7T.mjs} +2545 -2953
  98. package/dist/token-goat-chunk-NMD42SFQ.mjs +434 -0
  99. package/dist/token-goat-chunk-NOSS5VWY.mjs +174 -0
  100. package/dist/token-goat-chunk-NSNSPPBG.mjs +69 -0
  101. package/dist/token-goat-chunk-OBOFIHKN.mjs +38 -0
  102. package/dist/token-goat-chunk-OBRFJ5O5.mjs +76 -0
  103. package/dist/token-goat-chunk-ODBT2USM.mjs +800 -0
  104. package/dist/token-goat-chunk-OS5EM5PP.mjs +107 -0
  105. package/dist/token-goat-chunk-OUKDTVNU.mjs +1178 -0
  106. package/dist/token-goat-chunk-OXFMP75N.mjs +566 -0
  107. package/dist/{token-goat-chunk-ASLWOQ3I.mjs → token-goat-chunk-OYIYKDDT.mjs} +2 -1
  108. package/dist/{token-goat-chunk-67BNIKKO.mjs → token-goat-chunk-P6HQSWQ3.mjs} +55 -47
  109. package/dist/token-goat-chunk-P6VGNTQT.mjs +71 -0
  110. package/dist/token-goat-chunk-PFWIMH2E.mjs +261 -0
  111. package/dist/token-goat-chunk-PJZXIS3G.mjs +39 -0
  112. package/dist/token-goat-chunk-PUO5INXP.mjs +606 -0
  113. package/dist/token-goat-chunk-PX5PQWTY.mjs +462 -0
  114. package/dist/token-goat-chunk-Q5QDBC6O.mjs +111 -0
  115. package/dist/token-goat-chunk-QFNQXSDT.mjs +40 -0
  116. package/dist/token-goat-chunk-QH7YVYOY.mjs +3957 -0
  117. package/dist/token-goat-chunk-QLMUHEPB.mjs +43 -0
  118. package/dist/{token-goat-chunk-PYSUADX4.mjs → token-goat-chunk-QQOJIHL3.mjs} +50 -14
  119. package/dist/token-goat-chunk-QQTWJY2O.mjs +85 -0
  120. package/dist/token-goat-chunk-QYHO5CPH.mjs +93 -0
  121. package/dist/token-goat-chunk-RELAVWAD.mjs +27 -0
  122. package/dist/token-goat-chunk-RSLPOBKQ.mjs +339 -0
  123. package/dist/token-goat-chunk-SAMFDIS2.mjs +712 -0
  124. package/dist/token-goat-chunk-SDELXLDM.mjs +48 -0
  125. package/dist/{token-goat-chunk-PGTH2U4C.mjs → token-goat-chunk-SOAFZNNZ.mjs} +164 -40
  126. package/dist/{token-goat-chunk-G23DWHV4.mjs → token-goat-chunk-SRTHT7KV.mjs} +33 -15
  127. package/dist/token-goat-chunk-T5P5ACNQ.mjs +212 -0
  128. package/dist/token-goat-chunk-T5YGG4V3.mjs +45 -0
  129. package/dist/token-goat-chunk-TAUZ4OFS.mjs +110 -0
  130. package/dist/token-goat-chunk-TM6MC754.mjs +40 -0
  131. package/dist/token-goat-chunk-TWUKBOMP.mjs +72 -0
  132. package/dist/token-goat-chunk-U2KSB4SG.mjs +56 -0
  133. package/dist/token-goat-chunk-U4WHMG6Y.mjs +898 -0
  134. package/dist/token-goat-chunk-UA5V6P3P.mjs +122 -0
  135. package/dist/token-goat-chunk-UGJHGR5A.mjs +52 -0
  136. package/dist/{token-goat-chunk-RQGGMPCR.mjs → token-goat-chunk-UOUDVA5U.mjs} +76 -16
  137. package/dist/{token-goat-chunk-HNFZZHFW.mjs → token-goat-chunk-URRJ33GR.mjs} +22 -4
  138. package/dist/token-goat-chunk-UZOROKIS.mjs +165 -0
  139. package/dist/token-goat-chunk-VIHGGGEI.mjs +4234 -0
  140. package/dist/token-goat-chunk-VTJLAA7P.mjs +21 -0
  141. package/dist/token-goat-chunk-VWDXLT4F.mjs +678 -0
  142. package/dist/token-goat-chunk-VWZA2H4P.mjs +368 -0
  143. package/dist/{token-goat-chunk-QO3LXVVR.mjs → token-goat-chunk-VXEXMJDL.mjs} +2964 -3153
  144. package/dist/token-goat-chunk-WBA5SKT4.mjs +547 -0
  145. package/dist/{token-goat-chunk-ONXH6NZ5.mjs → token-goat-chunk-WDH44VAU.mjs} +19 -22
  146. package/dist/token-goat-chunk-X2SUP3EI.mjs +107 -0
  147. package/dist/token-goat-chunk-X3BELZSJ.mjs +125 -0
  148. package/dist/{token-goat-chunk-RLP6J7WR.mjs → token-goat-chunk-XLRBNZCC.mjs} +40 -21
  149. package/dist/{token-goat-chunk-S4VSXURL.mjs → token-goat-chunk-XRKUX6CM.mjs} +4 -0
  150. package/dist/token-goat-chunk-XX6O25RN.mjs +82 -0
  151. package/dist/token-goat-chunk-XZSUHBVS.mjs +65 -0
  152. package/dist/token-goat-chunk-Y2ZTQOCL.mjs +35 -0
  153. package/dist/{token-goat-chunk-UA5BKWWQ.mjs → token-goat-chunk-YB4VMGK2.mjs} +15 -4
  154. package/dist/token-goat-chunk-YBIIY3HR.mjs +51 -0
  155. package/dist/{token-goat-chunk-PKRWMHVP.mjs → token-goat-chunk-YHVDKQBR.mjs} +389 -221
  156. package/dist/token-goat-chunk-YJB5XLWI.mjs +26 -0
  157. package/dist/{token-goat-chunk-PQ53BSCF.mjs → token-goat-chunk-YKB6AQG3.mjs} +53 -31
  158. package/dist/token-goat-chunk-YMTG2YA5.mjs +35 -0
  159. package/dist/token-goat-chunk-YPBZYQRV.mjs +40 -0
  160. package/dist/{token-goat-chunk-HUYUHODZ.mjs → token-goat-chunk-YY6AVUFL.mjs} +13246 -12247
  161. package/dist/token-goat-chunk-Z7N5OMMP.mjs +98 -0
  162. package/dist/{token-goat-chunk-BGHSSJUA.mjs → token-goat-chunk-ZFOBKUWH.mjs} +1 -1
  163. package/dist/token-goat-chunk-ZMBL6UVV.mjs +110 -0
  164. package/dist/token-goat-chunk-ZNMNUPAZ.mjs +938 -0
  165. package/dist/token-goat-hook-client.cjs +87 -23
  166. package/dist/token-goat-hook-client.mjs +3 -3
  167. package/dist/token-goat-hook.mjs +76 -31
  168. package/dist/token-goat.core.mjs +6 -6
  169. package/docs/C4_RUNTIME_ARCHITECTURE.md +2 -2
  170. package/docs/cli.md +113 -60
  171. package/docs/install.md +63 -20
  172. package/docs/security.md +10 -8
  173. package/package.json +18 -7
  174. package/scripts/verify-native-dist.mjs +386 -0
  175. package/dist/token-goat-chunk-2NNUA2LR.mjs +0 -143
  176. package/dist/token-goat-chunk-44BM7DDQ.mjs +0 -294
  177. package/dist/token-goat-chunk-BGYOZ6DO.mjs +0 -24
  178. package/dist/token-goat-chunk-C5YPNZKQ.mjs +0 -318
  179. package/dist/token-goat-chunk-CIQ2FTY3.mjs +0 -1990
  180. package/dist/token-goat-chunk-D4ETHJD6.mjs +0 -246
  181. package/dist/token-goat-chunk-DNRPXHYH.mjs +0 -1062
  182. package/dist/token-goat-chunk-EUSDXRXU.mjs +0 -1429
  183. package/dist/token-goat-chunk-FTP4U4QA.mjs +0 -64
  184. package/dist/token-goat-chunk-G7IWXCFF.mjs +0 -456
  185. package/dist/token-goat-chunk-GLXRTTLE.mjs +0 -36
  186. package/dist/token-goat-chunk-H5J3C56Q.mjs +0 -1511
  187. package/dist/token-goat-chunk-IVWI2OCK.mjs +0 -368
  188. package/dist/token-goat-chunk-JTKCQMQA.mjs +0 -418
  189. package/dist/token-goat-chunk-LZNBQTDK.mjs +0 -26
  190. package/dist/token-goat-chunk-ORNFMIER.mjs +0 -295
  191. package/dist/token-goat-chunk-RTMVLHWX.mjs +0 -7113
  192. package/dist/token-goat-chunk-VQ6F6T7X.mjs +0 -36
  193. package/dist/token-goat-chunk-VZQEWRVH.mjs +0 -312
  194. package/dist/token-goat-chunk-XYWPOSCN.mjs +0 -807
  195. package/dist/token-goat-chunk-YAGLESS3.mjs +0 -23
  196. package/dist/token-goat-chunk-YKSRAWUU.mjs +0 -33
  197. package/dist/token-goat-chunk-Z6KBMOBI.mjs +0 -53
@@ -1,295 +0,0 @@
1
- import { createRequire as __cjsRequire } from 'node:module';
2
- const require = __cjsRequire(import.meta.url);
3
- import {
4
- serveOne,
5
- swapEnv
6
- } from "./token-goat-chunk-S4VSXURL.mjs";
7
- import {
8
- relayInProcess
9
- } from "./token-goat-chunk-QO3LXVVR.mjs";
10
- import "./token-goat-chunk-IVWI2OCK.mjs";
11
- import "./token-goat-chunk-DNRPXHYH.mjs";
12
- import "./token-goat-chunk-RTMVLHWX.mjs";
13
- import "./token-goat-chunk-L7H3U27L.mjs";
14
- import "./token-goat-chunk-RRNZMM3A.mjs";
15
- import "./token-goat-chunk-E4ZOJIZK.mjs";
16
- import "./token-goat-chunk-E5TK5DNO.mjs";
17
- import "./token-goat-chunk-ZER6EAXZ.mjs";
18
- import "./token-goat-chunk-44BM7DDQ.mjs";
19
- import "./token-goat-chunk-EUSDXRXU.mjs";
20
- import "./token-goat-chunk-G7IWXCFF.mjs";
21
- import "./token-goat-chunk-H5J3C56Q.mjs";
22
- import "./token-goat-chunk-TDUT2CL6.mjs";
23
- import "./token-goat-chunk-ONXH6NZ5.mjs";
24
- import "./token-goat-chunk-O6I2XU4P.mjs";
25
- import "./token-goat-chunk-D4ETHJD6.mjs";
26
- import "./token-goat-chunk-52NSDWYY.mjs";
27
- import "./token-goat-chunk-2WOUYWLM.mjs";
28
- import "./token-goat-chunk-CIQ2FTY3.mjs";
29
- import {
30
- PROTOCOL_VERSION,
31
- SERVER_SLOTS,
32
- bundleEntryFiles,
33
- configStamp,
34
- endpointFor,
35
- ensureServerKey,
36
- mac,
37
- macMatches,
38
- nonce,
39
- readFrames,
40
- removeMarker,
41
- serverKeyPath,
42
- touchMarker,
43
- writeFrame
44
- } from "./token-goat-chunk-DPNLUJWB.mjs";
45
- import "./token-goat-chunk-3BTK54F3.mjs";
46
- import "./token-goat-chunk-VMFWNHGR.mjs";
47
- import "./token-goat-chunk-435UQTKD.mjs";
48
- import "./token-goat-chunk-7CPMDFGB.mjs";
49
- import {
50
- hookServerEnabled
51
- } from "./token-goat-chunk-TGOXNAHW.mjs";
52
- import "./token-goat-chunk-XB5KKOCG.mjs";
53
- import {
54
- clearPerRequestCaches
55
- } from "./token-goat-chunk-YZAAZU2S.mjs";
56
- import "./token-goat-chunk-IVE6U7KV.mjs";
57
- import "./token-goat-chunk-XYWPOSCN.mjs";
58
- import "./token-goat-chunk-TCQANXYC.mjs";
59
- import "./token-goat-chunk-NMTKNYGF.mjs";
60
- import {
61
- VERSION,
62
- configPath,
63
- ensureDataDirPrivate
64
- } from "./token-goat-chunk-MELOKFDJ.mjs";
65
- import "./token-goat-chunk-Y4AFKTHK.mjs";
66
- import "./token-goat-chunk-JTKCQMQA.mjs";
67
- import {
68
- init_define_import_meta_env
69
- } from "./token-goat-chunk-A37V4PBF.mjs";
70
-
71
- // src/hook_server.ts
72
- init_define_import_meta_env();
73
- import * as fs from "node:fs";
74
- import * as net from "node:net";
75
- import * as os from "node:os";
76
- var IDLE_EXIT_MS = { primary: 30 * 6e4, overflow: 3 * 6e4 };
77
- var KEY_CHECK_MS = 2e3;
78
- var HANDSHAKE_IDLE_MS = 1e4;
79
- function bundleStamp() {
80
- return bundleEntryFiles().map((f) => {
81
- try {
82
- const st = fs.statSync(f);
83
- return `${st.size}:${st.mtimeMs}`;
84
- } catch {
85
- return "-";
86
- }
87
- }).join("|");
88
- }
89
- var enabledMemo;
90
- function stillEnabled() {
91
- const key = `${process.env["TOKEN_GOAT_HOOK_SERVER"] ?? ""}|${configPath()}|${configStamp()}`;
92
- if (enabledMemo?.key !== key) enabledMemo = { key, enabled: hookServerEnabled() };
93
- return enabledMemo.enabled;
94
- }
95
- function retirementReason(loadedStamp) {
96
- if (bundleStamp() !== loadedStamp) return "bundle replaced";
97
- if (!stillEnabled()) return "disabled";
98
- return void 0;
99
- }
100
- async function handle(request, runCli, send) {
101
- clearPerRequestCaches();
102
- if (request.kind === "cli") {
103
- const res = await serveOne({ id: 0, argv: request.argv, cwd: request.cwd, env: request.env }, runCli, clearPerRequestCaches);
104
- return send({ ok: true, stdout: res.stdout, stderr: res.stderr, status: res.status });
105
- }
106
- const startedAt = performance.now();
107
- const cwdBefore = process.cwd();
108
- const restoreEnv = swapEnv(request.env);
109
- const afterReply = [];
110
- try {
111
- process.chdir(request.cwd);
112
- const payload = JSON.parse(request.input);
113
- const stdout = await relayInProcess(request.event, payload, request.harnessWaitMs, { elapsedMs: () => request.elapsedMs + (performance.now() - startedAt), afterReply: (work) => afterReply.push(work) });
114
- send({ ok: true, stdout });
115
- for (const work of afterReply) work();
116
- } finally {
117
- restoreEnv();
118
- try {
119
- process.chdir(cwdBefore);
120
- } catch {
121
- }
122
- clearPerRequestCaches();
123
- }
124
- }
125
- function listen(server, endpoint) {
126
- const tryListen = () => new Promise((resolve) => {
127
- server.once("error", resolve);
128
- server.listen({ path: endpoint, readableAll: false, writableAll: false }, () => {
129
- server.removeListener("error", resolve);
130
- resolve(void 0);
131
- });
132
- });
133
- return tryListen().then(async (err) => {
134
- if (err === void 0) return true;
135
- if (err.code !== "EADDRINUSE" || process.platform === "win32") return false;
136
- const alive = await new Promise((resolve) => {
137
- const probe = net.connect(endpoint);
138
- probe.once("connect", () => {
139
- probe.destroy();
140
- resolve(true);
141
- });
142
- probe.once("error", () => resolve(false));
143
- });
144
- if (alive) return false;
145
- fs.rmSync(endpoint, { force: true });
146
- return await tryListen() === void 0;
147
- });
148
- }
149
- async function runHookServer(slot, runCli) {
150
- if (!Number.isInteger(slot) || slot < 0 || slot >= SERVER_SLOTS) throw new Error(`--slot must be an integer from 0 to ${SERVER_SLOTS - 1}`);
151
- if (!hookServerEnabled()) {
152
- touchMarker("disabled", configStamp());
153
- return;
154
- }
155
- ensureDataDirPrivate();
156
- const key = ensureServerKey();
157
- const keyPath = serverKeyPath();
158
- const loadedStamp = bundleStamp();
159
- const endpoint = endpointFor(slot);
160
- process.chdir(os.tmpdir());
161
- const status = { pid: process.pid, slot, version: VERSION, startedAt: Date.now(), lastUsedAt: Date.now(), served: 0, errors: 0 };
162
- let busy = false;
163
- let retiring = false;
164
- let idleTimer;
165
- const flushing = /* @__PURE__ */ new Set();
166
- const awaitingRequest = /* @__PURE__ */ new Set();
167
- const endWith = (socket, frame) => {
168
- const flushed = new Promise((resolve) => {
169
- socket.once("close", () => resolve());
170
- writeFrame(socket, frame);
171
- socket.end(() => resolve());
172
- });
173
- flushing.add(flushed);
174
- void flushed.then(() => flushing.delete(flushed));
175
- };
176
- let socketIno;
177
- const ownsEndpoint = () => {
178
- if (socketIno === void 0) return true;
179
- try {
180
- return fs.statSync(endpoint, { bigint: true, throwIfNoEntry: false })?.ino === socketIno;
181
- } catch {
182
- return true;
183
- }
184
- };
185
- const server = net.createServer((socket) => serveConnection(socket));
186
- const exitOnceFlushed = () => void Promise.all(flushing).then(() => process.exit(0));
187
- const stop = () => {
188
- retiring = true;
189
- if (idleTimer !== void 0) clearTimeout(idleTimer);
190
- if (ownsEndpoint()) server.close();
191
- for (const socket of awaitingRequest) endWith(socket, { t: "stale" });
192
- awaitingRequest.clear();
193
- if (!busy) exitOnceFlushed();
194
- };
195
- const armIdle = () => {
196
- if (idleTimer !== void 0) clearTimeout(idleTimer);
197
- idleTimer = setTimeout(stop, slot === 0 ? IDLE_EXIT_MS.primary : IDLE_EXIT_MS.overflow);
198
- };
199
- function serveConnection(socket) {
200
- let nc = "";
201
- let ns = "";
202
- socket.setTimeout(HANDSHAKE_IDLE_MS, () => socket.destroy());
203
- socket.on("error", () => socket.destroy());
204
- socket.once("close", () => awaitingRequest.delete(socket));
205
- const onMessage = (msg) => {
206
- if (msg["t"] === "hello" && nc === "") {
207
- if (msg["v"] !== PROTOCOL_VERSION || typeof msg["nc"] !== "string" || msg["nc"] === "") return void socket.destroy();
208
- const reason = retiring ? "retiring" : retirementReason(loadedStamp);
209
- if (reason !== void 0) {
210
- if (reason === "disabled") touchMarker("disabled", configStamp());
211
- if (reason === "bundle replaced") removeMarker(`spawn-${slot}`);
212
- writeFrame(socket, { t: "stale" });
213
- socket.end(() => {
214
- if (!retiring) stop();
215
- });
216
- return;
217
- }
218
- if (busy && msg["ctl"] !== true) {
219
- writeFrame(socket, { t: "busy" });
220
- return void socket.end();
221
- }
222
- nc = msg["nc"];
223
- ns = nonce();
224
- writeFrame(socket, { t: "challenge", v: PROTOCOL_VERSION, ns, mac: mac(key, "S", nc, ns) });
225
- awaitingRequest.add(socket);
226
- return;
227
- }
228
- if (msg["t"] === "req" && ns !== "") {
229
- const body = msg["body"];
230
- if (typeof body !== "string" || !macMatches(mac(key, "C", nc, ns, body), msg["mac"])) return void socket.destroy();
231
- if (!awaitingRequest.delete(socket)) return;
232
- let request;
233
- let parseError;
234
- try {
235
- request = JSON.parse(body);
236
- } catch (e) {
237
- parseError = e;
238
- }
239
- const kind = request?.kind;
240
- if (kind === "status" || kind === "stop") {
241
- const resBody = JSON.stringify({ ok: true, info: { ...status } });
242
- endWith(socket, { t: "res", mac: mac(key, "R", nc, ns, resBody), body: resBody });
243
- if (kind === "stop" && !retiring) stop();
244
- return;
245
- }
246
- if (busy || retiring) {
247
- writeFrame(socket, { t: retiring ? "stale" : "busy" });
248
- return void socket.end();
249
- }
250
- busy = true;
251
- socket.setTimeout(0);
252
- let replied = false;
253
- const reply = (res) => {
254
- if (replied) return;
255
- replied = true;
256
- const resBody = JSON.stringify(res);
257
- endWith(socket, { t: "res", mac: mac(key, "R", nc, ns, resBody), body: resBody });
258
- };
259
- void (async () => {
260
- try {
261
- if (request === void 0) throw parseError;
262
- await handle(request, runCli, reply);
263
- status.served++;
264
- } catch (e) {
265
- status.errors++;
266
- reply({ ok: false, error: e instanceof Error ? e.message : String(e) });
267
- }
268
- busy = false;
269
- status.lastUsedAt = Date.now();
270
- if (retiring) stop();
271
- else armIdle();
272
- })();
273
- return;
274
- }
275
- socket.destroy();
276
- };
277
- readFrames(socket, onMessage, () => void 0);
278
- }
279
- if (!await listen(server, endpoint)) return;
280
- if (process.platform !== "win32") socketIno = fs.statSync(endpoint, { bigint: true }).ino;
281
- removeMarker("failed");
282
- setInterval(() => {
283
- if (!fs.existsSync(keyPath) || !ownsEndpoint()) stop();
284
- }, KEY_CHECK_MS).unref();
285
- if (process.platform !== "win32") {
286
- try {
287
- fs.chmodSync(endpoint, 384);
288
- } catch {
289
- }
290
- }
291
- armIdle();
292
- }
293
- export {
294
- runHookServer
295
- };