/*! * Copyright 2019 Google Inc. All Rights Reserved. * * 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 { CallOptions } from 'google-gax'; import { Span } from '@opentelemetry/api'; import { BatchPublishOptions } from './message-batch'; import { Queue, OrderedQueue } from './message-queues'; import { Topic } from '../topic'; import { RequestCallback, EmptyCallback } from '../pubsub'; import { FlowControl, FlowControlOptions } from './flow-control'; import { PubsubMessage, Attributes } from './pubsub-message'; export { PubsubMessage, Attributes } from './pubsub-message'; export declare type PublishCallback = RequestCallback; export interface PublishOptions { batching?: BatchPublishOptions; flowControlOptions?: FlowControlOptions; gaxOpts?: CallOptions; messageOrdering?: boolean; enableOpenTelemetryTracing?: boolean; } /** * @typedef PublishOptions * @property {BatchPublishOptions} [batching] The maximum number of bytes to * buffer before sending a payload. * @property {FlowControlOptions} [publisherFlowControl] Publisher-side flow * control settings. If this is undefined, Ignore will be the assumed action. * @property {object} [gaxOpts] Request configuration options, outlined * {@link https://googleapis.github.io/gax-nodejs/interfaces/CallOptions.html|here.} * @property {boolean} [messageOrdering] If true, messages published with the * same order key in Message will be delivered to the subscribers in the order in which they * are received by the Pub/Sub system. Otherwise, they may be delivered in * any order. */ export declare const BATCH_LIMITS: BatchPublishOptions; export declare const flowControlDefaults: FlowControlOptions; /** * A Publisher object allows you to publish messages to a specific topic. * * @private * @class * * @see [Topics: publish API Documentation]{@link https://cloud.google.com/pubsub/docs/reference/rest/v1/projects.topics/publish} * * @param {Topic} topic The topic associated with this publisher. * @param {PublishOptions} [options] Configuration object. */ export declare class Publisher { topic: Topic; settings: PublishOptions; queue: Queue; orderedQueues: Map; flowControl: FlowControl; constructor(topic: Topic, options?: PublishOptions); /** * Immediately sends all remaining queued data. This is mostly useful * if you are planning to call close() on the PubSub object that holds * the server connections. * * @private * * @param {EmptyCallback} [callback] Callback function. * @returns {Promise} */ flush(): Promise; flush(callback: EmptyCallback): void; /** * Publish the provided message. * * @deprecated use {@link Publisher#publishMessage} instead. * * @private * @see Publisher#publishMessage * * @param {buffer} data The message data. This must come in the form of a * Buffer object. * @param {object.} [attributes] Attributes for this message. * @param {PublishCallback} [callback] Callback function. * @returns {Promise} */ publish(data: Buffer, attributes?: Attributes): Promise; publish(data: Buffer, callback: PublishCallback): void; publish(data: Buffer, attributes: Attributes, callback: PublishCallback): void; /** * Publish the provided message. * * @private * * @throws {TypeError} If data is not a Buffer object. * @throws {TypeError} If any value in `attributes` object is not a string. * * @param {PubsubMessage} [message] Options for this message. * @param {PublishCallback} [callback] Callback function. */ publishMessage(message: PubsubMessage): Promise; publishMessage(message: PubsubMessage, callback: PublishCallback): void; /** * Indicates to the publisher that it is safe to continue publishing for the * supplied ordering key. * * @private * * @param {string} key The ordering key to continue publishing for. */ resumePublishing(key: string): void; /** * Returns the set of default options used for {@link Publisher}. The * returned value is a copy, and editing it will have no effect elsehwere. * * This is a non-static method to make it easier to access/stub. * * @private * * @returns {PublishOptions} */ getOptionDefaults(): PublishOptions; /** * Sets the Publisher options. * * @private * * @param {PublishOptions} options The publisher options. */ setOptions(options?: PublishOptions): void; /** * Constructs an OpenTelemetry span * * @private * * @param {PubsubMessage} message The message to create a span for */ constructSpan(message: PubsubMessage): Span | undefined; }