openrod 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/NOTICE +8 -0
- package/README.md +58 -2
- package/SETUPS.md +75 -0
- package/THIRD_PARTY_NOTICES.md +15823 -0
- package/dist/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dist/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dist/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dist/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dist/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dist/assets/index-CEZ0R3YS.js +522 -0
- package/dist/assets/index-DYjVZRjW.css +1 -0
- package/dist/assets/index.esm-BVqeoYDn.js +376 -0
- package/dist/assets/index.esm-CXAOoF3i.js +16 -0
- package/dist/assets/index.esm-D0s8MSqt.js +1666 -0
- package/dist/assets/pixelify-sans-cyrillic-wght-normal-BfQLqnEI.woff2 +0 -0
- package/dist/assets/pixelify-sans-latin-ext-wght-normal-CsF3XSp0.woff2 +0 -0
- package/dist/assets/pixelify-sans-latin-wght-normal-Cbhn5ptY.woff2 +0 -0
- package/dist/assets/terminal-view-6GBZ9nXN.css +32 -0
- package/dist/assets/terminal-view-CkPFNoXi.js +40 -0
- package/dist/favicon.png +0 -0
- package/dist/index.html +16 -0
- package/dist/logos/SOURCES.md +133 -0
- package/dist/logos/agents/aider.svg +1 -0
- package/dist/logos/agents/antigravity.svg +1 -0
- package/dist/logos/agents/claudecode.svg +1 -0
- package/dist/logos/agents/codex.svg +1 -0
- package/dist/logos/agents/copilot.svg +1 -0
- package/dist/logos/agents/cursor.svg +1 -0
- package/dist/logos/agents/factory.svg +1 -0
- package/dist/logos/agents/gemini.svg +1 -0
- package/dist/logos/agents/kiro.svg +1 -0
- package/dist/logos/agents/openclaw-color.svg +1 -0
- package/dist/logos/agents/opencode.svg +1 -0
- package/dist/logos/agents/pi.svg +1 -0
- package/dist/logos/anthropic.svg +1 -0
- package/dist/logos/aws-bedrock.svg +1 -0
- package/dist/logos/aws-s3.svg +1 -0
- package/dist/logos/aws.svg +1 -0
- package/dist/logos/claude-code.svg +1 -0
- package/dist/logos/codex.svg +1 -0
- package/dist/logos/copilot.svg +1 -0
- package/dist/logos/cursor.svg +1 -0
- package/dist/logos/deepinfra.svg +1 -0
- package/dist/logos/github.svg +1 -0
- package/dist/logos/google-cloud.svg +1 -0
- package/dist/logos/google-vertex-ai.svg +1 -0
- package/dist/logos/nvidia.svg +1 -0
- package/dist/logos/openai.svg +1 -0
- package/dist/logos/openrouter.svg +1 -0
- package/dist/logos/pypi.svg +1 -0
- package/dist/logos/templates/debian.svg +1 -0
- package/dist/logos/templates/nodejs.svg +1 -0
- package/dist/logos/templates/python.svg +1 -0
- package/dist/logos/templates/ubuntu.svg +1 -0
- package/dist/logos/vscode.svg +1 -0
- package/dist/openrod.png +0 -0
- package/node_modules/@bufbuild/protobuf/README.md +41 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.d.ts +6 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/clone.js +66 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.d.ts +1 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/boot.js +18 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/enum.js +31 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/extension.js +28 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.d.ts +1 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/file.js +18 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/index.js +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/message.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/service.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.d.ts +140 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/symbols.js +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.d.ts +79 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv1/types.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.d.ts +63 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/boot.js +105 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/embed.js +244 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.d.ts +29 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/enum.js +58 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/extension.js +28 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.d.ts +7 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/file.js +35 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/index.js +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.d.ts +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/message.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.d.ts +5 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/restore-json-names.js +29 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/scalar.js +67 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/service.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.d.ts +145 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/symbols.js +74 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.d.ts +85 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/codegenv2/types.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/create.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/create.js +296 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.d.ts +634 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/descriptors.js +53 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.d.ts +46 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/equals.js +209 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.d.ts +60 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/extensions.js +168 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.d.ts +23 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/fields.js +45 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.d.ts +48 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/from-binary.js +415 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.d.ts +73 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/from-json.js +1037 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/index.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/index.js +55 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.d.ts +7 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/is-message.js +33 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.d.ts +16 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/json-value.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.d.ts +13 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/merge.js +70 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/package.json +4 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.d.ts +98 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/proto-int64.js +131 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/error.js +36 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.d.ts +20 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/guard.js +78 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/index.js +41 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/message.d.ts +49 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/message.js +157 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.d.ts +30 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/names.js +115 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.d.ts +35 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/nested-types.js +110 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.d.ts +107 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/path.js +376 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.d.ts +45 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-check.js +292 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.d.ts +217 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect-types.js +16 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/reflect.js +469 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/scalar.js +129 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.d.ts +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/reflect/unsafe.js +149 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.d.ts +98 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/registry.js +954 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.d.ts +28 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/to-binary.js +437 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.d.ts +67 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/to-json.js +625 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.d.ts +35 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/from-text.js +684 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.d.ts +4 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/index.js +21 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/is-group-like.js +47 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.d.ts +91 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/reader.js +481 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.d.ts +34 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/to-text.js +358 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.d.ts +76 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/txtpb/writer.js +220 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/types.d.ts +135 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/types.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/unknown-enum.js +26 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.d.ts +25 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/base64-encoding.js +188 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.d.ts +286 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/binary-encoding.js +726 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.d.ts +5 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/index.js +37 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.d.ts +69 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/size-delimited.js +191 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.d.ts +53 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-encoding.js +106 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.d.ts +13 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/text-format.js +199 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.d.ts +70 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wire/varint.js +334 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.d.ts +38 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/any.js +75 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/duration.js +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/any_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/api_pb.js +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/compiler/plugin_pb.js +68 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/cpp_features_pb.js +60 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/descriptor_pb.js +892 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/duration_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/empty_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/field_mask_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/go_features_pb.js +126 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/java_features_pb.js +106 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/source_context_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/struct_pb.js +59 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/timestamp_pb.js +27 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/type_pb.js +242 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/gen/google/protobuf/wrappers_pb.js +67 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/index.js +48 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/json.d.ts +28 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/json.js +44 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.d.ts +21 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/timestamp.js +57 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.d.ts +25 -0
- package/node_modules/@bufbuild/protobuf/dist/commonjs/wkt/wrappers.js +66 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/clone.d.ts +6 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/clone.js +63 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.d.ts +1 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/boot.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/enum.js +26 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/extension.js +25 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.d.ts +1 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/file.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/index.js +23 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/message.js +21 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/service.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.d.ts +140 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/symbols.js +40 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.d.ts +79 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv1/types.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.d.ts +63 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/boot.js +101 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/embed.js +239 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.d.ts +29 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/enum.js +53 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/extension.js +25 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.d.ts +7 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/file.js +32 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/index.js +23 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.d.ts +15 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/message.js +21 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.d.ts +5 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/restore-json-names.js +26 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/scalar.js +63 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/service.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.d.ts +145 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/symbols.js +71 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.d.ts +85 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/codegenv2/types.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/create.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/create.js +293 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.d.ts +634 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/descriptors.js +50 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/equals.d.ts +46 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/equals.js +206 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/extensions.d.ts +60 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/extensions.js +159 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/fields.d.ts +23 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/fields.js +41 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.d.ts +48 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js +409 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/from-json.d.ts +73 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/from-json.js +1029 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/index.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/index.js +29 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/is-message.d.ts +7 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/is-message.js +30 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/json-value.d.ts +16 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/json-value.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/merge.d.ts +13 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/merge.js +67 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/package.json +4 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.d.ts +98 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/proto-int64.js +128 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/error.js +31 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.d.ts +20 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/guard.js +71 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.d.ts +8 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/index.js +21 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/message.d.ts +49 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/message.js +152 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.d.ts +30 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/names.js +109 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.d.ts +35 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/nested-types.js +105 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.d.ts +107 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/path.js +369 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.d.ts +45 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-check.js +284 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.d.ts +217 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect-types.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/reflect.js +464 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/scalar.js +124 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.d.ts +39 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/reflect/unsafe.js +140 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/registry.d.ts +98 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/registry.js +948 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.d.ts +28 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js +433 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/to-json.d.ts +67 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/to-json.js +620 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.d.ts +35 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/from-text.js +680 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.d.ts +4 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/index.js +15 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/is-group-like.js +44 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.d.ts +91 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/reader.js +477 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.d.ts +34 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/to-text.js +355 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.d.ts +76 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/txtpb/writer.js +214 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/types.d.ts +135 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/types.js +14 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.d.ts +10 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/unknown-enum.js +23 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.d.ts +25 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/base64-encoding.js +184 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.d.ts +286 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/binary-encoding.js +721 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.d.ts +5 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/index.js +18 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.d.ts +69 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/size-delimited.js +186 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.d.ts +53 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-encoding.js +101 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.d.ts +13 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/text-format.js +195 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.d.ts +70 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wire/varint.js +325 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.d.ts +38 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/any.js +69 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.d.ts +9 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/duration.js +35 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.d.ts +238 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/any_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.d.ts +537 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/api_pb.js +36 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.d.ts +490 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/compiler/plugin_pb.js +65 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.d.ts +91 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/cpp_features_pb.js +57 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.d.ts +4143 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/descriptor_pb.js +888 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.d.ts +161 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/duration_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.d.ts +39 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/empty_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.d.ts +424 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/field_mask_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.d.ts +189 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/go_features_pb.js +123 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.d.ts +194 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/java_features_pb.js +103 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.d.ts +43 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/source_context_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.d.ts +195 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/struct_pb.js +56 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.d.ts +222 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/timestamp_pb.js +24 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.d.ts +722 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/type_pb.js +239 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.d.ts +330 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/gen/google/protobuf/wrappers_pb.js +64 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.d.ts +19 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/index.js +32 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/json.d.ts +28 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/json.js +41 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.d.ts +21 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/timestamp.js +50 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.d.ts +25 -0
- package/node_modules/@bufbuild/protobuf/dist/esm/wkt/wrappers.js +61 -0
- package/node_modules/@bufbuild/protobuf/package.json +147 -0
- package/node_modules/@connectrpc/connect/README.md +62 -0
- package/node_modules/@connectrpc/connect/dist/cjs/any-client.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/cjs/any-client.js +33 -0
- package/node_modules/@connectrpc/connect/dist/cjs/call-options.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/cjs/call-options.js +15 -0
- package/node_modules/@connectrpc/connect/dist/cjs/callback-client.d.ts +31 -0
- package/node_modules/@connectrpc/connect/dist/cjs/callback-client.js +116 -0
- package/node_modules/@connectrpc/connect/dist/cjs/code.d.ts +75 -0
- package/node_modules/@connectrpc/connect/dist/cjs/code.js +92 -0
- package/node_modules/@connectrpc/connect/dist/cjs/connect-error.d.ts +104 -0
- package/node_modules/@connectrpc/connect/dist/cjs/connect-error.js +141 -0
- package/node_modules/@connectrpc/connect/dist/cjs/context-values.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/cjs/context-values.js +41 -0
- package/node_modules/@connectrpc/connect/dist/cjs/cors.d.ts +45 -0
- package/node_modules/@connectrpc/connect/dist/cjs/cors.js +82 -0
- package/node_modules/@connectrpc/connect/dist/cjs/http-headers.d.ts +37 -0
- package/node_modules/@connectrpc/connect/dist/cjs/http-headers.js +63 -0
- package/node_modules/@connectrpc/connect/dist/cjs/implementation.d.ts +159 -0
- package/node_modules/@connectrpc/connect/dist/cjs/implementation.js +78 -0
- package/node_modules/@connectrpc/connect/dist/cjs/index.d.ts +22 -0
- package/node_modules/@connectrpc/connect/dist/cjs/index.js +46 -0
- package/node_modules/@connectrpc/connect/dist/cjs/interceptor.d.ts +170 -0
- package/node_modules/@connectrpc/connect/dist/cjs/interceptor.js +30 -0
- package/node_modules/@connectrpc/connect/dist/cjs/package.json +1 -0
- package/node_modules/@connectrpc/connect/dist/cjs/promise-client.d.ts +40 -0
- package/node_modules/@connectrpc/connect/dist/cjs/promise-client.js +135 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/async-iterable.d.ts +527 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/async-iterable.js +913 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/compression.d.ts +48 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/compression.js +75 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/content-type-matcher.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/content-type-matcher.js +43 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/create-method-url.d.ts +17 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/create-method-url.js +36 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/envelope.d.ts +90 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/envelope.js +214 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/index.d.ts +25 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/index.js +95 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/invoke-implementation.d.ts +33 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/invoke-implementation.js +178 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/limit-io.d.ts +24 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/limit-io.js +80 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/normalize.d.ts +11 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/normalize.js +55 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-handler-factory.d.ts +18 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-handler-factory.js +15 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-headers.d.ts +9 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/protocol-headers.js +67 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/run-call.d.ts +45 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/run-call.js +125 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/serialization.d.ts +104 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/serialization.js +149 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/signals.d.ts +36 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/signals.js +100 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/transport-options.d.ts +98 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/transport-options.js +15 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-fetch.d.ts +35 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-fetch.js +150 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler-client.d.ts +7 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler-client.js +88 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler.d.ts +167 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal-handler.js +130 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal.d.ts +102 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol/universal.js +78 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/code-string.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/code-string.js +52 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/content-type.d.ts +40 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/content-type.js +71 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/end-stream.d.ts +44 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/end-stream.js +137 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/error-json.d.ts +36 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/error-json.js +166 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/get-request.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/get-request.js +66 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/handler-factory.js +296 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/headers.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/headers.js +32 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/http-status.d.ts +15 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/http-status.js +90 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/index.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/index.js +81 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/parse-timeout.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/parse-timeout.js +44 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/query-params.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/query-params.js +24 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/request-header.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/request-header.js +70 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/trailer-mux.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/trailer-mux.js +53 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/transport.js +210 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/validate-response.d.ts +30 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/validate-response.js +71 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/version.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-connect/version.js +58 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/content-type.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/content-type.js +38 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/gen/status_pb.d.ts +91 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/gen/status_pb.js +27 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/handler-factory.js +124 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/headers.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/headers.js +29 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/http-status.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/http-status.js +46 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/index.d.ts +10 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/index.js +61 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/parse-timeout.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/parse-timeout.js +53 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/request-header.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/request-header.js +56 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/trailer-status.d.ts +28 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/trailer-status.js +118 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/transport.js +185 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-response.d.ts +33 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-response.js +75 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-trailer.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc/validate-trailer.js +44 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/content-type.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/content-type.js +41 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/handler-factory.js +130 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/headers.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/headers.js +44 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/index.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/index.js +61 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/request-header.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/request-header.js +59 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/trailer.d.ts +27 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/trailer.js +71 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/transport.js +234 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/validate-response.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/cjs/protocol-grpc-web/validate-response.js +73 -0
- package/node_modules/@connectrpc/connect/dist/cjs/router-transport.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/cjs/router-transport.js +32 -0
- package/node_modules/@connectrpc/connect/dist/cjs/router.d.ts +81 -0
- package/node_modules/@connectrpc/connect/dist/cjs/router.js +68 -0
- package/node_modules/@connectrpc/connect/dist/cjs/transport.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/cjs/transport.js +15 -0
- package/node_modules/@connectrpc/connect/dist/esm/any-client.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/esm/any-client.js +30 -0
- package/node_modules/@connectrpc/connect/dist/esm/call-options.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/esm/call-options.js +14 -0
- package/node_modules/@connectrpc/connect/dist/esm/callback-client.d.ts +31 -0
- package/node_modules/@connectrpc/connect/dist/esm/callback-client.js +113 -0
- package/node_modules/@connectrpc/connect/dist/esm/code.d.ts +75 -0
- package/node_modules/@connectrpc/connect/dist/esm/code.js +89 -0
- package/node_modules/@connectrpc/connect/dist/esm/connect-error.d.ts +104 -0
- package/node_modules/@connectrpc/connect/dist/esm/connect-error.js +137 -0
- package/node_modules/@connectrpc/connect/dist/esm/context-values.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/esm/context-values.js +37 -0
- package/node_modules/@connectrpc/connect/dist/esm/cors.d.ts +45 -0
- package/node_modules/@connectrpc/connect/dist/esm/cors.js +79 -0
- package/node_modules/@connectrpc/connect/dist/esm/http-headers.d.ts +37 -0
- package/node_modules/@connectrpc/connect/dist/esm/http-headers.js +58 -0
- package/node_modules/@connectrpc/connect/dist/esm/implementation.d.ts +159 -0
- package/node_modules/@connectrpc/connect/dist/esm/implementation.js +73 -0
- package/node_modules/@connectrpc/connect/dist/esm/index.d.ts +22 -0
- package/node_modules/@connectrpc/connect/dist/esm/index.js +27 -0
- package/node_modules/@connectrpc/connect/dist/esm/interceptor.d.ts +170 -0
- package/node_modules/@connectrpc/connect/dist/esm/interceptor.js +27 -0
- package/node_modules/@connectrpc/connect/dist/esm/promise-client.d.ts +40 -0
- package/node_modules/@connectrpc/connect/dist/esm/promise-client.js +128 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/async-iterable.d.ts +527 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/async-iterable.js +891 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/compression.d.ts +48 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/compression.js +71 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/content-type-matcher.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/content-type-matcher.js +40 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/create-method-url.d.ts +17 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/create-method-url.js +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/envelope.d.ts +90 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/envelope.js +206 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/index.d.ts +25 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/index.js +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/invoke-implementation.d.ts +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/invoke-implementation.js +173 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/limit-io.d.ts +24 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/limit-io.js +75 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/normalize.d.ts +11 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/normalize.js +51 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-handler-factory.d.ts +18 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-handler-factory.js +14 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-headers.d.ts +9 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/protocol-headers.js +64 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/run-call.d.ts +45 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/run-call.js +121 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/serialization.d.ts +104 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/serialization.js +141 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/signals.d.ts +36 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/signals.js +95 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/transport-options.d.ts +98 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/transport-options.js +14 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-fetch.d.ts +35 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-fetch.js +142 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler-client.d.ts +7 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler-client.js +85 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler.d.ts +167 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal-handler.js +124 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal.d.ts +102 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol/universal.js +74 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/code-string.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/code-string.js +48 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/content-type.d.ts +40 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/content-type.js +66 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/end-stream.d.ts +44 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/end-stream.js +131 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/error-json.d.ts +36 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/error-json.js +160 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/get-request.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/get-request.js +63 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/handler-factory.js +293 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/headers.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/headers.js +29 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/http-status.d.ts +15 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/http-status.js +86 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/index.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/index.js +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/parse-timeout.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/parse-timeout.js +41 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/query-params.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/query-params.js +21 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/request-header.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/request-header.js +66 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/trailer-mux.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/trailer-mux.js +49 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/transport.js +207 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/validate-response.d.ts +30 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/validate-response.js +67 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/version.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-connect/version.js +53 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/content-type.d.ts +16 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/content-type.js +34 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/gen/status_pb.d.ts +91 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/gen/status_pb.js +24 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/handler-factory.js +121 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/headers.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/headers.js +26 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/http-status.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/http-status.js +43 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/index.d.ts +10 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/index.js +28 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/parse-timeout.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/parse-timeout.js +50 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/request-header.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/request-header.js +52 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/trailer-status.d.ts +28 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/trailer-status.js +113 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/transport.js +182 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-response.d.ts +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-response.js +71 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-trailer.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc/validate-trailer.js +41 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/content-type.d.ts +19 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/content-type.js +37 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/handler-factory.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/handler-factory.js +127 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/headers.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/headers.js +33 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/index.d.ts +8 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/index.js +26 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/request-header.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/request-header.js +55 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/trailer.d.ts +27 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/trailer.js +65 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/transport.d.ts +6 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/transport.js +231 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/validate-response.d.ts +34 -0
- package/node_modules/@connectrpc/connect/dist/esm/protocol-grpc-web/validate-response.js +69 -0
- package/node_modules/@connectrpc/connect/dist/esm/router-transport.d.ts +13 -0
- package/node_modules/@connectrpc/connect/dist/esm/router-transport.js +29 -0
- package/node_modules/@connectrpc/connect/dist/esm/router.d.ts +81 -0
- package/node_modules/@connectrpc/connect/dist/esm/router.js +65 -0
- package/node_modules/@connectrpc/connect/dist/esm/transport.d.ts +20 -0
- package/node_modules/@connectrpc/connect/dist/esm/transport.js +14 -0
- package/node_modules/@connectrpc/connect/package.json +67 -0
- package/node_modules/@connectrpc/connect-node/README.md +144 -0
- package/node_modules/@connectrpc/connect-node/buf.gen.yaml +10 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/compression.d.ts +15 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/compression.js +96 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.d.ts +42 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/connect-node-adapter.js +60 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.d.ts +100 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/connect-transport.js +25 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.d.ts +95 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-transport.js +24 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.d.ts +96 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/grpc-web-transport.js +25 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.d.ts +146 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/http2-session-manager.js +543 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/index.d.ts +14 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/index.js +34 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.d.ts +45 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-error.js +153 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.d.ts +100 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-transport-options.js +58 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.d.ts +54 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-client.js +347 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.d.ts +42 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-handler.js +225 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.d.ts +20 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/node-universal-header.js +117 -0
- package/node_modules/@connectrpc/connect-node/dist/cjs/package.json +1 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/compression.d.ts +15 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/compression.js +93 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.d.ts +42 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/connect-node-adapter.js +57 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.d.ts +100 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/connect-transport.js +22 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.d.ts +95 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/grpc-transport.js +21 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.d.ts +96 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/grpc-web-transport.js +22 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.d.ts +146 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/http2-session-manager.js +539 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/index.d.ts +14 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/index.js +21 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-error.d.ts +45 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-error.js +146 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.d.ts +100 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-transport-options.js +55 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.d.ts +54 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-client.js +344 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.d.ts +42 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-handler.js +221 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.d.ts +20 -0
- package/node_modules/@connectrpc/connect-node/dist/esm/node-universal-header.js +113 -0
- package/node_modules/@connectrpc/connect-node/package.json +44 -0
- package/node_modules/@nvidia/openshell-sdk/README.md +303 -0
- package/node_modules/@nvidia/openshell-sdk/dist/client.d.ts +1243 -0
- package/node_modules/@nvidia/openshell-sdk/dist/client.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/client.js +1321 -0
- package/node_modules/@nvidia/openshell-sdk/dist/client.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/errors.d.ts +35 -0
- package/node_modules/@nvidia/openshell-sdk/dist/errors.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/errors.js +79 -0
- package/node_modules/@nvidia/openshell-sdk/dist/errors.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.d.ts +301 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.js +69 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/datamodel_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.d.ts +581 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.js +90 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/google/rpc/error_details_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.d.ts +9131 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.js +1898 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/openshell_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.d.ts +58 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.js +24 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/options_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.d.ts +1203 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.js +277 -0
- package/node_modules/@nvidia/openshell-sdk/dist/gen/sandbox_pb.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/index.d.ts +7 -0
- package/node_modules/@nvidia/openshell-sdk/dist/index.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/index.js +6 -0
- package/node_modules/@nvidia/openshell-sdk/dist/index.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/oidc.d.ts +14 -0
- package/node_modules/@nvidia/openshell-sdk/dist/oidc.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/oidc.js +177 -0
- package/node_modules/@nvidia/openshell-sdk/dist/oidc.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/raw.d.ts +6 -0
- package/node_modules/@nvidia/openshell-sdk/dist/raw.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/raw.js +15 -0
- package/node_modules/@nvidia/openshell-sdk/dist/raw.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.d.ts +11 -0
- package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.js +58 -0
- package/node_modules/@nvidia/openshell-sdk/dist/ssh-validate.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/transport.d.ts +35 -0
- package/node_modules/@nvidia/openshell-sdk/dist/transport.d.ts.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/dist/transport.js +97 -0
- package/node_modules/@nvidia/openshell-sdk/dist/transport.js.map +1 -0
- package/node_modules/@nvidia/openshell-sdk/package.json +58 -0
- package/package.json +93 -4
- package/server/activity-delivery.js +143 -0
- package/server/activity-store.js +168 -0
- package/server/agent-inventory.js +76 -0
- package/server/agent-resources.py +60 -0
- package/server/api.js +648 -0
- package/server/cli.js +168 -0
- package/server/cloud-connections.js +56 -0
- package/server/cloud-origin.js +11 -0
- package/server/cloud-proxy.js +122 -0
- package/server/cloud-ssh-proxy.cjs +73 -0
- package/server/cloud-ssh.js +135 -0
- package/server/cloud-transfer.js +221 -0
- package/server/compute.js +50 -0
- package/server/editor.js +114 -0
- package/server/egress.js +204 -0
- package/server/files.js +489 -0
- package/server/gateway-install.js +64 -0
- package/server/gateway.js +415 -0
- package/server/image-templates.js +393 -0
- package/server/ingress.js +185 -0
- package/server/launch-token.js +55 -0
- package/server/local-catalog.js +111 -0
- package/server/local-cloud-native.js +152 -0
- package/server/local-cloud.js +123 -0
- package/server/location-inventory.js +94 -0
- package/server/machines.js +84 -0
- package/server/openshell-cli.js +144 -0
- package/server/org.js +536 -0
- package/server/orphan-processes.js +42 -0
- package/server/paths.js +28 -0
- package/server/policy-template-store.js +92 -0
- package/server/policy.js +583 -0
- package/server/remote-gateway-state.js +123 -0
- package/server/remote-gateway.js +420 -0
- package/server/remote-hosts.js +354 -0
- package/server/remote-http.js +14 -0
- package/server/remote-image-engine.js +47 -0
- package/server/remote-runtime.js +65 -0
- package/server/remote-runtime.py +162 -0
- package/server/sandbox-identity.js +14 -0
- package/server/security.js +139 -0
- package/server/session-revocations.js +20 -0
- package/server/setup-artifact-installer.py +54 -0
- package/server/setup-artifacts.js +23 -0
- package/server/setup-auth-discovery.js +24 -0
- package/server/setup-credentials.js +54 -0
- package/server/setup-deployment.js +299 -0
- package/server/setup-discovery.js +289 -0
- package/server/setup-egress.js +133 -0
- package/server/setup-http.js +47 -0
- package/server/setup-installer.py +289 -0
- package/server/setup-json.py +8 -0
- package/server/setup-members.js +77 -0
- package/server/setup-packages.js +214 -0
- package/server/setup-preparation.js +144 -0
- package/server/setup-python.js +8 -0
- package/server/setup-remote-check.js +35 -0
- package/server/setup-transfer.js +17 -0
- package/server/setup-verifier.cjs +43 -0
- package/server/setups.js +172 -0
- package/server/ssh-hosts.js +184 -0
- package/server/ssh.js +153 -0
- package/server/start.js +71 -0
- package/server/terminal.js +173 -0
- package/server/worker-auth.js +18 -0
- package/shared/agent-access.js +103 -0
- package/shared/antigravity-network-guidance.js +9 -0
- package/shared/group-membership.js +33 -0
- package/shared/group-network.js +29 -0
- package/shared/policy-templates.js +79 -0
- package/shared/secret-fields.js +35 -0
- package/shared/setup-launch.js +25 -0
- package/shared/setup-targets.js +11 -0
- package/shared/setup-targets.json +12 -0
- package/src/lib/activity-export.js +52 -0
- package/src/lib/activity-inventory.js +45 -0
- package/src/lib/agents.js +41 -0
- package/src/lib/api.js +173 -0
- package/src/lib/cloud-machine.js +9 -0
- package/src/lib/cloud-origin.js +6 -0
- package/src/lib/cloud-transfer.js +22 -0
- package/src/lib/compute-target.js +46 -0
- package/src/lib/delete-network-policies.js +15 -0
- package/src/lib/egress-groups.js +24 -0
- package/src/lib/egress.js +28 -0
- package/src/lib/files.js +24 -0
- package/src/lib/fleet.js +100 -0
- package/src/lib/format.js +24 -0
- package/src/lib/groups.js +16 -0
- package/src/lib/image-templates.js +139 -0
- package/src/lib/import-setup.js +36 -0
- package/src/lib/local-cloud.js +118 -0
- package/src/lib/location-inventory.js +20 -0
- package/src/lib/locations.js +5 -0
- package/src/lib/placement.js +9 -0
- package/src/lib/policy-editor.js +58 -0
- package/src/lib/policy-sources.js +33 -0
- package/src/lib/quick-setup.js +110 -0
- package/src/lib/sandbox-creations.js +59 -0
- package/src/lib/sandbox-images.js +38 -0
- package/src/lib/sandbox-session.js +140 -0
- package/src/lib/sandboxes.js +78 -0
- package/src/lib/secret-inventory.js +26 -0
- package/src/lib/services.js +41 -0
- package/src/lib/setup-import-jobs.js +62 -0
- package/src/lib/setup-imports.js +4 -0
- package/src/lib/setup-network.js +39 -0
- package/src/lib/setup-template-build.js +17 -0
- package/src/lib/utils.js +6 -0
- package/vendor/OPENSHELL-LICENSE +203 -0
- package/vendor/nvidia-openshell-sdk-0.0.0.tgz +0 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
import fs from 'node:fs'
|
|
2
|
+
import os from 'node:os'
|
|
3
|
+
import path from 'node:path'
|
|
4
|
+
import { spawn } from 'node:child_process'
|
|
5
|
+
import { fail, shellQuote, sshBinary } from './openshell-cli.js'
|
|
6
|
+
|
|
7
|
+
const ALIAS = /^[A-Za-z0-9][A-Za-z0-9._-]{0,252}$/
|
|
8
|
+
const SOCKET = /^\/(?:[A-Za-z0-9_.-]+\/)*[A-Za-z0-9_.-]+$/
|
|
9
|
+
const VERSION = /^\d+\.\d+\.\d+(?:-[A-Za-z0-9]+(?:[.-][A-Za-z0-9]+)*)?$/
|
|
10
|
+
|
|
11
|
+
// Only enumerate names. OpenSSH itself still resolves all connection settings.
|
|
12
|
+
function tokens(line) {
|
|
13
|
+
const words = []
|
|
14
|
+
let word = '', quote = '', escaped = false
|
|
15
|
+
for (const char of line) {
|
|
16
|
+
if (escaped) { word += char; escaped = false; continue }
|
|
17
|
+
if (char === '\\') { escaped = true; continue }
|
|
18
|
+
if (quote) {
|
|
19
|
+
if (char === quote) quote = ''
|
|
20
|
+
else word += char
|
|
21
|
+
} else if (char === '"' || char === "'") quote = char
|
|
22
|
+
else if (char === '#') break
|
|
23
|
+
else if (/\s/.test(char)) { if (word) words.push(word); word = '' }
|
|
24
|
+
else word += char
|
|
25
|
+
}
|
|
26
|
+
if (quote || escaped) throw fail('Malformed quoting in SSH configuration. Fix it before connecting.', 409)
|
|
27
|
+
if (word) words.push(word)
|
|
28
|
+
return words
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export function listSshHosts({ homeDirectory = os.homedir(), configPath = path.join(homeDirectory, '.ssh/config'), systemConfigPath = '/etc/ssh/ssh_config' } = {}) {
|
|
32
|
+
if (!fs.existsSync(configPath)) return []
|
|
33
|
+
const hosts = new Set()
|
|
34
|
+
const visited = new Set()
|
|
35
|
+
let bytes = 0
|
|
36
|
+
function visit(file, base, depth = 0) {
|
|
37
|
+
if (depth > 32 || visited.size > 1024) throw fail('SSH configuration includes are too deeply nested or numerous.', 409)
|
|
38
|
+
let real
|
|
39
|
+
try { real = fs.realpathSync(file) } catch (error) { if (error.code === 'ENOENT') return; throw error }
|
|
40
|
+
if (visited.has(real)) return
|
|
41
|
+
visited.add(real)
|
|
42
|
+
const size = fs.statSync(real).size
|
|
43
|
+
bytes += size
|
|
44
|
+
if (bytes > 4 * 1024 * 1024) throw fail('SSH configuration exceeds the 4 MiB enumeration limit.', 409)
|
|
45
|
+
const text = fs.readFileSync(real, 'utf8')
|
|
46
|
+
for (const line of text.split(/\r?\n/)) {
|
|
47
|
+
const parts = tokens(line.replace(/^(\s*[A-Za-z]+)\s*=\s*/, '$1 '))
|
|
48
|
+
const directive = parts.shift()?.toLowerCase()
|
|
49
|
+
if (directive === 'host') {
|
|
50
|
+
for (const name of parts) if (ALIAS.test(name)) hosts.add(name)
|
|
51
|
+
} else if (directive === 'include') {
|
|
52
|
+
for (let pattern of parts) {
|
|
53
|
+
if (pattern.startsWith('~/')) pattern = path.join(homeDirectory, pattern.slice(2))
|
|
54
|
+
else if (pattern.startsWith('~')) continue // OpenSSH resolves other users; do not guess their homes.
|
|
55
|
+
if (!path.isAbsolute(pattern)) pattern = path.join(base, pattern)
|
|
56
|
+
for (const match of fs.globSync(pattern).sort()) visit(match, base, depth + 1)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
visit(configPath, path.join(homeDirectory, '.ssh'))
|
|
62
|
+
visit(systemConfigPath, path.dirname(systemConfigPath))
|
|
63
|
+
return [...hosts].sort().map((name) => ({ name }))
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
export function sshArgs(host) {
|
|
67
|
+
if (typeof host !== 'string' || !ALIAS.test(host) || !listSshHosts().some(({ name }) => name === host)) {
|
|
68
|
+
throw fail('Choose a concrete Host alias from your local ~/.ssh/config.', 400)
|
|
69
|
+
}
|
|
70
|
+
return ['-T', '-o', 'BatchMode=yes', '-o', 'StrictHostKeyChecking=yes', '-o', 'ConnectTimeout=10',
|
|
71
|
+
'-o', 'ServerAliveInterval=15', '-o', 'ServerAliveCountMax=3', '-o', 'ForwardAgent=no',
|
|
72
|
+
'-o', 'ForwardX11=no', '-o', 'ControlMaster=no', '-o', 'ControlPath=none',
|
|
73
|
+
'-o', 'PermitLocalCommand=no', '-o', 'RemoteCommand=none', '-o', 'RequestTTY=no', '--', host]
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function stop(child, signal) {
|
|
77
|
+
try {
|
|
78
|
+
if (child.pid && process.platform !== 'win32') process.kill(-child.pid, signal)
|
|
79
|
+
else child.kill(signal)
|
|
80
|
+
} catch { /* Already exited. */ }
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
function execute(host, script, { timeoutMs = 60_000, outputLimit = 256 * 1024, signal, input, onProgress } = {}) {
|
|
84
|
+
const args = sshArgs(host)
|
|
85
|
+
args.splice(-2, 0, '-o', 'ClearAllForwardings=yes')
|
|
86
|
+
const executable = sshBinary()
|
|
87
|
+
if (!executable) throw fail('Install the OpenSSH client on this computer before connecting.', 409)
|
|
88
|
+
if (!Number.isFinite(timeoutMs) || timeoutMs <= 0 || !Number.isSafeInteger(outputLimit) || outputLimit <= 0) throw fail('Invalid SSH execution limits.')
|
|
89
|
+
if (typeof script !== 'string' || script.includes('\0')) throw fail('Invalid remote command.')
|
|
90
|
+
signal?.throwIfAborted()
|
|
91
|
+
return new Promise((resolve, reject) => {
|
|
92
|
+
const child = spawn(executable, [...args, `sh -c ${shellQuote(script)}`], {
|
|
93
|
+
detached: process.platform !== 'win32', shell: false, stdio: [input ? 'pipe' : 'ignore', 'pipe', 'pipe'],
|
|
94
|
+
})
|
|
95
|
+
const stdout = [], stderr = []
|
|
96
|
+
let bytes = 0, failure, hardKill, source, progressBuffer = ''
|
|
97
|
+
const terminate = (error) => {
|
|
98
|
+
if (failure) return
|
|
99
|
+
failure = error
|
|
100
|
+
source?.destroy()
|
|
101
|
+
child.stdin?.destroy()
|
|
102
|
+
stop(child, 'SIGTERM')
|
|
103
|
+
hardKill = setTimeout(() => stop(child, 'SIGKILL'), 500)
|
|
104
|
+
}
|
|
105
|
+
const append = (chunks, chunk) => {
|
|
106
|
+
const remaining = outputLimit - bytes
|
|
107
|
+
if (remaining > 0) chunks.push(chunk.subarray(0, remaining))
|
|
108
|
+
bytes += chunk.length
|
|
109
|
+
if (bytes > outputLimit) terminate(fail(`SSH output from ${host} exceeded the ${outputLimit}-byte limit.`, 502))
|
|
110
|
+
}
|
|
111
|
+
child.stdout.on('data', (chunk) => {
|
|
112
|
+
append(stdout, chunk)
|
|
113
|
+
if (!onProgress || failure) return
|
|
114
|
+
progressBuffer += chunk.toString('utf8')
|
|
115
|
+
const lines = progressBuffer.split('\n')
|
|
116
|
+
progressBuffer = lines.pop()
|
|
117
|
+
for (const line of lines) {
|
|
118
|
+
if (line.startsWith('OPENSHELL_PROGRESS=')) onProgress(line.slice(19))
|
|
119
|
+
}
|
|
120
|
+
})
|
|
121
|
+
child.stderr.on('data', (chunk) => append(stderr, chunk))
|
|
122
|
+
const abort = () => terminate(fail(`SSH operation on ${host} was cancelled.`, 409))
|
|
123
|
+
const timer = setTimeout(() => terminate(fail(`SSH operation on ${host} timed out. Check connectivity and the remote Docker engine.`, 504)), timeoutMs)
|
|
124
|
+
signal?.addEventListener('abort', abort, { once: true })
|
|
125
|
+
if (signal?.aborted) abort()
|
|
126
|
+
child.once('error', (error) => terminate(fail(`Could not start SSH: ${error.message}`, 502)))
|
|
127
|
+
if (input && !failure) {
|
|
128
|
+
source = fs.createReadStream(input, { autoClose: true })
|
|
129
|
+
source.once('error', (error) => terminate(fail(`Cannot read runtime package: ${error.message}`, 400)))
|
|
130
|
+
child.stdin.on('error', (error) => terminate(fail(`Runtime package upload failed: ${error.message}`, 502)))
|
|
131
|
+
source.pipe(child.stdin)
|
|
132
|
+
}
|
|
133
|
+
child.once('close', (code, exitSignal) => {
|
|
134
|
+
clearTimeout(timer)
|
|
135
|
+
clearTimeout(hardKill)
|
|
136
|
+
signal?.removeEventListener('abort', abort)
|
|
137
|
+
source?.destroy()
|
|
138
|
+
stop(child, 'SIGKILL') // Also reap any ProxyCommand descendants holding pipes open.
|
|
139
|
+
const out = Buffer.concat(stdout).toString('utf8')
|
|
140
|
+
const err = Buffer.concat(stderr).toString('utf8').trim()
|
|
141
|
+
if (failure) reject(failure)
|
|
142
|
+
else if (code === 255) reject(fail(`SSH to ${host} failed (255): ${err || out.trim() || 'no diagnostic output'}. Verify the alias, credentials, and trusted host key with ssh ${host}.`, 502))
|
|
143
|
+
else if (code !== 0) reject(fail(`Remote command on ${host} failed (${code ?? exitSignal}): ${err || out.trim() || 'no diagnostic output'}`, 502))
|
|
144
|
+
else resolve(out)
|
|
145
|
+
})
|
|
146
|
+
})
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export async function runSsh(host, script, options = {}) {
|
|
150
|
+
return execute(host, script, options)
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
function imageRefs(version) {
|
|
154
|
+
if (typeof version !== 'string' || !VERSION.test(version)) throw fail('The local gateway must report a pinned release version (for example 0.1.2).', 409)
|
|
155
|
+
// Release chart: NVIDIA/OpenShell v0.1.2 deploy/helm/openshell/values.yaml.
|
|
156
|
+
// The persistent gateway container runs the release's gateway image too.
|
|
157
|
+
return ['sandbox', 'supervisor', 'gateway'].map((image) => `ghcr.io/nvidia/openshell/${image}:${version}`)
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Absence is deliberately conservative: a broken CLI, daemon, package, socket,
|
|
161
|
+
// or service is an existing installation that must be repaired manually.
|
|
162
|
+
const dockerPresence = `
|
|
163
|
+
docker_present() {
|
|
164
|
+
if command -v docker >/dev/null 2>&1; then return 0; fi
|
|
165
|
+
if command -v dockerd >/dev/null 2>&1; then
|
|
166
|
+
fail 'Docker Engine is installed but its CLI is unavailable. Repair Docker and this SSH user’s PATH manually, then reconnect.'
|
|
167
|
+
fi
|
|
168
|
+
for item in /usr/bin/docker /usr/local/bin/docker /bin/docker /usr/sbin/dockerd /usr/bin/dockerd /snap/bin/docker /run/docker.sock /var/run/docker.sock /etc/systemd/system/docker.service /lib/systemd/system/docker.service /usr/lib/systemd/system/docker.service /etc/systemd/system/docker.socket /lib/systemd/system/docker.socket /usr/lib/systemd/system/docker.socket; do
|
|
169
|
+
if [ -e "$item" ] || [ -L "$item" ]; then
|
|
170
|
+
fail 'Docker components already exist but its CLI is unavailable. Repair the existing installation and SSH user access manually, then reconnect.'
|
|
171
|
+
fi
|
|
172
|
+
done
|
|
173
|
+
if command -v dpkg-query >/dev/null 2>&1; then
|
|
174
|
+
status=0
|
|
175
|
+
states=$(dpkg-query -W -f='\${db:Status-Status}\\n' docker.io docker-ce docker-ce-cli docker-engine moby-engine moby-cli 2>/dev/null) || status=$?
|
|
176
|
+
[ "$status" -le 1 ] || fail 'Cannot inspect the host Docker package state. Repair package database access manually, then reconnect.'
|
|
177
|
+
for state in $states; do
|
|
178
|
+
case "$state" in installed|unpacked|half-configured|half-installed|triggers-awaited|triggers-pending)
|
|
179
|
+
fail 'Docker packages already exist but its CLI is unavailable. Repair the existing installation manually, then reconnect.';;
|
|
180
|
+
esac
|
|
181
|
+
done
|
|
182
|
+
fi
|
|
183
|
+
if command -v rpm >/dev/null 2>&1; then
|
|
184
|
+
for package in docker docker-ce docker-ce-cli moby-engine moby-cli; do
|
|
185
|
+
if rpm -q "$package" >/dev/null 2>&1; then
|
|
186
|
+
fail 'Docker packages already exist but its CLI is unavailable. Repair the existing installation manually, then reconnect.'
|
|
187
|
+
fi
|
|
188
|
+
done
|
|
189
|
+
fi
|
|
190
|
+
return 1
|
|
191
|
+
}
|
|
192
|
+
`
|
|
193
|
+
|
|
194
|
+
const dockerInstallPlatform = `
|
|
195
|
+
distribution=unknown
|
|
196
|
+
if [ -r /etc/os-release ]; then
|
|
197
|
+
ID=
|
|
198
|
+
. /etc/os-release
|
|
199
|
+
distribution=\${ID:-unknown}
|
|
200
|
+
fi
|
|
201
|
+
supported=true
|
|
202
|
+
reason=
|
|
203
|
+
case "$distribution" in ubuntu|debian) ;; *)
|
|
204
|
+
supported=false
|
|
205
|
+
reason='Automatic Docker installation supports only Ubuntu and Debian. Install a native rootful Docker Engine manually, grant this SSH user socket access, then reconnect.';;
|
|
206
|
+
esac
|
|
207
|
+
case "$(uname -m)" in x86_64|amd64|aarch64|arm64) ;; *)
|
|
208
|
+
supported=false
|
|
209
|
+
reason='Automatic Docker installation requires native amd64 or arm64 Linux. Use a supported host.';;
|
|
210
|
+
esac
|
|
211
|
+
if ! command -v apt-get >/dev/null 2>&1 || ! command -v systemctl >/dev/null 2>&1 || [ ! -d /run/systemd/system ]; then
|
|
212
|
+
supported=false
|
|
213
|
+
reason='Automatic Docker installation requires apt-get and a running systemd host. Install and start Docker Engine manually, grant this SSH user socket access, then reconnect.'
|
|
214
|
+
fi
|
|
215
|
+
`
|
|
216
|
+
|
|
217
|
+
const discovery = `set -eu
|
|
218
|
+
fail() { printf '%s\\n' "$*" >&2; exit 1; }
|
|
219
|
+
[ "$(uname -s)" = Linux ] || fail 'A native Linux Docker host is required.'
|
|
220
|
+
command -v docker >/dev/null 2>&1 || fail 'Docker CLI is unavailable. Install or repair Docker Engine and grant this SSH user socket access, then reconnect.'
|
|
221
|
+
if [ -n "\${DOCKER_CONTEXT:-}" ]; then
|
|
222
|
+
endpoint=$(docker context inspect "$DOCKER_CONTEXT" --format '{{.Endpoints.docker.Host}}')
|
|
223
|
+
elif [ -n "\${DOCKER_HOST:-}" ]; then
|
|
224
|
+
endpoint=$DOCKER_HOST
|
|
225
|
+
else
|
|
226
|
+
endpoint=$(docker context inspect --format '{{.Endpoints.docker.Host}}')
|
|
227
|
+
fi
|
|
228
|
+
case "$endpoint" in unix:///*) socket=\${endpoint#unix://};; *) fail 'Select a local Unix Docker Engine socket on this SSH host; TCP, SSH, and other remote Docker contexts are not supported.';; esac
|
|
229
|
+
case "$socket" in *[!a-zA-Z0-9_./-]*|*'/../'*|*'/./'*|*'//'*) fail 'Docker socket path is not safe for SSH forwarding.';; esac
|
|
230
|
+
[ -S "$socket" ] && [ -r "$socket" ] && [ -w "$socket" ] || fail 'Docker socket is missing or inaccessible. Start Docker Engine and grant this SSH user read/write socket access, then reconnect.'
|
|
231
|
+
unset DOCKER_CONTEXT DOCKER_HOST DOCKER_TLS_VERIFY DOCKER_CERT_PATH
|
|
232
|
+
engine() { docker --host "$endpoint" "$@"; }
|
|
233
|
+
`
|
|
234
|
+
|
|
235
|
+
function architecture(value) {
|
|
236
|
+
return ({ x86_64: 'amd64', amd64: 'amd64', aarch64: 'arm64', arm64: 'arm64' })[value]
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
export async function probeHost(host, version, { signal } = {}) {
|
|
240
|
+
const refs = imageRefs(version)
|
|
241
|
+
const script = `set -eu
|
|
242
|
+
fail() { printf '%s\\n' "$*" >&2; exit 1; }
|
|
243
|
+
[ "$(uname -s)" = Linux ] || fail 'A native Linux Docker host is required.'
|
|
244
|
+
${dockerPresence}
|
|
245
|
+
if ! docker_present; then
|
|
246
|
+
${dockerInstallPlatform}
|
|
247
|
+
printf 'OPENSHELL_HOST_OS=Linux\\nOPENSHELL_HOST_ARCH=%s\\n' "$(uname -m)"
|
|
248
|
+
printf 'OPENSHELL_DOCKER_INSTALLED=false\\nOPENSHELL_DISTRIBUTION=%s\\nOPENSHELL_DOCKER_INSTALL_SUPPORTED=%s\\nOPENSHELL_DOCKER_INSTALL_REASON=%s\\n' "$distribution" "$supported" "$reason"
|
|
249
|
+
exit 0
|
|
250
|
+
fi
|
|
251
|
+
${discovery}
|
|
252
|
+
printf 'OPENSHELL_HOST_OS=%s\\n' "$(uname -s)"
|
|
253
|
+
printf 'OPENSHELL_HOST_ARCH=%s\\n' "$(uname -m)"
|
|
254
|
+
printf 'OPENSHELL_HOST_KERNEL=%s\\n' "$(uname -r)"
|
|
255
|
+
printf 'OPENSHELL_SOCKET=%s\\n' "$socket"
|
|
256
|
+
printf 'OPENSHELL_ENGINE='
|
|
257
|
+
engine info --format '{{json .}}' || fail 'Docker Engine is unusable by this SSH user. Check its socket permissions and daemon status.'
|
|
258
|
+
${refs.map((ref, index) => `image=$(engine image inspect --format '{{json .}}' ${shellQuote(ref)} 2>/dev/null) || image=null\nprintf 'OPENSHELL_IMAGE_${index}=%s\\n' "$image"`).join('\n')}
|
|
259
|
+
`
|
|
260
|
+
const text = await runSsh(host, script, { signal })
|
|
261
|
+
const fields = new Map(text.split(/\r?\n/).filter((line) => line.startsWith('OPENSHELL_')).map((line) => {
|
|
262
|
+
const index = line.indexOf('=')
|
|
263
|
+
return [line.slice(10, index), line.slice(index + 1)]
|
|
264
|
+
}))
|
|
265
|
+
if (fields.get('DOCKER_INSTALLED') === 'false') {
|
|
266
|
+
const arch = architecture(fields.get('HOST_ARCH'))
|
|
267
|
+
if (fields.get('HOST_OS') !== 'Linux' || !fields.get('HOST_ARCH') || !fields.get('DISTRIBUTION')) throw fail('Remote host returned an invalid Docker discovery response.', 502)
|
|
268
|
+
const supported = Boolean(arch) && fields.get('DOCKER_INSTALL_SUPPORTED') === 'true'
|
|
269
|
+
return {
|
|
270
|
+
os: 'linux', arch: arch ?? fields.get('HOST_ARCH'), version, runtimeReady: false,
|
|
271
|
+
dockerInstalled: false, distribution: fields.get('DISTRIBUTION'), dockerInstallSupported: supported,
|
|
272
|
+
...(!supported ? { dockerInstallReason: fields.get('DOCKER_INSTALL_REASON') || 'Install Docker Engine manually on a supported native Linux host, then reconnect.' } : {}),
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
let info, images
|
|
276
|
+
try {
|
|
277
|
+
info = JSON.parse(fields.get('ENGINE'))
|
|
278
|
+
images = refs.map((_, index) => JSON.parse(fields.get(`IMAGE_${index}`)))
|
|
279
|
+
} catch { throw fail('Remote Docker returned an invalid probe response. Check the remote shell and Docker installation.', 502) }
|
|
280
|
+
const arch = architecture(fields.get('HOST_ARCH'))
|
|
281
|
+
const dockerSocket = fields.get('SOCKET')
|
|
282
|
+
if (fields.get('HOST_OS') !== 'Linux' || info?.OSType !== 'linux' || /docker[ -]desktop/i.test(`${info?.OperatingSystem} ${info?.Name}`)) throw fail('Use a native Linux Docker Engine, not Docker Desktop or a non-Linux daemon.', 409)
|
|
283
|
+
if (!arch || architecture(info.Architecture) !== arch) throw fail('Docker and the SSH host must have the same supported architecture (amd64 or arm64).', 409)
|
|
284
|
+
if (!fields.get('HOST_KERNEL') || info.KernelVersion !== fields.get('HOST_KERNEL')) throw fail('Docker must run directly on the SSH host, not inside a separate VM. Select this host’s native Docker Engine socket.', 409)
|
|
285
|
+
if (!SOCKET.test(dockerSocket ?? '') || dockerSocket.split('/').some((part) => part === '.' || part === '..')) throw fail('The Docker socket must be a safe absolute Unix socket path.', 409)
|
|
286
|
+
if (!Array.isArray(info.SecurityOptions) || !info.SecurityOptions.some((option) => /^name=seccomp(?:,|$)/.test(option))) throw fail('Enable Docker Engine seccomp support before running non-root OpenShell workloads.', 409)
|
|
287
|
+
if (info.SecurityOptions.some((option) => /^name=rootless(?:,|$)/.test(option))) throw fail('Rootless Docker is not supported by persistent remote gateways. Select a rootful Docker Engine on this Linux host; workloads still run non-root.', 409)
|
|
288
|
+
if (typeof info.ID !== 'string' || !info.ID.trim()) throw fail('Docker Engine did not report its identity; upgrade or repair the daemon before connecting.', 409)
|
|
289
|
+
const runtimeReady = images.every((image, index) => image?.Os === 'linux' && architecture(image.Architecture) === arch && image.RepoTags?.includes(refs[index]))
|
|
290
|
+
return { os: 'linux', arch, dockerSocket, runtimeReady, version, engineId: info.ID, dockerInstalled: true }
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
export async function installDocker(host, version, { signal, onProgress = () => {} } = {}) {
|
|
294
|
+
onProgress('Checking whether Docker is genuinely missing')
|
|
295
|
+
const before = await probeHost(host, version, { signal })
|
|
296
|
+
if (before.dockerInstalled) return before
|
|
297
|
+
if (!before.dockerInstallSupported) throw fail(before.dockerInstallReason, 409)
|
|
298
|
+
const script = `set -eu
|
|
299
|
+
fail() { printf '%s\\n' "$*" >&2; exit 1; }
|
|
300
|
+
[ "$(uname -s)" = Linux ] || fail 'A native Linux Docker host is required.'
|
|
301
|
+
${dockerPresence}
|
|
302
|
+
# A concurrent installation must never become permission repair or replacement.
|
|
303
|
+
if docker_present; then exit 0; fi
|
|
304
|
+
${dockerInstallPlatform}
|
|
305
|
+
[ "$supported" = true ] || fail "$reason"
|
|
306
|
+
uid=$(id -u)
|
|
307
|
+
user=$(id -un)
|
|
308
|
+
if [ "$uid" != 0 ]; then
|
|
309
|
+
command -v sudo >/dev/null 2>&1 && sudo -n true || fail 'Docker installation needs root or passwordless sudo (sudo -n). Ask an administrator to install Docker, then reconnect; no password can be entered here.'
|
|
310
|
+
fi
|
|
311
|
+
priv() { if [ "$uid" = 0 ]; then "$@"; else sudo -n "$@"; fi; }
|
|
312
|
+
printf 'OPENSHELL_PROGRESS=Updating distribution package indexes\\n'
|
|
313
|
+
priv env DEBIAN_FRONTEND=noninteractive apt-get update
|
|
314
|
+
if docker_present; then exit 0; fi
|
|
315
|
+
printf 'OPENSHELL_PROGRESS=Installing the distribution docker.io package and dependencies\\n'
|
|
316
|
+
priv env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends docker.io --no-remove
|
|
317
|
+
printf 'OPENSHELL_PROGRESS=Enabling and starting the Docker system service\\n'
|
|
318
|
+
priv systemctl enable --now docker
|
|
319
|
+
if [ "$uid" != 0 ]; then
|
|
320
|
+
printf 'OPENSHELL_PROGRESS=Granting the SSH user docker group access (root-equivalent)\\n'
|
|
321
|
+
priv usermod -aG docker "$user"
|
|
322
|
+
fi
|
|
323
|
+
`
|
|
324
|
+
try {
|
|
325
|
+
await execute(host, script, { signal, onProgress, timeoutMs: 15 * 60_000, outputLimit: 1024 * 1024 })
|
|
326
|
+
onProgress('Verifying Docker access in a fresh SSH session')
|
|
327
|
+
const probe = await probeHost(host, version, { signal })
|
|
328
|
+
if (!probe.dockerInstalled) throw fail('Docker is still missing after the package installation.', 502)
|
|
329
|
+
return probe
|
|
330
|
+
} catch (error) {
|
|
331
|
+
throw fail(`Docker preparation did not complete. Package, service, or group changes may already remain on the host; inspect it before retrying. ${error.message}`, error.status ?? 502)
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
export async function installRuntime(host, version, method, { packagePath, onProgress = () => {}, signal } = {}) {
|
|
336
|
+
const refs = imageRefs(version)
|
|
337
|
+
if (method !== 'download' && method !== 'upload') throw fail('Choose runtime download or Docker-save package upload.')
|
|
338
|
+
if (method === 'upload') {
|
|
339
|
+
if (typeof packagePath !== 'string' || !path.isAbsolute(packagePath)) throw fail('A local Docker-save package file is required.')
|
|
340
|
+
let stat
|
|
341
|
+
try { stat = fs.statSync(packagePath) } catch { throw fail('The uploaded Docker-save package is unavailable.') }
|
|
342
|
+
if (!stat.isFile() || stat.size === 0) throw fail('The Docker-save package must be a nonempty regular file.')
|
|
343
|
+
}
|
|
344
|
+
await probeHost(host, version, { signal })
|
|
345
|
+
onProgress(method === 'download' ? 'Downloading pinned runtime images on the SSH host' : 'Uploading and loading the Docker-save package')
|
|
346
|
+
const command = method === 'download'
|
|
347
|
+
? refs.map((ref) => `engine pull --quiet ${shellQuote(ref)}`).join('\n')
|
|
348
|
+
: 'engine load --quiet'
|
|
349
|
+
await execute(host, `${discovery}${command}\n`, { input: method === 'upload' ? packagePath : undefined, timeoutMs: 30 * 60_000, outputLimit: 1024 * 1024, signal })
|
|
350
|
+
onProgress('Checking the installed runtime versions and platform')
|
|
351
|
+
const probe = await probeHost(host, version, { signal })
|
|
352
|
+
if (!probe.runtimeReady) throw fail(`The host still needs the pinned linux/${probe.arch} images: ${refs.join(', ')}. Build the Docker-save package for this host's platform.`, 409)
|
|
353
|
+
return probe
|
|
354
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export const responseJson=(res,status,value)=>{res.writeHead(status,{'Content-Type':'application/json','Cache-Control':'no-store'});res.end(JSON.stringify(value))}
|
|
2
|
+
export const remoteFail=(message,status=400)=>Object.assign(Error(message),{status})
|
|
3
|
+
export async function readJson(req,max=16000){
|
|
4
|
+
if(req.headers['content-type']!=='application/json'||req.headers['x-openshell-console']!=='1')throw remoteFail('Request rejected',403)
|
|
5
|
+
let body='';for await(const chunk of req){body+=chunk;if(Buffer.byteLength(body)>max)throw remoteFail('Request too large',413)}
|
|
6
|
+
try{return JSON.parse(body)}catch{throw remoteFail('Invalid JSON')}
|
|
7
|
+
}
|
|
8
|
+
export function safeWorkspaceTarget(target,prefix){
|
|
9
|
+
if(typeof target!=='string'||!target.startsWith(prefix+'/'))throw remoteFail('Invalid remote target',404)
|
|
10
|
+
const suffix=target.slice(prefix.length),path=suffix.split('?')[0]
|
|
11
|
+
if(/%2f|%5c|%2e|\\|\/\//i.test(path)||path.split('/').some(p=>p==='.'||p==='..'))throw remoteFail('Invalid remote target')
|
|
12
|
+
if(!/^\/(context|inventory|overview|sandboxes|activity|activity-destinations|setups|cloud-export|cloud-import|cloud-transfer|policy|settings|secrets|profiles|templates|image-templates|org|egress|files|downloads|ingress|stream|editors|local-folder|terminal|ssh)(?:\/|$)/.test(path))throw remoteFail('Unknown remote operation',404)
|
|
13
|
+
return '/api/os'+suffix
|
|
14
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import fs from 'node:fs/promises'
|
|
2
|
+
import path from 'node:path'
|
|
3
|
+
import { parse } from 'smol-toml'
|
|
4
|
+
import { CONFIG_DIR } from './gateway.js'
|
|
5
|
+
import { stateDirectory } from './paths.js'
|
|
6
|
+
import { remoteGatewayName } from './remote-gateway-state.js'
|
|
7
|
+
import { fail } from './openshell-cli.js'
|
|
8
|
+
|
|
9
|
+
// The caller supplies its Docker runner so cancellation and command execution
|
|
10
|
+
// retain the image job's existing behavior. Never discover another Docker host.
|
|
11
|
+
export async function remoteImageEngine(target, { execute } = {}) {
|
|
12
|
+
const unsupported = () => fail('This remote gateway has no managed SSH Docker transport. Connect its host through SSH in Connections, then select that connection to use image templates.', 409)
|
|
13
|
+
if (!target?.remote || !/^console-ssh-[a-f0-9]{24}$/.test(target.name || '')) throw unsupported()
|
|
14
|
+
if (typeof execute !== 'function') throw new TypeError('remoteImageEngine requires a Docker execute function.')
|
|
15
|
+
const reconnect = () => fail('The managed SSH Docker connection state is missing or invalid. Reconnect this host in Connections before using image templates.', 409)
|
|
16
|
+
let owner
|
|
17
|
+
try {
|
|
18
|
+
owner = JSON.parse(await fs.readFile(path.join(CONFIG_DIR, 'gateways', target.name, 'console-managed.json'), 'utf8'))
|
|
19
|
+
} catch (error) {
|
|
20
|
+
if (error.code === 'ENOENT') throw unsupported()
|
|
21
|
+
throw reconnect()
|
|
22
|
+
}
|
|
23
|
+
const root = path.join(stateDirectory(), 'remote-gateways', target.name)
|
|
24
|
+
if (owner?.root !== root || typeof owner.host !== 'string' || !owner.host.trim()) throw reconnect()
|
|
25
|
+
let connection, socketPath
|
|
26
|
+
try {
|
|
27
|
+
connection = JSON.parse(await fs.readFile(path.join(root, 'connection.json'), 'utf8'))
|
|
28
|
+
socketPath = parse(await fs.readFile(path.join(root, 'gateway.toml'), 'utf8')).openshell?.drivers?.docker?.socket_path
|
|
29
|
+
} catch { throw reconnect() }
|
|
30
|
+
if (connection?.host !== owner.host || typeof connection.engineId !== 'string' || !connection.engineId.trim()
|
|
31
|
+
|| !Number.isInteger(connection.port) || connection.port < 1024 || connection.port > 65535
|
|
32
|
+
|| remoteGatewayName(connection.host, connection.engineId) !== target.name
|
|
33
|
+
|| typeof socketPath !== 'string' || !path.isAbsolute(socketPath) || socketPath.includes('\0')) throw reconnect()
|
|
34
|
+
|
|
35
|
+
const endpoint = `unix://${socketPath}`
|
|
36
|
+
let info
|
|
37
|
+
try {
|
|
38
|
+
info = JSON.parse(await execute(['info', '--format', '{{json .}}'], { engine: { endpoint }, timeout: 15_000 }))
|
|
39
|
+
} catch {
|
|
40
|
+
throw fail('The SSH Docker tunnel is not available. Reconnect this host in Connections and retry the image operation.', 409)
|
|
41
|
+
}
|
|
42
|
+
if (!info || info.ID !== connection.engineId) throw fail('The SSH Docker tunnel no longer reaches the saved Docker engine. Reconnect this host in Connections before using image templates.', 409)
|
|
43
|
+
if (info.OSType !== 'linux') throw fail('The SSH host must run Linux containers to use image templates.', 409)
|
|
44
|
+
const architecture = ['aarch64', 'arm64'].includes(info.Architecture) ? 'arm64' : ['x86_64', 'amd64'].includes(info.Architecture) ? 'amd64' : null
|
|
45
|
+
if (!architecture) throw fail('The SSH Docker engine must use the amd64 or arm64 architecture to use image templates.', 409)
|
|
46
|
+
return { endpoint, architecture, engineId: connection.engineId }
|
|
47
|
+
}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import fs from 'node:fs/promises'
|
|
2
|
+
import os from 'node:os'
|
|
3
|
+
import path from 'node:path'
|
|
4
|
+
import { runSsh } from './remote-hosts.js'
|
|
5
|
+
import { shellQuote, fail } from './openshell-cli.js'
|
|
6
|
+
import { DatabaseSync } from 'node:sqlite'
|
|
7
|
+
|
|
8
|
+
// Official v0.1.2 gateway image, pinned to the multi-platform release manifest.
|
|
9
|
+
export const REMOTE_GATEWAY_IMAGE = 'ghcr.io/nvidia/openshell/gateway:0.1.2@sha256:2fe4dad9118e14ab80a8258b545ea6e6cd74c3469e24ad4e6610f964d98913a2'
|
|
10
|
+
export const REMOTE_GATEWAY_IDS = {
|
|
11
|
+
amd64: 'sha256:d6a87806b557730d55c95b4b3bd99ab74ccab0ad479166e116fae545e2b2f45e',
|
|
12
|
+
arm64: 'sha256:e67f0bb7fac103c9efd05d481ea9aee464a59d8503490d3c4daca63546718eec',
|
|
13
|
+
}
|
|
14
|
+
const runtimeScript = await fs.readFile(new URL('./remote-runtime.py', import.meta.url), 'utf8')
|
|
15
|
+
// The CA signing key and operator's client key never leave this computer.
|
|
16
|
+
export const REMOTE_TLS_FILES = ['ca.crt', 'server.crt', 'server.key', 'supervisor.crt', 'supervisor.key', 'jwt.key', 'jwt.pub', 'jwt.kid']
|
|
17
|
+
|
|
18
|
+
export async function legacyRuntimeState(root, temporary) {
|
|
19
|
+
const directory = path.join(root, 'state'), database = path.join(directory, 'openshell/gateway/openshell.db')
|
|
20
|
+
try { await fs.access(database) } catch (error) { if (error.code === 'ENOENT') return {}; throw error }
|
|
21
|
+
// A consistent read-only snapshot includes committed WAL data. The original
|
|
22
|
+
// database remains intact for rollback; never copy a live .db file alone.
|
|
23
|
+
const snapshot = path.join(temporary, 'legacy.sqlite')
|
|
24
|
+
const db = new DatabaseSync(database, { readOnly: true })
|
|
25
|
+
try { db.exec(`VACUUM INTO '${snapshot.replaceAll("'", "''")}'`) } finally { db.close() }
|
|
26
|
+
const files = {}, pending = [directory]
|
|
27
|
+
let bytes = 0
|
|
28
|
+
while (pending.length) {
|
|
29
|
+
const folder = pending.pop()
|
|
30
|
+
for (const entry of await fs.readdir(folder, { withFileTypes: true })) {
|
|
31
|
+
if (entry.isSymbolicLink()) throw fail('Legacy gateway state contains a symlink. Migrate it manually before connecting.', 409)
|
|
32
|
+
const file = path.join(folder, entry.name)
|
|
33
|
+
if (entry.isDirectory()) { pending.push(file); continue }
|
|
34
|
+
if (!entry.isFile() || /-(wal|shm)$/.test(entry.name)) continue
|
|
35
|
+
const data = await fs.readFile(file === database ? snapshot : file)
|
|
36
|
+
bytes += data.length
|
|
37
|
+
if (bytes > 64 * 1024 * 1024 || Object.keys(files).length >= 5000) throw fail('Legacy gateway state exceeds the automatic migration limit. Migrate it manually.', 409)
|
|
38
|
+
files[path.relative(directory, file).split(path.sep).join('/')] = data.toString('base64')
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return files
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export async function startRemoteRuntime(host, probe, state, { signal, download = true, execute = runSsh } = {}) {
|
|
45
|
+
if (probe.version !== '0.1.2' || !REMOTE_GATEWAY_IDS[probe.arch]) throw fail('Persistent remote gateways require OpenShell 0.1.2 on Linux amd64/arm64.', 409)
|
|
46
|
+
const files = Object.fromEntries(await Promise.all(REMOTE_TLS_FILES.map(async name => [name, (await fs.readFile(path.join(state.tls, name))).toString('base64')])))
|
|
47
|
+
const configuration = await fs.readFile(state.configFile, 'utf8')
|
|
48
|
+
// gateway.toml remains local transport metadata for image jobs. Its remote
|
|
49
|
+
// counterpart uses host-local Docker and host-local certificate paths.
|
|
50
|
+
const remoteConfig = configuration.replaceAll(state.tls, '__CONSOLE_REMOTE_ROOT__/tls').replaceAll(state.socketPath, probe.dockerSocket)
|
|
51
|
+
const directory = await fs.mkdtemp(path.join(os.tmpdir(), 'os-runtime-'))
|
|
52
|
+
try {
|
|
53
|
+
const input = path.join(directory, 'input.json')
|
|
54
|
+
let migrated = false
|
|
55
|
+
try { await fs.access(path.join(state.root, 'remote-persistent')); migrated = true } catch (error) { if (error.code !== 'ENOENT') throw error }
|
|
56
|
+
const legacy = migrated ? {} : await legacyRuntimeState(state.root, directory)
|
|
57
|
+
await fs.writeFile(input, JSON.stringify({ name: state.name, engineId: probe.engineId, port: state.port, socket: probe.dockerSocket, config: remoteConfig, files, legacy, expectExisting: migrated, image: REMOTE_GATEWAY_IMAGE, imageId: REMOTE_GATEWAY_IDS[probe.arch], arch: probe.arch, download }), { mode: 0o600 })
|
|
58
|
+
const output = await execute(host, `python3 -c ${shellQuote(runtimeScript)}`, { input, signal, timeoutMs: 180_000 })
|
|
59
|
+
let result
|
|
60
|
+
try { result = JSON.parse(output) } catch { throw fail('The remote gateway returned an invalid startup response.', 502) }
|
|
61
|
+
if (result.name !== state.name || result.engineId !== probe.engineId || result.port !== state.port) throw fail('Remote gateway identity did not match this connection.', 409)
|
|
62
|
+
await fs.writeFile(path.join(state.root, 'remote-persistent'), '1\n', { mode: 0o600 })
|
|
63
|
+
return result
|
|
64
|
+
} finally { await fs.rm(directory, { recursive: true, force: true }) }
|
|
65
|
+
}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"""Start an isolated, persistent Docker gateway. No SSH-owned background process."""
|
|
2
|
+
import base64
|
|
3
|
+
import json
|
|
4
|
+
import os
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
import re
|
|
7
|
+
import stat
|
|
8
|
+
import subprocess
|
|
9
|
+
import sys
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def main():
|
|
13
|
+
value = json.load(sys.stdin)
|
|
14
|
+
name = value['name']
|
|
15
|
+
if not re.fullmatch(r'console-ssh-[a-f0-9]{24}', name):
|
|
16
|
+
raise ValueError('Invalid gateway name')
|
|
17
|
+
os.umask(0o077)
|
|
18
|
+
root = Path.home() / '.local/state/openshell-console/remote-gateways' / name
|
|
19
|
+
if ',' in str(root):
|
|
20
|
+
raise ValueError('Remote gateway home path cannot contain a Docker mount separator')
|
|
21
|
+
if value.get('expectExisting') and not (root / 'managed.json').is_file():
|
|
22
|
+
raise ValueError('Saved remote gateway state is missing. Restore it before reconnecting; no replacement was created')
|
|
23
|
+
root.mkdir(parents=True, exist_ok=True, mode=0o700)
|
|
24
|
+
if root.is_symlink() or root.resolve() != root:
|
|
25
|
+
raise ValueError('Remote gateway state must not use symlinks')
|
|
26
|
+
os.chmod(root, 0o700)
|
|
27
|
+
tls = root / 'tls'
|
|
28
|
+
tls.mkdir(exist_ok=True, mode=0o700)
|
|
29
|
+
if tls.is_symlink():
|
|
30
|
+
raise ValueError('Remote TLS directory must not be a symlink')
|
|
31
|
+
|
|
32
|
+
def write_once(file, data):
|
|
33
|
+
try:
|
|
34
|
+
fd = os.open(file, os.O_WRONLY | os.O_CREAT | os.O_EXCL | os.O_NOFOLLOW, 0o600)
|
|
35
|
+
except FileExistsError:
|
|
36
|
+
if file.is_symlink() or not file.is_file() or file.read_bytes() != data:
|
|
37
|
+
raise ValueError('Existing remote gateway state differs; it was left unchanged')
|
|
38
|
+
return
|
|
39
|
+
with os.fdopen(fd, 'wb') as stream:
|
|
40
|
+
stream.write(data)
|
|
41
|
+
|
|
42
|
+
allowed = {'ca.crt', 'server.crt', 'server.key', 'supervisor.crt', 'supervisor.key', 'jwt.key', 'jwt.pub', 'jwt.kid'}
|
|
43
|
+
if set(value['files']) != allowed:
|
|
44
|
+
raise ValueError('Invalid runtime certificate bundle')
|
|
45
|
+
identity = {'name': name, 'engineId': value['engineId'], 'port': value['port']}
|
|
46
|
+
write_once(root / 'managed.json', json.dumps(identity, sort_keys=True).encode())
|
|
47
|
+
for filename, data in value['files'].items():
|
|
48
|
+
write_once(tls / filename, base64.b64decode(data, validate=True))
|
|
49
|
+
# Paths in generated TOML are basic strings; escape the remote home path.
|
|
50
|
+
config = value['config'].replace('__CONSOLE_REMOTE_ROOT__', json.dumps(str(root))[1:-1])
|
|
51
|
+
write_once(root / 'gateway.toml', config.encode())
|
|
52
|
+
for folder in ['config', 'state', 'cache']:
|
|
53
|
+
(root / folder).mkdir(exist_ok=True, mode=0o700)
|
|
54
|
+
if (root / folder).is_symlink():
|
|
55
|
+
raise ValueError('Remote gateway directories must not use symlinks')
|
|
56
|
+
|
|
57
|
+
legacy = value.get('legacy') or {}
|
|
58
|
+
migration = root / 'state/.console-migrated'
|
|
59
|
+
database = root / 'state/openshell/gateway/openshell.db'
|
|
60
|
+
if value.get('expectExisting') and not database.is_file():
|
|
61
|
+
raise ValueError('The remote gateway database is missing; no empty replacement was created')
|
|
62
|
+
if legacy and not migration.exists():
|
|
63
|
+
if 'openshell/gateway/openshell.db' not in legacy:
|
|
64
|
+
raise ValueError('Legacy state does not contain its gateway database')
|
|
65
|
+
if database.exists():
|
|
66
|
+
raise ValueError('Both local legacy and remote gateway databases exist. Resolve the migration manually; neither was overwritten')
|
|
67
|
+
staged_state = root / 'migration-state'
|
|
68
|
+
staged_state.mkdir(exist_ok=True, mode=0o700)
|
|
69
|
+
if staged_state.is_symlink():
|
|
70
|
+
raise ValueError('Migration directory must not be a symlink')
|
|
71
|
+
for filename, data in legacy.items():
|
|
72
|
+
parts = filename.split('/')
|
|
73
|
+
if any(not re.fullmatch(r'[A-Za-z0-9_.-]+', part) or part in {'.', '..'} for part in parts):
|
|
74
|
+
raise ValueError('Invalid legacy gateway state path')
|
|
75
|
+
file = staged_state / filename
|
|
76
|
+
file.parent.mkdir(parents=True, exist_ok=True, mode=0o700)
|
|
77
|
+
if file.parent.resolve() != file.parent:
|
|
78
|
+
raise ValueError('Legacy state must not use symlinks')
|
|
79
|
+
write_once(file, base64.b64decode(data, validate=True))
|
|
80
|
+
import sqlite3
|
|
81
|
+
from urllib.parse import quote
|
|
82
|
+
with sqlite3.connect('file:' + quote(str(staged_state / 'openshell/gateway/openshell.db')) + '?mode=ro', uri=True) as migrated_db:
|
|
83
|
+
if migrated_db.execute('PRAGMA integrity_check').fetchone()[0] != 'ok':
|
|
84
|
+
raise ValueError('Legacy gateway database failed integrity verification')
|
|
85
|
+
write_once(staged_state / '.console-migrated', b'1\n')
|
|
86
|
+
os.rmdir(root / 'state')
|
|
87
|
+
os.rename(staged_state, root / 'state')
|
|
88
|
+
|
|
89
|
+
def docker(*args, check=True):
|
|
90
|
+
result = subprocess.run(['docker', '--host', 'unix://' + value['socket'], *args], capture_output=True, text=True, timeout=150)
|
|
91
|
+
if check and result.returncode:
|
|
92
|
+
# Never relay Docker output containing config or credentials.
|
|
93
|
+
raise RuntimeError('Remote Docker gateway operation failed: ' + args[0])
|
|
94
|
+
return result
|
|
95
|
+
|
|
96
|
+
info = json.loads(docker('info', '--format', '{{json .}}').stdout)
|
|
97
|
+
if info['ID'] != value['engineId']:
|
|
98
|
+
raise ValueError('The remote Docker engine changed during connection')
|
|
99
|
+
image = docker('image', 'inspect', value['image'], check=False)
|
|
100
|
+
if image.returncode:
|
|
101
|
+
image = docker('image', 'inspect', value['imageId'], check=False)
|
|
102
|
+
if image.returncode:
|
|
103
|
+
# docker save/load may retain only the release tag. Its content is
|
|
104
|
+
# checked against the pinned digest below before it can run.
|
|
105
|
+
image = docker('image', 'inspect', value['image'].split('@')[0], check=False)
|
|
106
|
+
if image.returncode:
|
|
107
|
+
if not value['download']:
|
|
108
|
+
raise RuntimeError('Upload the pinned gateway:0.1.2 image together with the sandbox and supervisor images')
|
|
109
|
+
docker('pull', '--platform', 'linux/' + value['arch'], value['image'])
|
|
110
|
+
image = docker('image', 'inspect', value['image'])
|
|
111
|
+
image_info = json.loads(image.stdout)[0]
|
|
112
|
+
# Docker's containerd store identifies a multi-platform image by its
|
|
113
|
+
# manifest digest; the classic store uses the platform config digest.
|
|
114
|
+
if image_info['Id'] not in {value['imageId'], value['image'].split('@')[1]} or image_info['Architecture'] != value['arch'] or image_info['Os'] != 'linux':
|
|
115
|
+
raise ValueError('Remote gateway image does not match the pinned release')
|
|
116
|
+
image_id = image_info['Id']
|
|
117
|
+
|
|
118
|
+
socket_info = os.stat(value['socket'])
|
|
119
|
+
if not stat.S_ISSOCK(socket_info.st_mode):
|
|
120
|
+
raise ValueError('Docker endpoint must be a Unix socket')
|
|
121
|
+
common = ['--network', 'host', '--user', str(os.getuid()) + ':' + str(os.getgid()),
|
|
122
|
+
'--group-add', str(socket_info.st_gid),
|
|
123
|
+
'--mount', 'type=bind,source=' + str(root) + ',target=' + str(root),
|
|
124
|
+
'--mount', 'type=bind,source=' + value['socket'] + ',target=' + value['socket'],
|
|
125
|
+
'--env', 'XDG_CONFIG_HOME=' + str(root / 'config'),
|
|
126
|
+
'--env', 'XDG_STATE_HOME=' + str(root / 'state'),
|
|
127
|
+
'--env', 'XDG_CACHE_HOME=' + str(root / 'cache')]
|
|
128
|
+
existing = docker('container', 'inspect', name, check=False)
|
|
129
|
+
if not existing.returncode:
|
|
130
|
+
container = json.loads(existing.stdout)[0]
|
|
131
|
+
labels = container['Config'].get('Labels') or {}
|
|
132
|
+
mounts = {entry['Destination']: entry['Source'] for entry in container['Mounts']}
|
|
133
|
+
if (labels.get('openshell.console/engine') != value['engineId']
|
|
134
|
+
or labels.get('openshell.console/gateway') != name
|
|
135
|
+
or container['Image'] != image_id
|
|
136
|
+
or container['HostConfig']['NetworkMode'] != 'host'
|
|
137
|
+
or container['HostConfig']['RestartPolicy']['Name'] != 'unless-stopped'
|
|
138
|
+
or container['Config']['User'] != str(os.getuid()) + ':' + str(os.getgid())
|
|
139
|
+
or not set(['XDG_CONFIG_HOME=' + str(root / 'config'),
|
|
140
|
+
'XDG_STATE_HOME=' + str(root / 'state'),
|
|
141
|
+
'XDG_CACHE_HOME=' + str(root / 'cache')]).issubset(container['Config'].get('Env') or [])
|
|
142
|
+
or mounts.get(str(root)) != str(root)
|
|
143
|
+
or mounts.get(value['socket']) != value['socket']
|
|
144
|
+
or container['Config']['Cmd'] != ['--config', str(root / 'gateway.toml')]):
|
|
145
|
+
raise ValueError('An unrelated container uses this gateway name; it was left unchanged')
|
|
146
|
+
if not container['State']['Running']:
|
|
147
|
+
docker('start', name)
|
|
148
|
+
else:
|
|
149
|
+
docker('run', '--rm', *common, image_id, 'config', 'preflight', '--path', str(root / 'gateway.toml'))
|
|
150
|
+
docker('run', '--detach', '--name', name, '--restart', 'unless-stopped',
|
|
151
|
+
'--label', 'openshell.console/gateway=' + name,
|
|
152
|
+
'--label', 'openshell.console/engine=' + value['engineId'],
|
|
153
|
+
*common, image_id, '--config', str(root / 'gateway.toml'))
|
|
154
|
+
print(json.dumps(identity))
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
if __name__ == '__main__':
|
|
158
|
+
try:
|
|
159
|
+
main()
|
|
160
|
+
except Exception as error:
|
|
161
|
+
print(str(error), file=sys.stderr)
|
|
162
|
+
sys.exit(1)
|