Skip to content

Commit 7be3338

Browse files
Strip empty data from snap errors (#2179)
Removes empty `data` object previously present on SnapErrors. Now the data object will only be present if it contains information.
1 parent 01829d3 commit 7be3338

File tree

5 files changed

+31
-52
lines changed

5 files changed

+31
-52
lines changed

packages/snaps-sdk/src/error-wrappers.test.ts

+16-32
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ describe('Snap errors', () => {
2828
expect(wrapped).toBeInstanceOf(InternalError);
2929
expect(wrapped.message).toBe('foo');
3030
expect(wrapped.code).toBe(-32603);
31-
expect(wrapped.data).toStrictEqual({});
31+
expect(wrapped.data).toBeUndefined();
3232
expect(wrapped.stack).toBeDefined();
3333
expect(wrapped.toJSON()).toStrictEqual({
3434
code: -31002,
@@ -38,7 +38,6 @@ describe('Snap errors', () => {
3838
code: -32603,
3939
message: 'foo',
4040
stack: wrapped.stack,
41-
data: {},
4241
},
4342
},
4443
});
@@ -82,7 +81,7 @@ describe('Snap errors', () => {
8281
expect(wrapped).toBeInstanceOf(InvalidInputError);
8382
expect(wrapped.message).toBe('foo');
8483
expect(wrapped.code).toBe(-32000);
85-
expect(wrapped.data).toStrictEqual({});
84+
expect(wrapped.data).toBeUndefined();
8685
expect(wrapped.stack).toBeDefined();
8786
expect(wrapped.toJSON()).toStrictEqual({
8887
code: -31002,
@@ -92,7 +91,6 @@ describe('Snap errors', () => {
9291
code: -32000,
9392
message: 'foo',
9493
stack: wrapped.stack,
95-
data: {},
9694
},
9795
},
9896
});
@@ -136,7 +134,7 @@ describe('Snap errors', () => {
136134
expect(wrapped).toBeInstanceOf(InvalidParamsError);
137135
expect(wrapped.message).toBe('foo');
138136
expect(wrapped.code).toBe(-32602);
139-
expect(wrapped.data).toStrictEqual({});
137+
expect(wrapped.data).toBeUndefined();
140138
expect(wrapped.stack).toBeDefined();
141139
expect(wrapped.toJSON()).toStrictEqual({
142140
code: -31002,
@@ -146,7 +144,6 @@ describe('Snap errors', () => {
146144
code: -32602,
147145
message: 'foo',
148146
stack: wrapped.stack,
149-
data: {},
150147
},
151148
},
152149
});
@@ -190,7 +187,7 @@ describe('Snap errors', () => {
190187
expect(wrapped).toBeInstanceOf(InvalidRequestError);
191188
expect(wrapped.message).toBe('foo');
192189
expect(wrapped.code).toBe(-32600);
193-
expect(wrapped.data).toStrictEqual({});
190+
expect(wrapped.data).toBeUndefined();
194191
expect(wrapped.stack).toBeDefined();
195192
expect(wrapped.toJSON()).toStrictEqual({
196193
code: -31002,
@@ -200,7 +197,6 @@ describe('Snap errors', () => {
200197
code: -32600,
201198
message: 'foo',
202199
stack: wrapped.stack,
203-
data: {},
204200
},
205201
},
206202
});
@@ -248,7 +244,7 @@ describe('Snap errors', () => {
248244
expect(wrapped).toBeInstanceOf(LimitExceededError);
249245
expect(wrapped.message).toBe('foo');
250246
expect(wrapped.code).toBe(-32005);
251-
expect(wrapped.data).toStrictEqual({});
247+
expect(wrapped.data).toBeUndefined();
252248
expect(wrapped.stack).toBeDefined();
253249
expect(wrapped.toJSON()).toStrictEqual({
254250
code: -31002,
@@ -258,7 +254,6 @@ describe('Snap errors', () => {
258254
code: -32005,
259255
message: 'foo',
260256
stack: wrapped.stack,
261-
data: {},
262257
},
263258
},
264259
});
@@ -302,7 +297,7 @@ describe('Snap errors', () => {
302297
expect(wrapped).toBeInstanceOf(MethodNotFoundError);
303298
expect(wrapped.message).toBe('foo');
304299
expect(wrapped.code).toBe(-32601);
305-
expect(wrapped.data).toStrictEqual({});
300+
expect(wrapped.data).toBeUndefined();
306301
expect(wrapped.stack).toBeDefined();
307302
expect(wrapped.toJSON()).toStrictEqual({
308303
code: -31002,
@@ -312,7 +307,6 @@ describe('Snap errors', () => {
312307
code: -32601,
313308
message: 'foo',
314309
stack: wrapped.stack,
315-
data: {},
316310
},
317311
},
318312
});
@@ -360,7 +354,7 @@ describe('Snap errors', () => {
360354
expect(wrapped).toBeInstanceOf(MethodNotSupportedError);
361355
expect(wrapped.message).toBe('foo');
362356
expect(wrapped.code).toBe(-32004);
363-
expect(wrapped.data).toStrictEqual({});
357+
expect(wrapped.data).toBeUndefined();
364358
expect(wrapped.stack).toBeDefined();
365359
expect(wrapped.toJSON()).toStrictEqual({
366360
code: -31002,
@@ -370,7 +364,6 @@ describe('Snap errors', () => {
370364
code: -32004,
371365
message: 'foo',
372366
stack: wrapped.stack,
373-
data: {},
374367
},
375368
},
376369
});
@@ -414,7 +407,7 @@ describe('Snap errors', () => {
414407
expect(wrapped).toBeInstanceOf(ParseError);
415408
expect(wrapped.message).toBe('foo');
416409
expect(wrapped.code).toBe(-32700);
417-
expect(wrapped.data).toStrictEqual({});
410+
expect(wrapped.data).toBeUndefined();
418411
expect(wrapped.stack).toBeDefined();
419412
expect(wrapped.toJSON()).toStrictEqual({
420413
code: -31002,
@@ -424,7 +417,6 @@ describe('Snap errors', () => {
424417
code: -32700,
425418
message: 'foo',
426419
stack: wrapped.stack,
427-
data: {},
428420
},
429421
},
430422
});
@@ -472,7 +464,7 @@ describe('Snap errors', () => {
472464
expect(wrapped).toBeInstanceOf(ResourceNotFoundError);
473465
expect(wrapped.message).toBe('foo');
474466
expect(wrapped.code).toBe(-32001);
475-
expect(wrapped.data).toStrictEqual({});
467+
expect(wrapped.data).toBeUndefined();
476468
expect(wrapped.stack).toBeDefined();
477469
expect(wrapped.toJSON()).toStrictEqual({
478470
code: -31002,
@@ -482,7 +474,6 @@ describe('Snap errors', () => {
482474
code: -32001,
483475
message: 'foo',
484476
stack: wrapped.stack,
485-
data: {},
486477
},
487478
},
488479
});
@@ -526,7 +517,7 @@ describe('Snap errors', () => {
526517
expect(wrapped).toBeInstanceOf(ResourceUnavailableError);
527518
expect(wrapped.message).toBe('foo');
528519
expect(wrapped.code).toBe(-32002);
529-
expect(wrapped.data).toStrictEqual({});
520+
expect(wrapped.data).toBeUndefined();
530521
expect(wrapped.stack).toBeDefined();
531522
expect(wrapped.toJSON()).toStrictEqual({
532523
code: -31002,
@@ -536,7 +527,6 @@ describe('Snap errors', () => {
536527
code: -32002,
537528
message: 'foo',
538529
stack: wrapped.stack,
539-
data: {},
540530
},
541531
},
542532
});
@@ -580,7 +570,7 @@ describe('Snap errors', () => {
580570
expect(wrapped).toBeInstanceOf(TransactionRejected);
581571
expect(wrapped.message).toBe('foo');
582572
expect(wrapped.code).toBe(-32003);
583-
expect(wrapped.data).toStrictEqual({});
573+
expect(wrapped.data).toBeUndefined();
584574
expect(wrapped.stack).toBeDefined();
585575
expect(wrapped.toJSON()).toStrictEqual({
586576
code: -31002,
@@ -590,7 +580,6 @@ describe('Snap errors', () => {
590580
code: -32003,
591581
message: 'foo',
592582
stack: wrapped.stack,
593-
data: {},
594583
},
595584
},
596585
});
@@ -634,7 +623,7 @@ describe('Snap errors', () => {
634623
expect(wrapped).toBeInstanceOf(ChainDisconnectedError);
635624
expect(wrapped.message).toBe('foo');
636625
expect(wrapped.code).toBe(4901);
637-
expect(wrapped.data).toStrictEqual({});
626+
expect(wrapped.data).toBeUndefined();
638627
expect(wrapped.stack).toBeDefined();
639628
expect(wrapped.toJSON()).toStrictEqual({
640629
code: -31002,
@@ -644,7 +633,6 @@ describe('Snap errors', () => {
644633
code: 4901,
645634
message: 'foo',
646635
stack: wrapped.stack,
647-
data: {},
648636
},
649637
},
650638
});
@@ -692,7 +680,7 @@ describe('Snap errors', () => {
692680
expect(wrapped).toBeInstanceOf(DisconnectedError);
693681
expect(wrapped.message).toBe('foo');
694682
expect(wrapped.code).toBe(4900);
695-
expect(wrapped.data).toStrictEqual({});
683+
expect(wrapped.data).toBeUndefined();
696684
expect(wrapped.stack).toBeDefined();
697685
expect(wrapped.toJSON()).toStrictEqual({
698686
code: -31002,
@@ -702,7 +690,6 @@ describe('Snap errors', () => {
702690
code: 4900,
703691
message: 'foo',
704692
stack: wrapped.stack,
705-
data: {},
706693
},
707694
},
708695
});
@@ -750,7 +737,7 @@ describe('Snap errors', () => {
750737
expect(wrapped).toBeInstanceOf(UnauthorizedError);
751738
expect(wrapped.message).toBe('foo');
752739
expect(wrapped.code).toBe(4100);
753-
expect(wrapped.data).toStrictEqual({});
740+
expect(wrapped.data).toBeUndefined();
754741
expect(wrapped.stack).toBeDefined();
755742
expect(wrapped.toJSON()).toStrictEqual({
756743
code: -31002,
@@ -760,7 +747,6 @@ describe('Snap errors', () => {
760747
code: 4100,
761748
message: 'foo',
762749
stack: wrapped.stack,
763-
data: {},
764750
},
765751
},
766752
});
@@ -808,7 +794,7 @@ describe('Snap errors', () => {
808794
expect(wrapped).toBeInstanceOf(UnsupportedMethodError);
809795
expect(wrapped.message).toBe('foo');
810796
expect(wrapped.code).toBe(4200);
811-
expect(wrapped.data).toStrictEqual({});
797+
expect(wrapped.data).toBeUndefined();
812798
expect(wrapped.stack).toBeDefined();
813799
expect(wrapped.toJSON()).toStrictEqual({
814800
code: -31002,
@@ -818,7 +804,6 @@ describe('Snap errors', () => {
818804
code: 4200,
819805
message: 'foo',
820806
stack: wrapped.stack,
821-
data: {},
822807
},
823808
},
824809
});
@@ -866,7 +851,7 @@ describe('Snap errors', () => {
866851
expect(wrapped).toBeInstanceOf(UserRejectedRequestError);
867852
expect(wrapped.message).toBe('foo');
868853
expect(wrapped.code).toBe(4001);
869-
expect(wrapped.data).toStrictEqual({});
854+
expect(wrapped.data).toBeUndefined();
870855
expect(wrapped.stack).toBeDefined();
871856
expect(wrapped.toJSON()).toStrictEqual({
872857
code: -31002,
@@ -876,7 +861,6 @@ describe('Snap errors', () => {
876861
code: 4001,
877862
message: 'foo',
878863
stack: wrapped.stack,
879-
data: {},
880864
},
881865
},
882866
});

packages/snaps-sdk/src/errors.test.ts

+5-10
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ describe('SnapError', () => {
1010
expect(error).toBeInstanceOf(SnapError);
1111
expect(error.message).toBe('foo');
1212
expect(error.code).toBe(-32603);
13-
expect(error.data).toStrictEqual({});
13+
expect(error.data).toBeUndefined();
1414
expect(error.stack).toBeDefined();
1515
expect(error.toJSON()).toStrictEqual({
1616
code: -31002,
@@ -20,7 +20,6 @@ describe('SnapError', () => {
2020
code: -32603,
2121
message: 'foo',
2222
stack: error.stack,
23-
data: {},
2423
},
2524
},
2625
});
@@ -36,7 +35,7 @@ describe('SnapError', () => {
3635
expect(error).toBeInstanceOf(SnapError);
3736
expect(error.message).toBe('foo');
3837
expect(error.code).toBe(-32000);
39-
expect(error.data).toStrictEqual({});
38+
expect(error.data).toBeUndefined();
4039
expect(error.stack).toBeDefined();
4140
expect(error.toJSON()).toStrictEqual({
4241
code: -31002,
@@ -46,7 +45,6 @@ describe('SnapError', () => {
4645
code: -32000,
4746
message: 'foo',
4847
stack: error.stack,
49-
data: {},
5048
},
5149
},
5250
});
@@ -101,7 +99,7 @@ describe('SnapError', () => {
10199
expect(error).toBeInstanceOf(SnapError);
102100
expect(error.message).toBe('foo');
103101
expect(error.code).toBe(-32603);
104-
expect(error.data).toStrictEqual({});
102+
expect(error.data).toBeUndefined();
105103
expect(error.stack).toBeDefined();
106104
expect(error.toJSON()).toStrictEqual({
107105
code: -31002,
@@ -111,7 +109,6 @@ describe('SnapError', () => {
111109
code: -32603,
112110
message: 'foo',
113111
stack: error.stack,
114-
data: {},
115112
},
116113
},
117114
});
@@ -149,7 +146,7 @@ describe('SnapError', () => {
149146
expect(error).toBeInstanceOf(SnapError);
150147
expect(error.message).toBe('foo');
151148
expect(error.code).toBe(-32602);
152-
expect(error.data).toStrictEqual({});
149+
expect(error.data).toBeUndefined();
153150
expect(error.stack).toBeDefined();
154151
expect(error.toJSON()).toStrictEqual({
155152
code: -31002,
@@ -159,7 +156,6 @@ describe('SnapError', () => {
159156
code: -32602,
160157
message: 'foo',
161158
stack: error.stack,
162-
data: {},
163159
},
164160
},
165161
});
@@ -202,7 +198,7 @@ describe('SnapError', () => {
202198
expect(error).toBeInstanceOf(SnapError);
203199
expect(error.message).toBe('foo');
204200
expect(error.code).toBe(0);
205-
expect(error.data).toStrictEqual({});
201+
expect(error.data).toBeUndefined();
206202
expect(error.stack).toBeDefined();
207203
expect(error.toJSON()).toStrictEqual({
208204
code: -31002,
@@ -212,7 +208,6 @@ describe('SnapError', () => {
212208
code: 0,
213209
message: 'foo',
214210
stack: error.stack,
215-
data: {},
216211
},
217212
},
218213
});

packages/snaps-sdk/src/errors.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export class SnapError extends Error {
1717

1818
readonly #message: string;
1919

20-
readonly #data: Record<string, Json>;
20+
readonly #data?: Record<string, Json>;
2121

2222
readonly #stack?: string;
2323

@@ -42,7 +42,12 @@ export class SnapError extends Error {
4242

4343
this.#message = message;
4444
this.#code = getErrorCode(error);
45-
this.#data = { ...getErrorData(error), ...data };
45+
46+
const mergedData = { ...getErrorData(error), ...data };
47+
if (Object.keys(mergedData).length > 0) {
48+
this.#data = mergedData;
49+
}
50+
4651
this.#stack = super.stack;
4752
}
4853

@@ -109,7 +114,7 @@ export class SnapError extends Error {
109114
code: this.code,
110115
message: this.message,
111116
stack: this.stack,
112-
data: this.data,
117+
...(this.data ? { data: this.data } : {}),
113118
},
114119
},
115120
};
@@ -144,8 +149,6 @@ export type SerializedSnapError = {
144149
code: typeof SNAP_ERROR_CODE;
145150
message: typeof SNAP_ERROR_MESSAGE;
146151
data: {
147-
cause: JsonRpcError & {
148-
data: Record<string, Json>;
149-
};
152+
cause: JsonRpcError;
150153
};
151154
};

0 commit comments

Comments
 (0)