Skip to content

Commit 65e968b

Browse files
committed
Refactor durableMode to isReplay
1 parent f83d293 commit 65e968b

File tree

5 files changed

+13
-18
lines changed

5 files changed

+13
-18
lines changed

packages/idempotency/src/IdempotencyHandler.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import type { BasePersistenceLayer } from './persistence/BasePersistenceLayer.js
1717
import type { IdempotencyRecord } from './persistence/IdempotencyRecord.js';
1818
import type {
1919
AnyFunction,
20-
DurableMode,
2120
IdempotencyHandlerOptions,
2221
} from './types/IdempotencyOptions.js';
2322

@@ -179,9 +178,9 @@ export class IdempotencyHandler<Func extends AnyFunction> {
179178
* cases we can safely retry the handling a few times.
180179
*/
181180
public async handle({
182-
durableMode,
181+
isReplay,
183182
}: {
184-
durableMode?: DurableMode;
183+
isReplay?: boolean;
185184
} = {}): Promise<ReturnType<Func>> {
186185
// early return if we should skip idempotency completely
187186
if (this.shouldSkipIdempotency()) {
@@ -195,7 +194,7 @@ export class IdempotencyHandler<Func extends AnyFunction> {
195194
for (let retryNo = 0; retryNo <= MAX_RETRIES; retryNo++) {
196195
try {
197196
const { isIdempotent, result } =
198-
await this.#saveInProgressOrReturnExistingResult({ durableMode });
197+
await this.#saveInProgressOrReturnExistingResult({ isReplay });
199198
if (isIdempotent) return result as ReturnType<Func>;
200199

201200
return await this.getFunctionResult();
@@ -362,9 +361,9 @@ export class IdempotencyHandler<Func extends AnyFunction> {
362361
* and validate it to ensure that it is consistent with the payload to be hashed.
363362
*/
364363
readonly #saveInProgressOrReturnExistingResult = async ({
365-
durableMode,
364+
isReplay,
366365
}: {
367-
durableMode?: DurableMode;
366+
isReplay?: boolean;
368367
} = {}): Promise<{
369368
isIdempotent: boolean;
370369
result: JSONValue;
@@ -390,7 +389,7 @@ export class IdempotencyHandler<Func extends AnyFunction> {
390389
{ cause: error }
391390
);
392391
if (error.name === 'IdempotencyItemAlreadyExistsError') {
393-
if (durableMode === 'ReplayMode') {
392+
if (isReplay) {
394393
return returnValue;
395394
}
396395

packages/idempotency/src/makeIdempotent.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ function makeIdempotent<Func extends AnyFunction>(
146146
}
147147
}
148148

149-
const durableMode = args[1]?.durableExecutionMode;
149+
const isReplay = args[1]?.durableExecutionMode === "REPLAY_MODE"
150150

151151
return new IdempotencyHandler({
152152
functionToMakeIdempotent: fn,
@@ -156,7 +156,7 @@ function makeIdempotent<Func extends AnyFunction>(
156156
functionArguments: args,
157157
functionPayloadToBeHashed,
158158
thisArg: this,
159-
}).handle({ durableMode }) as ReturnType<Func>;
159+
}).handle({ isReplay }) as ReturnType<Func>
160160
};
161161
}
162162

packages/idempotency/src/types/IdempotencyOptions.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,14 +206,11 @@ type IdempotencyConfigOptions = {
206206
responseHook?: ResponseHook;
207207
};
208208

209-
type DurableMode = 'ExecutionMode' | 'ReplayMode';
210-
211209
export type {
212210
AnyFunction,
213211
IdempotencyConfigOptions,
214212
ItempotentFunctionOptions,
215213
IdempotencyLambdaHandlerOptions,
216214
IdempotencyHandlerOptions,
217215
ResponseHook,
218-
DurableMode,
219216
};

packages/idempotency/src/types/index.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ export type {
1515
} from './DynamoDBPersistence.js';
1616
export type {
1717
AnyFunction,
18-
DurableMode,
1918
IdempotencyConfigOptions,
2019
IdempotencyHandlerOptions,
2120
IdempotencyLambdaHandlerOptions,

packages/idempotency/tests/unit/IdempotencyHandler.test.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ describe('Class IdempotencyHandler', () => {
240240
expect(mockProcessIdempotency).toHaveBeenCalledTimes(MAX_RETRIES + 1);
241241
});
242242

243-
it("allows execution when the DurableMode is Replay and there is IN PROGRESS record", async ()=> {
243+
it("allows execution when isReplay is true and there is IN PROGRESS record", async ()=> {
244244
// Arrange
245245
// Mock saveInProgress to simulate an existing IN_PROGRESS record
246246
vi.spyOn(persistenceStore, 'saveInProgress')
@@ -256,15 +256,15 @@ describe('Class IdempotencyHandler', () => {
256256
);
257257

258258
// Act
259-
await idempotentHandler.handle({durableMode: "ReplayMode"})
259+
await idempotentHandler.handle({isReplay: true})
260260

261261
// Assess
262262
expect(mockFunctionToMakeIdempotent).toBeCalled()
263263

264264

265265
})
266266

267-
it("raises an IdempotencyAlreadyInProgressError error when the DurableMode is Execution and there is an IN PROGRESS record", async ()=> {
267+
it("raises an IdempotencyAlreadyInProgressError error when isReplay is false and there is an IN PROGRESS record", async ()=> {
268268
// Arrange
269269
// Mock saveInProgress to simulate an existing IN_PROGRESS record
270270
vi.spyOn(persistenceStore, 'saveInProgress')
@@ -280,7 +280,7 @@ describe('Class IdempotencyHandler', () => {
280280
);
281281

282282
// Act & Assess
283-
await expect(idempotentHandler.handle({ durableMode: "ExecutionMode" })).rejects.toThrow(IdempotencyAlreadyInProgressError);
283+
await expect(idempotentHandler.handle({ isReplay: false })).rejects.toThrow(IdempotencyAlreadyInProgressError);
284284
})
285285

286286
it("returns the result of the original durable execution when another durable execution with the same payload is invoked", async () => {
@@ -304,7 +304,7 @@ describe('Class IdempotencyHandler', () => {
304304
.mockResolvedValue(stubRecord);
305305

306306
// Act
307-
const result = await idempotentHandler.handle({durableMode: "ExecutionMode"})
307+
const result = await idempotentHandler.handle({isReplay: false})
308308

309309
// Assess
310310
expect(result).toStrictEqual({ response: false });

0 commit comments

Comments
 (0)