blob: e1f3e262756f68b61e3e74356b9f8a8504da9077 [file] [log] [blame]
// Copyright 2021-2023 Buf Technologies, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import type {
BinaryReadOptions,
BinaryWriteOptions,
JsonReadOptions,
JsonWriteOptions,
} from "@bufbuild/protobuf";
import type { Interceptor, Transport } from "@apachedubbo/dubbo";
import type { Compression } from "@apachedubbo/dubbo/protocol";
import { createTransport } from "@apachedubbo/dubbo/protocol-triple";
import {
type DeprecatedNodeTransportOptions,
type NodeTransportOptions,
validateNodeTransportOptions,
} from "./node-transport-options.js";
import type { ObservableOptions } from '@apachedubbo/dubbo-observable'
/**
* Options used to configure the Dubbo transport.
*
* See createDubboTransport().
*/
type DubboTransportOptions = NodeTransportOptions &
DeprecatedNodeTransportOptions & {
/**
* Base URI for all HTTP requests.
*
* Requests will be made to <baseUrl>/<package>.<service>/method
*
* Example: `baseUrl: "https://example.com/my-api"`
*
* This will make a `POST /my-api/my_package.MyService/Foo` to
* `example.com` via HTTPS.
*/
baseUrl: string;
/**
* By default, dubbo-node clients use the binary format.
*/
useBinaryFormat?: boolean;
/**
* Interceptors that should be applied to all calls running through
* this transport. See the Interceptor type for details.
*/
interceptors?: Interceptor[];
/**
* Options for the JSON format.
* By default, unknown fields are ignored.
*/
jsonOptions?: Partial<JsonReadOptions & JsonWriteOptions>;
/**
* Options for the binary wire format.
*/
binaryOptions?: Partial<BinaryReadOptions & BinaryWriteOptions>;
/**
* Compression algorithms available to a client. Clients ask servers to
* compress responses using any of the registered algorithms. The first
* registered algorithm is the most preferred.
*
* It is safe to use this option liberally: servers will ignore any
* compression algorithms they don't support. To compress requests, pair this
* option with `sendCompression`.
*
* If this option is not provided, the compression algorithms "gzip" and "br"
* (Brotli) are accepted. To opt out of response compression, pass an
* empty array.
*/
acceptCompression?: Compression[];
/**
* Configures the client to use the specified algorithm to compress request
* messages.
*
* Because some servers don't support compression, clients default to sending
* uncompressed requests.
*/
sendCompression?: Compression;
/**
* Sets a minimum size threshold for compression: Messages that are smaller
* than the configured minimum are sent uncompressed.
*
* The default value is 1 kibibyte, because the CPU cost of compressing very
* small messages usually isn't worth the small reduction in network I/O.
*/
compressMinBytes?: number;
/**
* Limits the performance impact of pathologically large messages sent by the
* server. Limits apply to each individual message, not to the stream as a
* whole.
*
* The default limit is the maximum supported value of ~4GiB.
*/
readMaxBytes?: number;
/**
* Prevents sending messages too large for the server to handle.
*
* The default limit is the maximum supported value of ~4GiB.
*/
writeMaxBytes?: number;
/**
* Controls whether or not Dubbo GET requests should be used when
* available, on side-effect free methods. Defaults to false.
*/
useHttpGet?: boolean;
/**
* Observable related configurations
*/
observableOptions?: ObservableOptions;
};
/**
* Create a Transport for the Dubbo protocol using the Node.js `http`, `http2`,
* or `http2` module.
*/
export function createDubboTransport(
options: DubboTransportOptions
): Transport {
return createTransport(validateNodeTransportOptions(options));
}