@ebowwa/pkg-ops 0.1.9

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 (469) hide show
  1. package/README.md +108 -0
  2. package/dist/bridge.d.ts +149 -0
  3. package/dist/bridge.d.ts.map +1 -0
  4. package/dist/config.d.ts +92 -0
  5. package/dist/config.d.ts.map +1 -0
  6. package/dist/health-server.d.ts +100 -0
  7. package/dist/health-server.d.ts.map +1 -0
  8. package/dist/index.d.ts +25 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/index.js +64 -0
  11. package/dist/index.js.map +16 -0
  12. package/dist/service-manager.d.ts +115 -0
  13. package/dist/service-manager.d.ts.map +1 -0
  14. package/package.json +61 -0
  15. package/rust/Cargo.lock +577 -0
  16. package/rust/Cargo.toml +21 -0
  17. package/rust/src/lib.rs +799 -0
  18. package/rust/src/main.rs +344 -0
  19. package/rust/src/protocol.rs +155 -0
  20. package/rust/target/.rustc_info.json +1 -0
  21. package/rust/target/CACHEDIR.TAG +3 -0
  22. package/rust/target/release/.cargo-lock +0 -0
  23. package/rust/target/release/.fingerprint/autocfg-1b3bd8a7b74bd5b4/dep-lib-autocfg +0 -0
  24. package/rust/target/release/.fingerprint/autocfg-1b3bd8a7b74bd5b4/invoked.timestamp +1 -0
  25. package/rust/target/release/.fingerprint/autocfg-1b3bd8a7b74bd5b4/lib-autocfg +1 -0
  26. package/rust/target/release/.fingerprint/autocfg-1b3bd8a7b74bd5b4/lib-autocfg.json +1 -0
  27. package/rust/target/release/.fingerprint/block-buffer-cf3be8244cc78328/dep-lib-block_buffer +0 -0
  28. package/rust/target/release/.fingerprint/block-buffer-cf3be8244cc78328/invoked.timestamp +1 -0
  29. package/rust/target/release/.fingerprint/block-buffer-cf3be8244cc78328/lib-block_buffer +1 -0
  30. package/rust/target/release/.fingerprint/block-buffer-cf3be8244cc78328/lib-block_buffer.json +1 -0
  31. package/rust/target/release/.fingerprint/cfg-if-e24d4f7b470ac1f7/dep-lib-cfg_if +0 -0
  32. package/rust/target/release/.fingerprint/cfg-if-e24d4f7b470ac1f7/invoked.timestamp +1 -0
  33. package/rust/target/release/.fingerprint/cfg-if-e24d4f7b470ac1f7/lib-cfg_if +1 -0
  34. package/rust/target/release/.fingerprint/cfg-if-e24d4f7b470ac1f7/lib-cfg_if.json +1 -0
  35. package/rust/target/release/.fingerprint/chrono-c2c1d826849da6b8/dep-lib-chrono +0 -0
  36. package/rust/target/release/.fingerprint/chrono-c2c1d826849da6b8/invoked.timestamp +1 -0
  37. package/rust/target/release/.fingerprint/chrono-c2c1d826849da6b8/lib-chrono +1 -0
  38. package/rust/target/release/.fingerprint/chrono-c2c1d826849da6b8/lib-chrono.json +1 -0
  39. package/rust/target/release/.fingerprint/core-foundation-sys-bdb199b1a618a85a/dep-lib-core_foundation_sys +0 -0
  40. package/rust/target/release/.fingerprint/core-foundation-sys-bdb199b1a618a85a/invoked.timestamp +1 -0
  41. package/rust/target/release/.fingerprint/core-foundation-sys-bdb199b1a618a85a/lib-core_foundation_sys +1 -0
  42. package/rust/target/release/.fingerprint/core-foundation-sys-bdb199b1a618a85a/lib-core_foundation_sys.json +1 -0
  43. package/rust/target/release/.fingerprint/cpufeatures-044997a43e932cd2/dep-lib-cpufeatures +0 -0
  44. package/rust/target/release/.fingerprint/cpufeatures-044997a43e932cd2/invoked.timestamp +1 -0
  45. package/rust/target/release/.fingerprint/cpufeatures-044997a43e932cd2/lib-cpufeatures +1 -0
  46. package/rust/target/release/.fingerprint/cpufeatures-044997a43e932cd2/lib-cpufeatures.json +1 -0
  47. package/rust/target/release/.fingerprint/crypto-common-ff4fa5d0a5e0455d/dep-lib-crypto_common +0 -0
  48. package/rust/target/release/.fingerprint/crypto-common-ff4fa5d0a5e0455d/invoked.timestamp +1 -0
  49. package/rust/target/release/.fingerprint/crypto-common-ff4fa5d0a5e0455d/lib-crypto_common +1 -0
  50. package/rust/target/release/.fingerprint/crypto-common-ff4fa5d0a5e0455d/lib-crypto_common.json +1 -0
  51. package/rust/target/release/.fingerprint/digest-6037e23ec7b0997e/dep-lib-digest +0 -0
  52. package/rust/target/release/.fingerprint/digest-6037e23ec7b0997e/invoked.timestamp +1 -0
  53. package/rust/target/release/.fingerprint/digest-6037e23ec7b0997e/lib-digest +1 -0
  54. package/rust/target/release/.fingerprint/digest-6037e23ec7b0997e/lib-digest.json +1 -0
  55. package/rust/target/release/.fingerprint/generic-array-6939b76bf342e446/dep-lib-generic_array +0 -0
  56. package/rust/target/release/.fingerprint/generic-array-6939b76bf342e446/invoked.timestamp +1 -0
  57. package/rust/target/release/.fingerprint/generic-array-6939b76bf342e446/lib-generic_array +1 -0
  58. package/rust/target/release/.fingerprint/generic-array-6939b76bf342e446/lib-generic_array.json +1 -0
  59. package/rust/target/release/.fingerprint/generic-array-8ce40917f76412b1/build-script-build-script-build +1 -0
  60. package/rust/target/release/.fingerprint/generic-array-8ce40917f76412b1/build-script-build-script-build.json +1 -0
  61. package/rust/target/release/.fingerprint/generic-array-8ce40917f76412b1/dep-build-script-build-script-build +0 -0
  62. package/rust/target/release/.fingerprint/generic-array-8ce40917f76412b1/invoked.timestamp +1 -0
  63. package/rust/target/release/.fingerprint/generic-array-e69e3a44765f6d58/run-build-script-build-script-build +1 -0
  64. package/rust/target/release/.fingerprint/generic-array-e69e3a44765f6d58/run-build-script-build-script-build.json +1 -0
  65. package/rust/target/release/.fingerprint/iana-time-zone-7907cd9c1810cf88/dep-lib-iana_time_zone +0 -0
  66. package/rust/target/release/.fingerprint/iana-time-zone-7907cd9c1810cf88/invoked.timestamp +1 -0
  67. package/rust/target/release/.fingerprint/iana-time-zone-7907cd9c1810cf88/lib-iana_time_zone +1 -0
  68. package/rust/target/release/.fingerprint/iana-time-zone-7907cd9c1810cf88/lib-iana_time_zone.json +1 -0
  69. package/rust/target/release/.fingerprint/itoa-a9b94ec9a7564538/dep-lib-itoa +0 -0
  70. package/rust/target/release/.fingerprint/itoa-a9b94ec9a7564538/invoked.timestamp +1 -0
  71. package/rust/target/release/.fingerprint/itoa-a9b94ec9a7564538/lib-itoa +1 -0
  72. package/rust/target/release/.fingerprint/itoa-a9b94ec9a7564538/lib-itoa.json +1 -0
  73. package/rust/target/release/.fingerprint/lazy_static-79337840520ffaab/dep-lib-lazy_static +0 -0
  74. package/rust/target/release/.fingerprint/lazy_static-79337840520ffaab/invoked.timestamp +1 -0
  75. package/rust/target/release/.fingerprint/lazy_static-79337840520ffaab/lib-lazy_static +1 -0
  76. package/rust/target/release/.fingerprint/lazy_static-79337840520ffaab/lib-lazy_static.json +1 -0
  77. package/rust/target/release/.fingerprint/libc-1e68faf72d2d6d6a/build-script-build-script-build +1 -0
  78. package/rust/target/release/.fingerprint/libc-1e68faf72d2d6d6a/build-script-build-script-build.json +1 -0
  79. package/rust/target/release/.fingerprint/libc-1e68faf72d2d6d6a/dep-build-script-build-script-build +0 -0
  80. package/rust/target/release/.fingerprint/libc-1e68faf72d2d6d6a/invoked.timestamp +1 -0
  81. package/rust/target/release/.fingerprint/libc-7781f1d3692ef952/run-build-script-build-script-build +1 -0
  82. package/rust/target/release/.fingerprint/libc-7781f1d3692ef952/run-build-script-build-script-build.json +1 -0
  83. package/rust/target/release/.fingerprint/libc-ab405543531da832/dep-lib-libc +0 -0
  84. package/rust/target/release/.fingerprint/libc-ab405543531da832/invoked.timestamp +1 -0
  85. package/rust/target/release/.fingerprint/libc-ab405543531da832/lib-libc +1 -0
  86. package/rust/target/release/.fingerprint/libc-ab405543531da832/lib-libc.json +1 -0
  87. package/rust/target/release/.fingerprint/log-c93c9501d50fd117/dep-lib-log +0 -0
  88. package/rust/target/release/.fingerprint/log-c93c9501d50fd117/invoked.timestamp +1 -0
  89. package/rust/target/release/.fingerprint/log-c93c9501d50fd117/lib-log +1 -0
  90. package/rust/target/release/.fingerprint/log-c93c9501d50fd117/lib-log.json +1 -0
  91. package/rust/target/release/.fingerprint/matchers-aa7b66eaa02449a5/dep-lib-matchers +0 -0
  92. package/rust/target/release/.fingerprint/matchers-aa7b66eaa02449a5/invoked.timestamp +1 -0
  93. package/rust/target/release/.fingerprint/matchers-aa7b66eaa02449a5/lib-matchers +1 -0
  94. package/rust/target/release/.fingerprint/matchers-aa7b66eaa02449a5/lib-matchers.json +1 -0
  95. package/rust/target/release/.fingerprint/memchr-006163bba97af52f/dep-lib-memchr +0 -0
  96. package/rust/target/release/.fingerprint/memchr-006163bba97af52f/invoked.timestamp +1 -0
  97. package/rust/target/release/.fingerprint/memchr-006163bba97af52f/lib-memchr +1 -0
  98. package/rust/target/release/.fingerprint/memchr-006163bba97af52f/lib-memchr.json +1 -0
  99. package/rust/target/release/.fingerprint/nu-ansi-term-56ab27c2fee1c03f/dep-lib-nu_ansi_term +0 -0
  100. package/rust/target/release/.fingerprint/nu-ansi-term-56ab27c2fee1c03f/invoked.timestamp +1 -0
  101. package/rust/target/release/.fingerprint/nu-ansi-term-56ab27c2fee1c03f/lib-nu_ansi_term +1 -0
  102. package/rust/target/release/.fingerprint/nu-ansi-term-56ab27c2fee1c03f/lib-nu_ansi_term.json +1 -0
  103. package/rust/target/release/.fingerprint/num-traits-960d689d96a427e4/run-build-script-build-script-build +1 -0
  104. package/rust/target/release/.fingerprint/num-traits-960d689d96a427e4/run-build-script-build-script-build.json +1 -0
  105. package/rust/target/release/.fingerprint/num-traits-a45e3ec48ef9afe7/dep-lib-num_traits +0 -0
  106. package/rust/target/release/.fingerprint/num-traits-a45e3ec48ef9afe7/invoked.timestamp +1 -0
  107. package/rust/target/release/.fingerprint/num-traits-a45e3ec48ef9afe7/lib-num_traits +1 -0
  108. package/rust/target/release/.fingerprint/num-traits-a45e3ec48ef9afe7/lib-num_traits.json +1 -0
  109. package/rust/target/release/.fingerprint/num-traits-e0dbc71c6a4b5721/build-script-build-script-build +1 -0
  110. package/rust/target/release/.fingerprint/num-traits-e0dbc71c6a4b5721/build-script-build-script-build.json +1 -0
  111. package/rust/target/release/.fingerprint/num-traits-e0dbc71c6a4b5721/dep-build-script-build-script-build +0 -0
  112. package/rust/target/release/.fingerprint/num-traits-e0dbc71c6a4b5721/invoked.timestamp +1 -0
  113. package/rust/target/release/.fingerprint/once_cell-1ba5d4df66429103/dep-lib-once_cell +0 -0
  114. package/rust/target/release/.fingerprint/once_cell-1ba5d4df66429103/invoked.timestamp +1 -0
  115. package/rust/target/release/.fingerprint/once_cell-1ba5d4df66429103/lib-once_cell +1 -0
  116. package/rust/target/release/.fingerprint/once_cell-1ba5d4df66429103/lib-once_cell.json +1 -0
  117. package/rust/target/release/.fingerprint/pin-project-lite-b67f60134987a063/dep-lib-pin_project_lite +0 -0
  118. package/rust/target/release/.fingerprint/pin-project-lite-b67f60134987a063/invoked.timestamp +1 -0
  119. package/rust/target/release/.fingerprint/pin-project-lite-b67f60134987a063/lib-pin_project_lite +1 -0
  120. package/rust/target/release/.fingerprint/pin-project-lite-b67f60134987a063/lib-pin_project_lite.json +1 -0
  121. package/rust/target/release/.fingerprint/proc-macro2-676678c45d7cb9a8/run-build-script-build-script-build +1 -0
  122. package/rust/target/release/.fingerprint/proc-macro2-676678c45d7cb9a8/run-build-script-build-script-build.json +1 -0
  123. package/rust/target/release/.fingerprint/proc-macro2-c5165b0726856761/dep-lib-proc_macro2 +0 -0
  124. package/rust/target/release/.fingerprint/proc-macro2-c5165b0726856761/invoked.timestamp +1 -0
  125. package/rust/target/release/.fingerprint/proc-macro2-c5165b0726856761/lib-proc_macro2 +1 -0
  126. package/rust/target/release/.fingerprint/proc-macro2-c5165b0726856761/lib-proc_macro2.json +1 -0
  127. package/rust/target/release/.fingerprint/proc-macro2-c72a330c78f30f59/build-script-build-script-build +1 -0
  128. package/rust/target/release/.fingerprint/proc-macro2-c72a330c78f30f59/build-script-build-script-build.json +1 -0
  129. package/rust/target/release/.fingerprint/proc-macro2-c72a330c78f30f59/dep-build-script-build-script-build +0 -0
  130. package/rust/target/release/.fingerprint/proc-macro2-c72a330c78f30f59/invoked.timestamp +1 -0
  131. package/rust/target/release/.fingerprint/quote-0c85187123c64982/build-script-build-script-build +1 -0
  132. package/rust/target/release/.fingerprint/quote-0c85187123c64982/build-script-build-script-build.json +1 -0
  133. package/rust/target/release/.fingerprint/quote-0c85187123c64982/dep-build-script-build-script-build +0 -0
  134. package/rust/target/release/.fingerprint/quote-0c85187123c64982/invoked.timestamp +1 -0
  135. package/rust/target/release/.fingerprint/quote-8e84519b0b657fd1/run-build-script-build-script-build +1 -0
  136. package/rust/target/release/.fingerprint/quote-8e84519b0b657fd1/run-build-script-build-script-build.json +1 -0
  137. package/rust/target/release/.fingerprint/quote-93e086ea3561ec28/dep-lib-quote +0 -0
  138. package/rust/target/release/.fingerprint/quote-93e086ea3561ec28/invoked.timestamp +1 -0
  139. package/rust/target/release/.fingerprint/quote-93e086ea3561ec28/lib-quote +1 -0
  140. package/rust/target/release/.fingerprint/quote-93e086ea3561ec28/lib-quote.json +1 -0
  141. package/rust/target/release/.fingerprint/regex-automata-f8d8efe517e98888/dep-lib-regex_automata +0 -0
  142. package/rust/target/release/.fingerprint/regex-automata-f8d8efe517e98888/invoked.timestamp +1 -0
  143. package/rust/target/release/.fingerprint/regex-automata-f8d8efe517e98888/lib-regex_automata +1 -0
  144. package/rust/target/release/.fingerprint/regex-automata-f8d8efe517e98888/lib-regex_automata.json +1 -0
  145. package/rust/target/release/.fingerprint/regex-syntax-eeca859592595703/dep-lib-regex_syntax +0 -0
  146. package/rust/target/release/.fingerprint/regex-syntax-eeca859592595703/invoked.timestamp +1 -0
  147. package/rust/target/release/.fingerprint/regex-syntax-eeca859592595703/lib-regex_syntax +1 -0
  148. package/rust/target/release/.fingerprint/regex-syntax-eeca859592595703/lib-regex_syntax.json +1 -0
  149. package/rust/target/release/.fingerprint/serde-a5bb7470cea0daed/build-script-build-script-build +1 -0
  150. package/rust/target/release/.fingerprint/serde-a5bb7470cea0daed/build-script-build-script-build.json +1 -0
  151. package/rust/target/release/.fingerprint/serde-a5bb7470cea0daed/dep-build-script-build-script-build +0 -0
  152. package/rust/target/release/.fingerprint/serde-a5bb7470cea0daed/invoked.timestamp +1 -0
  153. package/rust/target/release/.fingerprint/serde-ab5bca82c15e72e0/run-build-script-build-script-build +1 -0
  154. package/rust/target/release/.fingerprint/serde-ab5bca82c15e72e0/run-build-script-build-script-build.json +1 -0
  155. package/rust/target/release/.fingerprint/serde-e58bd660ffca77fb/dep-lib-serde +0 -0
  156. package/rust/target/release/.fingerprint/serde-e58bd660ffca77fb/invoked.timestamp +1 -0
  157. package/rust/target/release/.fingerprint/serde-e58bd660ffca77fb/lib-serde +1 -0
  158. package/rust/target/release/.fingerprint/serde-e58bd660ffca77fb/lib-serde.json +1 -0
  159. package/rust/target/release/.fingerprint/serde_core-9ebabaac0dd9657b/run-build-script-build-script-build +1 -0
  160. package/rust/target/release/.fingerprint/serde_core-9ebabaac0dd9657b/run-build-script-build-script-build.json +1 -0
  161. package/rust/target/release/.fingerprint/serde_core-bcf1f7226267a515/dep-lib-serde_core +0 -0
  162. package/rust/target/release/.fingerprint/serde_core-bcf1f7226267a515/invoked.timestamp +1 -0
  163. package/rust/target/release/.fingerprint/serde_core-bcf1f7226267a515/lib-serde_core +1 -0
  164. package/rust/target/release/.fingerprint/serde_core-bcf1f7226267a515/lib-serde_core.json +1 -0
  165. package/rust/target/release/.fingerprint/serde_core-f6e34062ef5ef617/build-script-build-script-build +1 -0
  166. package/rust/target/release/.fingerprint/serde_core-f6e34062ef5ef617/build-script-build-script-build.json +1 -0
  167. package/rust/target/release/.fingerprint/serde_core-f6e34062ef5ef617/dep-build-script-build-script-build +0 -0
  168. package/rust/target/release/.fingerprint/serde_core-f6e34062ef5ef617/invoked.timestamp +1 -0
  169. package/rust/target/release/.fingerprint/serde_derive-739fe6b99d6b7650/dep-lib-serde_derive +0 -0
  170. package/rust/target/release/.fingerprint/serde_derive-739fe6b99d6b7650/invoked.timestamp +1 -0
  171. package/rust/target/release/.fingerprint/serde_derive-739fe6b99d6b7650/lib-serde_derive +1 -0
  172. package/rust/target/release/.fingerprint/serde_derive-739fe6b99d6b7650/lib-serde_derive.json +1 -0
  173. package/rust/target/release/.fingerprint/serde_json-b567bd1bd6d9b444/build-script-build-script-build +1 -0
  174. package/rust/target/release/.fingerprint/serde_json-b567bd1bd6d9b444/build-script-build-script-build.json +1 -0
  175. package/rust/target/release/.fingerprint/serde_json-b567bd1bd6d9b444/dep-build-script-build-script-build +0 -0
  176. package/rust/target/release/.fingerprint/serde_json-b567bd1bd6d9b444/invoked.timestamp +1 -0
  177. package/rust/target/release/.fingerprint/serde_json-c2477e5e18fc5e07/dep-lib-serde_json +0 -0
  178. package/rust/target/release/.fingerprint/serde_json-c2477e5e18fc5e07/invoked.timestamp +1 -0
  179. package/rust/target/release/.fingerprint/serde_json-c2477e5e18fc5e07/lib-serde_json +1 -0
  180. package/rust/target/release/.fingerprint/serde_json-c2477e5e18fc5e07/lib-serde_json.json +1 -0
  181. package/rust/target/release/.fingerprint/serde_json-c2d2dc29d8c706f7/run-build-script-build-script-build +1 -0
  182. package/rust/target/release/.fingerprint/serde_json-c2d2dc29d8c706f7/run-build-script-build-script-build.json +1 -0
  183. package/rust/target/release/.fingerprint/sha2-c490257262e4006f/dep-lib-sha2 +0 -0
  184. package/rust/target/release/.fingerprint/sha2-c490257262e4006f/invoked.timestamp +1 -0
  185. package/rust/target/release/.fingerprint/sha2-c490257262e4006f/lib-sha2 +1 -0
  186. package/rust/target/release/.fingerprint/sha2-c490257262e4006f/lib-sha2.json +1 -0
  187. package/rust/target/release/.fingerprint/sharded-slab-a9b081fca5df5776/dep-lib-sharded_slab +0 -0
  188. package/rust/target/release/.fingerprint/sharded-slab-a9b081fca5df5776/invoked.timestamp +1 -0
  189. package/rust/target/release/.fingerprint/sharded-slab-a9b081fca5df5776/lib-sharded_slab +1 -0
  190. package/rust/target/release/.fingerprint/sharded-slab-a9b081fca5df5776/lib-sharded_slab.json +1 -0
  191. package/rust/target/release/.fingerprint/smallvec-c80f5e02fc44f75f/dep-lib-smallvec +0 -0
  192. package/rust/target/release/.fingerprint/smallvec-c80f5e02fc44f75f/invoked.timestamp +1 -0
  193. package/rust/target/release/.fingerprint/smallvec-c80f5e02fc44f75f/lib-smallvec +1 -0
  194. package/rust/target/release/.fingerprint/smallvec-c80f5e02fc44f75f/lib-smallvec.json +1 -0
  195. package/rust/target/release/.fingerprint/syn-e3c4fb9c9765d69d/dep-lib-syn +0 -0
  196. package/rust/target/release/.fingerprint/syn-e3c4fb9c9765d69d/invoked.timestamp +1 -0
  197. package/rust/target/release/.fingerprint/syn-e3c4fb9c9765d69d/lib-syn +1 -0
  198. package/rust/target/release/.fingerprint/syn-e3c4fb9c9765d69d/lib-syn.json +1 -0
  199. package/rust/target/release/.fingerprint/thread_local-36b9b6c1f23ac9ba/dep-lib-thread_local +0 -0
  200. package/rust/target/release/.fingerprint/thread_local-36b9b6c1f23ac9ba/invoked.timestamp +1 -0
  201. package/rust/target/release/.fingerprint/thread_local-36b9b6c1f23ac9ba/lib-thread_local +1 -0
  202. package/rust/target/release/.fingerprint/thread_local-36b9b6c1f23ac9ba/lib-thread_local.json +1 -0
  203. package/rust/target/release/.fingerprint/tracing-245af3c71ea35ecd/dep-lib-tracing +0 -0
  204. package/rust/target/release/.fingerprint/tracing-245af3c71ea35ecd/invoked.timestamp +1 -0
  205. package/rust/target/release/.fingerprint/tracing-245af3c71ea35ecd/lib-tracing +1 -0
  206. package/rust/target/release/.fingerprint/tracing-245af3c71ea35ecd/lib-tracing.json +1 -0
  207. package/rust/target/release/.fingerprint/tracing-attributes-4b033b2e5598485c/dep-lib-tracing_attributes +0 -0
  208. package/rust/target/release/.fingerprint/tracing-attributes-4b033b2e5598485c/invoked.timestamp +1 -0
  209. package/rust/target/release/.fingerprint/tracing-attributes-4b033b2e5598485c/lib-tracing_attributes +1 -0
  210. package/rust/target/release/.fingerprint/tracing-attributes-4b033b2e5598485c/lib-tracing_attributes.json +1 -0
  211. package/rust/target/release/.fingerprint/tracing-core-251b2d04fd4b7c92/dep-lib-tracing_core +0 -0
  212. package/rust/target/release/.fingerprint/tracing-core-251b2d04fd4b7c92/invoked.timestamp +1 -0
  213. package/rust/target/release/.fingerprint/tracing-core-251b2d04fd4b7c92/lib-tracing_core +1 -0
  214. package/rust/target/release/.fingerprint/tracing-core-251b2d04fd4b7c92/lib-tracing_core.json +1 -0
  215. package/rust/target/release/.fingerprint/tracing-log-33fc70c9a47f5b59/dep-lib-tracing_log +0 -0
  216. package/rust/target/release/.fingerprint/tracing-log-33fc70c9a47f5b59/invoked.timestamp +1 -0
  217. package/rust/target/release/.fingerprint/tracing-log-33fc70c9a47f5b59/lib-tracing_log +1 -0
  218. package/rust/target/release/.fingerprint/tracing-log-33fc70c9a47f5b59/lib-tracing_log.json +1 -0
  219. package/rust/target/release/.fingerprint/tracing-subscriber-bde0d5b2c127b5ce/dep-lib-tracing_subscriber +0 -0
  220. package/rust/target/release/.fingerprint/tracing-subscriber-bde0d5b2c127b5ce/invoked.timestamp +1 -0
  221. package/rust/target/release/.fingerprint/tracing-subscriber-bde0d5b2c127b5ce/lib-tracing_subscriber +1 -0
  222. package/rust/target/release/.fingerprint/tracing-subscriber-bde0d5b2c127b5ce/lib-tracing_subscriber.json +1 -0
  223. package/rust/target/release/.fingerprint/typenum-3cdc48836e5238cf/dep-lib-typenum +0 -0
  224. package/rust/target/release/.fingerprint/typenum-3cdc48836e5238cf/invoked.timestamp +1 -0
  225. package/rust/target/release/.fingerprint/typenum-3cdc48836e5238cf/lib-typenum +1 -0
  226. package/rust/target/release/.fingerprint/typenum-3cdc48836e5238cf/lib-typenum.json +1 -0
  227. package/rust/target/release/.fingerprint/typenum-a51a68ea7cdca0a3/run-build-script-build-script-build +1 -0
  228. package/rust/target/release/.fingerprint/typenum-a51a68ea7cdca0a3/run-build-script-build-script-build.json +1 -0
  229. package/rust/target/release/.fingerprint/typenum-be711a78e8981f2a/build-script-build-script-build +1 -0
  230. package/rust/target/release/.fingerprint/typenum-be711a78e8981f2a/build-script-build-script-build.json +1 -0
  231. package/rust/target/release/.fingerprint/typenum-be711a78e8981f2a/dep-build-script-build-script-build +0 -0
  232. package/rust/target/release/.fingerprint/typenum-be711a78e8981f2a/invoked.timestamp +1 -0
  233. package/rust/target/release/.fingerprint/unicode-ident-b6ef9a2188f165a7/dep-lib-unicode_ident +0 -0
  234. package/rust/target/release/.fingerprint/unicode-ident-b6ef9a2188f165a7/invoked.timestamp +1 -0
  235. package/rust/target/release/.fingerprint/unicode-ident-b6ef9a2188f165a7/lib-unicode_ident +1 -0
  236. package/rust/target/release/.fingerprint/unicode-ident-b6ef9a2188f165a7/lib-unicode_ident.json +1 -0
  237. package/rust/target/release/.fingerprint/version_check-8de6a4a01730f3fc/dep-lib-version_check +0 -0
  238. package/rust/target/release/.fingerprint/version_check-8de6a4a01730f3fc/invoked.timestamp +1 -0
  239. package/rust/target/release/.fingerprint/version_check-8de6a4a01730f3fc/lib-version_check +1 -0
  240. package/rust/target/release/.fingerprint/version_check-8de6a4a01730f3fc/lib-version_check.json +1 -0
  241. package/rust/target/release/.fingerprint/vps-manager-core-32881497d3c7a1d5/dep-lib-vps_manager_core +0 -0
  242. package/rust/target/release/.fingerprint/vps-manager-core-32881497d3c7a1d5/invoked.timestamp +1 -0
  243. package/rust/target/release/.fingerprint/vps-manager-core-32881497d3c7a1d5/lib-vps_manager_core +1 -0
  244. package/rust/target/release/.fingerprint/vps-manager-core-32881497d3c7a1d5/lib-vps_manager_core.json +1 -0
  245. package/rust/target/release/.fingerprint/vps-manager-core-52dac2e61aad8f4b/bin-vps-manager-core +1 -0
  246. package/rust/target/release/.fingerprint/vps-manager-core-52dac2e61aad8f4b/bin-vps-manager-core.json +1 -0
  247. package/rust/target/release/.fingerprint/vps-manager-core-52dac2e61aad8f4b/dep-bin-vps-manager-core +0 -0
  248. package/rust/target/release/.fingerprint/vps-manager-core-52dac2e61aad8f4b/invoked.timestamp +1 -0
  249. package/rust/target/release/.fingerprint/zmij-4431e0d331234992/dep-lib-zmij +0 -0
  250. package/rust/target/release/.fingerprint/zmij-4431e0d331234992/invoked.timestamp +1 -0
  251. package/rust/target/release/.fingerprint/zmij-4431e0d331234992/lib-zmij +1 -0
  252. package/rust/target/release/.fingerprint/zmij-4431e0d331234992/lib-zmij.json +1 -0
  253. package/rust/target/release/.fingerprint/zmij-7f6b81acea9a20e3/run-build-script-build-script-build +1 -0
  254. package/rust/target/release/.fingerprint/zmij-7f6b81acea9a20e3/run-build-script-build-script-build.json +1 -0
  255. package/rust/target/release/.fingerprint/zmij-bceeb0e6919120f9/build-script-build-script-build +1 -0
  256. package/rust/target/release/.fingerprint/zmij-bceeb0e6919120f9/build-script-build-script-build.json +1 -0
  257. package/rust/target/release/.fingerprint/zmij-bceeb0e6919120f9/dep-build-script-build-script-build +0 -0
  258. package/rust/target/release/.fingerprint/zmij-bceeb0e6919120f9/invoked.timestamp +1 -0
  259. package/rust/target/release/build/generic-array-8ce40917f76412b1/build-script-build +0 -0
  260. package/rust/target/release/build/generic-array-8ce40917f76412b1/build_script_build-8ce40917f76412b1 +0 -0
  261. package/rust/target/release/build/generic-array-8ce40917f76412b1/build_script_build-8ce40917f76412b1.d +5 -0
  262. package/rust/target/release/build/generic-array-e69e3a44765f6d58/invoked.timestamp +1 -0
  263. package/rust/target/release/build/generic-array-e69e3a44765f6d58/output +1 -0
  264. package/rust/target/release/build/generic-array-e69e3a44765f6d58/root-output +1 -0
  265. package/rust/target/release/build/generic-array-e69e3a44765f6d58/stderr +0 -0
  266. package/rust/target/release/build/libc-1e68faf72d2d6d6a/build-script-build +0 -0
  267. package/rust/target/release/build/libc-1e68faf72d2d6d6a/build_script_build-1e68faf72d2d6d6a +0 -0
  268. package/rust/target/release/build/libc-1e68faf72d2d6d6a/build_script_build-1e68faf72d2d6d6a.d +5 -0
  269. package/rust/target/release/build/libc-7781f1d3692ef952/invoked.timestamp +1 -0
  270. package/rust/target/release/build/libc-7781f1d3692ef952/output +25 -0
  271. package/rust/target/release/build/libc-7781f1d3692ef952/root-output +1 -0
  272. package/rust/target/release/build/libc-7781f1d3692ef952/stderr +0 -0
  273. package/rust/target/release/build/num-traits-960d689d96a427e4/invoked.timestamp +1 -0
  274. package/rust/target/release/build/num-traits-960d689d96a427e4/output +3 -0
  275. package/rust/target/release/build/num-traits-960d689d96a427e4/root-output +1 -0
  276. package/rust/target/release/build/num-traits-960d689d96a427e4/stderr +0 -0
  277. package/rust/target/release/build/num-traits-e0dbc71c6a4b5721/build-script-build +0 -0
  278. package/rust/target/release/build/num-traits-e0dbc71c6a4b5721/build_script_build-e0dbc71c6a4b5721 +0 -0
  279. package/rust/target/release/build/num-traits-e0dbc71c6a4b5721/build_script_build-e0dbc71c6a4b5721.d +5 -0
  280. package/rust/target/release/build/proc-macro2-676678c45d7cb9a8/invoked.timestamp +1 -0
  281. package/rust/target/release/build/proc-macro2-676678c45d7cb9a8/output +23 -0
  282. package/rust/target/release/build/proc-macro2-676678c45d7cb9a8/root-output +1 -0
  283. package/rust/target/release/build/proc-macro2-676678c45d7cb9a8/stderr +0 -0
  284. package/rust/target/release/build/proc-macro2-c72a330c78f30f59/build-script-build +0 -0
  285. package/rust/target/release/build/proc-macro2-c72a330c78f30f59/build_script_build-c72a330c78f30f59 +0 -0
  286. package/rust/target/release/build/proc-macro2-c72a330c78f30f59/build_script_build-c72a330c78f30f59.d +5 -0
  287. package/rust/target/release/build/quote-0c85187123c64982/build-script-build +0 -0
  288. package/rust/target/release/build/quote-0c85187123c64982/build_script_build-0c85187123c64982 +0 -0
  289. package/rust/target/release/build/quote-0c85187123c64982/build_script_build-0c85187123c64982.d +5 -0
  290. package/rust/target/release/build/quote-8e84519b0b657fd1/invoked.timestamp +1 -0
  291. package/rust/target/release/build/quote-8e84519b0b657fd1/output +2 -0
  292. package/rust/target/release/build/quote-8e84519b0b657fd1/root-output +1 -0
  293. package/rust/target/release/build/quote-8e84519b0b657fd1/stderr +0 -0
  294. package/rust/target/release/build/serde-a5bb7470cea0daed/build-script-build +0 -0
  295. package/rust/target/release/build/serde-a5bb7470cea0daed/build_script_build-a5bb7470cea0daed +0 -0
  296. package/rust/target/release/build/serde-a5bb7470cea0daed/build_script_build-a5bb7470cea0daed.d +5 -0
  297. package/rust/target/release/build/serde-ab5bca82c15e72e0/invoked.timestamp +1 -0
  298. package/rust/target/release/build/serde-ab5bca82c15e72e0/out/private.rs +6 -0
  299. package/rust/target/release/build/serde-ab5bca82c15e72e0/output +13 -0
  300. package/rust/target/release/build/serde-ab5bca82c15e72e0/root-output +1 -0
  301. package/rust/target/release/build/serde-ab5bca82c15e72e0/stderr +0 -0
  302. package/rust/target/release/build/serde_core-9ebabaac0dd9657b/invoked.timestamp +1 -0
  303. package/rust/target/release/build/serde_core-9ebabaac0dd9657b/out/private.rs +5 -0
  304. package/rust/target/release/build/serde_core-9ebabaac0dd9657b/output +11 -0
  305. package/rust/target/release/build/serde_core-9ebabaac0dd9657b/root-output +1 -0
  306. package/rust/target/release/build/serde_core-9ebabaac0dd9657b/stderr +0 -0
  307. package/rust/target/release/build/serde_core-f6e34062ef5ef617/build-script-build +0 -0
  308. package/rust/target/release/build/serde_core-f6e34062ef5ef617/build_script_build-f6e34062ef5ef617 +0 -0
  309. package/rust/target/release/build/serde_core-f6e34062ef5ef617/build_script_build-f6e34062ef5ef617.d +5 -0
  310. package/rust/target/release/build/serde_json-b567bd1bd6d9b444/build-script-build +0 -0
  311. package/rust/target/release/build/serde_json-b567bd1bd6d9b444/build_script_build-b567bd1bd6d9b444 +0 -0
  312. package/rust/target/release/build/serde_json-b567bd1bd6d9b444/build_script_build-b567bd1bd6d9b444.d +5 -0
  313. package/rust/target/release/build/serde_json-c2d2dc29d8c706f7/invoked.timestamp +1 -0
  314. package/rust/target/release/build/serde_json-c2d2dc29d8c706f7/output +3 -0
  315. package/rust/target/release/build/serde_json-c2d2dc29d8c706f7/root-output +1 -0
  316. package/rust/target/release/build/serde_json-c2d2dc29d8c706f7/stderr +0 -0
  317. package/rust/target/release/build/typenum-a51a68ea7cdca0a3/invoked.timestamp +1 -0
  318. package/rust/target/release/build/typenum-a51a68ea7cdca0a3/out/tests.rs +20563 -0
  319. package/rust/target/release/build/typenum-a51a68ea7cdca0a3/output +1 -0
  320. package/rust/target/release/build/typenum-a51a68ea7cdca0a3/root-output +1 -0
  321. package/rust/target/release/build/typenum-a51a68ea7cdca0a3/stderr +0 -0
  322. package/rust/target/release/build/typenum-be711a78e8981f2a/build-script-build +0 -0
  323. package/rust/target/release/build/typenum-be711a78e8981f2a/build_script_build-be711a78e8981f2a +0 -0
  324. package/rust/target/release/build/typenum-be711a78e8981f2a/build_script_build-be711a78e8981f2a.d +5 -0
  325. package/rust/target/release/build/zmij-7f6b81acea9a20e3/invoked.timestamp +1 -0
  326. package/rust/target/release/build/zmij-7f6b81acea9a20e3/output +3 -0
  327. package/rust/target/release/build/zmij-7f6b81acea9a20e3/root-output +1 -0
  328. package/rust/target/release/build/zmij-7f6b81acea9a20e3/stderr +0 -0
  329. package/rust/target/release/build/zmij-bceeb0e6919120f9/build-script-build +0 -0
  330. package/rust/target/release/build/zmij-bceeb0e6919120f9/build_script_build-bceeb0e6919120f9 +0 -0
  331. package/rust/target/release/build/zmij-bceeb0e6919120f9/build_script_build-bceeb0e6919120f9.d +5 -0
  332. package/rust/target/release/deps/autocfg-1b3bd8a7b74bd5b4.d +10 -0
  333. package/rust/target/release/deps/block_buffer-cf3be8244cc78328.d +8 -0
  334. package/rust/target/release/deps/cfg_if-e24d4f7b470ac1f7.d +7 -0
  335. package/rust/target/release/deps/chrono-c2c1d826849da6b8.d +37 -0
  336. package/rust/target/release/deps/core_foundation_sys-bdb199b1a618a85a.d +46 -0
  337. package/rust/target/release/deps/cpufeatures-044997a43e932cd2.d +8 -0
  338. package/rust/target/release/deps/crypto_common-ff4fa5d0a5e0455d.d +7 -0
  339. package/rust/target/release/deps/digest-6037e23ec7b0997e.d +13 -0
  340. package/rust/target/release/deps/generic_array-6939b76bf342e446.d +13 -0
  341. package/rust/target/release/deps/iana_time_zone-7907cd9c1810cf88.d +9 -0
  342. package/rust/target/release/deps/itoa-a9b94ec9a7564538.d +8 -0
  343. package/rust/target/release/deps/lazy_static-79337840520ffaab.d +8 -0
  344. package/rust/target/release/deps/libautocfg-1b3bd8a7b74bd5b4.rlib +0 -0
  345. package/rust/target/release/deps/libautocfg-1b3bd8a7b74bd5b4.rmeta +0 -0
  346. package/rust/target/release/deps/libblock_buffer-cf3be8244cc78328.rlib +0 -0
  347. package/rust/target/release/deps/libblock_buffer-cf3be8244cc78328.rmeta +0 -0
  348. package/rust/target/release/deps/libc-ab405543531da832.d +45 -0
  349. package/rust/target/release/deps/libcfg_if-e24d4f7b470ac1f7.rlib +0 -0
  350. package/rust/target/release/deps/libcfg_if-e24d4f7b470ac1f7.rmeta +0 -0
  351. package/rust/target/release/deps/libchrono-c2c1d826849da6b8.rlib +0 -0
  352. package/rust/target/release/deps/libchrono-c2c1d826849da6b8.rmeta +0 -0
  353. package/rust/target/release/deps/libcore_foundation_sys-bdb199b1a618a85a.rlib +0 -0
  354. package/rust/target/release/deps/libcore_foundation_sys-bdb199b1a618a85a.rmeta +0 -0
  355. package/rust/target/release/deps/libcpufeatures-044997a43e932cd2.rlib +0 -0
  356. package/rust/target/release/deps/libcpufeatures-044997a43e932cd2.rmeta +0 -0
  357. package/rust/target/release/deps/libcrypto_common-ff4fa5d0a5e0455d.rlib +0 -0
  358. package/rust/target/release/deps/libcrypto_common-ff4fa5d0a5e0455d.rmeta +0 -0
  359. package/rust/target/release/deps/libdigest-6037e23ec7b0997e.rlib +0 -0
  360. package/rust/target/release/deps/libdigest-6037e23ec7b0997e.rmeta +0 -0
  361. package/rust/target/release/deps/libgeneric_array-6939b76bf342e446.rlib +0 -0
  362. package/rust/target/release/deps/libgeneric_array-6939b76bf342e446.rmeta +0 -0
  363. package/rust/target/release/deps/libiana_time_zone-7907cd9c1810cf88.rlib +0 -0
  364. package/rust/target/release/deps/libiana_time_zone-7907cd9c1810cf88.rmeta +0 -0
  365. package/rust/target/release/deps/libitoa-a9b94ec9a7564538.rlib +0 -0
  366. package/rust/target/release/deps/libitoa-a9b94ec9a7564538.rmeta +0 -0
  367. package/rust/target/release/deps/liblazy_static-79337840520ffaab.rlib +0 -0
  368. package/rust/target/release/deps/liblazy_static-79337840520ffaab.rmeta +0 -0
  369. package/rust/target/release/deps/liblibc-ab405543531da832.rlib +0 -0
  370. package/rust/target/release/deps/liblibc-ab405543531da832.rmeta +0 -0
  371. package/rust/target/release/deps/liblog-c93c9501d50fd117.rlib +0 -0
  372. package/rust/target/release/deps/liblog-c93c9501d50fd117.rmeta +0 -0
  373. package/rust/target/release/deps/libmatchers-aa7b66eaa02449a5.rlib +0 -0
  374. package/rust/target/release/deps/libmatchers-aa7b66eaa02449a5.rmeta +0 -0
  375. package/rust/target/release/deps/libmemchr-006163bba97af52f.rlib +0 -0
  376. package/rust/target/release/deps/libmemchr-006163bba97af52f.rmeta +0 -0
  377. package/rust/target/release/deps/libnu_ansi_term-56ab27c2fee1c03f.rlib +0 -0
  378. package/rust/target/release/deps/libnu_ansi_term-56ab27c2fee1c03f.rmeta +0 -0
  379. package/rust/target/release/deps/libnum_traits-a45e3ec48ef9afe7.rlib +0 -0
  380. package/rust/target/release/deps/libnum_traits-a45e3ec48ef9afe7.rmeta +0 -0
  381. package/rust/target/release/deps/libonce_cell-1ba5d4df66429103.rlib +0 -0
  382. package/rust/target/release/deps/libonce_cell-1ba5d4df66429103.rmeta +0 -0
  383. package/rust/target/release/deps/libpin_project_lite-b67f60134987a063.rlib +0 -0
  384. package/rust/target/release/deps/libpin_project_lite-b67f60134987a063.rmeta +0 -0
  385. package/rust/target/release/deps/libproc_macro2-c5165b0726856761.rlib +0 -0
  386. package/rust/target/release/deps/libproc_macro2-c5165b0726856761.rmeta +0 -0
  387. package/rust/target/release/deps/libquote-93e086ea3561ec28.rlib +0 -0
  388. package/rust/target/release/deps/libquote-93e086ea3561ec28.rmeta +0 -0
  389. package/rust/target/release/deps/libregex_automata-f8d8efe517e98888.rlib +0 -0
  390. package/rust/target/release/deps/libregex_automata-f8d8efe517e98888.rmeta +0 -0
  391. package/rust/target/release/deps/libregex_syntax-eeca859592595703.rlib +0 -0
  392. package/rust/target/release/deps/libregex_syntax-eeca859592595703.rmeta +0 -0
  393. package/rust/target/release/deps/libserde-e58bd660ffca77fb.rlib +0 -0
  394. package/rust/target/release/deps/libserde-e58bd660ffca77fb.rmeta +0 -0
  395. package/rust/target/release/deps/libserde_core-bcf1f7226267a515.rlib +0 -0
  396. package/rust/target/release/deps/libserde_core-bcf1f7226267a515.rmeta +0 -0
  397. package/rust/target/release/deps/libserde_derive-739fe6b99d6b7650.dylib +0 -0
  398. package/rust/target/release/deps/libserde_json-c2477e5e18fc5e07.rlib +0 -0
  399. package/rust/target/release/deps/libserde_json-c2477e5e18fc5e07.rmeta +0 -0
  400. package/rust/target/release/deps/libsha2-c490257262e4006f.rlib +0 -0
  401. package/rust/target/release/deps/libsha2-c490257262e4006f.rmeta +0 -0
  402. package/rust/target/release/deps/libsharded_slab-a9b081fca5df5776.rlib +0 -0
  403. package/rust/target/release/deps/libsharded_slab-a9b081fca5df5776.rmeta +0 -0
  404. package/rust/target/release/deps/libsmallvec-c80f5e02fc44f75f.rlib +0 -0
  405. package/rust/target/release/deps/libsmallvec-c80f5e02fc44f75f.rmeta +0 -0
  406. package/rust/target/release/deps/libsyn-e3c4fb9c9765d69d.rlib +0 -0
  407. package/rust/target/release/deps/libsyn-e3c4fb9c9765d69d.rmeta +0 -0
  408. package/rust/target/release/deps/libthread_local-36b9b6c1f23ac9ba.rlib +0 -0
  409. package/rust/target/release/deps/libthread_local-36b9b6c1f23ac9ba.rmeta +0 -0
  410. package/rust/target/release/deps/libtracing-245af3c71ea35ecd.rlib +0 -0
  411. package/rust/target/release/deps/libtracing-245af3c71ea35ecd.rmeta +0 -0
  412. package/rust/target/release/deps/libtracing_attributes-4b033b2e5598485c.dylib +0 -0
  413. package/rust/target/release/deps/libtracing_core-251b2d04fd4b7c92.rlib +0 -0
  414. package/rust/target/release/deps/libtracing_core-251b2d04fd4b7c92.rmeta +0 -0
  415. package/rust/target/release/deps/libtracing_log-33fc70c9a47f5b59.rlib +0 -0
  416. package/rust/target/release/deps/libtracing_log-33fc70c9a47f5b59.rmeta +0 -0
  417. package/rust/target/release/deps/libtracing_subscriber-bde0d5b2c127b5ce.rlib +0 -0
  418. package/rust/target/release/deps/libtracing_subscriber-bde0d5b2c127b5ce.rmeta +0 -0
  419. package/rust/target/release/deps/libtypenum-3cdc48836e5238cf.rlib +0 -0
  420. package/rust/target/release/deps/libtypenum-3cdc48836e5238cf.rmeta +0 -0
  421. package/rust/target/release/deps/libunicode_ident-b6ef9a2188f165a7.rlib +0 -0
  422. package/rust/target/release/deps/libunicode_ident-b6ef9a2188f165a7.rmeta +0 -0
  423. package/rust/target/release/deps/libversion_check-8de6a4a01730f3fc.rlib +0 -0
  424. package/rust/target/release/deps/libversion_check-8de6a4a01730f3fc.rmeta +0 -0
  425. package/rust/target/release/deps/libvps_manager_core-32881497d3c7a1d5.rlib +0 -0
  426. package/rust/target/release/deps/libvps_manager_core-32881497d3c7a1d5.rmeta +0 -0
  427. package/rust/target/release/deps/libzmij-4431e0d331234992.rlib +0 -0
  428. package/rust/target/release/deps/libzmij-4431e0d331234992.rmeta +0 -0
  429. package/rust/target/release/deps/log-c93c9501d50fd117.d +10 -0
  430. package/rust/target/release/deps/matchers-aa7b66eaa02449a5.d +7 -0
  431. package/rust/target/release/deps/memchr-006163bba97af52f.d +30 -0
  432. package/rust/target/release/deps/nu_ansi_term-56ab27c2fee1c03f.d +16 -0
  433. package/rust/target/release/deps/num_traits-a45e3ec48ef9afe7.d +25 -0
  434. package/rust/target/release/deps/once_cell-1ba5d4df66429103.d +9 -0
  435. package/rust/target/release/deps/pin_project_lite-b67f60134987a063.d +7 -0
  436. package/rust/target/release/deps/proc_macro2-c5165b0726856761.d +17 -0
  437. package/rust/target/release/deps/quote-93e086ea3561ec28.d +13 -0
  438. package/rust/target/release/deps/regex_automata-f8d8efe517e98888.d +57 -0
  439. package/rust/target/release/deps/regex_syntax-eeca859592595703.d +25 -0
  440. package/rust/target/release/deps/serde-e58bd660ffca77fb.d +14 -0
  441. package/rust/target/release/deps/serde_core-bcf1f7226267a515.d +27 -0
  442. package/rust/target/release/deps/serde_derive-739fe6b99d6b7650.d +34 -0
  443. package/rust/target/release/deps/serde_json-c2477e5e18fc5e07.d +22 -0
  444. package/rust/target/release/deps/sha2-c490257262e4006f.d +13 -0
  445. package/rust/target/release/deps/sharded_slab-a9b081fca5df5776.d +19 -0
  446. package/rust/target/release/deps/smallvec-c80f5e02fc44f75f.d +7 -0
  447. package/rust/target/release/deps/syn-e3c4fb9c9765d69d.d +58 -0
  448. package/rust/target/release/deps/thread_local-36b9b6c1f23ac9ba.d +10 -0
  449. package/rust/target/release/deps/tracing-245af3c71ea35ecd.d +14 -0
  450. package/rust/target/release/deps/tracing_attributes-4b033b2e5598485c.d +7 -0
  451. package/rust/target/release/deps/tracing_core-251b2d04fd4b7c92.d +16 -0
  452. package/rust/target/release/deps/tracing_log-33fc70c9a47f5b59.d +8 -0
  453. package/rust/target/release/deps/tracing_subscriber-bde0d5b2c127b5ce.d +42 -0
  454. package/rust/target/release/deps/typenum-3cdc48836e5238cf.d +18 -0
  455. package/rust/target/release/deps/unicode_ident-b6ef9a2188f165a7.d +8 -0
  456. package/rust/target/release/deps/version_check-8de6a4a01730f3fc.d +10 -0
  457. package/rust/target/release/deps/vps_manager_core-32881497d3c7a1d5.d +8 -0
  458. package/rust/target/release/deps/vps_manager_core-52dac2e61aad8f4b +0 -0
  459. package/rust/target/release/deps/vps_manager_core-52dac2e61aad8f4b.d +5 -0
  460. package/rust/target/release/deps/zmij-4431e0d331234992.d +8 -0
  461. package/rust/target/release/libvps_manager_core.d +1 -0
  462. package/rust/target/release/libvps_manager_core.rlib +0 -0
  463. package/rust/target/release/vps-manager-core +0 -0
  464. package/rust/target/release/vps-manager-core.d +1 -0
  465. package/src/bridge.ts +419 -0
  466. package/src/config.ts +192 -0
  467. package/src/health-server.ts +280 -0
  468. package/src/index.ts +860 -0
  469. package/src/service-manager.ts +216 -0
@@ -0,0 +1,799 @@
1
+ //! VPS Manager Core Library
2
+ //!
3
+ //! Package management operations for VPS.
4
+
5
+ pub mod protocol;
6
+
7
+ // Re-export protocol types for convenience
8
+ pub use protocol::{ErrorObject, ErrorResponse, Request, Response, ResponseEnvelope};
9
+
10
+ use serde::{Deserialize, Serialize};
11
+
12
+ // ---------------------------------------------------------------------------
13
+ // Types
14
+ // ---------------------------------------------------------------------------
15
+
16
+ /// Package information
17
+ #[derive(Debug, Clone, Serialize, Deserialize)]
18
+ pub struct PackageInfo {
19
+ pub name: String,
20
+ pub version: String,
21
+ pub installed: bool,
22
+ pub service: Option<String>,
23
+ }
24
+
25
+ /// Install result
26
+ #[derive(Debug, Clone, Serialize, Deserialize)]
27
+ pub struct InstallResult {
28
+ pub success: bool,
29
+ pub version: String,
30
+ pub previous_version: Option<String>,
31
+ pub message: String,
32
+ }
33
+
34
+ /// Rollback result
35
+ #[derive(Debug, Clone, Serialize, Deserialize)]
36
+ pub struct RollbackResult {
37
+ pub success: bool,
38
+ pub previous_version: String,
39
+ pub current_version: String,
40
+ pub message: String,
41
+ }
42
+
43
+ /// Health check result
44
+ #[derive(Debug, Clone, Serialize, Deserialize)]
45
+ pub struct HealthCheckResult {
46
+ pub healthy: bool,
47
+ pub services: Vec<ServiceHealth>,
48
+ }
49
+
50
+ #[derive(Debug, Clone, Serialize, Deserialize)]
51
+ pub struct ServiceHealth {
52
+ pub name: String,
53
+ pub status: String,
54
+ pub pid: u32,
55
+ }
56
+
57
+ /// Package verification result
58
+ #[derive(Debug, Clone, Serialize, Deserialize)]
59
+ #[serde(rename_all = "camelCase")]
60
+ pub struct VerifyResult {
61
+ pub package_name: String,
62
+ pub version: String,
63
+ pub success: bool,
64
+ pub dist_exists: bool,
65
+ pub checksum: Option<String>,
66
+ pub message: String,
67
+ }
68
+
69
+ /// Security audit result
70
+ #[derive(Debug, Clone, Serialize, Deserialize)]
71
+ #[serde(rename_all = "camelCase")]
72
+ pub struct AuditResult {
73
+ pub package_name: String,
74
+ pub severity: String, // "critical", "high", "moderate", "low"
75
+ pub vulnerability: String,
76
+ pub description: String,
77
+ }
78
+
79
+ /// Bundle size information
80
+ #[derive(Debug, Clone, Serialize, Deserialize)]
81
+ #[serde(rename_all = "camelCase")]
82
+ pub struct BundleSize {
83
+ pub package_name: String,
84
+ pub version: String,
85
+ pub dist_size_bytes: u64,
86
+ pub file_count: u32,
87
+ }
88
+
89
+ /// Installed package information
90
+ #[derive(Debug, Clone, Serialize, Deserialize)]
91
+ #[serde(rename_all = "camelCase")]
92
+ pub struct InstalledPackageInfo {
93
+ pub package_name: String,
94
+ pub version: String,
95
+ pub dist_size_bytes: Option<u64>,
96
+ pub installed_at: Option<String>, // ISO timestamp
97
+ }
98
+
99
+ // ---------------------------------------------------------------------------
100
+ // Package Operations
101
+ // ---------------------------------------------------------------------------
102
+
103
+ use std::fs;
104
+ use std::path::Path;
105
+ use std::process::Command;
106
+ use tracing::{debug, error, info};
107
+
108
+ const WORK_DIR: &str = "/opt/vps-manager";
109
+ const BACKUP_DIR: &str = "/opt/vps-manager/backups";
110
+
111
+ /// Install a package using bun
112
+ pub fn install_package(package_name: &str, version: &str) -> InstallResult {
113
+ info!("Installing {}@{}", package_name, version);
114
+
115
+ // Get previous version if installed
116
+ let previous_version = get_installed_version(package_name);
117
+
118
+ // Create backup if package already installed
119
+ if let Some(ref prev) = &previous_version {
120
+ create_backup(package_name, prev);
121
+ debug!("Created backup for {}@{}", package_name, prev);
122
+ }
123
+
124
+ // Ensure work directory exists
125
+ if let Err(e) = fs::create_dir_all(WORK_DIR) {
126
+ error!("Failed to create work directory: {}", e);
127
+ return InstallResult {
128
+ success: false,
129
+ version: version.to_string(),
130
+ previous_version,
131
+ message: format!("Failed to create work directory: {}", e),
132
+ };
133
+ }
134
+
135
+ // Run bun add
136
+ let package_spec = if version == "latest" {
137
+ package_name.to_string()
138
+ } else {
139
+ format!("{}@{}", package_name, version)
140
+ };
141
+
142
+ let output = match Command::new("bun")
143
+ .args(["add", &package_spec])
144
+ .current_dir(WORK_DIR)
145
+ .output()
146
+ {
147
+ Ok(o) => o,
148
+ Err(e) => {
149
+ error!("Failed to run bun add: {}", e);
150
+ return InstallResult {
151
+ success: false,
152
+ version: version.to_string(),
153
+ previous_version,
154
+ message: format!("Failed to run bun add: {}", e),
155
+ };
156
+ }
157
+ };
158
+
159
+ if !output.status.success() {
160
+ let stderr = String::from_utf8_lossy(&output.stderr);
161
+ error!("bun add failed: {}", stderr);
162
+ return InstallResult {
163
+ success: false,
164
+ version: version.to_string(),
165
+ previous_version,
166
+ message: format!("bun add failed: {}", stderr),
167
+ };
168
+ }
169
+
170
+ // Get the actual installed version
171
+ let installed_version = get_installed_version(package_name)
172
+ .unwrap_or_else(|| version.to_string());
173
+
174
+ info!("Successfully installed {}@{}", package_name, installed_version);
175
+
176
+ InstallResult {
177
+ success: true,
178
+ version: installed_version,
179
+ previous_version,
180
+ message: format!("Installed {}@{}", package_name, version),
181
+ }
182
+ }
183
+
184
+ /// Update a package to latest version
185
+ pub fn update_package(package_name: &str) -> InstallResult {
186
+ info!("Updating {} to latest", package_name);
187
+
188
+ let previous_version = get_installed_version(package_name);
189
+
190
+ // Just install latest version
191
+ let package_spec = package_name.to_string();
192
+
193
+ let output = match Command::new("bun")
194
+ .args(["add", &package_spec])
195
+ .current_dir(WORK_DIR)
196
+ .output()
197
+ {
198
+ Ok(o) => o,
199
+ Err(e) => {
200
+ error!("Failed to run bun add: {}", e);
201
+ return InstallResult {
202
+ success: false,
203
+ version: "unknown".to_string(),
204
+ previous_version,
205
+ message: format!("Failed to run bun add: {}", e),
206
+ };
207
+ }
208
+ };
209
+
210
+ if !output.status.success() {
211
+ let stderr = String::from_utf8_lossy(&output.stderr);
212
+ error!("bun add failed: {}", stderr);
213
+ return InstallResult {
214
+ success: false,
215
+ version: "unknown".to_string(),
216
+ previous_version,
217
+ message: format!("bun add failed: {}", stderr),
218
+ };
219
+ }
220
+
221
+ let installed_version = get_installed_version(package_name)
222
+ .unwrap_or_else(|| "latest".to_string());
223
+
224
+ info!("Successfully updated {} to {}", package_name, installed_version);
225
+
226
+ InstallResult {
227
+ success: true,
228
+ version: installed_version.clone(),
229
+ previous_version,
230
+ message: format!("Updated {} to {}", package_name, installed_version),
231
+ }
232
+ }
233
+
234
+ /// Update all @ebowwa packages
235
+ pub fn update_all_packages() -> Vec<InstallResult> {
236
+ let packages = list_packages();
237
+ packages
238
+ .iter()
239
+ .filter(|p| p.installed)
240
+ .map(|p| update_package(&p.name))
241
+ .collect()
242
+ }
243
+
244
+ /// List installed @ebowwa packages by scanning node_modules/@ebowwa/
245
+ pub fn list_packages() -> Vec<PackageInfo> {
246
+ let ebowwa_dir = Path::new(WORK_DIR).join("node_modules").join("@ebowwa");
247
+ let mut packages = Vec::new();
248
+
249
+ if !ebowwa_dir.exists() || !ebowwa_dir.is_dir() {
250
+ debug!("No @ebowwa directory found at {:?}", ebowwa_dir);
251
+ return packages;
252
+ }
253
+
254
+ if let Ok(entries) = fs::read_dir(&ebowwa_dir) {
255
+ for entry in entries.flatten() {
256
+ let pkg_dir = entry.path();
257
+ if !pkg_dir.is_dir() {
258
+ continue;
259
+ }
260
+
261
+ let pkg_name = format!("@ebowwa/{}", entry.file_name().to_string_lossy());
262
+ let pkg_json_path = pkg_dir.join("package.json");
263
+
264
+ let version = if pkg_json_path.exists() {
265
+ if let Ok(content) = fs::read_to_string(&pkg_json_path) {
266
+ if let Ok(pkg_json) = serde_json::from_str::<serde_json::Value>(&content) {
267
+ pkg_json
268
+ .get("version")
269
+ .and_then(|v| v.as_str())
270
+ .unwrap_or("unknown")
271
+ .to_string()
272
+ } else {
273
+ "unknown".to_string()
274
+ }
275
+ } else {
276
+ "unknown".to_string()
277
+ }
278
+ } else {
279
+ "unknown".to_string()
280
+ };
281
+
282
+ packages.push(PackageInfo {
283
+ name: pkg_name,
284
+ version,
285
+ installed: true,
286
+ service: Some(entry.file_name().to_string_lossy().to_string()),
287
+ });
288
+ }
289
+ }
290
+
291
+ packages
292
+ }
293
+
294
+ /// Rollback a package to previous version
295
+ pub fn rollback_package(package_name: &str) -> RollbackResult {
296
+ info!("Rolling back {}", package_name);
297
+
298
+ let current_version = match get_installed_version(package_name) {
299
+ Some(v) => v,
300
+ None => {
301
+ return RollbackResult {
302
+ success: false,
303
+ previous_version: "unknown".to_string(),
304
+ current_version: "unknown".to_string(),
305
+ message: "Package not installed".to_string(),
306
+ };
307
+ }
308
+ };
309
+
310
+ // Find backup
311
+ let backup_version = match find_backup(package_name) {
312
+ Some(v) => v,
313
+ None => {
314
+ return RollbackResult {
315
+ success: false,
316
+ previous_version: current_version.clone(),
317
+ current_version,
318
+ message: "No backup found".to_string(),
319
+ };
320
+ }
321
+ };
322
+
323
+ // Install the backup version
324
+ let package_spec = format!("{}@{}", package_name, backup_version);
325
+ let output = match Command::new("bun")
326
+ .args(["add", &package_spec])
327
+ .current_dir(WORK_DIR)
328
+ .output()
329
+ {
330
+ Ok(o) => o,
331
+ Err(e) => {
332
+ return RollbackResult {
333
+ success: false,
334
+ previous_version: current_version.clone(),
335
+ current_version,
336
+ message: format!("Failed to run bun add: {}", e),
337
+ };
338
+ }
339
+ };
340
+
341
+ if !output.status.success() {
342
+ let stderr = String::from_utf8_lossy(&output.stderr);
343
+ return RollbackResult {
344
+ success: false,
345
+ previous_version: current_version.clone(),
346
+ current_version,
347
+ message: format!("bun add failed: {}", stderr),
348
+ };
349
+ }
350
+
351
+ info!("Rolled back {} from {} to {}", package_name, current_version, backup_version);
352
+
353
+ RollbackResult {
354
+ success: true,
355
+ previous_version: current_version,
356
+ current_version: backup_version,
357
+ message: format!("Rolled back {}", package_name),
358
+ }
359
+ }
360
+
361
+ /// Check health of systemd services
362
+ pub fn check_health() -> HealthCheckResult {
363
+ let packages = list_packages();
364
+ let mut services = Vec::new();
365
+
366
+ for pkg in packages {
367
+ if let Some(service_name) = &pkg.service {
368
+ let health = check_service_health(service_name);
369
+ services.push(health);
370
+ }
371
+ }
372
+
373
+ let all_healthy = services.iter().all(|s| s.status == "running");
374
+
375
+ HealthCheckResult {
376
+ healthy: all_healthy,
377
+ services,
378
+ }
379
+ }
380
+
381
+ // ---------------------------------------------------------------------------
382
+ // Private Helpers
383
+ // ---------------------------------------------------------------------------
384
+
385
+ fn get_installed_version(package_name: &str) -> Option<String> {
386
+ let package_json_path = Path::new(WORK_DIR).join("package.json");
387
+
388
+ if !package_json_path.exists() {
389
+ return None;
390
+ }
391
+
392
+ let content = fs::read_to_string(&package_json_path).ok()?;
393
+ let package_json: serde_json::Value = serde_json::from_str(&content).ok()?;
394
+
395
+ package_json
396
+ .get("dependencies")
397
+ .and_then(|d| d.get(package_name))
398
+ .and_then(|v| v.as_str())
399
+ .map(|s| s.trim_start_matches(|c| c == '^' || c == '~').to_string())
400
+ }
401
+
402
+ fn create_backup(package_name: &str, version: &str) {
403
+ let _ = fs::create_dir_all(BACKUP_DIR);
404
+
405
+ let backup_file = Path::new(BACKUP_DIR)
406
+ .join(format!("{}.json", package_name.replace("@", "").replace("/", "-")));
407
+
408
+ let backup_data = serde_json::json!({
409
+ "package": package_name,
410
+ "version": version,
411
+ });
412
+
413
+ let _ = fs::write(&backup_file, serde_json::to_string_pretty(&backup_data).unwrap());
414
+ }
415
+
416
+ fn find_backup(package_name: &str) -> Option<String> {
417
+ let backup_file = Path::new(BACKUP_DIR)
418
+ .join(format!("{}.json", package_name.replace("@", "").replace("/", "-")));
419
+
420
+ if !backup_file.exists() {
421
+ return None;
422
+ }
423
+
424
+ let content = fs::read_to_string(&backup_file).ok()?;
425
+ let backup: serde_json::Value = serde_json::from_str(&content).ok()?;
426
+
427
+ backup.get("version").and_then(|v| v.as_str()).map(|s| s.to_string())
428
+ }
429
+
430
+ fn check_service_health(service_name: &str) -> ServiceHealth {
431
+ let output = Command::new("systemctl")
432
+ .args(["show", service_name, "--property=ActiveState,SubState,MainPID"])
433
+ .output();
434
+
435
+ match output {
436
+ Ok(o) if o.status.success() => {
437
+ let stdout = String::from_utf8_lossy(&o.stdout);
438
+ let mut active_state = "unknown".to_string();
439
+ let mut sub_state = "unknown".to_string();
440
+ let mut pid: u32 = 0;
441
+
442
+ for line in stdout.lines() {
443
+ if line.starts_with("ActiveState=") {
444
+ active_state = line.split('=').nth(1).unwrap_or("unknown").to_string();
445
+ } else if line.starts_with("SubState=") {
446
+ sub_state = line.split('=').nth(1).unwrap_or("unknown").to_string();
447
+ } else if line.starts_with("MainPID=") {
448
+ pid = line.split('=').nth(1).unwrap_or("0").parse().unwrap_or(0);
449
+ }
450
+ }
451
+
452
+ ServiceHealth {
453
+ name: service_name.to_string(),
454
+ status: format!("{}/{}", active_state, sub_state),
455
+ pid,
456
+ }
457
+ }
458
+ _ => ServiceHealth {
459
+ name: service_name.to_string(),
460
+ status: "unknown".to_string(),
461
+ pid: 0,
462
+ },
463
+ }
464
+ }
465
+
466
+ // ---------------------------------------------------------------------------
467
+ // Package Verification & Audit Operations
468
+ // ---------------------------------------------------------------------------
469
+
470
+ use sha2::{Digest, Sha256};
471
+
472
+ /// Verify installed package integrity
473
+ pub fn verify_package(package_name: &str) -> VerifyResult {
474
+ info!("Verifying package: {}", package_name);
475
+
476
+ // Check that package exists in node_modules
477
+ let package_path = Path::new(WORK_DIR)
478
+ .join("node_modules")
479
+ .join(package_name);
480
+
481
+ if !package_path.exists() {
482
+ return VerifyResult {
483
+ package_name: package_name.to_string(),
484
+ version: "unknown".to_string(),
485
+ success: false,
486
+ dist_exists: false,
487
+ checksum: None,
488
+ message: "Package not found in node_modules".to_string(),
489
+ };
490
+ }
491
+
492
+ // Read version from the package's own package.json
493
+ let pkg_json_path = package_path.join("package.json");
494
+ let version = if pkg_json_path.exists() {
495
+ if let Ok(content) = fs::read_to_string(&pkg_json_path) {
496
+ if let Ok(pkg_json) = serde_json::from_str::<serde_json::Value>(&content) {
497
+ pkg_json
498
+ .get("version")
499
+ .and_then(|v| v.as_str())
500
+ .unwrap_or("unknown")
501
+ .to_string()
502
+ } else {
503
+ "unknown".to_string()
504
+ }
505
+ } else {
506
+ "unknown".to_string()
507
+ }
508
+ } else {
509
+ "unknown".to_string()
510
+ };
511
+
512
+ // Check dist/ directory exists
513
+ let dist_path = package_path.join("dist");
514
+ let dist_exists = dist_path.exists() && dist_path.is_dir();
515
+
516
+ if !dist_exists {
517
+ return VerifyResult {
518
+ package_name: package_name.to_string(),
519
+ version,
520
+ success: false,
521
+ dist_exists: false,
522
+ checksum: None,
523
+ message: "dist/ directory not found".to_string(),
524
+ };
525
+ }
526
+
527
+ // Find main entry point (dist/index.js or from package.json)
528
+ let main_file = if let Ok(pkg_content) = fs::read_to_string(package_path.join("package.json")) {
529
+ if let Ok(pkg_json) = serde_json::from_str::<serde_json::Value>(&pkg_content) {
530
+ pkg_json
531
+ .get("main")
532
+ .and_then(|m| m.as_str())
533
+ .map(|m| package_path.join(m))
534
+ .unwrap_or_else(|| dist_path.join("index.js"))
535
+ } else {
536
+ dist_path.join("index.js")
537
+ }
538
+ } else {
539
+ dist_path.join("index.js")
540
+ };
541
+
542
+ // Calculate checksum of main entry point
543
+ let checksum = if main_file.exists() {
544
+ match fs::read(&main_file) {
545
+ Ok(content) => {
546
+ let mut hasher = Sha256::new();
547
+ hasher.update(&content);
548
+ Some(format!("{:x}", hasher.finalize()))
549
+ }
550
+ Err(e) => {
551
+ error!("Failed to read main file for checksum: {}", e);
552
+ None
553
+ }
554
+ }
555
+ } else {
556
+ None
557
+ };
558
+
559
+ let has_checksum = checksum.is_some();
560
+ let message = if has_checksum {
561
+ "Package verified successfully".to_string()
562
+ } else {
563
+ "Package exists but checksum could not be calculated".to_string()
564
+ };
565
+
566
+ VerifyResult {
567
+ package_name: package_name.to_string(),
568
+ version,
569
+ success: dist_exists && has_checksum,
570
+ dist_exists,
571
+ checksum,
572
+ message,
573
+ }
574
+ }
575
+
576
+ /// Check for vulnerabilities using bun audit or npm audit
577
+ pub fn audit_packages() -> Vec<AuditResult> {
578
+ info!("Running security audit");
579
+
580
+ // Try bun audit first, fall back to npm audit
581
+ let output = match Command::new("bun")
582
+ .args(["audit", "--json"])
583
+ .current_dir(WORK_DIR)
584
+ .output()
585
+ {
586
+ Ok(o) if o.status.success() => Some(o),
587
+ _ => {
588
+ // Fallback to npm audit
589
+ Command::new("npm")
590
+ .args(["audit", "--json"])
591
+ .current_dir(WORK_DIR)
592
+ .output()
593
+ .ok()
594
+ }
595
+ };
596
+
597
+ let output = match output {
598
+ Some(o) => o,
599
+ None => {
600
+ error!("Failed to run audit command");
601
+ return vec![];
602
+ }
603
+ };
604
+
605
+ let stdout = String::from_utf8_lossy(&output.stdout);
606
+ parse_audit_output(&stdout)
607
+ }
608
+
609
+ fn parse_audit_output(output: &str) -> Vec<AuditResult> {
610
+ let mut results = Vec::new();
611
+
612
+ let audit_json: serde_json::Value = match serde_json::from_str(output) {
613
+ Ok(v) => v,
614
+ Err(e) => {
615
+ error!("Failed to parse audit output: {}", e);
616
+ return results;
617
+ }
618
+ };
619
+
620
+ // npm audit --json format
621
+ if let Some(advisories) = audit_json.get("advisories").and_then(|a| a.as_object()) {
622
+ for (_, advisory) in advisories {
623
+ let result = AuditResult {
624
+ package_name: advisory["module_name"]
625
+ .as_str()
626
+ .unwrap_or("unknown")
627
+ .to_string(),
628
+ severity: advisory["severity"]
629
+ .as_str()
630
+ .unwrap_or("unknown")
631
+ .to_lowercase(),
632
+ vulnerability: advisory["title"]
633
+ .as_str()
634
+ .unwrap_or("unknown")
635
+ .to_string(),
636
+ description: advisory["url"]
637
+ .as_str()
638
+ .unwrap_or("No description available")
639
+ .to_string(),
640
+ };
641
+ results.push(result);
642
+ }
643
+ }
644
+
645
+ // bun audit format (may differ)
646
+ if let Some(vulnerabilities) = audit_json.get("vulnerabilities").and_then(|v| v.as_array()) {
647
+ for vuln in vulnerabilities {
648
+ let result = AuditResult {
649
+ package_name: vuln["name"]
650
+ .as_str()
651
+ .unwrap_or("unknown")
652
+ .to_string(),
653
+ severity: vuln["severity"]
654
+ .as_str()
655
+ .unwrap_or("unknown")
656
+ .to_lowercase(),
657
+ vulnerability: vuln["title"]
658
+ .as_str()
659
+ .unwrap_or("unknown")
660
+ .to_string(),
661
+ description: vuln["url"]
662
+ .as_str()
663
+ .unwrap_or("No description available")
664
+ .to_string(),
665
+ };
666
+ results.push(result);
667
+ }
668
+ }
669
+
670
+ results
671
+ }
672
+
673
+ /// Get dist/ sizes for all installed @ebowwa packages
674
+ pub fn get_bundle_sizes() -> Vec<BundleSize> {
675
+ info!("Getting bundle sizes for @ebowwa packages");
676
+
677
+ let packages = list_packages();
678
+ let mut sizes = Vec::new();
679
+
680
+ for pkg in packages {
681
+ if !pkg.installed {
682
+ continue;
683
+ }
684
+
685
+ let package_path = Path::new(WORK_DIR)
686
+ .join("node_modules")
687
+ .join(&pkg.name);
688
+
689
+ // Check dist/ first, fall back to src/ for source-only packages
690
+ let dist_path = package_path.join("dist");
691
+ let src_path = package_path.join("src");
692
+
693
+ let (size_bytes, file_count) = if dist_path.exists() {
694
+ calculate_dir_size(&dist_path)
695
+ } else if src_path.exists() {
696
+ // Source-only package (no bundled dist/)
697
+ calculate_dir_size(&src_path)
698
+ } else {
699
+ // Check for .ts files in root (some packages have .ts directly)
700
+ let mut has_ts = false;
701
+ if let Ok(entries) = fs::read_dir(&package_path) {
702
+ for entry in entries.flatten() {
703
+ let name = entry.file_name();
704
+ let name_str = name.to_string_lossy();
705
+ if name_str.ends_with(".ts") && !name_str.contains("target") {
706
+ has_ts = true;
707
+ break;
708
+ }
709
+ }
710
+ }
711
+ if has_ts {
712
+ calculate_dir_size(&package_path)
713
+ } else {
714
+ (0, 0)
715
+ }
716
+ };
717
+
718
+ sizes.push(BundleSize {
719
+ package_name: pkg.name.clone(),
720
+ version: pkg.version.clone(),
721
+ dist_size_bytes: size_bytes,
722
+ file_count: file_count,
723
+ });
724
+ }
725
+
726
+ sizes
727
+ }
728
+
729
+ fn calculate_dir_size(path: &Path) -> (u64, u32) {
730
+ let mut total_size = 0u64;
731
+ let mut file_count = 0u32;
732
+
733
+ if let Ok(entries) = fs::read_dir(path) {
734
+ for entry in entries.flatten() {
735
+ let entry_path = entry.path();
736
+ if entry_path.is_dir() {
737
+ let (sub_size, sub_count) = calculate_dir_size(&entry_path);
738
+ total_size += sub_size;
739
+ file_count += sub_count;
740
+ } else if entry_path.is_file() {
741
+ if let Ok(metadata) = entry.metadata() {
742
+ total_size += metadata.len();
743
+ file_count += 1;
744
+ }
745
+ }
746
+ }
747
+ }
748
+
749
+ (total_size, file_count)
750
+ }
751
+
752
+ /// Get installed package information with dist sizes and timestamps
753
+ pub fn get_installed_info() -> Vec<InstalledPackageInfo> {
754
+ info!("Getting installed package info");
755
+
756
+ let packages = list_packages();
757
+ let mut info_list = Vec::new();
758
+
759
+ for pkg in packages {
760
+ if !pkg.installed {
761
+ continue;
762
+ }
763
+
764
+ let package_path = Path::new(WORK_DIR)
765
+ .join("node_modules")
766
+ .join(&pkg.name);
767
+
768
+ let dist_path = package_path.join("dist");
769
+ let dist_size = if dist_path.exists() {
770
+ let (size, _) = calculate_dir_size(&dist_path);
771
+ Some(size)
772
+ } else {
773
+ None
774
+ };
775
+
776
+ // Try to get install timestamp from package.json mtime
777
+ let pkg_json_path = package_path.join("package.json");
778
+ let installed_at = if pkg_json_path.exists() {
779
+ fs::metadata(&pkg_json_path)
780
+ .ok()
781
+ .and_then(|m| m.modified().ok())
782
+ .map(|t| {
783
+ let datetime: chrono::DateTime<chrono::Utc> = t.into();
784
+ datetime.to_rfc3339()
785
+ })
786
+ } else {
787
+ None
788
+ };
789
+
790
+ info_list.push(InstalledPackageInfo {
791
+ package_name: pkg.name.clone(),
792
+ version: pkg.version.clone(),
793
+ dist_size_bytes: dist_size,
794
+ installed_at,
795
+ });
796
+ }
797
+
798
+ info_list
799
+ }