npm @temporalio/client 1.23.0
v1.23.0

3 hours ago

Breaking Changes

  • Major upgrade of protobufjs to v8 and protobufjs-cli to v2.

    Temporal's protobuf messages types generated by protobufjs are exposed as part of our public
    API surface (mostly through @temporalio/proto and Client's raw gRPC interfaces). This
    upgrade introduces some minor changes in the protobuf types that are generated for them. The
    large majority of applications either don't reference those types directly or do not use those
    types in way that would be affected by these changes.

    You may however want to consider the following user-facing and potentially breaking changes:

    • Applications that use the Protobuf Payload Converters with their own .proto files will need
      to upgrade their own protobufjs dependency to v8. A root built with v7 still works for binary
      payloads, but JSON-encoded payloads will fail at runtime with TypeError: type must be a Type.

    • The constructor on generated message types is no longer publicly accessible, which means that
      new SomeMessage() no longer compiles. Use SomeMessage.create({ ... }) instead. Use of the
      constructor was never officially supported, and would have previously resulted in a runtime error.

    • The getTypeUrl method on generated message types is no longer declared.

    • A field holding its default value is no longer materialized as an own property on decoded
      messages. This applies both to JSON-encoded payloads, which are now spec-compliant and omit
      such fields rather than writing them out, and to binary ones, since protobufjs v8 no longer
      sets them when decoding. Reading the field still yields its default (msg.someEnum is still
      0), but it no longer shows up in Object.keys, object spreads, or a deep equality comparison
      against a message built with create({ someEnum: 0 }). Unknown fields are still ignored when
      parsing JSON.

    • protobufjs renamed the generated "properties" interfaces from IFoo to Foo.$Properties,
      and added a companion Foo.$Shape that narrows oneof fields. We still expose IFoo as an
      alias of Foo.$Properties preserving backward compatibility with type definitions that rely
      on the legacy spelling. Note that we may choose to deprecate the legacy spelling at some point
      in the future to encourage adoption of protobufjs' roadmap.

Added

  • createPayloadValidationError in @temporalio/common creates a non-retryable
    ApplicationFailure with structured Payload validation details when provided. Passing null or
    undefined produces a failure without details.
  • Experimental: Nexus operation definitions can provide TypeInfo for Workflow callers and operation handlers.
    Workflow-backed asynchronous handlers must configure matching TypeInfo on the backing Workflow.
  • Experimental: Standalone Nexus Clients can use operation TypeInfo, including output conversion on detached
    operation handles.
  • Experimental: Workflow and standalone Activities can use TypeInfo to convert inputs and results, including
    Local Activities, retained and detached Client handles, and asynchronous completion.
  • Core logs written directly to the console can now use compact, pretty, or newline-delimited JSON
    output via telemetryOptions.logging.console.format.
  • Experimental: Workflow Clients can now use TypeInfo to encode Workflow inputs and decode Workflow results.
  • Experimental: Query definitions and string-named Client Queries can now provide TypeInfo for converting Query
    arguments and results.
  • Experimental: Update definitions and named Update calls can use TypeInfo to convert Update arguments and
    results.
  • Experimental: @temporalio/google-adk-agents package for running Google ADK agents as durable Temporal Workflows,
    requiring @google/adk@>=1.5.0 <1.6.0 as a peer dependency.
    ADK's OpenTelemetry agent-loop spans can be exported replay-safely from the Workflow sandbox by composing with
    OpenTelemetryPlugin from @temporalio/interceptors-opentelemetry; see the package README's telemetry section.
  • Experimental: TemporalOperationHandler can now use Standalone Activities as asynchronous
    Nexus Operation backing executions through TemporalNexusClient.startActivity and
    typedActivity.
  • Experimental: Signal definitions can now provide TypeInfo for converting Signal arguments on Client and
    Workflow callers and in Workflow handlers.
  • Experimental: Workflows can now use TypeInfo for Child Workflow inputs and results and continue-as-new inputs.
  • Experimental: String-named Signal calls can now provide TypeInfo through explicit options on Client and
    Workflow handles and in signal-with-start requests.
  • Experimental: Experimental support for Event Groups. Event Groups
    is a new form of Workflow-level metadata that allows for improved
    visibility into a Workflow execution's history by grouping logically
    related Events together based on user-defined or system-inferred criteria.

Changed

  • Nexus is now generally available (GA) for calling Nexus Operations from Workflows and handling
    Workflow-backed Operations with WorkflowRunOperationHandler.
  • @temporalio/ai-sdk now requires ai@>=7.0.59 as a peer dependency, up from 7.0.0, since
    earlier releases threw a TypeError on import in runtimes without a global fetch.
  • A Payload Converter or Payload Codec that fails to decode a Nexus Operation's input with a
    non-retryable ApplicationFailure of type PayloadValidationError now results in a BAD_REQUEST
    Nexus Handler Error instead of INTERNAL, so the caller is not retried on invalid input. The
    original ApplicationFailure is retained as the Handler Error's cause. Any other failure from the
    data converter is unchanged.
  • SimplePlugin no longer appends its workerInterceptors.workflowModules to worker options when
    the worker uses a prebuilt workflowBundle, as module paths cannot be resolved in that case;
    they are instead applied at bundling time, through the plugin's configureBundler method.

Fixed

  • Local Activities now fall back to a registered default activity when the requested type is not
    registered, matching non-local Activity dispatch. Previously the Workflow Task failed immediately
    with ReferenceError even if default was registered.
  • Experimental: Fixed compatibility with Bun 1.4, including reusable VM context switching,
    microtask handling, and Worker thread shutdown.
  • Experimental: The external storage S3 and GCS drivers now use hash_algorithm and hash_value instead of
    hashAlgorithm and hashValue in their claims. The GCS driver additionally uses object_name instead of
    object. Retrieval still accepts the old key names.
  • Fixed issue where replaying a workflow with Local Activities scheduled from a nested Promise could
    trigger a nondeterminism error.
  • msOptionalToTs() was incorrectly converting durations of 0 to undefined, resulting in incorrect behaviors
    in various places that takes optional durations where 0 is a legitimate value, e.g. ApplicationFailure.nextRetryDelay(). Durations of 0 are now properly preserved.

Complete change list

New Contributors

Full Changelog: v1.22.0...v1.23.0

Don't miss a new client release

NewReleases is sending notifications on new releases.