1
1
import type { IdempotencyRecord } from './persistence/IdempotencyRecord.js' ;
2
2
3
+ /**
4
+ * Base error for idempotency errors.
5
+ *
6
+ * Generally this error should not be thrown directly unless you are throwing a generic and unknown error.
7
+ */
8
+ class IdempotencyUnknownError extends Error {
9
+ public constructor ( message ?: string , options ?: ErrorOptions ) {
10
+ super ( message , options ) ;
11
+ this . name = 'IdempotencyError' ;
12
+ }
13
+ }
14
+
3
15
/**
4
16
* Item attempting to be inserted into persistence store already exists and is not expired
5
17
*/
6
- class IdempotencyItemAlreadyExistsError extends Error {
18
+ class IdempotencyItemAlreadyExistsError extends IdempotencyUnknownError {
7
19
public existingRecord ?: IdempotencyRecord ;
8
20
9
- public constructor ( message ?: string , existingRecord ?: IdempotencyRecord ) {
10
- super ( message ) ;
21
+ public constructor (
22
+ message ?: string ,
23
+ existingRecord ?: IdempotencyRecord ,
24
+ options ?: ErrorOptions
25
+ ) {
26
+ super ( message , options ) ;
11
27
this . name = 'IdempotencyItemAlreadyExistsError' ;
12
28
this . existingRecord = existingRecord ;
13
29
}
@@ -16,54 +32,91 @@ class IdempotencyItemAlreadyExistsError extends Error {
16
32
/**
17
33
* Item does not exist in persistence store
18
34
*/
19
- class IdempotencyItemNotFoundError extends Error { }
35
+ class IdempotencyItemNotFoundError extends IdempotencyUnknownError {
36
+ public constructor ( message ?: string , options ?: ErrorOptions ) {
37
+ super ( message , options ) ;
38
+ this . name = 'IdempotencyItemNotFoundError' ;
39
+ }
40
+ }
20
41
21
42
/**
22
43
* Execution with idempotency key is already in progress
23
44
*/
24
- class IdempotencyAlreadyInProgressError extends Error { }
45
+ class IdempotencyAlreadyInProgressError extends IdempotencyUnknownError {
46
+ public existingRecord ?: IdempotencyRecord ;
47
+
48
+ public constructor (
49
+ message ?: string ,
50
+ existingRecord ?: IdempotencyRecord ,
51
+ options ?: ErrorOptions
52
+ ) {
53
+ super ( message , options ) ;
54
+ this . name = 'IdempotencyAlreadyInProgressError' ;
55
+ this . existingRecord = existingRecord ;
56
+ }
57
+ }
25
58
26
59
/**
27
60
* An invalid status was provided
28
61
*/
29
- class IdempotencyInvalidStatusError extends Error { }
62
+ class IdempotencyInvalidStatusError extends IdempotencyUnknownError {
63
+ public constructor ( message ?: string , options ?: ErrorOptions ) {
64
+ super ( message , options ) ;
65
+ this . name = 'IdempotencyInvalidStatusError' ;
66
+ }
67
+ }
30
68
31
69
/**
32
70
* Payload does not match stored idempotency record
33
71
*/
34
- class IdempotencyValidationError extends Error {
72
+ class IdempotencyValidationError extends IdempotencyUnknownError {
35
73
public existingRecord ?: IdempotencyRecord ;
36
74
37
- public constructor ( message ?: string , existingRecord ?: IdempotencyRecord ) {
38
- super ( message ) ;
75
+ public constructor (
76
+ message ?: string ,
77
+ existingRecord ?: IdempotencyRecord ,
78
+ options ?: ErrorOptions
79
+ ) {
80
+ super ( message , options ) ;
81
+ this . name = 'IdempotencyValidationError' ;
39
82
this . existingRecord = existingRecord ;
40
83
}
41
84
}
42
85
43
86
/**
44
87
* State is inconsistent across multiple requests to persistence store
45
88
*/
46
- class IdempotencyInconsistentStateError extends Error { }
89
+ class IdempotencyInconsistentStateError extends IdempotencyUnknownError {
90
+ public constructor ( message ?: string , options ?: ErrorOptions ) {
91
+ super ( message , options ) ;
92
+ this . name = 'IdempotencyInconsistentStateError' ;
93
+ }
94
+ }
47
95
48
96
/**
49
97
* Unrecoverable error from the data store
50
98
*/
51
- class IdempotencyPersistenceLayerError extends Error {
99
+ class IdempotencyPersistenceLayerError extends IdempotencyUnknownError {
52
100
public readonly cause : Error | undefined ;
53
101
54
- public constructor ( message : string , cause : Error ) {
55
- const errorMessage = `${ message } . This error was caused by: ${ cause . message } .` ;
56
- super ( errorMessage ) ;
57
- this . cause = cause ;
102
+ public constructor ( message : string , options ?: ErrorOptions ) {
103
+ super ( message , options ) ;
104
+ this . name = 'IdempotencyPersistenceLayerError' ;
58
105
}
59
106
}
60
107
61
108
/**
62
109
* Payload does not contain an idempotent key
63
110
*/
64
- class IdempotencyKeyError extends Error { }
111
+ class IdempotencyKeyError extends IdempotencyUnknownError {
112
+ public constructor ( message ?: string , options ?: ErrorOptions ) {
113
+ super ( message , options ) ;
114
+ this . name = 'IdempotencyKeyError' ;
115
+ }
116
+ }
65
117
66
118
export {
119
+ IdempotencyUnknownError ,
67
120
IdempotencyItemAlreadyExistsError ,
68
121
IdempotencyItemNotFoundError ,
69
122
IdempotencyAlreadyInProgressError ,
0 commit comments