Skip to content
This repository was archived by the owner on Dec 16, 2021. It is now read-only.

Commit 67c4da3

Browse files
committed
fix: empty data info is not expected
1 parent 9b9395d commit 67c4da3

File tree

1 file changed

+23
-15
lines changed

1 file changed

+23
-15
lines changed

lib/grpcServer/handlers/createGrpcErrorFromDriveResponse.js

+23-15
Original file line numberDiff line numberDiff line change
@@ -55,51 +55,59 @@ function createGrpcErrorFromDriveResponse(code, info) {
5555

5656
const decodedInfo = info ? cbor.decode(Buffer.from(info, 'base64')) : { };
5757

58+
// eslint-disable-next-line prefer-destructuring
59+
const message = decodedInfo.message;
60+
const data = decodedInfo.data || {};
61+
5862
// gRPC error codes
5963
if (code <= 16) {
6064
const CommonErrorClass = COMMON_ERROR_CLASSES[code.toString()];
6165
if (CommonErrorClass) {
6266
return new CommonErrorClass(
63-
decodedInfo.message,
64-
createRawMetadata(decodedInfo.data),
67+
message,
68+
createRawMetadata(data),
6569
);
6670
}
6771

6872
// Restore stack for internal error
6973
if (code === GrpcErrorCodes.INTERNAL) {
70-
const error = new Error(decodedInfo.message);
71-
error.stack = decodedInfo.data.stack;
74+
const error = new Error(message);
75+
76+
// in case of verbose internal error
77+
if (data.stack) {
78+
error.stack = data.stack;
7279

73-
delete decodedInfo.data.stack;
80+
delete data.stack;
81+
}
7482

75-
return new InternalGrpcError(error, createRawMetadata(decodedInfo.data));
83+
return new InternalGrpcError(error, createRawMetadata(data));
7684
}
7785

7886
return new GrpcError(
7987
code,
80-
decodedInfo.message,
81-
createRawMetadata(decodedInfo.data),
88+
message,
89+
createRawMetadata(data),
8290
);
8391
}
8492

8593
// Undefined Drive and DAPI errors
8694
if (code >= 17 && code < 1000) {
8795
return new GrpcError(
8896
GrpcErrorCodes.UNKNOWN,
89-
decodedInfo.message,
90-
createRawMetadata(decodedInfo.data),
97+
message,
98+
createRawMetadata(data),
9199
);
92100
}
93101

94102
// DPP errors
95103
if (code >= 1000 && code < 5000) {
96-
const consensusError = createConsensusError(code, decodedInfo.data.arguments || []);
104+
const consensusError = createConsensusError(code, data.arguments || []);
97105

98106
// Basic
99107
if (code >= 1000 && code < 2000) {
100108
return new InvalidArgumentGrpcError(
101109
consensusError.message,
102-
{ code, ...createRawMetadata(decodedInfo.data) },
110+
{ code, ...createRawMetadata(data) },
103111
);
104112
}
105113

@@ -108,23 +116,23 @@ function createGrpcErrorFromDriveResponse(code, info) {
108116
return new GrpcError(
109117
GrpcErrorCodes.UNAUTHENTICATED,
110118
consensusError.message,
111-
{ code, ...createRawMetadata(decodedInfo.data) },
119+
{ code, ...createRawMetadata(data) },
112120
);
113121
}
114122

115123
// Fee
116124
if (code >= 3000 && code < 4000) {
117125
return new FailedPreconditionGrpcError(
118126
consensusError.message,
119-
{ code, ...createRawMetadata(decodedInfo.data) },
127+
{ code, ...createRawMetadata(data) },
120128
);
121129
}
122130

123131
// State
124132
if (code >= 4000 && code < 5000) {
125133
return new InvalidArgumentGrpcError(
126134
consensusError.message,
127-
{ code, ...createRawMetadata(decodedInfo.data) },
135+
{ code, ...createRawMetadata(data) },
128136
);
129137
}
130138
}

0 commit comments

Comments
 (0)