@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.
- package/README.md +108 -0
- package/dist/bridge.d.ts +149 -0
- package/dist/bridge.d.ts.map +1 -0
- package/dist/config.d.ts +92 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/health-server.d.ts +100 -0
- package/dist/health-server.d.ts.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +64 -0
- package/dist/index.js.map +16 -0
- package/dist/service-manager.d.ts +115 -0
- package/dist/service-manager.d.ts.map +1 -0
- package/package.json +61 -0
- package/rust/Cargo.lock +577 -0
- package/rust/Cargo.toml +21 -0
- package/rust/src/lib.rs +799 -0
- package/rust/src/main.rs +344 -0
- package/rust/src/protocol.rs +155 -0
- package/rust/target/.rustc_info.json +1 -0
- package/rust/target/CACHEDIR.TAG +3 -0
- package/rust/target/release/.cargo-lock +0 -0
- package/rust/target/release/.fingerprint/autocfg-1b3bd8a7b74bd5b4/dep-lib-autocfg +0 -0
- package/rust/target/release/.fingerprint/autocfg-1b3bd8a7b74bd5b4/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/autocfg-1b3bd8a7b74bd5b4/lib-autocfg +1 -0
- package/rust/target/release/.fingerprint/autocfg-1b3bd8a7b74bd5b4/lib-autocfg.json +1 -0
- package/rust/target/release/.fingerprint/block-buffer-cf3be8244cc78328/dep-lib-block_buffer +0 -0
- package/rust/target/release/.fingerprint/block-buffer-cf3be8244cc78328/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/block-buffer-cf3be8244cc78328/lib-block_buffer +1 -0
- package/rust/target/release/.fingerprint/block-buffer-cf3be8244cc78328/lib-block_buffer.json +1 -0
- package/rust/target/release/.fingerprint/cfg-if-e24d4f7b470ac1f7/dep-lib-cfg_if +0 -0
- package/rust/target/release/.fingerprint/cfg-if-e24d4f7b470ac1f7/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/cfg-if-e24d4f7b470ac1f7/lib-cfg_if +1 -0
- package/rust/target/release/.fingerprint/cfg-if-e24d4f7b470ac1f7/lib-cfg_if.json +1 -0
- package/rust/target/release/.fingerprint/chrono-c2c1d826849da6b8/dep-lib-chrono +0 -0
- package/rust/target/release/.fingerprint/chrono-c2c1d826849da6b8/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/chrono-c2c1d826849da6b8/lib-chrono +1 -0
- package/rust/target/release/.fingerprint/chrono-c2c1d826849da6b8/lib-chrono.json +1 -0
- package/rust/target/release/.fingerprint/core-foundation-sys-bdb199b1a618a85a/dep-lib-core_foundation_sys +0 -0
- package/rust/target/release/.fingerprint/core-foundation-sys-bdb199b1a618a85a/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/core-foundation-sys-bdb199b1a618a85a/lib-core_foundation_sys +1 -0
- package/rust/target/release/.fingerprint/core-foundation-sys-bdb199b1a618a85a/lib-core_foundation_sys.json +1 -0
- package/rust/target/release/.fingerprint/cpufeatures-044997a43e932cd2/dep-lib-cpufeatures +0 -0
- package/rust/target/release/.fingerprint/cpufeatures-044997a43e932cd2/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/cpufeatures-044997a43e932cd2/lib-cpufeatures +1 -0
- package/rust/target/release/.fingerprint/cpufeatures-044997a43e932cd2/lib-cpufeatures.json +1 -0
- package/rust/target/release/.fingerprint/crypto-common-ff4fa5d0a5e0455d/dep-lib-crypto_common +0 -0
- package/rust/target/release/.fingerprint/crypto-common-ff4fa5d0a5e0455d/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/crypto-common-ff4fa5d0a5e0455d/lib-crypto_common +1 -0
- package/rust/target/release/.fingerprint/crypto-common-ff4fa5d0a5e0455d/lib-crypto_common.json +1 -0
- package/rust/target/release/.fingerprint/digest-6037e23ec7b0997e/dep-lib-digest +0 -0
- package/rust/target/release/.fingerprint/digest-6037e23ec7b0997e/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/digest-6037e23ec7b0997e/lib-digest +1 -0
- package/rust/target/release/.fingerprint/digest-6037e23ec7b0997e/lib-digest.json +1 -0
- package/rust/target/release/.fingerprint/generic-array-6939b76bf342e446/dep-lib-generic_array +0 -0
- package/rust/target/release/.fingerprint/generic-array-6939b76bf342e446/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/generic-array-6939b76bf342e446/lib-generic_array +1 -0
- package/rust/target/release/.fingerprint/generic-array-6939b76bf342e446/lib-generic_array.json +1 -0
- package/rust/target/release/.fingerprint/generic-array-8ce40917f76412b1/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/generic-array-8ce40917f76412b1/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/generic-array-8ce40917f76412b1/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/generic-array-8ce40917f76412b1/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/generic-array-e69e3a44765f6d58/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/generic-array-e69e3a44765f6d58/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/iana-time-zone-7907cd9c1810cf88/dep-lib-iana_time_zone +0 -0
- package/rust/target/release/.fingerprint/iana-time-zone-7907cd9c1810cf88/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/iana-time-zone-7907cd9c1810cf88/lib-iana_time_zone +1 -0
- package/rust/target/release/.fingerprint/iana-time-zone-7907cd9c1810cf88/lib-iana_time_zone.json +1 -0
- package/rust/target/release/.fingerprint/itoa-a9b94ec9a7564538/dep-lib-itoa +0 -0
- package/rust/target/release/.fingerprint/itoa-a9b94ec9a7564538/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/itoa-a9b94ec9a7564538/lib-itoa +1 -0
- package/rust/target/release/.fingerprint/itoa-a9b94ec9a7564538/lib-itoa.json +1 -0
- package/rust/target/release/.fingerprint/lazy_static-79337840520ffaab/dep-lib-lazy_static +0 -0
- package/rust/target/release/.fingerprint/lazy_static-79337840520ffaab/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/lazy_static-79337840520ffaab/lib-lazy_static +1 -0
- package/rust/target/release/.fingerprint/lazy_static-79337840520ffaab/lib-lazy_static.json +1 -0
- package/rust/target/release/.fingerprint/libc-1e68faf72d2d6d6a/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/libc-1e68faf72d2d6d6a/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/libc-1e68faf72d2d6d6a/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/libc-1e68faf72d2d6d6a/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/libc-7781f1d3692ef952/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/libc-7781f1d3692ef952/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/libc-ab405543531da832/dep-lib-libc +0 -0
- package/rust/target/release/.fingerprint/libc-ab405543531da832/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/libc-ab405543531da832/lib-libc +1 -0
- package/rust/target/release/.fingerprint/libc-ab405543531da832/lib-libc.json +1 -0
- package/rust/target/release/.fingerprint/log-c93c9501d50fd117/dep-lib-log +0 -0
- package/rust/target/release/.fingerprint/log-c93c9501d50fd117/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/log-c93c9501d50fd117/lib-log +1 -0
- package/rust/target/release/.fingerprint/log-c93c9501d50fd117/lib-log.json +1 -0
- package/rust/target/release/.fingerprint/matchers-aa7b66eaa02449a5/dep-lib-matchers +0 -0
- package/rust/target/release/.fingerprint/matchers-aa7b66eaa02449a5/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/matchers-aa7b66eaa02449a5/lib-matchers +1 -0
- package/rust/target/release/.fingerprint/matchers-aa7b66eaa02449a5/lib-matchers.json +1 -0
- package/rust/target/release/.fingerprint/memchr-006163bba97af52f/dep-lib-memchr +0 -0
- package/rust/target/release/.fingerprint/memchr-006163bba97af52f/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/memchr-006163bba97af52f/lib-memchr +1 -0
- package/rust/target/release/.fingerprint/memchr-006163bba97af52f/lib-memchr.json +1 -0
- package/rust/target/release/.fingerprint/nu-ansi-term-56ab27c2fee1c03f/dep-lib-nu_ansi_term +0 -0
- package/rust/target/release/.fingerprint/nu-ansi-term-56ab27c2fee1c03f/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/nu-ansi-term-56ab27c2fee1c03f/lib-nu_ansi_term +1 -0
- package/rust/target/release/.fingerprint/nu-ansi-term-56ab27c2fee1c03f/lib-nu_ansi_term.json +1 -0
- package/rust/target/release/.fingerprint/num-traits-960d689d96a427e4/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/num-traits-960d689d96a427e4/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/num-traits-a45e3ec48ef9afe7/dep-lib-num_traits +0 -0
- package/rust/target/release/.fingerprint/num-traits-a45e3ec48ef9afe7/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/num-traits-a45e3ec48ef9afe7/lib-num_traits +1 -0
- package/rust/target/release/.fingerprint/num-traits-a45e3ec48ef9afe7/lib-num_traits.json +1 -0
- package/rust/target/release/.fingerprint/num-traits-e0dbc71c6a4b5721/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/num-traits-e0dbc71c6a4b5721/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/num-traits-e0dbc71c6a4b5721/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/num-traits-e0dbc71c6a4b5721/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/once_cell-1ba5d4df66429103/dep-lib-once_cell +0 -0
- package/rust/target/release/.fingerprint/once_cell-1ba5d4df66429103/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/once_cell-1ba5d4df66429103/lib-once_cell +1 -0
- package/rust/target/release/.fingerprint/once_cell-1ba5d4df66429103/lib-once_cell.json +1 -0
- package/rust/target/release/.fingerprint/pin-project-lite-b67f60134987a063/dep-lib-pin_project_lite +0 -0
- package/rust/target/release/.fingerprint/pin-project-lite-b67f60134987a063/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/pin-project-lite-b67f60134987a063/lib-pin_project_lite +1 -0
- package/rust/target/release/.fingerprint/pin-project-lite-b67f60134987a063/lib-pin_project_lite.json +1 -0
- package/rust/target/release/.fingerprint/proc-macro2-676678c45d7cb9a8/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/proc-macro2-676678c45d7cb9a8/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/proc-macro2-c5165b0726856761/dep-lib-proc_macro2 +0 -0
- package/rust/target/release/.fingerprint/proc-macro2-c5165b0726856761/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/proc-macro2-c5165b0726856761/lib-proc_macro2 +1 -0
- package/rust/target/release/.fingerprint/proc-macro2-c5165b0726856761/lib-proc_macro2.json +1 -0
- package/rust/target/release/.fingerprint/proc-macro2-c72a330c78f30f59/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/proc-macro2-c72a330c78f30f59/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/proc-macro2-c72a330c78f30f59/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/proc-macro2-c72a330c78f30f59/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/quote-0c85187123c64982/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/quote-0c85187123c64982/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/quote-0c85187123c64982/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/quote-0c85187123c64982/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/quote-8e84519b0b657fd1/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/quote-8e84519b0b657fd1/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/quote-93e086ea3561ec28/dep-lib-quote +0 -0
- package/rust/target/release/.fingerprint/quote-93e086ea3561ec28/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/quote-93e086ea3561ec28/lib-quote +1 -0
- package/rust/target/release/.fingerprint/quote-93e086ea3561ec28/lib-quote.json +1 -0
- package/rust/target/release/.fingerprint/regex-automata-f8d8efe517e98888/dep-lib-regex_automata +0 -0
- package/rust/target/release/.fingerprint/regex-automata-f8d8efe517e98888/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/regex-automata-f8d8efe517e98888/lib-regex_automata +1 -0
- package/rust/target/release/.fingerprint/regex-automata-f8d8efe517e98888/lib-regex_automata.json +1 -0
- package/rust/target/release/.fingerprint/regex-syntax-eeca859592595703/dep-lib-regex_syntax +0 -0
- package/rust/target/release/.fingerprint/regex-syntax-eeca859592595703/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/regex-syntax-eeca859592595703/lib-regex_syntax +1 -0
- package/rust/target/release/.fingerprint/regex-syntax-eeca859592595703/lib-regex_syntax.json +1 -0
- package/rust/target/release/.fingerprint/serde-a5bb7470cea0daed/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/serde-a5bb7470cea0daed/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/serde-a5bb7470cea0daed/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/serde-a5bb7470cea0daed/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/serde-ab5bca82c15e72e0/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/serde-ab5bca82c15e72e0/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/serde-e58bd660ffca77fb/dep-lib-serde +0 -0
- package/rust/target/release/.fingerprint/serde-e58bd660ffca77fb/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/serde-e58bd660ffca77fb/lib-serde +1 -0
- package/rust/target/release/.fingerprint/serde-e58bd660ffca77fb/lib-serde.json +1 -0
- package/rust/target/release/.fingerprint/serde_core-9ebabaac0dd9657b/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/serde_core-9ebabaac0dd9657b/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/serde_core-bcf1f7226267a515/dep-lib-serde_core +0 -0
- package/rust/target/release/.fingerprint/serde_core-bcf1f7226267a515/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/serde_core-bcf1f7226267a515/lib-serde_core +1 -0
- package/rust/target/release/.fingerprint/serde_core-bcf1f7226267a515/lib-serde_core.json +1 -0
- package/rust/target/release/.fingerprint/serde_core-f6e34062ef5ef617/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/serde_core-f6e34062ef5ef617/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/serde_core-f6e34062ef5ef617/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/serde_core-f6e34062ef5ef617/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/serde_derive-739fe6b99d6b7650/dep-lib-serde_derive +0 -0
- package/rust/target/release/.fingerprint/serde_derive-739fe6b99d6b7650/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/serde_derive-739fe6b99d6b7650/lib-serde_derive +1 -0
- package/rust/target/release/.fingerprint/serde_derive-739fe6b99d6b7650/lib-serde_derive.json +1 -0
- package/rust/target/release/.fingerprint/serde_json-b567bd1bd6d9b444/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/serde_json-b567bd1bd6d9b444/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/serde_json-b567bd1bd6d9b444/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/serde_json-b567bd1bd6d9b444/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/serde_json-c2477e5e18fc5e07/dep-lib-serde_json +0 -0
- package/rust/target/release/.fingerprint/serde_json-c2477e5e18fc5e07/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/serde_json-c2477e5e18fc5e07/lib-serde_json +1 -0
- package/rust/target/release/.fingerprint/serde_json-c2477e5e18fc5e07/lib-serde_json.json +1 -0
- package/rust/target/release/.fingerprint/serde_json-c2d2dc29d8c706f7/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/serde_json-c2d2dc29d8c706f7/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/sha2-c490257262e4006f/dep-lib-sha2 +0 -0
- package/rust/target/release/.fingerprint/sha2-c490257262e4006f/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/sha2-c490257262e4006f/lib-sha2 +1 -0
- package/rust/target/release/.fingerprint/sha2-c490257262e4006f/lib-sha2.json +1 -0
- package/rust/target/release/.fingerprint/sharded-slab-a9b081fca5df5776/dep-lib-sharded_slab +0 -0
- package/rust/target/release/.fingerprint/sharded-slab-a9b081fca5df5776/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/sharded-slab-a9b081fca5df5776/lib-sharded_slab +1 -0
- package/rust/target/release/.fingerprint/sharded-slab-a9b081fca5df5776/lib-sharded_slab.json +1 -0
- package/rust/target/release/.fingerprint/smallvec-c80f5e02fc44f75f/dep-lib-smallvec +0 -0
- package/rust/target/release/.fingerprint/smallvec-c80f5e02fc44f75f/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/smallvec-c80f5e02fc44f75f/lib-smallvec +1 -0
- package/rust/target/release/.fingerprint/smallvec-c80f5e02fc44f75f/lib-smallvec.json +1 -0
- package/rust/target/release/.fingerprint/syn-e3c4fb9c9765d69d/dep-lib-syn +0 -0
- package/rust/target/release/.fingerprint/syn-e3c4fb9c9765d69d/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/syn-e3c4fb9c9765d69d/lib-syn +1 -0
- package/rust/target/release/.fingerprint/syn-e3c4fb9c9765d69d/lib-syn.json +1 -0
- package/rust/target/release/.fingerprint/thread_local-36b9b6c1f23ac9ba/dep-lib-thread_local +0 -0
- package/rust/target/release/.fingerprint/thread_local-36b9b6c1f23ac9ba/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/thread_local-36b9b6c1f23ac9ba/lib-thread_local +1 -0
- package/rust/target/release/.fingerprint/thread_local-36b9b6c1f23ac9ba/lib-thread_local.json +1 -0
- package/rust/target/release/.fingerprint/tracing-245af3c71ea35ecd/dep-lib-tracing +0 -0
- package/rust/target/release/.fingerprint/tracing-245af3c71ea35ecd/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/tracing-245af3c71ea35ecd/lib-tracing +1 -0
- package/rust/target/release/.fingerprint/tracing-245af3c71ea35ecd/lib-tracing.json +1 -0
- package/rust/target/release/.fingerprint/tracing-attributes-4b033b2e5598485c/dep-lib-tracing_attributes +0 -0
- package/rust/target/release/.fingerprint/tracing-attributes-4b033b2e5598485c/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/tracing-attributes-4b033b2e5598485c/lib-tracing_attributes +1 -0
- package/rust/target/release/.fingerprint/tracing-attributes-4b033b2e5598485c/lib-tracing_attributes.json +1 -0
- package/rust/target/release/.fingerprint/tracing-core-251b2d04fd4b7c92/dep-lib-tracing_core +0 -0
- package/rust/target/release/.fingerprint/tracing-core-251b2d04fd4b7c92/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/tracing-core-251b2d04fd4b7c92/lib-tracing_core +1 -0
- package/rust/target/release/.fingerprint/tracing-core-251b2d04fd4b7c92/lib-tracing_core.json +1 -0
- package/rust/target/release/.fingerprint/tracing-log-33fc70c9a47f5b59/dep-lib-tracing_log +0 -0
- package/rust/target/release/.fingerprint/tracing-log-33fc70c9a47f5b59/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/tracing-log-33fc70c9a47f5b59/lib-tracing_log +1 -0
- package/rust/target/release/.fingerprint/tracing-log-33fc70c9a47f5b59/lib-tracing_log.json +1 -0
- package/rust/target/release/.fingerprint/tracing-subscriber-bde0d5b2c127b5ce/dep-lib-tracing_subscriber +0 -0
- package/rust/target/release/.fingerprint/tracing-subscriber-bde0d5b2c127b5ce/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/tracing-subscriber-bde0d5b2c127b5ce/lib-tracing_subscriber +1 -0
- package/rust/target/release/.fingerprint/tracing-subscriber-bde0d5b2c127b5ce/lib-tracing_subscriber.json +1 -0
- package/rust/target/release/.fingerprint/typenum-3cdc48836e5238cf/dep-lib-typenum +0 -0
- package/rust/target/release/.fingerprint/typenum-3cdc48836e5238cf/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/typenum-3cdc48836e5238cf/lib-typenum +1 -0
- package/rust/target/release/.fingerprint/typenum-3cdc48836e5238cf/lib-typenum.json +1 -0
- package/rust/target/release/.fingerprint/typenum-a51a68ea7cdca0a3/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/typenum-a51a68ea7cdca0a3/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/typenum-be711a78e8981f2a/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/typenum-be711a78e8981f2a/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/typenum-be711a78e8981f2a/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/typenum-be711a78e8981f2a/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/unicode-ident-b6ef9a2188f165a7/dep-lib-unicode_ident +0 -0
- package/rust/target/release/.fingerprint/unicode-ident-b6ef9a2188f165a7/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/unicode-ident-b6ef9a2188f165a7/lib-unicode_ident +1 -0
- package/rust/target/release/.fingerprint/unicode-ident-b6ef9a2188f165a7/lib-unicode_ident.json +1 -0
- package/rust/target/release/.fingerprint/version_check-8de6a4a01730f3fc/dep-lib-version_check +0 -0
- package/rust/target/release/.fingerprint/version_check-8de6a4a01730f3fc/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/version_check-8de6a4a01730f3fc/lib-version_check +1 -0
- package/rust/target/release/.fingerprint/version_check-8de6a4a01730f3fc/lib-version_check.json +1 -0
- package/rust/target/release/.fingerprint/vps-manager-core-32881497d3c7a1d5/dep-lib-vps_manager_core +0 -0
- package/rust/target/release/.fingerprint/vps-manager-core-32881497d3c7a1d5/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/vps-manager-core-32881497d3c7a1d5/lib-vps_manager_core +1 -0
- package/rust/target/release/.fingerprint/vps-manager-core-32881497d3c7a1d5/lib-vps_manager_core.json +1 -0
- package/rust/target/release/.fingerprint/vps-manager-core-52dac2e61aad8f4b/bin-vps-manager-core +1 -0
- package/rust/target/release/.fingerprint/vps-manager-core-52dac2e61aad8f4b/bin-vps-manager-core.json +1 -0
- package/rust/target/release/.fingerprint/vps-manager-core-52dac2e61aad8f4b/dep-bin-vps-manager-core +0 -0
- package/rust/target/release/.fingerprint/vps-manager-core-52dac2e61aad8f4b/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/zmij-4431e0d331234992/dep-lib-zmij +0 -0
- package/rust/target/release/.fingerprint/zmij-4431e0d331234992/invoked.timestamp +1 -0
- package/rust/target/release/.fingerprint/zmij-4431e0d331234992/lib-zmij +1 -0
- package/rust/target/release/.fingerprint/zmij-4431e0d331234992/lib-zmij.json +1 -0
- package/rust/target/release/.fingerprint/zmij-7f6b81acea9a20e3/run-build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/zmij-7f6b81acea9a20e3/run-build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/zmij-bceeb0e6919120f9/build-script-build-script-build +1 -0
- package/rust/target/release/.fingerprint/zmij-bceeb0e6919120f9/build-script-build-script-build.json +1 -0
- package/rust/target/release/.fingerprint/zmij-bceeb0e6919120f9/dep-build-script-build-script-build +0 -0
- package/rust/target/release/.fingerprint/zmij-bceeb0e6919120f9/invoked.timestamp +1 -0
- package/rust/target/release/build/generic-array-8ce40917f76412b1/build-script-build +0 -0
- package/rust/target/release/build/generic-array-8ce40917f76412b1/build_script_build-8ce40917f76412b1 +0 -0
- package/rust/target/release/build/generic-array-8ce40917f76412b1/build_script_build-8ce40917f76412b1.d +5 -0
- package/rust/target/release/build/generic-array-e69e3a44765f6d58/invoked.timestamp +1 -0
- package/rust/target/release/build/generic-array-e69e3a44765f6d58/output +1 -0
- package/rust/target/release/build/generic-array-e69e3a44765f6d58/root-output +1 -0
- package/rust/target/release/build/generic-array-e69e3a44765f6d58/stderr +0 -0
- package/rust/target/release/build/libc-1e68faf72d2d6d6a/build-script-build +0 -0
- package/rust/target/release/build/libc-1e68faf72d2d6d6a/build_script_build-1e68faf72d2d6d6a +0 -0
- package/rust/target/release/build/libc-1e68faf72d2d6d6a/build_script_build-1e68faf72d2d6d6a.d +5 -0
- package/rust/target/release/build/libc-7781f1d3692ef952/invoked.timestamp +1 -0
- package/rust/target/release/build/libc-7781f1d3692ef952/output +25 -0
- package/rust/target/release/build/libc-7781f1d3692ef952/root-output +1 -0
- package/rust/target/release/build/libc-7781f1d3692ef952/stderr +0 -0
- package/rust/target/release/build/num-traits-960d689d96a427e4/invoked.timestamp +1 -0
- package/rust/target/release/build/num-traits-960d689d96a427e4/output +3 -0
- package/rust/target/release/build/num-traits-960d689d96a427e4/root-output +1 -0
- package/rust/target/release/build/num-traits-960d689d96a427e4/stderr +0 -0
- package/rust/target/release/build/num-traits-e0dbc71c6a4b5721/build-script-build +0 -0
- package/rust/target/release/build/num-traits-e0dbc71c6a4b5721/build_script_build-e0dbc71c6a4b5721 +0 -0
- package/rust/target/release/build/num-traits-e0dbc71c6a4b5721/build_script_build-e0dbc71c6a4b5721.d +5 -0
- package/rust/target/release/build/proc-macro2-676678c45d7cb9a8/invoked.timestamp +1 -0
- package/rust/target/release/build/proc-macro2-676678c45d7cb9a8/output +23 -0
- package/rust/target/release/build/proc-macro2-676678c45d7cb9a8/root-output +1 -0
- package/rust/target/release/build/proc-macro2-676678c45d7cb9a8/stderr +0 -0
- package/rust/target/release/build/proc-macro2-c72a330c78f30f59/build-script-build +0 -0
- package/rust/target/release/build/proc-macro2-c72a330c78f30f59/build_script_build-c72a330c78f30f59 +0 -0
- package/rust/target/release/build/proc-macro2-c72a330c78f30f59/build_script_build-c72a330c78f30f59.d +5 -0
- package/rust/target/release/build/quote-0c85187123c64982/build-script-build +0 -0
- package/rust/target/release/build/quote-0c85187123c64982/build_script_build-0c85187123c64982 +0 -0
- package/rust/target/release/build/quote-0c85187123c64982/build_script_build-0c85187123c64982.d +5 -0
- package/rust/target/release/build/quote-8e84519b0b657fd1/invoked.timestamp +1 -0
- package/rust/target/release/build/quote-8e84519b0b657fd1/output +2 -0
- package/rust/target/release/build/quote-8e84519b0b657fd1/root-output +1 -0
- package/rust/target/release/build/quote-8e84519b0b657fd1/stderr +0 -0
- package/rust/target/release/build/serde-a5bb7470cea0daed/build-script-build +0 -0
- package/rust/target/release/build/serde-a5bb7470cea0daed/build_script_build-a5bb7470cea0daed +0 -0
- package/rust/target/release/build/serde-a5bb7470cea0daed/build_script_build-a5bb7470cea0daed.d +5 -0
- package/rust/target/release/build/serde-ab5bca82c15e72e0/invoked.timestamp +1 -0
- package/rust/target/release/build/serde-ab5bca82c15e72e0/out/private.rs +6 -0
- package/rust/target/release/build/serde-ab5bca82c15e72e0/output +13 -0
- package/rust/target/release/build/serde-ab5bca82c15e72e0/root-output +1 -0
- package/rust/target/release/build/serde-ab5bca82c15e72e0/stderr +0 -0
- package/rust/target/release/build/serde_core-9ebabaac0dd9657b/invoked.timestamp +1 -0
- package/rust/target/release/build/serde_core-9ebabaac0dd9657b/out/private.rs +5 -0
- package/rust/target/release/build/serde_core-9ebabaac0dd9657b/output +11 -0
- package/rust/target/release/build/serde_core-9ebabaac0dd9657b/root-output +1 -0
- package/rust/target/release/build/serde_core-9ebabaac0dd9657b/stderr +0 -0
- package/rust/target/release/build/serde_core-f6e34062ef5ef617/build-script-build +0 -0
- package/rust/target/release/build/serde_core-f6e34062ef5ef617/build_script_build-f6e34062ef5ef617 +0 -0
- package/rust/target/release/build/serde_core-f6e34062ef5ef617/build_script_build-f6e34062ef5ef617.d +5 -0
- package/rust/target/release/build/serde_json-b567bd1bd6d9b444/build-script-build +0 -0
- package/rust/target/release/build/serde_json-b567bd1bd6d9b444/build_script_build-b567bd1bd6d9b444 +0 -0
- package/rust/target/release/build/serde_json-b567bd1bd6d9b444/build_script_build-b567bd1bd6d9b444.d +5 -0
- package/rust/target/release/build/serde_json-c2d2dc29d8c706f7/invoked.timestamp +1 -0
- package/rust/target/release/build/serde_json-c2d2dc29d8c706f7/output +3 -0
- package/rust/target/release/build/serde_json-c2d2dc29d8c706f7/root-output +1 -0
- package/rust/target/release/build/serde_json-c2d2dc29d8c706f7/stderr +0 -0
- package/rust/target/release/build/typenum-a51a68ea7cdca0a3/invoked.timestamp +1 -0
- package/rust/target/release/build/typenum-a51a68ea7cdca0a3/out/tests.rs +20563 -0
- package/rust/target/release/build/typenum-a51a68ea7cdca0a3/output +1 -0
- package/rust/target/release/build/typenum-a51a68ea7cdca0a3/root-output +1 -0
- package/rust/target/release/build/typenum-a51a68ea7cdca0a3/stderr +0 -0
- package/rust/target/release/build/typenum-be711a78e8981f2a/build-script-build +0 -0
- package/rust/target/release/build/typenum-be711a78e8981f2a/build_script_build-be711a78e8981f2a +0 -0
- package/rust/target/release/build/typenum-be711a78e8981f2a/build_script_build-be711a78e8981f2a.d +5 -0
- package/rust/target/release/build/zmij-7f6b81acea9a20e3/invoked.timestamp +1 -0
- package/rust/target/release/build/zmij-7f6b81acea9a20e3/output +3 -0
- package/rust/target/release/build/zmij-7f6b81acea9a20e3/root-output +1 -0
- package/rust/target/release/build/zmij-7f6b81acea9a20e3/stderr +0 -0
- package/rust/target/release/build/zmij-bceeb0e6919120f9/build-script-build +0 -0
- package/rust/target/release/build/zmij-bceeb0e6919120f9/build_script_build-bceeb0e6919120f9 +0 -0
- package/rust/target/release/build/zmij-bceeb0e6919120f9/build_script_build-bceeb0e6919120f9.d +5 -0
- package/rust/target/release/deps/autocfg-1b3bd8a7b74bd5b4.d +10 -0
- package/rust/target/release/deps/block_buffer-cf3be8244cc78328.d +8 -0
- package/rust/target/release/deps/cfg_if-e24d4f7b470ac1f7.d +7 -0
- package/rust/target/release/deps/chrono-c2c1d826849da6b8.d +37 -0
- package/rust/target/release/deps/core_foundation_sys-bdb199b1a618a85a.d +46 -0
- package/rust/target/release/deps/cpufeatures-044997a43e932cd2.d +8 -0
- package/rust/target/release/deps/crypto_common-ff4fa5d0a5e0455d.d +7 -0
- package/rust/target/release/deps/digest-6037e23ec7b0997e.d +13 -0
- package/rust/target/release/deps/generic_array-6939b76bf342e446.d +13 -0
- package/rust/target/release/deps/iana_time_zone-7907cd9c1810cf88.d +9 -0
- package/rust/target/release/deps/itoa-a9b94ec9a7564538.d +8 -0
- package/rust/target/release/deps/lazy_static-79337840520ffaab.d +8 -0
- package/rust/target/release/deps/libautocfg-1b3bd8a7b74bd5b4.rlib +0 -0
- package/rust/target/release/deps/libautocfg-1b3bd8a7b74bd5b4.rmeta +0 -0
- package/rust/target/release/deps/libblock_buffer-cf3be8244cc78328.rlib +0 -0
- package/rust/target/release/deps/libblock_buffer-cf3be8244cc78328.rmeta +0 -0
- package/rust/target/release/deps/libc-ab405543531da832.d +45 -0
- package/rust/target/release/deps/libcfg_if-e24d4f7b470ac1f7.rlib +0 -0
- package/rust/target/release/deps/libcfg_if-e24d4f7b470ac1f7.rmeta +0 -0
- package/rust/target/release/deps/libchrono-c2c1d826849da6b8.rlib +0 -0
- package/rust/target/release/deps/libchrono-c2c1d826849da6b8.rmeta +0 -0
- package/rust/target/release/deps/libcore_foundation_sys-bdb199b1a618a85a.rlib +0 -0
- package/rust/target/release/deps/libcore_foundation_sys-bdb199b1a618a85a.rmeta +0 -0
- package/rust/target/release/deps/libcpufeatures-044997a43e932cd2.rlib +0 -0
- package/rust/target/release/deps/libcpufeatures-044997a43e932cd2.rmeta +0 -0
- package/rust/target/release/deps/libcrypto_common-ff4fa5d0a5e0455d.rlib +0 -0
- package/rust/target/release/deps/libcrypto_common-ff4fa5d0a5e0455d.rmeta +0 -0
- package/rust/target/release/deps/libdigest-6037e23ec7b0997e.rlib +0 -0
- package/rust/target/release/deps/libdigest-6037e23ec7b0997e.rmeta +0 -0
- package/rust/target/release/deps/libgeneric_array-6939b76bf342e446.rlib +0 -0
- package/rust/target/release/deps/libgeneric_array-6939b76bf342e446.rmeta +0 -0
- package/rust/target/release/deps/libiana_time_zone-7907cd9c1810cf88.rlib +0 -0
- package/rust/target/release/deps/libiana_time_zone-7907cd9c1810cf88.rmeta +0 -0
- package/rust/target/release/deps/libitoa-a9b94ec9a7564538.rlib +0 -0
- package/rust/target/release/deps/libitoa-a9b94ec9a7564538.rmeta +0 -0
- package/rust/target/release/deps/liblazy_static-79337840520ffaab.rlib +0 -0
- package/rust/target/release/deps/liblazy_static-79337840520ffaab.rmeta +0 -0
- package/rust/target/release/deps/liblibc-ab405543531da832.rlib +0 -0
- package/rust/target/release/deps/liblibc-ab405543531da832.rmeta +0 -0
- package/rust/target/release/deps/liblog-c93c9501d50fd117.rlib +0 -0
- package/rust/target/release/deps/liblog-c93c9501d50fd117.rmeta +0 -0
- package/rust/target/release/deps/libmatchers-aa7b66eaa02449a5.rlib +0 -0
- package/rust/target/release/deps/libmatchers-aa7b66eaa02449a5.rmeta +0 -0
- package/rust/target/release/deps/libmemchr-006163bba97af52f.rlib +0 -0
- package/rust/target/release/deps/libmemchr-006163bba97af52f.rmeta +0 -0
- package/rust/target/release/deps/libnu_ansi_term-56ab27c2fee1c03f.rlib +0 -0
- package/rust/target/release/deps/libnu_ansi_term-56ab27c2fee1c03f.rmeta +0 -0
- package/rust/target/release/deps/libnum_traits-a45e3ec48ef9afe7.rlib +0 -0
- package/rust/target/release/deps/libnum_traits-a45e3ec48ef9afe7.rmeta +0 -0
- package/rust/target/release/deps/libonce_cell-1ba5d4df66429103.rlib +0 -0
- package/rust/target/release/deps/libonce_cell-1ba5d4df66429103.rmeta +0 -0
- package/rust/target/release/deps/libpin_project_lite-b67f60134987a063.rlib +0 -0
- package/rust/target/release/deps/libpin_project_lite-b67f60134987a063.rmeta +0 -0
- package/rust/target/release/deps/libproc_macro2-c5165b0726856761.rlib +0 -0
- package/rust/target/release/deps/libproc_macro2-c5165b0726856761.rmeta +0 -0
- package/rust/target/release/deps/libquote-93e086ea3561ec28.rlib +0 -0
- package/rust/target/release/deps/libquote-93e086ea3561ec28.rmeta +0 -0
- package/rust/target/release/deps/libregex_automata-f8d8efe517e98888.rlib +0 -0
- package/rust/target/release/deps/libregex_automata-f8d8efe517e98888.rmeta +0 -0
- package/rust/target/release/deps/libregex_syntax-eeca859592595703.rlib +0 -0
- package/rust/target/release/deps/libregex_syntax-eeca859592595703.rmeta +0 -0
- package/rust/target/release/deps/libserde-e58bd660ffca77fb.rlib +0 -0
- package/rust/target/release/deps/libserde-e58bd660ffca77fb.rmeta +0 -0
- package/rust/target/release/deps/libserde_core-bcf1f7226267a515.rlib +0 -0
- package/rust/target/release/deps/libserde_core-bcf1f7226267a515.rmeta +0 -0
- package/rust/target/release/deps/libserde_derive-739fe6b99d6b7650.dylib +0 -0
- package/rust/target/release/deps/libserde_json-c2477e5e18fc5e07.rlib +0 -0
- package/rust/target/release/deps/libserde_json-c2477e5e18fc5e07.rmeta +0 -0
- package/rust/target/release/deps/libsha2-c490257262e4006f.rlib +0 -0
- package/rust/target/release/deps/libsha2-c490257262e4006f.rmeta +0 -0
- package/rust/target/release/deps/libsharded_slab-a9b081fca5df5776.rlib +0 -0
- package/rust/target/release/deps/libsharded_slab-a9b081fca5df5776.rmeta +0 -0
- package/rust/target/release/deps/libsmallvec-c80f5e02fc44f75f.rlib +0 -0
- package/rust/target/release/deps/libsmallvec-c80f5e02fc44f75f.rmeta +0 -0
- package/rust/target/release/deps/libsyn-e3c4fb9c9765d69d.rlib +0 -0
- package/rust/target/release/deps/libsyn-e3c4fb9c9765d69d.rmeta +0 -0
- package/rust/target/release/deps/libthread_local-36b9b6c1f23ac9ba.rlib +0 -0
- package/rust/target/release/deps/libthread_local-36b9b6c1f23ac9ba.rmeta +0 -0
- package/rust/target/release/deps/libtracing-245af3c71ea35ecd.rlib +0 -0
- package/rust/target/release/deps/libtracing-245af3c71ea35ecd.rmeta +0 -0
- package/rust/target/release/deps/libtracing_attributes-4b033b2e5598485c.dylib +0 -0
- package/rust/target/release/deps/libtracing_core-251b2d04fd4b7c92.rlib +0 -0
- package/rust/target/release/deps/libtracing_core-251b2d04fd4b7c92.rmeta +0 -0
- package/rust/target/release/deps/libtracing_log-33fc70c9a47f5b59.rlib +0 -0
- package/rust/target/release/deps/libtracing_log-33fc70c9a47f5b59.rmeta +0 -0
- package/rust/target/release/deps/libtracing_subscriber-bde0d5b2c127b5ce.rlib +0 -0
- package/rust/target/release/deps/libtracing_subscriber-bde0d5b2c127b5ce.rmeta +0 -0
- package/rust/target/release/deps/libtypenum-3cdc48836e5238cf.rlib +0 -0
- package/rust/target/release/deps/libtypenum-3cdc48836e5238cf.rmeta +0 -0
- package/rust/target/release/deps/libunicode_ident-b6ef9a2188f165a7.rlib +0 -0
- package/rust/target/release/deps/libunicode_ident-b6ef9a2188f165a7.rmeta +0 -0
- package/rust/target/release/deps/libversion_check-8de6a4a01730f3fc.rlib +0 -0
- package/rust/target/release/deps/libversion_check-8de6a4a01730f3fc.rmeta +0 -0
- package/rust/target/release/deps/libvps_manager_core-32881497d3c7a1d5.rlib +0 -0
- package/rust/target/release/deps/libvps_manager_core-32881497d3c7a1d5.rmeta +0 -0
- package/rust/target/release/deps/libzmij-4431e0d331234992.rlib +0 -0
- package/rust/target/release/deps/libzmij-4431e0d331234992.rmeta +0 -0
- package/rust/target/release/deps/log-c93c9501d50fd117.d +10 -0
- package/rust/target/release/deps/matchers-aa7b66eaa02449a5.d +7 -0
- package/rust/target/release/deps/memchr-006163bba97af52f.d +30 -0
- package/rust/target/release/deps/nu_ansi_term-56ab27c2fee1c03f.d +16 -0
- package/rust/target/release/deps/num_traits-a45e3ec48ef9afe7.d +25 -0
- package/rust/target/release/deps/once_cell-1ba5d4df66429103.d +9 -0
- package/rust/target/release/deps/pin_project_lite-b67f60134987a063.d +7 -0
- package/rust/target/release/deps/proc_macro2-c5165b0726856761.d +17 -0
- package/rust/target/release/deps/quote-93e086ea3561ec28.d +13 -0
- package/rust/target/release/deps/regex_automata-f8d8efe517e98888.d +57 -0
- package/rust/target/release/deps/regex_syntax-eeca859592595703.d +25 -0
- package/rust/target/release/deps/serde-e58bd660ffca77fb.d +14 -0
- package/rust/target/release/deps/serde_core-bcf1f7226267a515.d +27 -0
- package/rust/target/release/deps/serde_derive-739fe6b99d6b7650.d +34 -0
- package/rust/target/release/deps/serde_json-c2477e5e18fc5e07.d +22 -0
- package/rust/target/release/deps/sha2-c490257262e4006f.d +13 -0
- package/rust/target/release/deps/sharded_slab-a9b081fca5df5776.d +19 -0
- package/rust/target/release/deps/smallvec-c80f5e02fc44f75f.d +7 -0
- package/rust/target/release/deps/syn-e3c4fb9c9765d69d.d +58 -0
- package/rust/target/release/deps/thread_local-36b9b6c1f23ac9ba.d +10 -0
- package/rust/target/release/deps/tracing-245af3c71ea35ecd.d +14 -0
- package/rust/target/release/deps/tracing_attributes-4b033b2e5598485c.d +7 -0
- package/rust/target/release/deps/tracing_core-251b2d04fd4b7c92.d +16 -0
- package/rust/target/release/deps/tracing_log-33fc70c9a47f5b59.d +8 -0
- package/rust/target/release/deps/tracing_subscriber-bde0d5b2c127b5ce.d +42 -0
- package/rust/target/release/deps/typenum-3cdc48836e5238cf.d +18 -0
- package/rust/target/release/deps/unicode_ident-b6ef9a2188f165a7.d +8 -0
- package/rust/target/release/deps/version_check-8de6a4a01730f3fc.d +10 -0
- package/rust/target/release/deps/vps_manager_core-32881497d3c7a1d5.d +8 -0
- package/rust/target/release/deps/vps_manager_core-52dac2e61aad8f4b +0 -0
- package/rust/target/release/deps/vps_manager_core-52dac2e61aad8f4b.d +5 -0
- package/rust/target/release/deps/zmij-4431e0d331234992.d +8 -0
- package/rust/target/release/libvps_manager_core.d +1 -0
- package/rust/target/release/libvps_manager_core.rlib +0 -0
- package/rust/target/release/vps-manager-core +0 -0
- package/rust/target/release/vps-manager-core.d +1 -0
- package/src/bridge.ts +419 -0
- package/src/config.ts +192 -0
- package/src/health-server.ts +280 -0
- package/src/index.ts +860 -0
- package/src/service-manager.ts +216 -0
package/README.md
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# PkgOps
|
|
2
|
+
|
|
3
|
+
Package operations CLI that installs `@ebowwa/*` npm packages and manages systemd services.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @ebowwa/pkg-ops
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
### Package Management
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
# Install a package
|
|
17
|
+
pkg-ops install @ebowwa/stack@0.7.12
|
|
18
|
+
|
|
19
|
+
# Update a package
|
|
20
|
+
pkg-ops update @ebowwa/stack
|
|
21
|
+
|
|
22
|
+
# Update all managed packages
|
|
23
|
+
pkg-ops update-all
|
|
24
|
+
|
|
25
|
+
# List installed packages
|
|
26
|
+
pkg-ops list
|
|
27
|
+
|
|
28
|
+
# Rollback a package
|
|
29
|
+
pkg-ops rollback @ebowwa/stack
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Service Management
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pkg-ops service start stack
|
|
36
|
+
pkg-ops service stop stack
|
|
37
|
+
pkg-ops service restart stack
|
|
38
|
+
pkg-ops service status stack
|
|
39
|
+
pkg-ops service logs stack
|
|
40
|
+
pkg-ops service enable stack
|
|
41
|
+
pkg-ops service disable stack
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Health Checks
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
# Check all services
|
|
48
|
+
pkg-ops health
|
|
49
|
+
|
|
50
|
+
# Check specific service
|
|
51
|
+
pkg-ops health stack
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Configuration
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Show config
|
|
58
|
+
pkg-ops config show
|
|
59
|
+
|
|
60
|
+
# Set a config value
|
|
61
|
+
pkg-ops config set @ebowwa/stack version 0.7.13
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### Verification & Audit
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
# Verify package integrity
|
|
68
|
+
pkg-ops verify @ebowwa/stack
|
|
69
|
+
|
|
70
|
+
# Check for vulnerabilities
|
|
71
|
+
pkg-ops audit
|
|
72
|
+
|
|
73
|
+
# Show bundle sizes
|
|
74
|
+
pkg-ops sizes
|
|
75
|
+
|
|
76
|
+
# Compare local vs VPS versions
|
|
77
|
+
pkg-ops sync-status --local-path ./package.json
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Configuration
|
|
81
|
+
|
|
82
|
+
Config file: `/etc/pkg-ops/config.json`
|
|
83
|
+
|
|
84
|
+
Environment override: `PKG_OPS_CONFIG=/custom/path/config.json`
|
|
85
|
+
|
|
86
|
+
## Development
|
|
87
|
+
|
|
88
|
+
```bash
|
|
89
|
+
# Build TypeScript
|
|
90
|
+
bun run build
|
|
91
|
+
|
|
92
|
+
# Build Rust core
|
|
93
|
+
bun run build:rust
|
|
94
|
+
|
|
95
|
+
# Run locally
|
|
96
|
+
bun run dev
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Publishing
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
bun run build
|
|
103
|
+
bun publish
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## License
|
|
107
|
+
|
|
108
|
+
MIT
|
package/dist/bridge.d.ts
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bridge to Rust worker for package operations.
|
|
3
|
+
*
|
|
4
|
+
* Communicates with the Rust core via JSON-RPC 2.0 over stdin/stdout.
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { RustBridge } from "@ebowwa/pkg-ops/bridge";
|
|
9
|
+
*
|
|
10
|
+
* const bridge = new RustBridge();
|
|
11
|
+
* await bridge.start();
|
|
12
|
+
*
|
|
13
|
+
* // Install a package
|
|
14
|
+
* const result = await bridge.install("@ebowwa/stack", "0.7.12");
|
|
15
|
+
* console.log(result);
|
|
16
|
+
*
|
|
17
|
+
* // List packages
|
|
18
|
+
* const packages = await bridge.list();
|
|
19
|
+
*
|
|
20
|
+
* await bridge.stop();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
export interface InstallResult {
|
|
24
|
+
success: boolean;
|
|
25
|
+
version: string;
|
|
26
|
+
previousVersion?: string;
|
|
27
|
+
message: string;
|
|
28
|
+
}
|
|
29
|
+
export interface PackageInfo {
|
|
30
|
+
name: string;
|
|
31
|
+
version: string;
|
|
32
|
+
installed: boolean;
|
|
33
|
+
service?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface RollbackResult {
|
|
36
|
+
success: boolean;
|
|
37
|
+
previousVersion: string;
|
|
38
|
+
currentVersion: string;
|
|
39
|
+
message: string;
|
|
40
|
+
}
|
|
41
|
+
export interface HealthCheckResult {
|
|
42
|
+
healthy: boolean;
|
|
43
|
+
services: Array<{
|
|
44
|
+
name: string;
|
|
45
|
+
status: string;
|
|
46
|
+
pid: number;
|
|
47
|
+
}>;
|
|
48
|
+
}
|
|
49
|
+
export interface VerifyResult {
|
|
50
|
+
packageName: string;
|
|
51
|
+
version: string;
|
|
52
|
+
success: boolean;
|
|
53
|
+
distExists: boolean;
|
|
54
|
+
checksum: string | null;
|
|
55
|
+
message: string;
|
|
56
|
+
}
|
|
57
|
+
export interface AuditResult {
|
|
58
|
+
packageName: string;
|
|
59
|
+
severity: string;
|
|
60
|
+
vulnerability: string;
|
|
61
|
+
description: string;
|
|
62
|
+
}
|
|
63
|
+
export interface BundleSize {
|
|
64
|
+
packageName: string;
|
|
65
|
+
version: string;
|
|
66
|
+
distSizeBytes: number;
|
|
67
|
+
fileCount: number;
|
|
68
|
+
}
|
|
69
|
+
export interface InstalledPackageInfo {
|
|
70
|
+
packageName: string;
|
|
71
|
+
version: string;
|
|
72
|
+
distSizeBytes: number | null;
|
|
73
|
+
installedAt: string | null;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Bridge to the Rust worker process.
|
|
77
|
+
*
|
|
78
|
+
* Handles JSON-RPC communication over stdin/stdout.
|
|
79
|
+
*/
|
|
80
|
+
export declare class RustBridge {
|
|
81
|
+
private process;
|
|
82
|
+
private pendingRequests;
|
|
83
|
+
private requestId;
|
|
84
|
+
private buffer;
|
|
85
|
+
/**
|
|
86
|
+
* Start the Rust worker process.
|
|
87
|
+
*/
|
|
88
|
+
start(): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Stop the Rust worker process.
|
|
91
|
+
*/
|
|
92
|
+
stop(): Promise<void>;
|
|
93
|
+
/**
|
|
94
|
+
* Install a package.
|
|
95
|
+
*/
|
|
96
|
+
install(packageName: string, version: string): Promise<InstallResult>;
|
|
97
|
+
/**
|
|
98
|
+
* Update a package to latest version.
|
|
99
|
+
*/
|
|
100
|
+
update(packageName: string): Promise<InstallResult>;
|
|
101
|
+
/**
|
|
102
|
+
* Update all managed packages.
|
|
103
|
+
*/
|
|
104
|
+
updateAll(): Promise<InstallResult[]>;
|
|
105
|
+
/**
|
|
106
|
+
* List installed packages.
|
|
107
|
+
*/
|
|
108
|
+
list(): Promise<PackageInfo[]>;
|
|
109
|
+
/**
|
|
110
|
+
* Rollback a package to previous version.
|
|
111
|
+
*/
|
|
112
|
+
rollback(packageName: string): Promise<RollbackResult>;
|
|
113
|
+
/**
|
|
114
|
+
* Check health of all services.
|
|
115
|
+
*/
|
|
116
|
+
health(): Promise<HealthCheckResult>;
|
|
117
|
+
/**
|
|
118
|
+
* Verify package integrity.
|
|
119
|
+
*/
|
|
120
|
+
verify(packageName: string): Promise<VerifyResult>;
|
|
121
|
+
/**
|
|
122
|
+
* Run vulnerability scan.
|
|
123
|
+
*/
|
|
124
|
+
audit(): Promise<AuditResult[]>;
|
|
125
|
+
/**
|
|
126
|
+
* Get bundle sizes.
|
|
127
|
+
*/
|
|
128
|
+
getBundleSizes(): Promise<BundleSize[]>;
|
|
129
|
+
/**
|
|
130
|
+
* Get detailed installed package info.
|
|
131
|
+
*/
|
|
132
|
+
getInstalledInfo(): Promise<InstalledPackageInfo[]>;
|
|
133
|
+
private getBinaryPath;
|
|
134
|
+
private sendRequest;
|
|
135
|
+
private processBuffer;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Get the default bridge instance.
|
|
139
|
+
*/
|
|
140
|
+
export declare function getBridge(): RustBridge;
|
|
141
|
+
/**
|
|
142
|
+
* Start the default bridge.
|
|
143
|
+
*/
|
|
144
|
+
export declare function startBridge(): Promise<RustBridge>;
|
|
145
|
+
/**
|
|
146
|
+
* Stop the default bridge.
|
|
147
|
+
*/
|
|
148
|
+
export declare function stopBridge(): Promise<void>;
|
|
149
|
+
//# sourceMappingURL=bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAWH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AA8BD;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,eAAe,CAIlB;IACL,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,MAAM,CAAM;IAEpB;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2C5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA6B3B;;OAEG;IACG,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAI3E;;OAEG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAIzD;;OAEG;IACG,SAAS,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAI3C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIpC;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAI5D;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,iBAAiB,CAAC;IAI1C;;OAEG;IACG,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAIxD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAIrC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAI7C;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAQzD,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,WAAW;IAwCnB,OAAO,CAAC,aAAa;CA0BtB;AAQD;;GAEG;AACH,wBAAgB,SAAS,IAAI,UAAU,CAKtC;AAED;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,CAIvD;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAKhD"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management for PkgOps.
|
|
3
|
+
*
|
|
4
|
+
* Handles reading/writing config file at /etc/pkg-ops/config.json
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { loadConfig, saveConfig, getConfigPath } from "@ebowwa/pkg-ops/config";
|
|
9
|
+
*
|
|
10
|
+
* const config = await loadConfig();
|
|
11
|
+
* console.log(config.packages);
|
|
12
|
+
*
|
|
13
|
+
* config.packages["@ebowwa/stack"] = { version: "0.7.13", service: "stack.service" };
|
|
14
|
+
* await saveConfig(config);
|
|
15
|
+
* ```
|
|
16
|
+
*/
|
|
17
|
+
export interface PackageConfig {
|
|
18
|
+
/** Package version (semver or "latest") */
|
|
19
|
+
version: string;
|
|
20
|
+
/** Associated systemd service name (without .service suffix) */
|
|
21
|
+
service?: string;
|
|
22
|
+
/** Whether to auto-start the service after install */
|
|
23
|
+
autoStart?: boolean;
|
|
24
|
+
/** Custom environment variables for the service */
|
|
25
|
+
environment?: Record<string, string>;
|
|
26
|
+
}
|
|
27
|
+
export interface PkgOpsConfig {
|
|
28
|
+
/** Managed packages */
|
|
29
|
+
packages: Record<string, PackageConfig>;
|
|
30
|
+
/** Health check HTTP port (default: 8914) */
|
|
31
|
+
healthPort?: number;
|
|
32
|
+
/** Working directory for installations (default: /opt/pkg-ops) */
|
|
33
|
+
workDir?: string;
|
|
34
|
+
/** Log level (default: "info") */
|
|
35
|
+
logLevel?: "debug" | "info" | "warn" | "error";
|
|
36
|
+
}
|
|
37
|
+
export declare const DEFAULT_CONFIG: PkgOpsConfig;
|
|
38
|
+
export declare const CONFIG_DIR = "/etc/pkg-ops";
|
|
39
|
+
export declare const CONFIG_PATH = "/etc/pkg-ops/config.json";
|
|
40
|
+
/**
|
|
41
|
+
* Get the config file path.
|
|
42
|
+
* Respects PKG_OPS_CONFIG env override.
|
|
43
|
+
*/
|
|
44
|
+
export declare function getConfigPath(): string;
|
|
45
|
+
/**
|
|
46
|
+
* Ensure config directory exists (requires sudo on most systems).
|
|
47
|
+
*/
|
|
48
|
+
export declare function ensureConfigDir(): void;
|
|
49
|
+
/**
|
|
50
|
+
* Load configuration from file.
|
|
51
|
+
* Returns default config if file doesn't exist.
|
|
52
|
+
*/
|
|
53
|
+
export declare function loadConfig(): PkgOpsConfig;
|
|
54
|
+
/**
|
|
55
|
+
* Save configuration to file.
|
|
56
|
+
* Creates directory if it doesn't exist.
|
|
57
|
+
*/
|
|
58
|
+
export declare function saveConfig(config: PkgOpsConfig): void;
|
|
59
|
+
/**
|
|
60
|
+
* Update a package in the config.
|
|
61
|
+
*/
|
|
62
|
+
export declare function updatePackageConfig(packageName: string, packageConfig: PackageConfig): PkgOpsConfig;
|
|
63
|
+
/**
|
|
64
|
+
* Remove a package from the config.
|
|
65
|
+
*/
|
|
66
|
+
export declare function removePackageConfig(packageName: string): PkgOpsConfig;
|
|
67
|
+
/**
|
|
68
|
+
* Get a specific package config.
|
|
69
|
+
*/
|
|
70
|
+
export declare function getPackageConfig(packageName: string): PackageConfig | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* List all managed packages.
|
|
73
|
+
*/
|
|
74
|
+
export declare function listManagedPackages(): Array<{
|
|
75
|
+
name: string;
|
|
76
|
+
config: PackageConfig;
|
|
77
|
+
}>;
|
|
78
|
+
/**
|
|
79
|
+
* Validate package name (must be @ebowwa/* scope).
|
|
80
|
+
*/
|
|
81
|
+
export declare function isValidPackageName(name: string): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Parse package specifier into name and version.
|
|
84
|
+
* @example
|
|
85
|
+
* parsePackageSpec("@ebowwa/stack@0.7.12") => { name: "@ebowwa/stack", version: "0.7.12" }
|
|
86
|
+
* parsePackageSpec("@ebowwa/stack") => { name: "@ebowwa/stack", version: "latest" }
|
|
87
|
+
*/
|
|
88
|
+
export declare function parsePackageSpec(spec: string): {
|
|
89
|
+
name: string;
|
|
90
|
+
version: string;
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,MAAM,WAAW,aAAa;IAC5B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACtC;AAED,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACxC,6CAA6C;IAC7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAChD;AAMD,eAAO,MAAM,cAAc,EAAE,YAK5B,CAAC;AAEF,eAAO,MAAM,UAAU,iBAAiB,CAAC;AACzC,eAAO,MAAM,WAAW,6BAA8B,CAAC;AAMvD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAKtC;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,YAAY,CAoBzC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CASrD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,aAAa,GAC3B,YAAY,CAKd;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,CAKrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAG/E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC,CAGpF;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAehF"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Health monitoring HTTP server.
|
|
3
|
+
*
|
|
4
|
+
* Provides an HTTP endpoint for health checks on port 8914 (configurable).
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* import { HealthServer, startHealthServer } from "@ebowwa/pkg-ops/health-server";
|
|
9
|
+
*
|
|
10
|
+
* // Start health server
|
|
11
|
+
* const server = await startHealthServer(8914);
|
|
12
|
+
*
|
|
13
|
+
* // Custom health checks
|
|
14
|
+
* server.addCheck("custom", async () => ({
|
|
15
|
+
* healthy: true,
|
|
16
|
+
* message: "Custom check passed",
|
|
17
|
+
* }));
|
|
18
|
+
*
|
|
19
|
+
* // Stop server
|
|
20
|
+
* await server.stop();
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
import { type ServiceStatus } from "./service-manager.js";
|
|
24
|
+
export interface HealthCheckResult {
|
|
25
|
+
/** Whether the check passed */
|
|
26
|
+
healthy: boolean;
|
|
27
|
+
/** Human-readable message */
|
|
28
|
+
message: string;
|
|
29
|
+
/** Additional data */
|
|
30
|
+
data?: Record<string, unknown>;
|
|
31
|
+
}
|
|
32
|
+
export interface ServiceHealth {
|
|
33
|
+
/** Service name */
|
|
34
|
+
name: string;
|
|
35
|
+
/** Whether the service is healthy */
|
|
36
|
+
healthy: boolean;
|
|
37
|
+
/** Service status */
|
|
38
|
+
status: ServiceStatus;
|
|
39
|
+
/** Last check timestamp */
|
|
40
|
+
checkedAt: string;
|
|
41
|
+
}
|
|
42
|
+
export interface SystemHealth {
|
|
43
|
+
/** Overall health status */
|
|
44
|
+
healthy: boolean;
|
|
45
|
+
/** All services health */
|
|
46
|
+
services: ServiceHealth[];
|
|
47
|
+
/** System uptime in seconds */
|
|
48
|
+
uptime: number;
|
|
49
|
+
/** Timestamp of this check */
|
|
50
|
+
timestamp: string;
|
|
51
|
+
}
|
|
52
|
+
export type HealthCheckFn = () => Promise<HealthCheckResult> | HealthCheckResult;
|
|
53
|
+
/**
|
|
54
|
+
* HTTP server for health monitoring.
|
|
55
|
+
*/
|
|
56
|
+
export declare class HealthServer {
|
|
57
|
+
private server;
|
|
58
|
+
private checks;
|
|
59
|
+
private startTime;
|
|
60
|
+
private port;
|
|
61
|
+
constructor(port?: number);
|
|
62
|
+
/**
|
|
63
|
+
* Start the health server.
|
|
64
|
+
*/
|
|
65
|
+
start(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Stop the health server.
|
|
68
|
+
*/
|
|
69
|
+
stop(): Promise<void>;
|
|
70
|
+
/**
|
|
71
|
+
* Add a custom health check.
|
|
72
|
+
*/
|
|
73
|
+
addCheck(name: string, check: HealthCheckFn): void;
|
|
74
|
+
/**
|
|
75
|
+
* Remove a health check.
|
|
76
|
+
*/
|
|
77
|
+
removeCheck(name: string): void;
|
|
78
|
+
/**
|
|
79
|
+
* Check health of all services or a specific service.
|
|
80
|
+
* Public method for CLI usage.
|
|
81
|
+
*/
|
|
82
|
+
checkHealth(serviceName?: string): Promise<SystemHealth | ServiceHealth | null>;
|
|
83
|
+
private handleRequest;
|
|
84
|
+
private getSystemHealth;
|
|
85
|
+
private getServiceHealth;
|
|
86
|
+
private sendJson;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Start the health server with config port.
|
|
90
|
+
*/
|
|
91
|
+
export declare function startHealthServer(port?: number): Promise<HealthServer>;
|
|
92
|
+
/**
|
|
93
|
+
* Stop the health server.
|
|
94
|
+
*/
|
|
95
|
+
export declare function stopHealthServer(): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Get the health server instance.
|
|
98
|
+
*/
|
|
99
|
+
export declare function getHealthServer(): HealthServer | null;
|
|
100
|
+
//# sourceMappingURL=health-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health-server.d.ts","sourceRoot":"","sources":["../src/health-server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAGH,OAAO,EAAqB,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAO7E,MAAM,WAAW,iBAAiB;IAChC,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,sBAAsB;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,qBAAqB;IACrB,MAAM,EAAE,aAAa,CAAC;IACtB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,4BAA4B;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,iBAAiB,CAAC,GAAG,iBAAiB,CAAC;AAMjF;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAoC;IAClD,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,GAAE,MAAa;IAI/B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3B;;OAEG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI;IAIlD;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI/B;;;OAGG;IACG,WAAW,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC;YAWvE,aAAa;YA0Bb,eAAe;YA4Cf,gBAAgB;IAmB9B,OAAO,CAAC,QAAQ;CAKjB;AAQD;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAU5E;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKtD;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* PkgOps CLI
|
|
4
|
+
*
|
|
5
|
+
* Package operations CLI that installs @ebowwa/* npm packages
|
|
6
|
+
* and manages systemd services.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```bash
|
|
10
|
+
* # Install a package
|
|
11
|
+
* pkg-ops install @ebowwa/stack@0.7.12
|
|
12
|
+
*
|
|
13
|
+
* # Service management
|
|
14
|
+
* pkg-ops service start stack
|
|
15
|
+
* pkg-ops service status stack
|
|
16
|
+
*
|
|
17
|
+
* # Health check
|
|
18
|
+
* pkg-ops health
|
|
19
|
+
*
|
|
20
|
+
* # List packages
|
|
21
|
+
* pkg-ops list
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;GAqBG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
var LJ=Object.create;var{getPrototypeOf:OJ,defineProperty:l,getOwnPropertyNames:wJ}=Object;var IJ=Object.prototype.hasOwnProperty;var RJ=(J,W,X)=>{X=J!=null?LJ(OJ(J)):{};let Z=W||!J||!J.__esModule?l(X,"default",{value:J,enumerable:!0}):X;for(let K of wJ(J))if(!IJ.call(Z,K))l(Z,K,{get:()=>J[K],enumerable:!0});return Z};var MJ=(J,W)=>()=>(W||J((W={exports:{}}).exports,W),W.exports);var o=MJ((T)=>{var I=T&&T.__assign||function(){return I=Object.assign||function(J){for(var W,X=1,Z=arguments.length;X<Z;X++){W=arguments[X];for(var K in W)if(Object.prototype.hasOwnProperty.call(W,K))J[K]=W[K]}return J},I.apply(this,arguments)},B=T&&T.__awaiter||function(J,W,X,Z){function K($){return $ instanceof X?$:new X(function(Q){Q($)})}return new(X||(X=Promise))(function($,Q){function z(H){try{Y(Z.next(H))}catch(q){Q(q)}}function G(H){try{Y(Z.throw(H))}catch(q){Q(q)}}function Y(H){H.done?$(H.value):K(H.value).then(z,G)}Y((Z=Z.apply(J,W||[])).next())})},A=T&&T.__generator||function(J,W){var X={label:0,sent:function(){if($[0]&1)throw $[1];return $[1]},trys:[],ops:[]},Z,K,$,Q=Object.create((typeof Iterator==="function"?Iterator:Object).prototype);return Q.next=z(0),Q.throw=z(1),Q.return=z(2),typeof Symbol==="function"&&(Q[Symbol.iterator]=function(){return this}),Q;function z(Y){return function(H){return G([Y,H])}}function G(Y){if(Z)throw TypeError("Generator is already executing.");while(Q&&(Q=0,Y[0]&&(X=0)),X)try{if(Z=1,K&&($=Y[0]&2?K.return:Y[0]?K.throw||(($=K.return)&&$.call(K),0):K.next)&&!($=$.call(K,Y[1])).done)return $;if(K=0,$)Y=[Y[0]&2,$.value];switch(Y[0]){case 0:case 1:$=Y;break;case 4:return X.label++,{value:Y[1],done:!1};case 5:X.label++,K=Y[1],Y=[0];continue;case 7:Y=X.ops.pop(),X.trys.pop();continue;default:if(($=X.trys,!($=$.length>0&&$[$.length-1]))&&(Y[0]===6||Y[0]===2)){X=0;continue}if(Y[0]===3&&(!$||Y[1]>$[0]&&Y[1]<$[3])){X.label=Y[1];break}if(Y[0]===6&&X.label<$[1]){X.label=$[1],$=Y;break}if($&&X.label<$[2]){X.label=$[2],X.ops.push(Y);break}if($[2])X.ops.pop();X.trys.pop();continue}Y=W.call(J,X)}catch(H){Y=[6,H],K=0}finally{Z=$=0}if(Y[0]&5)throw Y[1];return{value:Y[0]?Y[1]:void 0,done:!0}}},R=T&&T.__spreadArray||function(J,W,X){if(X||arguments.length===2){for(var Z=0,K=W.length,$;Z<K;Z++)if($||!(Z in W)){if(!$)$=Array.prototype.slice.call(W,0,Z);$[Z]=W[Z]}}return J.concat($||Array.prototype.slice.call(W))};Object.defineProperty(T,"__esModule",{value:!0});T.sudo=j;T.pkgInstall=kJ;T.writeFile=fJ;T.service=hJ;T.serviceEnable=_J;T.exec=p;function j(J,W){return B(this,void 0,void 0,function(){var X,Z,K;return A(this,function($){return X=Array.isArray(J)?J:J.split(/\s+/),Z=W.env?Object.entries(W.env).map(function(Q){var z=Q[0],G=Q[1];return"".concat(z,"=").concat(v(G))}):[],K=R(R(["sudo"],Z,!0),X,!0),[2,p(K,W)]})})}var xJ={apt:["apt-get","install","-y"],dnf:["dnf","install","-y"],apk:["apk","add","--no-cache"]},NJ={apt:["apt-get","update","-qq"],dnf:["dnf","check-update"],apk:["apk","update"]};function kJ(J,W){return B(this,void 0,void 0,function(){var X,Z,K;return A(this,function($){switch($.label){case 0:return X=(K=W.pm)!==null&&K!==void 0?K:"apt",Z=I(I({},W.env),W.nonInteractive!==!1?{DEBIAN_FRONTEND:"noninteractive"}:{}),[4,j(NJ[X],I(I({},W),{env:Z,quiet:!0}))];case 1:return $.sent(),[2,j(R(R([],xJ[X],!0),J,!0),I(I({},W),{env:Z}))]}})})}function fJ(J,W,X){return B(this,void 0,void 0,function(){var Z,K,$;return A(this,function(Q){switch(Q.label){case 0:return Z=X.append?"-a":"",K="tee ".concat(Z," ").concat(v(J)).trim(),[4,vJ(W,["sudo",K],X)];case 1:if($=Q.sent(),!($.ok&&X.mode))return[3,3];return[4,j(["chmod",X.mode,J],X)];case 2:Q.sent(),Q.label=3;case 3:if(!($.ok&&X.owner))return[3,5];return[4,j(["chown",X.owner,J],X)];case 4:Q.sent(),Q.label=5;case 5:return[2,$]}})})}function hJ(J,W,X){return B(this,void 0,void 0,function(){return A(this,function(Z){return[2,j(["systemctl",W,J],X)]})})}function _J(J,W){return B(this,void 0,void 0,function(){return A(this,function(X){return[2,j(["systemctl","enable","--now",J],W)]})})}function n(J){var W,X=["ssh","-F","/dev/null","-o","StrictHostKeyChecking=no","-o","UserKnownHostsFile=/dev/null"];if(J.keyPath)X.push("-i",J.keyPath);else if(J.key)X.push("-i",J.key);if(J.port)X.push("-p",String(J.port));return X.push("".concat((W=J.user)!==null&&W!==void 0?W:"root","@").concat(J.host)),X}function p(J,W){return B(this,void 0,void 0,function(){var X,Z,K,$,Q,z,G,Y,H;return A(this,function(q){switch(q.label){case 0:return X=(Y=W.context)!==null&&Y!==void 0?Y:{type:"local"},Z=X.type==="ssh"?R(R([],n(X),!0),[J.map(v).join(" ")],!1):J,K=Bun.spawn(Z,{stdout:"pipe",stderr:"pipe",timeout:(H=W.timeout)!==null&&H!==void 0?H:30000}),[4,K.exited];case 1:if($=q.sent(),!W.quiet)return[3,2];return z="",[3,4];case 2:return[4,new Response(K.stdout).text()];case 3:z=q.sent(),q.label=4;case 4:return Q=z,[4,new Response(K.stderr).text()];case 5:return G=q.sent(),[2,{stdout:Q,stderr:G,exitCode:$,ok:$===0}]}})})}function vJ(J,W,X){return B(this,void 0,void 0,function(){var Z,K,$,Q,z,G,Y,H,q,O,D,E,x,m,N,k,f;return A(this,function(L){switch(L.label){case 0:if(Z=(N=X.context)!==null&&N!==void 0?N:{type:"local"},Z.type!=="ssh")return[3,6];return K=n(Z),$=W.join(" "),Q=R(R([],K,!0),[$],!1),z=Bun.spawn(Q,{stdin:new TextEncoder().encode(J),stdout:"pipe",stderr:"pipe",timeout:(k=X.timeout)!==null&&k!==void 0?k:30000}),[4,z.exited];case 1:if(G=L.sent(),!X.quiet)return[3,2];return H="",[3,4];case 2:return[4,new Response(z.stdout).text()];case 3:H=L.sent(),L.label=4;case 4:return Y=H,[4,new Response(z.stderr).text()];case 5:return q=L.sent(),[2,{stdout:Y,stderr:q,exitCode:G,ok:G===0}];case 6:return O=Bun.spawn(["sh","-c",W.join(" ")],{stdin:new TextEncoder().encode(J),stdout:"pipe",stderr:"pipe",timeout:(f=X.timeout)!==null&&f!==void 0?f:30000}),[4,O.exited];case 7:if(D=L.sent(),!X.quiet)return[3,8];return x="",[3,10];case 8:return[4,new Response(O.stdout).text()];case 9:x=L.sent(),L.label=10;case 10:return E=x,[4,new Response(O.stderr).text()];case 11:return m=L.sent(),[2,{stdout:E,stderr:m,exitCode:D,ok:D===0}]}})})}function v(J){if(/^[a-zA-Z0-9._\-\/=:@]+$/.test(J))return J;return"'".concat(J.replace(/'/g,"'\\''"),"'")}});import{readFileSync as pJ,existsSync as oJ}from"node:fs";import{constants as b,mkdirSync as jJ,readFileSync as BJ,writeFileSync as AJ,existsSync as g}from"node:fs";import{dirname as bJ}from"node:path";var h={packages:{},healthPort:8914,workDir:"/opt/pkg-ops",logLevel:"info"},PJ="/etc/pkg-ops",yJ=`${PJ}/config.json`;function _(){return process.env.PKG_OPS_CONFIG??yJ}function CJ(){let J=bJ(_());if(!g(J))jJ(J,{recursive:!0,mode:b.S_IRWXU|b.S_IRGRP|b.S_IXGRP})}function w(){let J=_();try{if(!g(J))return{...h};let W=BJ(J,"utf-8"),X=JSON.parse(W);return{...h,...X}}catch(W){return console.error(`Failed to load config from ${J}:`,W),{...h}}}function SJ(J){let W=_();CJ();let X=JSON.stringify(J,null,2);AJ(W,X,{encoding:"utf-8",mode:b.S_IRUSR|b.S_IWUSR|b.S_IRGRP})}function S(J,W){let X=w();return X.packages[J]=W,SJ(X),X}function y(J){return w().packages[J]}function c(){let J=w();return Object.entries(J.packages).map(([W,X])=>({name:W,config:X}))}function C(J){return J.startsWith("@ebowwa/")}function i(J){let W=J.lastIndexOf("@");if(W<=0)return{name:J,version:"latest"};let X=J.slice(0,W),Z=J.slice(W+1);if(!Z)return{name:X,version:"latest"};return{name:X,version:Z}}async function M(J,W){let{sudo:X}=await Promise.resolve().then(() => RJ(o(),1));return X(J,W)}async function r(J,W){return M(["systemctl","enable",J],W)}async function t(J,W){return M(["systemctl","disable",J],W)}async function a(J,W){return M(["systemctl","start",J],W)}async function s(J,W){return M(["systemctl","stop",J],W)}async function e(J,W){return M(["systemctl","restart",J],W)}async function JJ(J,W){let X=await M(["systemctl","show",J,"--property=LoadState,ActiveState,SubState,MainPID,Description"],{...W});if(!X.ok)return{loaded:!1,active:!1,subState:"unknown",mainPid:0,description:""};let Z=(K)=>{return X.stdout.match(new RegExp(`^${K}=(.+)$`,"m"))?.[1]?.trim()??""};return{loaded:Z("LoadState")==="loaded",active:Z("ActiveState")==="active",subState:Z("SubState"),mainPid:parseInt(Z("MainPID")||"0",10),description:Z("Description")}}async function WJ(J,W){let X=await M(["systemctl","list-unit-files",J+".service"],{...W,quiet:!0});return X.ok&&X.stdout.includes(J)}async function XJ(J,W={}){let X=["journalctl","-u",J,"-n",String(W.lines??100)];if(W.since)X.push("--since",W.since);if(!W.follow)X.push("-n",String(W.lines??100));return(await M(X,W)).stdout}class ZJ{sudoOptions;constructor(J){this.sudoOptions=J??{context:{type:"local"}}}async start(J){let W=await a(J,this.sudoOptions);return{success:W.ok,message:W.ok?`Service ${J} started`:W.stderr||W.stdout}}async stop(J){let W=await s(J,this.sudoOptions);return{success:W.ok,message:W.ok?`Service ${J} stopped`:W.stderr||W.stdout}}async restart(J){let W=await e(J,this.sudoOptions);return{success:W.ok,message:W.ok?`Service ${J} restarted`:W.stderr||W.stdout}}async status(J){return JJ(J,this.sudoOptions)}async enable(J){let W=await r(J,this.sudoOptions);return{success:W.ok,message:W.ok?`Service ${J} enabled`:W.stderr||W.stdout}}async disable(J){let W=await t(J,this.sudoOptions);return{success:W.ok,message:W.ok?`Service ${J} disabled`:W.stderr||W.stdout}}async exists(J){return WJ(J,this.sudoOptions)}async logs(J,W){return XJ(J,{...this.sudoOptions,lines:W?.lines??100,since:W?.since})}async info(J){let[W,X]=await Promise.all([this.exists(J),this.status(J)]);return{name:J,exists:W,status:X}}async isHealthy(J){let W=await this.status(J);return W.active&&W.subState==="running"}async waitForHealthy(J,W){let X=W?.timeout??30000,Z=W?.interval??1000,K=Date.now();while(Date.now()-K<X){if(await this.isHealthy(J))return!0;await new Promise((Q)=>setTimeout(Q,Z))}return!1}}var u=null;function U(){if(!u)u=new ZJ;return u}import{spawn as uJ}from"child_process";import{accessSync as $J,constants as KJ}from"fs";import{join as d,dirname as dJ}from"path";import{fileURLToPath as mJ}from"url";var lJ=30000;class QJ{process=null;pendingRequests=new Map;requestId=0;buffer="";async start(){if(this.process)return;let J=this.getBinaryPath();try{$J(J,KJ.X_OK)}catch{throw Error(`Rust binary not found at ${J}. Run 'bun run build:rust' in the pkg-ops package.`)}if(this.process=uJ(J,[],{stdio:["pipe","pipe","pipe"]}),!this.process.stdin||!this.process.stdout)throw Error("Failed to create stdin/stdout pipes");this.process.stdout.on("data",(W)=>{this.buffer+=W.toString("utf-8"),this.processBuffer()}),this.process.stderr?.on("data",(W)=>{console.error("[rust-worker]",W.toString("utf-8").trim())}),this.process.on("exit",(W)=>{console.error(`Rust worker exited with code ${W}`),this.process=null})}async stop(){if(!this.process)return;try{await this.sendRequest("shutdown",{})}catch{}if(await new Promise((J)=>setTimeout(J,1000)),this.process)this.process.kill("SIGTERM"),this.process=null;for(let[J,W]of this.pendingRequests)clearTimeout(W.timeout),W.reject(Error("Bridge shutdown"));this.pendingRequests.clear()}async install(J,W){return this.sendRequest("install",{packageName:J,version:W})}async update(J){return this.sendRequest("update",{packageName:J})}async updateAll(){return this.sendRequest("updateAll",{})}async list(){return this.sendRequest("list",{})}async rollback(J){return this.sendRequest("rollback",{packageName:J})}async health(){return this.sendRequest("health",{})}async verify(J){return this.sendRequest("verify",{packageName:J})}async audit(){return this.sendRequest("audit",{})}async getBundleSizes(){return this.sendRequest("sizes",{})}async getInstalledInfo(){return this.sendRequest("installedInfo",{})}getBinaryPath(){let J=dJ(mJ(import.meta.url)),W=[d(J,"..","rust","target","release","pkg-ops-core"),d(J,"..","rust","pkg-ops-core"),d(J,"..","rust","target","x86_64-unknown-linux-gnu","release","pkg-ops-core")];for(let X of W)try{return $J(X,KJ.X_OK),X}catch{}throw Error(`Rust binary not found. Tried:
|
|
3
|
+
${W.map((X)=>` - ${X}`).join(`
|
|
4
|
+
`)}
|
|
5
|
+
Run 'bun run build:rust' or 'cargo build --release' in the pkg-ops package.`)}sendRequest(J,W){return new Promise((X,Z)=>{if(!this.process?.stdin){Z(Error("Rust worker not started"));return}let K=String(++this.requestId),$={jsonrpc:"2.0",id:K,method:J,params:W},Q=setTimeout(()=>{this.pendingRequests.delete(K),Z(Error(`Request timeout: ${J}`))},lJ);this.pendingRequests.set(K,{resolve:X,reject:Z,timeout:Q});let z=JSON.stringify($)+`
|
|
6
|
+
`;this.process.stdin.write(z,"utf-8",(G)=>{if(G)this.pendingRequests.delete(K),clearTimeout(Q),Z(G)})})}processBuffer(){let J=this.buffer.split(`
|
|
7
|
+
`);this.buffer=J.pop()??"";for(let W of J){if(!W.trim())continue;try{let X=JSON.parse(W),Z=this.pendingRequests.get(X.id);if(Z)if(clearTimeout(Z.timeout),this.pendingRequests.delete(X.id),X.error)Z.reject(Error(X.error.message));else Z.resolve(X.result)}catch(X){console.error("Failed to parse response:",W,X)}}}}var P=null;function gJ(){if(!P)P=new QJ;return P}async function F(){let J=gJ();return await J.start(),J}async function V(){if(P)await P.stop(),P=null}import{createServer as cJ}from"http";class iJ{server=null;checks=new Map;startTime=Date.now();port;constructor(J=8914){this.port=J}async start(){if(this.server)return;return new Promise((J,W)=>{this.server=cJ((X,Z)=>this.handleRequest(X,Z)),this.server.on("error",W),this.server.listen(this.port,()=>{console.log(`Health server listening on port ${this.port}`),this.server?.off("error",W),J()})})}async stop(){if(!this.server)return;return new Promise((J)=>{this.server?.close(()=>{this.server=null,J()})})}addCheck(J,W){this.checks.set(J,W)}removeCheck(J){this.checks.delete(J)}async checkHealth(J){if(J)return this.getServiceHealth(J);return this.getSystemHealth()}async handleRequest(J,W){let X=J.url??"/",Z=J.method??"GET";try{if(Z==="GET"&&X==="/health"){let K=await this.getSystemHealth();this.sendJson(W,200,K)}else if(Z==="GET"&&X.startsWith("/health/")){let K=X.slice(8).replace(".service",""),$=await this.getServiceHealth(K);this.sendJson(W,$?200:404,$??{error:"Service not found"})}else if(Z==="GET"&&X==="/ready"){let K=await this.getSystemHealth();this.sendJson(W,K.healthy?200:503,{ready:K.healthy})}else if(Z==="GET"&&X==="/live")this.sendJson(W,200,{alive:!0});else this.sendJson(W,404,{error:"Not found"})}catch(K){console.error("Health check error:",K),this.sendJson(W,500,{error:"Internal server error"})}}async getSystemHealth(){let J=w(),W=U(),X=[];for(let[$,Q]of Object.entries(J.packages)){if(!Q.service)continue;let z=await W.status(Q.service),G=z.active&&z.subState==="running";X.push({name:Q.service,healthy:G,status:z,checkedAt:new Date().toISOString()})}let Z={};for(let[$,Q]of this.checks)try{Z[$]=await Q()}catch(z){Z[$]={healthy:!1,message:z instanceof Error?z.message:"Unknown error"}}return{healthy:X.every(($)=>$.healthy)&&Object.values(Z).every(($)=>$.healthy),services:X,uptime:Math.floor((Date.now()-this.startTime)/1000),timestamp:new Date().toISOString()}}async getServiceHealth(J){let W=U();if(!await W.exists(J))return null;let Z=await W.status(J),K=Z.active&&Z.subState==="running";return{name:J,healthy:K,status:Z,checkedAt:new Date().toISOString()}}sendJson(J,W,X){J.statusCode=W,J.setHeader("Content-Type","application/json"),J.end(JSON.stringify(X,null,2))}}var nJ=null;function YJ(){return nJ}async function rJ(J){if(J.length===0)console.error("Usage: pkg-ops install <package>[@version]"),process.exit(1);let W=J[0],{name:X,version:Z}=i(W);if(!C(X))console.error("Invalid package name. Only @ebowwa/* packages are supported."),process.exit(1);console.log(`Installing ${X}@${Z}...`);try{let $=await(await F()).install(X,Z);if($.success){if(console.log(`Successfully installed ${X}@${$.version}`),$.previousVersion)console.log(` Previous version: ${$.previousVersion}`);S(X,{version:$.version,service:X.replace("@ebowwa/","")});let Q=y(X);if(Q?.service&&Q.autoStart!==!1){let G=await U().start(Q.service);if(G.success)console.log(` Service ${Q.service} started`);else console.warn(` Failed to start service: ${G.message}`)}}else console.error(`Failed to install ${X}: ${$.message}`),process.exit(1)}catch(K){console.error("Install failed:",K),process.exit(1)}finally{await V()}}async function tJ(J){if(J.length===0)console.error("Usage: pkg-ops update <package>"),process.exit(1);let W=J[0];if(!C(W))console.error("Invalid package name. Only @ebowwa/* packages are supported."),process.exit(1);console.log(`Updating ${W}...`);try{let Z=await(await F()).update(W);if(Z.success){if(console.log(`Successfully updated ${W} to ${Z.version}`),Z.previousVersion)console.log(` Previous version: ${Z.previousVersion}`);S(W,{version:Z.version,service:W.replace("@ebowwa/","")});let K=U(),$=y(W);if($?.service){if((await K.status($.service)).active)await K.restart($.service),console.log(` Service ${$.service} restarted`)}}else console.error(`Failed to update ${W}: ${Z.message}`),process.exit(1)}catch(X){console.error("Update failed:",X),process.exit(1)}finally{await V()}}async function aJ(J){console.log("Updating all managed packages...");try{let X=await(await F()).updateAll();for(let Z of X)if(Z.success)console.log(`Updated ${Z.version}`);else console.error(`Failed to update: ${Z.message}`)}catch(W){console.error("Update all failed:",W),process.exit(1)}finally{await V()}}async function sJ(J){console.log(`Installed packages:
|
|
8
|
+
`);try{let X=await(await F()).list();if(X.length===0){console.log(" No packages installed");return}for(let Z of X){let K=Z.installed?"installed":"not installed",$=Z.service?` (service: ${Z.service})`:"";console.log(` ${Z.name}@${Z.version} [${K}]${$}`)}}catch(W){console.error("Failed to list packages:",W),process.exit(1)}finally{await V()}}async function eJ(J){if(J.length===0)console.error("Usage: pkg-ops rollback <package>"),process.exit(1);let W=J[0];console.log(`Rolling back ${W}...`);try{let Z=await(await F()).rollback(W);if(Z.success){console.log(`Rolled back ${W} from ${Z.currentVersion} to ${Z.previousVersion}`);let K=U(),$=y(W);if($?.service){if((await K.status($.service)).active)await K.restart($.service),console.log(` Service ${$.service} restarted`)}}else console.error(`Rollback failed: ${Z.message}`),process.exit(1)}catch(X){console.error("Rollback failed:",X),process.exit(1)}finally{await V()}}async function zJ(J){if(J.length===0)console.error("Usage: pkg-ops service start <name>"),process.exit(1);let W=J[0],X=U();console.log(`Starting ${W}...`);let Z=await X.start(W);if(Z.success)console.log(`Service ${W} started`);else console.error(`Failed to start ${W}: ${Z.message}`),process.exit(1)}async function GJ(J){if(J.length===0)console.error("Usage: pkg-ops service stop <name>"),process.exit(1);let W=J[0],X=U();console.log(`Stopping ${W}...`);let Z=await X.stop(W);if(Z.success)console.log(`Service ${W} stopped`);else console.error(`Failed to stop ${W}: ${Z.message}`),process.exit(1)}async function qJ(J){if(J.length===0)console.error("Usage: pkg-ops service restart <name>"),process.exit(1);let W=J[0],X=U();console.log(`Restarting ${W}...`);let Z=await X.restart(W);if(Z.success)console.log(`Service ${W} restarted`);else console.error(`Failed to restart ${W}: ${Z.message}`),process.exit(1)}async function HJ(J){if(J.length===0)console.error("Usage: pkg-ops service status <name>"),process.exit(1);let W=J[0],Z=await U().info(W);if(!Z.exists){console.log(`Service ${W} not found`);return}console.log(`Service: ${W}`),console.log(` Loaded: ${Z.status.loaded}`),console.log(` Active: ${Z.status.active}`),console.log(` State: ${Z.status.subState}`),console.log(` PID: ${Z.status.mainPid||"N/A"}`),console.log(` Description: ${Z.status.description||"N/A"}`)}async function TJ(J){if(J.length===0)console.error("Usage: pkg-ops service logs <name> [--lines N]"),process.exit(1);let W=J[0],X=J.indexOf("--lines"),Z=X>=0&&J[X+1]?parseInt(J[X+1],10):100,$=await U().logs(W,{lines:Z});console.log($)}async function UJ(J){if(J.length===0)console.error("Usage: pkg-ops service enable <name>"),process.exit(1);let W=J[0],X=U();console.log(`Enabling ${W}...`);let Z=await X.enable(W);if(Z.success)console.log(`Service ${W} enabled on boot`);else console.error(`Failed to enable ${W}: ${Z.message}`),process.exit(1)}async function DJ(J){if(J.length===0)console.error("Usage: pkg-ops service disable <name>"),process.exit(1);let W=J[0],X=U();console.log(`Disabling ${W}...`);let Z=await X.disable(W);if(Z.success)console.log(`Service ${W} disabled from boot`);else console.error(`Failed to disable ${W}: ${Z.message}`),process.exit(1)}async function JW(J){let W=J[0],X=YJ();if(!X)console.error("Health server not initialized"),process.exit(1);let Z=await X.checkHealth(W);if(!Z){console.log("Service not found");return}if("services"in Z){if(Z.healthy)console.log("All services healthy");else console.log("Some services unhealthy");for(let K of Z.services){let $=K.healthy?"OK":"FAIL";console.log(` [${$}] ${K.name}: ${K.status.subState}`)}}else{let K=Z.healthy?"OK":"FAIL";console.log(`[${K}] ${Z.name}: ${Z.status.subState}`)}}async function FJ(J){let W=w();console.log("VPS Manager Configuration"),console.log("Config path: /etc/pkg-ops/config.json"),console.log(`Health port: ${W.healthPort}`),console.log(`Work dir: ${W.workDir}`),console.log(`Log level: ${W.logLevel}`),console.log(`
|
|
9
|
+
Packages:`);let X=c();if(X.length===0){console.log(" No packages configured");return}for(let{name:Z,config:K}of X){if(console.log(` ${Z}:`),console.log(` Version: ${K.version}`),K.service)console.log(` Service: ${K.service}`);if(K.autoStart!==void 0)console.log(` Auto-start: ${K.autoStart}`)}}async function VJ(J){if(J.length<3)console.error("Usage: pkg-ops config set <package> <key> <value>"),process.exit(1);let W=J[0],X=J[1],Z=J[2];if(!C(W))console.error("Invalid package name. Only @ebowwa/* packages are supported."),process.exit(1);let K=y(W)??{version:"latest"};switch(X){case"version":K.version=Z;break;case"service":K.service=Z;break;case"autoStart":K.autoStart=Z==="true";break;default:console.error(`Unknown config key: ${X}`),console.error("Valid keys: version, service, autoStart"),process.exit(1)}S(W,K),console.log(`Updated ${W}.${X} = ${Z}`)}async function WW(J){if(J.length===0)console.error("Usage: pkg-ops verify <package>"),process.exit(1);let W=J[0];if(!C(W))console.error("Invalid package name. Only @ebowwa/* packages are supported."),process.exit(1);console.log(`Verifying ${W}...`);try{let Z=await(await F()).verify(W);if(console.log(`
|
|
10
|
+
Package: ${Z.packageName}@${Z.version}`),console.log(` Status: ${Z.success?"VALID":"INVALID"}`),console.log(` Dist exists: ${Z.distExists?"Yes":"No"}`),Z.checksum)console.log(` Checksum: ${Z.checksum}`);console.log(` Message: ${Z.message}`)}catch(X){console.error("Verification failed:",X),process.exit(1)}finally{await V()}}async function XW(J){let W=J.indexOf("--local"),X=J.indexOf("--local-path"),Z="./package.json";if(X>=0&&J[X+1])Z=J[X+1];let K=W>=0||X>=0;try{let Q=await(await F()).getInstalledInfo();if(console.log(`Sync Status: Local vs VPS
|
|
11
|
+
`),K&&oJ(Z)){let z=pJ(Z,"utf-8"),G=JSON.parse(z),Y={...G.dependencies,...G.devDependencies},H=new Map;for(let q of Q)H.set(q.packageName,q.version);for(let[q,O]of Object.entries(Y)){if(!q.startsWith("@ebowwa/"))continue;let D=H.get(q),E=O.replace(/^[\^~]/,"");if(D){if(E===D)console.log(` ${q}: local=${E}, vps=${D} (in sync)`);else if(E>D)console.log(` ${q}: local=${E}, vps=${D} (VPS behind)`);else console.log(` ${q}: local=${E}, vps=${D} (local behind)`);H.delete(q)}else console.log(` ${q}: local=${E}, vps=not installed`)}for(let[q,O]of H)console.log(` ${q}: local=not in package.json, vps=${O}`)}else if(Q.length===0)console.log(" No packages installed on VPS");else for(let z of Q){let G=z.distSizeBytes?` (${(z.distSizeBytes/1024).toFixed(1)} KB)`:"";console.log(` ${z.packageName}@${z.version}${G}`)}}catch($){console.error("Failed to get sync status:",$),process.exit(1)}finally{await V()}}async function EJ(J){console.log(`Running vulnerability scan...
|
|
12
|
+
`);try{let X=await(await F()).audit();if(X.length===0){console.log("No vulnerabilities found.");return}console.log(`Found ${X.length} vulnerability(es):
|
|
13
|
+
`);for(let Z of X)console.log(`[${Z.severity.toUpperCase()}] ${Z.packageName}`),console.log(` Vulnerability: ${Z.vulnerability}`),console.log(` Description: ${Z.description}`),console.log("")}catch(W){console.error("Audit failed:",W),process.exit(1)}finally{await V()}}async function ZW(J){await EJ(J)}async function $W(J){console.log(`Bundle sizes:
|
|
14
|
+
`);try{let X=await(await F()).getBundleSizes();if(X.length===0){console.log(" No packages installed");return}console.log(" Package | Version | Dist Size"),console.log(" --------------------------------|----------|-----------");for(let Z of X){let K=Z.packageName.padEnd(32),$=Z.version.padEnd(9),Q=(Z.distSizeBytes/1024).toFixed(1)+" KB",z=Z.fileCount?` (${Z.fileCount} files)`:"";console.log(` ${K} | ${$} | ${Q}${z}`)}}catch(W){console.error("Failed to get bundle sizes:",W),process.exit(1)}finally{await V()}}var KW=[{name:"install",description:"Install an @ebowwa/* package",usage:"pkg-ops install <package>[@version]",handler:rJ},{name:"update",description:"Update a package to latest version",usage:"pkg-ops update <package>",handler:tJ},{name:"update-all",description:"Update all managed packages",usage:"pkg-ops update-all",handler:aJ},{name:"list",description:"List installed packages",usage:"pkg-ops list",handler:sJ},{name:"rollback",description:"Rollback a package to previous version",usage:"pkg-ops rollback <package>",handler:eJ},{name:"start",description:"Start a systemd service",usage:"pkg-ops service start <name>",handler:zJ},{name:"stop",description:"Stop a systemd service",usage:"pkg-ops service stop <name>",handler:GJ},{name:"restart",description:"Restart a systemd service",usage:"pkg-ops service restart <name>",handler:qJ},{name:"status",description:"Get service status",usage:"pkg-ops service status <name>",handler:HJ},{name:"logs",description:"View service logs",usage:"pkg-ops service logs <name> [--lines N]",handler:TJ},{name:"enable",description:"Enable service on boot",usage:"pkg-ops service enable <name>",handler:UJ},{name:"disable",description:"Disable service from boot",usage:"pkg-ops service disable <name>",handler:DJ},{name:"health",description:"Check health of all services",usage:"pkg-ops health [service]",handler:JW},{name:"config",description:"Show configuration",usage:"pkg-ops config show",handler:FJ},{name:"set-config",description:"Set a config value",usage:"pkg-ops config set <package> <key> <value>",handler:VJ},{name:"verify",description:"Verify package integrity",usage:"pkg-ops verify <package>",handler:WW},{name:"sync-status",description:"Show local vs VPS version sync",usage:"pkg-ops sync-status [--local-path path]",handler:XW},{name:"audit",description:"Check for vulnerabilities",usage:"pkg-ops audit",handler:EJ},{name:"scan",description:"Alias for audit",usage:"pkg-ops scan",handler:ZW},{name:"sizes",description:"Show bundle sizes",usage:"pkg-ops sizes",handler:$W}],QW=[{name:"start",description:"Start a systemd service",usage:"pkg-ops service start <name>",handler:zJ},{name:"stop",description:"Stop a systemd service",usage:"pkg-ops service stop <name>",handler:GJ},{name:"restart",description:"Restart a systemd service",usage:"pkg-ops service restart <name>",handler:qJ},{name:"status",description:"Get service status",usage:"pkg-ops service status <name>",handler:HJ},{name:"logs",description:"View service logs",usage:"pkg-ops service logs <name> [--lines N]",handler:TJ},{name:"enable",description:"Enable service on boot",usage:"pkg-ops service enable <name>",handler:UJ},{name:"disable",description:"Disable service from boot",usage:"pkg-ops service disable <name>",handler:DJ}],YW=[{name:"show",description:"Show configuration",usage:"pkg-ops config show",handler:FJ},{name:"set",description:"Set a config value",usage:"pkg-ops config set <package> <key> <value>",handler:VJ}];function zW(){console.log(`
|
|
15
|
+
VPS Manager - Unified package manager for VPS
|
|
16
|
+
|
|
17
|
+
Usage:
|
|
18
|
+
pkg-ops <command> [arguments]
|
|
19
|
+
|
|
20
|
+
Package Management:
|
|
21
|
+
install <package>[@version] Install an @ebowwa/* package
|
|
22
|
+
update <package> Update a package to latest version
|
|
23
|
+
update-all Update all managed packages
|
|
24
|
+
list List installed packages
|
|
25
|
+
rollback <package> Rollback a package to previous version
|
|
26
|
+
|
|
27
|
+
Service Management:
|
|
28
|
+
service start <name> Start a systemd service
|
|
29
|
+
service stop <name> Stop a systemd service
|
|
30
|
+
service restart <name> Restart a systemd service
|
|
31
|
+
service status <name> Get service status
|
|
32
|
+
service logs <name> [--lines N] View service logs
|
|
33
|
+
service enable <name> Enable service on boot
|
|
34
|
+
service disable <name> Disable service from boot
|
|
35
|
+
|
|
36
|
+
Health:
|
|
37
|
+
health [service] Check health of all services or specific one
|
|
38
|
+
|
|
39
|
+
Verification & Audit:
|
|
40
|
+
verify <package> Verify package integrity
|
|
41
|
+
sync-status [--local-path p] Show local vs VPS version sync
|
|
42
|
+
audit Check for vulnerabilities
|
|
43
|
+
scan Alias for audit
|
|
44
|
+
sizes Show bundle sizes
|
|
45
|
+
|
|
46
|
+
Config:
|
|
47
|
+
config show Show configuration
|
|
48
|
+
config set <pkg> <key> <val> Set a config value
|
|
49
|
+
|
|
50
|
+
Options:
|
|
51
|
+
--help, -h Show this help message
|
|
52
|
+
--version, -v Show version
|
|
53
|
+
|
|
54
|
+
Examples:
|
|
55
|
+
pkg-ops install @ebowwa/stack@0.7.12
|
|
56
|
+
pkg-ops service start stack
|
|
57
|
+
pkg-ops health
|
|
58
|
+
pkg-ops sync-status --local-path ./package.json
|
|
59
|
+
pkg-ops verify @ebowwa/stack
|
|
60
|
+
pkg-ops audit
|
|
61
|
+
`)}async function GW(){let J=process.argv.slice(2);if(J.length===0||J[0]==="--help"||J[0]==="-h")zW(),process.exit(0);if(J[0]==="--version"||J[0]==="-v"){let K=w();console.log(`pkg-ops ${K.packages?.["@ebowwa/pkg-ops"]?.version??"0.1.0"}`),process.exit(0)}let W=J[0],X=J.slice(1);if(W==="service"){if(X.length===0)console.error("Missing service subcommand"),console.error("Usage: pkg-ops service <start|stop|restart|status|logs|enable|disable> <name>"),process.exit(1);let K=X[0],$=QW.find((Q)=>Q.name===K);if(!$)console.error(`Unknown service subcommand: ${K}`),process.exit(1);await $.handler(X.slice(1));return}if(W==="config"){if(X.length===0)console.error("Missing config subcommand"),console.error("Usage: pkg-ops config <show|set> [args...]"),process.exit(1);let K=X[0],$=YW.find((Q)=>Q.name===K);if(!$)console.error(`Unknown config subcommand: ${K}`),process.exit(1);await $.handler(X.slice(1));return}let Z=KW.find((K)=>K.name===W);if(!Z)console.error(`Unknown command: ${W}`),console.error("Run 'pkg-ops --help' for usage"),process.exit(1);await Z.handler(X)}GW().catch((J)=>{console.error("Fatal error:",J),process.exit(1)});
|
|
62
|
+
|
|
63
|
+
//# debugId=C614DC988BCFFB9464756E2164756E21
|
|
64
|
+
//# sourceMappingURL=index.js.map
|