Skip to content

Commit 4519d58

Browse files
API handlers to return error containing error key
1 parent 082cbd9 commit 4519d58

File tree

6 files changed

+97
-9
lines changed

6 files changed

+97
-9
lines changed

api/openapi.json

+4
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,10 @@
690690
"properties": {
691691
"error": {
692692
"type": "string"
693+
},
694+
"error_code": {
695+
"format": "int64",
696+
"type": "integer"
693697
}
694698
},
695699
"required": [

api/openapi.yml

+3
Original file line numberDiff line numberDiff line change
@@ -7391,3 +7391,6 @@ components:
73917391
properties:
73927392
error:
73937393
type: string
7394+
error_code:
7395+
type: integer
7396+
format: int64

pkg/api/converters.go

+42-7
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@ package api
33
import (
44
"context"
55
"encoding/json"
6+
"errors"
67
"fmt"
7-
imgGenerator "github.com/tonkeeper/opentonapi/pkg/image"
88
"math/big"
99
"reflect"
1010
"strconv"
1111
"strings"
1212
"unicode"
1313

14+
imgGenerator "github.com/tonkeeper/opentonapi/pkg/image"
15+
"github.com/tonkeeper/opentonapi/pkg/references"
16+
1417
"github.com/go-faster/jx"
1518
"github.com/tonkeeper/tongo"
1619
"github.com/tonkeeper/tongo/boc"
@@ -22,15 +25,47 @@ import (
2225
walletPkg "github.com/tonkeeper/opentonapi/pkg/wallet"
2326
)
2427

25-
func toError(code int, err error) *oas.ErrorStatusCode {
26-
if strings.HasPrefix(err.Error(), "failed to connect to") || strings.Contains(err.Error(), "host=") {
27-
return &oas.ErrorStatusCode{StatusCode: code, Response: oas.Error{Error: "unknown error"}}
28+
// ErrorWithExtendedCode helps to pass additional information about an error.
29+
type ErrorWithExtendedCode struct {
30+
Code int
31+
Message string
32+
ExtendedCode references.ExtendedCode
33+
}
34+
35+
func (e ErrorWithExtendedCode) Error() string {
36+
return e.Message
37+
}
38+
39+
// censor removes sensitive information from the error message.
40+
func censor(msg string) string {
41+
if strings.HasPrefix(msg, "failed to connect to") || strings.Contains(msg, "host=") {
42+
return "unknown error"
43+
}
44+
return msg
45+
}
46+
47+
func extendedCode(code references.ExtendedCode) oas.OptInt64 {
48+
if code == 0 {
49+
return oas.OptInt64{}
50+
}
51+
return oas.NewOptInt64(int64(code))
52+
}
53+
54+
func toError(defaultCode int, err error) *oas.ErrorStatusCode {
55+
var e ErrorWithExtendedCode
56+
if errors.As(err, &e) {
57+
return &oas.ErrorStatusCode{
58+
StatusCode: e.Code,
59+
Response: oas.Error{
60+
Error: censor(e.Message),
61+
ErrorCode: extendedCode(e.ExtendedCode),
62+
},
63+
}
2864
}
2965
if s, ok := status.FromError(err); ok {
30-
return &oas.ErrorStatusCode{StatusCode: code, Response: oas.Error{Error: s.Message()}}
66+
return &oas.ErrorStatusCode{StatusCode: defaultCode, Response: oas.Error{Error: censor(s.Message())}}
3167
}
32-
msg := err.Error()
33-
return &oas.ErrorStatusCode{StatusCode: code, Response: oas.Error{Error: msg}}
68+
return &oas.ErrorStatusCode{StatusCode: defaultCode, Response: oas.Error{Error: censor(err.Error())}}
3469
}
3570

3671
func anyToJSONRawMap(a any) map[string]jx.Raw { //todo: переписать этот ужас

pkg/oas/oas_json_gen.go

+18-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/oas/oas_schemas_gen.go

+12-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/references/errors.go

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package references
2+
3+
type ExtendedCode int64
4+
5+
const (
6+
ErrGaslessJettonIsNotSupported ExtendedCode = iota + 40_000
7+
ErrGaslessTemporary
8+
ErrGaslessSignature
9+
ErrGaslessPendingMessages
10+
ErrGaslessBadRequest
11+
ErrGaslessOperationIsNotSupported
12+
ErrGaslessUserDisabled
13+
ErrGaslessEstimatingCommission
14+
ErrGaslessCommission
15+
ErrGaslessBalance
16+
ErrGaslessBootstrapTransferDisabled
17+
ErrGaslessUnknown
18+
)

0 commit comments

Comments
 (0)