@sonde/packs 0.1.0 → 0.1.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 (359) hide show
  1. package/.turbo/turbo-build.log +6 -0
  2. package/.turbo/turbo-test.log +814 -0
  3. package/.turbo/turbo-typecheck.log +4 -0
  4. package/CHANGELOG.md +10 -0
  5. package/dist/index.d.ts +16 -1
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +40 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/integrations/citrix.d.ts +13 -0
  10. package/dist/integrations/citrix.d.ts.map +1 -0
  11. package/dist/integrations/citrix.js +420 -0
  12. package/dist/integrations/citrix.js.map +1 -0
  13. package/dist/integrations/citrix.test.d.ts +2 -0
  14. package/dist/integrations/citrix.test.d.ts.map +1 -0
  15. package/dist/integrations/citrix.test.js +464 -0
  16. package/dist/integrations/citrix.test.js.map +1 -0
  17. package/dist/integrations/graph.d.ts +9 -0
  18. package/dist/integrations/graph.d.ts.map +1 -0
  19. package/dist/integrations/graph.js +290 -0
  20. package/dist/integrations/graph.js.map +1 -0
  21. package/dist/integrations/graph.test.d.ts +2 -0
  22. package/dist/integrations/graph.test.d.ts.map +1 -0
  23. package/dist/integrations/graph.test.js +356 -0
  24. package/dist/integrations/graph.test.js.map +1 -0
  25. package/dist/integrations/httpbin.d.ts +3 -0
  26. package/dist/integrations/httpbin.d.ts.map +1 -0
  27. package/dist/integrations/httpbin.js +70 -0
  28. package/dist/integrations/httpbin.js.map +1 -0
  29. package/dist/integrations/nutanix.d.ts +18 -0
  30. package/dist/integrations/nutanix.d.ts.map +1 -0
  31. package/dist/integrations/nutanix.js +1121 -0
  32. package/dist/integrations/nutanix.js.map +1 -0
  33. package/dist/integrations/nutanix.test.d.ts +2 -0
  34. package/dist/integrations/nutanix.test.d.ts.map +1 -0
  35. package/dist/integrations/nutanix.test.js +978 -0
  36. package/dist/integrations/nutanix.test.js.map +1 -0
  37. package/dist/integrations/proxmox.d.ts +12 -0
  38. package/dist/integrations/proxmox.d.ts.map +1 -0
  39. package/dist/integrations/proxmox.js +733 -0
  40. package/dist/integrations/proxmox.js.map +1 -0
  41. package/dist/integrations/proxmox.test.d.ts +2 -0
  42. package/dist/integrations/proxmox.test.d.ts.map +1 -0
  43. package/dist/integrations/proxmox.test.js +697 -0
  44. package/dist/integrations/proxmox.test.js.map +1 -0
  45. package/dist/integrations/servicenow.d.ts +3 -0
  46. package/dist/integrations/servicenow.d.ts.map +1 -0
  47. package/dist/integrations/servicenow.js +257 -0
  48. package/dist/integrations/servicenow.js.map +1 -0
  49. package/dist/integrations/servicenow.test.d.ts +2 -0
  50. package/dist/integrations/servicenow.test.d.ts.map +1 -0
  51. package/dist/integrations/servicenow.test.js +217 -0
  52. package/dist/integrations/servicenow.test.js.map +1 -0
  53. package/dist/integrations/splunk.d.ts +9 -0
  54. package/dist/integrations/splunk.d.ts.map +1 -0
  55. package/dist/integrations/splunk.js +242 -0
  56. package/dist/integrations/splunk.js.map +1 -0
  57. package/dist/integrations/splunk.test.d.ts +2 -0
  58. package/dist/integrations/splunk.test.d.ts.map +1 -0
  59. package/dist/integrations/splunk.test.js +323 -0
  60. package/dist/integrations/splunk.test.js.map +1 -0
  61. package/dist/mysql/index.d.ts +3 -0
  62. package/dist/mysql/index.d.ts.map +1 -0
  63. package/dist/mysql/index.js +13 -0
  64. package/dist/mysql/index.js.map +1 -0
  65. package/dist/mysql/manifest.d.ts +3 -0
  66. package/dist/mysql/manifest.d.ts.map +1 -0
  67. package/dist/mysql/manifest.js +69 -0
  68. package/dist/mysql/manifest.js.map +1 -0
  69. package/dist/mysql/probes/databases-list.d.ts +13 -0
  70. package/dist/mysql/probes/databases-list.d.ts.map +1 -0
  71. package/dist/mysql/probes/databases-list.js +31 -0
  72. package/dist/mysql/probes/databases-list.js.map +1 -0
  73. package/dist/mysql/probes/databases-list.test.d.ts +2 -0
  74. package/dist/mysql/probes/databases-list.test.d.ts.map +1 -0
  75. package/dist/mysql/probes/databases-list.test.js +54 -0
  76. package/dist/mysql/probes/databases-list.test.js.map +1 -0
  77. package/dist/mysql/probes/processlist.d.ts +18 -0
  78. package/dist/mysql/probes/processlist.d.ts.map +1 -0
  79. package/dist/mysql/probes/processlist.js +36 -0
  80. package/dist/mysql/probes/processlist.js.map +1 -0
  81. package/dist/mysql/probes/processlist.test.d.ts +2 -0
  82. package/dist/mysql/probes/processlist.test.d.ts.map +1 -0
  83. package/dist/mysql/probes/processlist.test.js +41 -0
  84. package/dist/mysql/probes/processlist.test.js.map +1 -0
  85. package/dist/mysql/probes/status.d.ts +14 -0
  86. package/dist/mysql/probes/status.d.ts.map +1 -0
  87. package/dist/mysql/probes/status.js +40 -0
  88. package/dist/mysql/probes/status.js.map +1 -0
  89. package/dist/mysql/probes/status.test.d.ts +2 -0
  90. package/dist/mysql/probes/status.test.d.ts.map +1 -0
  91. package/dist/mysql/probes/status.test.js +43 -0
  92. package/dist/mysql/probes/status.test.js.map +1 -0
  93. package/dist/nginx/index.d.ts +3 -0
  94. package/dist/nginx/index.d.ts.map +1 -0
  95. package/dist/nginx/index.js +13 -0
  96. package/dist/nginx/index.js.map +1 -0
  97. package/dist/nginx/manifest.d.ts +3 -0
  98. package/dist/nginx/manifest.d.ts.map +1 -0
  99. package/dist/nginx/manifest.js +68 -0
  100. package/dist/nginx/manifest.js.map +1 -0
  101. package/dist/nginx/probes/access-log-tail.d.ts +9 -0
  102. package/dist/nginx/probes/access-log-tail.d.ts.map +1 -0
  103. package/dist/nginx/probes/access-log-tail.js +14 -0
  104. package/dist/nginx/probes/access-log-tail.js.map +1 -0
  105. package/dist/nginx/probes/access-log-tail.test.d.ts +2 -0
  106. package/dist/nginx/probes/access-log-tail.test.d.ts.map +1 -0
  107. package/dist/nginx/probes/access-log-tail.test.js +40 -0
  108. package/dist/nginx/probes/access-log-tail.test.js.map +1 -0
  109. package/dist/nginx/probes/config-test.d.ts +8 -0
  110. package/dist/nginx/probes/config-test.d.ts.map +1 -0
  111. package/dist/nginx/probes/config-test.js +18 -0
  112. package/dist/nginx/probes/config-test.js.map +1 -0
  113. package/dist/nginx/probes/config-test.test.d.ts +2 -0
  114. package/dist/nginx/probes/config-test.test.d.ts.map +1 -0
  115. package/dist/nginx/probes/config-test.test.js +35 -0
  116. package/dist/nginx/probes/config-test.test.js.map +1 -0
  117. package/dist/nginx/probes/error-log-tail.d.ts +9 -0
  118. package/dist/nginx/probes/error-log-tail.d.ts.map +1 -0
  119. package/dist/nginx/probes/error-log-tail.js +14 -0
  120. package/dist/nginx/probes/error-log-tail.js.map +1 -0
  121. package/dist/nginx/probes/error-log-tail.test.d.ts +2 -0
  122. package/dist/nginx/probes/error-log-tail.test.d.ts.map +1 -0
  123. package/dist/nginx/probes/error-log-tail.test.js +34 -0
  124. package/dist/nginx/probes/error-log-tail.test.js.map +1 -0
  125. package/dist/postgres/index.d.ts +3 -0
  126. package/dist/postgres/index.d.ts.map +1 -0
  127. package/dist/postgres/index.js +13 -0
  128. package/dist/postgres/index.js.map +1 -0
  129. package/dist/postgres/manifest.d.ts +3 -0
  130. package/dist/postgres/manifest.d.ts.map +1 -0
  131. package/dist/postgres/manifest.js +90 -0
  132. package/dist/postgres/manifest.js.map +1 -0
  133. package/dist/postgres/probes/connections-active.d.ts +17 -0
  134. package/dist/postgres/probes/connections-active.d.ts.map +1 -0
  135. package/dist/postgres/probes/connections-active.js +37 -0
  136. package/dist/postgres/probes/connections-active.js.map +1 -0
  137. package/dist/postgres/probes/connections-active.test.d.ts +2 -0
  138. package/dist/postgres/probes/connections-active.test.d.ts.map +1 -0
  139. package/dist/postgres/probes/connections-active.test.js +36 -0
  140. package/dist/postgres/probes/connections-active.test.js.map +1 -0
  141. package/dist/postgres/probes/databases-list.d.ts +14 -0
  142. package/dist/postgres/probes/databases-list.d.ts.map +1 -0
  143. package/dist/postgres/probes/databases-list.js +34 -0
  144. package/dist/postgres/probes/databases-list.js.map +1 -0
  145. package/dist/postgres/probes/databases-list.test.d.ts +2 -0
  146. package/dist/postgres/probes/databases-list.test.d.ts.map +1 -0
  147. package/dist/postgres/probes/databases-list.test.js +49 -0
  148. package/dist/postgres/probes/databases-list.test.js.map +1 -0
  149. package/dist/postgres/probes/query-slow.d.ts +17 -0
  150. package/dist/postgres/probes/query-slow.d.ts.map +1 -0
  151. package/dist/postgres/probes/query-slow.js +37 -0
  152. package/dist/postgres/probes/query-slow.js.map +1 -0
  153. package/dist/postgres/probes/query-slow.test.d.ts +2 -0
  154. package/dist/postgres/probes/query-slow.test.d.ts.map +1 -0
  155. package/dist/postgres/probes/query-slow.test.js +30 -0
  156. package/dist/postgres/probes/query-slow.test.js.map +1 -0
  157. package/dist/proxmox/index.d.ts +3 -0
  158. package/dist/proxmox/index.d.ts.map +1 -0
  159. package/dist/proxmox/index.js +23 -0
  160. package/dist/proxmox/index.js.map +1 -0
  161. package/dist/proxmox/manifest.d.ts +3 -0
  162. package/dist/proxmox/manifest.d.ts.map +1 -0
  163. package/dist/proxmox/manifest.js +75 -0
  164. package/dist/proxmox/manifest.js.map +1 -0
  165. package/dist/proxmox/probes/ceph-status.d.ts +36 -0
  166. package/dist/proxmox/probes/ceph-status.d.ts.map +1 -0
  167. package/dist/proxmox/probes/ceph-status.js +71 -0
  168. package/dist/proxmox/probes/ceph-status.js.map +1 -0
  169. package/dist/proxmox/probes/ceph-status.test.d.ts +2 -0
  170. package/dist/proxmox/probes/ceph-status.test.d.ts.map +1 -0
  171. package/dist/proxmox/probes/ceph-status.test.js +115 -0
  172. package/dist/proxmox/probes/ceph-status.test.js.map +1 -0
  173. package/dist/proxmox/probes/cluster-config.d.ts +31 -0
  174. package/dist/proxmox/probes/cluster-config.d.ts.map +1 -0
  175. package/dist/proxmox/probes/cluster-config.js +72 -0
  176. package/dist/proxmox/probes/cluster-config.js.map +1 -0
  177. package/dist/proxmox/probes/cluster-config.test.d.ts +2 -0
  178. package/dist/proxmox/probes/cluster-config.test.d.ts.map +1 -0
  179. package/dist/proxmox/probes/cluster-config.test.js +107 -0
  180. package/dist/proxmox/probes/cluster-config.test.js.map +1 -0
  181. package/dist/proxmox/probes/ha-status.d.ts +18 -0
  182. package/dist/proxmox/probes/ha-status.d.ts.map +1 -0
  183. package/dist/proxmox/probes/ha-status.js +38 -0
  184. package/dist/proxmox/probes/ha-status.js.map +1 -0
  185. package/dist/proxmox/probes/ha-status.test.d.ts +2 -0
  186. package/dist/proxmox/probes/ha-status.test.d.ts.map +1 -0
  187. package/dist/proxmox/probes/ha-status.test.js +66 -0
  188. package/dist/proxmox/probes/ha-status.test.js.map +1 -0
  189. package/dist/proxmox/probes/lvm.d.ts +35 -0
  190. package/dist/proxmox/probes/lvm.d.ts.map +1 -0
  191. package/dist/proxmox/probes/lvm.js +75 -0
  192. package/dist/proxmox/probes/lvm.js.map +1 -0
  193. package/dist/proxmox/probes/lvm.test.d.ts +2 -0
  194. package/dist/proxmox/probes/lvm.test.d.ts.map +1 -0
  195. package/dist/proxmox/probes/lvm.test.js +128 -0
  196. package/dist/proxmox/probes/lvm.test.js.map +1 -0
  197. package/dist/proxmox/probes/lxc-config.d.ts +29 -0
  198. package/dist/proxmox/probes/lxc-config.d.ts.map +1 -0
  199. package/dist/proxmox/probes/lxc-config.js +67 -0
  200. package/dist/proxmox/probes/lxc-config.js.map +1 -0
  201. package/dist/proxmox/probes/lxc-config.test.d.ts +2 -0
  202. package/dist/proxmox/probes/lxc-config.test.d.ts.map +1 -0
  203. package/dist/proxmox/probes/lxc-config.test.js +77 -0
  204. package/dist/proxmox/probes/lxc-config.test.js.map +1 -0
  205. package/dist/proxmox/probes/lxc-list.d.ts +20 -0
  206. package/dist/proxmox/probes/lxc-list.d.ts.map +1 -0
  207. package/dist/proxmox/probes/lxc-list.js +49 -0
  208. package/dist/proxmox/probes/lxc-list.js.map +1 -0
  209. package/dist/proxmox/probes/lxc-list.test.d.ts +2 -0
  210. package/dist/proxmox/probes/lxc-list.test.d.ts.map +1 -0
  211. package/dist/proxmox/probes/lxc-list.test.js +51 -0
  212. package/dist/proxmox/probes/lxc-list.test.js.map +1 -0
  213. package/dist/proxmox/probes/vm-config.d.ts +21 -0
  214. package/dist/proxmox/probes/vm-config.d.ts.map +1 -0
  215. package/dist/proxmox/probes/vm-config.js +58 -0
  216. package/dist/proxmox/probes/vm-config.js.map +1 -0
  217. package/dist/proxmox/probes/vm-config.test.d.ts +2 -0
  218. package/dist/proxmox/probes/vm-config.test.d.ts.map +1 -0
  219. package/dist/proxmox/probes/vm-config.test.js +80 -0
  220. package/dist/proxmox/probes/vm-config.test.js.map +1 -0
  221. package/dist/proxmox/probes/vm-locks.d.ts +16 -0
  222. package/dist/proxmox/probes/vm-locks.d.ts.map +1 -0
  223. package/dist/proxmox/probes/vm-locks.js +35 -0
  224. package/dist/proxmox/probes/vm-locks.js.map +1 -0
  225. package/dist/proxmox/probes/vm-locks.test.d.ts +2 -0
  226. package/dist/proxmox/probes/vm-locks.test.d.ts.map +1 -0
  227. package/dist/proxmox/probes/vm-locks.test.js +54 -0
  228. package/dist/proxmox/probes/vm-locks.test.js.map +1 -0
  229. package/dist/redis/index.d.ts +3 -0
  230. package/dist/redis/index.d.ts.map +1 -0
  231. package/dist/redis/index.js +13 -0
  232. package/dist/redis/index.js.map +1 -0
  233. package/dist/redis/manifest.d.ts +3 -0
  234. package/dist/redis/manifest.d.ts.map +1 -0
  235. package/dist/redis/manifest.js +51 -0
  236. package/dist/redis/manifest.js.map +1 -0
  237. package/dist/redis/probes/info.d.ts +15 -0
  238. package/dist/redis/probes/info.d.ts.map +1 -0
  239. package/dist/redis/probes/info.js +32 -0
  240. package/dist/redis/probes/info.js.map +1 -0
  241. package/dist/redis/probes/info.test.d.ts +2 -0
  242. package/dist/redis/probes/info.test.d.ts.map +1 -0
  243. package/dist/redis/probes/info.test.js +64 -0
  244. package/dist/redis/probes/info.test.js.map +1 -0
  245. package/dist/redis/probes/keys-count.d.ts +13 -0
  246. package/dist/redis/probes/keys-count.d.ts.map +1 -0
  247. package/dist/redis/probes/keys-count.js +24 -0
  248. package/dist/redis/probes/keys-count.js.map +1 -0
  249. package/dist/redis/probes/keys-count.test.d.ts +2 -0
  250. package/dist/redis/probes/keys-count.test.d.ts.map +1 -0
  251. package/dist/redis/probes/keys-count.test.js +37 -0
  252. package/dist/redis/probes/keys-count.test.js.map +1 -0
  253. package/dist/redis/probes/memory-usage.d.ts +16 -0
  254. package/dist/redis/probes/memory-usage.d.ts.map +1 -0
  255. package/dist/redis/probes/memory-usage.js +31 -0
  256. package/dist/redis/probes/memory-usage.js.map +1 -0
  257. package/dist/redis/probes/memory-usage.test.d.ts +2 -0
  258. package/dist/redis/probes/memory-usage.test.d.ts.map +1 -0
  259. package/dist/redis/probes/memory-usage.test.js +48 -0
  260. package/dist/redis/probes/memory-usage.test.js.map +1 -0
  261. package/dist/runbooks/nutanix.d.ts +3 -0
  262. package/dist/runbooks/nutanix.d.ts.map +1 -0
  263. package/dist/runbooks/nutanix.js +619 -0
  264. package/dist/runbooks/nutanix.js.map +1 -0
  265. package/dist/runbooks/nutanix.test.d.ts +2 -0
  266. package/dist/runbooks/nutanix.test.d.ts.map +1 -0
  267. package/dist/runbooks/nutanix.test.js +971 -0
  268. package/dist/runbooks/nutanix.test.js.map +1 -0
  269. package/dist/runbooks/proxmox.d.ts +3 -0
  270. package/dist/runbooks/proxmox.d.ts.map +1 -0
  271. package/dist/runbooks/proxmox.js +451 -0
  272. package/dist/runbooks/proxmox.js.map +1 -0
  273. package/dist/runbooks/proxmox.test.d.ts +2 -0
  274. package/dist/runbooks/proxmox.test.d.ts.map +1 -0
  275. package/dist/runbooks/proxmox.test.js +700 -0
  276. package/dist/runbooks/proxmox.test.js.map +1 -0
  277. package/dist/signatures.d.ts +2 -0
  278. package/dist/signatures.d.ts.map +1 -0
  279. package/dist/signatures.js +2 -0
  280. package/dist/signatures.js.map +1 -0
  281. package/dist/types.d.ts +53 -0
  282. package/dist/types.d.ts.map +1 -1
  283. package/dist/validation.d.ts +6 -1
  284. package/dist/validation.d.ts.map +1 -1
  285. package/dist/validation.js +10 -1
  286. package/dist/validation.js.map +1 -1
  287. package/package.json +1 -1
  288. package/src/index.ts +60 -6
  289. package/src/integrations/citrix.test.ts +592 -0
  290. package/src/integrations/citrix.ts +557 -0
  291. package/src/integrations/graph.test.ts +478 -0
  292. package/src/integrations/graph.ts +413 -0
  293. package/src/integrations/httpbin.ts +72 -0
  294. package/src/integrations/nutanix.test.ts +1508 -0
  295. package/src/integrations/nutanix.ts +1460 -0
  296. package/src/integrations/proxmox.test.ts +1020 -0
  297. package/src/integrations/proxmox.ts +989 -0
  298. package/src/integrations/servicenow.test.ts +314 -0
  299. package/src/integrations/servicenow.ts +285 -0
  300. package/src/integrations/splunk.test.ts +440 -0
  301. package/src/integrations/splunk.ts +356 -0
  302. package/src/mysql/index.ts +14 -0
  303. package/src/mysql/manifest.ts +70 -0
  304. package/src/mysql/probes/databases-list.test.ts +62 -0
  305. package/src/mysql/probes/databases-list.ts +45 -0
  306. package/src/mysql/probes/processlist.test.ts +47 -0
  307. package/src/mysql/probes/processlist.ts +55 -0
  308. package/src/mysql/probes/status.test.ts +50 -0
  309. package/src/mysql/probes/status.ts +56 -0
  310. package/src/nginx/index.ts +14 -0
  311. package/src/nginx/manifest.ts +69 -0
  312. package/src/nginx/probes/access-log-tail.test.ts +51 -0
  313. package/src/nginx/probes/access-log-tail.ts +23 -0
  314. package/src/nginx/probes/config-test.test.ts +47 -0
  315. package/src/nginx/probes/config-test.ts +24 -0
  316. package/src/nginx/probes/error-log-tail.test.ts +44 -0
  317. package/src/nginx/probes/error-log-tail.ts +23 -0
  318. package/src/postgres/index.ts +14 -0
  319. package/src/postgres/manifest.ts +91 -0
  320. package/src/postgres/probes/connections-active.test.ts +42 -0
  321. package/src/postgres/probes/connections-active.ts +55 -0
  322. package/src/postgres/probes/databases-list.test.ts +57 -0
  323. package/src/postgres/probes/databases-list.ts +49 -0
  324. package/src/postgres/probes/query-slow.test.ts +37 -0
  325. package/src/postgres/probes/query-slow.ts +55 -0
  326. package/src/proxmox/index.ts +24 -0
  327. package/src/proxmox/manifest.ts +76 -0
  328. package/src/proxmox/probes/ceph-status.test.ts +126 -0
  329. package/src/proxmox/probes/ceph-status.ts +116 -0
  330. package/src/proxmox/probes/cluster-config.test.ts +118 -0
  331. package/src/proxmox/probes/cluster-config.ts +97 -0
  332. package/src/proxmox/probes/ha-status.test.ts +76 -0
  333. package/src/proxmox/probes/ha-status.ts +56 -0
  334. package/src/proxmox/probes/lvm.test.ts +140 -0
  335. package/src/proxmox/probes/lvm.ts +121 -0
  336. package/src/proxmox/probes/lxc-config.test.ts +89 -0
  337. package/src/proxmox/probes/lxc-config.ts +90 -0
  338. package/src/proxmox/probes/lxc-list.test.ts +60 -0
  339. package/src/proxmox/probes/lxc-list.ts +67 -0
  340. package/src/proxmox/probes/vm-config.test.ts +93 -0
  341. package/src/proxmox/probes/vm-config.ts +77 -0
  342. package/src/proxmox/probes/vm-locks.test.ts +63 -0
  343. package/src/proxmox/probes/vm-locks.ts +49 -0
  344. package/src/redis/index.ts +14 -0
  345. package/src/redis/manifest.ts +52 -0
  346. package/src/redis/probes/info.test.ts +73 -0
  347. package/src/redis/probes/info.ts +46 -0
  348. package/src/redis/probes/keys-count.test.ts +44 -0
  349. package/src/redis/probes/keys-count.ts +38 -0
  350. package/src/redis/probes/memory-usage.test.ts +54 -0
  351. package/src/redis/probes/memory-usage.ts +46 -0
  352. package/src/runbooks/nutanix.test.ts +1138 -0
  353. package/src/runbooks/nutanix.ts +941 -0
  354. package/src/runbooks/proxmox.test.ts +838 -0
  355. package/src/runbooks/proxmox.ts +626 -0
  356. package/src/signatures.ts +1 -0
  357. package/src/types.ts +62 -0
  358. package/src/validation.ts +21 -1
  359. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,242 @@
1
+ // --- Auth helpers ---
2
+ /** Build auth headers: Bearer token or Basic username:password */
3
+ export function buildAuthHeaders(credentials) {
4
+ if (credentials.authMethod === 'bearer_token') {
5
+ const token = credentials.credentials.splunkToken ?? '';
6
+ return { Authorization: `Bearer ${token}` };
7
+ }
8
+ // basic auth
9
+ const { username, password } = credentials.credentials;
10
+ if (username && password) {
11
+ return { Authorization: `Basic ${Buffer.from(`${username}:${password}`).toString('base64')}` };
12
+ }
13
+ return {};
14
+ }
15
+ // --- Splunk REST helper ---
16
+ /** Build a full Splunk REST URL with output_mode=json */
17
+ function splunkUrl(endpoint, path, params) {
18
+ const base = `${endpoint.replace(/\/$/, '')}${path}`;
19
+ const url = new URL(base);
20
+ url.searchParams.set('output_mode', 'json');
21
+ if (params) {
22
+ for (const [key, value] of Object.entries(params)) {
23
+ url.searchParams.set(key, value);
24
+ }
25
+ }
26
+ return url.toString();
27
+ }
28
+ /** GET a Splunk REST endpoint, returns parsed JSON */
29
+ export async function splunkGet(path, config, credentials, fetchFn, params) {
30
+ const url = splunkUrl(config.endpoint, path, params);
31
+ const headers = {
32
+ Accept: 'application/json',
33
+ ...buildAuthHeaders(credentials),
34
+ ...config.headers,
35
+ };
36
+ const res = await fetchFn(url, { headers });
37
+ if (!res.ok)
38
+ throw new Error(`Splunk API returned ${res.status}: ${res.statusText}`);
39
+ return res.json();
40
+ }
41
+ /** POST URL-encoded form data to a Splunk REST endpoint, returns parsed JSON */
42
+ export async function splunkPost(path, formData, config, credentials, fetchFn) {
43
+ const url = splunkUrl(config.endpoint, path);
44
+ const body = new URLSearchParams(formData);
45
+ const headers = {
46
+ 'Content-Type': 'application/x-www-form-urlencoded',
47
+ Accept: 'application/json',
48
+ ...buildAuthHeaders(credentials),
49
+ ...config.headers,
50
+ };
51
+ const res = await fetchFn(url, { method: 'POST', headers, body: body.toString() });
52
+ if (!res.ok)
53
+ throw new Error(`Splunk API returned ${res.status}: ${res.statusText}`);
54
+ return res.json();
55
+ }
56
+ // --- Probe handlers ---
57
+ const POLL_INTERVAL_MS = 1000;
58
+ const MAX_POLL_ATTEMPTS = 60;
59
+ const splunkSearch = async (params, config, credentials, fetchFn) => {
60
+ const query = params?.query ?? '';
61
+ if (!query)
62
+ throw new Error('query parameter is required (SPL search string)');
63
+ const earliest = params?.earliest || '-24h';
64
+ const latest = params?.latest || 'now';
65
+ const maxResults = params?.max_results || 100;
66
+ const startTime = Date.now();
67
+ // Create async search job via v2 API
68
+ const jobResponse = (await splunkPost('/services/search/v2/jobs', {
69
+ search: query,
70
+ earliest_time: earliest,
71
+ latest_time: latest,
72
+ }, config, credentials, fetchFn));
73
+ const sid = jobResponse.sid;
74
+ if (!sid)
75
+ throw new Error('Splunk did not return a search job ID (sid)');
76
+ // Poll until done
77
+ let dispatchState = '';
78
+ let attempts = 0;
79
+ while (dispatchState !== 'DONE' && attempts < MAX_POLL_ATTEMPTS) {
80
+ const status = (await splunkGet(`/services/search/v2/jobs/${sid}`, config, credentials, fetchFn));
81
+ dispatchState = status.entry?.[0]?.content?.dispatchState ?? '';
82
+ if (dispatchState === 'FAILED') {
83
+ throw new Error('Splunk search job failed');
84
+ }
85
+ if (dispatchState !== 'DONE') {
86
+ await new Promise((resolve) => setTimeout(resolve, POLL_INTERVAL_MS));
87
+ attempts++;
88
+ }
89
+ }
90
+ if (dispatchState !== 'DONE') {
91
+ throw new Error('Splunk search job timed out waiting for completion');
92
+ }
93
+ // Fetch results
94
+ const results = (await splunkGet(`/services/search/v2/jobs/${sid}/results`, config, credentials, fetchFn, { count: String(maxResults) }));
95
+ const executionTimeMs = Date.now() - startTime;
96
+ return {
97
+ results: results.results ?? [],
98
+ resultCount: (results.results ?? []).length,
99
+ sid,
100
+ executionTimeMs,
101
+ };
102
+ };
103
+ const splunkIndexes = async (_params, config, credentials, fetchFn) => {
104
+ const data = (await splunkGet('/services/data/indexes', config, credentials, fetchFn, {
105
+ count: '0',
106
+ }));
107
+ const indexes = (data.entry ?? []).map((entry) => ({
108
+ name: entry.name ?? '',
109
+ currentSizeMB: entry.content?.currentDBSizeMB ?? 0,
110
+ totalEventCount: entry.content?.totalEventCount ?? '0',
111
+ earliestEventTime: entry.content?.minTime ?? null,
112
+ latestEventTime: entry.content?.maxTime ?? null,
113
+ disabled: entry.content?.disabled ?? false,
114
+ }));
115
+ return { indexes, count: indexes.length };
116
+ };
117
+ const splunkSavedSearches = async (params, config, credentials, fetchFn) => {
118
+ const filterName = params?.name;
119
+ const data = (await splunkGet('/services/saved/searches', config, credentials, fetchFn, {
120
+ count: '0',
121
+ }));
122
+ let searches = (data.entry ?? []).map((entry) => ({
123
+ name: entry.name ?? '',
124
+ search: entry.content?.search ?? '',
125
+ cronSchedule: entry.content?.cron_schedule ?? null,
126
+ disabled: entry.content?.disabled ?? false,
127
+ triggeredAlertCount: entry.content?.triggered_alert_count ?? 0,
128
+ lastUpdated: entry.updated ?? null,
129
+ }));
130
+ if (filterName) {
131
+ const lower = filterName.toLowerCase();
132
+ searches = searches.filter((s) => s.name.toLowerCase().includes(lower));
133
+ }
134
+ return { savedSearches: searches, count: searches.length };
135
+ };
136
+ const splunkHealth = async (_params, config, credentials, fetchFn) => {
137
+ const data = (await splunkGet('/services/server/health/splunkd', config, credentials, fetchFn));
138
+ const content = data.entry?.[0]?.content;
139
+ const features = content?.features ?? {};
140
+ const featureHealth = Object.entries(features).map(([name, info]) => ({
141
+ name,
142
+ health: info.health ?? 'unknown',
143
+ }));
144
+ return {
145
+ overallHealth: content?.health ?? 'unknown',
146
+ features: featureHealth,
147
+ };
148
+ };
149
+ // --- Pack definition ---
150
+ export const splunkPack = {
151
+ manifest: {
152
+ name: 'splunk',
153
+ type: 'integration',
154
+ version: '0.1.0',
155
+ description: 'Splunk Enterprise — search, indexes, saved searches, and health monitoring',
156
+ requires: { groups: [], files: [], commands: [] },
157
+ probes: [
158
+ {
159
+ name: 'search',
160
+ description: 'Run an SPL search query and return results. Requires a role with "search" capability.',
161
+ capability: 'observe',
162
+ params: {
163
+ query: {
164
+ type: 'string',
165
+ description: 'SPL search query (e.g. "search index=main error | head 10")',
166
+ required: true,
167
+ },
168
+ earliest: {
169
+ type: 'string',
170
+ description: 'Earliest time (default: "-24h")',
171
+ required: false,
172
+ },
173
+ latest: {
174
+ type: 'string',
175
+ description: 'Latest time (default: "now")',
176
+ required: false,
177
+ },
178
+ max_results: {
179
+ type: 'number',
180
+ description: 'Maximum results to return (default: 100)',
181
+ required: false,
182
+ },
183
+ },
184
+ timeout: 60000,
185
+ },
186
+ {
187
+ name: 'indexes',
188
+ description: 'List all indexes with size, event count, and time range',
189
+ capability: 'observe',
190
+ params: {},
191
+ timeout: 15000,
192
+ },
193
+ {
194
+ name: 'saved_searches',
195
+ description: 'List saved searches with schedule and status',
196
+ capability: 'observe',
197
+ params: {
198
+ name: {
199
+ type: 'string',
200
+ description: 'Optional name filter (case-insensitive substring match)',
201
+ required: false,
202
+ },
203
+ },
204
+ timeout: 15000,
205
+ },
206
+ {
207
+ name: 'health',
208
+ description: 'Splunkd health status with per-feature breakdown',
209
+ capability: 'observe',
210
+ params: {},
211
+ timeout: 15000,
212
+ },
213
+ ],
214
+ runbook: {
215
+ category: 'observability',
216
+ probes: ['health', 'indexes'],
217
+ parallel: true,
218
+ },
219
+ },
220
+ handlers: {
221
+ search: splunkSearch,
222
+ indexes: splunkIndexes,
223
+ saved_searches: splunkSavedSearches,
224
+ health: splunkHealth,
225
+ },
226
+ testConnection: async (config, credentials, fetchFn) => {
227
+ try {
228
+ const url = splunkUrl(config.endpoint, '/services/server/info');
229
+ const headers = {
230
+ Accept: 'application/json',
231
+ ...buildAuthHeaders(credentials),
232
+ ...config.headers,
233
+ };
234
+ const res = await fetchFn(url, { headers });
235
+ return res.ok;
236
+ }
237
+ catch {
238
+ return false;
239
+ }
240
+ },
241
+ };
242
+ //# sourceMappingURL=splunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splunk.js","sourceRoot":"","sources":["../../src/integrations/splunk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=splunk.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splunk.test.d.ts","sourceRoot":"","sources":["../../src/integrations/splunk.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,323 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { buildAuthHeaders, splunkGet, splunkPack, splunkPost } from './splunk.js';
3
+ const splunkConfig = {
4
+ endpoint: 'https://splunk.company.com:8089',
5
+ };
6
+ const tokenCreds = {
7
+ packName: 'splunk',
8
+ authMethod: 'bearer_token',
9
+ credentials: { splunkToken: 'my-splunk-token-abc' },
10
+ };
11
+ const basicCreds = {
12
+ packName: 'splunk',
13
+ authMethod: 'api_key',
14
+ credentials: { username: 'sonde_svc', password: 'secret123' },
15
+ };
16
+ const handler = (name) => {
17
+ const h = splunkPack.handlers[name];
18
+ if (!h)
19
+ throw new Error(`Handler ${name} not found`);
20
+ return h;
21
+ };
22
+ function callArgs(fn, index) {
23
+ const args = fn.mock.calls[index];
24
+ if (!args)
25
+ throw new Error(`No call at index ${index}`);
26
+ return args;
27
+ }
28
+ /** Mock a Splunk JSON response */
29
+ function mockSplunkResponse(body, status = 200) {
30
+ return vi.fn().mockResolvedValue(new Response(JSON.stringify(body), {
31
+ status,
32
+ headers: { 'Content-Type': 'application/json' },
33
+ }));
34
+ }
35
+ function mockFetchError(status) {
36
+ return vi.fn().mockResolvedValue(new Response('Error', { status, statusText: 'Error' }));
37
+ }
38
+ describe('splunk pack', () => {
39
+ describe('auth headers', () => {
40
+ it('uses Bearer token for token auth', () => {
41
+ const headers = buildAuthHeaders(tokenCreds);
42
+ expect(headers.Authorization).toBe('Bearer my-splunk-token-abc');
43
+ });
44
+ it('uses Basic auth for username:password', () => {
45
+ const headers = buildAuthHeaders(basicCreds);
46
+ const expected = `Basic ${Buffer.from('sonde_svc:secret123').toString('base64')}`;
47
+ expect(headers.Authorization).toBe(expected);
48
+ });
49
+ it('returns empty headers when credentials are missing', () => {
50
+ const emptyCreds = {
51
+ packName: 'splunk',
52
+ authMethod: 'api_key',
53
+ credentials: {},
54
+ };
55
+ const headers = buildAuthHeaders(emptyCreds);
56
+ expect(headers.Authorization).toBeUndefined();
57
+ });
58
+ });
59
+ describe('splunkGet', () => {
60
+ it('appends output_mode=json to all requests', async () => {
61
+ const fetchFn = mockSplunkResponse({ entry: [] });
62
+ await splunkGet('/services/server/info', splunkConfig, tokenCreds, fetchFn);
63
+ const [url] = callArgs(fetchFn, 0);
64
+ expect(url).toContain('output_mode=json');
65
+ expect(url).toContain('/services/server/info');
66
+ });
67
+ it('throws on non-200 response', async () => {
68
+ const fetchFn = mockFetchError(401);
69
+ await expect(splunkGet('/services/server/info', splunkConfig, tokenCreds, fetchFn)).rejects.toThrow('Splunk API returned 401');
70
+ });
71
+ });
72
+ describe('splunkPost', () => {
73
+ it('sends URL-encoded form data with output_mode=json', async () => {
74
+ const fetchFn = mockSplunkResponse({ sid: 'job-123' });
75
+ await splunkPost('/services/search/v2/jobs', { search: 'index=main | head 10', earliest_time: '-1h' }, splunkConfig, tokenCreds, fetchFn);
76
+ const [url, init] = callArgs(fetchFn, 0);
77
+ expect(url).toContain('output_mode=json');
78
+ expect(init.method).toBe('POST');
79
+ expect(init.headers['Content-Type']).toBe('application/x-www-form-urlencoded');
80
+ const body = init.body;
81
+ expect(body).toContain('search=');
82
+ expect(body).toContain('earliest_time=');
83
+ });
84
+ it('throws on non-200 response', async () => {
85
+ const fetchFn = mockFetchError(403);
86
+ await expect(splunkPost('/services/search/v2/jobs', { search: 'index=main' }, splunkConfig, tokenCreds, fetchFn)).rejects.toThrow('Splunk API returned 403');
87
+ });
88
+ });
89
+ describe('testConnection', () => {
90
+ it('returns true when GET /services/server/info succeeds', async () => {
91
+ const fetchFn = mockSplunkResponse({
92
+ entry: [{ content: { serverName: 'splunk-01', version: '9.1.0' } }],
93
+ });
94
+ const result = await splunkPack.testConnection(splunkConfig, tokenCreds, fetchFn);
95
+ expect(result).toBe(true);
96
+ const [url] = callArgs(fetchFn, 0);
97
+ expect(url).toContain('/services/server/info');
98
+ expect(url).toContain('output_mode=json');
99
+ });
100
+ it('returns false on non-200', async () => {
101
+ const fetchFn = mockFetchError(401);
102
+ const result = await splunkPack.testConnection(splunkConfig, tokenCreds, fetchFn);
103
+ expect(result).toBe(false);
104
+ });
105
+ it('returns false on network error', async () => {
106
+ const fetchFn = vi.fn().mockRejectedValue(new Error('ECONNREFUSED'));
107
+ const result = await splunkPack.testConnection(splunkConfig, tokenCreds, fetchFn);
108
+ expect(result).toBe(false);
109
+ });
110
+ });
111
+ describe('search', () => {
112
+ it('creates a job, polls, and fetches results', async () => {
113
+ let callCount = 0;
114
+ const fetchFn = vi.fn().mockImplementation(() => {
115
+ callCount++;
116
+ if (callCount === 1) {
117
+ // POST create job
118
+ return Promise.resolve(new Response(JSON.stringify({ sid: 'job-abc' }), {
119
+ status: 200,
120
+ headers: { 'Content-Type': 'application/json' },
121
+ }));
122
+ }
123
+ if (callCount === 2) {
124
+ // GET poll — DONE
125
+ return Promise.resolve(new Response(JSON.stringify({
126
+ entry: [{ content: { dispatchState: 'DONE' } }],
127
+ }), { status: 200, headers: { 'Content-Type': 'application/json' } }));
128
+ }
129
+ // GET results
130
+ return Promise.resolve(new Response(JSON.stringify({
131
+ results: [{ _raw: 'error log line 1' }, { _raw: 'error log line 2' }],
132
+ }), { status: 200, headers: { 'Content-Type': 'application/json' } }));
133
+ });
134
+ const result = (await handler('search')({ query: 'search index=main error | head 10', earliest: '-1h', max_results: 50 }, splunkConfig, tokenCreds, fetchFn));
135
+ expect(result.sid).toBe('job-abc');
136
+ expect(result.resultCount).toBe(2);
137
+ expect(result.results).toHaveLength(2);
138
+ expect(result.executionTimeMs).toBeGreaterThanOrEqual(0);
139
+ // Verify POST to v2 API
140
+ const [postUrl, postInit] = callArgs(fetchFn, 0);
141
+ expect(postUrl).toContain('/services/search/v2/jobs');
142
+ expect(postInit.method).toBe('POST');
143
+ expect(postInit.headers['Content-Type']).toBe('application/x-www-form-urlencoded');
144
+ // Verify results fetch includes count param
145
+ const [resultsUrl] = callArgs(fetchFn, 2);
146
+ expect(resultsUrl).toContain('/services/search/v2/jobs/job-abc/results');
147
+ expect(resultsUrl).toContain('count=50');
148
+ });
149
+ it('throws when query is missing', async () => {
150
+ const fetchFn = mockSplunkResponse({});
151
+ await expect(handler('search')({}, splunkConfig, tokenCreds, fetchFn)).rejects.toThrow('query parameter is required');
152
+ });
153
+ it('throws when no sid returned', async () => {
154
+ const fetchFn = mockSplunkResponse({});
155
+ await expect(handler('search')({ query: 'search index=main' }, splunkConfig, tokenCreds, fetchFn)).rejects.toThrow('Splunk did not return a search job ID');
156
+ });
157
+ it('throws when search job fails', async () => {
158
+ let callCount = 0;
159
+ const fetchFn = vi.fn().mockImplementation(() => {
160
+ callCount++;
161
+ if (callCount === 1) {
162
+ return Promise.resolve(new Response(JSON.stringify({ sid: 'job-fail' }), {
163
+ status: 200,
164
+ headers: { 'Content-Type': 'application/json' },
165
+ }));
166
+ }
167
+ return Promise.resolve(new Response(JSON.stringify({ entry: [{ content: { dispatchState: 'FAILED' } }] }), {
168
+ status: 200,
169
+ headers: { 'Content-Type': 'application/json' },
170
+ }));
171
+ });
172
+ await expect(handler('search')({ query: 'search index=main' }, splunkConfig, tokenCreds, fetchFn)).rejects.toThrow('Splunk search job failed');
173
+ });
174
+ });
175
+ describe('indexes', () => {
176
+ it('returns index metadata', async () => {
177
+ const fetchFn = mockSplunkResponse({
178
+ entry: [
179
+ {
180
+ name: 'main',
181
+ content: {
182
+ currentDBSizeMB: 1024,
183
+ totalEventCount: '5000000',
184
+ minTime: '2025-01-01T00:00:00Z',
185
+ maxTime: '2026-02-17T12:00:00Z',
186
+ disabled: false,
187
+ },
188
+ },
189
+ {
190
+ name: '_internal',
191
+ content: {
192
+ currentDBSizeMB: 256,
193
+ totalEventCount: '100000',
194
+ minTime: '2025-06-01T00:00:00Z',
195
+ maxTime: '2026-02-17T12:00:00Z',
196
+ disabled: false,
197
+ },
198
+ },
199
+ ],
200
+ });
201
+ const result = (await handler('indexes')({}, splunkConfig, tokenCreds, fetchFn));
202
+ expect(result.count).toBe(2);
203
+ expect(result.indexes[0]?.name).toBe('main');
204
+ expect(result.indexes[0]?.currentSizeMB).toBe(1024);
205
+ expect(result.indexes[0]?.totalEventCount).toBe('5000000');
206
+ expect(result.indexes[1]?.name).toBe('_internal');
207
+ const [url] = callArgs(fetchFn, 0);
208
+ expect(url).toContain('/services/data/indexes');
209
+ expect(url).toContain('count=0');
210
+ });
211
+ });
212
+ describe('saved_searches', () => {
213
+ it('returns saved searches', async () => {
214
+ const fetchFn = mockSplunkResponse({
215
+ entry: [
216
+ {
217
+ name: 'Error Alerts',
218
+ content: {
219
+ search: 'index=main level=error | stats count by host',
220
+ cron_schedule: '*/5 * * * *',
221
+ disabled: false,
222
+ triggered_alert_count: 42,
223
+ },
224
+ updated: '2026-02-17T10:00:00Z',
225
+ },
226
+ {
227
+ name: 'Daily Summary',
228
+ content: {
229
+ search: 'index=main | stats count',
230
+ cron_schedule: '0 0 * * *',
231
+ disabled: true,
232
+ triggered_alert_count: 0,
233
+ },
234
+ updated: '2026-01-01T00:00:00Z',
235
+ },
236
+ ],
237
+ });
238
+ const result = (await handler('saved_searches')({}, splunkConfig, tokenCreds, fetchFn));
239
+ expect(result.count).toBe(2);
240
+ expect(result.savedSearches[0]?.name).toBe('Error Alerts');
241
+ expect(result.savedSearches[0]?.cronSchedule).toBe('*/5 * * * *');
242
+ expect(result.savedSearches[1]?.disabled).toBe(true);
243
+ });
244
+ it('filters by name when provided', async () => {
245
+ const fetchFn = mockSplunkResponse({
246
+ entry: [
247
+ {
248
+ name: 'Error Alerts',
249
+ content: { search: 'index=main level=error', disabled: false },
250
+ },
251
+ {
252
+ name: 'Daily Summary',
253
+ content: { search: 'index=main | stats count', disabled: false },
254
+ },
255
+ ],
256
+ });
257
+ const result = (await handler('saved_searches')({ name: 'error' }, splunkConfig, tokenCreds, fetchFn));
258
+ expect(result.count).toBe(1);
259
+ expect(result.savedSearches[0]?.name).toBe('Error Alerts');
260
+ });
261
+ });
262
+ describe('health', () => {
263
+ it('returns overall health and per-feature breakdown', async () => {
264
+ const fetchFn = mockSplunkResponse({
265
+ entry: [
266
+ {
267
+ content: {
268
+ health: 'green',
269
+ features: {
270
+ 'File Monitor Input': { health: 'green' },
271
+ Indexer: { health: 'green' },
272
+ 'Search Scheduler': { health: 'yellow' },
273
+ },
274
+ },
275
+ },
276
+ ],
277
+ });
278
+ const result = (await handler('health')({}, splunkConfig, tokenCreds, fetchFn));
279
+ expect(result.overallHealth).toBe('green');
280
+ expect(result.features).toHaveLength(3);
281
+ const scheduler = result.features.find((f) => f.name === 'Search Scheduler');
282
+ expect(scheduler?.health).toBe('yellow');
283
+ });
284
+ it('handles missing features gracefully', async () => {
285
+ const fetchFn = mockSplunkResponse({ entry: [{ content: { health: 'red' } }] });
286
+ const result = (await handler('health')({}, splunkConfig, tokenCreds, fetchFn));
287
+ expect(result.overallHealth).toBe('red');
288
+ expect(result.features).toHaveLength(0);
289
+ });
290
+ });
291
+ describe('manifest', () => {
292
+ it('has correct name and probe count', () => {
293
+ expect(splunkPack.manifest.name).toBe('splunk');
294
+ expect(splunkPack.manifest.probes).toHaveLength(4);
295
+ });
296
+ it('all handlers match manifest probes', () => {
297
+ const probeNames = splunkPack.manifest.probes.map((p) => p.name);
298
+ const handlerNames = Object.keys(splunkPack.handlers);
299
+ expect(handlerNames.sort()).toEqual(probeNames.sort());
300
+ });
301
+ it('has correct timeouts (60s for search, 15s for others)', () => {
302
+ const probeMap = new Map(splunkPack.manifest.probes.map((p) => [p.name, p.timeout]));
303
+ expect(probeMap.get('search')).toBe(60000);
304
+ expect(probeMap.get('indexes')).toBe(15000);
305
+ expect(probeMap.get('saved_searches')).toBe(15000);
306
+ expect(probeMap.get('health')).toBe(15000);
307
+ });
308
+ it('has observability runbook', () => {
309
+ expect(splunkPack.manifest.runbook).toEqual({
310
+ category: 'observability',
311
+ probes: ['health', 'indexes'],
312
+ parallel: true,
313
+ });
314
+ });
315
+ });
316
+ describe('error handling', () => {
317
+ it('throws on non-200 API response for probes', async () => {
318
+ const fetchFn = mockFetchError(403);
319
+ await expect(handler('indexes')({}, splunkConfig, tokenCreds, fetchFn)).rejects.toThrow('Splunk API returned 403');
320
+ });
321
+ });
322
+ });
323
+ //# sourceMappingURL=splunk.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splunk.test.js","sourceRoot":"","sources":["../../src/integrations/splunk.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Pack } from '../types.js';
2
+ export declare const mysqlPack: Pack;
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mysql/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAMxC,eAAO,MAAM,SAAS,EAAE,IAOvB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { mysqlManifest } from './manifest.js';
2
+ import { databasesList } from './probes/databases-list.js';
3
+ import { processlist } from './probes/processlist.js';
4
+ import { status } from './probes/status.js';
5
+ export const mysqlPack = {
6
+ manifest: mysqlManifest,
7
+ handlers: {
8
+ 'mysql.databases.list': databasesList,
9
+ 'mysql.processlist': processlist,
10
+ 'mysql.status': status,
11
+ },
12
+ };
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mysql/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,CAAC,MAAM,SAAS,GAAS;IAC7B,QAAQ,EAAE,aAAa;IACvB,QAAQ,EAAE;QACR,sBAAsB,EAAE,aAAa;QACrC,mBAAmB,EAAE,WAAW;QAChC,cAAc,EAAE,MAAM;KACvB;CACF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PackManifest } from '@sonde/shared';
2
+ export declare const mysqlManifest: PackManifest;
3
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/mysql/manifest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,eAAO,MAAM,aAAa,EAAE,YAmE3B,CAAC"}