UNPKG

@temporalio/common

Version:

Common library for code that's used across the Client, Worker, and/or Workflow

68 lines (67 loc) 3.26 kB
import { FailureConverter } from './failure-converter'; import { PayloadCodec } from './payload-codec'; import { PayloadConverter } from './payload-converter'; /** * When your data (arguments and return values) is sent over the wire and stored by Temporal Server, it is encoded in * binary in a {@link Payload} Protobuf message. * * The default `DataConverter` supports `undefined`, `Uint8Array`, and JSON serializables (so if * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#description | `JSON.stringify(yourArgOrRetval)`} * works, the default data converter will work). Protobufs are supported via * {@link https://docs.temporal.io/typescript/data-converters#protobufs | this API}. * * Use a custom `DataConverter` to control the contents of your {@link Payload}s. Common reasons for using a custom * `DataConverter` are: * - Converting values that are not supported by the default `DataConverter` (for example, `JSON.stringify()` doesn't * handle `BigInt`s, so if you want to return `{ total: 1000n }` from a Workflow, Signal, or Activity, you need your * own `DataConverter`). * - Encrypting values that may contain private information that you don't want stored in plaintext in Temporal Server's * database. * - Compressing values to reduce disk or network usage. * * To use your custom `DataConverter`, provide it to the {@link WorkflowClient}, {@link Worker}, and * {@link bundleWorkflowCode} (if you use it): * - `new WorkflowClient({ ..., dataConverter })` * - `Worker.create({ ..., dataConverter })` * - `bundleWorkflowCode({ ..., payloadConverterPath })` */ export interface DataConverter { /** * Path of a file that has a `payloadConverter` named export. * `payloadConverter` should be an object that implements {@link PayloadConverter}. * If no path is provided, {@link defaultPayloadConverter} is used. */ payloadConverterPath?: string; /** * Path of a file that has a `failureConverter` named export. * `failureConverter` should be an object that implements {@link FailureConverter}. * If no path is provided, {@link defaultFailureConverter} is used. */ failureConverterPath?: string; /** * An array of {@link PayloadCodec} instances. * * Payloads are encoded in the order of the array and decoded in the opposite order. For example, if you have a * compression codec and an encryption codec, then you want data to be encoded with the compression codec first, so * you'd do `payloadCodecs: [compressionCodec, encryptionCodec]`. */ payloadCodecs?: PayloadCodec[]; } /** * A {@link DataConverter} that has been loaded via {@link loadDataConverter}. */ export interface LoadedDataConverter { payloadConverter: PayloadConverter; failureConverter: FailureConverter; payloadCodecs: PayloadCodec[]; } /** * The default {@link FailureConverter} used by the SDK. * * Error messages and stack traces are serizalized as plain text. */ export declare const defaultFailureConverter: FailureConverter; /** * A "loaded" data converter that uses the default set of failure and payload converters. */ export declare const defaultDataConverter: LoadedDataConverter;