diff --git a/services/rfq/api/docs/docs.go b/services/rfq/api/docs/docs.go new file mode 100644 index 0000000000..0c9aadbced --- /dev/null +++ b/services/rfq/api/docs/docs.go @@ -0,0 +1,212 @@ +// Package docs Code generated by swaggo/swag. DO NOT EDIT +package docs + +import "github.com/swaggo/swag" + +const docTemplate = `{ + "schemes": {{ marshal .Schemes }}, + "swagger": "2.0", + "info": { + "description": "{{escape .Description}}", + "title": "{{.Title}}", + "contact": {}, + "version": "{{.Version}}" + }, + "host": "{{.Host}}", + "basePath": "{{.BasePath}}", + "paths": { + "/quotes": { + "get": { + "description": "get quotes from all relayers.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "quotes" + ], + "summary": "get quotes from all relayers.", + "parameters": [ + { + "type": "integer", + "description": "origin chain id to filter quotes by", + "name": "originChainID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "origin chain id to filter quotes by", + "name": "originTokenAddr", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "destination chain id to filter quotes by", + "name": "destChainID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "destination token address to filter quotes by", + "name": "destTokenAddr", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "relayer address to filter quotes by", + "name": "relayerAddr", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/model.GetQuoteResponse" + } + } + } + } + }, + "put": { + "description": "upsert a quote from relayer.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "quotes" + ], + "summary": "get quotes from all relayers.", + "parameters": [ + { + "description": "query params", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/model.PutQuoteRequest" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + } + }, + "definitions": { + "model.GetQuoteResponse": { + "type": "object", + "properties": { + "dest_amount": { + "description": "DestAmount is the max amount of liquidity which exists for a given destination token, provided in the destination token decimals", + "type": "string" + }, + "dest_chain_id": { + "description": "DestChainID is the chain which the relayer is willing to relay to", + "type": "integer" + }, + "dest_fast_bridge_address": { + "description": "DestFastBridgeAddress is the address of the fast bridge contract on the destination chain", + "type": "string" + }, + "dest_token_addr": { + "description": "DestToken is the token address for which the relayer willing to relay to", + "type": "string" + }, + "fixed_fee": { + "description": "FixedFee is the fixed fee for the quote, provided in the destination token terms", + "type": "string" + }, + "max_origin_amount": { + "description": "MaxOriginAmount is the maximum amount of origin tokens bridgeable", + "type": "string" + }, + "origin_chain_id": { + "description": "OriginChainID is the chain which the relayer is willing to relay from", + "type": "integer" + }, + "origin_fast_bridge_address": { + "description": "OriginFastBridgeAddress is the address of the fast bridge contract on the origin chain", + "type": "string" + }, + "origin_token_addr": { + "description": "OriginTokenAddr is the token address for which the relayer willing to relay from", + "type": "string" + }, + "relayer_addr": { + "description": "Address of the relayer providing the quote", + "type": "string" + }, + "updated_at": { + "description": "UpdatedAt is the time that the quote was last upserted", + "type": "string" + } + } + }, + "model.PutQuoteRequest": { + "type": "object", + "properties": { + "dest_amount": { + "type": "string" + }, + "dest_chain_id": { + "type": "integer" + }, + "dest_fast_bridge_address": { + "type": "string" + }, + "dest_token_addr": { + "type": "string" + }, + "fixed_fee": { + "type": "string" + }, + "max_origin_amount": { + "type": "string" + }, + "origin_chain_id": { + "type": "integer" + }, + "origin_fast_bridge_address": { + "type": "string" + }, + "origin_token_addr": { + "type": "string" + } + } + } + } +}` + +// SwaggerInfo holds exported Swagger Info so clients can modify it +var SwaggerInfo = &swag.Spec{ + Version: "", + Host: "", + BasePath: "", + Schemes: []string{}, + Title: "", + Description: "", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate, + LeftDelim: "{{", + RightDelim: "}}", +} + +func init() { + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) +} diff --git a/services/rfq/api/docs/swagger.json b/services/rfq/api/docs/swagger.json new file mode 100644 index 0000000000..40ea8dbc65 --- /dev/null +++ b/services/rfq/api/docs/swagger.json @@ -0,0 +1,183 @@ +{ + "swagger": "2.0", + "info": { + "contact": {} + }, + "paths": { + "/quotes": { + "get": { + "description": "get quotes from all relayers.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "quotes" + ], + "summary": "get quotes from all relayers.", + "parameters": [ + { + "type": "integer", + "description": "origin chain id to filter quotes by", + "name": "originChainID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "origin chain id to filter quotes by", + "name": "originTokenAddr", + "in": "path", + "required": true + }, + { + "type": "integer", + "description": "destination chain id to filter quotes by", + "name": "destChainID", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "destination token address to filter quotes by", + "name": "destTokenAddr", + "in": "path", + "required": true + }, + { + "type": "string", + "description": "relayer address to filter quotes by", + "name": "relayerAddr", + "in": "path", + "required": true + } + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "type": "array", + "items": { + "$ref": "#/definitions/model.GetQuoteResponse" + } + } + } + } + }, + "put": { + "description": "upsert a quote from relayer.", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "tags": [ + "quotes" + ], + "summary": "get quotes from all relayers.", + "parameters": [ + { + "description": "query params", + "name": "request", + "in": "body", + "required": true, + "schema": { + "$ref": "#/definitions/model.PutQuoteRequest" + } + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + } + }, + "definitions": { + "model.GetQuoteResponse": { + "type": "object", + "properties": { + "dest_amount": { + "description": "DestAmount is the max amount of liquidity which exists for a given destination token, provided in the destination token decimals", + "type": "string" + }, + "dest_chain_id": { + "description": "DestChainID is the chain which the relayer is willing to relay to", + "type": "integer" + }, + "dest_fast_bridge_address": { + "description": "DestFastBridgeAddress is the address of the fast bridge contract on the destination chain", + "type": "string" + }, + "dest_token_addr": { + "description": "DestToken is the token address for which the relayer willing to relay to", + "type": "string" + }, + "fixed_fee": { + "description": "FixedFee is the fixed fee for the quote, provided in the destination token terms", + "type": "string" + }, + "max_origin_amount": { + "description": "MaxOriginAmount is the maximum amount of origin tokens bridgeable", + "type": "string" + }, + "origin_chain_id": { + "description": "OriginChainID is the chain which the relayer is willing to relay from", + "type": "integer" + }, + "origin_fast_bridge_address": { + "description": "OriginFastBridgeAddress is the address of the fast bridge contract on the origin chain", + "type": "string" + }, + "origin_token_addr": { + "description": "OriginTokenAddr is the token address for which the relayer willing to relay from", + "type": "string" + }, + "relayer_addr": { + "description": "Address of the relayer providing the quote", + "type": "string" + }, + "updated_at": { + "description": "UpdatedAt is the time that the quote was last upserted", + "type": "string" + } + } + }, + "model.PutQuoteRequest": { + "type": "object", + "properties": { + "dest_amount": { + "type": "string" + }, + "dest_chain_id": { + "type": "integer" + }, + "dest_fast_bridge_address": { + "type": "string" + }, + "dest_token_addr": { + "type": "string" + }, + "fixed_fee": { + "type": "string" + }, + "max_origin_amount": { + "type": "string" + }, + "origin_chain_id": { + "type": "integer" + }, + "origin_fast_bridge_address": { + "type": "string" + }, + "origin_token_addr": { + "type": "string" + } + } + } + } +} \ No newline at end of file diff --git a/services/rfq/api/docs/swagger.yaml b/services/rfq/api/docs/swagger.yaml new file mode 100644 index 0000000000..1d78a99836 --- /dev/null +++ b/services/rfq/api/docs/swagger.yaml @@ -0,0 +1,132 @@ +definitions: + model.GetQuoteResponse: + properties: + dest_amount: + description: DestAmount is the max amount of liquidity which exists for a + given destination token, provided in the destination token decimals + type: string + dest_chain_id: + description: DestChainID is the chain which the relayer is willing to relay + to + type: integer + dest_fast_bridge_address: + description: DestFastBridgeAddress is the address of the fast bridge contract + on the destination chain + type: string + dest_token_addr: + description: DestToken is the token address for which the relayer willing + to relay to + type: string + fixed_fee: + description: FixedFee is the fixed fee for the quote, provided in the destination + token terms + type: string + max_origin_amount: + description: MaxOriginAmount is the maximum amount of origin tokens bridgeable + type: string + origin_chain_id: + description: OriginChainID is the chain which the relayer is willing to relay + from + type: integer + origin_fast_bridge_address: + description: OriginFastBridgeAddress is the address of the fast bridge contract + on the origin chain + type: string + origin_token_addr: + description: OriginTokenAddr is the token address for which the relayer willing + to relay from + type: string + relayer_addr: + description: Address of the relayer providing the quote + type: string + updated_at: + description: UpdatedAt is the time that the quote was last upserted + type: string + type: object + model.PutQuoteRequest: + properties: + dest_amount: + type: string + dest_chain_id: + type: integer + dest_fast_bridge_address: + type: string + dest_token_addr: + type: string + fixed_fee: + type: string + max_origin_amount: + type: string + origin_chain_id: + type: integer + origin_fast_bridge_address: + type: string + origin_token_addr: + type: string + type: object +info: + contact: {} +paths: + /quotes: + get: + consumes: + - application/json + description: get quotes from all relayers. + parameters: + - description: origin chain id to filter quotes by + in: path + name: originChainID + required: true + type: integer + - description: origin chain id to filter quotes by + in: path + name: originTokenAddr + required: true + type: string + - description: destination chain id to filter quotes by + in: path + name: destChainID + required: true + type: integer + - description: destination token address to filter quotes by + in: path + name: destTokenAddr + required: true + type: string + - description: relayer address to filter quotes by + in: path + name: relayerAddr + required: true + type: string + produces: + - application/json + responses: + "200": + description: OK + schema: + items: + $ref: '#/definitions/model.GetQuoteResponse' + type: array + summary: get quotes from all relayers. + tags: + - quotes + put: + consumes: + - application/json + description: upsert a quote from relayer. + parameters: + - description: query params + in: body + name: request + required: true + schema: + $ref: '#/definitions/model.PutQuoteRequest' + produces: + - application/json + responses: + "200": + description: OK + summary: get quotes from all relayers. + tags: + - quotes +swagger: "2.0" diff --git a/services/rfq/api/main.go b/services/rfq/api/main.go index 5933b0183f..7ff9142406 100644 --- a/services/rfq/api/main.go +++ b/services/rfq/api/main.go @@ -8,6 +8,8 @@ import ( "github.com/synapsecns/sanguine/services/rfq/api/metadata" ) +//go:generate go run github.com/swaggo/swag/cmd/swag init + // main is the entry point for the RFQ API Server func main() { cmd.Start(os.Args, metadata.BuildInfo()) diff --git a/services/rfq/api/rest/handler.go b/services/rfq/api/rest/handler.go index c65f0762ea..5a2143b627 100644 --- a/services/rfq/api/rest/handler.go +++ b/services/rfq/api/rest/handler.go @@ -26,6 +26,16 @@ func NewHandler(db db.APIDB) *Handler { // // PUT /quotes // @dev Protected Method: Authentication is handled through middleware in server.go. +// nolint: cyclop +// @Summary get quotes from all relayers. +// @Schemes +// @Description upsert a quote from relayer. +// @Param request body model.PutQuoteRequest true "query params" +// @Tags quotes +// @Accept json +// @Produce json +// @Success 200 +// @Router /quotes [put]. func (h *Handler) ModifyQuote(c *gin.Context) { // Retrieve the request from context req, exists := c.Get("putRequest") @@ -84,6 +94,20 @@ func (h *Handler) ModifyQuote(c *gin.Context) { // GetQuotes retrieves all quotes from the database. // GET /quotes. // nolint: cyclop +// PingExample godoc +// @Summary get quotes from all relayers. +// @Schemes +// @Param originChainID path int true "origin chain id to filter quotes by" +// @Param originTokenAddr path string true "origin chain id to filter quotes by" +// @Param destChainID path int true "destination chain id to filter quotes by" +// @Param destTokenAddr path string true "destination token address to filter quotes by" +// @Param relayerAddr path string true "relayer address to filter quotes by" +// @Description get quotes from all relayers. +// @Tags quotes +// @Accept json +// @Produce json +// @Success 200 {array} model.GetQuoteResponse +// @Router /quotes [get]. func (h *Handler) GetQuotes(c *gin.Context) { originChainIDStr := c.Query("originChainID") originTokenAddr := c.Query("originTokenAddr") @@ -134,9 +158,3 @@ func (h *Handler) GetQuotes(c *gin.Context) { } c.JSON(http.StatusOK, quotes) } - -// GetFilteredQuotes retrieves filtered quotes from the database. -// GET /quotes?destChainId=&destTokenAddr=&destAmount=. -func (h *Handler) GetFilteredQuotes(c *gin.Context) { - // Implement logic to fetch and return filtered quotes -} diff --git a/services/rfq/api/rest/server.go b/services/rfq/api/rest/server.go index caec48421f..76dd5b4eb3 100644 --- a/services/rfq/api/rest/server.go +++ b/services/rfq/api/rest/server.go @@ -8,6 +8,8 @@ import ( "time" "github.com/ipfs/go-log" + swaggerfiles "github.com/swaggo/files" + ginSwagger "github.com/swaggo/gin-swagger" "github.com/synapsecns/sanguine/core/ginhelper" "github.com/ethereum/go-ethereum/accounts/abi/bind" @@ -19,6 +21,7 @@ import ( omniClient "github.com/synapsecns/sanguine/services/omnirpc/client" "github.com/synapsecns/sanguine/services/rfq/api/config" "github.com/synapsecns/sanguine/services/rfq/api/db" + "github.com/synapsecns/sanguine/services/rfq/api/docs" "github.com/synapsecns/sanguine/services/rfq/api/model" "github.com/synapsecns/sanguine/services/rfq/contracts/fastbridge" ) @@ -56,6 +59,8 @@ func NewAPI( return nil, fmt.Errorf("store is nil") } + docs.SwaggerInfo.Title = "RFQ Quoter API" + bridges := make(map[uint32]*fastbridge.FastBridge) for chainID, bridge := range cfg.Bridges { chainClient, err := omniRPCClient.GetChainClient(ctx, int(chainID)) @@ -89,6 +94,7 @@ func (r *QuoterAPIServer) Run(ctx context.Context) error { // TODO: Use Gin Helper engine := ginhelper.New(logger) h := NewHandler(r.db) + engine.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler)) // Apply AuthMiddleware only to the PUT route quotesPut := engine.Group(QuoteRoute) @@ -97,7 +103,6 @@ func (r *QuoterAPIServer) Run(ctx context.Context) error { // GET routes without the AuthMiddleware // engine.PUT("/quotes", h.ModifyQuote) engine.GET(QuoteRoute, h.GetQuotes) - engine.GET(fmt.Sprintf("%s/filter", QuoteRoute), h.GetFilteredQuotes) r.engine = engine diff --git a/services/rfq/go.mod b/services/rfq/go.mod index 1b2fe2e34d..00f8c07b5a 100644 --- a/services/rfq/go.mod +++ b/services/rfq/go.mod @@ -19,6 +19,9 @@ require ( github.com/puzpuzpuz/xsync/v2 v2.5.1 github.com/shopspring/decimal v1.3.1 github.com/stretchr/testify v1.8.4 + github.com/swaggo/files v1.0.1 + github.com/swaggo/gin-swagger v1.6.0 + github.com/swaggo/swag v1.16.3 github.com/synapsecns/sanguine/contrib/screener-api v0.0.0-00010101000000-000000000000 github.com/synapsecns/sanguine/core v0.0.0-00010101000000-000000000000 github.com/synapsecns/sanguine/ethergo v0.1.0 @@ -48,10 +51,13 @@ require ( github.com/DataDog/zstd v1.5.2 // indirect github.com/DenrianWeiss/tracely v0.0.0-20220624070317-49cf8afaaf18 // indirect github.com/ImVexed/fasturl v0.0.0-20230304231329-4e41488060f3 // indirect + github.com/KyleBanks/depth v1.2.1 // indirect github.com/LK4d4/trylock v0.0.0-20191027065348-ff7e133a5c54 // indirect github.com/Microsoft/go-winio v0.6.1 // indirect github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // indirect + github.com/PuerkitoBio/purell v1.1.1 // indirect + github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/Soft/iter v0.1.0 // indirect github.com/VictoriaMetrics/fastcache v1.12.1 // indirect github.com/agnivade/levenshtein v1.1.1 // indirect @@ -128,6 +134,10 @@ require ( github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-ole/go-ole v1.3.0 // indirect + github.com/go-openapi/jsonpointer v0.19.5 // indirect + github.com/go-openapi/jsonreference v0.19.6 // indirect + github.com/go-openapi/spec v0.20.4 // indirect + github.com/go-openapi/swag v0.22.3 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.15.3 // indirect @@ -174,6 +184,7 @@ require ( github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect + github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kevinburke/ssh_config v1.2.0 // indirect @@ -183,6 +194,7 @@ require ( github.com/kr/text v0.2.0 // indirect github.com/leodido/go-urn v1.2.4 // indirect github.com/libp2p/go-libp2p v0.33.0 // indirect + github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect @@ -294,6 +306,7 @@ require ( k8s.io/apimachinery v0.25.5 // indirect k8s.io/klog/v2 v2.80.1 // indirect k8s.io/utils v0.0.0-20221128185143-99ec85e7a448 // indirect + sigs.k8s.io/yaml v1.3.0 // indirect ) replace ( diff --git a/services/rfq/go.sum b/services/rfq/go.sum index 1861fd21ae..c63f8aa8ec 100644 --- a/services/rfq/go.sum +++ b/services/rfq/go.sum @@ -88,6 +88,8 @@ github.com/Flaque/filet v0.0.0-20201012163910-45f684403088/go.mod h1:TK+jB3mBs+8 github.com/ImVexed/fasturl v0.0.0-20230304231329-4e41488060f3 h1:ClzzXMDDuUbWfNNZqGeYq4PnYOlwlOVIvSyNaIy0ykg= github.com/ImVexed/fasturl v0.0.0-20230304231329-4e41488060f3/go.mod h1:we0YA5CsBbH5+/NUzC/AlMmxaDtWlXeNsqrwXjTzmzA= github.com/Joker/hpp v1.0.0/go.mod h1:8x5n+M1Hp5hC0g8okX3sR3vFQwynaX/UgSOM9MeBKzY= +github.com/KyleBanks/depth v1.2.1 h1:5h8fQADFrWtarTdtDudMmGsC7GPbOAu6RVB3ffsVFHc= +github.com/KyleBanks/depth v1.2.1/go.mod h1:jzSb9d0L43HxTQfT+oSA1EEp2q+ne2uh6XgeJcm8brE= github.com/LK4D4/trylock v0.0.0-20191027065348-ff7e133a5c54 h1:sg9CWNOhr58hMGmJ0q7x7jQ/B1RK/GyHNmeaYCJos9M= github.com/LK4D4/trylock v0.0.0-20191027065348-ff7e133a5c54/go.mod h1:uHbOgfPowb74TKlV4AR5Az2haG6evxzM8Lmj1Xil25E= github.com/LK4d4/trylock v0.0.0-20191027065348-ff7e133a5c54 h1:mD+/7fgGmTO9w3g8xYfovo7GBSkyjkmQiacVj9VPx+0= @@ -100,6 +102,10 @@ github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8 github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= +github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Shopify/goreferrer v0.0.0-20181106222321-ec9c9a553398/go.mod h1:a1uqRtAwp2Xwc6WNPJEufxJ7fx3npB4UV/JOLmbu5I0= github.com/Soft/iter v0.1.0 h1:fEWgwubt0cnnJo3Vd2IzYcaJ5ORI/dJDkaC3loI7Ys8= github.com/Soft/iter v0.1.0/go.mod h1:8brXuNcweP5AZyF0Yzjvje+IR/6RNFyyLF6DTMiPXRc= @@ -389,6 +395,8 @@ github.com/getsentry/sentry-go v0.18.0/go.mod h1:Kgon4Mby+FJ7ZWHFUAZgVaIa8sxHtnR github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/cors v1.4.0 h1:oJ6gwtUl3lqV0WEIwM/LxPF1QZ5qe2lGWdY2+bz7y0g= github.com/gin-contrib/cors v1.4.0/go.mod h1:bs9pNM0x/UsmHPBWT2xZz9ROh8xYjYkiURUfmBoMlcs= +github.com/gin-contrib/gzip v0.0.6 h1:NjcunTcGAj5CO1gn4N8jHOSIeRFHIbn51z6K+xaN4d4= +github.com/gin-contrib/gzip v0.0.6/go.mod h1:QOJlmV2xmayAjkNS2Y8NQsMneuRShOU/kjovCXNuzzk= github.com/gin-contrib/requestid v0.0.6 h1:mGcxTnHQ45F6QU5HQRgQUDsAfHprD3P7g2uZ4cSZo9o= github.com/gin-contrib/requestid v0.0.6/go.mod h1:9i4vKATX/CdggbkY252dPVasgVucy/ggBeELXuQztm4= github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= @@ -437,8 +445,17 @@ github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dT github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-ole/go-ole v1.3.0 h1:Dt6ye7+vXGIKZ7Xtk4s6/xVdGDQynvom7xCFEdWr6uE= github.com/go-ole/go-ole v1.3.0/go.mod h1:5LS6F96DhAwUc7C+1HLexzMXY1xGRSryjyPPKW6zv78= +github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUeOFYEICuY= github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= +github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= +github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= +github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= +github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= +github.com/go-openapi/swag v0.22.3 h1:yMBqmnQ0gyZvEb/+KzuWZOXgllrXT4SADYbvDaXHv/g= +github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -683,6 +700,8 @@ github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= @@ -762,6 +781,9 @@ github.com/lmittmann/w3 v0.10.0/go.mod h1:AydD3eqJiyg7tubFve39JL025kZr8QWO1lemXl github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +github.com/mailru/easyjson v0.7.6/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= @@ -851,6 +873,7 @@ github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= github.com/neverlee/keymutex v0.0.0-20171121013845-f593aa834bf9 h1:UfW5pM66x0MWE72ySrpd2Ymrn+b62kNHirozKkY3ojE= github.com/neverlee/keymutex v0.0.0-20171121013845-f593aa834bf9/go.mod h1:3hf2IoUXDKjCg/EuqSLUB5TY8StGS3haWYJiqzP907c= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= github.com/nsmithuk/local-kms v0.0.0-20220503165244-1bbbfed09b08 h1:Jt0FS0td/3yEMxXoiCmwShR+LfzzVd7/MMdZo4121u8= github.com/nsmithuk/local-kms v0.0.0-20220503165244-1bbbfed09b08/go.mod h1:F0zq7SoYkgpbXrZcXsf+S6nvbRjczBkJrMjwTAYb7e8= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= @@ -1030,6 +1053,12 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/summerwind/h2spec v2.2.1+incompatible/go.mod h1:eP7IHGVDEe9cbCxRNtmGfII77lBvLgJLNfJjTaKa9sI= +github.com/swaggo/files v1.0.1 h1:J1bVJ4XHZNq0I46UU90611i9/YzdrF7x92oX1ig5IdE= +github.com/swaggo/files v1.0.1/go.mod h1:0qXmMNH6sXNf+73t65aKeB+ApmgxdnkQzVTAj2uaMUg= +github.com/swaggo/gin-swagger v1.6.0 h1:y8sxvQ3E20/RCyrXeFfg60r6H0Z+SwpTjMYsMm+zy8M= +github.com/swaggo/gin-swagger v1.6.0/go.mod h1:BG00cCEy294xtVpyIAHG6+e2Qzj/xKlRdOqDkvq0uzo= +github.com/swaggo/swag v1.16.3 h1:PnCYjPCah8FK4I26l2F/KQ4yz3sILcVUN3cTlBFA9Pg= +github.com/swaggo/swag v1.16.3/go.mod h1:DImHIuOFXKpMFAQjcC7FG4m3Dg4+QuUgUzJmKjI/gRk= github.com/synapsecns/fasthttp-http2 v1.0.0 h1:G1/8AKgAzVImHpGbCGZo8w4c0kUBXb4eRKkMlWUW4eA= github.com/synapsecns/fasthttp-http2 v1.0.0/go.mod h1:QM9mQS/FygGB3PdvmW8a0/70FirWmEZVvj6Dlo1pisw= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -1303,6 +1332,7 @@ golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210220033124-5f55cee0dc0d/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1310,6 +1340,7 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220906165146-f3363e06e74c/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= +golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= @@ -1401,6 +1432,7 @@ golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420205809-ac73e9fd8988/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1659,6 +1691,7 @@ gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLks gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1689,6 +1722,7 @@ gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20191120175047-4206685974f2/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= @@ -1725,3 +1759,5 @@ rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8 rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=