Skip to content

Commit 5ff22f0

Browse files
authored
fix!: Use plain Error in FailureConverter, WorkflowFailedError, and WorkflowUpdateFailedError (#1685)
1 parent 58df441 commit 5ff22f0

File tree

6 files changed

+15
-11
lines changed

6 files changed

+15
-11
lines changed

.github/workflows/ci.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ jobs:
294294
typescript-repo-path: ${{github.event.pull_request.head.repo.full_name}}
295295
version: ${{github.event.pull_request.head.ref}}
296296
version-is-repo-ref: true
297-
features-repo-ref: sdk-1403-ts-startUpdate-require-wait-stage
297+
features-repo-ref: main
298298

299299
stress-tests-no-reuse-context:
300300
name: Stress Tests (No Reuse V8 Context)

packages/client/src/errors.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { ServiceError as GrpcServiceError, status } from '@grpc/grpc-js';
2-
import { RetryState, TemporalFailure } from '@temporalio/common';
2+
import { RetryState } from '@temporalio/common';
33
import { isError, isRecord, SymbolBasedInstanceOfError } from '@temporalio/common/lib/type-helpers';
44

55
/**
@@ -28,7 +28,7 @@ export class ServiceError extends Error {
2828
export class WorkflowFailedError extends Error {
2929
public constructor(
3030
message: string,
31-
public readonly cause: TemporalFailure | undefined,
31+
public readonly cause: Error | undefined,
3232
public readonly retryState: RetryState
3333
) {
3434
super(message);
@@ -43,7 +43,7 @@ export class WorkflowFailedError extends Error {
4343
export class WorkflowUpdateFailedError extends Error {
4444
public constructor(
4545
message: string,
46-
public readonly cause: TemporalFailure | undefined
46+
public readonly cause: Error | undefined
4747
) {
4848
super(message);
4949
}

packages/common/src/converter/failure-converter.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ export interface FailureConverter {
7575
*
7676
* The returned error must be an instance of `TemporalFailure`.
7777
*/
78-
failureToError(err: ProtoFailure, payloadConverter: PayloadConverter): TemporalFailure;
78+
failureToError(err: ProtoFailure, payloadConverter: PayloadConverter): Error;
7979
}
8080

8181
/**
@@ -198,7 +198,7 @@ export class DefaultFailureConverter implements FailureConverter {
198198
);
199199
}
200200

201-
failureToError(failure: ProtoFailure, payloadConverter: PayloadConverter): TemporalFailure {
201+
failureToError(failure: ProtoFailure, payloadConverter: PayloadConverter): Error {
202202
if (failure.encodedAttributes) {
203203
const attrs = payloadConverter.fromPayload<DefaultEncodedFailureAttributes>(failure.encodedAttributes);
204204
// Don't apply encodedAttributes unless they conform to an expected schema
@@ -351,7 +351,7 @@ export class DefaultFailureConverter implements FailureConverter {
351351
optionalFailureToOptionalError(
352352
failure: ProtoFailure | undefined | null,
353353
payloadConverter: PayloadConverter
354-
): TemporalFailure | undefined {
354+
): Error | undefined {
355355
return failure ? this.failureToError(failure, payloadConverter) : undefined;
356356
}
357357

packages/common/src/internal-non-workflow/codec-helpers.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { Payload } from '../interfaces';
22
import { arrayFromPayloads, fromPayloadsAtIndex, toPayloads } from '../converter/payload-converter';
33
import { PayloadConverterError } from '../errors';
44
import { PayloadCodec } from '../converter/payload-codec';
5-
import { ProtoFailure, TemporalFailure } from '../failure';
5+
import { ProtoFailure } from '../failure';
66
import { LoadedDataConverter } from '../converter/data-converter';
77
import { DecodedPayload, DecodedProtoFailure, EncodedPayload, EncodedProtoFailure } from './codec-types';
88

@@ -109,7 +109,7 @@ export async function decodeFromPayloadsAtIndex<T>(
109109
export async function decodeOptionalFailureToOptionalError(
110110
converter: LoadedDataConverter,
111111
failure: ProtoFailure | undefined | null
112-
): Promise<TemporalFailure | undefined> {
112+
): Promise<Error | undefined> {
113113
const { failureConverter, payloadConverter, payloadCodecs } = converter;
114114
return failure
115115
? failureConverter.failureToError(await decodeFailure(payloadCodecs, failure), payloadConverter)

packages/test/src/test-failure-converter.ts

+5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
ApplicationFailure,
55
DataConverter,
66
DefaultEncodedFailureAttributes,
7+
TemporalFailure,
78
} from '@temporalio/common';
89
import { proxyActivities } from '@temporalio/workflow';
910
import { WorkflowFailedError } from '@temporalio/client';
@@ -45,6 +46,10 @@ test('Client and Worker use provided failureConverter', async (t) => {
4546
const handle = await env.client.workflow.start(workflow, { taskQueue, workflowId: randomUUID() });
4647
const err = (await worker.runUntil(t.throwsAsync(handle.result()))) as WorkflowFailedError;
4748
t.is(err.cause?.message, 'Activity task failed');
49+
if (!(err.cause instanceof TemporalFailure)) {
50+
t.fail('expected error cause to be a TemporalFailure');
51+
return;
52+
}
4853
t.is(err.cause?.cause?.message, 'error message');
4954
t.true(err.cause?.cause?.stack?.includes('ApplicationFailure: error message\n'));
5055

packages/workflow/src/interfaces.ts

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import type { RawSourceMap } from 'source-map';
22
import {
33
RetryPolicy,
4-
TemporalFailure,
54
CommonWorkflowOptions,
65
HandlerUnfinishedPolicy,
76
SearchAttributes,
@@ -73,7 +72,7 @@ export interface WorkflowInfo {
7372
/**
7473
* Failure from the previous Run (present when this Run is a retry, or the last Run of a Cron Workflow failed)
7574
*/
76-
readonly lastFailure?: TemporalFailure;
75+
readonly lastFailure?: Error;
7776

7877
/**
7978
* Length of Workflow history up until the current Workflow Task.

0 commit comments

Comments
 (0)